From a86586599840bfbe26a783bfed8664c7ef491f70 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sat, 31 Jan 2026 21:08:08 +0800 Subject: [PATCH 01/98] =?UTF-8?q?=E4=BD=BF=E7=94=A8=20=E6=9C=80=E6=96=B0?= =?UTF-8?q?=E7=9A=84=E6=96=87=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../toolgood/algorithm/math/mathLexer.java | 3433 +++++---- .../toolgood/algorithm/math/mathParser.java | 6238 ++++++++--------- .../toolgood/algorithm/math/mathVisitor.java | 35 +- 3 files changed, 4722 insertions(+), 4984 deletions(-) diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathLexer.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathLexer.java index cc6d37544..dfaec60c2 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathLexer.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathLexer.java @@ -49,14 +49,14 @@ public class mathLexer extends Lexer { NEGBINOMDIST=200, POISSON=201, TDIST=202, TINV=203, WEIBULL=204, URLENCODE=205, URLDECODE=206, HTMLENCODE=207, HTMLDECODE=208, BASE64TOTEXT=209, BASE64URLTOTEXT=210, TEXTTOBASE64=211, TEXTTOBASE64URL=212, REGEX=213, REGEXREPALCE=214, ISREGEX=215, - GUID=216, MD5=217, SHA1=218, SHA256=219, SHA512=220, CRC32=221, HMACMD5=222, - HMACSHA1=223, HMACSHA256=224, HMACSHA512=225, TRIMSTART=226, TRIMEND=227, - INDEXOF=228, LASTINDEXOF=229, SPLIT=230, JOIN=231, SUBSTRING=232, STARTSWITH=233, - ENDSWITH=234, ISNULLOREMPTY=235, ISNULLORWHITESPACE=236, REMOVESTART=237, - REMOVEEND=238, JSON=239, VLOOKUP=240, LOOKUP=241, ARRAY=242, ALGORITHMVERSION=243, - ADDYEARS=244, ADDMONTHS=245, ADDDAYS=246, ADDHOURS=247, ADDMINUTES=248, - ADDSECONDS=249, TIMESTAMP=250, HAS=251, HASVALUE=252, PARAM=253, PARAMETER=254, - PARAMETER2=255, WS=256, COMMENT=257, LINE_COMMENT=258; + GUID=216, MD5=217, SHA1=218, SHA256=219, SHA512=220, HMACMD5=221, HMACSHA1=222, + HMACSHA256=223, HMACSHA512=224, TRIMSTART=225, TRIMEND=226, INDEXOF=227, + LASTINDEXOF=228, SPLIT=229, JOIN=230, SUBSTRING=231, STARTSWITH=232, ENDSWITH=233, + ISNULLOREMPTY=234, ISNULLORWHITESPACE=235, REMOVESTART=236, REMOVEEND=237, + JSON=238, LOOKCEILING=239, LOOKFLOOR=240, ARRAY=241, ALGORITHMVERSION=242, + ADDYEARS=243, ADDMONTHS=244, ADDDAYS=245, ADDHOURS=246, ADDMINUTES=247, + ADDSECONDS=248, TIMESTAMP=249, HAS=250, HASVALUE=251, PARAM=252, PARAMETER=253, + WS=254, COMMENT=255, LINE_COMMENT=256; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -96,13 +96,13 @@ private static String[] makeRuleNames() { "TINV", "WEIBULL", "URLENCODE", "URLDECODE", "HTMLENCODE", "HTMLDECODE", "BASE64TOTEXT", "BASE64URLTOTEXT", "TEXTTOBASE64", "TEXTTOBASE64URL", "REGEX", "REGEXREPALCE", "ISREGEX", "GUID", "MD5", "SHA1", "SHA256", - "SHA512", "CRC32", "HMACMD5", "HMACSHA1", "HMACSHA256", "HMACSHA512", - "TRIMSTART", "TRIMEND", "INDEXOF", "LASTINDEXOF", "SPLIT", "JOIN", "SUBSTRING", - "STARTSWITH", "ENDSWITH", "ISNULLOREMPTY", "ISNULLORWHITESPACE", "REMOVESTART", - "REMOVEEND", "JSON", "VLOOKUP", "LOOKUP", "ARRAY", "ALGORITHMVERSION", - "ADDYEARS", "ADDMONTHS", "ADDDAYS", "ADDHOURS", "ADDMINUTES", "ADDSECONDS", - "TIMESTAMP", "HAS", "HASVALUE", "PARAM", "PARAMETER", "PARAMETER2", "FullWidthLetter", - "WS", "COMMENT", "LINE_COMMENT" + "SHA512", "HMACMD5", "HMACSHA1", "HMACSHA256", "HMACSHA512", "TRIMSTART", + "TRIMEND", "INDEXOF", "LASTINDEXOF", "SPLIT", "JOIN", "SUBSTRING", "STARTSWITH", + "ENDSWITH", "ISNULLOREMPTY", "ISNULLORWHITESPACE", "REMOVESTART", "REMOVEEND", + "JSON", "LOOKCEILING", "LOOKFLOOR", "ARRAY", "ALGORITHMVERSION", "ADDYEARS", + "ADDMONTHS", "ADDDAYS", "ADDHOURS", "ADDMINUTES", "ADDSECONDS", "TIMESTAMP", + "HAS", "HASVALUE", "PARAM", "PARAMETER", "FullWidthLetter", "WS", "COMMENT", + "LINE_COMMENT" }; } public static final String[] ruleNames = makeRuleNames(); @@ -114,7 +114,7 @@ private static String[] makeLiteralNames() { "'!=='", "'!='", "'<>'", "'&&'", "'||'", "'?'", "':'", "'{'", "'}'", "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'ISNUMBER'", "'ISTEXT'", "'ISERROR'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", - "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", "'TRUE'", "'FALSE'", + "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", "'BIN2HEX'", "'ABS'", "'QUOTIENT'", "'MOD'", "'SIGN'", "'SQRT'", "'TRUNC'", @@ -139,11 +139,11 @@ private static String[] makeLiteralNames() { null, null, null, "'WEIBULL'", "'URLENCODE'", "'URLDECODE'", "'HTMLENCODE'", "'HTMLDECODE'", "'BASE64TOTEXT'", "'BASE64URLTOTEXT'", "'TEXTTOBASE64'", "'TEXTTOBASE64URL'", "'REGEX'", "'REGEXREPALCE'", null, "'GUID'", "'MD5'", - "'SHA1'", "'SHA256'", "'SHA512'", "'CRC32'", "'HMACMD5'", "'HMACSHA1'", - "'HMACSHA256'", "'HMACSHA512'", null, null, "'INDEXOF'", "'LASTINDEXOF'", - "'SPLIT'", "'JOIN'", "'SUBSTRING'", "'STARTSWITH'", "'ENDSWITH'", "'ISNULLOREMPTY'", - "'ISNULLORWHITESPACE'", "'REMOVESTART'", "'REMOVEEND'", "'JSON'", "'VLOOKUP'", - "'LOOKUP'", "'ARRAY'", null, "'ADDYEARS'", "'ADDMONTHS'", "'ADDDAYS'", + "'SHA1'", "'SHA256'", "'SHA512'", "'HMACMD5'", "'HMACSHA1'", "'HMACSHA256'", + "'HMACSHA512'", null, null, "'INDEXOF'", "'LASTINDEXOF'", "'SPLIT'", + "'JOIN'", "'SUBSTRING'", "'STARTSWITH'", "'ENDSWITH'", "'ISNULLOREMPTY'", + "'ISNULLORWHITESPACE'", "'REMOVESTART'", "'REMOVEEND'", "'JSON'", "'LOOKCEILING'", + "'LOOKFLOOR'", "'ARRAY'", null, "'ADDYEARS'", "'ADDMONTHS'", "'ADDDAYS'", "'ADDHOURS'", "'ADDMINUTES'", "'ADDSECONDS'", "'TIMESTAMP'" }; } @@ -178,13 +178,13 @@ private static String[] makeSymbolicNames() { "LOGNORMDIST", "NEGBINOMDIST", "POISSON", "TDIST", "TINV", "WEIBULL", "URLENCODE", "URLDECODE", "HTMLENCODE", "HTMLDECODE", "BASE64TOTEXT", "BASE64URLTOTEXT", "TEXTTOBASE64", "TEXTTOBASE64URL", "REGEX", "REGEXREPALCE", - "ISREGEX", "GUID", "MD5", "SHA1", "SHA256", "SHA512", "CRC32", "HMACMD5", - "HMACSHA1", "HMACSHA256", "HMACSHA512", "TRIMSTART", "TRIMEND", "INDEXOF", - "LASTINDEXOF", "SPLIT", "JOIN", "SUBSTRING", "STARTSWITH", "ENDSWITH", - "ISNULLOREMPTY", "ISNULLORWHITESPACE", "REMOVESTART", "REMOVEEND", "JSON", - "VLOOKUP", "LOOKUP", "ARRAY", "ALGORITHMVERSION", "ADDYEARS", "ADDMONTHS", - "ADDDAYS", "ADDHOURS", "ADDMINUTES", "ADDSECONDS", "TIMESTAMP", "HAS", - "HASVALUE", "PARAM", "PARAMETER", "PARAMETER2", "WS", "COMMENT", "LINE_COMMENT" + "ISREGEX", "GUID", "MD5", "SHA1", "SHA256", "SHA512", "HMACMD5", "HMACSHA1", + "HMACSHA256", "HMACSHA512", "TRIMSTART", "TRIMEND", "INDEXOF", "LASTINDEXOF", + "SPLIT", "JOIN", "SUBSTRING", "STARTSWITH", "ENDSWITH", "ISNULLOREMPTY", + "ISNULLORWHITESPACE", "REMOVESTART", "REMOVEEND", "JSON", "LOOKCEILING", + "LOOKFLOOR", "ARRAY", "ALGORITHMVERSION", "ADDYEARS", "ADDMONTHS", "ADDDAYS", + "ADDHOURS", "ADDMINUTES", "ADDSECONDS", "TIMESTAMP", "HAS", "HASVALUE", + "PARAM", "PARAMETER", "WS", "COMMENT", "LINE_COMMENT" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -246,7 +246,7 @@ public mathLexer(CharStream input) { public ATN getATN() { return _ATN; } private static final String _serializedATNSegment0 = - "\u0004\u0000\u0102\u0b10\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002"+ + "\u0004\u0000\u0100\u0af8\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002"+ "\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002"+ "\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002"+ "\u0007\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002"+ @@ -319,1708 +319,1687 @@ public mathLexer(CharStream input) { "\u0002\u00f8\u0007\u00f8\u0002\u00f9\u0007\u00f9\u0002\u00fa\u0007\u00fa"+ "\u0002\u00fb\u0007\u00fb\u0002\u00fc\u0007\u00fc\u0002\u00fd\u0007\u00fd"+ "\u0002\u00fe\u0007\u00fe\u0002\u00ff\u0007\u00ff\u0002\u0100\u0007\u0100"+ - "\u0002\u0101\u0007\u0101\u0002\u0102\u0007\u0102\u0001\u0000\u0001\u0000"+ - "\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003"+ - "\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006"+ - "\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001\t\u0001\t\u0001\n\u0001"+ - "\n\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001"+ - "\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001"+ - "\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001"+ - "\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001"+ - "\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001"+ - "\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001"+ - "\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001"+ - "\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001"+ - "\u001d\u0004\u001d\u0250\b\u001d\u000b\u001d\f\u001d\u0251\u0003\u001d"+ - "\u0254\b\u001d\u0001\u001d\u0001\u001d\u0005\u001d\u0258\b\u001d\n\u001d"+ - "\f\u001d\u025b\t\u001d\u0001\u001d\u0001\u001d\u0004\u001d\u025f\b\u001d"+ - "\u000b\u001d\f\u001d\u0260\u0003\u001d\u0263\b\u001d\u0001\u001d\u0001"+ - "\u001d\u0001\u001d\u0004\u001d\u0268\b\u001d\u000b\u001d\f\u001d\u0269"+ - "\u0003\u001d\u026c\b\u001d\u0001\u001d\u0001\u001d\u0005\u001d\u0270\b"+ - "\u001d\n\u001d\f\u001d\u0273\t\u001d\u0001\u001d\u0001\u001d\u0004\u001d"+ - "\u0277\b\u001d\u000b\u001d\f\u001d\u0278\u0003\u001d\u027b\b\u001d\u0003"+ - "\u001d\u027d\b\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u0281\b\u001d"+ - "\u0001\u001d\u0001\u001d\u0003\u001d\u0285\b\u001d\u0003\u001d\u0287\b"+ - "\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005\u001e\u028d"+ - "\b\u001e\n\u001e\f\u001e\u0290\t\u001e\u0001\u001e\u0001\u001e\u0001\u001e"+ - "\u0001\u001e\u0001\u001e\u0005\u001e\u0297\b\u001e\n\u001e\f\u001e\u029a"+ - "\t\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005"+ - "\u001e\u02a1\b\u001e\n\u001e\f\u001e\u02a4\t\u001e\u0001\u001e\u0003\u001e"+ - "\u02a7\b\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001\u001f"+ - "\u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001!\u0001!\u0001!\u0001"+ + "\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002"+ + "\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+ + "\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001"+ + "\t\u0001\t\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001"+ + "\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001"+ + "\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+ + "\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001"+ + "\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001"+ + "\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001"+ + "\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001"+ + "\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001"+ + "\u001d\u0001\u001d\u0001\u001d\u0004\u001d\u024c\b\u001d\u000b\u001d\f"+ + "\u001d\u024d\u0003\u001d\u0250\b\u001d\u0001\u001d\u0001\u001d\u0005\u001d"+ + "\u0254\b\u001d\n\u001d\f\u001d\u0257\t\u001d\u0001\u001d\u0001\u001d\u0004"+ + "\u001d\u025b\b\u001d\u000b\u001d\f\u001d\u025c\u0003\u001d\u025f\b\u001d"+ + "\u0001\u001d\u0001\u001d\u0001\u001d\u0004\u001d\u0264\b\u001d\u000b\u001d"+ + "\f\u001d\u0265\u0003\u001d\u0268\b\u001d\u0001\u001d\u0001\u001d\u0005"+ + "\u001d\u026c\b\u001d\n\u001d\f\u001d\u026f\t\u001d\u0001\u001d\u0001\u001d"+ + "\u0004\u001d\u0273\b\u001d\u000b\u001d\f\u001d\u0274\u0003\u001d\u0277"+ + "\b\u001d\u0003\u001d\u0279\b\u001d\u0001\u001d\u0001\u001d\u0003\u001d"+ + "\u027d\b\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u0281\b\u001d\u0003"+ + "\u001d\u0283\b\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005"+ + "\u001e\u0289\b\u001e\n\u001e\f\u001e\u028c\t\u001e\u0001\u001e\u0001\u001e"+ + "\u0001\u001e\u0001\u001e\u0001\u001e\u0005\u001e\u0293\b\u001e\n\u001e"+ + "\f\u001e\u0296\t\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e"+ + "\u0001\u001e\u0005\u001e\u029d\b\u001e\n\u001e\f\u001e\u02a0\t\u001e\u0001"+ + "\u001e\u0003\u001e\u02a3\b\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001!\u0001"+ "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ - "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0003"+ - "!\u02df\b!\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001#\u0001#\u0001#"+ - "\u0001#\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ - "$\u0001$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001"+ - "&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001\'\u0001\'\u0001"+ - "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001"+ - "(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001"+ - ")\u0001)\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001*\u0001"+ - "*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001,\u0001"+ - ",\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001"+ - ",\u0001,\u0001,\u0001-\u0001-\u0001-\u0001-\u0001.\u0001.\u0001.\u0001"+ - "/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u00010\u00011\u0001"+ - "1\u00011\u00011\u00011\u00011\u00012\u00012\u00013\u00013\u00013\u0001"+ - "4\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u0001"+ - "5\u00015\u00015\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u0001"+ - "6\u00016\u00016\u00016\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ - "7\u00017\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u0001"+ - "9\u00019\u00019\u00019\u00019\u00019\u00019\u00019\u0001:\u0001:\u0001"+ - ":\u0001:\u0001:\u0001:\u0001:\u0001:\u0001;\u0001;\u0001;\u0001;\u0001"+ - ";\u0001;\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001"+ - "<\u0001<\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001"+ - ">\u0001>\u0001>\u0001>\u0001>\u0001>\u0001>\u0001>\u0001?\u0001?\u0001"+ - "?\u0001?\u0001?\u0001?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001"+ - "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001B\u0001"+ - "B\u0001B\u0001B\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001"+ - "D\u0001D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001F\u0001"+ - "F\u0001F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001H\u0001H\u0001H\u0001"+ - "H\u0001I\u0001I\u0001I\u0001I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001"+ - "J\u0001J\u0001J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ - "K\u0001K\u0001K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001"+ - "L\u0001M\u0001M\u0001M\u0001M\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ - "O\u0001O\u0001O\u0001O\u0001P\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001"+ - "Q\u0001Q\u0001Q\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001"+ - "S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0001T\u0001U\u0001"+ - "U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001"+ - "W\u0001W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001X\u0001"+ - "X\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001"+ - "Z\u0001Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001"+ - "[\u0001[\u0001[\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001"+ - "\\\u0001\\\u0001]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001"+ - "^\u0001^\u0001^\u0001^\u0001^\u0001^\u0001_\u0001_\u0001_\u0001_\u0001"+ - "_\u0001`\u0001`\u0001`\u0001`\u0001a\u0001a\u0001a\u0001a\u0001a\u0001"+ - "a\u0001a\u0001b\u0001b\u0001b\u0001b\u0001b\u0001c\u0001c\u0001c\u0001"+ - "c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001d\u0001"+ - "d\u0001d\u0001d\u0001d\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001"+ - "e\u0001e\u0001e\u0001e\u0001e\u0001f\u0001f\u0001f\u0001f\u0001f\u0001"+ - "f\u0001g\u0001g\u0001g\u0001g\u0001h\u0001h\u0001h\u0001i\u0001i\u0001"+ - "i\u0001i\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001k\u0001k\u0001"+ - "k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001"+ - "l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001m\u0001m\u0001"+ - "m\u0001m\u0001m\u0001m\u0001m\u0001n\u0001n\u0001n\u0001n\u0001n\u0001"+ - "n\u0001o\u0001o\u0001o\u0001o\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0003p\u04e0\bp\u0001q\u0001q\u0001"+ - "q\u0001q\u0001q\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001s\u0001"+ - "s\u0001s\u0001s\u0001s\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001u\u0001v\u0001v\u0001v\u0001v\u0001v\u0001w\u0001w\u0001w\u0001"+ - "w\u0001w\u0001w\u0001x\u0001x\u0001x\u0001x\u0001x\u0001y\u0001y\u0001"+ - "y\u0001y\u0001z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001"+ - "z\u0001z\u0001z\u0001z\u0003z\u0524\bz\u0001{\u0001{\u0001{\u0001{\u0001"+ - "|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001}\u0001}\u0001}\u0001"+ - "}\u0001}\u0001}\u0001}\u0001}\u0001~\u0001~\u0001~\u0001~\u0001~\u0001"+ - "\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001"+ - "\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001"+ - "\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0082\u0001"+ - "\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001"+ - "\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0083\u0001\u0083\u0001"+ - "\u0084\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0085\u0001"+ - "\u0085\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0086\u0001\u0086\u0001"+ - "\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001"+ - "\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0003\u0086\u0572\b\u0086\u0001"+ - "\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001"+ - "\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001"+ - "\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0089\u0001\u0089\u0001"+ - "\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001"+ - "\u0089\u0001\u0089\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001"+ - "\u008a\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001"+ - "\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008d\u0001\u008d\u0001"+ - "\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008e\u0001\u008e\u0001"+ - "\u008e\u0001\u008e\u0001\u008e\u0001\u008f\u0001\u008f\u0001\u008f\u0001"+ - "\u008f\u0001\u008f\u0001\u008f\u0001\u0090\u0001\u0090\u0001\u0090\u0001"+ - "\u0090\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001"+ - "\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001"+ - "\u0092\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0093\u0001"+ - "\u0093\u0001\u0093\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0094\u0001"+ - "\u0094\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0095\u0001\u0095\u0001"+ - "\u0095\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0095\u0001"+ - "\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001"+ - "\u0096\u0001\u0096\u0001\u0097\u0001\u0097\u0001\u0097\u0001\u0097\u0001"+ - "\u0097\u0001\u0097\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0098\u0001"+ - "\u0098\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0099\u0001\u0099\u0001"+ - "\u0099\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099\u0001"+ - "\u0099\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u009a\u0001\u009a\u0001"+ - "\u009a\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009a\u0001"+ - "\u009b\u0001\u009b\u0001\u009b\u0001\u009b\u0001\u009b\u0001\u009b\u0001"+ - "\u009b\u0001\u009b\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009c\u0001"+ - "\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001"+ - "\u009d\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009f\u0001"+ - "\u009f\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u009f\u0001"+ - "\u009f\u0001\u009f\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001"+ - "\u00a0\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001"+ - "\u00a1\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001"+ - "\u00a2\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001"+ - "\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001"+ - "\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001"+ - "\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001"+ - "\u00a3\u0003\u00a3\u0647\b\u00a3\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001"+ - "\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001"+ - "\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001"+ - "\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001"+ - "\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0003\u00a4\u0663"+ - "\b\u00a4\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001"+ - "\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001"+ - "\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001"+ - "\u00a6\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001"+ - "\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001"+ - "\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a9\u0001"+ - "\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00aa\u0001"+ - "\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001"+ - "\u00aa\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ac\u0001"+ - "\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ad\u0001"+ - "\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001"+ - "\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001"+ - "\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0003"+ - "\u00ae\u06b2\b\u00ae\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001"+ - "\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001"+ - "\u00af\u0001\u00af\u0001\u00af\u0003\u00af\u06c1\b\u00af\u0001\u00b0\u0001"+ - "\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001"+ - "\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001"+ - "\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0003\u00b0\u06d4\b\u00b0\u0001"+ - "\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001"+ - "\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001"+ - "\u00b1\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001"+ - "\u00b2\u0001\u00b3\u0001\u00b3\u0001\u00b3\u0001\u00b3\u0001\u00b3\u0001"+ - "\u00b3\u0001\u00b3\u0001\u00b3\u0003\u00b3\u06f1\b\u00b3\u0001\u00b4\u0001"+ - "\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001"+ - "\u00b4\u0001\u00b4\u0003\u00b4\u06fc\b\u00b4\u0001\u00b5\u0001\u00b5\u0001"+ - "\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001"+ - "\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001"+ - "\u00b5\u0001\u00b5\u0001\u00b5\u0003\u00b5\u070f\b\u00b5\u0001\u00b6\u0001"+ - "\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001"+ - "\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001"+ - "\u00b6\u0001\u00b6\u0003\u00b6\u0720\b\u00b6\u0001\u00b7\u0001\u00b7\u0001"+ - "\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001"+ - "\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001"+ - "\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0003"+ - "\u00b7\u0736\b\u00b7\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001"+ - "\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001"+ - "\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001"+ - "\u00b8\u0001\u00b8\u0003\u00b8\u074a\b\u00b8\u0001\u00b9\u0001\u00b9\u0001"+ - "\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001"+ - "\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001"+ - "\u00b9\u0001\u00b9\u0001\u00b9\u0003\u00b9\u075d\b\u00b9\u0001\u00ba\u0001"+ - "\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001"+ - "\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001"+ - "\u00ba\u0001\u00ba\u0003\u00ba\u076e\b\u00ba\u0001\u00bb\u0001\u00bb\u0001"+ - "\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001"+ - "\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001"+ - "\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0003\u00bb\u0783"+ - "\b\u00bb\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001"+ - "\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001"+ - "\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001"+ - "\u00bc\u0001\u00bc\u0003\u00bc\u0798\b\u00bc\u0001\u00bd\u0001\u00bd\u0001"+ - "\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001"+ - "\u00bd\u0001\u00bd\u0001\u00bd\u0003\u00bd\u07a5\b\u00bd\u0001\u00be\u0001"+ - "\u00be\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00be\u0001"+ - "\u00be\u0001\u00be\u0003\u00be\u07b0\b\u00be\u0001\u00bf\u0001\u00bf\u0001"+ - "\u00bf\u0001\u00bf\u0001\u00bf\u0001\u00bf\u0001\u00bf\u0001\u00c0\u0001"+ - "\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c0\u0001"+ - "\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001"+ - "\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001"+ - "\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001"+ - "\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0003\u00c1\u07d6\b\u00c1\u0001"+ - "\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001"+ - "\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001"+ - "\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0003\u00c2\u07e9"+ - "\b\u00c2\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001"+ - "\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001"+ - "\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001"+ - "\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0003\u00c3\u0801"+ - "\b\u00c3\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001"+ - "\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001"+ - "\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001"+ - "\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0003"+ - "\u00c4\u081a\b\u00c4\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001"+ - "\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001"+ - "\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001"+ - "\u00c5\u0003\u00c5\u082d\b\u00c5\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001"+ - "\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001"+ - "\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001"+ - "\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001"+ - "\u00c6\u0001\u00c6\u0003\u00c6\u0846\b\u00c6\u0001\u00c7\u0001\u00c7\u0001"+ - "\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001"+ - "\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001"+ - "\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001"+ - "\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0003\u00c7\u0861"+ - "\b\u00c7\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001"+ - "\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001"+ - "\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001"+ - "\u00c8\u0001\u00c8\u0003\u00c8\u0876\b\u00c8\u0001\u00c9\u0001\u00c9\u0001"+ - "\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001"+ - "\u00c9\u0001\u00c9\u0001\u00c9\u0003\u00c9\u0883\b\u00c9\u0001\u00ca\u0001"+ - "\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001"+ - "\u00ca\u0001\u00ca\u0003\u00ca\u088e\b\u00ca\u0001\u00cb\u0001\u00cb\u0001"+ - "\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001"+ - "\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001"+ - "\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cd\u0001\u00cd\u0001"+ - "\u00cd\u0001\u00cd\u0001\u00cd\u0001\u00cd\u0001\u00cd\u0001\u00cd\u0001"+ - "\u00cd\u0001\u00cd\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001"+ - "\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001"+ - "\u00ce\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001"+ - "\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001"+ - "\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001"+ - "\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001"+ - "\u00d0\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001"+ - "\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001"+ - "\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d2\u0001"+ - "\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001"+ - "\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001"+ - "\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001"+ - "\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001"+ - "\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d4\u0001\u00d4\u0001"+ - "\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d5\u0001\u00d5\u0001"+ - "\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001"+ - "\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d6\u0001"+ - "\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001"+ - "\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001"+ - "\u00d6\u0003\u00d6\u091d\b\u00d6\u0001\u00d7\u0001\u00d7\u0001\u00d7\u0001"+ - "\u00d7\u0001\u00d7\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001"+ - "\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00da\u0001"+ - "\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001"+ - "\u00db\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db\u0001"+ - "\u00db\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001"+ - "\u00dc\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001"+ - "\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00de\u0001\u00de\u0001\u00de\u0001"+ - "\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001"+ - "\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001"+ - "\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00e0\u0001"+ - "\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001"+ - "\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e1\u0001\u00e1\u0001"+ - "\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001"+ - "\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0003"+ - "\u00e1\u0976\b\u00e1\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001"+ - "\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001"+ - "\u00e2\u0001\u00e2\u0003\u00e2\u0984\b\u00e2\u0001\u00e3\u0001\u00e3\u0001"+ - "\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001"+ - "\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001"+ - "\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001"+ - "\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001"+ - "\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e7\u0001"+ - "\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001"+ - "\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001"+ - "\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001"+ - "\u00e8\u0001\u00e8\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001"+ - "\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00ea\u0001"+ - "\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001"+ - "\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001"+ - "\u00ea\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001"+ - "\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001"+ - "\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001"+ - "\u00eb\u0001\u00eb\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001"+ - "\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001"+ - "\u00ec\u0001\u00ec\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001"+ - "\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001"+ - "\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ef\u0001"+ - "\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001"+ - "\u00ef\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001"+ - "\u00f0\u0001\u00f0\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001"+ - "\u00f1\u0001\u00f1\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001"+ - "\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001"+ - "\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001"+ - "\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001"+ - "\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001"+ - "\u00f2\u0003\u00f2\u0a31\b\u00f2\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001"+ - "\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001"+ - "\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001"+ - "\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f5\u0001\u00f5\u0001"+ - "\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001"+ - "\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001"+ - "\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001"+ - "\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001"+ - "\u00f7\u0001\u00f7\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001"+ - "\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001"+ - "\u00f8\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001"+ - "\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00fa\u0001"+ - "\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001"+ - "\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001"+ - "\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001"+ - "\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001"+ - "\u00fa\u0001\u00fa\u0001\u00fa\u0003\u00fa\u0a93\b\u00fa\u0001\u00fb\u0001"+ - "\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001"+ - "\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001"+ - "\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001"+ - "\u00fb\u0001\u00fb\u0003\u00fb\u0aaa\b\u00fb\u0001\u00fc\u0001\u00fc\u0001"+ - "\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001"+ - "\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001"+ - "\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001"+ - "\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0003"+ - "\u00fc\u0ac6\b\u00fc\u0001\u00fd\u0001\u00fd\u0003\u00fd\u0aca\b\u00fd"+ - "\u0001\u00fd\u0001\u00fd\u0005\u00fd\u0ace\b\u00fd\n\u00fd\f\u00fd\u0ad1"+ - "\t\u00fd\u0001\u00fe\u0001\u00fe\u0004\u00fe\u0ad5\b\u00fe\u000b\u00fe"+ - "\f\u00fe\u0ad6\u0001\u00fe\u0001\u00fe\u0001\u00fe\u0004\u00fe\u0adc\b"+ - "\u00fe\u000b\u00fe\f\u00fe\u0add\u0001\u00fe\u0001\u00fe\u0001\u00fe\u0001"+ - "\u00fe\u0003\u00fe\u0ae4\b\u00fe\u0001\u00fe\u0001\u00fe\u0005\u00fe\u0ae8"+ - "\b\u00fe\n\u00fe\f\u00fe\u0aeb\t\u00fe\u0003\u00fe\u0aed\b\u00fe\u0001"+ - "\u00ff\u0001\u00ff\u0001\u0100\u0004\u0100\u0af2\b\u0100\u000b\u0100\f"+ - "\u0100\u0af3\u0001\u0100\u0001\u0100\u0001\u0101\u0001\u0101\u0001\u0101"+ - "\u0001\u0101\u0005\u0101\u0afc\b\u0101\n\u0101\f\u0101\u0aff\t\u0101\u0001"+ - "\u0101\u0001\u0101\u0001\u0101\u0001\u0101\u0001\u0101\u0001\u0102\u0001"+ - "\u0102\u0001\u0102\u0001\u0102\u0005\u0102\u0b0a\b\u0102\n\u0102\f\u0102"+ - "\u0b0d\t\u0102\u0001\u0102\u0001\u0102\u0001\u0afd\u0000\u0103\u0001\u0001"+ - "\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f"+ - "\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f"+ - "\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017/\u0018"+ - "1\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O("+ - "Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083B\u0085"+ - "C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097L\u0099"+ - "M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00abV\u00ad"+ - "W\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf`\u00c1"+ - "a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3j\u00d5"+ - "k\u00d7l\u00d9m\u00dbn\u00ddo\u00dfp\u00e1q\u00e3r\u00e5s\u00e7t\u00e9"+ - "u\u00ebv\u00edw\u00efx\u00f1y\u00f3z\u00f5{\u00f7|\u00f9}\u00fb~\u00fd"+ - "\u007f\u00ff\u0080\u0101\u0081\u0103\u0082\u0105\u0083\u0107\u0084\u0109"+ - "\u0085\u010b\u0086\u010d\u0087\u010f\u0088\u0111\u0089\u0113\u008a\u0115"+ - "\u008b\u0117\u008c\u0119\u008d\u011b\u008e\u011d\u008f\u011f\u0090\u0121"+ - "\u0091\u0123\u0092\u0125\u0093\u0127\u0094\u0129\u0095\u012b\u0096\u012d"+ - "\u0097\u012f\u0098\u0131\u0099\u0133\u009a\u0135\u009b\u0137\u009c\u0139"+ - "\u009d\u013b\u009e\u013d\u009f\u013f\u00a0\u0141\u00a1\u0143\u00a2\u0145"+ - "\u00a3\u0147\u00a4\u0149\u00a5\u014b\u00a6\u014d\u00a7\u014f\u00a8\u0151"+ - "\u00a9\u0153\u00aa\u0155\u00ab\u0157\u00ac\u0159\u00ad\u015b\u00ae\u015d"+ - "\u00af\u015f\u00b0\u0161\u00b1\u0163\u00b2\u0165\u00b3\u0167\u00b4\u0169"+ - "\u00b5\u016b\u00b6\u016d\u00b7\u016f\u00b8\u0171\u00b9\u0173\u00ba\u0175"+ - "\u00bb\u0177\u00bc\u0179\u00bd\u017b\u00be\u017d\u00bf\u017f\u00c0\u0181"+ - "\u00c1\u0183\u00c2\u0185\u00c3\u0187\u00c4\u0189\u00c5\u018b\u00c6\u018d"+ - "\u00c7\u018f\u00c8\u0191\u00c9\u0193\u00ca\u0195\u00cb\u0197\u00cc\u0199"+ - "\u00cd\u019b\u00ce\u019d\u00cf\u019f\u00d0\u01a1\u00d1\u01a3\u00d2\u01a5"+ - "\u00d3\u01a7\u00d4\u01a9\u00d5\u01ab\u00d6\u01ad\u00d7\u01af\u00d8\u01b1"+ - "\u00d9\u01b3\u00da\u01b5\u00db\u01b7\u00dc\u01b9\u00dd\u01bb\u00de\u01bd"+ - "\u00df\u01bf\u00e0\u01c1\u00e1\u01c3\u00e2\u01c5\u00e3\u01c7\u00e4\u01c9"+ - "\u00e5\u01cb\u00e6\u01cd\u00e7\u01cf\u00e8\u01d1\u00e9\u01d3\u00ea\u01d5"+ - "\u00eb\u01d7\u00ec\u01d9\u00ed\u01db\u00ee\u01dd\u00ef\u01df\u00f0\u01e1"+ - "\u00f1\u01e3\u00f2\u01e5\u00f3\u01e7\u00f4\u01e9\u00f5\u01eb\u00f6\u01ed"+ - "\u00f7\u01ef\u00f8\u01f1\u00f9\u01f3\u00fa\u01f5\u00fb\u01f7\u00fc\u01f9"+ - "\u00fd\u01fb\u00fe\u01fd\u00ff\u01ff\u0000\u0201\u0100\u0203\u0101\u0205"+ - "\u0102\u0001\u0000\r\u0001\u000009\u0001\u000019\u0002\u0000++--\u0001"+ - "\u0000\'\'\u0001\u0000\"\"\u0001\u0000``\u0002\u0000AZ__\u0003\u00000"+ - "9AZ__\u0001\u0000\u3010\u3011\u0001\u0000##\n\u0000\u00c0\u00d6\u00d8"+ - "\u00f6\u00f8\u1fff\u2c00\u2fff\u3040\u318f\u3300\u337f\u3400\u3fff\u4e00"+ - "\u8000\ud7ff\u8000\uf900\u8000\ufaff\u8000\uff00\u8000\ufff0\u0003\u0000"+ - "\t\n\f\r \u0002\u0000\n\n\r\r\u0b6c\u0000\u0001\u0001\u0000\u0000\u0000"+ - "\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000"+ - "\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000\u0000\u0000"+ - "\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000\u0000\u000f"+ - "\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000\u0000\u0013"+ - "\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000\u0000\u0017"+ - "\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000\u0000\u001b"+ - "\u0001\u0000\u0000\u0000\u0000\u001d\u0001\u0000\u0000\u0000\u0000\u001f"+ - "\u0001\u0000\u0000\u0000\u0000!\u0001\u0000\u0000\u0000\u0000#\u0001\u0000"+ - "\u0000\u0000\u0000%\u0001\u0000\u0000\u0000\u0000\'\u0001\u0000\u0000"+ - "\u0000\u0000)\u0001\u0000\u0000\u0000\u0000+\u0001\u0000\u0000\u0000\u0000"+ - "-\u0001\u0000\u0000\u0000\u0000/\u0001\u0000\u0000\u0000\u00001\u0001"+ - "\u0000\u0000\u0000\u00003\u0001\u0000\u0000\u0000\u00005\u0001\u0000\u0000"+ - "\u0000\u00007\u0001\u0000\u0000\u0000\u00009\u0001\u0000\u0000\u0000\u0000"+ - ";\u0001\u0000\u0000\u0000\u0000=\u0001\u0000\u0000\u0000\u0000?\u0001"+ - "\u0000\u0000\u0000\u0000A\u0001\u0000\u0000\u0000\u0000C\u0001\u0000\u0000"+ - "\u0000\u0000E\u0001\u0000\u0000\u0000\u0000G\u0001\u0000\u0000\u0000\u0000"+ - "I\u0001\u0000\u0000\u0000\u0000K\u0001\u0000\u0000\u0000\u0000M\u0001"+ - "\u0000\u0000\u0000\u0000O\u0001\u0000\u0000\u0000\u0000Q\u0001\u0000\u0000"+ - "\u0000\u0000S\u0001\u0000\u0000\u0000\u0000U\u0001\u0000\u0000\u0000\u0000"+ - "W\u0001\u0000\u0000\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000[\u0001"+ - "\u0000\u0000\u0000\u0000]\u0001\u0000\u0000\u0000\u0000_\u0001\u0000\u0000"+ - "\u0000\u0000a\u0001\u0000\u0000\u0000\u0000c\u0001\u0000\u0000\u0000\u0000"+ - "e\u0001\u0000\u0000\u0000\u0000g\u0001\u0000\u0000\u0000\u0000i\u0001"+ - "\u0000\u0000\u0000\u0000k\u0001\u0000\u0000\u0000\u0000m\u0001\u0000\u0000"+ - "\u0000\u0000o\u0001\u0000\u0000\u0000\u0000q\u0001\u0000\u0000\u0000\u0000"+ - "s\u0001\u0000\u0000\u0000\u0000u\u0001\u0000\u0000\u0000\u0000w\u0001"+ - "\u0000\u0000\u0000\u0000y\u0001\u0000\u0000\u0000\u0000{\u0001\u0000\u0000"+ - "\u0000\u0000}\u0001\u0000\u0000\u0000\u0000\u007f\u0001\u0000\u0000\u0000"+ - "\u0000\u0081\u0001\u0000\u0000\u0000\u0000\u0083\u0001\u0000\u0000\u0000"+ - "\u0000\u0085\u0001\u0000\u0000\u0000\u0000\u0087\u0001\u0000\u0000\u0000"+ - "\u0000\u0089\u0001\u0000\u0000\u0000\u0000\u008b\u0001\u0000\u0000\u0000"+ - "\u0000\u008d\u0001\u0000\u0000\u0000\u0000\u008f\u0001\u0000\u0000\u0000"+ - "\u0000\u0091\u0001\u0000\u0000\u0000\u0000\u0093\u0001\u0000\u0000\u0000"+ - "\u0000\u0095\u0001\u0000\u0000\u0000\u0000\u0097\u0001\u0000\u0000\u0000"+ - "\u0000\u0099\u0001\u0000\u0000\u0000\u0000\u009b\u0001\u0000\u0000\u0000"+ - "\u0000\u009d\u0001\u0000\u0000\u0000\u0000\u009f\u0001\u0000\u0000\u0000"+ - "\u0000\u00a1\u0001\u0000\u0000\u0000\u0000\u00a3\u0001\u0000\u0000\u0000"+ - "\u0000\u00a5\u0001\u0000\u0000\u0000\u0000\u00a7\u0001\u0000\u0000\u0000"+ - "\u0000\u00a9\u0001\u0000\u0000\u0000\u0000\u00ab\u0001\u0000\u0000\u0000"+ - "\u0000\u00ad\u0001\u0000\u0000\u0000\u0000\u00af\u0001\u0000\u0000\u0000"+ - "\u0000\u00b1\u0001\u0000\u0000\u0000\u0000\u00b3\u0001\u0000\u0000\u0000"+ - "\u0000\u00b5\u0001\u0000\u0000\u0000\u0000\u00b7\u0001\u0000\u0000\u0000"+ - "\u0000\u00b9\u0001\u0000\u0000\u0000\u0000\u00bb\u0001\u0000\u0000\u0000"+ - "\u0000\u00bd\u0001\u0000\u0000\u0000\u0000\u00bf\u0001\u0000\u0000\u0000"+ - "\u0000\u00c1\u0001\u0000\u0000\u0000\u0000\u00c3\u0001\u0000\u0000\u0000"+ - "\u0000\u00c5\u0001\u0000\u0000\u0000\u0000\u00c7\u0001\u0000\u0000\u0000"+ - "\u0000\u00c9\u0001\u0000\u0000\u0000\u0000\u00cb\u0001\u0000\u0000\u0000"+ - "\u0000\u00cd\u0001\u0000\u0000\u0000\u0000\u00cf\u0001\u0000\u0000\u0000"+ - "\u0000\u00d1\u0001\u0000\u0000\u0000\u0000\u00d3\u0001\u0000\u0000\u0000"+ - "\u0000\u00d5\u0001\u0000\u0000\u0000\u0000\u00d7\u0001\u0000\u0000\u0000"+ - "\u0000\u00d9\u0001\u0000\u0000\u0000\u0000\u00db\u0001\u0000\u0000\u0000"+ - "\u0000\u00dd\u0001\u0000\u0000\u0000\u0000\u00df\u0001\u0000\u0000\u0000"+ - "\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001\u0000\u0000\u0000"+ - "\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001\u0000\u0000\u0000"+ - "\u0000\u00e9\u0001\u0000\u0000\u0000\u0000\u00eb\u0001\u0000\u0000\u0000"+ - "\u0000\u00ed\u0001\u0000\u0000\u0000\u0000\u00ef\u0001\u0000\u0000\u0000"+ - "\u0000\u00f1\u0001\u0000\u0000\u0000\u0000\u00f3\u0001\u0000\u0000\u0000"+ - "\u0000\u00f5\u0001\u0000\u0000\u0000\u0000\u00f7\u0001\u0000\u0000\u0000"+ - "\u0000\u00f9\u0001\u0000\u0000\u0000\u0000\u00fb\u0001\u0000\u0000\u0000"+ - "\u0000\u00fd\u0001\u0000\u0000\u0000\u0000\u00ff\u0001\u0000\u0000\u0000"+ - "\u0000\u0101\u0001\u0000\u0000\u0000\u0000\u0103\u0001\u0000\u0000\u0000"+ - "\u0000\u0105\u0001\u0000\u0000\u0000\u0000\u0107\u0001\u0000\u0000\u0000"+ - "\u0000\u0109\u0001\u0000\u0000\u0000\u0000\u010b\u0001\u0000\u0000\u0000"+ - "\u0000\u010d\u0001\u0000\u0000\u0000\u0000\u010f\u0001\u0000\u0000\u0000"+ - "\u0000\u0111\u0001\u0000\u0000\u0000\u0000\u0113\u0001\u0000\u0000\u0000"+ - "\u0000\u0115\u0001\u0000\u0000\u0000\u0000\u0117\u0001\u0000\u0000\u0000"+ - "\u0000\u0119\u0001\u0000\u0000\u0000\u0000\u011b\u0001\u0000\u0000\u0000"+ - "\u0000\u011d\u0001\u0000\u0000\u0000\u0000\u011f\u0001\u0000\u0000\u0000"+ - "\u0000\u0121\u0001\u0000\u0000\u0000\u0000\u0123\u0001\u0000\u0000\u0000"+ - "\u0000\u0125\u0001\u0000\u0000\u0000\u0000\u0127\u0001\u0000\u0000\u0000"+ - "\u0000\u0129\u0001\u0000\u0000\u0000\u0000\u012b\u0001\u0000\u0000\u0000"+ - "\u0000\u012d\u0001\u0000\u0000\u0000\u0000\u012f\u0001\u0000\u0000\u0000"+ - "\u0000\u0131\u0001\u0000\u0000\u0000\u0000\u0133\u0001\u0000\u0000\u0000"+ - "\u0000\u0135\u0001\u0000\u0000\u0000\u0000\u0137\u0001\u0000\u0000\u0000"+ - "\u0000\u0139\u0001\u0000\u0000\u0000\u0000\u013b\u0001\u0000\u0000\u0000"+ - "\u0000\u013d\u0001\u0000\u0000\u0000\u0000\u013f\u0001\u0000\u0000\u0000"+ - "\u0000\u0141\u0001\u0000\u0000\u0000\u0000\u0143\u0001\u0000\u0000\u0000"+ - "\u0000\u0145\u0001\u0000\u0000\u0000\u0000\u0147\u0001\u0000\u0000\u0000"+ - "\u0000\u0149\u0001\u0000\u0000\u0000\u0000\u014b\u0001\u0000\u0000\u0000"+ - "\u0000\u014d\u0001\u0000\u0000\u0000\u0000\u014f\u0001\u0000\u0000\u0000"+ - "\u0000\u0151\u0001\u0000\u0000\u0000\u0000\u0153\u0001\u0000\u0000\u0000"+ - "\u0000\u0155\u0001\u0000\u0000\u0000\u0000\u0157\u0001\u0000\u0000\u0000"+ - "\u0000\u0159\u0001\u0000\u0000\u0000\u0000\u015b\u0001\u0000\u0000\u0000"+ - "\u0000\u015d\u0001\u0000\u0000\u0000\u0000\u015f\u0001\u0000\u0000\u0000"+ - "\u0000\u0161\u0001\u0000\u0000\u0000\u0000\u0163\u0001\u0000\u0000\u0000"+ - "\u0000\u0165\u0001\u0000\u0000\u0000\u0000\u0167\u0001\u0000\u0000\u0000"+ - "\u0000\u0169\u0001\u0000\u0000\u0000\u0000\u016b\u0001\u0000\u0000\u0000"+ - "\u0000\u016d\u0001\u0000\u0000\u0000\u0000\u016f\u0001\u0000\u0000\u0000"+ - "\u0000\u0171\u0001\u0000\u0000\u0000\u0000\u0173\u0001\u0000\u0000\u0000"+ - "\u0000\u0175\u0001\u0000\u0000\u0000\u0000\u0177\u0001\u0000\u0000\u0000"+ - "\u0000\u0179\u0001\u0000\u0000\u0000\u0000\u017b\u0001\u0000\u0000\u0000"+ - "\u0000\u017d\u0001\u0000\u0000\u0000\u0000\u017f\u0001\u0000\u0000\u0000"+ - "\u0000\u0181\u0001\u0000\u0000\u0000\u0000\u0183\u0001\u0000\u0000\u0000"+ - "\u0000\u0185\u0001\u0000\u0000\u0000\u0000\u0187\u0001\u0000\u0000\u0000"+ - "\u0000\u0189\u0001\u0000\u0000\u0000\u0000\u018b\u0001\u0000\u0000\u0000"+ - "\u0000\u018d\u0001\u0000\u0000\u0000\u0000\u018f\u0001\u0000\u0000\u0000"+ - "\u0000\u0191\u0001\u0000\u0000\u0000\u0000\u0193\u0001\u0000\u0000\u0000"+ - "\u0000\u0195\u0001\u0000\u0000\u0000\u0000\u0197\u0001\u0000\u0000\u0000"+ - "\u0000\u0199\u0001\u0000\u0000\u0000\u0000\u019b\u0001\u0000\u0000\u0000"+ - "\u0000\u019d\u0001\u0000\u0000\u0000\u0000\u019f\u0001\u0000\u0000\u0000"+ - "\u0000\u01a1\u0001\u0000\u0000\u0000\u0000\u01a3\u0001\u0000\u0000\u0000"+ - "\u0000\u01a5\u0001\u0000\u0000\u0000\u0000\u01a7\u0001\u0000\u0000\u0000"+ - "\u0000\u01a9\u0001\u0000\u0000\u0000\u0000\u01ab\u0001\u0000\u0000\u0000"+ - "\u0000\u01ad\u0001\u0000\u0000\u0000\u0000\u01af\u0001\u0000\u0000\u0000"+ - "\u0000\u01b1\u0001\u0000\u0000\u0000\u0000\u01b3\u0001\u0000\u0000\u0000"+ - "\u0000\u01b5\u0001\u0000\u0000\u0000\u0000\u01b7\u0001\u0000\u0000\u0000"+ - "\u0000\u01b9\u0001\u0000\u0000\u0000\u0000\u01bb\u0001\u0000\u0000\u0000"+ - "\u0000\u01bd\u0001\u0000\u0000\u0000\u0000\u01bf\u0001\u0000\u0000\u0000"+ - "\u0000\u01c1\u0001\u0000\u0000\u0000\u0000\u01c3\u0001\u0000\u0000\u0000"+ - "\u0000\u01c5\u0001\u0000\u0000\u0000\u0000\u01c7\u0001\u0000\u0000\u0000"+ - "\u0000\u01c9\u0001\u0000\u0000\u0000\u0000\u01cb\u0001\u0000\u0000\u0000"+ - "\u0000\u01cd\u0001\u0000\u0000\u0000\u0000\u01cf\u0001\u0000\u0000\u0000"+ - "\u0000\u01d1\u0001\u0000\u0000\u0000\u0000\u01d3\u0001\u0000\u0000\u0000"+ - "\u0000\u01d5\u0001\u0000\u0000\u0000\u0000\u01d7\u0001\u0000\u0000\u0000"+ - "\u0000\u01d9\u0001\u0000\u0000\u0000\u0000\u01db\u0001\u0000\u0000\u0000"+ - "\u0000\u01dd\u0001\u0000\u0000\u0000\u0000\u01df\u0001\u0000\u0000\u0000"+ - "\u0000\u01e1\u0001\u0000\u0000\u0000\u0000\u01e3\u0001\u0000\u0000\u0000"+ - "\u0000\u01e5\u0001\u0000\u0000\u0000\u0000\u01e7\u0001\u0000\u0000\u0000"+ - "\u0000\u01e9\u0001\u0000\u0000\u0000\u0000\u01eb\u0001\u0000\u0000\u0000"+ - "\u0000\u01ed\u0001\u0000\u0000\u0000\u0000\u01ef\u0001\u0000\u0000\u0000"+ - "\u0000\u01f1\u0001\u0000\u0000\u0000\u0000\u01f3\u0001\u0000\u0000\u0000"+ - "\u0000\u01f5\u0001\u0000\u0000\u0000\u0000\u01f7\u0001\u0000\u0000\u0000"+ - "\u0000\u01f9\u0001\u0000\u0000\u0000\u0000\u01fb\u0001\u0000\u0000\u0000"+ - "\u0000\u01fd\u0001\u0000\u0000\u0000\u0000\u0201\u0001\u0000\u0000\u0000"+ - "\u0000\u0203\u0001\u0000\u0000\u0000\u0000\u0205\u0001\u0000\u0000\u0000"+ - "\u0001\u0207\u0001\u0000\u0000\u0000\u0003\u0209\u0001\u0000\u0000\u0000"+ - "\u0005\u020b\u0001\u0000\u0000\u0000\u0007\u020d\u0001\u0000\u0000\u0000"+ - "\t\u020f\u0001\u0000\u0000\u0000\u000b\u0211\u0001\u0000\u0000\u0000\r"+ - "\u0213\u0001\u0000\u0000\u0000\u000f\u0215\u0001\u0000\u0000\u0000\u0011"+ - "\u0217\u0001\u0000\u0000\u0000\u0013\u0219\u0001\u0000\u0000\u0000\u0015"+ - "\u021b\u0001\u0000\u0000\u0000\u0017\u021d\u0001\u0000\u0000\u0000\u0019"+ - "\u021f\u0001\u0000\u0000\u0000\u001b\u0221\u0001\u0000\u0000\u0000\u001d"+ - "\u0224\u0001\u0000\u0000\u0000\u001f\u0226\u0001\u0000\u0000\u0000!\u0229"+ - "\u0001\u0000\u0000\u0000#\u022b\u0001\u0000\u0000\u0000%\u022e\u0001\u0000"+ - "\u0000\u0000\'\u0232\u0001\u0000\u0000\u0000)\u0236\u0001\u0000\u0000"+ - "\u0000+\u0239\u0001\u0000\u0000\u0000-\u023c\u0001\u0000\u0000\u0000/"+ - "\u023f\u0001\u0000\u0000\u00001\u0242\u0001\u0000\u0000\u00003\u0244\u0001"+ - "\u0000\u0000\u00005\u0246\u0001\u0000\u0000\u00007\u0248\u0001\u0000\u0000"+ - "\u00009\u024a\u0001\u0000\u0000\u0000;\u0286\u0001\u0000\u0000\u0000="+ - "\u02a6\u0001\u0000\u0000\u0000?\u02a8\u0001\u0000\u0000\u0000A\u02ad\u0001"+ - "\u0000\u0000\u0000C\u02de\u0001\u0000\u0000\u0000E\u02e0\u0001\u0000\u0000"+ - "\u0000G\u02e3\u0001\u0000\u0000\u0000I\u02eb\u0001\u0000\u0000\u0000K"+ - "\u02f4\u0001\u0000\u0000\u0000M\u02fb\u0001\u0000\u0000\u0000O\u0303\u0001"+ - "\u0000\u0000\u0000Q\u030d\u0001\u0000\u0000\u0000S\u0317\u0001\u0000\u0000"+ - "\u0000U\u031e\u0001\u0000\u0000\u0000W\u0324\u0001\u0000\u0000\u0000Y"+ - "\u032b\u0001\u0000\u0000\u0000[\u0339\u0001\u0000\u0000\u0000]\u033d\u0001"+ - "\u0000\u0000\u0000_\u0340\u0001\u0000\u0000\u0000a\u0344\u0001\u0000\u0000"+ - "\u0000c\u0349\u0001\u0000\u0000\u0000e\u034f\u0001\u0000\u0000\u0000g"+ - "\u0351\u0001\u0000\u0000\u0000i\u0354\u0001\u0000\u0000\u0000k\u035c\u0001"+ - "\u0000\u0000\u0000m\u0364\u0001\u0000\u0000\u0000o\u036c\u0001\u0000\u0000"+ - "\u0000q\u0374\u0001\u0000\u0000\u0000s\u037c\u0001\u0000\u0000\u0000u"+ - "\u0384\u0001\u0000\u0000\u0000w\u038c\u0001\u0000\u0000\u0000y\u0394\u0001"+ - "\u0000\u0000\u0000{\u039c\u0001\u0000\u0000\u0000}\u03a4\u0001\u0000\u0000"+ - "\u0000\u007f\u03ac\u0001\u0000\u0000\u0000\u0081\u03b4\u0001\u0000\u0000"+ - "\u0000\u0083\u03b8\u0001\u0000\u0000\u0000\u0085\u03c1\u0001\u0000\u0000"+ - "\u0000\u0087\u03c5\u0001\u0000\u0000\u0000\u0089\u03ca\u0001\u0000\u0000"+ - "\u0000\u008b\u03cf\u0001\u0000\u0000\u0000\u008d\u03d5\u0001\u0000\u0000"+ - "\u0000\u008f\u03d9\u0001\u0000\u0000\u0000\u0091\u03dd\u0001\u0000\u0000"+ - "\u0000\u0093\u03e1\u0001\u0000\u0000\u0000\u0095\u03e8\u0001\u0000\u0000"+ - "\u0000\u0097\u03ef\u0001\u0000\u0000\u0000\u0099\u03f7\u0001\u0000\u0000"+ - "\u0000\u009b\u03ff\u0001\u0000\u0000\u0000\u009d\u0403\u0001\u0000\u0000"+ - "\u0000\u009f\u0408\u0001\u0000\u0000\u0000\u00a1\u040c\u0001\u0000\u0000"+ - "\u0000\u00a3\u0411\u0001\u0000\u0000\u0000\u00a5\u0415\u0001\u0000\u0000"+ - "\u0000\u00a7\u041a\u0001\u0000\u0000\u0000\u00a9\u041f\u0001\u0000\u0000"+ - "\u0000\u00ab\u0425\u0001\u0000\u0000\u0000\u00ad\u042a\u0001\u0000\u0000"+ - "\u0000\u00af\u0430\u0001\u0000\u0000\u0000\u00b1\u0435\u0001\u0000\u0000"+ - "\u0000\u00b3\u043b\u0001\u0000\u0000\u0000\u00b5\u0441\u0001\u0000\u0000"+ - "\u0000\u00b7\u0447\u0001\u0000\u0000\u0000\u00b9\u0451\u0001\u0000\u0000"+ - "\u0000\u00bb\u0459\u0001\u0000\u0000\u0000\u00bd\u0461\u0001\u0000\u0000"+ - "\u0000\u00bf\u0467\u0001\u0000\u0000\u0000\u00c1\u046c\u0001\u0000\u0000"+ - "\u0000\u00c3\u0470\u0001\u0000\u0000\u0000\u00c5\u0477\u0001\u0000\u0000"+ - "\u0000\u00c7\u047c\u0001\u0000\u0000\u0000\u00c9\u0488\u0001\u0000\u0000"+ - "\u0000\u00cb\u048d\u0001\u0000\u0000\u0000\u00cd\u0498\u0001\u0000\u0000"+ - "\u0000\u00cf\u049e\u0001\u0000\u0000\u0000\u00d1\u04a2\u0001\u0000\u0000"+ - "\u0000\u00d3\u04a5\u0001\u0000\u0000\u0000\u00d5\u04a9\u0001\u0000\u0000"+ - "\u0000\u00d7\u04af\u0001\u0000\u0000\u0000\u00d9\u04bb\u0001\u0000\u0000"+ - "\u0000\u00db\u04c3\u0001\u0000\u0000\u0000\u00dd\u04ca\u0001\u0000\u0000"+ - "\u0000\u00df\u04d0\u0001\u0000\u0000\u0000\u00e1\u04df\u0001\u0000\u0000"+ - "\u0000\u00e3\u04e1\u0001\u0000\u0000\u0000\u00e5\u04e6\u0001\u0000\u0000"+ - "\u0000\u00e7\u04ec\u0001\u0000\u0000\u0000\u00e9\u04f1\u0001\u0000\u0000"+ - "\u0000\u00eb\u04fd\u0001\u0000\u0000\u0000\u00ed\u0503\u0001\u0000\u0000"+ - "\u0000\u00ef\u0508\u0001\u0000\u0000\u0000\u00f1\u050e\u0001\u0000\u0000"+ - "\u0000\u00f3\u0513\u0001\u0000\u0000\u0000\u00f5\u0523\u0001\u0000\u0000"+ - "\u0000\u00f7\u0525\u0001\u0000\u0000\u0000\u00f9\u0529\u0001\u0000\u0000"+ - "\u0000\u00fb\u0530\u0001\u0000\u0000\u0000\u00fd\u0538\u0001\u0000\u0000"+ - "\u0000\u00ff\u053d\u0001\u0000\u0000\u0000\u0101\u0543\u0001\u0000\u0000"+ - "\u0000\u0103\u0547\u0001\u0000\u0000\u0000\u0105\u054e\u0001\u0000\u0000"+ - "\u0000\u0107\u0559\u0001\u0000\u0000\u0000\u0109\u055b\u0001\u0000\u0000"+ - "\u0000\u010b\u0560\u0001\u0000\u0000\u0000\u010d\u0571\u0001\u0000\u0000"+ - "\u0000\u010f\u0573\u0001\u0000\u0000\u0000\u0111\u0579\u0001\u0000\u0000"+ - "\u0000\u0113\u0583\u0001\u0000\u0000\u0000\u0115\u058d\u0001\u0000\u0000"+ - "\u0000\u0117\u0592\u0001\u0000\u0000\u0000\u0119\u0597\u0001\u0000\u0000"+ - "\u0000\u011b\u059b\u0001\u0000\u0000\u0000\u011d\u05a1\u0001\u0000\u0000"+ - "\u0000\u011f\u05a6\u0001\u0000\u0000\u0000\u0121\u05ac\u0001\u0000\u0000"+ - "\u0000\u0123\u05b0\u0001\u0000\u0000\u0000\u0125\u05b5\u0001\u0000\u0000"+ - "\u0000\u0127\u05bc\u0001\u0000\u0000\u0000\u0129\u05c3\u0001\u0000\u0000"+ - "\u0000\u012b\u05cb\u0001\u0000\u0000\u0000\u012d\u05d3\u0001\u0000\u0000"+ - "\u0000\u012f\u05db\u0001\u0000\u0000\u0000\u0131\u05e1\u0001\u0000\u0000"+ - "\u0000\u0133\u05e9\u0001\u0000\u0000\u0000\u0135\u05f5\u0001\u0000\u0000"+ - "\u0000\u0137\u05fd\u0001\u0000\u0000\u0000\u0139\u0605\u0001\u0000\u0000"+ - "\u0000\u013b\u0609\u0001\u0000\u0000\u0000\u013d\u0610\u0001\u0000\u0000"+ - "\u0000\u013f\u0614\u0001\u0000\u0000\u0000\u0141\u061d\u0001\u0000\u0000"+ - "\u0000\u0143\u0622\u0001\u0000\u0000\u0000\u0145\u0628\u0001\u0000\u0000"+ - "\u0000\u0147\u0646\u0001\u0000\u0000\u0000\u0149\u0662\u0001\u0000\u0000"+ - "\u0000\u014b\u0664\u0001\u0000\u0000\u0000\u014d\u066c\u0001\u0000\u0000"+ - "\u0000\u014f\u0676\u0001\u0000\u0000\u0000\u0151\u067e\u0001\u0000\u0000"+ - "\u0000\u0153\u0686\u0001\u0000\u0000\u0000\u0155\u068c\u0001\u0000\u0000"+ - "\u0000\u0157\u0694\u0001\u0000\u0000\u0000\u0159\u0698\u0001\u0000\u0000"+ - "\u0000\u015b\u069e\u0001\u0000\u0000\u0000\u015d\u06b1\u0001\u0000\u0000"+ - "\u0000\u015f\u06c0\u0001\u0000\u0000\u0000\u0161\u06d3\u0001\u0000\u0000"+ - "\u0000\u0163\u06d5\u0001\u0000\u0000\u0000\u0165\u06e2\u0001\u0000\u0000"+ - "\u0000\u0167\u06f0\u0001\u0000\u0000\u0000\u0169\u06fb\u0001\u0000\u0000"+ - "\u0000\u016b\u070e\u0001\u0000\u0000\u0000\u016d\u071f\u0001\u0000\u0000"+ - "\u0000\u016f\u0735\u0001\u0000\u0000\u0000\u0171\u0749\u0001\u0000\u0000"+ - "\u0000\u0173\u075c\u0001\u0000\u0000\u0000\u0175\u076d\u0001\u0000\u0000"+ - "\u0000\u0177\u0782\u0001\u0000\u0000\u0000\u0179\u0797\u0001\u0000\u0000"+ - "\u0000\u017b\u07a4\u0001\u0000\u0000\u0000\u017d\u07af\u0001\u0000\u0000"+ - "\u0000\u017f\u07b1\u0001\u0000\u0000\u0000\u0181\u07b8\u0001\u0000\u0000"+ - "\u0000\u0183\u07d5\u0001\u0000\u0000\u0000\u0185\u07e8\u0001\u0000\u0000"+ - "\u0000\u0187\u0800\u0001\u0000\u0000\u0000\u0189\u0819\u0001\u0000\u0000"+ - "\u0000\u018b\u082c\u0001\u0000\u0000\u0000\u018d\u0845\u0001\u0000\u0000"+ - "\u0000\u018f\u0860\u0001\u0000\u0000\u0000\u0191\u0875\u0001\u0000\u0000"+ - "\u0000\u0193\u0882\u0001\u0000\u0000\u0000\u0195\u088d\u0001\u0000\u0000"+ - "\u0000\u0197\u088f\u0001\u0000\u0000\u0000\u0199\u0897\u0001\u0000\u0000"+ - "\u0000\u019b\u08a1\u0001\u0000\u0000\u0000\u019d\u08ab\u0001\u0000\u0000"+ - "\u0000\u019f\u08b6\u0001\u0000\u0000\u0000\u01a1\u08c1\u0001\u0000\u0000"+ - "\u0000\u01a3\u08ce\u0001\u0000\u0000\u0000\u01a5\u08de\u0001\u0000\u0000"+ - "\u0000\u01a7\u08eb\u0001\u0000\u0000\u0000\u01a9\u08fb\u0001\u0000\u0000"+ - "\u0000\u01ab\u0901\u0001\u0000\u0000\u0000\u01ad\u091c\u0001\u0000\u0000"+ - "\u0000\u01af\u091e\u0001\u0000\u0000\u0000\u01b1\u0923\u0001\u0000\u0000"+ - "\u0000\u01b3\u0927\u0001\u0000\u0000\u0000\u01b5\u092c\u0001\u0000\u0000"+ - "\u0000\u01b7\u0933\u0001\u0000\u0000\u0000\u01b9\u093a\u0001\u0000\u0000"+ - "\u0000\u01bb\u0940\u0001\u0000\u0000\u0000\u01bd\u0948\u0001\u0000\u0000"+ - "\u0000\u01bf\u0951\u0001\u0000\u0000\u0000\u01c1\u095c\u0001\u0000\u0000"+ - "\u0000\u01c3\u0975\u0001\u0000\u0000\u0000\u01c5\u0983\u0001\u0000\u0000"+ - "\u0000\u01c7\u0985\u0001\u0000\u0000\u0000\u01c9\u098d\u0001\u0000\u0000"+ - "\u0000\u01cb\u0999\u0001\u0000\u0000\u0000\u01cd\u099f\u0001\u0000\u0000"+ - "\u0000\u01cf\u09a4\u0001\u0000\u0000\u0000\u01d1\u09ae\u0001\u0000\u0000"+ - "\u0000\u01d3\u09b9\u0001\u0000\u0000\u0000\u01d5\u09c2\u0001\u0000\u0000"+ - "\u0000\u01d7\u09d0\u0001\u0000\u0000\u0000\u01d9\u09e3\u0001\u0000\u0000"+ - "\u0000\u01db\u09ef\u0001\u0000\u0000\u0000\u01dd\u09f9\u0001\u0000\u0000"+ - "\u0000\u01df\u09fe\u0001\u0000\u0000\u0000\u01e1\u0a06\u0001\u0000\u0000"+ - "\u0000\u01e3\u0a0d\u0001\u0000\u0000\u0000\u01e5\u0a30\u0001\u0000\u0000"+ - "\u0000\u01e7\u0a32\u0001\u0000\u0000\u0000\u01e9\u0a3b\u0001\u0000\u0000"+ - "\u0000\u01eb\u0a45\u0001\u0000\u0000\u0000\u01ed\u0a4d\u0001\u0000\u0000"+ - "\u0000\u01ef\u0a56\u0001\u0000\u0000\u0000\u01f1\u0a61\u0001\u0000\u0000"+ - "\u0000\u01f3\u0a6c\u0001\u0000\u0000\u0000\u01f5\u0a92\u0001\u0000\u0000"+ - "\u0000\u01f7\u0aa9\u0001\u0000\u0000\u0000\u01f9\u0ac5\u0001\u0000\u0000"+ - "\u0000\u01fb\u0ac9\u0001\u0000\u0000\u0000\u01fd\u0aec\u0001\u0000\u0000"+ - "\u0000\u01ff\u0aee\u0001\u0000\u0000\u0000\u0201\u0af1\u0001\u0000\u0000"+ - "\u0000\u0203\u0af7\u0001\u0000\u0000\u0000\u0205\u0b05\u0001\u0000\u0000"+ - "\u0000\u0207\u0208\u0005.\u0000\u0000\u0208\u0002\u0001\u0000\u0000\u0000"+ - "\u0209\u020a\u0005(\u0000\u0000\u020a\u0004\u0001\u0000\u0000\u0000\u020b"+ - "\u020c\u0005)\u0000\u0000\u020c\u0006\u0001\u0000\u0000\u0000\u020d\u020e"+ - "\u0005,\u0000\u0000\u020e\b\u0001\u0000\u0000\u0000\u020f\u0210\u0005"+ - "[\u0000\u0000\u0210\n\u0001\u0000\u0000\u0000\u0211\u0212\u0005]\u0000"+ - "\u0000\u0212\f\u0001\u0000\u0000\u0000\u0213\u0214\u0005!\u0000\u0000"+ - "\u0214\u000e\u0001\u0000\u0000\u0000\u0215\u0216\u0005%\u0000\u0000\u0216"+ - "\u0010\u0001\u0000\u0000\u0000\u0217\u0218\u0005*\u0000\u0000\u0218\u0012"+ - "\u0001\u0000\u0000\u0000\u0219\u021a\u0005/\u0000\u0000\u021a\u0014\u0001"+ - "\u0000\u0000\u0000\u021b\u021c\u0005+\u0000\u0000\u021c\u0016\u0001\u0000"+ - "\u0000\u0000\u021d\u021e\u0005&\u0000\u0000\u021e\u0018\u0001\u0000\u0000"+ - "\u0000\u021f\u0220\u0005>\u0000\u0000\u0220\u001a\u0001\u0000\u0000\u0000"+ - "\u0221\u0222\u0005>\u0000\u0000\u0222\u0223\u0005=\u0000\u0000\u0223\u001c"+ - "\u0001\u0000\u0000\u0000\u0224\u0225\u0005<\u0000\u0000\u0225\u001e\u0001"+ - "\u0000\u0000\u0000\u0226\u0227\u0005<\u0000\u0000\u0227\u0228\u0005=\u0000"+ - "\u0000\u0228 \u0001\u0000\u0000\u0000\u0229\u022a\u0005=\u0000\u0000\u022a"+ - "\"\u0001\u0000\u0000\u0000\u022b\u022c\u0005=\u0000\u0000\u022c\u022d"+ - "\u0005=\u0000\u0000\u022d$\u0001\u0000\u0000\u0000\u022e\u022f\u0005="+ - "\u0000\u0000\u022f\u0230\u0005=\u0000\u0000\u0230\u0231\u0005=\u0000\u0000"+ - "\u0231&\u0001\u0000\u0000\u0000\u0232\u0233\u0005!\u0000\u0000\u0233\u0234"+ - "\u0005=\u0000\u0000\u0234\u0235\u0005=\u0000\u0000\u0235(\u0001\u0000"+ - "\u0000\u0000\u0236\u0237\u0005!\u0000\u0000\u0237\u0238\u0005=\u0000\u0000"+ - "\u0238*\u0001\u0000\u0000\u0000\u0239\u023a\u0005<\u0000\u0000\u023a\u023b"+ - "\u0005>\u0000\u0000\u023b,\u0001\u0000\u0000\u0000\u023c\u023d\u0005&"+ - "\u0000\u0000\u023d\u023e\u0005&\u0000\u0000\u023e.\u0001\u0000\u0000\u0000"+ - "\u023f\u0240\u0005|\u0000\u0000\u0240\u0241\u0005|\u0000\u0000\u02410"+ - "\u0001\u0000\u0000\u0000\u0242\u0243\u0005?\u0000\u0000\u02432\u0001\u0000"+ - "\u0000\u0000\u0244\u0245\u0005:\u0000\u0000\u02454\u0001\u0000\u0000\u0000"+ - "\u0246\u0247\u0005{\u0000\u0000\u02476\u0001\u0000\u0000\u0000\u0248\u0249"+ - "\u0005}\u0000\u0000\u02498\u0001\u0000\u0000\u0000\u024a\u024b\u0005-"+ - "\u0000\u0000\u024b:\u0001\u0000\u0000\u0000\u024c\u0253\u00050\u0000\u0000"+ - "\u024d\u024f\u0005.\u0000\u0000\u024e\u0250\u0007\u0000\u0000\u0000\u024f"+ - "\u024e\u0001\u0000\u0000\u0000\u0250\u0251\u0001\u0000\u0000\u0000\u0251"+ - "\u024f\u0001\u0000\u0000\u0000\u0251\u0252\u0001\u0000\u0000\u0000\u0252"+ - "\u0254\u0001\u0000\u0000\u0000\u0253\u024d\u0001\u0000\u0000\u0000\u0253"+ - "\u0254\u0001\u0000\u0000\u0000\u0254\u0287\u0001\u0000\u0000\u0000\u0255"+ - "\u0259\u0007\u0001\u0000\u0000\u0256\u0258\u0007\u0000\u0000\u0000\u0257"+ - "\u0256\u0001\u0000\u0000\u0000\u0258\u025b\u0001\u0000\u0000\u0000\u0259"+ - "\u0257\u0001\u0000\u0000\u0000\u0259\u025a\u0001\u0000\u0000\u0000\u025a"+ - "\u0262\u0001\u0000\u0000\u0000\u025b\u0259\u0001\u0000\u0000\u0000\u025c"+ - "\u025e\u0005.\u0000\u0000\u025d\u025f\u0007\u0000\u0000\u0000\u025e\u025d"+ - "\u0001\u0000\u0000\u0000\u025f\u0260\u0001\u0000\u0000\u0000\u0260\u025e"+ - "\u0001\u0000\u0000\u0000\u0260\u0261\u0001\u0000\u0000\u0000\u0261\u0263"+ - "\u0001\u0000\u0000\u0000\u0262\u025c\u0001\u0000\u0000\u0000\u0262\u0263"+ - "\u0001\u0000\u0000\u0000\u0263\u0287\u0001\u0000\u0000\u0000\u0264\u026b"+ - "\u00050\u0000\u0000\u0265\u0267\u0005.\u0000\u0000\u0266\u0268\u0007\u0000"+ - "\u0000\u0000\u0267\u0266\u0001\u0000\u0000\u0000\u0268\u0269\u0001\u0000"+ - "\u0000\u0000\u0269\u0267\u0001\u0000\u0000\u0000\u0269\u026a\u0001\u0000"+ - "\u0000\u0000\u026a\u026c\u0001\u0000\u0000\u0000\u026b\u0265\u0001\u0000"+ - "\u0000\u0000\u026b\u026c\u0001\u0000\u0000\u0000\u026c\u027d\u0001\u0000"+ - "\u0000\u0000\u026d\u0271\u0007\u0001\u0000\u0000\u026e\u0270\u0007\u0000"+ - "\u0000\u0000\u026f\u026e\u0001\u0000\u0000\u0000\u0270\u0273\u0001\u0000"+ - "\u0000\u0000\u0271\u026f\u0001\u0000\u0000\u0000\u0271\u0272\u0001\u0000"+ - "\u0000\u0000\u0272\u027a\u0001\u0000\u0000\u0000\u0273\u0271\u0001\u0000"+ - "\u0000\u0000\u0274\u0276\u0005.\u0000\u0000\u0275\u0277\u0007\u0000\u0000"+ - "\u0000\u0276\u0275\u0001\u0000\u0000\u0000\u0277\u0278\u0001\u0000\u0000"+ - "\u0000\u0278\u0276\u0001\u0000\u0000\u0000\u0278\u0279\u0001\u0000\u0000"+ - "\u0000\u0279\u027b\u0001\u0000\u0000\u0000\u027a\u0274\u0001\u0000\u0000"+ - "\u0000\u027a\u027b\u0001\u0000\u0000\u0000\u027b\u027d\u0001\u0000\u0000"+ - "\u0000\u027c\u0264\u0001\u0000\u0000\u0000\u027c\u026d\u0001\u0000\u0000"+ - "\u0000\u027d\u027e\u0001\u0000\u0000\u0000\u027e\u0280\u0005E\u0000\u0000"+ - "\u027f\u0281\u0007\u0002\u0000\u0000\u0280\u027f\u0001\u0000\u0000\u0000"+ - "\u0280\u0281\u0001\u0000\u0000\u0000\u0281\u0282\u0001\u0000\u0000\u0000"+ - "\u0282\u0284\u0007\u0000\u0000\u0000\u0283\u0285\u0007\u0000\u0000\u0000"+ - "\u0284\u0283\u0001\u0000\u0000\u0000\u0284\u0285\u0001\u0000\u0000\u0000"+ - "\u0285\u0287\u0001\u0000\u0000\u0000\u0286\u024c\u0001\u0000\u0000\u0000"+ - "\u0286\u0255\u0001\u0000\u0000\u0000\u0286\u027c\u0001\u0000\u0000\u0000"+ - "\u0287<\u0001\u0000\u0000\u0000\u0288\u028e\u0005\'\u0000\u0000\u0289"+ - "\u028d\b\u0003\u0000\u0000\u028a\u028b\u0005\\\u0000\u0000\u028b\u028d"+ - "\u0005\'\u0000\u0000\u028c\u0289\u0001\u0000\u0000\u0000\u028c\u028a\u0001"+ - "\u0000\u0000\u0000\u028d\u0290\u0001\u0000\u0000\u0000\u028e\u028c\u0001"+ - "\u0000\u0000\u0000\u028e\u028f\u0001\u0000\u0000\u0000\u028f\u0291\u0001"+ - "\u0000\u0000\u0000\u0290\u028e\u0001\u0000\u0000\u0000\u0291\u02a7\u0005"+ - "\'\u0000\u0000\u0292\u0298\u0005\"\u0000\u0000\u0293\u0297\b\u0004\u0000"+ - "\u0000\u0294\u0295\u0005\\\u0000\u0000\u0295\u0297\u0005\"\u0000\u0000"+ - "\u0296\u0293\u0001\u0000\u0000\u0000\u0296\u0294\u0001\u0000\u0000\u0000"+ - "\u0297\u029a\u0001\u0000\u0000\u0000\u0298\u0296\u0001\u0000\u0000\u0000"+ - "\u0298\u0299\u0001\u0000\u0000\u0000\u0299\u029b\u0001\u0000\u0000\u0000"+ - "\u029a\u0298\u0001\u0000\u0000\u0000\u029b\u02a7\u0005\"\u0000\u0000\u029c"+ - "\u02a2\u0005`\u0000\u0000\u029d\u02a1\b\u0005\u0000\u0000\u029e\u029f"+ - "\u0005\\\u0000\u0000\u029f\u02a1\u0005`\u0000\u0000\u02a0\u029d\u0001"+ - "\u0000\u0000\u0000\u02a0\u029e\u0001\u0000\u0000\u0000\u02a1\u02a4\u0001"+ - "\u0000\u0000\u0000\u02a2\u02a0\u0001\u0000\u0000\u0000\u02a2\u02a3\u0001"+ - "\u0000\u0000\u0000\u02a3\u02a5\u0001\u0000\u0000\u0000\u02a4\u02a2\u0001"+ - "\u0000\u0000\u0000\u02a5\u02a7\u0005`\u0000\u0000\u02a6\u0288\u0001\u0000"+ - "\u0000\u0000\u02a6\u0292\u0001\u0000\u0000\u0000\u02a6\u029c\u0001\u0000"+ - "\u0000\u0000\u02a7>\u0001\u0000\u0000\u0000\u02a8\u02a9\u0005N\u0000\u0000"+ - "\u02a9\u02aa\u0005U\u0000\u0000\u02aa\u02ab\u0005L\u0000\u0000\u02ab\u02ac"+ - "\u0005L\u0000\u0000\u02ac@\u0001\u0000\u0000\u0000\u02ad\u02ae\u0005E"+ - "\u0000\u0000\u02ae\u02af\u0005R\u0000\u0000\u02af\u02b0\u0005R\u0000\u0000"+ - "\u02b0\u02b1\u0005O\u0000\u0000\u02b1\u02b2\u0005R\u0000\u0000\u02b2B"+ - "\u0001\u0000\u0000\u0000\u02b3\u02df\u0005M\u0000\u0000\u02b4\u02b5\u0005"+ - "K\u0000\u0000\u02b5\u02df\u0005M\u0000\u0000\u02b6\u02b7\u0005D\u0000"+ - "\u0000\u02b7\u02df\u0005M\u0000\u0000\u02b8\u02b9\u0005C\u0000\u0000\u02b9"+ - "\u02df\u0005M\u0000\u0000\u02ba\u02bb\u0005M\u0000\u0000\u02bb\u02df\u0005"+ - "M\u0000\u0000\u02bc\u02bd\u0005M\u0000\u0000\u02bd\u02df\u00052\u0000"+ - "\u0000\u02be\u02bf\u0005K\u0000\u0000\u02bf\u02c0\u0005M\u0000\u0000\u02c0"+ - "\u02df\u00052\u0000\u0000\u02c1\u02c2\u0005D\u0000\u0000\u02c2\u02c3\u0005"+ - "M\u0000\u0000\u02c3\u02df\u00052\u0000\u0000\u02c4\u02c5\u0005C\u0000"+ - "\u0000\u02c5\u02c6\u0005M\u0000\u0000\u02c6\u02df\u00052\u0000\u0000\u02c7"+ - "\u02c8\u0005M\u0000\u0000\u02c8\u02c9\u0005M\u0000\u0000\u02c9\u02df\u0005"+ - "2\u0000\u0000\u02ca\u02cb\u0005M\u0000\u0000\u02cb\u02df\u00053\u0000"+ - "\u0000\u02cc\u02cd\u0005K\u0000\u0000\u02cd\u02ce\u0005M\u0000\u0000\u02ce"+ - "\u02df\u00053\u0000\u0000\u02cf\u02d0\u0005D\u0000\u0000\u02d0\u02d1\u0005"+ - "M\u0000\u0000\u02d1\u02df\u00053\u0000\u0000\u02d2\u02d3\u0005C\u0000"+ - "\u0000\u02d3\u02d4\u0005M\u0000\u0000\u02d4\u02df\u00053\u0000\u0000\u02d5"+ - "\u02d6\u0005M\u0000\u0000\u02d6\u02d7\u0005M\u0000\u0000\u02d7\u02df\u0005"+ - "3\u0000\u0000\u02d8\u02df\u0005L\u0000\u0000\u02d9\u02da\u0005M\u0000"+ - "\u0000\u02da\u02df\u0005L\u0000\u0000\u02db\u02df\u0005G\u0000\u0000\u02dc"+ - "\u02dd\u0005K\u0000\u0000\u02dd\u02df\u0005G\u0000\u0000\u02de\u02b3\u0001"+ - "\u0000\u0000\u0000\u02de\u02b4\u0001\u0000\u0000\u0000\u02de\u02b6\u0001"+ - "\u0000\u0000\u0000\u02de\u02b8\u0001\u0000\u0000\u0000\u02de\u02ba\u0001"+ - "\u0000\u0000\u0000\u02de\u02bc\u0001\u0000\u0000\u0000\u02de\u02be\u0001"+ - "\u0000\u0000\u0000\u02de\u02c1\u0001\u0000\u0000\u0000\u02de\u02c4\u0001"+ - "\u0000\u0000\u0000\u02de\u02c7\u0001\u0000\u0000\u0000\u02de\u02ca\u0001"+ - "\u0000\u0000\u0000\u02de\u02cc\u0001\u0000\u0000\u0000\u02de\u02cf\u0001"+ - "\u0000\u0000\u0000\u02de\u02d2\u0001\u0000\u0000\u0000\u02de\u02d5\u0001"+ - "\u0000\u0000\u0000\u02de\u02d8\u0001\u0000\u0000\u0000\u02de\u02d9\u0001"+ - "\u0000\u0000\u0000\u02de\u02db\u0001\u0000\u0000\u0000\u02de\u02dc\u0001"+ - "\u0000\u0000\u0000\u02dfD\u0001\u0000\u0000\u0000\u02e0\u02e1\u0005I\u0000"+ - "\u0000\u02e1\u02e2\u0005F\u0000\u0000\u02e2F\u0001\u0000\u0000\u0000\u02e3"+ - "\u02e4\u0005I\u0000\u0000\u02e4\u02e5\u0005F\u0000\u0000\u02e5\u02e6\u0005"+ - "E\u0000\u0000\u02e6\u02e7\u0005R\u0000\u0000\u02e7\u02e8\u0005R\u0000"+ - "\u0000\u02e8\u02e9\u0005O\u0000\u0000\u02e9\u02ea\u0005R\u0000\u0000\u02ea"+ - "H\u0001\u0000\u0000\u0000\u02eb\u02ec\u0005I\u0000\u0000\u02ec\u02ed\u0005"+ - "S\u0000\u0000\u02ed\u02ee\u0005N\u0000\u0000\u02ee\u02ef\u0005U\u0000"+ - "\u0000\u02ef\u02f0\u0005M\u0000\u0000\u02f0\u02f1\u0005B\u0000\u0000\u02f1"+ - "\u02f2\u0005E\u0000\u0000\u02f2\u02f3\u0005R\u0000\u0000\u02f3J\u0001"+ - "\u0000\u0000\u0000\u02f4\u02f5\u0005I\u0000\u0000\u02f5\u02f6\u0005S\u0000"+ - "\u0000\u02f6\u02f7\u0005T\u0000\u0000\u02f7\u02f8\u0005E\u0000\u0000\u02f8"+ - "\u02f9\u0005X\u0000\u0000\u02f9\u02fa\u0005T\u0000\u0000\u02faL\u0001"+ - "\u0000\u0000\u0000\u02fb\u02fc\u0005I\u0000\u0000\u02fc\u02fd\u0005S\u0000"+ - "\u0000\u02fd\u02fe\u0005E\u0000\u0000\u02fe\u02ff\u0005R\u0000\u0000\u02ff"+ - "\u0300\u0005R\u0000\u0000\u0300\u0301\u0005O\u0000\u0000\u0301\u0302\u0005"+ - "R\u0000\u0000\u0302N\u0001\u0000\u0000\u0000\u0303\u0304\u0005I\u0000"+ - "\u0000\u0304\u0305\u0005S\u0000\u0000\u0305\u0306\u0005N\u0000\u0000\u0306"+ - "\u0307\u0005O\u0000\u0000\u0307\u0308\u0005N\u0000\u0000\u0308\u0309\u0005"+ - "T\u0000\u0000\u0309\u030a\u0005E\u0000\u0000\u030a\u030b\u0005X\u0000"+ - "\u0000\u030b\u030c\u0005T\u0000\u0000\u030cP\u0001\u0000\u0000\u0000\u030d"+ - "\u030e\u0005I\u0000\u0000\u030e\u030f\u0005S\u0000\u0000\u030f\u0310\u0005"+ - "L\u0000\u0000\u0310\u0311\u0005O\u0000\u0000\u0311\u0312\u0005G\u0000"+ - "\u0000\u0312\u0313\u0005I\u0000\u0000\u0313\u0314\u0005C\u0000\u0000\u0314"+ - "\u0315\u0005A\u0000\u0000\u0315\u0316\u0005L\u0000\u0000\u0316R\u0001"+ - "\u0000\u0000\u0000\u0317\u0318\u0005I\u0000\u0000\u0318\u0319\u0005S\u0000"+ - "\u0000\u0319\u031a\u0005E\u0000\u0000\u031a\u031b\u0005V\u0000\u0000\u031b"+ - "\u031c\u0005E\u0000\u0000\u031c\u031d\u0005N\u0000\u0000\u031dT\u0001"+ - "\u0000\u0000\u0000\u031e\u031f\u0005I\u0000\u0000\u031f\u0320\u0005S\u0000"+ - "\u0000\u0320\u0321\u0005O\u0000\u0000\u0321\u0322\u0005D\u0000\u0000\u0322"+ - "\u0323\u0005D\u0000\u0000\u0323V\u0001\u0000\u0000\u0000\u0324\u0325\u0005"+ - "I\u0000\u0000\u0325\u0326\u0005S\u0000\u0000\u0326\u0327\u0005N\u0000"+ - "\u0000\u0327\u0328\u0005U\u0000\u0000\u0328\u0329\u0005L\u0000\u0000\u0329"+ - "\u032a\u0005L\u0000\u0000\u032aX\u0001\u0000\u0000\u0000\u032b\u032c\u0005"+ - "I\u0000\u0000\u032c\u032d\u0005S\u0000\u0000\u032d\u032e\u0005N\u0000"+ - "\u0000\u032e\u032f\u0005U\u0000\u0000\u032f\u0330\u0005L\u0000\u0000\u0330"+ - "\u0331\u0005L\u0000\u0000\u0331\u0332\u0005O\u0000\u0000\u0332\u0333\u0005"+ - "R\u0000\u0000\u0333\u0334\u0005E\u0000\u0000\u0334\u0335\u0005R\u0000"+ - "\u0000\u0335\u0336\u0005R\u0000\u0000\u0336\u0337\u0005O\u0000\u0000\u0337"+ - "\u0338\u0005R\u0000\u0000\u0338Z\u0001\u0000\u0000\u0000\u0339\u033a\u0005"+ - "A\u0000\u0000\u033a\u033b\u0005N\u0000\u0000\u033b\u033c\u0005D\u0000"+ - "\u0000\u033c\\\u0001\u0000\u0000\u0000\u033d\u033e\u0005O\u0000\u0000"+ - "\u033e\u033f\u0005R\u0000\u0000\u033f^\u0001\u0000\u0000\u0000\u0340\u0341"+ - "\u0005N\u0000\u0000\u0341\u0342\u0005O\u0000\u0000\u0342\u0343\u0005T"+ - "\u0000\u0000\u0343`\u0001\u0000\u0000\u0000\u0344\u0345\u0005T\u0000\u0000"+ - "\u0345\u0346\u0005R\u0000\u0000\u0346\u0347\u0005U\u0000\u0000\u0347\u0348"+ - "\u0005E\u0000\u0000\u0348b\u0001\u0000\u0000\u0000\u0349\u034a\u0005F"+ - "\u0000\u0000\u034a\u034b\u0005A\u0000\u0000\u034b\u034c\u0005L\u0000\u0000"+ - "\u034c\u034d\u0005S\u0000\u0000\u034d\u034e\u0005E\u0000\u0000\u034ed"+ - "\u0001\u0000\u0000\u0000\u034f\u0350\u0005E\u0000\u0000\u0350f\u0001\u0000"+ - "\u0000\u0000\u0351\u0352\u0005P\u0000\u0000\u0352\u0353\u0005I\u0000\u0000"+ - "\u0353h\u0001\u0000\u0000\u0000\u0354\u0355\u0005D\u0000\u0000\u0355\u0356"+ - "\u0005E\u0000\u0000\u0356\u0357\u0005C\u0000\u0000\u0357\u0358\u00052"+ - "\u0000\u0000\u0358\u0359\u0005B\u0000\u0000\u0359\u035a\u0005I\u0000\u0000"+ - "\u035a\u035b\u0005N\u0000\u0000\u035bj\u0001\u0000\u0000\u0000\u035c\u035d"+ - "\u0005D\u0000\u0000\u035d\u035e\u0005E\u0000\u0000\u035e\u035f\u0005C"+ - "\u0000\u0000\u035f\u0360\u00052\u0000\u0000\u0360\u0361\u0005H\u0000\u0000"+ - "\u0361\u0362\u0005E\u0000\u0000\u0362\u0363\u0005X\u0000\u0000\u0363l"+ - "\u0001\u0000\u0000\u0000\u0364\u0365\u0005D\u0000\u0000\u0365\u0366\u0005"+ - "E\u0000\u0000\u0366\u0367\u0005C\u0000\u0000\u0367\u0368\u00052\u0000"+ - "\u0000\u0368\u0369\u0005O\u0000\u0000\u0369\u036a\u0005C\u0000\u0000\u036a"+ - "\u036b\u0005T\u0000\u0000\u036bn\u0001\u0000\u0000\u0000\u036c\u036d\u0005"+ - "H\u0000\u0000\u036d\u036e\u0005E\u0000\u0000\u036e\u036f\u0005X\u0000"+ - "\u0000\u036f\u0370\u00052\u0000\u0000\u0370\u0371\u0005B\u0000\u0000\u0371"+ - "\u0372\u0005I\u0000\u0000\u0372\u0373\u0005N\u0000\u0000\u0373p\u0001"+ - "\u0000\u0000\u0000\u0374\u0375\u0005H\u0000\u0000\u0375\u0376\u0005E\u0000"+ - "\u0000\u0376\u0377\u0005X\u0000\u0000\u0377\u0378\u00052\u0000\u0000\u0378"+ - "\u0379\u0005D\u0000\u0000\u0379\u037a\u0005E\u0000\u0000\u037a\u037b\u0005"+ - "C\u0000\u0000\u037br\u0001\u0000\u0000\u0000\u037c\u037d\u0005H\u0000"+ - "\u0000\u037d\u037e\u0005E\u0000\u0000\u037e\u037f\u0005X\u0000\u0000\u037f"+ - "\u0380\u00052\u0000\u0000\u0380\u0381\u0005O\u0000\u0000\u0381\u0382\u0005"+ - "C\u0000\u0000\u0382\u0383\u0005T\u0000\u0000\u0383t\u0001\u0000\u0000"+ - "\u0000\u0384\u0385\u0005O\u0000\u0000\u0385\u0386\u0005C\u0000\u0000\u0386"+ - "\u0387\u0005T\u0000\u0000\u0387\u0388\u00052\u0000\u0000\u0388\u0389\u0005"+ - "B\u0000\u0000\u0389\u038a\u0005I\u0000\u0000\u038a\u038b\u0005N\u0000"+ - "\u0000\u038bv\u0001\u0000\u0000\u0000\u038c\u038d\u0005O\u0000\u0000\u038d"+ - "\u038e\u0005C\u0000\u0000\u038e\u038f\u0005T\u0000\u0000\u038f\u0390\u0005"+ - "2\u0000\u0000\u0390\u0391\u0005D\u0000\u0000\u0391\u0392\u0005E\u0000"+ - "\u0000\u0392\u0393\u0005C\u0000\u0000\u0393x\u0001\u0000\u0000\u0000\u0394"+ - "\u0395\u0005O\u0000\u0000\u0395\u0396\u0005C\u0000\u0000\u0396\u0397\u0005"+ - "T\u0000\u0000\u0397\u0398\u00052\u0000\u0000\u0398\u0399\u0005H\u0000"+ - "\u0000\u0399\u039a\u0005E\u0000\u0000\u039a\u039b\u0005X\u0000\u0000\u039b"+ - "z\u0001\u0000\u0000\u0000\u039c\u039d\u0005B\u0000\u0000\u039d\u039e\u0005"+ - "I\u0000\u0000\u039e\u039f\u0005N\u0000\u0000\u039f\u03a0\u00052\u0000"+ - "\u0000\u03a0\u03a1\u0005O\u0000\u0000\u03a1\u03a2\u0005C\u0000\u0000\u03a2"+ - "\u03a3\u0005T\u0000\u0000\u03a3|\u0001\u0000\u0000\u0000\u03a4\u03a5\u0005"+ - "B\u0000\u0000\u03a5\u03a6\u0005I\u0000\u0000\u03a6\u03a7\u0005N\u0000"+ - "\u0000\u03a7\u03a8\u00052\u0000\u0000\u03a8\u03a9\u0005D\u0000\u0000\u03a9"+ - "\u03aa\u0005E\u0000\u0000\u03aa\u03ab\u0005C\u0000\u0000\u03ab~\u0001"+ - "\u0000\u0000\u0000\u03ac\u03ad\u0005B\u0000\u0000\u03ad\u03ae\u0005I\u0000"+ - "\u0000\u03ae\u03af\u0005N\u0000\u0000\u03af\u03b0\u00052\u0000\u0000\u03b0"+ - "\u03b1\u0005H\u0000\u0000\u03b1\u03b2\u0005E\u0000\u0000\u03b2\u03b3\u0005"+ - "X\u0000\u0000\u03b3\u0080\u0001\u0000\u0000\u0000\u03b4\u03b5\u0005A\u0000"+ - "\u0000\u03b5\u03b6\u0005B\u0000\u0000\u03b6\u03b7\u0005S\u0000\u0000\u03b7"+ - "\u0082\u0001\u0000\u0000\u0000\u03b8\u03b9\u0005Q\u0000\u0000\u03b9\u03ba"+ - "\u0005U\u0000\u0000\u03ba\u03bb\u0005O\u0000\u0000\u03bb\u03bc\u0005T"+ - "\u0000\u0000\u03bc\u03bd\u0005I\u0000\u0000\u03bd\u03be\u0005E\u0000\u0000"+ - "\u03be\u03bf\u0005N\u0000\u0000\u03bf\u03c0\u0005T\u0000\u0000\u03c0\u0084"+ - "\u0001\u0000\u0000\u0000\u03c1\u03c2\u0005M\u0000\u0000\u03c2\u03c3\u0005"+ - "O\u0000\u0000\u03c3\u03c4\u0005D\u0000\u0000\u03c4\u0086\u0001\u0000\u0000"+ - "\u0000\u03c5\u03c6\u0005S\u0000\u0000\u03c6\u03c7\u0005I\u0000\u0000\u03c7"+ - "\u03c8\u0005G\u0000\u0000\u03c8\u03c9\u0005N\u0000\u0000\u03c9\u0088\u0001"+ - "\u0000\u0000\u0000\u03ca\u03cb\u0005S\u0000\u0000\u03cb\u03cc\u0005Q\u0000"+ - "\u0000\u03cc\u03cd\u0005R\u0000\u0000\u03cd\u03ce\u0005T\u0000\u0000\u03ce"+ - "\u008a\u0001\u0000\u0000\u0000\u03cf\u03d0\u0005T\u0000\u0000\u03d0\u03d1"+ - "\u0005R\u0000\u0000\u03d1\u03d2\u0005U\u0000\u0000\u03d2\u03d3\u0005N"+ - "\u0000\u0000\u03d3\u03d4\u0005C\u0000\u0000\u03d4\u008c\u0001\u0000\u0000"+ - "\u0000\u03d5\u03d6\u0005I\u0000\u0000\u03d6\u03d7\u0005N\u0000\u0000\u03d7"+ - "\u03d8\u0005T\u0000\u0000\u03d8\u008e\u0001\u0000\u0000\u0000\u03d9\u03da"+ - "\u0005G\u0000\u0000\u03da\u03db\u0005C\u0000\u0000\u03db\u03dc\u0005D"+ - "\u0000\u0000\u03dc\u0090\u0001\u0000\u0000\u0000\u03dd\u03de\u0005L\u0000"+ - "\u0000\u03de\u03df\u0005C\u0000\u0000\u03df\u03e0\u0005M\u0000\u0000\u03e0"+ - "\u0092\u0001\u0000\u0000\u0000\u03e1\u03e2\u0005C\u0000\u0000\u03e2\u03e3"+ - "\u0005O\u0000\u0000\u03e3\u03e4\u0005M\u0000\u0000\u03e4\u03e5\u0005B"+ - "\u0000\u0000\u03e5\u03e6\u0005I\u0000\u0000\u03e6\u03e7\u0005N\u0000\u0000"+ - "\u03e7\u0094\u0001\u0000\u0000\u0000\u03e8\u03e9\u0005P\u0000\u0000\u03e9"+ - "\u03ea\u0005E\u0000\u0000\u03ea\u03eb\u0005R\u0000\u0000\u03eb\u03ec\u0005"+ - "M\u0000\u0000\u03ec\u03ed\u0005U\u0000\u0000\u03ed\u03ee\u0005T\u0000"+ - "\u0000\u03ee\u0096\u0001\u0000\u0000\u0000\u03ef\u03f0\u0005D\u0000\u0000"+ - "\u03f0\u03f1\u0005E\u0000\u0000\u03f1\u03f2\u0005G\u0000\u0000\u03f2\u03f3"+ - "\u0005R\u0000\u0000\u03f3\u03f4\u0005E\u0000\u0000\u03f4\u03f5\u0005E"+ - "\u0000\u0000\u03f5\u03f6\u0005S\u0000\u0000\u03f6\u0098\u0001\u0000\u0000"+ - "\u0000\u03f7\u03f8\u0005R\u0000\u0000\u03f8\u03f9\u0005A\u0000\u0000\u03f9"+ - "\u03fa\u0005D\u0000\u0000\u03fa\u03fb\u0005I\u0000\u0000\u03fb\u03fc\u0005"+ - "A\u0000\u0000\u03fc\u03fd\u0005N\u0000\u0000\u03fd\u03fe\u0005S\u0000"+ - "\u0000\u03fe\u009a\u0001\u0000\u0000\u0000\u03ff\u0400\u0005C\u0000\u0000"+ - "\u0400\u0401\u0005O\u0000\u0000\u0401\u0402\u0005S\u0000\u0000\u0402\u009c"+ - "\u0001\u0000\u0000\u0000\u0403\u0404\u0005C\u0000\u0000\u0404\u0405\u0005"+ - "O\u0000\u0000\u0405\u0406\u0005S\u0000\u0000\u0406\u0407\u0005H\u0000"+ - "\u0000\u0407\u009e\u0001\u0000\u0000\u0000\u0408\u0409\u0005S\u0000\u0000"+ - "\u0409\u040a\u0005I\u0000\u0000\u040a\u040b\u0005N\u0000\u0000\u040b\u00a0"+ - "\u0001\u0000\u0000\u0000\u040c\u040d\u0005S\u0000\u0000\u040d\u040e\u0005"+ - "I\u0000\u0000\u040e\u040f\u0005N\u0000\u0000\u040f\u0410\u0005H\u0000"+ - "\u0000\u0410\u00a2\u0001\u0000\u0000\u0000\u0411\u0412\u0005T\u0000\u0000"+ - "\u0412\u0413\u0005A\u0000\u0000\u0413\u0414\u0005N\u0000\u0000\u0414\u00a4"+ - "\u0001\u0000\u0000\u0000\u0415\u0416\u0005T\u0000\u0000\u0416\u0417\u0005"+ - "A\u0000\u0000\u0417\u0418\u0005N\u0000\u0000\u0418\u0419\u0005H\u0000"+ - "\u0000\u0419\u00a6\u0001\u0000\u0000\u0000\u041a\u041b\u0005A\u0000\u0000"+ - "\u041b\u041c\u0005C\u0000\u0000\u041c\u041d\u0005O\u0000\u0000\u041d\u041e"+ - "\u0005S\u0000\u0000\u041e\u00a8\u0001\u0000\u0000\u0000\u041f\u0420\u0005"+ - "A\u0000\u0000\u0420\u0421\u0005C\u0000\u0000\u0421\u0422\u0005O\u0000"+ - "\u0000\u0422\u0423\u0005S\u0000\u0000\u0423\u0424\u0005H\u0000\u0000\u0424"+ - "\u00aa\u0001\u0000\u0000\u0000\u0425\u0426\u0005A\u0000\u0000\u0426\u0427"+ - "\u0005S\u0000\u0000\u0427\u0428\u0005I\u0000\u0000\u0428\u0429\u0005N"+ - "\u0000\u0000\u0429\u00ac\u0001\u0000\u0000\u0000\u042a\u042b\u0005A\u0000"+ - "\u0000\u042b\u042c\u0005S\u0000\u0000\u042c\u042d\u0005I\u0000\u0000\u042d"+ - "\u042e\u0005N\u0000\u0000\u042e\u042f\u0005H\u0000\u0000\u042f\u00ae\u0001"+ - "\u0000\u0000\u0000\u0430\u0431\u0005A\u0000\u0000\u0431\u0432\u0005T\u0000"+ - "\u0000\u0432\u0433\u0005A\u0000\u0000\u0433\u0434\u0005N\u0000\u0000\u0434"+ - "\u00b0\u0001\u0000\u0000\u0000\u0435\u0436\u0005A\u0000\u0000\u0436\u0437"+ - "\u0005T\u0000\u0000\u0437\u0438\u0005A\u0000\u0000\u0438\u0439\u0005N"+ - "\u0000\u0000\u0439\u043a\u0005H\u0000\u0000\u043a\u00b2\u0001\u0000\u0000"+ - "\u0000\u043b\u043c\u0005A\u0000\u0000\u043c\u043d\u0005T\u0000\u0000\u043d"+ - "\u043e\u0005A\u0000\u0000\u043e\u043f\u0005N\u0000\u0000\u043f\u0440\u0005"+ - "2\u0000\u0000\u0440\u00b4\u0001\u0000\u0000\u0000\u0441\u0442\u0005R\u0000"+ - "\u0000\u0442\u0443\u0005O\u0000\u0000\u0443\u0444\u0005U\u0000\u0000\u0444"+ - "\u0445\u0005N\u0000\u0000\u0445\u0446\u0005D\u0000\u0000\u0446\u00b6\u0001"+ - "\u0000\u0000\u0000\u0447\u0448\u0005R\u0000\u0000\u0448\u0449\u0005O\u0000"+ - "\u0000\u0449\u044a\u0005U\u0000\u0000\u044a\u044b\u0005N\u0000\u0000\u044b"+ - "\u044c\u0005D\u0000\u0000\u044c\u044d\u0005D\u0000\u0000\u044d\u044e\u0005"+ - "O\u0000\u0000\u044e\u044f\u0005W\u0000\u0000\u044f\u0450\u0005N\u0000"+ - "\u0000\u0450\u00b8\u0001\u0000\u0000\u0000\u0451\u0452\u0005R\u0000\u0000"+ - "\u0452\u0453\u0005O\u0000\u0000\u0453\u0454\u0005U\u0000\u0000\u0454\u0455"+ - "\u0005N\u0000\u0000\u0455\u0456\u0005D\u0000\u0000\u0456\u0457\u0005U"+ - "\u0000\u0000\u0457\u0458\u0005P\u0000\u0000\u0458\u00ba\u0001\u0000\u0000"+ - "\u0000\u0459\u045a\u0005C\u0000\u0000\u045a\u045b\u0005E\u0000\u0000\u045b"+ - "\u045c\u0005I\u0000\u0000\u045c\u045d\u0005L\u0000\u0000\u045d\u045e\u0005"+ - "I\u0000\u0000\u045e\u045f\u0005N\u0000\u0000\u045f\u0460\u0005G\u0000"+ - "\u0000\u0460\u00bc\u0001\u0000\u0000\u0000\u0461\u0462\u0005F\u0000\u0000"+ - "\u0462\u0463\u0005L\u0000\u0000\u0463\u0464\u0005O\u0000\u0000\u0464\u0465"+ - "\u0005O\u0000\u0000\u0465\u0466\u0005R\u0000\u0000\u0466\u00be\u0001\u0000"+ - "\u0000\u0000\u0467\u0468\u0005E\u0000\u0000\u0468\u0469\u0005V\u0000\u0000"+ - "\u0469\u046a\u0005E\u0000\u0000\u046a\u046b\u0005N\u0000\u0000\u046b\u00c0"+ - "\u0001\u0000\u0000\u0000\u046c\u046d\u0005O\u0000\u0000\u046d\u046e\u0005"+ - "D\u0000\u0000\u046e\u046f\u0005D\u0000\u0000\u046f\u00c2\u0001\u0000\u0000"+ - "\u0000\u0470\u0471\u0005M\u0000\u0000\u0471\u0472\u0005R\u0000\u0000\u0472"+ - "\u0473\u0005O\u0000\u0000\u0473\u0474\u0005U\u0000\u0000\u0474\u0475\u0005"+ - "N\u0000\u0000\u0475\u0476\u0005D\u0000\u0000\u0476\u00c4\u0001\u0000\u0000"+ - "\u0000\u0477\u0478\u0005R\u0000\u0000\u0478\u0479\u0005A\u0000\u0000\u0479"+ - "\u047a\u0005N\u0000\u0000\u047a\u047b\u0005D\u0000\u0000\u047b\u00c6\u0001"+ - "\u0000\u0000\u0000\u047c\u047d\u0005R\u0000\u0000\u047d\u047e\u0005A\u0000"+ - "\u0000\u047e\u047f\u0005N\u0000\u0000\u047f\u0480\u0005D\u0000\u0000\u0480"+ - "\u0481\u0005B\u0000\u0000\u0481\u0482\u0005E\u0000\u0000\u0482\u0483\u0005"+ - "T\u0000\u0000\u0483\u0484\u0005W\u0000\u0000\u0484\u0485\u0005E\u0000"+ - "\u0000\u0485\u0486\u0005E\u0000\u0000\u0486\u0487\u0005N\u0000\u0000\u0487"+ - "\u00c8\u0001\u0000\u0000\u0000\u0488\u0489\u0005F\u0000\u0000\u0489\u048a"+ - "\u0005A\u0000\u0000\u048a\u048b\u0005C\u0000\u0000\u048b\u048c\u0005T"+ - "\u0000\u0000\u048c\u00ca\u0001\u0000\u0000\u0000\u048d\u048e\u0005F\u0000"+ - "\u0000\u048e\u048f\u0005A\u0000\u0000\u048f\u0490\u0005C\u0000\u0000\u0490"+ - "\u0491\u0005T\u0000\u0000\u0491\u0492\u0005D\u0000\u0000\u0492\u0493\u0005"+ - "O\u0000\u0000\u0493\u0494\u0005U\u0000\u0000\u0494\u0495\u0005B\u0000"+ - "\u0000\u0495\u0496\u0005L\u0000\u0000\u0496\u0497\u0005E\u0000\u0000\u0497"+ - "\u00cc\u0001\u0000\u0000\u0000\u0498\u0499\u0005P\u0000\u0000\u0499\u049a"+ - "\u0005O\u0000\u0000\u049a\u049b\u0005W\u0000\u0000\u049b\u049c\u0005E"+ - "\u0000\u0000\u049c\u049d\u0005R\u0000\u0000\u049d\u00ce\u0001\u0000\u0000"+ - "\u0000\u049e\u049f\u0005E\u0000\u0000\u049f\u04a0\u0005X\u0000\u0000\u04a0"+ - "\u04a1\u0005P\u0000\u0000\u04a1\u00d0\u0001\u0000\u0000\u0000\u04a2\u04a3"+ - "\u0005L\u0000\u0000\u04a3\u04a4\u0005N\u0000\u0000\u04a4\u00d2\u0001\u0000"+ - "\u0000\u0000\u04a5\u04a6\u0005L\u0000\u0000\u04a6\u04a7\u0005O\u0000\u0000"+ - "\u04a7\u04a8\u0005G\u0000\u0000\u04a8\u00d4\u0001\u0000\u0000\u0000\u04a9"+ - "\u04aa\u0005L\u0000\u0000\u04aa\u04ab\u0005O\u0000\u0000\u04ab\u04ac\u0005"+ - "G\u0000\u0000\u04ac\u04ad\u00051\u0000\u0000\u04ad\u04ae\u00050\u0000"+ - "\u0000\u04ae\u00d6\u0001\u0000\u0000\u0000\u04af\u04b0\u0005M\u0000\u0000"+ - "\u04b0\u04b1\u0005U\u0000\u0000\u04b1\u04b2\u0005L\u0000\u0000\u04b2\u04b3"+ - "\u0005T\u0000\u0000\u04b3\u04b4\u0005I\u0000\u0000\u04b4\u04b5\u0005N"+ - "\u0000\u0000\u04b5\u04b6\u0005O\u0000\u0000\u04b6\u04b7\u0005M\u0000\u0000"+ - "\u04b7\u04b8\u0005I\u0000\u0000\u04b8\u04b9\u0005A\u0000\u0000\u04b9\u04ba"+ - "\u0005L\u0000\u0000\u04ba\u00d8\u0001\u0000\u0000\u0000\u04bb\u04bc\u0005"+ - "P\u0000\u0000\u04bc\u04bd\u0005R\u0000\u0000\u04bd\u04be\u0005O\u0000"+ - "\u0000\u04be\u04bf\u0005D\u0000\u0000\u04bf\u04c0\u0005U\u0000\u0000\u04c0"+ - "\u04c1\u0005C\u0000\u0000\u04c1\u04c2\u0005T\u0000\u0000\u04c2\u00da\u0001"+ - "\u0000\u0000\u0000\u04c3\u04c4\u0005S\u0000\u0000\u04c4\u04c5\u0005Q\u0000"+ - "\u0000\u04c5\u04c6\u0005R\u0000\u0000\u04c6\u04c7\u0005T\u0000\u0000\u04c7"+ - "\u04c8\u0005P\u0000\u0000\u04c8\u04c9\u0005I\u0000\u0000\u04c9\u00dc\u0001"+ - "\u0000\u0000\u0000\u04ca\u04cb\u0005S\u0000\u0000\u04cb\u04cc\u0005U\u0000"+ - "\u0000\u04cc\u04cd\u0005M\u0000\u0000\u04cd\u04ce\u0005S\u0000\u0000\u04ce"+ - "\u04cf\u0005Q\u0000\u0000\u04cf\u00de\u0001\u0000\u0000\u0000\u04d0\u04d1"+ - "\u0005A\u0000\u0000\u04d1\u04d2\u0005S\u0000\u0000\u04d2\u04d3\u0005C"+ - "\u0000\u0000\u04d3\u00e0\u0001\u0000\u0000\u0000\u04d4\u04d5\u0005J\u0000"+ - "\u0000\u04d5\u04d6\u0005I\u0000\u0000\u04d6\u04e0\u0005S\u0000\u0000\u04d7"+ - "\u04d8\u0005W\u0000\u0000\u04d8\u04d9\u0005I\u0000\u0000\u04d9\u04da\u0005"+ - "D\u0000\u0000\u04da\u04db\u0005E\u0000\u0000\u04db\u04dc\u0005C\u0000"+ - "\u0000\u04dc\u04dd\u0005H\u0000\u0000\u04dd\u04de\u0005A\u0000\u0000\u04de"+ - "\u04e0\u0005R\u0000\u0000\u04df\u04d4\u0001\u0000\u0000\u0000\u04df\u04d7"+ - "\u0001\u0000\u0000\u0000\u04e0\u00e2\u0001\u0000\u0000\u0000\u04e1\u04e2"+ - "\u0005C\u0000\u0000\u04e2\u04e3\u0005H\u0000\u0000\u04e3\u04e4\u0005A"+ - "\u0000\u0000\u04e4\u04e5\u0005R\u0000\u0000\u04e5\u00e4\u0001\u0000\u0000"+ - "\u0000\u04e6\u04e7\u0005C\u0000\u0000\u04e7\u04e8\u0005L\u0000\u0000\u04e8"+ - "\u04e9\u0005E\u0000\u0000\u04e9\u04ea\u0005A\u0000\u0000\u04ea\u04eb\u0005"+ - "N\u0000\u0000\u04eb\u00e6\u0001\u0000\u0000\u0000\u04ec\u04ed\u0005C\u0000"+ - "\u0000\u04ed\u04ee\u0005O\u0000\u0000\u04ee\u04ef\u0005D\u0000\u0000\u04ef"+ - "\u04f0\u0005E\u0000\u0000\u04f0\u00e8\u0001\u0000\u0000\u0000\u04f1\u04f2"+ - "\u0005C\u0000\u0000\u04f2\u04f3\u0005O\u0000\u0000\u04f3\u04f4\u0005N"+ - "\u0000\u0000\u04f4\u04f5\u0005C\u0000\u0000\u04f5\u04f6\u0005A\u0000\u0000"+ - "\u04f6\u04f7\u0005T\u0000\u0000\u04f7\u04f8\u0005E\u0000\u0000\u04f8\u04f9"+ - "\u0005N\u0000\u0000\u04f9\u04fa\u0005A\u0000\u0000\u04fa\u04fb\u0005T"+ - "\u0000\u0000\u04fb\u04fc\u0005E\u0000\u0000\u04fc\u00ea\u0001\u0000\u0000"+ - "\u0000\u04fd\u04fe\u0005E\u0000\u0000\u04fe\u04ff\u0005X\u0000\u0000\u04ff"+ - "\u0500\u0005A\u0000\u0000\u0500\u0501\u0005C\u0000\u0000\u0501\u0502\u0005"+ - "T\u0000\u0000\u0502\u00ec\u0001\u0000\u0000\u0000\u0503\u0504\u0005F\u0000"+ - "\u0000\u0504\u0505\u0005I\u0000\u0000\u0505\u0506\u0005N\u0000\u0000\u0506"+ - "\u0507\u0005D\u0000\u0000\u0507\u00ee\u0001\u0000\u0000\u0000\u0508\u0509"+ - "\u0005F\u0000\u0000\u0509\u050a\u0005I\u0000\u0000\u050a\u050b\u0005X"+ - "\u0000\u0000\u050b\u050c\u0005E\u0000\u0000\u050c\u050d\u0005D\u0000\u0000"+ - "\u050d\u00f0\u0001\u0000\u0000\u0000\u050e\u050f\u0005L\u0000\u0000\u050f"+ - "\u0510\u0005E\u0000\u0000\u0510\u0511\u0005F\u0000\u0000\u0511\u0512\u0005"+ - "T\u0000\u0000\u0512\u00f2\u0001\u0000\u0000\u0000\u0513\u0514\u0005L\u0000"+ - "\u0000\u0514\u0515\u0005E\u0000\u0000\u0515\u0516\u0005N\u0000\u0000\u0516"+ - "\u00f4\u0001\u0000\u0000\u0000\u0517\u0518\u0005L\u0000\u0000\u0518\u0519"+ - "\u0005O\u0000\u0000\u0519\u051a\u0005W\u0000\u0000\u051a\u051b\u0005E"+ - "\u0000\u0000\u051b\u0524\u0005R\u0000\u0000\u051c\u051d\u0005T\u0000\u0000"+ - "\u051d\u051e\u0005O\u0000\u0000\u051e\u051f\u0005L\u0000\u0000\u051f\u0520"+ - "\u0005O\u0000\u0000\u0520\u0521\u0005W\u0000\u0000\u0521\u0522\u0005E"+ - "\u0000\u0000\u0522\u0524\u0005R\u0000\u0000\u0523\u0517\u0001\u0000\u0000"+ - "\u0000\u0523\u051c\u0001\u0000\u0000\u0000\u0524\u00f6\u0001\u0000\u0000"+ - "\u0000\u0525\u0526\u0005M\u0000\u0000\u0526\u0527\u0005I\u0000\u0000\u0527"+ - "\u0528\u0005D\u0000\u0000\u0528\u00f8\u0001\u0000\u0000\u0000\u0529\u052a"+ - "\u0005P\u0000\u0000\u052a\u052b\u0005R\u0000\u0000\u052b\u052c\u0005O"+ - "\u0000\u0000\u052c\u052d\u0005P\u0000\u0000\u052d\u052e\u0005E\u0000\u0000"+ - "\u052e\u052f\u0005R\u0000\u0000\u052f\u00fa\u0001\u0000\u0000\u0000\u0530"+ - "\u0531\u0005R\u0000\u0000\u0531\u0532\u0005E\u0000\u0000\u0532\u0533\u0005"+ - "P\u0000\u0000\u0533\u0534\u0005L\u0000\u0000\u0534\u0535\u0005A\u0000"+ - "\u0000\u0535\u0536\u0005C\u0000\u0000\u0536\u0537\u0005E\u0000\u0000\u0537"+ - "\u00fc\u0001\u0000\u0000\u0000\u0538\u0539\u0005R\u0000\u0000\u0539\u053a"+ - "\u0005E\u0000\u0000\u053a\u053b\u0005P\u0000\u0000\u053b\u053c\u0005T"+ - "\u0000\u0000\u053c\u00fe\u0001\u0000\u0000\u0000\u053d\u053e\u0005R\u0000"+ - "\u0000\u053e\u053f\u0005I\u0000\u0000\u053f\u0540\u0005G\u0000\u0000\u0540"+ - "\u0541\u0005H\u0000\u0000\u0541\u0542\u0005T\u0000\u0000\u0542\u0100\u0001"+ - "\u0000\u0000\u0000\u0543\u0544\u0005R\u0000\u0000\u0544\u0545\u0005M\u0000"+ - "\u0000\u0545\u0546\u0005B\u0000\u0000\u0546\u0102\u0001\u0000\u0000\u0000"+ - "\u0547\u0548\u0005S\u0000\u0000\u0548\u0549\u0005E\u0000\u0000\u0549\u054a"+ - "\u0005A\u0000\u0000\u054a\u054b\u0005R\u0000\u0000\u054b\u054c\u0005C"+ - "\u0000\u0000\u054c\u054d\u0005H\u0000\u0000\u054d\u0104\u0001\u0000\u0000"+ - "\u0000\u054e\u054f\u0005S\u0000\u0000\u054f\u0550\u0005U\u0000\u0000\u0550"+ - "\u0551\u0005B\u0000\u0000\u0551\u0552\u0005S\u0000\u0000\u0552\u0553\u0005"+ - "T\u0000\u0000\u0553\u0554\u0005I\u0000\u0000\u0554\u0555\u0005T\u0000"+ - "\u0000\u0555\u0556\u0005U\u0000\u0000\u0556\u0557\u0005T\u0000\u0000\u0557"+ - "\u0558\u0005E\u0000\u0000\u0558\u0106\u0001\u0000\u0000\u0000\u0559\u055a"+ - "\u0005T\u0000\u0000\u055a\u0108\u0001\u0000\u0000\u0000\u055b\u055c\u0005"+ - "T\u0000\u0000\u055c\u055d\u0005E\u0000\u0000\u055d\u055e\u0005X\u0000"+ - "\u0000\u055e\u055f\u0005T\u0000\u0000\u055f\u010a\u0001\u0000\u0000\u0000"+ - "\u0560\u0561\u0005T\u0000\u0000\u0561\u0562\u0005R\u0000\u0000\u0562\u0563"+ - "\u0005I\u0000\u0000\u0563\u0564\u0005M\u0000\u0000\u0564\u010c\u0001\u0000"+ - "\u0000\u0000\u0565\u0566\u0005U\u0000\u0000\u0566\u0567\u0005P\u0000\u0000"+ - "\u0567\u0568\u0005P\u0000\u0000\u0568\u0569\u0005E\u0000\u0000\u0569\u0572"+ - "\u0005R\u0000\u0000\u056a\u056b\u0005T\u0000\u0000\u056b\u056c\u0005O"+ - "\u0000\u0000\u056c\u056d\u0005U\u0000\u0000\u056d\u056e\u0005P\u0000\u0000"+ - "\u056e\u056f\u0005P\u0000\u0000\u056f\u0570\u0005E\u0000\u0000\u0570\u0572"+ - "\u0005R\u0000\u0000\u0571\u0565\u0001\u0000\u0000\u0000\u0571\u056a\u0001"+ - "\u0000\u0000\u0000\u0572\u010e\u0001\u0000\u0000\u0000\u0573\u0574\u0005"+ - "V\u0000\u0000\u0574\u0575\u0005A\u0000\u0000\u0575\u0576\u0005L\u0000"+ - "\u0000\u0576\u0577\u0005U\u0000\u0000\u0577\u0578\u0005E\u0000\u0000\u0578"+ - "\u0110\u0001\u0000\u0000\u0000\u0579\u057a\u0005D\u0000\u0000\u057a\u057b"+ - "\u0005A\u0000\u0000\u057b\u057c\u0005T\u0000\u0000\u057c\u057d\u0005E"+ - "\u0000\u0000\u057d\u057e\u0005V\u0000\u0000\u057e\u057f\u0005A\u0000\u0000"+ - "\u057f\u0580\u0005L\u0000\u0000\u0580\u0581\u0005U\u0000\u0000\u0581\u0582"+ - "\u0005E\u0000\u0000\u0582\u0112\u0001\u0000\u0000\u0000\u0583\u0584\u0005"+ - "T\u0000\u0000\u0584\u0585\u0005I\u0000\u0000\u0585\u0586\u0005M\u0000"+ - "\u0000\u0586\u0587\u0005E\u0000\u0000\u0587\u0588\u0005V\u0000\u0000\u0588"+ - "\u0589\u0005A\u0000\u0000\u0589\u058a\u0005L\u0000\u0000\u058a\u058b\u0005"+ - "U\u0000\u0000\u058b\u058c\u0005E\u0000\u0000\u058c\u0114\u0001\u0000\u0000"+ - "\u0000\u058d\u058e\u0005D\u0000\u0000\u058e\u058f\u0005A\u0000\u0000\u058f"+ - "\u0590\u0005T\u0000\u0000\u0590\u0591\u0005E\u0000\u0000\u0591\u0116\u0001"+ - "\u0000\u0000\u0000\u0592\u0593\u0005T\u0000\u0000\u0593\u0594\u0005I\u0000"+ - "\u0000\u0594\u0595\u0005M\u0000\u0000\u0595\u0596\u0005E\u0000\u0000\u0596"+ - "\u0118\u0001\u0000\u0000\u0000\u0597\u0598\u0005N\u0000\u0000\u0598\u0599"+ - "\u0005O\u0000\u0000\u0599\u059a\u0005W\u0000\u0000\u059a\u011a\u0001\u0000"+ - "\u0000\u0000\u059b\u059c\u0005T\u0000\u0000\u059c\u059d\u0005O\u0000\u0000"+ - "\u059d\u059e\u0005D\u0000\u0000\u059e\u059f\u0005A\u0000\u0000\u059f\u05a0"+ - "\u0005Y\u0000\u0000\u05a0\u011c\u0001\u0000\u0000\u0000\u05a1\u05a2\u0005"+ - "Y\u0000\u0000\u05a2\u05a3\u0005E\u0000\u0000\u05a3\u05a4\u0005A\u0000"+ - "\u0000\u05a4\u05a5\u0005R\u0000\u0000\u05a5\u011e\u0001\u0000\u0000\u0000"+ - "\u05a6\u05a7\u0005M\u0000\u0000\u05a7\u05a8\u0005O\u0000\u0000\u05a8\u05a9"+ - "\u0005N\u0000\u0000\u05a9\u05aa\u0005T\u0000\u0000\u05aa\u05ab\u0005H"+ - "\u0000\u0000\u05ab\u0120\u0001\u0000\u0000\u0000\u05ac\u05ad\u0005D\u0000"+ - "\u0000\u05ad\u05ae\u0005A\u0000\u0000\u05ae\u05af\u0005Y\u0000\u0000\u05af"+ - "\u0122\u0001\u0000\u0000\u0000\u05b0\u05b1\u0005H\u0000\u0000\u05b1\u05b2"+ - "\u0005O\u0000\u0000\u05b2\u05b3\u0005U\u0000\u0000\u05b3\u05b4\u0005R"+ - "\u0000\u0000\u05b4\u0124\u0001\u0000\u0000\u0000\u05b5\u05b6\u0005M\u0000"+ - "\u0000\u05b6\u05b7\u0005I\u0000\u0000\u05b7\u05b8\u0005N\u0000\u0000\u05b8"+ - "\u05b9\u0005U\u0000\u0000\u05b9\u05ba\u0005T\u0000\u0000\u05ba\u05bb\u0005"+ - "E\u0000\u0000\u05bb\u0126\u0001\u0000\u0000\u0000\u05bc\u05bd\u0005S\u0000"+ - "\u0000\u05bd\u05be\u0005E\u0000\u0000\u05be\u05bf\u0005C\u0000\u0000\u05bf"+ - "\u05c0\u0005O\u0000\u0000\u05c0\u05c1\u0005N\u0000\u0000\u05c1\u05c2\u0005"+ - "D\u0000\u0000\u05c2\u0128\u0001\u0000\u0000\u0000\u05c3\u05c4\u0005W\u0000"+ - "\u0000\u05c4\u05c5\u0005E\u0000\u0000\u05c5\u05c6\u0005E\u0000\u0000\u05c6"+ - "\u05c7\u0005K\u0000\u0000\u05c7\u05c8\u0005D\u0000\u0000\u05c8\u05c9\u0005"+ - "A\u0000\u0000\u05c9\u05ca\u0005Y\u0000\u0000\u05ca\u012a\u0001\u0000\u0000"+ - "\u0000\u05cb\u05cc\u0005D\u0000\u0000\u05cc\u05cd\u0005A\u0000\u0000\u05cd"+ - "\u05ce\u0005T\u0000\u0000\u05ce\u05cf\u0005E\u0000\u0000\u05cf\u05d0\u0005"+ - "D\u0000\u0000\u05d0\u05d1\u0005I\u0000\u0000\u05d1\u05d2\u0005F\u0000"+ - "\u0000\u05d2\u012c\u0001\u0000\u0000\u0000\u05d3\u05d4\u0005D\u0000\u0000"+ - "\u05d4\u05d5\u0005A\u0000\u0000\u05d5\u05d6\u0005Y\u0000\u0000\u05d6\u05d7"+ - "\u0005S\u0000\u0000\u05d7\u05d8\u00053\u0000\u0000\u05d8\u05d9\u00056"+ - "\u0000\u0000\u05d9\u05da\u00050\u0000\u0000\u05da\u012e\u0001\u0000\u0000"+ - "\u0000\u05db\u05dc\u0005E\u0000\u0000\u05dc\u05dd\u0005D\u0000\u0000\u05dd"+ - "\u05de\u0005A\u0000\u0000\u05de\u05df\u0005T\u0000\u0000\u05df\u05e0\u0005"+ - "E\u0000\u0000\u05e0\u0130\u0001\u0000\u0000\u0000\u05e1\u05e2\u0005E\u0000"+ - "\u0000\u05e2\u05e3\u0005O\u0000\u0000\u05e3\u05e4\u0005M\u0000\u0000\u05e4"+ - "\u05e5\u0005O\u0000\u0000\u05e5\u05e6\u0005N\u0000\u0000\u05e6\u05e7\u0005"+ - "T\u0000\u0000\u05e7\u05e8\u0005H\u0000\u0000\u05e8\u0132\u0001\u0000\u0000"+ - "\u0000\u05e9\u05ea\u0005N\u0000\u0000\u05ea\u05eb\u0005E\u0000\u0000\u05eb"+ - "\u05ec\u0005T\u0000\u0000\u05ec\u05ed\u0005W\u0000\u0000\u05ed\u05ee\u0005"+ - "O\u0000\u0000\u05ee\u05ef\u0005R\u0000\u0000\u05ef\u05f0\u0005K\u0000"+ - "\u0000\u05f0\u05f1\u0005D\u0000\u0000\u05f1\u05f2\u0005A\u0000\u0000\u05f2"+ - "\u05f3\u0005Y\u0000\u0000\u05f3\u05f4\u0005S\u0000\u0000\u05f4\u0134\u0001"+ - "\u0000\u0000\u0000\u05f5\u05f6\u0005W\u0000\u0000\u05f6\u05f7\u0005O\u0000"+ - "\u0000\u05f7\u05f8\u0005R\u0000\u0000\u05f8\u05f9\u0005K\u0000\u0000\u05f9"+ - "\u05fa\u0005D\u0000\u0000\u05fa\u05fb\u0005A\u0000\u0000\u05fb\u05fc\u0005"+ - "Y\u0000\u0000\u05fc\u0136\u0001\u0000\u0000\u0000\u05fd\u05fe\u0005W\u0000"+ - "\u0000\u05fe\u05ff\u0005E\u0000\u0000\u05ff\u0600\u0005E\u0000\u0000\u0600"+ - "\u0601\u0005K\u0000\u0000\u0601\u0602\u0005N\u0000\u0000\u0602\u0603\u0005"+ - "U\u0000\u0000\u0603\u0604\u0005M\u0000\u0000\u0604\u0138\u0001\u0000\u0000"+ - "\u0000\u0605\u0606\u0005M\u0000\u0000\u0606\u0607\u0005A\u0000\u0000\u0607"+ - "\u0608\u0005X\u0000\u0000\u0608\u013a\u0001\u0000\u0000\u0000\u0609\u060a"+ - "\u0005M\u0000\u0000\u060a\u060b\u0005E\u0000\u0000\u060b\u060c\u0005D"+ - "\u0000\u0000\u060c\u060d\u0005I\u0000\u0000\u060d\u060e\u0005A\u0000\u0000"+ - "\u060e\u060f\u0005N\u0000\u0000\u060f\u013c\u0001\u0000\u0000\u0000\u0610"+ - "\u0611\u0005M\u0000\u0000\u0611\u0612\u0005I\u0000\u0000\u0612\u0613\u0005"+ - "N\u0000\u0000\u0613\u013e\u0001\u0000\u0000\u0000\u0614\u0615\u0005Q\u0000"+ - "\u0000\u0615\u0616\u0005U\u0000\u0000\u0616\u0617\u0005A\u0000\u0000\u0617"+ - "\u0618\u0005R\u0000\u0000\u0618\u0619\u0005T\u0000\u0000\u0619\u061a\u0005"+ - "I\u0000\u0000\u061a\u061b\u0005L\u0000\u0000\u061b\u061c\u0005E\u0000"+ - "\u0000\u061c\u0140\u0001\u0000\u0000\u0000\u061d\u061e\u0005M\u0000\u0000"+ - "\u061e\u061f\u0005O\u0000\u0000\u061f\u0620\u0005D\u0000\u0000\u0620\u0621"+ - "\u0005E\u0000\u0000\u0621\u0142\u0001\u0000\u0000\u0000\u0622\u0623\u0005"+ - "L\u0000\u0000\u0623\u0624\u0005A\u0000\u0000\u0624\u0625\u0005R\u0000"+ - "\u0000\u0625\u0626\u0005G\u0000\u0000\u0626\u0627\u0005E\u0000\u0000\u0627"+ - "\u0144\u0001\u0000\u0000\u0000\u0628\u0629\u0005S\u0000\u0000\u0629\u062a"+ - "\u0005M\u0000\u0000\u062a\u062b\u0005A\u0000\u0000\u062b\u062c\u0005L"+ - "\u0000\u0000\u062c\u062d\u0005L\u0000\u0000\u062d\u0146\u0001\u0000\u0000"+ - "\u0000\u062e\u062f\u0005P\u0000\u0000\u062f\u0630\u0005E\u0000\u0000\u0630"+ - "\u0631\u0005R\u0000\u0000\u0631\u0632\u0005C\u0000\u0000\u0632\u0633\u0005"+ - "E\u0000\u0000\u0633\u0634\u0005N\u0000\u0000\u0634\u0635\u0005T\u0000"+ - "\u0000\u0635\u0636\u0005I\u0000\u0000\u0636\u0637\u0005L\u0000\u0000\u0637"+ - "\u0647\u0005E\u0000\u0000\u0638\u0639\u0005P\u0000\u0000\u0639\u063a\u0005"+ - "E\u0000\u0000\u063a\u063b\u0005R\u0000\u0000\u063b\u063c\u0005C\u0000"+ - "\u0000\u063c\u063d\u0005E\u0000\u0000\u063d\u063e\u0005N\u0000\u0000\u063e"+ - "\u063f\u0005T\u0000\u0000\u063f\u0640\u0005I\u0000\u0000\u0640\u0641\u0005"+ - "L\u0000\u0000\u0641\u0642\u0005E\u0000\u0000\u0642\u0643\u0005.\u0000"+ - "\u0000\u0643\u0644\u0005I\u0000\u0000\u0644\u0645\u0005N\u0000\u0000\u0645"+ - "\u0647\u0005C\u0000\u0000\u0646\u062e\u0001\u0000\u0000\u0000\u0646\u0638"+ - "\u0001\u0000\u0000\u0000\u0647\u0148\u0001\u0000\u0000\u0000\u0648\u0649"+ - "\u0005P\u0000\u0000\u0649\u064a\u0005E\u0000\u0000\u064a\u064b\u0005R"+ - "\u0000\u0000\u064b\u064c\u0005C\u0000\u0000\u064c\u064d\u0005E\u0000\u0000"+ - "\u064d\u064e\u0005N\u0000\u0000\u064e\u064f\u0005T\u0000\u0000\u064f\u0650"+ - "\u0005R\u0000\u0000\u0650\u0651\u0005A\u0000\u0000\u0651\u0652\u0005N"+ - "\u0000\u0000\u0652\u0663\u0005K\u0000\u0000\u0653\u0654\u0005P\u0000\u0000"+ - "\u0654\u0655\u0005E\u0000\u0000\u0655\u0656\u0005R\u0000\u0000\u0656\u0657"+ - "\u0005C\u0000\u0000\u0657\u0658\u0005E\u0000\u0000\u0658\u0659\u0005N"+ - "\u0000\u0000\u0659\u065a\u0005T\u0000\u0000\u065a\u065b\u0005R\u0000\u0000"+ - "\u065b\u065c\u0005A\u0000\u0000\u065c\u065d\u0005N\u0000\u0000\u065d\u065e"+ - "\u0005K\u0000\u0000\u065e\u065f\u0005.\u0000\u0000\u065f\u0660\u0005I"+ - "\u0000\u0000\u0660\u0661\u0005N\u0000\u0000\u0661\u0663\u0005C\u0000\u0000"+ - "\u0662\u0648\u0001\u0000\u0000\u0000\u0662\u0653\u0001\u0000\u0000\u0000"+ - "\u0663\u014a\u0001\u0000\u0000\u0000\u0664\u0665\u0005A\u0000\u0000\u0665"+ - "\u0666\u0005V\u0000\u0000\u0666\u0667\u0005E\u0000\u0000\u0667\u0668\u0005"+ - "R\u0000\u0000\u0668\u0669\u0005A\u0000\u0000\u0669\u066a\u0005G\u0000"+ - "\u0000\u066a\u066b\u0005E\u0000\u0000\u066b\u014c\u0001\u0000\u0000\u0000"+ - "\u066c\u066d\u0005A\u0000\u0000\u066d\u066e\u0005V\u0000\u0000\u066e\u066f"+ - "\u0005E\u0000\u0000\u066f\u0670\u0005R\u0000\u0000\u0670\u0671\u0005A"+ - "\u0000\u0000\u0671\u0672\u0005G\u0000\u0000\u0672\u0673\u0005E\u0000\u0000"+ - "\u0673\u0674\u0005I\u0000\u0000\u0674\u0675\u0005F\u0000\u0000\u0675\u014e"+ - "\u0001\u0000\u0000\u0000\u0676\u0677\u0005G\u0000\u0000\u0677\u0678\u0005"+ - "E\u0000\u0000\u0678\u0679\u0005O\u0000\u0000\u0679\u067a\u0005M\u0000"+ - "\u0000\u067a\u067b\u0005E\u0000\u0000\u067b\u067c\u0005A\u0000\u0000\u067c"+ - "\u067d\u0005N\u0000\u0000\u067d\u0150\u0001\u0000\u0000\u0000\u067e\u067f"+ - "\u0005H\u0000\u0000\u067f\u0680\u0005A\u0000\u0000\u0680\u0681\u0005R"+ - "\u0000\u0000\u0681\u0682\u0005M\u0000\u0000\u0682\u0683\u0005E\u0000\u0000"+ - "\u0683\u0684\u0005A\u0000\u0000\u0684\u0685\u0005N\u0000\u0000\u0685\u0152"+ - "\u0001\u0000\u0000\u0000\u0686\u0687\u0005C\u0000\u0000\u0687\u0688\u0005"+ - "O\u0000\u0000\u0688\u0689\u0005U\u0000\u0000\u0689\u068a\u0005N\u0000"+ - "\u0000\u068a\u068b\u0005T\u0000\u0000\u068b\u0154\u0001\u0000\u0000\u0000"+ - "\u068c\u068d\u0005C\u0000\u0000\u068d\u068e\u0005O\u0000\u0000\u068e\u068f"+ - "\u0005U\u0000\u0000\u068f\u0690\u0005N\u0000\u0000\u0690\u0691\u0005T"+ - "\u0000\u0000\u0691\u0692\u0005I\u0000\u0000\u0692\u0693\u0005F\u0000\u0000"+ - "\u0693\u0156\u0001\u0000\u0000\u0000\u0694\u0695\u0005S\u0000\u0000\u0695"+ - "\u0696\u0005U\u0000\u0000\u0696\u0697\u0005M\u0000\u0000\u0697\u0158\u0001"+ - "\u0000\u0000\u0000\u0698\u0699\u0005S\u0000\u0000\u0699\u069a\u0005U\u0000"+ - "\u0000\u069a\u069b\u0005M\u0000\u0000\u069b\u069c\u0005I\u0000\u0000\u069c"+ - "\u069d\u0005F\u0000\u0000\u069d\u015a\u0001\u0000\u0000\u0000\u069e\u069f"+ - "\u0005A\u0000\u0000\u069f\u06a0\u0005V\u0000\u0000\u06a0\u06a1\u0005E"+ - "\u0000\u0000\u06a1\u06a2\u0005D\u0000\u0000\u06a2\u06a3\u0005E\u0000\u0000"+ - "\u06a3\u06a4\u0005V\u0000\u0000\u06a4\u015c\u0001\u0000\u0000\u0000\u06a5"+ - "\u06a6\u0005S\u0000\u0000\u06a6\u06a7\u0005T\u0000\u0000\u06a7\u06a8\u0005"+ - "D\u0000\u0000\u06a8\u06a9\u0005E\u0000\u0000\u06a9\u06b2\u0005V\u0000"+ - "\u0000\u06aa\u06ab\u0005S\u0000\u0000\u06ab\u06ac\u0005T\u0000\u0000\u06ac"+ - "\u06ad\u0005D\u0000\u0000\u06ad\u06ae\u0005E\u0000\u0000\u06ae\u06af\u0005"+ - "V\u0000\u0000\u06af\u06b0\u0005.\u0000\u0000\u06b0\u06b2\u0005S\u0000"+ - "\u0000\u06b1\u06a5\u0001\u0000\u0000\u0000\u06b1\u06aa\u0001\u0000\u0000"+ - "\u0000\u06b2\u015e\u0001\u0000\u0000\u0000\u06b3\u06b4\u0005S\u0000\u0000"+ - "\u06b4\u06b5\u0005T\u0000\u0000\u06b5\u06b6\u0005D\u0000\u0000\u06b6\u06b7"+ - "\u0005E\u0000\u0000\u06b7\u06b8\u0005V\u0000\u0000\u06b8\u06c1\u0005P"+ - "\u0000\u0000\u06b9\u06ba\u0005S\u0000\u0000\u06ba\u06bb\u0005T\u0000\u0000"+ - "\u06bb\u06bc\u0005D\u0000\u0000\u06bc\u06bd\u0005E\u0000\u0000\u06bd\u06be"+ - "\u0005V\u0000\u0000\u06be\u06bf\u0005.\u0000\u0000\u06bf\u06c1\u0005P"+ - "\u0000\u0000\u06c0\u06b3\u0001\u0000\u0000\u0000\u06c0\u06b9\u0001\u0000"+ - "\u0000\u0000\u06c1\u0160\u0001\u0000\u0000\u0000\u06c2\u06c3\u0005C\u0000"+ - "\u0000\u06c3\u06c4\u0005O\u0000\u0000\u06c4\u06c5\u0005V\u0000\u0000\u06c5"+ - "\u06c6\u0005A\u0000\u0000\u06c6\u06d4\u0005R\u0000\u0000\u06c7\u06c8\u0005"+ - "C\u0000\u0000\u06c8\u06c9\u0005O\u0000\u0000\u06c9\u06ca\u0005V\u0000"+ - "\u0000\u06ca\u06cb\u0005A\u0000\u0000\u06cb\u06cc\u0005R\u0000\u0000\u06cc"+ - "\u06cd\u0005I\u0000\u0000\u06cd\u06ce\u0005A\u0000\u0000\u06ce\u06cf\u0005"+ - "N\u0000\u0000\u06cf\u06d0\u0005C\u0000\u0000\u06d0\u06d1\u0005E\u0000"+ - "\u0000\u06d1\u06d2\u0005.\u0000\u0000\u06d2\u06d4\u0005P\u0000\u0000\u06d3"+ - "\u06c2\u0001\u0000\u0000\u0000\u06d3\u06c7\u0001\u0000\u0000\u0000\u06d4"+ - "\u0162\u0001\u0000\u0000\u0000\u06d5\u06d6\u0005C\u0000\u0000\u06d6\u06d7"+ - "\u0005O\u0000\u0000\u06d7\u06d8\u0005V\u0000\u0000\u06d8\u06d9\u0005A"+ - "\u0000\u0000\u06d9\u06da\u0005R\u0000\u0000\u06da\u06db\u0005I\u0000\u0000"+ - "\u06db\u06dc\u0005A\u0000\u0000\u06dc\u06dd\u0005N\u0000\u0000\u06dd\u06de"+ - "\u0005C\u0000\u0000\u06de\u06df\u0005E\u0000\u0000\u06df\u06e0\u0005."+ - "\u0000\u0000\u06e0\u06e1\u0005S\u0000\u0000\u06e1\u0164\u0001\u0000\u0000"+ - "\u0000\u06e2\u06e3\u0005D\u0000\u0000\u06e3\u06e4\u0005E\u0000\u0000\u06e4"+ - "\u06e5\u0005V\u0000\u0000\u06e5\u06e6\u0005S\u0000\u0000\u06e6\u06e7\u0005"+ - "Q\u0000\u0000\u06e7\u0166\u0001\u0000\u0000\u0000\u06e8\u06e9\u0005V\u0000"+ - "\u0000\u06e9\u06ea\u0005A\u0000\u0000\u06ea\u06f1\u0005R\u0000\u0000\u06eb"+ - "\u06ec\u0005V\u0000\u0000\u06ec\u06ed\u0005A\u0000\u0000\u06ed\u06ee\u0005"+ - "R\u0000\u0000\u06ee\u06ef\u0005.\u0000\u0000\u06ef\u06f1\u0005S\u0000"+ - "\u0000\u06f0\u06e8\u0001\u0000\u0000\u0000\u06f0\u06eb\u0001\u0000\u0000"+ - "\u0000\u06f1\u0168\u0001\u0000\u0000\u0000\u06f2\u06f3\u0005V\u0000\u0000"+ - "\u06f3\u06f4\u0005A\u0000\u0000\u06f4\u06f5\u0005R\u0000\u0000\u06f5\u06fc"+ - "\u0005P\u0000\u0000\u06f6\u06f7\u0005V\u0000\u0000\u06f7\u06f8\u0005A"+ - "\u0000\u0000\u06f8\u06f9\u0005R\u0000\u0000\u06f9\u06fa\u0005.\u0000\u0000"+ - "\u06fa\u06fc\u0005P\u0000\u0000\u06fb\u06f2\u0001\u0000\u0000\u0000\u06fb"+ - "\u06f6\u0001\u0000\u0000\u0000\u06fc\u016a\u0001\u0000\u0000\u0000\u06fd"+ - "\u06fe\u0005N\u0000\u0000\u06fe\u06ff\u0005O\u0000\u0000\u06ff\u0700\u0005"+ - "R\u0000\u0000\u0700\u0701\u0005M\u0000\u0000\u0701\u0702\u0005D\u0000"+ - "\u0000\u0702\u0703\u0005I\u0000\u0000\u0703\u0704\u0005S\u0000\u0000\u0704"+ - "\u070f\u0005T\u0000\u0000\u0705\u0706\u0005N\u0000\u0000\u0706\u0707\u0005"+ - "O\u0000\u0000\u0707\u0708\u0005R\u0000\u0000\u0708\u0709\u0005M\u0000"+ - "\u0000\u0709\u070a\u0005.\u0000\u0000\u070a\u070b\u0005D\u0000\u0000\u070b"+ - "\u070c\u0005I\u0000\u0000\u070c\u070d\u0005S\u0000\u0000\u070d\u070f\u0005"+ - "T\u0000\u0000\u070e\u06fd\u0001\u0000\u0000\u0000\u070e\u0705\u0001\u0000"+ - "\u0000\u0000\u070f\u016c\u0001\u0000\u0000\u0000\u0710\u0711\u0005N\u0000"+ - "\u0000\u0711\u0712\u0005O\u0000\u0000\u0712\u0713\u0005R\u0000\u0000\u0713"+ - "\u0714\u0005M\u0000\u0000\u0714\u0715\u0005I\u0000\u0000\u0715\u0716\u0005"+ - "N\u0000\u0000\u0716\u0720\u0005V\u0000\u0000\u0717\u0718\u0005N\u0000"+ - "\u0000\u0718\u0719\u0005O\u0000\u0000\u0719\u071a\u0005R\u0000\u0000\u071a"+ - "\u071b\u0005M\u0000\u0000\u071b\u071c\u0005.\u0000\u0000\u071c\u071d\u0005"+ - "I\u0000\u0000\u071d\u071e\u0005N\u0000\u0000\u071e\u0720\u0005V\u0000"+ - "\u0000\u071f\u0710\u0001\u0000\u0000\u0000\u071f\u0717\u0001\u0000\u0000"+ - "\u0000\u0720\u016e\u0001\u0000\u0000\u0000\u0721\u0722\u0005N\u0000\u0000"+ - "\u0722\u0723\u0005O\u0000\u0000\u0723\u0724\u0005R\u0000\u0000\u0724\u0725"+ - "\u0005M\u0000\u0000\u0725\u0726\u0005S\u0000\u0000\u0726\u0727\u0005D"+ - "\u0000\u0000\u0727\u0728\u0005I\u0000\u0000\u0728\u0729\u0005S\u0000\u0000"+ - "\u0729\u0736\u0005T\u0000\u0000\u072a\u072b\u0005N\u0000\u0000\u072b\u072c"+ - "\u0005O\u0000\u0000\u072c\u072d\u0005R\u0000\u0000\u072d\u072e\u0005M"+ - "\u0000\u0000\u072e\u072f\u0005.\u0000\u0000\u072f\u0730\u0005S\u0000\u0000"+ - "\u0730\u0731\u0005.\u0000\u0000\u0731\u0732\u0005D\u0000\u0000\u0732\u0733"+ - "\u0005I\u0000\u0000\u0733\u0734\u0005S\u0000\u0000\u0734\u0736\u0005T"+ - "\u0000\u0000\u0735\u0721\u0001\u0000\u0000\u0000\u0735\u072a\u0001\u0000"+ - "\u0000\u0000\u0736\u0170\u0001\u0000\u0000\u0000\u0737\u0738\u0005N\u0000"+ - "\u0000\u0738\u0739\u0005O\u0000\u0000\u0739\u073a\u0005R\u0000\u0000\u073a"+ - "\u073b\u0005M\u0000\u0000\u073b\u073c\u0005S\u0000\u0000\u073c\u073d\u0005"+ - "I\u0000\u0000\u073d\u073e\u0005N\u0000\u0000\u073e\u074a\u0005V\u0000"+ - "\u0000\u073f\u0740\u0005N\u0000\u0000\u0740\u0741\u0005O\u0000\u0000\u0741"+ - "\u0742\u0005R\u0000\u0000\u0742\u0743\u0005M\u0000\u0000\u0743\u0744\u0005"+ - ".\u0000\u0000\u0744\u0745\u0005S\u0000\u0000\u0745\u0746\u0005.\u0000"+ - "\u0000\u0746\u0747\u0005I\u0000\u0000\u0747\u0748\u0005N\u0000\u0000\u0748"+ - "\u074a\u0005V\u0000\u0000\u0749\u0737\u0001\u0000\u0000\u0000\u0749\u073f"+ - "\u0001\u0000\u0000\u0000\u074a\u0172\u0001\u0000\u0000\u0000\u074b\u074c"+ - "\u0005B\u0000\u0000\u074c\u074d\u0005E\u0000\u0000\u074d\u074e\u0005T"+ - "\u0000\u0000\u074e\u074f\u0005A\u0000\u0000\u074f\u0750\u0005D\u0000\u0000"+ - "\u0750\u0751\u0005I\u0000\u0000\u0751\u0752\u0005S\u0000\u0000\u0752\u075d"+ - "\u0005T\u0000\u0000\u0753\u0754\u0005B\u0000\u0000\u0754\u0755\u0005E"+ - "\u0000\u0000\u0755\u0756\u0005T\u0000\u0000\u0756\u0757\u0005A\u0000\u0000"+ - "\u0757\u0758\u0005.\u0000\u0000\u0758\u0759\u0005D\u0000\u0000\u0759\u075a"+ - "\u0005I\u0000\u0000\u075a\u075b\u0005S\u0000\u0000\u075b\u075d\u0005T"+ - "\u0000\u0000\u075c\u074b\u0001\u0000\u0000\u0000\u075c\u0753\u0001\u0000"+ - "\u0000\u0000\u075d\u0174\u0001\u0000\u0000\u0000\u075e\u075f\u0005B\u0000"+ - "\u0000\u075f\u0760\u0005E\u0000\u0000\u0760\u0761\u0005T\u0000\u0000\u0761"+ - "\u0762\u0005A\u0000\u0000\u0762\u0763\u0005I\u0000\u0000\u0763\u0764\u0005"+ - "N\u0000\u0000\u0764\u076e\u0005V\u0000\u0000\u0765\u0766\u0005B\u0000"+ - "\u0000\u0766\u0767\u0005E\u0000\u0000\u0767\u0768\u0005T\u0000\u0000\u0768"+ - "\u0769\u0005A\u0000\u0000\u0769\u076a\u0005.\u0000\u0000\u076a\u076b\u0005"+ - "I\u0000\u0000\u076b\u076c\u0005N\u0000\u0000\u076c\u076e\u0005V\u0000"+ - "\u0000\u076d\u075e\u0001\u0000\u0000\u0000\u076d\u0765\u0001\u0000\u0000"+ - "\u0000\u076e\u0176\u0001\u0000\u0000\u0000\u076f\u0770\u0005B\u0000\u0000"+ - "\u0770\u0771\u0005I\u0000\u0000\u0771\u0772\u0005N\u0000\u0000\u0772\u0773"+ - "\u0005O\u0000\u0000\u0773\u0774\u0005M\u0000\u0000\u0774\u0775\u0005D"+ - "\u0000\u0000\u0775\u0776\u0005I\u0000\u0000\u0776\u0777\u0005S\u0000\u0000"+ - "\u0777\u0783\u0005T\u0000\u0000\u0778\u0779\u0005B\u0000\u0000\u0779\u077a"+ - "\u0005I\u0000\u0000\u077a\u077b\u0005N\u0000\u0000\u077b\u077c\u0005O"+ - "\u0000\u0000\u077c\u077d\u0005M\u0000\u0000\u077d\u077e\u0005.\u0000\u0000"+ - "\u077e\u077f\u0005D\u0000\u0000\u077f\u0780\u0005I\u0000\u0000\u0780\u0781"+ - "\u0005S\u0000\u0000\u0781\u0783\u0005T\u0000\u0000\u0782\u076f\u0001\u0000"+ - "\u0000\u0000\u0782\u0778\u0001\u0000\u0000\u0000\u0783\u0178\u0001\u0000"+ - "\u0000\u0000\u0784\u0785\u0005E\u0000\u0000\u0785\u0786\u0005X\u0000\u0000"+ - "\u0786\u0787\u0005P\u0000\u0000\u0787\u0788\u0005O\u0000\u0000\u0788\u0789"+ - "\u0005N\u0000\u0000\u0789\u078a\u0005D\u0000\u0000\u078a\u078b\u0005I"+ - "\u0000\u0000\u078b\u078c\u0005S\u0000\u0000\u078c\u0798\u0005T\u0000\u0000"+ - "\u078d\u078e\u0005E\u0000\u0000\u078e\u078f\u0005X\u0000\u0000\u078f\u0790"+ - "\u0005P\u0000\u0000\u0790\u0791\u0005O\u0000\u0000\u0791\u0792\u0005N"+ - "\u0000\u0000\u0792\u0793\u0005.\u0000\u0000\u0793\u0794\u0005D\u0000\u0000"+ - "\u0794\u0795\u0005I\u0000\u0000\u0795\u0796\u0005S\u0000\u0000\u0796\u0798"+ - "\u0005T\u0000\u0000\u0797\u0784\u0001\u0000\u0000\u0000\u0797\u078d\u0001"+ - "\u0000\u0000\u0000\u0798\u017a\u0001\u0000\u0000\u0000\u0799\u079a\u0005"+ - "F\u0000\u0000\u079a\u079b\u0005D\u0000\u0000\u079b\u079c\u0005I\u0000"+ - "\u0000\u079c\u079d\u0005S\u0000\u0000\u079d\u07a5\u0005T\u0000\u0000\u079e"+ - "\u079f\u0005F\u0000\u0000\u079f\u07a0\u0005.\u0000\u0000\u07a0\u07a1\u0005"+ - "D\u0000\u0000\u07a1\u07a2\u0005I\u0000\u0000\u07a2\u07a3\u0005S\u0000"+ - "\u0000\u07a3\u07a5\u0005T\u0000\u0000\u07a4\u0799\u0001\u0000\u0000\u0000"+ - "\u07a4\u079e\u0001\u0000\u0000\u0000\u07a5\u017c\u0001\u0000\u0000\u0000"+ - "\u07a6\u07a7\u0005F\u0000\u0000\u07a7\u07a8\u0005I\u0000\u0000\u07a8\u07a9"+ - "\u0005N\u0000\u0000\u07a9\u07b0\u0005V\u0000\u0000\u07aa\u07ab\u0005F"+ - "\u0000\u0000\u07ab\u07ac\u0005.\u0000\u0000\u07ac\u07ad\u0005I\u0000\u0000"+ - "\u07ad\u07ae\u0005N\u0000\u0000\u07ae\u07b0\u0005V\u0000\u0000\u07af\u07a6"+ - "\u0001\u0000\u0000\u0000\u07af\u07aa\u0001\u0000\u0000\u0000\u07b0\u017e"+ - "\u0001\u0000\u0000\u0000\u07b1\u07b2\u0005F\u0000\u0000\u07b2\u07b3\u0005"+ - "I\u0000\u0000\u07b3\u07b4\u0005S\u0000\u0000\u07b4\u07b5\u0005H\u0000"+ - "\u0000\u07b5\u07b6\u0005E\u0000\u0000\u07b6\u07b7\u0005R\u0000\u0000\u07b7"+ - "\u0180\u0001\u0000\u0000\u0000\u07b8\u07b9\u0005F\u0000\u0000\u07b9\u07ba"+ - "\u0005I\u0000\u0000\u07ba\u07bb\u0005S\u0000\u0000\u07bb\u07bc\u0005H"+ - "\u0000\u0000\u07bc\u07bd\u0005E\u0000\u0000\u07bd\u07be\u0005R\u0000\u0000"+ - "\u07be\u07bf\u0005I\u0000\u0000\u07bf\u07c0\u0005N\u0000\u0000\u07c0\u07c1"+ - "\u0005V\u0000\u0000\u07c1\u0182\u0001\u0000\u0000\u0000\u07c2\u07c3\u0005"+ - "G\u0000\u0000\u07c3\u07c4\u0005A\u0000\u0000\u07c4\u07c5\u0005M\u0000"+ - "\u0000\u07c5\u07c6\u0005M\u0000\u0000\u07c6\u07c7\u0005A\u0000\u0000\u07c7"+ - "\u07c8\u0005D\u0000\u0000\u07c8\u07c9\u0005I\u0000\u0000\u07c9\u07ca\u0005"+ - "S\u0000\u0000\u07ca\u07d6\u0005T\u0000\u0000\u07cb\u07cc\u0005G\u0000"+ - "\u0000\u07cc\u07cd\u0005A\u0000\u0000\u07cd\u07ce\u0005M\u0000\u0000\u07ce"+ - "\u07cf\u0005M\u0000\u0000\u07cf\u07d0\u0005A\u0000\u0000\u07d0\u07d1\u0005"+ - ".\u0000\u0000\u07d1\u07d2\u0005D\u0000\u0000\u07d2\u07d3\u0005I\u0000"+ - "\u0000\u07d3\u07d4\u0005S\u0000\u0000\u07d4\u07d6\u0005T\u0000\u0000\u07d5"+ - "\u07c2\u0001\u0000\u0000\u0000\u07d5\u07cb\u0001\u0000\u0000\u0000\u07d6"+ - "\u0184\u0001\u0000\u0000\u0000\u07d7\u07d8\u0005G\u0000\u0000\u07d8\u07d9"+ - "\u0005A\u0000\u0000\u07d9\u07da\u0005M\u0000\u0000\u07da\u07db\u0005M"+ - "\u0000\u0000\u07db\u07dc\u0005A\u0000\u0000\u07dc\u07dd\u0005I\u0000\u0000"+ - "\u07dd\u07de\u0005N\u0000\u0000\u07de\u07e9\u0005V\u0000\u0000\u07df\u07e0"+ - "\u0005G\u0000\u0000\u07e0\u07e1\u0005A\u0000\u0000\u07e1\u07e2\u0005M"+ - "\u0000\u0000\u07e2\u07e3\u0005M\u0000\u0000\u07e3\u07e4\u0005A\u0000\u0000"+ - "\u07e4\u07e5\u0005.\u0000\u0000\u07e5\u07e6\u0005I\u0000\u0000\u07e6\u07e7"+ - "\u0005N\u0000\u0000\u07e7\u07e9\u0005V\u0000\u0000\u07e8\u07d7\u0001\u0000"+ - "\u0000\u0000\u07e8\u07df\u0001\u0000\u0000\u0000\u07e9\u0186\u0001\u0000"+ - "\u0000\u0000\u07ea\u07eb\u0005G\u0000\u0000\u07eb\u07ec\u0005A\u0000\u0000"+ - "\u07ec\u07ed\u0005M\u0000\u0000\u07ed\u07ee\u0005M\u0000\u0000\u07ee\u07ef"+ - "\u0005A\u0000\u0000\u07ef\u07f0\u0005L\u0000\u0000\u07f0\u0801\u0005N"+ - "\u0000\u0000\u07f1\u07f2\u0005G\u0000\u0000\u07f2\u07f3\u0005A\u0000\u0000"+ - "\u07f3\u07f4\u0005M\u0000\u0000\u07f4\u07f5\u0005M\u0000\u0000\u07f5\u07f6"+ - "\u0005A\u0000\u0000\u07f6\u07f7\u0005L\u0000\u0000\u07f7\u07f8\u0005N"+ - "\u0000\u0000\u07f8\u07f9\u0005.\u0000\u0000\u07f9\u07fa\u0005P\u0000\u0000"+ - "\u07fa\u07fb\u0005R\u0000\u0000\u07fb\u07fc\u0005E\u0000\u0000\u07fc\u07fd"+ - "\u0005C\u0000\u0000\u07fd\u07fe\u0005I\u0000\u0000\u07fe\u07ff\u0005S"+ - "\u0000\u0000\u07ff\u0801\u0005E\u0000\u0000\u0800\u07ea\u0001\u0000\u0000"+ - "\u0000\u0800\u07f1\u0001\u0000\u0000\u0000\u0801\u0188\u0001\u0000\u0000"+ - "\u0000\u0802\u0803\u0005H\u0000\u0000\u0803\u0804\u0005Y\u0000\u0000\u0804"+ - "\u0805\u0005P\u0000\u0000\u0805\u0806\u0005G\u0000\u0000\u0806\u0807\u0005"+ - "E\u0000\u0000\u0807\u0808\u0005O\u0000\u0000\u0808\u0809\u0005M\u0000"+ - "\u0000\u0809\u080a\u0005D\u0000\u0000\u080a\u080b\u0005I\u0000\u0000\u080b"+ - "\u080c\u0005S\u0000\u0000\u080c\u081a\u0005T\u0000\u0000\u080d\u080e\u0005"+ - "H\u0000\u0000\u080e\u080f\u0005Y\u0000\u0000\u080f\u0810\u0005P\u0000"+ - "\u0000\u0810\u0811\u0005G\u0000\u0000\u0811\u0812\u0005E\u0000\u0000\u0812"+ - "\u0813\u0005O\u0000\u0000\u0813\u0814\u0005M\u0000\u0000\u0814\u0815\u0005"+ - ".\u0000\u0000\u0815\u0816\u0005D\u0000\u0000\u0816\u0817\u0005I\u0000"+ - "\u0000\u0817\u0818\u0005S\u0000\u0000\u0818\u081a\u0005T\u0000\u0000\u0819"+ - "\u0802\u0001\u0000\u0000\u0000\u0819\u080d\u0001\u0000\u0000\u0000\u081a"+ - "\u018a\u0001\u0000\u0000\u0000\u081b\u081c\u0005L\u0000\u0000\u081c\u081d"+ - "\u0005O\u0000\u0000\u081d\u081e\u0005G\u0000\u0000\u081e\u081f\u0005I"+ - "\u0000\u0000\u081f\u0820\u0005N\u0000\u0000\u0820\u082d\u0005V\u0000\u0000"+ - "\u0821\u0822\u0005L\u0000\u0000\u0822\u0823\u0005O\u0000\u0000\u0823\u0824"+ - "\u0005G\u0000\u0000\u0824\u0825\u0005N\u0000\u0000\u0825\u0826\u0005O"+ - "\u0000\u0000\u0826\u0827\u0005R\u0000\u0000\u0827\u0828\u0005M\u0000\u0000"+ - "\u0828\u0829\u0005.\u0000\u0000\u0829\u082a\u0005I\u0000\u0000\u082a\u082b"+ - "\u0005N\u0000\u0000\u082b\u082d\u0005V\u0000\u0000\u082c\u081b\u0001\u0000"+ - "\u0000\u0000\u082c\u0821\u0001\u0000\u0000\u0000\u082d\u018c\u0001\u0000"+ - "\u0000\u0000\u082e\u082f\u0005L\u0000\u0000\u082f\u0830\u0005O\u0000\u0000"+ - "\u0830\u0831\u0005G\u0000\u0000\u0831\u0832\u0005N\u0000\u0000\u0832\u0833"+ - "\u0005O\u0000\u0000\u0833\u0834\u0005R\u0000\u0000\u0834\u0835\u0005M"+ - "\u0000\u0000\u0835\u0836\u0005D\u0000\u0000\u0836\u0837\u0005I\u0000\u0000"+ - "\u0837\u0838\u0005S\u0000\u0000\u0838\u0846\u0005T\u0000\u0000\u0839\u083a"+ - "\u0005L\u0000\u0000\u083a\u083b\u0005O\u0000\u0000\u083b\u083c\u0005G"+ - "\u0000\u0000\u083c\u083d\u0005N\u0000\u0000\u083d\u083e\u0005O\u0000\u0000"+ - "\u083e\u083f\u0005R\u0000\u0000\u083f\u0840\u0005M\u0000\u0000\u0840\u0841"+ - "\u0005.\u0000\u0000\u0841\u0842\u0005D\u0000\u0000\u0842\u0843\u0005I"+ - "\u0000\u0000\u0843\u0844\u0005S\u0000\u0000\u0844\u0846\u0005T\u0000\u0000"+ - "\u0845\u082e\u0001\u0000\u0000\u0000\u0845\u0839\u0001\u0000\u0000\u0000"+ - "\u0846\u018e\u0001\u0000\u0000\u0000\u0847\u0848\u0005N\u0000\u0000\u0848"+ - "\u0849\u0005E\u0000\u0000\u0849\u084a\u0005G\u0000\u0000\u084a\u084b\u0005"+ - "B\u0000\u0000\u084b\u084c\u0005I\u0000\u0000\u084c\u084d\u0005N\u0000"+ - "\u0000\u084d\u084e\u0005O\u0000\u0000\u084e\u084f\u0005M\u0000\u0000\u084f"+ - "\u0850\u0005D\u0000\u0000\u0850\u0851\u0005I\u0000\u0000\u0851\u0852\u0005"+ - "S\u0000\u0000\u0852\u0861\u0005T\u0000\u0000\u0853\u0854\u0005N\u0000"+ - "\u0000\u0854\u0855\u0005E\u0000\u0000\u0855\u0856\u0005G\u0000\u0000\u0856"+ - "\u0857\u0005B\u0000\u0000\u0857\u0858\u0005I\u0000\u0000\u0858\u0859\u0005"+ - "N\u0000\u0000\u0859\u085a\u0005O\u0000\u0000\u085a\u085b\u0005M\u0000"+ - "\u0000\u085b\u085c\u0005.\u0000\u0000\u085c\u085d\u0005D\u0000\u0000\u085d"+ - "\u085e\u0005I\u0000\u0000\u085e\u085f\u0005S\u0000\u0000\u085f\u0861\u0005"+ - "T\u0000\u0000\u0860\u0847\u0001\u0000\u0000\u0000\u0860\u0853\u0001\u0000"+ - "\u0000\u0000\u0861\u0190\u0001\u0000\u0000\u0000\u0862\u0863\u0005P\u0000"+ - "\u0000\u0863\u0864\u0005O\u0000\u0000\u0864\u0865\u0005I\u0000\u0000\u0865"+ - "\u0866\u0005S\u0000\u0000\u0866\u0867\u0005S\u0000\u0000\u0867\u0868\u0005"+ - "O\u0000\u0000\u0868\u0876\u0005N\u0000\u0000\u0869\u086a\u0005P\u0000"+ - "\u0000\u086a\u086b\u0005O\u0000\u0000\u086b\u086c\u0005I\u0000\u0000\u086c"+ - "\u086d\u0005S\u0000\u0000\u086d\u086e\u0005S\u0000\u0000\u086e\u086f\u0005"+ - "O\u0000\u0000\u086f\u0870\u0005N\u0000\u0000\u0870\u0871\u0005.\u0000"+ - "\u0000\u0871\u0872\u0005D\u0000\u0000\u0872\u0873\u0005I\u0000\u0000\u0873"+ - "\u0874\u0005S\u0000\u0000\u0874\u0876\u0005T\u0000\u0000\u0875\u0862\u0001"+ - "\u0000\u0000\u0000\u0875\u0869\u0001\u0000\u0000\u0000\u0876\u0192\u0001"+ - "\u0000\u0000\u0000\u0877\u0878\u0005T\u0000\u0000\u0878\u0879\u0005D\u0000"+ - "\u0000\u0879\u087a\u0005I\u0000\u0000\u087a\u087b\u0005S\u0000\u0000\u087b"+ - "\u0883\u0005T\u0000\u0000\u087c\u087d\u0005T\u0000\u0000\u087d\u087e\u0005"+ - ".\u0000\u0000\u087e\u087f\u0005D\u0000\u0000\u087f\u0880\u0005I\u0000"+ - "\u0000\u0880\u0881\u0005S\u0000\u0000\u0881\u0883\u0005T\u0000\u0000\u0882"+ - "\u0877\u0001\u0000\u0000\u0000\u0882\u087c\u0001\u0000\u0000\u0000\u0883"+ - "\u0194\u0001\u0000\u0000\u0000\u0884\u0885\u0005T\u0000\u0000\u0885\u0886"+ - "\u0005I\u0000\u0000\u0886\u0887\u0005N\u0000\u0000\u0887\u088e\u0005V"+ - "\u0000\u0000\u0888\u0889\u0005T\u0000\u0000\u0889\u088a\u0005.\u0000\u0000"+ - "\u088a\u088b\u0005I\u0000\u0000\u088b\u088c\u0005N\u0000\u0000\u088c\u088e"+ - "\u0005V\u0000\u0000\u088d\u0884\u0001\u0000\u0000\u0000\u088d\u0888\u0001"+ - "\u0000\u0000\u0000\u088e\u0196\u0001\u0000\u0000\u0000\u088f\u0890\u0005"+ - "W\u0000\u0000\u0890\u0891\u0005E\u0000\u0000\u0891\u0892\u0005I\u0000"+ - "\u0000\u0892\u0893\u0005B\u0000\u0000\u0893\u0894\u0005U\u0000\u0000\u0894"+ - "\u0895\u0005L\u0000\u0000\u0895\u0896\u0005L\u0000\u0000\u0896\u0198\u0001"+ - "\u0000\u0000\u0000\u0897\u0898\u0005U\u0000\u0000\u0898\u0899\u0005R\u0000"+ - "\u0000\u0899\u089a\u0005L\u0000\u0000\u089a\u089b\u0005E\u0000\u0000\u089b"+ - "\u089c\u0005N\u0000\u0000\u089c\u089d\u0005C\u0000\u0000\u089d\u089e\u0005"+ - "O\u0000\u0000\u089e\u089f\u0005D\u0000\u0000\u089f\u08a0\u0005E\u0000"+ - "\u0000\u08a0\u019a\u0001\u0000\u0000\u0000\u08a1\u08a2\u0005U\u0000\u0000"+ - "\u08a2\u08a3\u0005R\u0000\u0000\u08a3\u08a4\u0005L\u0000\u0000\u08a4\u08a5"+ - "\u0005D\u0000\u0000\u08a5\u08a6\u0005E\u0000\u0000\u08a6\u08a7\u0005C"+ - "\u0000\u0000\u08a7\u08a8\u0005O\u0000\u0000\u08a8\u08a9\u0005D\u0000\u0000"+ - "\u08a9\u08aa\u0005E\u0000\u0000\u08aa\u019c\u0001\u0000\u0000\u0000\u08ab"+ - "\u08ac\u0005H\u0000\u0000\u08ac\u08ad\u0005T\u0000\u0000\u08ad\u08ae\u0005"+ - "M\u0000\u0000\u08ae\u08af\u0005L\u0000\u0000\u08af\u08b0\u0005E\u0000"+ - "\u0000\u08b0\u08b1\u0005N\u0000\u0000\u08b1\u08b2\u0005C\u0000\u0000\u08b2"+ - "\u08b3\u0005O\u0000\u0000\u08b3\u08b4\u0005D\u0000\u0000\u08b4\u08b5\u0005"+ - "E\u0000\u0000\u08b5\u019e\u0001\u0000\u0000\u0000\u08b6\u08b7\u0005H\u0000"+ - "\u0000\u08b7\u08b8\u0005T\u0000\u0000\u08b8\u08b9\u0005M\u0000\u0000\u08b9"+ - "\u08ba\u0005L\u0000\u0000\u08ba\u08bb\u0005D\u0000\u0000\u08bb\u08bc\u0005"+ - "E\u0000\u0000\u08bc\u08bd\u0005C\u0000\u0000\u08bd\u08be\u0005O\u0000"+ - "\u0000\u08be\u08bf\u0005D\u0000\u0000\u08bf\u08c0\u0005E\u0000\u0000\u08c0"+ - "\u01a0\u0001\u0000\u0000\u0000\u08c1\u08c2\u0005B\u0000\u0000\u08c2\u08c3"+ - "\u0005A\u0000\u0000\u08c3\u08c4\u0005S\u0000\u0000\u08c4\u08c5\u0005E"+ - "\u0000\u0000\u08c5\u08c6\u00056\u0000\u0000\u08c6\u08c7\u00054\u0000\u0000"+ - "\u08c7\u08c8\u0005T\u0000\u0000\u08c8\u08c9\u0005O\u0000\u0000\u08c9\u08ca"+ - "\u0005T\u0000\u0000\u08ca\u08cb\u0005E\u0000\u0000\u08cb\u08cc\u0005X"+ - "\u0000\u0000\u08cc\u08cd\u0005T\u0000\u0000\u08cd\u01a2\u0001\u0000\u0000"+ - "\u0000\u08ce\u08cf\u0005B\u0000\u0000\u08cf\u08d0\u0005A\u0000\u0000\u08d0"+ - "\u08d1\u0005S\u0000\u0000\u08d1\u08d2\u0005E\u0000\u0000\u08d2\u08d3\u0005"+ - "6\u0000\u0000\u08d3\u08d4\u00054\u0000\u0000\u08d4\u08d5\u0005U\u0000"+ - "\u0000\u08d5\u08d6\u0005R\u0000\u0000\u08d6\u08d7\u0005L\u0000\u0000\u08d7"+ - "\u08d8\u0005T\u0000\u0000\u08d8\u08d9\u0005O\u0000\u0000\u08d9\u08da\u0005"+ - "T\u0000\u0000\u08da\u08db\u0005E\u0000\u0000\u08db\u08dc\u0005X\u0000"+ - "\u0000\u08dc\u08dd\u0005T\u0000\u0000\u08dd\u01a4\u0001\u0000\u0000\u0000"+ - "\u08de\u08df\u0005T\u0000\u0000\u08df\u08e0\u0005E\u0000\u0000\u08e0\u08e1"+ - "\u0005X\u0000\u0000\u08e1\u08e2\u0005T\u0000\u0000\u08e2\u08e3\u0005T"+ - "\u0000\u0000\u08e3\u08e4\u0005O\u0000\u0000\u08e4\u08e5\u0005B\u0000\u0000"+ - "\u08e5\u08e6\u0005A\u0000\u0000\u08e6\u08e7\u0005S\u0000\u0000\u08e7\u08e8"+ - "\u0005E\u0000\u0000\u08e8\u08e9\u00056\u0000\u0000\u08e9\u08ea\u00054"+ - "\u0000\u0000\u08ea\u01a6\u0001\u0000\u0000\u0000\u08eb\u08ec\u0005T\u0000"+ - "\u0000\u08ec\u08ed\u0005E\u0000\u0000\u08ed\u08ee\u0005X\u0000\u0000\u08ee"+ - "\u08ef\u0005T\u0000\u0000\u08ef\u08f0\u0005T\u0000\u0000\u08f0\u08f1\u0005"+ - "O\u0000\u0000\u08f1\u08f2\u0005B\u0000\u0000\u08f2\u08f3\u0005A\u0000"+ - "\u0000\u08f3\u08f4\u0005S\u0000\u0000\u08f4\u08f5\u0005E\u0000\u0000\u08f5"+ - "\u08f6\u00056\u0000\u0000\u08f6\u08f7\u00054\u0000\u0000\u08f7\u08f8\u0005"+ - "U\u0000\u0000\u08f8\u08f9\u0005R\u0000\u0000\u08f9\u08fa\u0005L\u0000"+ - "\u0000\u08fa\u01a8\u0001\u0000\u0000\u0000\u08fb\u08fc\u0005R\u0000\u0000"+ - "\u08fc\u08fd\u0005E\u0000\u0000\u08fd\u08fe\u0005G\u0000\u0000\u08fe\u08ff"+ - "\u0005E\u0000\u0000\u08ff\u0900\u0005X\u0000\u0000\u0900\u01aa\u0001\u0000"+ - "\u0000\u0000\u0901\u0902\u0005R\u0000\u0000\u0902\u0903\u0005E\u0000\u0000"+ - "\u0903\u0904\u0005G\u0000\u0000\u0904\u0905\u0005E\u0000\u0000\u0905\u0906"+ - "\u0005X\u0000\u0000\u0906\u0907\u0005R\u0000\u0000\u0907\u0908\u0005E"+ - "\u0000\u0000\u0908\u0909\u0005P\u0000\u0000\u0909\u090a\u0005A\u0000\u0000"+ - "\u090a\u090b\u0005L\u0000\u0000\u090b\u090c\u0005C\u0000\u0000\u090c\u090d"+ - "\u0005E\u0000\u0000\u090d\u01ac\u0001\u0000\u0000\u0000\u090e\u090f\u0005"+ - "I\u0000\u0000\u090f\u0910\u0005S\u0000\u0000\u0910\u0911\u0005R\u0000"+ - "\u0000\u0911\u0912\u0005E\u0000\u0000\u0912\u0913\u0005G\u0000\u0000\u0913"+ - "\u0914\u0005E\u0000\u0000\u0914\u091d\u0005X\u0000\u0000\u0915\u0916\u0005"+ - "I\u0000\u0000\u0916\u0917\u0005S\u0000\u0000\u0917\u0918\u0005M\u0000"+ - "\u0000\u0918\u0919\u0005A\u0000\u0000\u0919\u091a\u0005T\u0000\u0000\u091a"+ - "\u091b\u0005C\u0000\u0000\u091b\u091d\u0005H\u0000\u0000\u091c\u090e\u0001"+ - "\u0000\u0000\u0000\u091c\u0915\u0001\u0000\u0000\u0000\u091d\u01ae\u0001"+ - "\u0000\u0000\u0000\u091e\u091f\u0005G\u0000\u0000\u091f\u0920\u0005U\u0000"+ - "\u0000\u0920\u0921\u0005I\u0000\u0000\u0921\u0922\u0005D\u0000\u0000\u0922"+ - "\u01b0\u0001\u0000\u0000\u0000\u0923\u0924\u0005M\u0000\u0000\u0924\u0925"+ - "\u0005D\u0000\u0000\u0925\u0926\u00055\u0000\u0000\u0926\u01b2\u0001\u0000"+ - "\u0000\u0000\u0927\u0928\u0005S\u0000\u0000\u0928\u0929\u0005H\u0000\u0000"+ - "\u0929\u092a\u0005A\u0000\u0000\u092a\u092b\u00051\u0000\u0000\u092b\u01b4"+ - "\u0001\u0000\u0000\u0000\u092c\u092d\u0005S\u0000\u0000\u092d\u092e\u0005"+ - "H\u0000\u0000\u092e\u092f\u0005A\u0000\u0000\u092f\u0930\u00052\u0000"+ - "\u0000\u0930\u0931\u00055\u0000\u0000\u0931\u0932\u00056\u0000\u0000\u0932"+ - "\u01b6\u0001\u0000\u0000\u0000\u0933\u0934\u0005S\u0000\u0000\u0934\u0935"+ - "\u0005H\u0000\u0000\u0935\u0936\u0005A\u0000\u0000\u0936\u0937\u00055"+ - "\u0000\u0000\u0937\u0938\u00051\u0000\u0000\u0938\u0939\u00052\u0000\u0000"+ - "\u0939\u01b8\u0001\u0000\u0000\u0000\u093a\u093b\u0005C\u0000\u0000\u093b"+ - "\u093c\u0005R\u0000\u0000\u093c\u093d\u0005C\u0000\u0000\u093d\u093e\u0005"+ - "3\u0000\u0000\u093e\u093f\u00052\u0000\u0000\u093f\u01ba\u0001\u0000\u0000"+ - "\u0000\u0940\u0941\u0005H\u0000\u0000\u0941\u0942\u0005M\u0000\u0000\u0942"+ - "\u0943\u0005A\u0000\u0000\u0943\u0944\u0005C\u0000\u0000\u0944\u0945\u0005"+ - "M\u0000\u0000\u0945\u0946\u0005D\u0000\u0000\u0946\u0947\u00055\u0000"+ - "\u0000\u0947\u01bc\u0001\u0000\u0000\u0000\u0948\u0949\u0005H\u0000\u0000"+ - "\u0949\u094a\u0005M\u0000\u0000\u094a\u094b\u0005A\u0000\u0000\u094b\u094c"+ - "\u0005C\u0000\u0000\u094c\u094d\u0005S\u0000\u0000\u094d\u094e\u0005H"+ - "\u0000\u0000\u094e\u094f\u0005A\u0000\u0000\u094f\u0950\u00051\u0000\u0000"+ - "\u0950\u01be\u0001\u0000\u0000\u0000\u0951\u0952\u0005H\u0000\u0000\u0952"+ - "\u0953\u0005M\u0000\u0000\u0953\u0954\u0005A\u0000\u0000\u0954\u0955\u0005"+ - "C\u0000\u0000\u0955\u0956\u0005S\u0000\u0000\u0956\u0957\u0005H\u0000"+ - "\u0000\u0957\u0958\u0005A\u0000\u0000\u0958\u0959\u00052\u0000\u0000\u0959"+ - "\u095a\u00055\u0000\u0000\u095a\u095b\u00056\u0000\u0000\u095b\u01c0\u0001"+ - "\u0000\u0000\u0000\u095c\u095d\u0005H\u0000\u0000\u095d\u095e\u0005M\u0000"+ - "\u0000\u095e\u095f\u0005A\u0000\u0000\u095f\u0960\u0005C\u0000\u0000\u0960"+ - "\u0961\u0005S\u0000\u0000\u0961\u0962\u0005H\u0000\u0000\u0962\u0963\u0005"+ - "A\u0000\u0000\u0963\u0964\u00055\u0000\u0000\u0964\u0965\u00051\u0000"+ - "\u0000\u0965\u0966\u00052\u0000\u0000\u0966\u01c2\u0001\u0000\u0000\u0000"+ - "\u0967\u0968\u0005T\u0000\u0000\u0968\u0969\u0005R\u0000\u0000\u0969\u096a"+ - "\u0005I\u0000\u0000\u096a\u096b\u0005M\u0000\u0000\u096b\u096c\u0005S"+ - "\u0000\u0000\u096c\u096d\u0005T\u0000\u0000\u096d\u096e\u0005A\u0000\u0000"+ - "\u096e\u096f\u0005R\u0000\u0000\u096f\u0976\u0005T\u0000\u0000\u0970\u0971"+ - "\u0005L\u0000\u0000\u0971\u0972\u0005T\u0000\u0000\u0972\u0973\u0005R"+ - "\u0000\u0000\u0973\u0974\u0005I\u0000\u0000\u0974\u0976\u0005M\u0000\u0000"+ - "\u0975\u0967\u0001\u0000\u0000\u0000\u0975\u0970\u0001\u0000\u0000\u0000"+ - "\u0976\u01c4\u0001\u0000\u0000\u0000\u0977\u0978\u0005T\u0000\u0000\u0978"+ - "\u0979\u0005R\u0000\u0000\u0979\u097a\u0005I\u0000\u0000\u097a\u097b\u0005"+ - "M\u0000\u0000\u097b\u097c\u0005E\u0000\u0000\u097c\u097d\u0005N\u0000"+ - "\u0000\u097d\u0984\u0005D\u0000\u0000\u097e\u097f\u0005R\u0000\u0000\u097f"+ - "\u0980\u0005T\u0000\u0000\u0980\u0981\u0005R\u0000\u0000\u0981\u0982\u0005"+ - "I\u0000\u0000\u0982\u0984\u0005M\u0000\u0000\u0983\u0977\u0001\u0000\u0000"+ - "\u0000\u0983\u097e\u0001\u0000\u0000\u0000\u0984\u01c6\u0001\u0000\u0000"+ - "\u0000\u0985\u0986\u0005I\u0000\u0000\u0986\u0987\u0005N\u0000\u0000\u0987"+ - "\u0988\u0005D\u0000\u0000\u0988\u0989\u0005E\u0000\u0000\u0989\u098a\u0005"+ - "X\u0000\u0000\u098a\u098b\u0005O\u0000\u0000\u098b\u098c\u0005F\u0000"+ - "\u0000\u098c\u01c8\u0001\u0000\u0000\u0000\u098d\u098e\u0005L\u0000\u0000"+ - "\u098e\u098f\u0005A\u0000\u0000\u098f\u0990\u0005S\u0000\u0000\u0990\u0991"+ - "\u0005T\u0000\u0000\u0991\u0992\u0005I\u0000\u0000\u0992\u0993\u0005N"+ - "\u0000\u0000\u0993\u0994\u0005D\u0000\u0000\u0994\u0995\u0005E\u0000\u0000"+ - "\u0995\u0996\u0005X\u0000\u0000\u0996\u0997\u0005O\u0000\u0000\u0997\u0998"+ - "\u0005F\u0000\u0000\u0998\u01ca\u0001\u0000\u0000\u0000\u0999\u099a\u0005"+ - "S\u0000\u0000\u099a\u099b\u0005P\u0000\u0000\u099b\u099c\u0005L\u0000"+ - "\u0000\u099c\u099d\u0005I\u0000\u0000\u099d\u099e\u0005T\u0000\u0000\u099e"+ - "\u01cc\u0001\u0000\u0000\u0000\u099f\u09a0\u0005J\u0000\u0000\u09a0\u09a1"+ - "\u0005O\u0000\u0000\u09a1\u09a2\u0005I\u0000\u0000\u09a2\u09a3\u0005N"+ - "\u0000\u0000\u09a3\u01ce\u0001\u0000\u0000\u0000\u09a4\u09a5\u0005S\u0000"+ - "\u0000\u09a5\u09a6\u0005U\u0000\u0000\u09a6\u09a7\u0005B\u0000\u0000\u09a7"+ - "\u09a8\u0005S\u0000\u0000\u09a8\u09a9\u0005T\u0000\u0000\u09a9\u09aa\u0005"+ - "R\u0000\u0000\u09aa\u09ab\u0005I\u0000\u0000\u09ab\u09ac\u0005N\u0000"+ - "\u0000\u09ac\u09ad\u0005G\u0000\u0000\u09ad\u01d0\u0001\u0000\u0000\u0000"+ - "\u09ae\u09af\u0005S\u0000\u0000\u09af\u09b0\u0005T\u0000\u0000\u09b0\u09b1"+ - "\u0005A\u0000\u0000\u09b1\u09b2\u0005R\u0000\u0000\u09b2\u09b3\u0005T"+ - "\u0000\u0000\u09b3\u09b4\u0005S\u0000\u0000\u09b4\u09b5\u0005W\u0000\u0000"+ - "\u09b5\u09b6\u0005I\u0000\u0000\u09b6\u09b7\u0005T\u0000\u0000\u09b7\u09b8"+ - "\u0005H\u0000\u0000\u09b8\u01d2\u0001\u0000\u0000\u0000\u09b9\u09ba\u0005"+ - "E\u0000\u0000\u09ba\u09bb\u0005N\u0000\u0000\u09bb\u09bc\u0005D\u0000"+ - "\u0000\u09bc\u09bd\u0005S\u0000\u0000\u09bd\u09be\u0005W\u0000\u0000\u09be"+ - "\u09bf\u0005I\u0000\u0000\u09bf\u09c0\u0005T\u0000\u0000\u09c0\u09c1\u0005"+ - "H\u0000\u0000\u09c1\u01d4\u0001\u0000\u0000\u0000\u09c2\u09c3\u0005I\u0000"+ - "\u0000\u09c3\u09c4\u0005S\u0000\u0000\u09c4\u09c5\u0005N\u0000\u0000\u09c5"+ - "\u09c6\u0005U\u0000\u0000\u09c6\u09c7\u0005L\u0000\u0000\u09c7\u09c8\u0005"+ - "L\u0000\u0000\u09c8\u09c9\u0005O\u0000\u0000\u09c9\u09ca\u0005R\u0000"+ - "\u0000\u09ca\u09cb\u0005E\u0000\u0000\u09cb\u09cc\u0005M\u0000"; + "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ + "!\u0001!\u0003!\u02db\b!\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001#"+ + "\u0001#\u0001#\u0001#\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001"+ + "$\u0001$\u0001$\u0001$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001"+ + "%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+ + "\'\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001"+ + "(\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001"+ + "*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+ + "+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001"+ + ",\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001-\u0001-\u0001.\u0001"+ + ".\u0001.\u0001/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u0001"+ + "0\u00010\u00010\u00030\u0348\b0\u00011\u00011\u00011\u00011\u00011\u0001"+ + "1\u00011\u00031\u0351\b1\u00012\u00012\u00013\u00013\u00013\u00014\u0001"+ + "4\u00014\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u00015\u0001"+ + "5\u00015\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u00016\u0001"+ + "6\u00016\u00016\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ + "7\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00019\u0001"+ + "9\u00019\u00019\u00019\u00019\u00019\u00019\u0001:\u0001:\u0001:\u0001"+ + ":\u0001:\u0001:\u0001:\u0001:\u0001;\u0001;\u0001;\u0001;\u0001;\u0001"+ + ";\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001"+ + "<\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001>\u0001"+ + ">\u0001>\u0001>\u0001>\u0001>\u0001>\u0001>\u0001?\u0001?\u0001?\u0001"+ + "?\u0001?\u0001?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001"+ + "B\u0001B\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001D\u0001"+ + "D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001F\u0001F\u0001"+ + "F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001H\u0001H\u0001H\u0001H\u0001"+ + "I\u0001I\u0001I\u0001I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001"+ + "J\u0001J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ + "K\u0001K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001"+ + "M\u0001M\u0001M\u0001M\u0001N\u0001N\u0001N\u0001N\u0001N\u0001O\u0001"+ + "O\u0001O\u0001O\u0001P\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001"+ + "Q\u0001Q\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001"+ + "S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0001T\u0001U\u0001U\u0001"+ + "U\u0001U\u0001U\u0001V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001W\u0001"+ + "W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001X\u0001X\u0001"+ + "Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001"+ + "Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001"+ + "[\u0001[\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001"+ + "\\\u0001]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001^\u0001"+ + "^\u0001^\u0001^\u0001^\u0001^\u0001_\u0001_\u0001_\u0001_\u0001_\u0001"+ + "`\u0001`\u0001`\u0001`\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001"+ + "a\u0001b\u0001b\u0001b\u0001b\u0001b\u0001c\u0001c\u0001c\u0001c\u0001"+ + "c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001d\u0001d\u0001"+ + "d\u0001d\u0001d\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001"+ + "e\u0001e\u0001e\u0001e\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001"+ + "g\u0001g\u0001g\u0001g\u0001h\u0001h\u0001h\u0001i\u0001i\u0001i\u0001"+ + "i\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001k\u0001k\u0001k\u0001"+ + "k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001l\u0001"+ + "l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001m\u0001m\u0001m\u0001"+ + "m\u0001m\u0001m\u0001m\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001"+ + "o\u0001o\u0001o\u0001o\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ + "p\u0001p\u0001p\u0001p\u0001p\u0003p\u04e3\bp\u0001q\u0001q\u0001q\u0001"+ + "q\u0001q\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001s\u0001s\u0001"+ + "s\u0001s\u0001s\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ + "t\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ + "u\u0001v\u0001v\u0001v\u0001v\u0001v\u0001w\u0001w\u0001w\u0001w\u0001"+ + "w\u0001w\u0001x\u0001x\u0001x\u0001x\u0001x\u0001y\u0001y\u0001y\u0001"+ + "y\u0001z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001"+ + "z\u0001z\u0001z\u0003z\u0527\bz\u0001{\u0001{\u0001{\u0001{\u0001|\u0001"+ + "|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001}\u0001}\u0001}\u0001}\u0001"+ + "}\u0001}\u0001}\u0001}\u0001~\u0001~\u0001~\u0001~\u0001~\u0001\u007f"+ + "\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u0080"+ + "\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0081"+ + "\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0082\u0001\u0082"+ + "\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082"+ + "\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0084"+ + "\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0085\u0001\u0085"+ + "\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0086\u0001\u0086\u0001\u0086"+ + "\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086"+ + "\u0001\u0086\u0001\u0086\u0001\u0086\u0003\u0086\u0575\b\u0086\u0001\u0087"+ + "\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0088"+ + "\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088"+ + "\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0089\u0001\u0089\u0001\u0089"+ + "\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089"+ + "\u0001\u0089\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a"+ + "\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008c"+ + "\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008d\u0001\u008d\u0001\u008d"+ + "\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008e\u0001\u008e\u0001\u008e"+ + "\u0001\u008e\u0001\u008e\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f"+ + "\u0001\u008f\u0001\u008f\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090"+ + "\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0092"+ + "\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092"+ + "\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0093"+ + "\u0001\u0093\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0094"+ + "\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0095\u0001\u0095\u0001\u0095"+ + "\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0096"+ + "\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096"+ + "\u0001\u0096\u0001\u0097\u0001\u0097\u0001\u0097\u0001\u0097\u0001\u0097"+ + "\u0001\u0097\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0098"+ + "\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0099\u0001\u0099\u0001\u0099"+ + "\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099"+ + "\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u009a\u0001\u009a\u0001\u009a"+ + "\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009b"+ + "\u0001\u009b\u0001\u009b\u0001\u009b\u0001\u009b\u0001\u009b\u0001\u009b"+ + "\u0001\u009b\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009d"+ + "\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d"+ + "\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009f\u0001\u009f"+ + "\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u009f"+ + "\u0001\u009f\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0"+ + "\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1"+ + "\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ + "\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ + "\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ + "\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ + "\u0003\u00a3\u064a\b\u00a3\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4"+ + "\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4"+ + "\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4"+ + "\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4"+ + "\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0003\u00a4\u0666\b\u00a4"+ + "\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a5"+ + "\u0001\u00a5\u0001\u00a5\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6"+ + "\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6"+ + "\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7"+ + "\u0001\u00a7\u0001\u00a7\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8"+ + "\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a9\u0001\u00a9"+ + "\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00aa\u0001\u00aa"+ + "\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa"+ + "\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ac\u0001\u00ac"+ + "\u0001\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ad\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ae"+ + "\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae"+ + "\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0003\u00ae"+ + "\u06b5\b\u00ae\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af"+ + "\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af"+ + "\u0001\u00af\u0001\u00af\u0003\u00af\u06c4\b\u00af\u0001\u00b0\u0001\u00b0"+ + "\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0"+ + "\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0"+ + "\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0003\u00b0\u06d7\b\u00b0\u0001\u00b1"+ + "\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1"+ + "\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1"+ + "\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b2"+ + "\u0001\u00b3\u0001\u00b3\u0001\u00b3\u0001\u00b3\u0001\u00b3\u0001\u00b3"+ + "\u0001\u00b3\u0001\u00b3\u0003\u00b3\u06f4\b\u00b3\u0001\u00b4\u0001\u00b4"+ + "\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4"+ + "\u0001\u00b4\u0003\u00b4\u06ff\b\u00b4\u0001\u00b5\u0001\u00b5\u0001\u00b5"+ + "\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5"+ + "\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5"+ + "\u0001\u00b5\u0001\u00b5\u0003\u00b5\u0712\b\u00b5\u0001\u00b6\u0001\u00b6"+ + "\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6"+ + "\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6"+ + "\u0001\u00b6\u0003\u00b6\u0723\b\u00b6\u0001\u00b7\u0001\u00b7\u0001\u00b7"+ + "\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7"+ + "\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7"+ + "\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0003\u00b7"+ + "\u0739\b\u00b7\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8"+ + "\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8"+ + "\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8"+ + "\u0001\u00b8\u0003\u00b8\u074d\b\u00b8\u0001\u00b9\u0001\u00b9\u0001\u00b9"+ + "\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9"+ + "\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9"+ + "\u0001\u00b9\u0001\u00b9\u0003\u00b9\u0760\b\u00b9\u0001\u00ba\u0001\u00ba"+ + "\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba"+ + "\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba"+ + "\u0001\u00ba\u0003\u00ba\u0771\b\u00ba\u0001\u00bb\u0001\u00bb\u0001\u00bb"+ + "\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb"+ + "\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb"+ + "\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0003\u00bb\u0786\b\u00bb"+ + "\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc"+ + "\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc"+ + "\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc"+ + "\u0001\u00bc\u0003\u00bc\u079b\b\u00bc\u0001\u00bd\u0001\u00bd\u0001\u00bd"+ + "\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd"+ + "\u0001\u00bd\u0001\u00bd\u0003\u00bd\u07a8\b\u00bd\u0001\u00be\u0001\u00be"+ + "\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00be"+ + "\u0001\u00be\u0003\u00be\u07b3\b\u00be\u0001\u00bf\u0001\u00bf\u0001\u00bf"+ + "\u0001\u00bf\u0001\u00bf\u0001\u00bf\u0001\u00bf\u0001\u00c0\u0001\u00c0"+ + "\u0001\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c0"+ + "\u0001\u00c0\u0001\u00c0\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1"+ + "\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1"+ + "\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1"+ + "\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0003\u00c1\u07d9\b\u00c1\u0001\u00c2"+ + "\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2"+ + "\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2"+ + "\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0003\u00c2\u07ec\b\u00c2"+ + "\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3"+ + "\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3"+ + "\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3"+ + "\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0003\u00c3\u0804\b\u00c3"+ + "\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4"+ + "\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4"+ + "\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4"+ + "\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0003\u00c4"+ + "\u081d\b\u00c4\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5"+ + "\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5"+ + "\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5"+ + "\u0003\u00c5\u0830\b\u00c5\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6"+ + "\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6"+ + "\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6"+ + "\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6"+ + "\u0001\u00c6\u0003\u00c6\u0849\b\u00c6\u0001\u00c7\u0001\u00c7\u0001\u00c7"+ + "\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7"+ + "\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7"+ + "\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7"+ + "\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0003\u00c7\u0864\b\u00c7"+ + "\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8"+ + "\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8"+ + "\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8"+ + "\u0001\u00c8\u0003\u00c8\u0879\b\u00c8\u0001\u00c9\u0001\u00c9\u0001\u00c9"+ + "\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9"+ + "\u0001\u00c9\u0001\u00c9\u0003\u00c9\u0886\b\u00c9\u0001\u00ca\u0001\u00ca"+ + "\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00ca"+ + "\u0001\u00ca\u0003\u00ca\u0891\b\u00ca\u0001\u00cb\u0001\u00cb\u0001\u00cb"+ + "\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cc"+ + "\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc"+ + "\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cd\u0001\u00cd\u0001\u00cd"+ + "\u0001\u00cd\u0001\u00cd\u0001\u00cd\u0001\u00cd\u0001\u00cd\u0001\u00cd"+ + "\u0001\u00cd\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce"+ + "\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce"+ + "\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf"+ + "\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00d0"+ + "\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0"+ + "\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0"+ + "\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1"+ + "\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1"+ + "\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d2\u0001\u00d2"+ + "\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2"+ + "\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d3"+ + "\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3"+ + "\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3"+ + "\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d4\u0001\u00d4\u0001\u00d4"+ + "\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d5\u0001\u00d5\u0001\u00d5"+ + "\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5"+ + "\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d6\u0001\u00d6"+ + "\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6"+ + "\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6"+ + "\u0003\u00d6\u0920\b\u00d6\u0001\u00d7\u0001\u00d7\u0001\u00d7\u0001\u00d7"+ + "\u0001\u00d7\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001\u00d9"+ + "\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00da\u0001\u00da"+ + "\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00db"+ + "\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db"+ + "\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc"+ + "\u0001\u00dc\u0001\u00dc\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd"+ + "\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00de"+ + "\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de"+ + "\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00df\u0001\u00df"+ + "\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df"+ + "\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00e0\u0001\u00e0\u0001\u00e0"+ + "\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0"+ + "\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0003\u00e0"+ + "\u0973\b\u00e0\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1"+ + "\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1"+ + "\u0001\u00e1\u0003\u00e1\u0981\b\u00e1\u0001\u00e2\u0001\u00e2\u0001\u00e2"+ + "\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e3"+ + "\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3"+ + "\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e4"+ + "\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e5"+ + "\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e6\u0001\u00e6"+ + "\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6"+ + "\u0001\u00e6\u0001\u00e6\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7"+ + "\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7"+ + "\u0001\u00e7\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8"+ + "\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e9\u0001\u00e9"+ + "\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9"+ + "\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9"+ + "\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea"+ + "\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea"+ + "\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea"+ + "\u0001\u00ea\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb"+ + "\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb"+ + "\u0001\u00eb\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec"+ + "\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ed"+ + "\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ee\u0001\u00ee"+ + "\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee"+ + "\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ef\u0001\u00ef"+ + "\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef"+ + "\u0001\u00ef\u0001\u00ef\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f0"+ + "\u0001\u00f0\u0001\u00f0\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1"+ + "\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1"+ + "\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1"+ + "\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1"+ + "\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1"+ + "\u0001\u00f1\u0003\u00f1\u0a35\b\u00f1\u0001\u00f2\u0001\u00f2\u0001\u00f2"+ + "\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2"+ + "\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3"+ + "\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f4\u0001\u00f4"+ + "\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4"+ + "\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f5"+ + "\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f6\u0001\u00f6\u0001\u00f6"+ + "\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6"+ + "\u0001\u00f6\u0001\u00f6\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7"+ + "\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7"+ + "\u0001\u00f7\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8"+ + "\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f9"+ + "\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9"+ + "\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9"+ + "\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9"+ + "\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9"+ + "\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0003\u00f9\u0a97\b\u00f9\u0001\u00fa"+ + "\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa"+ + "\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa"+ + "\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa"+ + "\u0001\u00fa\u0001\u00fa\u0003\u00fa\u0aae\b\u00fa\u0001\u00fb\u0001\u00fb"+ + "\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb"+ + "\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb"+ + "\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb"+ + "\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb"+ + "\u0003\u00fb\u0aca\b\u00fb\u0001\u00fc\u0001\u00fc\u0003\u00fc\u0ace\b"+ + "\u00fc\u0001\u00fc\u0001\u00fc\u0005\u00fc\u0ad2\b\u00fc\n\u00fc\f\u00fc"+ + "\u0ad5\t\u00fc\u0001\u00fd\u0001\u00fd\u0001\u00fe\u0004\u00fe\u0ada\b"+ + "\u00fe\u000b\u00fe\f\u00fe\u0adb\u0001\u00fe\u0001\u00fe\u0001\u00ff\u0001"+ + "\u00ff\u0001\u00ff\u0001\u00ff\u0005\u00ff\u0ae4\b\u00ff\n\u00ff\f\u00ff"+ + "\u0ae7\t\u00ff\u0001\u00ff\u0001\u00ff\u0001\u00ff\u0001\u00ff\u0001\u00ff"+ + "\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100\u0005\u0100\u0af2\b\u0100"+ + "\n\u0100\f\u0100\u0af5\t\u0100\u0001\u0100\u0001\u0100\u0001\u0ae5\u0000"+ + "\u0101\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006"+ + "\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e"+ + "\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017"+ + "/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%"+ + "K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083"+ + "B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097"+ + "L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00ab"+ + "V\u00adW\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf"+ + "`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3"+ + "j\u00d5k\u00d7l\u00d9m\u00dbn\u00ddo\u00dfp\u00e1q\u00e3r\u00e5s\u00e7"+ + "t\u00e9u\u00ebv\u00edw\u00efx\u00f1y\u00f3z\u00f5{\u00f7|\u00f9}\u00fb"+ + "~\u00fd\u007f\u00ff\u0080\u0101\u0081\u0103\u0082\u0105\u0083\u0107\u0084"+ + "\u0109\u0085\u010b\u0086\u010d\u0087\u010f\u0088\u0111\u0089\u0113\u008a"+ + "\u0115\u008b\u0117\u008c\u0119\u008d\u011b\u008e\u011d\u008f\u011f\u0090"+ + "\u0121\u0091\u0123\u0092\u0125\u0093\u0127\u0094\u0129\u0095\u012b\u0096"+ + "\u012d\u0097\u012f\u0098\u0131\u0099\u0133\u009a\u0135\u009b\u0137\u009c"+ + "\u0139\u009d\u013b\u009e\u013d\u009f\u013f\u00a0\u0141\u00a1\u0143\u00a2"+ + "\u0145\u00a3\u0147\u00a4\u0149\u00a5\u014b\u00a6\u014d\u00a7\u014f\u00a8"+ + "\u0151\u00a9\u0153\u00aa\u0155\u00ab\u0157\u00ac\u0159\u00ad\u015b\u00ae"+ + "\u015d\u00af\u015f\u00b0\u0161\u00b1\u0163\u00b2\u0165\u00b3\u0167\u00b4"+ + "\u0169\u00b5\u016b\u00b6\u016d\u00b7\u016f\u00b8\u0171\u00b9\u0173\u00ba"+ + "\u0175\u00bb\u0177\u00bc\u0179\u00bd\u017b\u00be\u017d\u00bf\u017f\u00c0"+ + "\u0181\u00c1\u0183\u00c2\u0185\u00c3\u0187\u00c4\u0189\u00c5\u018b\u00c6"+ + "\u018d\u00c7\u018f\u00c8\u0191\u00c9\u0193\u00ca\u0195\u00cb\u0197\u00cc"+ + "\u0199\u00cd\u019b\u00ce\u019d\u00cf\u019f\u00d0\u01a1\u00d1\u01a3\u00d2"+ + "\u01a5\u00d3\u01a7\u00d4\u01a9\u00d5\u01ab\u00d6\u01ad\u00d7\u01af\u00d8"+ + "\u01b1\u00d9\u01b3\u00da\u01b5\u00db\u01b7\u00dc\u01b9\u00dd\u01bb\u00de"+ + "\u01bd\u00df\u01bf\u00e0\u01c1\u00e1\u01c3\u00e2\u01c5\u00e3\u01c7\u00e4"+ + "\u01c9\u00e5\u01cb\u00e6\u01cd\u00e7\u01cf\u00e8\u01d1\u00e9\u01d3\u00ea"+ + "\u01d5\u00eb\u01d7\u00ec\u01d9\u00ed\u01db\u00ee\u01dd\u00ef\u01df\u00f0"+ + "\u01e1\u00f1\u01e3\u00f2\u01e5\u00f3\u01e7\u00f4\u01e9\u00f5\u01eb\u00f6"+ + "\u01ed\u00f7\u01ef\u00f8\u01f1\u00f9\u01f3\u00fa\u01f5\u00fb\u01f7\u00fc"+ + "\u01f9\u00fd\u01fb\u0000\u01fd\u00fe\u01ff\u00ff\u0201\u0100\u0001\u0000"+ + "\u000b\u0001\u000009\u0001\u000019\u0002\u0000++--\u0001\u0000\'\'\u0001"+ + "\u0000\"\"\u0001\u0000``\u0002\u0000AZ__\u0003\u000009AZ__\n\u0000\u00c0"+ + "\u00d6\u00d8\u00f6\u00f8\u1fff\u2c00\u2fff\u3040\u318f\u3300\u337f\u3400"+ + "\u3fff\u4e00\u8000\ud7ff\u8000\uf900\u8000\ufaff\u8000\uff00\u8000\ufff0"+ + "\u0003\u0000\t\n\f\r \u0002\u0000\n\n\r\r\u0b4f\u0000\u0001\u0001\u0000"+ + "\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000"+ + "\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000"+ + "\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000"+ + "\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000"+ + "\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000"+ + "\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000"+ + "\u0000\u001b\u0001\u0000\u0000\u0000\u0000\u001d\u0001\u0000\u0000\u0000"+ + "\u0000\u001f\u0001\u0000\u0000\u0000\u0000!\u0001\u0000\u0000\u0000\u0000"+ + "#\u0001\u0000\u0000\u0000\u0000%\u0001\u0000\u0000\u0000\u0000\'\u0001"+ + "\u0000\u0000\u0000\u0000)\u0001\u0000\u0000\u0000\u0000+\u0001\u0000\u0000"+ + "\u0000\u0000-\u0001\u0000\u0000\u0000\u0000/\u0001\u0000\u0000\u0000\u0000"+ + "1\u0001\u0000\u0000\u0000\u00003\u0001\u0000\u0000\u0000\u00005\u0001"+ + "\u0000\u0000\u0000\u00007\u0001\u0000\u0000\u0000\u00009\u0001\u0000\u0000"+ + "\u0000\u0000;\u0001\u0000\u0000\u0000\u0000=\u0001\u0000\u0000\u0000\u0000"+ + "?\u0001\u0000\u0000\u0000\u0000A\u0001\u0000\u0000\u0000\u0000C\u0001"+ + "\u0000\u0000\u0000\u0000E\u0001\u0000\u0000\u0000\u0000G\u0001\u0000\u0000"+ + "\u0000\u0000I\u0001\u0000\u0000\u0000\u0000K\u0001\u0000\u0000\u0000\u0000"+ + "M\u0001\u0000\u0000\u0000\u0000O\u0001\u0000\u0000\u0000\u0000Q\u0001"+ + "\u0000\u0000\u0000\u0000S\u0001\u0000\u0000\u0000\u0000U\u0001\u0000\u0000"+ + "\u0000\u0000W\u0001\u0000\u0000\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000"+ + "[\u0001\u0000\u0000\u0000\u0000]\u0001\u0000\u0000\u0000\u0000_\u0001"+ + "\u0000\u0000\u0000\u0000a\u0001\u0000\u0000\u0000\u0000c\u0001\u0000\u0000"+ + "\u0000\u0000e\u0001\u0000\u0000\u0000\u0000g\u0001\u0000\u0000\u0000\u0000"+ + "i\u0001\u0000\u0000\u0000\u0000k\u0001\u0000\u0000\u0000\u0000m\u0001"+ + "\u0000\u0000\u0000\u0000o\u0001\u0000\u0000\u0000\u0000q\u0001\u0000\u0000"+ + "\u0000\u0000s\u0001\u0000\u0000\u0000\u0000u\u0001\u0000\u0000\u0000\u0000"+ + "w\u0001\u0000\u0000\u0000\u0000y\u0001\u0000\u0000\u0000\u0000{\u0001"+ + "\u0000\u0000\u0000\u0000}\u0001\u0000\u0000\u0000\u0000\u007f\u0001\u0000"+ + "\u0000\u0000\u0000\u0081\u0001\u0000\u0000\u0000\u0000\u0083\u0001\u0000"+ + "\u0000\u0000\u0000\u0085\u0001\u0000\u0000\u0000\u0000\u0087\u0001\u0000"+ + "\u0000\u0000\u0000\u0089\u0001\u0000\u0000\u0000\u0000\u008b\u0001\u0000"+ + "\u0000\u0000\u0000\u008d\u0001\u0000\u0000\u0000\u0000\u008f\u0001\u0000"+ + "\u0000\u0000\u0000\u0091\u0001\u0000\u0000\u0000\u0000\u0093\u0001\u0000"+ + "\u0000\u0000\u0000\u0095\u0001\u0000\u0000\u0000\u0000\u0097\u0001\u0000"+ + "\u0000\u0000\u0000\u0099\u0001\u0000\u0000\u0000\u0000\u009b\u0001\u0000"+ + "\u0000\u0000\u0000\u009d\u0001\u0000\u0000\u0000\u0000\u009f\u0001\u0000"+ + "\u0000\u0000\u0000\u00a1\u0001\u0000\u0000\u0000\u0000\u00a3\u0001\u0000"+ + "\u0000\u0000\u0000\u00a5\u0001\u0000\u0000\u0000\u0000\u00a7\u0001\u0000"+ + "\u0000\u0000\u0000\u00a9\u0001\u0000\u0000\u0000\u0000\u00ab\u0001\u0000"+ + "\u0000\u0000\u0000\u00ad\u0001\u0000\u0000\u0000\u0000\u00af\u0001\u0000"+ + "\u0000\u0000\u0000\u00b1\u0001\u0000\u0000\u0000\u0000\u00b3\u0001\u0000"+ + "\u0000\u0000\u0000\u00b5\u0001\u0000\u0000\u0000\u0000\u00b7\u0001\u0000"+ + "\u0000\u0000\u0000\u00b9\u0001\u0000\u0000\u0000\u0000\u00bb\u0001\u0000"+ + "\u0000\u0000\u0000\u00bd\u0001\u0000\u0000\u0000\u0000\u00bf\u0001\u0000"+ + "\u0000\u0000\u0000\u00c1\u0001\u0000\u0000\u0000\u0000\u00c3\u0001\u0000"+ + "\u0000\u0000\u0000\u00c5\u0001\u0000\u0000\u0000\u0000\u00c7\u0001\u0000"+ + "\u0000\u0000\u0000\u00c9\u0001\u0000\u0000\u0000\u0000\u00cb\u0001\u0000"+ + "\u0000\u0000\u0000\u00cd\u0001\u0000\u0000\u0000\u0000\u00cf\u0001\u0000"+ + "\u0000\u0000\u0000\u00d1\u0001\u0000\u0000\u0000\u0000\u00d3\u0001\u0000"+ + "\u0000\u0000\u0000\u00d5\u0001\u0000\u0000\u0000\u0000\u00d7\u0001\u0000"+ + "\u0000\u0000\u0000\u00d9\u0001\u0000\u0000\u0000\u0000\u00db\u0001\u0000"+ + "\u0000\u0000\u0000\u00dd\u0001\u0000\u0000\u0000\u0000\u00df\u0001\u0000"+ + "\u0000\u0000\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001\u0000"+ + "\u0000\u0000\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001\u0000"+ + "\u0000\u0000\u0000\u00e9\u0001\u0000\u0000\u0000\u0000\u00eb\u0001\u0000"+ + "\u0000\u0000\u0000\u00ed\u0001\u0000\u0000\u0000\u0000\u00ef\u0001\u0000"+ + "\u0000\u0000\u0000\u00f1\u0001\u0000\u0000\u0000\u0000\u00f3\u0001\u0000"+ + "\u0000\u0000\u0000\u00f5\u0001\u0000\u0000\u0000\u0000\u00f7\u0001\u0000"+ + "\u0000\u0000\u0000\u00f9\u0001\u0000\u0000\u0000\u0000\u00fb\u0001\u0000"+ + "\u0000\u0000\u0000\u00fd\u0001\u0000\u0000\u0000\u0000\u00ff\u0001\u0000"+ + "\u0000\u0000\u0000\u0101\u0001\u0000\u0000\u0000\u0000\u0103\u0001\u0000"+ + "\u0000\u0000\u0000\u0105\u0001\u0000\u0000\u0000\u0000\u0107\u0001\u0000"+ + "\u0000\u0000\u0000\u0109\u0001\u0000\u0000\u0000\u0000\u010b\u0001\u0000"+ + "\u0000\u0000\u0000\u010d\u0001\u0000\u0000\u0000\u0000\u010f\u0001\u0000"+ + "\u0000\u0000\u0000\u0111\u0001\u0000\u0000\u0000\u0000\u0113\u0001\u0000"+ + "\u0000\u0000\u0000\u0115\u0001\u0000\u0000\u0000\u0000\u0117\u0001\u0000"+ + "\u0000\u0000\u0000\u0119\u0001\u0000\u0000\u0000\u0000\u011b\u0001\u0000"+ + "\u0000\u0000\u0000\u011d\u0001\u0000\u0000\u0000\u0000\u011f\u0001\u0000"+ + "\u0000\u0000\u0000\u0121\u0001\u0000\u0000\u0000\u0000\u0123\u0001\u0000"+ + "\u0000\u0000\u0000\u0125\u0001\u0000\u0000\u0000\u0000\u0127\u0001\u0000"+ + "\u0000\u0000\u0000\u0129\u0001\u0000\u0000\u0000\u0000\u012b\u0001\u0000"+ + "\u0000\u0000\u0000\u012d\u0001\u0000\u0000\u0000\u0000\u012f\u0001\u0000"+ + "\u0000\u0000\u0000\u0131\u0001\u0000\u0000\u0000\u0000\u0133\u0001\u0000"+ + "\u0000\u0000\u0000\u0135\u0001\u0000\u0000\u0000\u0000\u0137\u0001\u0000"+ + "\u0000\u0000\u0000\u0139\u0001\u0000\u0000\u0000\u0000\u013b\u0001\u0000"+ + "\u0000\u0000\u0000\u013d\u0001\u0000\u0000\u0000\u0000\u013f\u0001\u0000"+ + "\u0000\u0000\u0000\u0141\u0001\u0000\u0000\u0000\u0000\u0143\u0001\u0000"+ + "\u0000\u0000\u0000\u0145\u0001\u0000\u0000\u0000\u0000\u0147\u0001\u0000"+ + "\u0000\u0000\u0000\u0149\u0001\u0000\u0000\u0000\u0000\u014b\u0001\u0000"+ + "\u0000\u0000\u0000\u014d\u0001\u0000\u0000\u0000\u0000\u014f\u0001\u0000"+ + "\u0000\u0000\u0000\u0151\u0001\u0000\u0000\u0000\u0000\u0153\u0001\u0000"+ + "\u0000\u0000\u0000\u0155\u0001\u0000\u0000\u0000\u0000\u0157\u0001\u0000"+ + "\u0000\u0000\u0000\u0159\u0001\u0000\u0000\u0000\u0000\u015b\u0001\u0000"+ + "\u0000\u0000\u0000\u015d\u0001\u0000\u0000\u0000\u0000\u015f\u0001\u0000"+ + "\u0000\u0000\u0000\u0161\u0001\u0000\u0000\u0000\u0000\u0163\u0001\u0000"+ + "\u0000\u0000\u0000\u0165\u0001\u0000\u0000\u0000\u0000\u0167\u0001\u0000"+ + "\u0000\u0000\u0000\u0169\u0001\u0000\u0000\u0000\u0000\u016b\u0001\u0000"+ + "\u0000\u0000\u0000\u016d\u0001\u0000\u0000\u0000\u0000\u016f\u0001\u0000"+ + "\u0000\u0000\u0000\u0171\u0001\u0000\u0000\u0000\u0000\u0173\u0001\u0000"+ + "\u0000\u0000\u0000\u0175\u0001\u0000\u0000\u0000\u0000\u0177\u0001\u0000"+ + "\u0000\u0000\u0000\u0179\u0001\u0000\u0000\u0000\u0000\u017b\u0001\u0000"+ + "\u0000\u0000\u0000\u017d\u0001\u0000\u0000\u0000\u0000\u017f\u0001\u0000"+ + "\u0000\u0000\u0000\u0181\u0001\u0000\u0000\u0000\u0000\u0183\u0001\u0000"+ + "\u0000\u0000\u0000\u0185\u0001\u0000\u0000\u0000\u0000\u0187\u0001\u0000"+ + "\u0000\u0000\u0000\u0189\u0001\u0000\u0000\u0000\u0000\u018b\u0001\u0000"+ + "\u0000\u0000\u0000\u018d\u0001\u0000\u0000\u0000\u0000\u018f\u0001\u0000"+ + "\u0000\u0000\u0000\u0191\u0001\u0000\u0000\u0000\u0000\u0193\u0001\u0000"+ + "\u0000\u0000\u0000\u0195\u0001\u0000\u0000\u0000\u0000\u0197\u0001\u0000"+ + "\u0000\u0000\u0000\u0199\u0001\u0000\u0000\u0000\u0000\u019b\u0001\u0000"+ + "\u0000\u0000\u0000\u019d\u0001\u0000\u0000\u0000\u0000\u019f\u0001\u0000"+ + "\u0000\u0000\u0000\u01a1\u0001\u0000\u0000\u0000\u0000\u01a3\u0001\u0000"+ + "\u0000\u0000\u0000\u01a5\u0001\u0000\u0000\u0000\u0000\u01a7\u0001\u0000"+ + "\u0000\u0000\u0000\u01a9\u0001\u0000\u0000\u0000\u0000\u01ab\u0001\u0000"+ + "\u0000\u0000\u0000\u01ad\u0001\u0000\u0000\u0000\u0000\u01af\u0001\u0000"+ + "\u0000\u0000\u0000\u01b1\u0001\u0000\u0000\u0000\u0000\u01b3\u0001\u0000"+ + "\u0000\u0000\u0000\u01b5\u0001\u0000\u0000\u0000\u0000\u01b7\u0001\u0000"+ + "\u0000\u0000\u0000\u01b9\u0001\u0000\u0000\u0000\u0000\u01bb\u0001\u0000"+ + "\u0000\u0000\u0000\u01bd\u0001\u0000\u0000\u0000\u0000\u01bf\u0001\u0000"+ + "\u0000\u0000\u0000\u01c1\u0001\u0000\u0000\u0000\u0000\u01c3\u0001\u0000"+ + "\u0000\u0000\u0000\u01c5\u0001\u0000\u0000\u0000\u0000\u01c7\u0001\u0000"+ + "\u0000\u0000\u0000\u01c9\u0001\u0000\u0000\u0000\u0000\u01cb\u0001\u0000"+ + "\u0000\u0000\u0000\u01cd\u0001\u0000\u0000\u0000\u0000\u01cf\u0001\u0000"+ + "\u0000\u0000\u0000\u01d1\u0001\u0000\u0000\u0000\u0000\u01d3\u0001\u0000"+ + "\u0000\u0000\u0000\u01d5\u0001\u0000\u0000\u0000\u0000\u01d7\u0001\u0000"+ + "\u0000\u0000\u0000\u01d9\u0001\u0000\u0000\u0000\u0000\u01db\u0001\u0000"+ + "\u0000\u0000\u0000\u01dd\u0001\u0000\u0000\u0000\u0000\u01df\u0001\u0000"+ + "\u0000\u0000\u0000\u01e1\u0001\u0000\u0000\u0000\u0000\u01e3\u0001\u0000"+ + "\u0000\u0000\u0000\u01e5\u0001\u0000\u0000\u0000\u0000\u01e7\u0001\u0000"+ + "\u0000\u0000\u0000\u01e9\u0001\u0000\u0000\u0000\u0000\u01eb\u0001\u0000"+ + "\u0000\u0000\u0000\u01ed\u0001\u0000\u0000\u0000\u0000\u01ef\u0001\u0000"+ + "\u0000\u0000\u0000\u01f1\u0001\u0000\u0000\u0000\u0000\u01f3\u0001\u0000"+ + "\u0000\u0000\u0000\u01f5\u0001\u0000\u0000\u0000\u0000\u01f7\u0001\u0000"+ + "\u0000\u0000\u0000\u01f9\u0001\u0000\u0000\u0000\u0000\u01fd\u0001\u0000"+ + "\u0000\u0000\u0000\u01ff\u0001\u0000\u0000\u0000\u0000\u0201\u0001\u0000"+ + "\u0000\u0000\u0001\u0203\u0001\u0000\u0000\u0000\u0003\u0205\u0001\u0000"+ + "\u0000\u0000\u0005\u0207\u0001\u0000\u0000\u0000\u0007\u0209\u0001\u0000"+ + "\u0000\u0000\t\u020b\u0001\u0000\u0000\u0000\u000b\u020d\u0001\u0000\u0000"+ + "\u0000\r\u020f\u0001\u0000\u0000\u0000\u000f\u0211\u0001\u0000\u0000\u0000"+ + "\u0011\u0213\u0001\u0000\u0000\u0000\u0013\u0215\u0001\u0000\u0000\u0000"+ + "\u0015\u0217\u0001\u0000\u0000\u0000\u0017\u0219\u0001\u0000\u0000\u0000"+ + "\u0019\u021b\u0001\u0000\u0000\u0000\u001b\u021d\u0001\u0000\u0000\u0000"+ + "\u001d\u0220\u0001\u0000\u0000\u0000\u001f\u0222\u0001\u0000\u0000\u0000"+ + "!\u0225\u0001\u0000\u0000\u0000#\u0227\u0001\u0000\u0000\u0000%\u022a"+ + "\u0001\u0000\u0000\u0000\'\u022e\u0001\u0000\u0000\u0000)\u0232\u0001"+ + "\u0000\u0000\u0000+\u0235\u0001\u0000\u0000\u0000-\u0238\u0001\u0000\u0000"+ + "\u0000/\u023b\u0001\u0000\u0000\u00001\u023e\u0001\u0000\u0000\u00003"+ + "\u0240\u0001\u0000\u0000\u00005\u0242\u0001\u0000\u0000\u00007\u0244\u0001"+ + "\u0000\u0000\u00009\u0246\u0001\u0000\u0000\u0000;\u0282\u0001\u0000\u0000"+ + "\u0000=\u02a2\u0001\u0000\u0000\u0000?\u02a4\u0001\u0000\u0000\u0000A"+ + "\u02a9\u0001\u0000\u0000\u0000C\u02da\u0001\u0000\u0000\u0000E\u02dc\u0001"+ + "\u0000\u0000\u0000G\u02df\u0001\u0000\u0000\u0000I\u02e7\u0001\u0000\u0000"+ + "\u0000K\u02f0\u0001\u0000\u0000\u0000M\u02f7\u0001\u0000\u0000\u0000O"+ + "\u02ff\u0001\u0000\u0000\u0000Q\u0309\u0001\u0000\u0000\u0000S\u0313\u0001"+ + "\u0000\u0000\u0000U\u031a\u0001\u0000\u0000\u0000W\u0320\u0001\u0000\u0000"+ + "\u0000Y\u0327\u0001\u0000\u0000\u0000[\u0335\u0001\u0000\u0000\u0000]"+ + "\u0339\u0001\u0000\u0000\u0000_\u033c\u0001\u0000\u0000\u0000a\u0347\u0001"+ + "\u0000\u0000\u0000c\u0350\u0001\u0000\u0000\u0000e\u0352\u0001\u0000\u0000"+ + "\u0000g\u0354\u0001\u0000\u0000\u0000i\u0357\u0001\u0000\u0000\u0000k"+ + "\u035f\u0001\u0000\u0000\u0000m\u0367\u0001\u0000\u0000\u0000o\u036f\u0001"+ + "\u0000\u0000\u0000q\u0377\u0001\u0000\u0000\u0000s\u037f\u0001\u0000\u0000"+ + "\u0000u\u0387\u0001\u0000\u0000\u0000w\u038f\u0001\u0000\u0000\u0000y"+ + "\u0397\u0001\u0000\u0000\u0000{\u039f\u0001\u0000\u0000\u0000}\u03a7\u0001"+ + "\u0000\u0000\u0000\u007f\u03af\u0001\u0000\u0000\u0000\u0081\u03b7\u0001"+ + "\u0000\u0000\u0000\u0083\u03bb\u0001\u0000\u0000\u0000\u0085\u03c4\u0001"+ + "\u0000\u0000\u0000\u0087\u03c8\u0001\u0000\u0000\u0000\u0089\u03cd\u0001"+ + "\u0000\u0000\u0000\u008b\u03d2\u0001\u0000\u0000\u0000\u008d\u03d8\u0001"+ + "\u0000\u0000\u0000\u008f\u03dc\u0001\u0000\u0000\u0000\u0091\u03e0\u0001"+ + "\u0000\u0000\u0000\u0093\u03e4\u0001\u0000\u0000\u0000\u0095\u03eb\u0001"+ + "\u0000\u0000\u0000\u0097\u03f2\u0001\u0000\u0000\u0000\u0099\u03fa\u0001"+ + "\u0000\u0000\u0000\u009b\u0402\u0001\u0000\u0000\u0000\u009d\u0406\u0001"+ + "\u0000\u0000\u0000\u009f\u040b\u0001\u0000\u0000\u0000\u00a1\u040f\u0001"+ + "\u0000\u0000\u0000\u00a3\u0414\u0001\u0000\u0000\u0000\u00a5\u0418\u0001"+ + "\u0000\u0000\u0000\u00a7\u041d\u0001\u0000\u0000\u0000\u00a9\u0422\u0001"+ + "\u0000\u0000\u0000\u00ab\u0428\u0001\u0000\u0000\u0000\u00ad\u042d\u0001"+ + "\u0000\u0000\u0000\u00af\u0433\u0001\u0000\u0000\u0000\u00b1\u0438\u0001"+ + "\u0000\u0000\u0000\u00b3\u043e\u0001\u0000\u0000\u0000\u00b5\u0444\u0001"+ + "\u0000\u0000\u0000\u00b7\u044a\u0001\u0000\u0000\u0000\u00b9\u0454\u0001"+ + "\u0000\u0000\u0000\u00bb\u045c\u0001\u0000\u0000\u0000\u00bd\u0464\u0001"+ + "\u0000\u0000\u0000\u00bf\u046a\u0001\u0000\u0000\u0000\u00c1\u046f\u0001"+ + "\u0000\u0000\u0000\u00c3\u0473\u0001\u0000\u0000\u0000\u00c5\u047a\u0001"+ + "\u0000\u0000\u0000\u00c7\u047f\u0001\u0000\u0000\u0000\u00c9\u048b\u0001"+ + "\u0000\u0000\u0000\u00cb\u0490\u0001\u0000\u0000\u0000\u00cd\u049b\u0001"+ + "\u0000\u0000\u0000\u00cf\u04a1\u0001\u0000\u0000\u0000\u00d1\u04a5\u0001"+ + "\u0000\u0000\u0000\u00d3\u04a8\u0001\u0000\u0000\u0000\u00d5\u04ac\u0001"+ + "\u0000\u0000\u0000\u00d7\u04b2\u0001\u0000\u0000\u0000\u00d9\u04be\u0001"+ + "\u0000\u0000\u0000\u00db\u04c6\u0001\u0000\u0000\u0000\u00dd\u04cd\u0001"+ + "\u0000\u0000\u0000\u00df\u04d3\u0001\u0000\u0000\u0000\u00e1\u04e2\u0001"+ + "\u0000\u0000\u0000\u00e3\u04e4\u0001\u0000\u0000\u0000\u00e5\u04e9\u0001"+ + "\u0000\u0000\u0000\u00e7\u04ef\u0001\u0000\u0000\u0000\u00e9\u04f4\u0001"+ + "\u0000\u0000\u0000\u00eb\u0500\u0001\u0000\u0000\u0000\u00ed\u0506\u0001"+ + "\u0000\u0000\u0000\u00ef\u050b\u0001\u0000\u0000\u0000\u00f1\u0511\u0001"+ + "\u0000\u0000\u0000\u00f3\u0516\u0001\u0000\u0000\u0000\u00f5\u0526\u0001"+ + "\u0000\u0000\u0000\u00f7\u0528\u0001\u0000\u0000\u0000\u00f9\u052c\u0001"+ + "\u0000\u0000\u0000\u00fb\u0533\u0001\u0000\u0000\u0000\u00fd\u053b\u0001"+ + "\u0000\u0000\u0000\u00ff\u0540\u0001\u0000\u0000\u0000\u0101\u0546\u0001"+ + "\u0000\u0000\u0000\u0103\u054a\u0001\u0000\u0000\u0000\u0105\u0551\u0001"+ + "\u0000\u0000\u0000\u0107\u055c\u0001\u0000\u0000\u0000\u0109\u055e\u0001"+ + "\u0000\u0000\u0000\u010b\u0563\u0001\u0000\u0000\u0000\u010d\u0574\u0001"+ + "\u0000\u0000\u0000\u010f\u0576\u0001\u0000\u0000\u0000\u0111\u057c\u0001"+ + "\u0000\u0000\u0000\u0113\u0586\u0001\u0000\u0000\u0000\u0115\u0590\u0001"+ + "\u0000\u0000\u0000\u0117\u0595\u0001\u0000\u0000\u0000\u0119\u059a\u0001"+ + "\u0000\u0000\u0000\u011b\u059e\u0001\u0000\u0000\u0000\u011d\u05a4\u0001"+ + "\u0000\u0000\u0000\u011f\u05a9\u0001\u0000\u0000\u0000\u0121\u05af\u0001"+ + "\u0000\u0000\u0000\u0123\u05b3\u0001\u0000\u0000\u0000\u0125\u05b8\u0001"+ + "\u0000\u0000\u0000\u0127\u05bf\u0001\u0000\u0000\u0000\u0129\u05c6\u0001"+ + "\u0000\u0000\u0000\u012b\u05ce\u0001\u0000\u0000\u0000\u012d\u05d6\u0001"+ + "\u0000\u0000\u0000\u012f\u05de\u0001\u0000\u0000\u0000\u0131\u05e4\u0001"+ + "\u0000\u0000\u0000\u0133\u05ec\u0001\u0000\u0000\u0000\u0135\u05f8\u0001"+ + "\u0000\u0000\u0000\u0137\u0600\u0001\u0000\u0000\u0000\u0139\u0608\u0001"+ + "\u0000\u0000\u0000\u013b\u060c\u0001\u0000\u0000\u0000\u013d\u0613\u0001"+ + "\u0000\u0000\u0000\u013f\u0617\u0001\u0000\u0000\u0000\u0141\u0620\u0001"+ + "\u0000\u0000\u0000\u0143\u0625\u0001\u0000\u0000\u0000\u0145\u062b\u0001"+ + "\u0000\u0000\u0000\u0147\u0649\u0001\u0000\u0000\u0000\u0149\u0665\u0001"+ + "\u0000\u0000\u0000\u014b\u0667\u0001\u0000\u0000\u0000\u014d\u066f\u0001"+ + "\u0000\u0000\u0000\u014f\u0679\u0001\u0000\u0000\u0000\u0151\u0681\u0001"+ + "\u0000\u0000\u0000\u0153\u0689\u0001\u0000\u0000\u0000\u0155\u068f\u0001"+ + "\u0000\u0000\u0000\u0157\u0697\u0001\u0000\u0000\u0000\u0159\u069b\u0001"+ + "\u0000\u0000\u0000\u015b\u06a1\u0001\u0000\u0000\u0000\u015d\u06b4\u0001"+ + "\u0000\u0000\u0000\u015f\u06c3\u0001\u0000\u0000\u0000\u0161\u06d6\u0001"+ + "\u0000\u0000\u0000\u0163\u06d8\u0001\u0000\u0000\u0000\u0165\u06e5\u0001"+ + "\u0000\u0000\u0000\u0167\u06f3\u0001\u0000\u0000\u0000\u0169\u06fe\u0001"+ + "\u0000\u0000\u0000\u016b\u0711\u0001\u0000\u0000\u0000\u016d\u0722\u0001"+ + "\u0000\u0000\u0000\u016f\u0738\u0001\u0000\u0000\u0000\u0171\u074c\u0001"+ + "\u0000\u0000\u0000\u0173\u075f\u0001\u0000\u0000\u0000\u0175\u0770\u0001"+ + "\u0000\u0000\u0000\u0177\u0785\u0001\u0000\u0000\u0000\u0179\u079a\u0001"+ + "\u0000\u0000\u0000\u017b\u07a7\u0001\u0000\u0000\u0000\u017d\u07b2\u0001"+ + "\u0000\u0000\u0000\u017f\u07b4\u0001\u0000\u0000\u0000\u0181\u07bb\u0001"+ + "\u0000\u0000\u0000\u0183\u07d8\u0001\u0000\u0000\u0000\u0185\u07eb\u0001"+ + "\u0000\u0000\u0000\u0187\u0803\u0001\u0000\u0000\u0000\u0189\u081c\u0001"+ + "\u0000\u0000\u0000\u018b\u082f\u0001\u0000\u0000\u0000\u018d\u0848\u0001"+ + "\u0000\u0000\u0000\u018f\u0863\u0001\u0000\u0000\u0000\u0191\u0878\u0001"+ + "\u0000\u0000\u0000\u0193\u0885\u0001\u0000\u0000\u0000\u0195\u0890\u0001"+ + "\u0000\u0000\u0000\u0197\u0892\u0001\u0000\u0000\u0000\u0199\u089a\u0001"+ + "\u0000\u0000\u0000\u019b\u08a4\u0001\u0000\u0000\u0000\u019d\u08ae\u0001"+ + "\u0000\u0000\u0000\u019f\u08b9\u0001\u0000\u0000\u0000\u01a1\u08c4\u0001"+ + "\u0000\u0000\u0000\u01a3\u08d1\u0001\u0000\u0000\u0000\u01a5\u08e1\u0001"+ + "\u0000\u0000\u0000\u01a7\u08ee\u0001\u0000\u0000\u0000\u01a9\u08fe\u0001"+ + "\u0000\u0000\u0000\u01ab\u0904\u0001\u0000\u0000\u0000\u01ad\u091f\u0001"+ + "\u0000\u0000\u0000\u01af\u0921\u0001\u0000\u0000\u0000\u01b1\u0926\u0001"+ + "\u0000\u0000\u0000\u01b3\u092a\u0001\u0000\u0000\u0000\u01b5\u092f\u0001"+ + "\u0000\u0000\u0000\u01b7\u0936\u0001\u0000\u0000\u0000\u01b9\u093d\u0001"+ + "\u0000\u0000\u0000\u01bb\u0945\u0001\u0000\u0000\u0000\u01bd\u094e\u0001"+ + "\u0000\u0000\u0000\u01bf\u0959\u0001\u0000\u0000\u0000\u01c1\u0972\u0001"+ + "\u0000\u0000\u0000\u01c3\u0980\u0001\u0000\u0000\u0000\u01c5\u0982\u0001"+ + "\u0000\u0000\u0000\u01c7\u098a\u0001\u0000\u0000\u0000\u01c9\u0996\u0001"+ + "\u0000\u0000\u0000\u01cb\u099c\u0001\u0000\u0000\u0000\u01cd\u09a1\u0001"+ + "\u0000\u0000\u0000\u01cf\u09ab\u0001\u0000\u0000\u0000\u01d1\u09b6\u0001"+ + "\u0000\u0000\u0000\u01d3\u09bf\u0001\u0000\u0000\u0000\u01d5\u09cd\u0001"+ + "\u0000\u0000\u0000\u01d7\u09e0\u0001\u0000\u0000\u0000\u01d9\u09ec\u0001"+ + "\u0000\u0000\u0000\u01db\u09f6\u0001\u0000\u0000\u0000\u01dd\u09fb\u0001"+ + "\u0000\u0000\u0000\u01df\u0a07\u0001\u0000\u0000\u0000\u01e1\u0a11\u0001"+ + "\u0000\u0000\u0000\u01e3\u0a34\u0001\u0000\u0000\u0000\u01e5\u0a36\u0001"+ + "\u0000\u0000\u0000\u01e7\u0a3f\u0001\u0000\u0000\u0000\u01e9\u0a49\u0001"+ + "\u0000\u0000\u0000\u01eb\u0a51\u0001\u0000\u0000\u0000\u01ed\u0a5a\u0001"+ + "\u0000\u0000\u0000\u01ef\u0a65\u0001\u0000\u0000\u0000\u01f1\u0a70\u0001"+ + "\u0000\u0000\u0000\u01f3\u0a96\u0001\u0000\u0000\u0000\u01f5\u0aad\u0001"+ + "\u0000\u0000\u0000\u01f7\u0ac9\u0001\u0000\u0000\u0000\u01f9\u0acd\u0001"+ + "\u0000\u0000\u0000\u01fb\u0ad6\u0001\u0000\u0000\u0000\u01fd\u0ad9\u0001"+ + "\u0000\u0000\u0000\u01ff\u0adf\u0001\u0000\u0000\u0000\u0201\u0aed\u0001"+ + "\u0000\u0000\u0000\u0203\u0204\u0005.\u0000\u0000\u0204\u0002\u0001\u0000"+ + "\u0000\u0000\u0205\u0206\u0005(\u0000\u0000\u0206\u0004\u0001\u0000\u0000"+ + "\u0000\u0207\u0208\u0005)\u0000\u0000\u0208\u0006\u0001\u0000\u0000\u0000"+ + "\u0209\u020a\u0005,\u0000\u0000\u020a\b\u0001\u0000\u0000\u0000\u020b"+ + "\u020c\u0005[\u0000\u0000\u020c\n\u0001\u0000\u0000\u0000\u020d\u020e"+ + "\u0005]\u0000\u0000\u020e\f\u0001\u0000\u0000\u0000\u020f\u0210\u0005"+ + "!\u0000\u0000\u0210\u000e\u0001\u0000\u0000\u0000\u0211\u0212\u0005%\u0000"+ + "\u0000\u0212\u0010\u0001\u0000\u0000\u0000\u0213\u0214\u0005*\u0000\u0000"+ + "\u0214\u0012\u0001\u0000\u0000\u0000\u0215\u0216\u0005/\u0000\u0000\u0216"+ + "\u0014\u0001\u0000\u0000\u0000\u0217\u0218\u0005+\u0000\u0000\u0218\u0016"+ + "\u0001\u0000\u0000\u0000\u0219\u021a\u0005&\u0000\u0000\u021a\u0018\u0001"+ + "\u0000\u0000\u0000\u021b\u021c\u0005>\u0000\u0000\u021c\u001a\u0001\u0000"+ + "\u0000\u0000\u021d\u021e\u0005>\u0000\u0000\u021e\u021f\u0005=\u0000\u0000"+ + "\u021f\u001c\u0001\u0000\u0000\u0000\u0220\u0221\u0005<\u0000\u0000\u0221"+ + "\u001e\u0001\u0000\u0000\u0000\u0222\u0223\u0005<\u0000\u0000\u0223\u0224"+ + "\u0005=\u0000\u0000\u0224 \u0001\u0000\u0000\u0000\u0225\u0226\u0005="+ + "\u0000\u0000\u0226\"\u0001\u0000\u0000\u0000\u0227\u0228\u0005=\u0000"+ + "\u0000\u0228\u0229\u0005=\u0000\u0000\u0229$\u0001\u0000\u0000\u0000\u022a"+ + "\u022b\u0005=\u0000\u0000\u022b\u022c\u0005=\u0000\u0000\u022c\u022d\u0005"+ + "=\u0000\u0000\u022d&\u0001\u0000\u0000\u0000\u022e\u022f\u0005!\u0000"+ + "\u0000\u022f\u0230\u0005=\u0000\u0000\u0230\u0231\u0005=\u0000\u0000\u0231"+ + "(\u0001\u0000\u0000\u0000\u0232\u0233\u0005!\u0000\u0000\u0233\u0234\u0005"+ + "=\u0000\u0000\u0234*\u0001\u0000\u0000\u0000\u0235\u0236\u0005<\u0000"+ + "\u0000\u0236\u0237\u0005>\u0000\u0000\u0237,\u0001\u0000\u0000\u0000\u0238"+ + "\u0239\u0005&\u0000\u0000\u0239\u023a\u0005&\u0000\u0000\u023a.\u0001"+ + "\u0000\u0000\u0000\u023b\u023c\u0005|\u0000\u0000\u023c\u023d\u0005|\u0000"+ + "\u0000\u023d0\u0001\u0000\u0000\u0000\u023e\u023f\u0005?\u0000\u0000\u023f"+ + "2\u0001\u0000\u0000\u0000\u0240\u0241\u0005:\u0000\u0000\u02414\u0001"+ + "\u0000\u0000\u0000\u0242\u0243\u0005{\u0000\u0000\u02436\u0001\u0000\u0000"+ + "\u0000\u0244\u0245\u0005}\u0000\u0000\u02458\u0001\u0000\u0000\u0000\u0246"+ + "\u0247\u0005-\u0000\u0000\u0247:\u0001\u0000\u0000\u0000\u0248\u024f\u0005"+ + "0\u0000\u0000\u0249\u024b\u0005.\u0000\u0000\u024a\u024c\u0007\u0000\u0000"+ + "\u0000\u024b\u024a\u0001\u0000\u0000\u0000\u024c\u024d\u0001\u0000\u0000"+ + "\u0000\u024d\u024b\u0001\u0000\u0000\u0000\u024d\u024e\u0001\u0000\u0000"+ + "\u0000\u024e\u0250\u0001\u0000\u0000\u0000\u024f\u0249\u0001\u0000\u0000"+ + "\u0000\u024f\u0250\u0001\u0000\u0000\u0000\u0250\u0283\u0001\u0000\u0000"+ + "\u0000\u0251\u0255\u0007\u0001\u0000\u0000\u0252\u0254\u0007\u0000\u0000"+ + "\u0000\u0253\u0252\u0001\u0000\u0000\u0000\u0254\u0257\u0001\u0000\u0000"+ + "\u0000\u0255\u0253\u0001\u0000\u0000\u0000\u0255\u0256\u0001\u0000\u0000"+ + "\u0000\u0256\u025e\u0001\u0000\u0000\u0000\u0257\u0255\u0001\u0000\u0000"+ + "\u0000\u0258\u025a\u0005.\u0000\u0000\u0259\u025b\u0007\u0000\u0000\u0000"+ + "\u025a\u0259\u0001\u0000\u0000\u0000\u025b\u025c\u0001\u0000\u0000\u0000"+ + "\u025c\u025a\u0001\u0000\u0000\u0000\u025c\u025d\u0001\u0000\u0000\u0000"+ + "\u025d\u025f\u0001\u0000\u0000\u0000\u025e\u0258\u0001\u0000\u0000\u0000"+ + "\u025e\u025f\u0001\u0000\u0000\u0000\u025f\u0283\u0001\u0000\u0000\u0000"+ + "\u0260\u0267\u00050\u0000\u0000\u0261\u0263\u0005.\u0000\u0000\u0262\u0264"+ + "\u0007\u0000\u0000\u0000\u0263\u0262\u0001\u0000\u0000\u0000\u0264\u0265"+ + "\u0001\u0000\u0000\u0000\u0265\u0263\u0001\u0000\u0000\u0000\u0265\u0266"+ + "\u0001\u0000\u0000\u0000\u0266\u0268\u0001\u0000\u0000\u0000\u0267\u0261"+ + "\u0001\u0000\u0000\u0000\u0267\u0268\u0001\u0000\u0000\u0000\u0268\u0279"+ + "\u0001\u0000\u0000\u0000\u0269\u026d\u0007\u0001\u0000\u0000\u026a\u026c"+ + "\u0007\u0000\u0000\u0000\u026b\u026a\u0001\u0000\u0000\u0000\u026c\u026f"+ + "\u0001\u0000\u0000\u0000\u026d\u026b\u0001\u0000\u0000\u0000\u026d\u026e"+ + "\u0001\u0000\u0000\u0000\u026e\u0276\u0001\u0000\u0000\u0000\u026f\u026d"+ + "\u0001\u0000\u0000\u0000\u0270\u0272\u0005.\u0000\u0000\u0271\u0273\u0007"+ + "\u0000\u0000\u0000\u0272\u0271\u0001\u0000\u0000\u0000\u0273\u0274\u0001"+ + "\u0000\u0000\u0000\u0274\u0272\u0001\u0000\u0000\u0000\u0274\u0275\u0001"+ + "\u0000\u0000\u0000\u0275\u0277\u0001\u0000\u0000\u0000\u0276\u0270\u0001"+ + "\u0000\u0000\u0000\u0276\u0277\u0001\u0000\u0000\u0000\u0277\u0279\u0001"+ + "\u0000\u0000\u0000\u0278\u0260\u0001\u0000\u0000\u0000\u0278\u0269\u0001"+ + "\u0000\u0000\u0000\u0279\u027a\u0001\u0000\u0000\u0000\u027a\u027c\u0005"+ + "E\u0000\u0000\u027b\u027d\u0007\u0002\u0000\u0000\u027c\u027b\u0001\u0000"+ + "\u0000\u0000\u027c\u027d\u0001\u0000\u0000\u0000\u027d\u027e\u0001\u0000"+ + "\u0000\u0000\u027e\u0280\u0007\u0000\u0000\u0000\u027f\u0281\u0007\u0000"+ + "\u0000\u0000\u0280\u027f\u0001\u0000\u0000\u0000\u0280\u0281\u0001\u0000"+ + "\u0000\u0000\u0281\u0283\u0001\u0000\u0000\u0000\u0282\u0248\u0001\u0000"+ + "\u0000\u0000\u0282\u0251\u0001\u0000\u0000\u0000\u0282\u0278\u0001\u0000"+ + "\u0000\u0000\u0283<\u0001\u0000\u0000\u0000\u0284\u028a\u0005\'\u0000"+ + "\u0000\u0285\u0289\b\u0003\u0000\u0000\u0286\u0287\u0005\\\u0000\u0000"+ + "\u0287\u0289\u0005\'\u0000\u0000\u0288\u0285\u0001\u0000\u0000\u0000\u0288"+ + "\u0286\u0001\u0000\u0000\u0000\u0289\u028c\u0001\u0000\u0000\u0000\u028a"+ + "\u0288\u0001\u0000\u0000\u0000\u028a\u028b\u0001\u0000\u0000\u0000\u028b"+ + "\u028d\u0001\u0000\u0000\u0000\u028c\u028a\u0001\u0000\u0000\u0000\u028d"+ + "\u02a3\u0005\'\u0000\u0000\u028e\u0294\u0005\"\u0000\u0000\u028f\u0293"+ + "\b\u0004\u0000\u0000\u0290\u0291\u0005\\\u0000\u0000\u0291\u0293\u0005"+ + "\"\u0000\u0000\u0292\u028f\u0001\u0000\u0000\u0000\u0292\u0290\u0001\u0000"+ + "\u0000\u0000\u0293\u0296\u0001\u0000\u0000\u0000\u0294\u0292\u0001\u0000"+ + "\u0000\u0000\u0294\u0295\u0001\u0000\u0000\u0000\u0295\u0297\u0001\u0000"+ + "\u0000\u0000\u0296\u0294\u0001\u0000\u0000\u0000\u0297\u02a3\u0005\"\u0000"+ + "\u0000\u0298\u029e\u0005`\u0000\u0000\u0299\u029d\b\u0005\u0000\u0000"+ + "\u029a\u029b\u0005\\\u0000\u0000\u029b\u029d\u0005`\u0000\u0000\u029c"+ + "\u0299\u0001\u0000\u0000\u0000\u029c\u029a\u0001\u0000\u0000\u0000\u029d"+ + "\u02a0\u0001\u0000\u0000\u0000\u029e\u029c\u0001\u0000\u0000\u0000\u029e"+ + "\u029f\u0001\u0000\u0000\u0000\u029f\u02a1\u0001\u0000\u0000\u0000\u02a0"+ + "\u029e\u0001\u0000\u0000\u0000\u02a1\u02a3\u0005`\u0000\u0000\u02a2\u0284"+ + "\u0001\u0000\u0000\u0000\u02a2\u028e\u0001\u0000\u0000\u0000\u02a2\u0298"+ + "\u0001\u0000\u0000\u0000\u02a3>\u0001\u0000\u0000\u0000\u02a4\u02a5\u0005"+ + "N\u0000\u0000\u02a5\u02a6\u0005U\u0000\u0000\u02a6\u02a7\u0005L\u0000"+ + "\u0000\u02a7\u02a8\u0005L\u0000\u0000\u02a8@\u0001\u0000\u0000\u0000\u02a9"+ + "\u02aa\u0005E\u0000\u0000\u02aa\u02ab\u0005R\u0000\u0000\u02ab\u02ac\u0005"+ + "R\u0000\u0000\u02ac\u02ad\u0005O\u0000\u0000\u02ad\u02ae\u0005R\u0000"+ + "\u0000\u02aeB\u0001\u0000\u0000\u0000\u02af\u02db\u0005M\u0000\u0000\u02b0"+ + "\u02b1\u0005K\u0000\u0000\u02b1\u02db\u0005M\u0000\u0000\u02b2\u02b3\u0005"+ + "D\u0000\u0000\u02b3\u02db\u0005M\u0000\u0000\u02b4\u02b5\u0005C\u0000"+ + "\u0000\u02b5\u02db\u0005M\u0000\u0000\u02b6\u02b7\u0005M\u0000\u0000\u02b7"+ + "\u02db\u0005M\u0000\u0000\u02b8\u02b9\u0005M\u0000\u0000\u02b9\u02db\u0005"+ + "2\u0000\u0000\u02ba\u02bb\u0005K\u0000\u0000\u02bb\u02bc\u0005M\u0000"+ + "\u0000\u02bc\u02db\u00052\u0000\u0000\u02bd\u02be\u0005D\u0000\u0000\u02be"+ + "\u02bf\u0005M\u0000\u0000\u02bf\u02db\u00052\u0000\u0000\u02c0\u02c1\u0005"+ + "C\u0000\u0000\u02c1\u02c2\u0005M\u0000\u0000\u02c2\u02db\u00052\u0000"+ + "\u0000\u02c3\u02c4\u0005M\u0000\u0000\u02c4\u02c5\u0005M\u0000\u0000\u02c5"+ + "\u02db\u00052\u0000\u0000\u02c6\u02c7\u0005M\u0000\u0000\u02c7\u02db\u0005"+ + "3\u0000\u0000\u02c8\u02c9\u0005K\u0000\u0000\u02c9\u02ca\u0005M\u0000"+ + "\u0000\u02ca\u02db\u00053\u0000\u0000\u02cb\u02cc\u0005D\u0000\u0000\u02cc"+ + "\u02cd\u0005M\u0000\u0000\u02cd\u02db\u00053\u0000\u0000\u02ce\u02cf\u0005"+ + "C\u0000\u0000\u02cf\u02d0\u0005M\u0000\u0000\u02d0\u02db\u00053\u0000"+ + "\u0000\u02d1\u02d2\u0005M\u0000\u0000\u02d2\u02d3\u0005M\u0000\u0000\u02d3"+ + "\u02db\u00053\u0000\u0000\u02d4\u02db\u0005L\u0000\u0000\u02d5\u02d6\u0005"+ + "M\u0000\u0000\u02d6\u02db\u0005L\u0000\u0000\u02d7\u02db\u0005G\u0000"+ + "\u0000\u02d8\u02d9\u0005K\u0000\u0000\u02d9\u02db\u0005G\u0000\u0000\u02da"+ + "\u02af\u0001\u0000\u0000\u0000\u02da\u02b0\u0001\u0000\u0000\u0000\u02da"+ + "\u02b2\u0001\u0000\u0000\u0000\u02da\u02b4\u0001\u0000\u0000\u0000\u02da"+ + "\u02b6\u0001\u0000\u0000\u0000\u02da\u02b8\u0001\u0000\u0000\u0000\u02da"+ + "\u02ba\u0001\u0000\u0000\u0000\u02da\u02bd\u0001\u0000\u0000\u0000\u02da"+ + "\u02c0\u0001\u0000\u0000\u0000\u02da\u02c3\u0001\u0000\u0000\u0000\u02da"+ + "\u02c6\u0001\u0000\u0000\u0000\u02da\u02c8\u0001\u0000\u0000\u0000\u02da"+ + "\u02cb\u0001\u0000\u0000\u0000\u02da\u02ce\u0001\u0000\u0000\u0000\u02da"+ + "\u02d1\u0001\u0000\u0000\u0000\u02da\u02d4\u0001\u0000\u0000\u0000\u02da"+ + "\u02d5\u0001\u0000\u0000\u0000\u02da\u02d7\u0001\u0000\u0000\u0000\u02da"+ + "\u02d8\u0001\u0000\u0000\u0000\u02dbD\u0001\u0000\u0000\u0000\u02dc\u02dd"+ + "\u0005I\u0000\u0000\u02dd\u02de\u0005F\u0000\u0000\u02deF\u0001\u0000"+ + "\u0000\u0000\u02df\u02e0\u0005I\u0000\u0000\u02e0\u02e1\u0005F\u0000\u0000"+ + "\u02e1\u02e2\u0005E\u0000\u0000\u02e2\u02e3\u0005R\u0000\u0000\u02e3\u02e4"+ + "\u0005R\u0000\u0000\u02e4\u02e5\u0005O\u0000\u0000\u02e5\u02e6\u0005R"+ + "\u0000\u0000\u02e6H\u0001\u0000\u0000\u0000\u02e7\u02e8\u0005I\u0000\u0000"+ + "\u02e8\u02e9\u0005S\u0000\u0000\u02e9\u02ea\u0005N\u0000\u0000\u02ea\u02eb"+ + "\u0005U\u0000\u0000\u02eb\u02ec\u0005M\u0000\u0000\u02ec\u02ed\u0005B"+ + "\u0000\u0000\u02ed\u02ee\u0005E\u0000\u0000\u02ee\u02ef\u0005R\u0000\u0000"+ + "\u02efJ\u0001\u0000\u0000\u0000\u02f0\u02f1\u0005I\u0000\u0000\u02f1\u02f2"+ + "\u0005S\u0000\u0000\u02f2\u02f3\u0005T\u0000\u0000\u02f3\u02f4\u0005E"+ + "\u0000\u0000\u02f4\u02f5\u0005X\u0000\u0000\u02f5\u02f6\u0005T\u0000\u0000"+ + "\u02f6L\u0001\u0000\u0000\u0000\u02f7\u02f8\u0005I\u0000\u0000\u02f8\u02f9"+ + "\u0005S\u0000\u0000\u02f9\u02fa\u0005E\u0000\u0000\u02fa\u02fb\u0005R"+ + "\u0000\u0000\u02fb\u02fc\u0005R\u0000\u0000\u02fc\u02fd\u0005O\u0000\u0000"+ + "\u02fd\u02fe\u0005R\u0000\u0000\u02feN\u0001\u0000\u0000\u0000\u02ff\u0300"+ + "\u0005I\u0000\u0000\u0300\u0301\u0005S\u0000\u0000\u0301\u0302\u0005N"+ + "\u0000\u0000\u0302\u0303\u0005O\u0000\u0000\u0303\u0304\u0005N\u0000\u0000"+ + "\u0304\u0305\u0005T\u0000\u0000\u0305\u0306\u0005E\u0000\u0000\u0306\u0307"+ + "\u0005X\u0000\u0000\u0307\u0308\u0005T\u0000\u0000\u0308P\u0001\u0000"+ + "\u0000\u0000\u0309\u030a\u0005I\u0000\u0000\u030a\u030b\u0005S\u0000\u0000"+ + "\u030b\u030c\u0005L\u0000\u0000\u030c\u030d\u0005O\u0000\u0000\u030d\u030e"+ + "\u0005G\u0000\u0000\u030e\u030f\u0005I\u0000\u0000\u030f\u0310\u0005C"+ + "\u0000\u0000\u0310\u0311\u0005A\u0000\u0000\u0311\u0312\u0005L\u0000\u0000"+ + "\u0312R\u0001\u0000\u0000\u0000\u0313\u0314\u0005I\u0000\u0000\u0314\u0315"+ + "\u0005S\u0000\u0000\u0315\u0316\u0005E\u0000\u0000\u0316\u0317\u0005V"+ + "\u0000\u0000\u0317\u0318\u0005E\u0000\u0000\u0318\u0319\u0005N\u0000\u0000"+ + "\u0319T\u0001\u0000\u0000\u0000\u031a\u031b\u0005I\u0000\u0000\u031b\u031c"+ + "\u0005S\u0000\u0000\u031c\u031d\u0005O\u0000\u0000\u031d\u031e\u0005D"+ + "\u0000\u0000\u031e\u031f\u0005D\u0000\u0000\u031fV\u0001\u0000\u0000\u0000"+ + "\u0320\u0321\u0005I\u0000\u0000\u0321\u0322\u0005S\u0000\u0000\u0322\u0323"+ + "\u0005N\u0000\u0000\u0323\u0324\u0005U\u0000\u0000\u0324\u0325\u0005L"+ + "\u0000\u0000\u0325\u0326\u0005L\u0000\u0000\u0326X\u0001\u0000\u0000\u0000"+ + "\u0327\u0328\u0005I\u0000\u0000\u0328\u0329\u0005S\u0000\u0000\u0329\u032a"+ + "\u0005N\u0000\u0000\u032a\u032b\u0005U\u0000\u0000\u032b\u032c\u0005L"+ + "\u0000\u0000\u032c\u032d\u0005L\u0000\u0000\u032d\u032e\u0005O\u0000\u0000"+ + "\u032e\u032f\u0005R\u0000\u0000\u032f\u0330\u0005E\u0000\u0000\u0330\u0331"+ + "\u0005R\u0000\u0000\u0331\u0332\u0005R\u0000\u0000\u0332\u0333\u0005O"+ + "\u0000\u0000\u0333\u0334\u0005R\u0000\u0000\u0334Z\u0001\u0000\u0000\u0000"+ + "\u0335\u0336\u0005A\u0000\u0000\u0336\u0337\u0005N\u0000\u0000\u0337\u0338"+ + "\u0005D\u0000\u0000\u0338\\\u0001\u0000\u0000\u0000\u0339\u033a\u0005"+ + "O\u0000\u0000\u033a\u033b\u0005R\u0000\u0000\u033b^\u0001\u0000\u0000"+ + "\u0000\u033c\u033d\u0005N\u0000\u0000\u033d\u033e\u0005O\u0000\u0000\u033e"+ + "\u033f\u0005T\u0000\u0000\u033f`\u0001\u0000\u0000\u0000\u0340\u0341\u0005"+ + "T\u0000\u0000\u0341\u0342\u0005R\u0000\u0000\u0342\u0343\u0005U\u0000"+ + "\u0000\u0343\u0348\u0005E\u0000\u0000\u0344\u0345\u0005Y\u0000\u0000\u0345"+ + "\u0346\u0005E\u0000\u0000\u0346\u0348\u0005S\u0000\u0000\u0347\u0340\u0001"+ + "\u0000\u0000\u0000\u0347\u0344\u0001\u0000\u0000\u0000\u0348b\u0001\u0000"+ + "\u0000\u0000\u0349\u034a\u0005F\u0000\u0000\u034a\u034b\u0005A\u0000\u0000"+ + "\u034b\u034c\u0005L\u0000\u0000\u034c\u034d\u0005S\u0000\u0000\u034d\u0351"+ + "\u0005E\u0000\u0000\u034e\u034f\u0005N\u0000\u0000\u034f\u0351\u0005O"+ + "\u0000\u0000\u0350\u0349\u0001\u0000\u0000\u0000\u0350\u034e\u0001\u0000"+ + "\u0000\u0000\u0351d\u0001\u0000\u0000\u0000\u0352\u0353\u0005E\u0000\u0000"+ + "\u0353f\u0001\u0000\u0000\u0000\u0354\u0355\u0005P\u0000\u0000\u0355\u0356"+ + "\u0005I\u0000\u0000\u0356h\u0001\u0000\u0000\u0000\u0357\u0358\u0005D"+ + "\u0000\u0000\u0358\u0359\u0005E\u0000\u0000\u0359\u035a\u0005C\u0000\u0000"+ + "\u035a\u035b\u00052\u0000\u0000\u035b\u035c\u0005B\u0000\u0000\u035c\u035d"+ + "\u0005I\u0000\u0000\u035d\u035e\u0005N\u0000\u0000\u035ej\u0001\u0000"+ + "\u0000\u0000\u035f\u0360\u0005D\u0000\u0000\u0360\u0361\u0005E\u0000\u0000"+ + "\u0361\u0362\u0005C\u0000\u0000\u0362\u0363\u00052\u0000\u0000\u0363\u0364"+ + "\u0005H\u0000\u0000\u0364\u0365\u0005E\u0000\u0000\u0365\u0366\u0005X"+ + "\u0000\u0000\u0366l\u0001\u0000\u0000\u0000\u0367\u0368\u0005D\u0000\u0000"+ + "\u0368\u0369\u0005E\u0000\u0000\u0369\u036a\u0005C\u0000\u0000\u036a\u036b"+ + "\u00052\u0000\u0000\u036b\u036c\u0005O\u0000\u0000\u036c\u036d\u0005C"+ + "\u0000\u0000\u036d\u036e\u0005T\u0000\u0000\u036en\u0001\u0000\u0000\u0000"+ + "\u036f\u0370\u0005H\u0000\u0000\u0370\u0371\u0005E\u0000\u0000\u0371\u0372"+ + "\u0005X\u0000\u0000\u0372\u0373\u00052\u0000\u0000\u0373\u0374\u0005B"+ + "\u0000\u0000\u0374\u0375\u0005I\u0000\u0000\u0375\u0376\u0005N\u0000\u0000"+ + "\u0376p\u0001\u0000\u0000\u0000\u0377\u0378\u0005H\u0000\u0000\u0378\u0379"+ + "\u0005E\u0000\u0000\u0379\u037a\u0005X\u0000\u0000\u037a\u037b\u00052"+ + "\u0000\u0000\u037b\u037c\u0005D\u0000\u0000\u037c\u037d\u0005E\u0000\u0000"+ + "\u037d\u037e\u0005C\u0000\u0000\u037er\u0001\u0000\u0000\u0000\u037f\u0380"+ + "\u0005H\u0000\u0000\u0380\u0381\u0005E\u0000\u0000\u0381\u0382\u0005X"+ + "\u0000\u0000\u0382\u0383\u00052\u0000\u0000\u0383\u0384\u0005O\u0000\u0000"+ + "\u0384\u0385\u0005C\u0000\u0000\u0385\u0386\u0005T\u0000\u0000\u0386t"+ + "\u0001\u0000\u0000\u0000\u0387\u0388\u0005O\u0000\u0000\u0388\u0389\u0005"+ + "C\u0000\u0000\u0389\u038a\u0005T\u0000\u0000\u038a\u038b\u00052\u0000"+ + "\u0000\u038b\u038c\u0005B\u0000\u0000\u038c\u038d\u0005I\u0000\u0000\u038d"+ + "\u038e\u0005N\u0000\u0000\u038ev\u0001\u0000\u0000\u0000\u038f\u0390\u0005"+ + "O\u0000\u0000\u0390\u0391\u0005C\u0000\u0000\u0391\u0392\u0005T\u0000"+ + "\u0000\u0392\u0393\u00052\u0000\u0000\u0393\u0394\u0005D\u0000\u0000\u0394"+ + "\u0395\u0005E\u0000\u0000\u0395\u0396\u0005C\u0000\u0000\u0396x\u0001"+ + "\u0000\u0000\u0000\u0397\u0398\u0005O\u0000\u0000\u0398\u0399\u0005C\u0000"+ + "\u0000\u0399\u039a\u0005T\u0000\u0000\u039a\u039b\u00052\u0000\u0000\u039b"+ + "\u039c\u0005H\u0000\u0000\u039c\u039d\u0005E\u0000\u0000\u039d\u039e\u0005"+ + "X\u0000\u0000\u039ez\u0001\u0000\u0000\u0000\u039f\u03a0\u0005B\u0000"+ + "\u0000\u03a0\u03a1\u0005I\u0000\u0000\u03a1\u03a2\u0005N\u0000\u0000\u03a2"+ + "\u03a3\u00052\u0000\u0000\u03a3\u03a4\u0005O\u0000\u0000\u03a4\u03a5\u0005"+ + "C\u0000\u0000\u03a5\u03a6\u0005T\u0000\u0000\u03a6|\u0001\u0000\u0000"+ + "\u0000\u03a7\u03a8\u0005B\u0000\u0000\u03a8\u03a9\u0005I\u0000\u0000\u03a9"+ + "\u03aa\u0005N\u0000\u0000\u03aa\u03ab\u00052\u0000\u0000\u03ab\u03ac\u0005"+ + "D\u0000\u0000\u03ac\u03ad\u0005E\u0000\u0000\u03ad\u03ae\u0005C\u0000"+ + "\u0000\u03ae~\u0001\u0000\u0000\u0000\u03af\u03b0\u0005B\u0000\u0000\u03b0"+ + "\u03b1\u0005I\u0000\u0000\u03b1\u03b2\u0005N\u0000\u0000\u03b2\u03b3\u0005"+ + "2\u0000\u0000\u03b3\u03b4\u0005H\u0000\u0000\u03b4\u03b5\u0005E\u0000"+ + "\u0000\u03b5\u03b6\u0005X\u0000\u0000\u03b6\u0080\u0001\u0000\u0000\u0000"+ + "\u03b7\u03b8\u0005A\u0000\u0000\u03b8\u03b9\u0005B\u0000\u0000\u03b9\u03ba"+ + "\u0005S\u0000\u0000\u03ba\u0082\u0001\u0000\u0000\u0000\u03bb\u03bc\u0005"+ + "Q\u0000\u0000\u03bc\u03bd\u0005U\u0000\u0000\u03bd\u03be\u0005O\u0000"+ + "\u0000\u03be\u03bf\u0005T\u0000\u0000\u03bf\u03c0\u0005I\u0000\u0000\u03c0"+ + "\u03c1\u0005E\u0000\u0000\u03c1\u03c2\u0005N\u0000\u0000\u03c2\u03c3\u0005"+ + "T\u0000\u0000\u03c3\u0084\u0001\u0000\u0000\u0000\u03c4\u03c5\u0005M\u0000"+ + "\u0000\u03c5\u03c6\u0005O\u0000\u0000\u03c6\u03c7\u0005D\u0000\u0000\u03c7"+ + "\u0086\u0001\u0000\u0000\u0000\u03c8\u03c9\u0005S\u0000\u0000\u03c9\u03ca"+ + "\u0005I\u0000\u0000\u03ca\u03cb\u0005G\u0000\u0000\u03cb\u03cc\u0005N"+ + "\u0000\u0000\u03cc\u0088\u0001\u0000\u0000\u0000\u03cd\u03ce\u0005S\u0000"+ + "\u0000\u03ce\u03cf\u0005Q\u0000\u0000\u03cf\u03d0\u0005R\u0000\u0000\u03d0"+ + "\u03d1\u0005T\u0000\u0000\u03d1\u008a\u0001\u0000\u0000\u0000\u03d2\u03d3"+ + "\u0005T\u0000\u0000\u03d3\u03d4\u0005R\u0000\u0000\u03d4\u03d5\u0005U"+ + "\u0000\u0000\u03d5\u03d6\u0005N\u0000\u0000\u03d6\u03d7\u0005C\u0000\u0000"+ + "\u03d7\u008c\u0001\u0000\u0000\u0000\u03d8\u03d9\u0005I\u0000\u0000\u03d9"+ + "\u03da\u0005N\u0000\u0000\u03da\u03db\u0005T\u0000\u0000\u03db\u008e\u0001"+ + "\u0000\u0000\u0000\u03dc\u03dd\u0005G\u0000\u0000\u03dd\u03de\u0005C\u0000"+ + "\u0000\u03de\u03df\u0005D\u0000\u0000\u03df\u0090\u0001\u0000\u0000\u0000"+ + "\u03e0\u03e1\u0005L\u0000\u0000\u03e1\u03e2\u0005C\u0000\u0000\u03e2\u03e3"+ + "\u0005M\u0000\u0000\u03e3\u0092\u0001\u0000\u0000\u0000\u03e4\u03e5\u0005"+ + "C\u0000\u0000\u03e5\u03e6\u0005O\u0000\u0000\u03e6\u03e7\u0005M\u0000"+ + "\u0000\u03e7\u03e8\u0005B\u0000\u0000\u03e8\u03e9\u0005I\u0000\u0000\u03e9"+ + "\u03ea\u0005N\u0000\u0000\u03ea\u0094\u0001\u0000\u0000\u0000\u03eb\u03ec"+ + "\u0005P\u0000\u0000\u03ec\u03ed\u0005E\u0000\u0000\u03ed\u03ee\u0005R"+ + "\u0000\u0000\u03ee\u03ef\u0005M\u0000\u0000\u03ef\u03f0\u0005U\u0000\u0000"+ + "\u03f0\u03f1\u0005T\u0000\u0000\u03f1\u0096\u0001\u0000\u0000\u0000\u03f2"+ + "\u03f3\u0005D\u0000\u0000\u03f3\u03f4\u0005E\u0000\u0000\u03f4\u03f5\u0005"+ + "G\u0000\u0000\u03f5\u03f6\u0005R\u0000\u0000\u03f6\u03f7\u0005E\u0000"+ + "\u0000\u03f7\u03f8\u0005E\u0000\u0000\u03f8\u03f9\u0005S\u0000\u0000\u03f9"+ + "\u0098\u0001\u0000\u0000\u0000\u03fa\u03fb\u0005R\u0000\u0000\u03fb\u03fc"+ + "\u0005A\u0000\u0000\u03fc\u03fd\u0005D\u0000\u0000\u03fd\u03fe\u0005I"+ + "\u0000\u0000\u03fe\u03ff\u0005A\u0000\u0000\u03ff\u0400\u0005N\u0000\u0000"+ + "\u0400\u0401\u0005S\u0000\u0000\u0401\u009a\u0001\u0000\u0000\u0000\u0402"+ + "\u0403\u0005C\u0000\u0000\u0403\u0404\u0005O\u0000\u0000\u0404\u0405\u0005"+ + "S\u0000\u0000\u0405\u009c\u0001\u0000\u0000\u0000\u0406\u0407\u0005C\u0000"+ + "\u0000\u0407\u0408\u0005O\u0000\u0000\u0408\u0409\u0005S\u0000\u0000\u0409"+ + "\u040a\u0005H\u0000\u0000\u040a\u009e\u0001\u0000\u0000\u0000\u040b\u040c"+ + "\u0005S\u0000\u0000\u040c\u040d\u0005I\u0000\u0000\u040d\u040e\u0005N"+ + "\u0000\u0000\u040e\u00a0\u0001\u0000\u0000\u0000\u040f\u0410\u0005S\u0000"+ + "\u0000\u0410\u0411\u0005I\u0000\u0000\u0411\u0412\u0005N\u0000\u0000\u0412"+ + "\u0413\u0005H\u0000\u0000\u0413\u00a2\u0001\u0000\u0000\u0000\u0414\u0415"+ + "\u0005T\u0000\u0000\u0415\u0416\u0005A\u0000\u0000\u0416\u0417\u0005N"+ + "\u0000\u0000\u0417\u00a4\u0001\u0000\u0000\u0000\u0418\u0419\u0005T\u0000"+ + "\u0000\u0419\u041a\u0005A\u0000\u0000\u041a\u041b\u0005N\u0000\u0000\u041b"+ + "\u041c\u0005H\u0000\u0000\u041c\u00a6\u0001\u0000\u0000\u0000\u041d\u041e"+ + "\u0005A\u0000\u0000\u041e\u041f\u0005C\u0000\u0000\u041f\u0420\u0005O"+ + "\u0000\u0000\u0420\u0421\u0005S\u0000\u0000\u0421\u00a8\u0001\u0000\u0000"+ + "\u0000\u0422\u0423\u0005A\u0000\u0000\u0423\u0424\u0005C\u0000\u0000\u0424"+ + "\u0425\u0005O\u0000\u0000\u0425\u0426\u0005S\u0000\u0000\u0426\u0427\u0005"+ + "H\u0000\u0000\u0427\u00aa\u0001\u0000\u0000\u0000\u0428\u0429\u0005A\u0000"+ + "\u0000\u0429\u042a\u0005S\u0000\u0000\u042a\u042b\u0005I\u0000\u0000\u042b"+ + "\u042c\u0005N\u0000\u0000\u042c\u00ac\u0001\u0000\u0000\u0000\u042d\u042e"+ + "\u0005A\u0000\u0000\u042e\u042f\u0005S\u0000\u0000\u042f\u0430\u0005I"+ + "\u0000\u0000\u0430\u0431\u0005N\u0000\u0000\u0431\u0432\u0005H\u0000\u0000"+ + "\u0432\u00ae\u0001\u0000\u0000\u0000\u0433\u0434\u0005A\u0000\u0000\u0434"+ + "\u0435\u0005T\u0000\u0000\u0435\u0436\u0005A\u0000\u0000\u0436\u0437\u0005"+ + "N\u0000\u0000\u0437\u00b0\u0001\u0000\u0000\u0000\u0438\u0439\u0005A\u0000"+ + "\u0000\u0439\u043a\u0005T\u0000\u0000\u043a\u043b\u0005A\u0000\u0000\u043b"+ + "\u043c\u0005N\u0000\u0000\u043c\u043d\u0005H\u0000\u0000\u043d\u00b2\u0001"+ + "\u0000\u0000\u0000\u043e\u043f\u0005A\u0000\u0000\u043f\u0440\u0005T\u0000"+ + "\u0000\u0440\u0441\u0005A\u0000\u0000\u0441\u0442\u0005N\u0000\u0000\u0442"+ + "\u0443\u00052\u0000\u0000\u0443\u00b4\u0001\u0000\u0000\u0000\u0444\u0445"+ + "\u0005R\u0000\u0000\u0445\u0446\u0005O\u0000\u0000\u0446\u0447\u0005U"+ + "\u0000\u0000\u0447\u0448\u0005N\u0000\u0000\u0448\u0449\u0005D\u0000\u0000"+ + "\u0449\u00b6\u0001\u0000\u0000\u0000\u044a\u044b\u0005R\u0000\u0000\u044b"+ + "\u044c\u0005O\u0000\u0000\u044c\u044d\u0005U\u0000\u0000\u044d\u044e\u0005"+ + "N\u0000\u0000\u044e\u044f\u0005D\u0000\u0000\u044f\u0450\u0005D\u0000"+ + "\u0000\u0450\u0451\u0005O\u0000\u0000\u0451\u0452\u0005W\u0000\u0000\u0452"+ + "\u0453\u0005N\u0000\u0000\u0453\u00b8\u0001\u0000\u0000\u0000\u0454\u0455"+ + "\u0005R\u0000\u0000\u0455\u0456\u0005O\u0000\u0000\u0456\u0457\u0005U"+ + "\u0000\u0000\u0457\u0458\u0005N\u0000\u0000\u0458\u0459\u0005D\u0000\u0000"+ + "\u0459\u045a\u0005U\u0000\u0000\u045a\u045b\u0005P\u0000\u0000\u045b\u00ba"+ + "\u0001\u0000\u0000\u0000\u045c\u045d\u0005C\u0000\u0000\u045d\u045e\u0005"+ + "E\u0000\u0000\u045e\u045f\u0005I\u0000\u0000\u045f\u0460\u0005L\u0000"+ + "\u0000\u0460\u0461\u0005I\u0000\u0000\u0461\u0462\u0005N\u0000\u0000\u0462"+ + "\u0463\u0005G\u0000\u0000\u0463\u00bc\u0001\u0000\u0000\u0000\u0464\u0465"+ + "\u0005F\u0000\u0000\u0465\u0466\u0005L\u0000\u0000\u0466\u0467\u0005O"+ + "\u0000\u0000\u0467\u0468\u0005O\u0000\u0000\u0468\u0469\u0005R\u0000\u0000"+ + "\u0469\u00be\u0001\u0000\u0000\u0000\u046a\u046b\u0005E\u0000\u0000\u046b"+ + "\u046c\u0005V\u0000\u0000\u046c\u046d\u0005E\u0000\u0000\u046d\u046e\u0005"+ + "N\u0000\u0000\u046e\u00c0\u0001\u0000\u0000\u0000\u046f\u0470\u0005O\u0000"+ + "\u0000\u0470\u0471\u0005D\u0000\u0000\u0471\u0472\u0005D\u0000\u0000\u0472"+ + "\u00c2\u0001\u0000\u0000\u0000\u0473\u0474\u0005M\u0000\u0000\u0474\u0475"+ + "\u0005R\u0000\u0000\u0475\u0476\u0005O\u0000\u0000\u0476\u0477\u0005U"+ + "\u0000\u0000\u0477\u0478\u0005N\u0000\u0000\u0478\u0479\u0005D\u0000\u0000"+ + "\u0479\u00c4\u0001\u0000\u0000\u0000\u047a\u047b\u0005R\u0000\u0000\u047b"+ + "\u047c\u0005A\u0000\u0000\u047c\u047d\u0005N\u0000\u0000\u047d\u047e\u0005"+ + "D\u0000\u0000\u047e\u00c6\u0001\u0000\u0000\u0000\u047f\u0480\u0005R\u0000"+ + "\u0000\u0480\u0481\u0005A\u0000\u0000\u0481\u0482\u0005N\u0000\u0000\u0482"+ + "\u0483\u0005D\u0000\u0000\u0483\u0484\u0005B\u0000\u0000\u0484\u0485\u0005"+ + "E\u0000\u0000\u0485\u0486\u0005T\u0000\u0000\u0486\u0487\u0005W\u0000"+ + "\u0000\u0487\u0488\u0005E\u0000\u0000\u0488\u0489\u0005E\u0000\u0000\u0489"+ + "\u048a\u0005N\u0000\u0000\u048a\u00c8\u0001\u0000\u0000\u0000\u048b\u048c"+ + "\u0005F\u0000\u0000\u048c\u048d\u0005A\u0000\u0000\u048d\u048e\u0005C"+ + "\u0000\u0000\u048e\u048f\u0005T\u0000\u0000\u048f\u00ca\u0001\u0000\u0000"+ + "\u0000\u0490\u0491\u0005F\u0000\u0000\u0491\u0492\u0005A\u0000\u0000\u0492"+ + "\u0493\u0005C\u0000\u0000\u0493\u0494\u0005T\u0000\u0000\u0494\u0495\u0005"+ + "D\u0000\u0000\u0495\u0496\u0005O\u0000\u0000\u0496\u0497\u0005U\u0000"+ + "\u0000\u0497\u0498\u0005B\u0000\u0000\u0498\u0499\u0005L\u0000\u0000\u0499"+ + "\u049a\u0005E\u0000\u0000\u049a\u00cc\u0001\u0000\u0000\u0000\u049b\u049c"+ + "\u0005P\u0000\u0000\u049c\u049d\u0005O\u0000\u0000\u049d\u049e\u0005W"+ + "\u0000\u0000\u049e\u049f\u0005E\u0000\u0000\u049f\u04a0\u0005R\u0000\u0000"+ + "\u04a0\u00ce\u0001\u0000\u0000\u0000\u04a1\u04a2\u0005E\u0000\u0000\u04a2"+ + "\u04a3\u0005X\u0000\u0000\u04a3\u04a4\u0005P\u0000\u0000\u04a4\u00d0\u0001"+ + "\u0000\u0000\u0000\u04a5\u04a6\u0005L\u0000\u0000\u04a6\u04a7\u0005N\u0000"+ + "\u0000\u04a7\u00d2\u0001\u0000\u0000\u0000\u04a8\u04a9\u0005L\u0000\u0000"+ + "\u04a9\u04aa\u0005O\u0000\u0000\u04aa\u04ab\u0005G\u0000\u0000\u04ab\u00d4"+ + "\u0001\u0000\u0000\u0000\u04ac\u04ad\u0005L\u0000\u0000\u04ad\u04ae\u0005"+ + "O\u0000\u0000\u04ae\u04af\u0005G\u0000\u0000\u04af\u04b0\u00051\u0000"+ + "\u0000\u04b0\u04b1\u00050\u0000\u0000\u04b1\u00d6\u0001\u0000\u0000\u0000"+ + "\u04b2\u04b3\u0005M\u0000\u0000\u04b3\u04b4\u0005U\u0000\u0000\u04b4\u04b5"+ + "\u0005L\u0000\u0000\u04b5\u04b6\u0005T\u0000\u0000\u04b6\u04b7\u0005I"+ + "\u0000\u0000\u04b7\u04b8\u0005N\u0000\u0000\u04b8\u04b9\u0005O\u0000\u0000"+ + "\u04b9\u04ba\u0005M\u0000\u0000\u04ba\u04bb\u0005I\u0000\u0000\u04bb\u04bc"+ + "\u0005A\u0000\u0000\u04bc\u04bd\u0005L\u0000\u0000\u04bd\u00d8\u0001\u0000"+ + "\u0000\u0000\u04be\u04bf\u0005P\u0000\u0000\u04bf\u04c0\u0005R\u0000\u0000"+ + "\u04c0\u04c1\u0005O\u0000\u0000\u04c1\u04c2\u0005D\u0000\u0000\u04c2\u04c3"+ + "\u0005U\u0000\u0000\u04c3\u04c4\u0005C\u0000\u0000\u04c4\u04c5\u0005T"+ + "\u0000\u0000\u04c5\u00da\u0001\u0000\u0000\u0000\u04c6\u04c7\u0005S\u0000"+ + "\u0000\u04c7\u04c8\u0005Q\u0000\u0000\u04c8\u04c9\u0005R\u0000\u0000\u04c9"+ + "\u04ca\u0005T\u0000\u0000\u04ca\u04cb\u0005P\u0000\u0000\u04cb\u04cc\u0005"+ + "I\u0000\u0000\u04cc\u00dc\u0001\u0000\u0000\u0000\u04cd\u04ce\u0005S\u0000"+ + "\u0000\u04ce\u04cf\u0005U\u0000\u0000\u04cf\u04d0\u0005M\u0000\u0000\u04d0"+ + "\u04d1\u0005S\u0000\u0000\u04d1\u04d2\u0005Q\u0000\u0000\u04d2\u00de\u0001"+ + "\u0000\u0000\u0000\u04d3\u04d4\u0005A\u0000\u0000\u04d4\u04d5\u0005S\u0000"+ + "\u0000\u04d5\u04d6\u0005C\u0000\u0000\u04d6\u00e0\u0001\u0000\u0000\u0000"+ + "\u04d7\u04d8\u0005J\u0000\u0000\u04d8\u04d9\u0005I\u0000\u0000\u04d9\u04e3"+ + "\u0005S\u0000\u0000\u04da\u04db\u0005W\u0000\u0000\u04db\u04dc\u0005I"+ + "\u0000\u0000\u04dc\u04dd\u0005D\u0000\u0000\u04dd\u04de\u0005E\u0000\u0000"+ + "\u04de\u04df\u0005C\u0000\u0000\u04df\u04e0\u0005H\u0000\u0000\u04e0\u04e1"+ + "\u0005A\u0000\u0000\u04e1\u04e3\u0005R\u0000\u0000\u04e2\u04d7\u0001\u0000"+ + "\u0000\u0000\u04e2\u04da\u0001\u0000\u0000\u0000\u04e3\u00e2\u0001\u0000"+ + "\u0000\u0000\u04e4\u04e5\u0005C\u0000\u0000\u04e5\u04e6\u0005H\u0000\u0000"+ + "\u04e6\u04e7\u0005A\u0000\u0000\u04e7\u04e8\u0005R\u0000\u0000\u04e8\u00e4"+ + "\u0001\u0000\u0000\u0000\u04e9\u04ea\u0005C\u0000\u0000\u04ea\u04eb\u0005"+ + "L\u0000\u0000\u04eb\u04ec\u0005E\u0000\u0000\u04ec\u04ed\u0005A\u0000"+ + "\u0000\u04ed\u04ee\u0005N\u0000\u0000\u04ee\u00e6\u0001\u0000\u0000\u0000"+ + "\u04ef\u04f0\u0005C\u0000\u0000\u04f0\u04f1\u0005O\u0000\u0000\u04f1\u04f2"+ + "\u0005D\u0000\u0000\u04f2\u04f3\u0005E\u0000\u0000\u04f3\u00e8\u0001\u0000"+ + "\u0000\u0000\u04f4\u04f5\u0005C\u0000\u0000\u04f5\u04f6\u0005O\u0000\u0000"+ + "\u04f6\u04f7\u0005N\u0000\u0000\u04f7\u04f8\u0005C\u0000\u0000\u04f8\u04f9"+ + "\u0005A\u0000\u0000\u04f9\u04fa\u0005T\u0000\u0000\u04fa\u04fb\u0005E"+ + "\u0000\u0000\u04fb\u04fc\u0005N\u0000\u0000\u04fc\u04fd\u0005A\u0000\u0000"+ + "\u04fd\u04fe\u0005T\u0000\u0000\u04fe\u04ff\u0005E\u0000\u0000\u04ff\u00ea"+ + "\u0001\u0000\u0000\u0000\u0500\u0501\u0005E\u0000\u0000\u0501\u0502\u0005"+ + "X\u0000\u0000\u0502\u0503\u0005A\u0000\u0000\u0503\u0504\u0005C\u0000"+ + "\u0000\u0504\u0505\u0005T\u0000\u0000\u0505\u00ec\u0001\u0000\u0000\u0000"+ + "\u0506\u0507\u0005F\u0000\u0000\u0507\u0508\u0005I\u0000\u0000\u0508\u0509"+ + "\u0005N\u0000\u0000\u0509\u050a\u0005D\u0000\u0000\u050a\u00ee\u0001\u0000"+ + "\u0000\u0000\u050b\u050c\u0005F\u0000\u0000\u050c\u050d\u0005I\u0000\u0000"+ + "\u050d\u050e\u0005X\u0000\u0000\u050e\u050f\u0005E\u0000\u0000\u050f\u0510"+ + "\u0005D\u0000\u0000\u0510\u00f0\u0001\u0000\u0000\u0000\u0511\u0512\u0005"+ + "L\u0000\u0000\u0512\u0513\u0005E\u0000\u0000\u0513\u0514\u0005F\u0000"+ + "\u0000\u0514\u0515\u0005T\u0000\u0000\u0515\u00f2\u0001\u0000\u0000\u0000"+ + "\u0516\u0517\u0005L\u0000\u0000\u0517\u0518\u0005E\u0000\u0000\u0518\u0519"+ + "\u0005N\u0000\u0000\u0519\u00f4\u0001\u0000\u0000\u0000\u051a\u051b\u0005"+ + "L\u0000\u0000\u051b\u051c\u0005O\u0000\u0000\u051c\u051d\u0005W\u0000"+ + "\u0000\u051d\u051e\u0005E\u0000\u0000\u051e\u0527\u0005R\u0000\u0000\u051f"+ + "\u0520\u0005T\u0000\u0000\u0520\u0521\u0005O\u0000\u0000\u0521\u0522\u0005"+ + "L\u0000\u0000\u0522\u0523\u0005O\u0000\u0000\u0523\u0524\u0005W\u0000"+ + "\u0000\u0524\u0525\u0005E\u0000\u0000\u0525\u0527\u0005R\u0000\u0000\u0526"+ + "\u051a\u0001\u0000\u0000\u0000\u0526\u051f\u0001\u0000\u0000\u0000\u0527"+ + "\u00f6\u0001\u0000\u0000\u0000\u0528\u0529\u0005M\u0000\u0000\u0529\u052a"+ + "\u0005I\u0000\u0000\u052a\u052b\u0005D\u0000\u0000\u052b\u00f8\u0001\u0000"+ + "\u0000\u0000\u052c\u052d\u0005P\u0000\u0000\u052d\u052e\u0005R\u0000\u0000"+ + "\u052e\u052f\u0005O\u0000\u0000\u052f\u0530\u0005P\u0000\u0000\u0530\u0531"+ + "\u0005E\u0000\u0000\u0531\u0532\u0005R\u0000\u0000\u0532\u00fa\u0001\u0000"+ + "\u0000\u0000\u0533\u0534\u0005R\u0000\u0000\u0534\u0535\u0005E\u0000\u0000"+ + "\u0535\u0536\u0005P\u0000\u0000\u0536\u0537\u0005L\u0000\u0000\u0537\u0538"+ + "\u0005A\u0000\u0000\u0538\u0539\u0005C\u0000\u0000\u0539\u053a\u0005E"+ + "\u0000\u0000\u053a\u00fc\u0001\u0000\u0000\u0000\u053b\u053c\u0005R\u0000"+ + "\u0000\u053c\u053d\u0005E\u0000\u0000\u053d\u053e\u0005P\u0000\u0000\u053e"+ + "\u053f\u0005T\u0000\u0000\u053f\u00fe\u0001\u0000\u0000\u0000\u0540\u0541"+ + "\u0005R\u0000\u0000\u0541\u0542\u0005I\u0000\u0000\u0542\u0543\u0005G"+ + "\u0000\u0000\u0543\u0544\u0005H\u0000\u0000\u0544\u0545\u0005T\u0000\u0000"+ + "\u0545\u0100\u0001\u0000\u0000\u0000\u0546\u0547\u0005R\u0000\u0000\u0547"+ + "\u0548\u0005M\u0000\u0000\u0548\u0549\u0005B\u0000\u0000\u0549\u0102\u0001"+ + "\u0000\u0000\u0000\u054a\u054b\u0005S\u0000\u0000\u054b\u054c\u0005E\u0000"+ + "\u0000\u054c\u054d\u0005A\u0000\u0000\u054d\u054e\u0005R\u0000\u0000\u054e"+ + "\u054f\u0005C\u0000\u0000\u054f\u0550\u0005H\u0000\u0000\u0550\u0104\u0001"+ + "\u0000\u0000\u0000\u0551\u0552\u0005S\u0000\u0000\u0552\u0553\u0005U\u0000"+ + "\u0000\u0553\u0554\u0005B\u0000\u0000\u0554\u0555\u0005S\u0000\u0000\u0555"+ + "\u0556\u0005T\u0000\u0000\u0556\u0557\u0005I\u0000\u0000\u0557\u0558\u0005"+ + "T\u0000\u0000\u0558\u0559\u0005U\u0000\u0000\u0559\u055a\u0005T\u0000"+ + "\u0000\u055a\u055b\u0005E\u0000\u0000\u055b\u0106\u0001\u0000\u0000\u0000"+ + "\u055c\u055d\u0005T\u0000\u0000\u055d\u0108\u0001\u0000\u0000\u0000\u055e"+ + "\u055f\u0005T\u0000\u0000\u055f\u0560\u0005E\u0000\u0000\u0560\u0561\u0005"+ + "X\u0000\u0000\u0561\u0562\u0005T\u0000\u0000\u0562\u010a\u0001\u0000\u0000"+ + "\u0000\u0563\u0564\u0005T\u0000\u0000\u0564\u0565\u0005R\u0000\u0000\u0565"+ + "\u0566\u0005I\u0000\u0000\u0566\u0567\u0005M\u0000\u0000\u0567\u010c\u0001"+ + "\u0000\u0000\u0000\u0568\u0569\u0005U\u0000\u0000\u0569\u056a\u0005P\u0000"+ + "\u0000\u056a\u056b\u0005P\u0000\u0000\u056b\u056c\u0005E\u0000\u0000\u056c"+ + "\u0575\u0005R\u0000\u0000\u056d\u056e\u0005T\u0000\u0000\u056e\u056f\u0005"+ + "O\u0000\u0000\u056f\u0570\u0005U\u0000\u0000\u0570\u0571\u0005P\u0000"+ + "\u0000\u0571\u0572\u0005P\u0000\u0000\u0572\u0573\u0005E\u0000\u0000\u0573"+ + "\u0575\u0005R\u0000\u0000\u0574\u0568\u0001\u0000\u0000\u0000\u0574\u056d"+ + "\u0001\u0000\u0000\u0000\u0575\u010e\u0001\u0000\u0000\u0000\u0576\u0577"+ + "\u0005V\u0000\u0000\u0577\u0578\u0005A\u0000\u0000\u0578\u0579\u0005L"+ + "\u0000\u0000\u0579\u057a\u0005U\u0000\u0000\u057a\u057b\u0005E\u0000\u0000"+ + "\u057b\u0110\u0001\u0000\u0000\u0000\u057c\u057d\u0005D\u0000\u0000\u057d"+ + "\u057e\u0005A\u0000\u0000\u057e\u057f\u0005T\u0000\u0000\u057f\u0580\u0005"+ + "E\u0000\u0000\u0580\u0581\u0005V\u0000\u0000\u0581\u0582\u0005A\u0000"+ + "\u0000\u0582\u0583\u0005L\u0000\u0000\u0583\u0584\u0005U\u0000\u0000\u0584"+ + "\u0585\u0005E\u0000\u0000\u0585\u0112\u0001\u0000\u0000\u0000\u0586\u0587"+ + "\u0005T\u0000\u0000\u0587\u0588\u0005I\u0000\u0000\u0588\u0589\u0005M"+ + "\u0000\u0000\u0589\u058a\u0005E\u0000\u0000\u058a\u058b\u0005V\u0000\u0000"+ + "\u058b\u058c\u0005A\u0000\u0000\u058c\u058d\u0005L\u0000\u0000\u058d\u058e"+ + "\u0005U\u0000\u0000\u058e\u058f\u0005E\u0000\u0000\u058f\u0114\u0001\u0000"+ + "\u0000\u0000\u0590\u0591\u0005D\u0000\u0000\u0591\u0592\u0005A\u0000\u0000"+ + "\u0592\u0593\u0005T\u0000\u0000\u0593\u0594\u0005E\u0000\u0000\u0594\u0116"+ + "\u0001\u0000\u0000\u0000\u0595\u0596\u0005T\u0000\u0000\u0596\u0597\u0005"+ + "I\u0000\u0000\u0597\u0598\u0005M\u0000\u0000\u0598\u0599\u0005E\u0000"+ + "\u0000\u0599\u0118\u0001\u0000\u0000\u0000\u059a\u059b\u0005N\u0000\u0000"+ + "\u059b\u059c\u0005O\u0000\u0000\u059c\u059d\u0005W\u0000\u0000\u059d\u011a"+ + "\u0001\u0000\u0000\u0000\u059e\u059f\u0005T\u0000\u0000\u059f\u05a0\u0005"+ + "O\u0000\u0000\u05a0\u05a1\u0005D\u0000\u0000\u05a1\u05a2\u0005A\u0000"+ + "\u0000\u05a2\u05a3\u0005Y\u0000\u0000\u05a3\u011c\u0001\u0000\u0000\u0000"+ + "\u05a4\u05a5\u0005Y\u0000\u0000\u05a5\u05a6\u0005E\u0000\u0000\u05a6\u05a7"+ + "\u0005A\u0000\u0000\u05a7\u05a8\u0005R\u0000\u0000\u05a8\u011e\u0001\u0000"+ + "\u0000\u0000\u05a9\u05aa\u0005M\u0000\u0000\u05aa\u05ab\u0005O\u0000\u0000"+ + "\u05ab\u05ac\u0005N\u0000\u0000\u05ac\u05ad\u0005T\u0000\u0000\u05ad\u05ae"+ + "\u0005H\u0000\u0000\u05ae\u0120\u0001\u0000\u0000\u0000\u05af\u05b0\u0005"+ + "D\u0000\u0000\u05b0\u05b1\u0005A\u0000\u0000\u05b1\u05b2\u0005Y\u0000"+ + "\u0000\u05b2\u0122\u0001\u0000\u0000\u0000\u05b3\u05b4\u0005H\u0000\u0000"+ + "\u05b4\u05b5\u0005O\u0000\u0000\u05b5\u05b6\u0005U\u0000\u0000\u05b6\u05b7"+ + "\u0005R\u0000\u0000\u05b7\u0124\u0001\u0000\u0000\u0000\u05b8\u05b9\u0005"+ + "M\u0000\u0000\u05b9\u05ba\u0005I\u0000\u0000\u05ba\u05bb\u0005N\u0000"+ + "\u0000\u05bb\u05bc\u0005U\u0000\u0000\u05bc\u05bd\u0005T\u0000\u0000\u05bd"+ + "\u05be\u0005E\u0000\u0000\u05be\u0126\u0001\u0000\u0000\u0000\u05bf\u05c0"+ + "\u0005S\u0000\u0000\u05c0\u05c1\u0005E\u0000\u0000\u05c1\u05c2\u0005C"+ + "\u0000\u0000\u05c2\u05c3\u0005O\u0000\u0000\u05c3\u05c4\u0005N\u0000\u0000"+ + "\u05c4\u05c5\u0005D\u0000\u0000\u05c5\u0128\u0001\u0000\u0000\u0000\u05c6"+ + "\u05c7\u0005W\u0000\u0000\u05c7\u05c8\u0005E\u0000\u0000\u05c8\u05c9\u0005"+ + "E\u0000\u0000\u05c9\u05ca\u0005K\u0000\u0000\u05ca\u05cb\u0005D\u0000"+ + "\u0000\u05cb\u05cc\u0005A\u0000\u0000\u05cc\u05cd\u0005Y\u0000\u0000\u05cd"+ + "\u012a\u0001\u0000\u0000\u0000\u05ce\u05cf\u0005D\u0000\u0000\u05cf\u05d0"+ + "\u0005A\u0000\u0000\u05d0\u05d1\u0005T\u0000\u0000\u05d1\u05d2\u0005E"+ + "\u0000\u0000\u05d2\u05d3\u0005D\u0000\u0000\u05d3\u05d4\u0005I\u0000\u0000"+ + "\u05d4\u05d5\u0005F\u0000\u0000\u05d5\u012c\u0001\u0000\u0000\u0000\u05d6"+ + "\u05d7\u0005D\u0000\u0000\u05d7\u05d8\u0005A\u0000\u0000\u05d8\u05d9\u0005"+ + "Y\u0000\u0000\u05d9\u05da\u0005S\u0000\u0000\u05da\u05db\u00053\u0000"+ + "\u0000\u05db\u05dc\u00056\u0000\u0000\u05dc\u05dd\u00050\u0000\u0000\u05dd"+ + "\u012e\u0001\u0000\u0000\u0000\u05de\u05df\u0005E\u0000\u0000\u05df\u05e0"+ + "\u0005D\u0000\u0000\u05e0\u05e1\u0005A\u0000\u0000\u05e1\u05e2\u0005T"+ + "\u0000\u0000\u05e2\u05e3\u0005E\u0000\u0000\u05e3\u0130\u0001\u0000\u0000"+ + "\u0000\u05e4\u05e5\u0005E\u0000\u0000\u05e5\u05e6\u0005O\u0000\u0000\u05e6"+ + "\u05e7\u0005M\u0000\u0000\u05e7\u05e8\u0005O\u0000\u0000\u05e8\u05e9\u0005"+ + "N\u0000\u0000\u05e9\u05ea\u0005T\u0000\u0000\u05ea\u05eb\u0005H\u0000"+ + "\u0000\u05eb\u0132\u0001\u0000\u0000\u0000\u05ec\u05ed\u0005N\u0000\u0000"+ + "\u05ed\u05ee\u0005E\u0000\u0000\u05ee\u05ef\u0005T\u0000\u0000\u05ef\u05f0"+ + "\u0005W\u0000\u0000\u05f0\u05f1\u0005O\u0000\u0000\u05f1\u05f2\u0005R"+ + "\u0000\u0000\u05f2\u05f3\u0005K\u0000\u0000\u05f3\u05f4\u0005D\u0000\u0000"+ + "\u05f4\u05f5\u0005A\u0000\u0000\u05f5\u05f6\u0005Y\u0000\u0000\u05f6\u05f7"+ + "\u0005S\u0000\u0000\u05f7\u0134\u0001\u0000\u0000\u0000\u05f8\u05f9\u0005"+ + "W\u0000\u0000\u05f9\u05fa\u0005O\u0000\u0000\u05fa\u05fb\u0005R\u0000"+ + "\u0000\u05fb\u05fc\u0005K\u0000\u0000\u05fc\u05fd\u0005D\u0000\u0000\u05fd"+ + "\u05fe\u0005A\u0000\u0000\u05fe\u05ff\u0005Y\u0000\u0000\u05ff\u0136\u0001"+ + "\u0000\u0000\u0000\u0600\u0601\u0005W\u0000\u0000\u0601\u0602\u0005E\u0000"+ + "\u0000\u0602\u0603\u0005E\u0000\u0000\u0603\u0604\u0005K\u0000\u0000\u0604"+ + "\u0605\u0005N\u0000\u0000\u0605\u0606\u0005U\u0000\u0000\u0606\u0607\u0005"+ + "M\u0000\u0000\u0607\u0138\u0001\u0000\u0000\u0000\u0608\u0609\u0005M\u0000"+ + "\u0000\u0609\u060a\u0005A\u0000\u0000\u060a\u060b\u0005X\u0000\u0000\u060b"+ + "\u013a\u0001\u0000\u0000\u0000\u060c\u060d\u0005M\u0000\u0000\u060d\u060e"+ + "\u0005E\u0000\u0000\u060e\u060f\u0005D\u0000\u0000\u060f\u0610\u0005I"+ + "\u0000\u0000\u0610\u0611\u0005A\u0000\u0000\u0611\u0612\u0005N\u0000\u0000"+ + "\u0612\u013c\u0001\u0000\u0000\u0000\u0613\u0614\u0005M\u0000\u0000\u0614"+ + "\u0615\u0005I\u0000\u0000\u0615\u0616\u0005N\u0000\u0000\u0616\u013e\u0001"+ + "\u0000\u0000\u0000\u0617\u0618\u0005Q\u0000\u0000\u0618\u0619\u0005U\u0000"+ + "\u0000\u0619\u061a\u0005A\u0000\u0000\u061a\u061b\u0005R\u0000\u0000\u061b"+ + "\u061c\u0005T\u0000\u0000\u061c\u061d\u0005I\u0000\u0000\u061d\u061e\u0005"+ + "L\u0000\u0000\u061e\u061f\u0005E\u0000\u0000\u061f\u0140\u0001\u0000\u0000"+ + "\u0000\u0620\u0621\u0005M\u0000\u0000\u0621\u0622\u0005O\u0000\u0000\u0622"+ + "\u0623\u0005D\u0000\u0000\u0623\u0624\u0005E\u0000\u0000\u0624\u0142\u0001"+ + "\u0000\u0000\u0000\u0625\u0626\u0005L\u0000\u0000\u0626\u0627\u0005A\u0000"+ + "\u0000\u0627\u0628\u0005R\u0000\u0000\u0628\u0629\u0005G\u0000\u0000\u0629"+ + "\u062a\u0005E\u0000\u0000\u062a\u0144\u0001\u0000\u0000\u0000\u062b\u062c"+ + "\u0005S\u0000\u0000\u062c\u062d\u0005M\u0000\u0000\u062d\u062e\u0005A"+ + "\u0000\u0000\u062e\u062f\u0005L\u0000\u0000\u062f\u0630\u0005L\u0000\u0000"+ + "\u0630\u0146\u0001\u0000\u0000\u0000\u0631\u0632\u0005P\u0000\u0000\u0632"+ + "\u0633\u0005E\u0000\u0000\u0633\u0634\u0005R\u0000\u0000\u0634\u0635\u0005"+ + "C\u0000\u0000\u0635\u0636\u0005E\u0000\u0000\u0636\u0637\u0005N\u0000"+ + "\u0000\u0637\u0638\u0005T\u0000\u0000\u0638\u0639\u0005I\u0000\u0000\u0639"+ + "\u063a\u0005L\u0000\u0000\u063a\u064a\u0005E\u0000\u0000\u063b\u063c\u0005"+ + "P\u0000\u0000\u063c\u063d\u0005E\u0000\u0000\u063d\u063e\u0005R\u0000"+ + "\u0000\u063e\u063f\u0005C\u0000\u0000\u063f\u0640\u0005E\u0000\u0000\u0640"+ + "\u0641\u0005N\u0000\u0000\u0641\u0642\u0005T\u0000\u0000\u0642\u0643\u0005"+ + "I\u0000\u0000\u0643\u0644\u0005L\u0000\u0000\u0644\u0645\u0005E\u0000"+ + "\u0000\u0645\u0646\u0005.\u0000\u0000\u0646\u0647\u0005I\u0000\u0000\u0647"+ + "\u0648\u0005N\u0000\u0000\u0648\u064a\u0005C\u0000\u0000\u0649\u0631\u0001"+ + "\u0000\u0000\u0000\u0649\u063b\u0001\u0000\u0000\u0000\u064a\u0148\u0001"+ + "\u0000\u0000\u0000\u064b\u064c\u0005P\u0000\u0000\u064c\u064d\u0005E\u0000"+ + "\u0000\u064d\u064e\u0005R\u0000\u0000\u064e\u064f\u0005C\u0000\u0000\u064f"+ + "\u0650\u0005E\u0000\u0000\u0650\u0651\u0005N\u0000\u0000\u0651\u0652\u0005"+ + "T\u0000\u0000\u0652\u0653\u0005R\u0000\u0000\u0653\u0654\u0005A\u0000"+ + "\u0000\u0654\u0655\u0005N\u0000\u0000\u0655\u0666\u0005K\u0000\u0000\u0656"+ + "\u0657\u0005P\u0000\u0000\u0657\u0658\u0005E\u0000\u0000\u0658\u0659\u0005"+ + "R\u0000\u0000\u0659\u065a\u0005C\u0000\u0000\u065a\u065b\u0005E\u0000"+ + "\u0000\u065b\u065c\u0005N\u0000\u0000\u065c\u065d\u0005T\u0000\u0000\u065d"+ + "\u065e\u0005R\u0000\u0000\u065e\u065f\u0005A\u0000\u0000\u065f\u0660\u0005"+ + "N\u0000\u0000\u0660\u0661\u0005K\u0000\u0000\u0661\u0662\u0005.\u0000"+ + "\u0000\u0662\u0663\u0005I\u0000\u0000\u0663\u0664\u0005N\u0000\u0000\u0664"+ + "\u0666\u0005C\u0000\u0000\u0665\u064b\u0001\u0000\u0000\u0000\u0665\u0656"+ + "\u0001\u0000\u0000\u0000\u0666\u014a\u0001\u0000\u0000\u0000\u0667\u0668"+ + "\u0005A\u0000\u0000\u0668\u0669\u0005V\u0000\u0000\u0669\u066a\u0005E"+ + "\u0000\u0000\u066a\u066b\u0005R\u0000\u0000\u066b\u066c\u0005A\u0000\u0000"+ + "\u066c\u066d\u0005G\u0000\u0000\u066d\u066e\u0005E\u0000\u0000\u066e\u014c"+ + "\u0001\u0000\u0000\u0000\u066f\u0670\u0005A\u0000\u0000\u0670\u0671\u0005"+ + "V\u0000\u0000\u0671\u0672\u0005E\u0000\u0000\u0672\u0673\u0005R\u0000"+ + "\u0000\u0673\u0674\u0005A\u0000\u0000\u0674\u0675\u0005G\u0000\u0000\u0675"+ + "\u0676\u0005E\u0000\u0000\u0676\u0677\u0005I\u0000\u0000\u0677\u0678\u0005"+ + "F\u0000\u0000\u0678\u014e\u0001\u0000\u0000\u0000\u0679\u067a\u0005G\u0000"+ + "\u0000\u067a\u067b\u0005E\u0000\u0000\u067b\u067c\u0005O\u0000\u0000\u067c"+ + "\u067d\u0005M\u0000\u0000\u067d\u067e\u0005E\u0000\u0000\u067e\u067f\u0005"+ + "A\u0000\u0000\u067f\u0680\u0005N\u0000\u0000\u0680\u0150\u0001\u0000\u0000"+ + "\u0000\u0681\u0682\u0005H\u0000\u0000\u0682\u0683\u0005A\u0000\u0000\u0683"+ + "\u0684\u0005R\u0000\u0000\u0684\u0685\u0005M\u0000\u0000\u0685\u0686\u0005"+ + "E\u0000\u0000\u0686\u0687\u0005A\u0000\u0000\u0687\u0688\u0005N\u0000"+ + "\u0000\u0688\u0152\u0001\u0000\u0000\u0000\u0689\u068a\u0005C\u0000\u0000"+ + "\u068a\u068b\u0005O\u0000\u0000\u068b\u068c\u0005U\u0000\u0000\u068c\u068d"+ + "\u0005N\u0000\u0000\u068d\u068e\u0005T\u0000\u0000\u068e\u0154\u0001\u0000"+ + "\u0000\u0000\u068f\u0690\u0005C\u0000\u0000\u0690\u0691\u0005O\u0000\u0000"+ + "\u0691\u0692\u0005U\u0000\u0000\u0692\u0693\u0005N\u0000\u0000\u0693\u0694"+ + "\u0005T\u0000\u0000\u0694\u0695\u0005I\u0000\u0000\u0695\u0696\u0005F"+ + "\u0000\u0000\u0696\u0156\u0001\u0000\u0000\u0000\u0697\u0698\u0005S\u0000"+ + "\u0000\u0698\u0699\u0005U\u0000\u0000\u0699\u069a\u0005M\u0000\u0000\u069a"+ + "\u0158\u0001\u0000\u0000\u0000\u069b\u069c\u0005S\u0000\u0000\u069c\u069d"+ + "\u0005U\u0000\u0000\u069d\u069e\u0005M\u0000\u0000\u069e\u069f\u0005I"+ + "\u0000\u0000\u069f\u06a0\u0005F\u0000\u0000\u06a0\u015a\u0001\u0000\u0000"+ + "\u0000\u06a1\u06a2\u0005A\u0000\u0000\u06a2\u06a3\u0005V\u0000\u0000\u06a3"+ + "\u06a4\u0005E\u0000\u0000\u06a4\u06a5\u0005D\u0000\u0000\u06a5\u06a6\u0005"+ + "E\u0000\u0000\u06a6\u06a7\u0005V\u0000\u0000\u06a7\u015c\u0001\u0000\u0000"+ + "\u0000\u06a8\u06a9\u0005S\u0000\u0000\u06a9\u06aa\u0005T\u0000\u0000\u06aa"+ + "\u06ab\u0005D\u0000\u0000\u06ab\u06ac\u0005E\u0000\u0000\u06ac\u06b5\u0005"+ + "V\u0000\u0000\u06ad\u06ae\u0005S\u0000\u0000\u06ae\u06af\u0005T\u0000"+ + "\u0000\u06af\u06b0\u0005D\u0000\u0000\u06b0\u06b1\u0005E\u0000\u0000\u06b1"+ + "\u06b2\u0005V\u0000\u0000\u06b2\u06b3\u0005.\u0000\u0000\u06b3\u06b5\u0005"+ + "S\u0000\u0000\u06b4\u06a8\u0001\u0000\u0000\u0000\u06b4\u06ad\u0001\u0000"+ + "\u0000\u0000\u06b5\u015e\u0001\u0000\u0000\u0000\u06b6\u06b7\u0005S\u0000"+ + "\u0000\u06b7\u06b8\u0005T\u0000\u0000\u06b8\u06b9\u0005D\u0000\u0000\u06b9"+ + "\u06ba\u0005E\u0000\u0000\u06ba\u06bb\u0005V\u0000\u0000\u06bb\u06c4\u0005"+ + "P\u0000\u0000\u06bc\u06bd\u0005S\u0000\u0000\u06bd\u06be\u0005T\u0000"+ + "\u0000\u06be\u06bf\u0005D\u0000\u0000\u06bf\u06c0\u0005E\u0000\u0000\u06c0"+ + "\u06c1\u0005V\u0000\u0000\u06c1\u06c2\u0005.\u0000\u0000\u06c2\u06c4\u0005"+ + "P\u0000\u0000\u06c3\u06b6\u0001\u0000\u0000\u0000\u06c3\u06bc\u0001\u0000"+ + "\u0000\u0000\u06c4\u0160\u0001\u0000\u0000\u0000\u06c5\u06c6\u0005C\u0000"+ + "\u0000\u06c6\u06c7\u0005O\u0000\u0000\u06c7\u06c8\u0005V\u0000\u0000\u06c8"+ + "\u06c9\u0005A\u0000\u0000\u06c9\u06d7\u0005R\u0000\u0000\u06ca\u06cb\u0005"+ + "C\u0000\u0000\u06cb\u06cc\u0005O\u0000\u0000\u06cc\u06cd\u0005V\u0000"+ + "\u0000\u06cd\u06ce\u0005A\u0000\u0000\u06ce\u06cf\u0005R\u0000\u0000\u06cf"+ + "\u06d0\u0005I\u0000\u0000\u06d0\u06d1\u0005A\u0000\u0000\u06d1\u06d2\u0005"+ + "N\u0000\u0000\u06d2\u06d3\u0005C\u0000\u0000\u06d3\u06d4\u0005E\u0000"+ + "\u0000\u06d4\u06d5\u0005.\u0000\u0000\u06d5\u06d7\u0005P\u0000\u0000\u06d6"+ + "\u06c5\u0001\u0000\u0000\u0000\u06d6\u06ca\u0001\u0000\u0000\u0000\u06d7"+ + "\u0162\u0001\u0000\u0000\u0000\u06d8\u06d9\u0005C\u0000\u0000\u06d9\u06da"+ + "\u0005O\u0000\u0000\u06da\u06db\u0005V\u0000\u0000\u06db\u06dc\u0005A"+ + "\u0000\u0000\u06dc\u06dd\u0005R\u0000\u0000\u06dd\u06de\u0005I\u0000\u0000"+ + "\u06de\u06df\u0005A\u0000\u0000\u06df\u06e0\u0005N\u0000\u0000\u06e0\u06e1"+ + "\u0005C\u0000\u0000\u06e1\u06e2\u0005E\u0000\u0000\u06e2\u06e3\u0005."+ + "\u0000\u0000\u06e3\u06e4\u0005S\u0000\u0000\u06e4\u0164\u0001\u0000\u0000"+ + "\u0000\u06e5\u06e6\u0005D\u0000\u0000\u06e6\u06e7\u0005E\u0000\u0000\u06e7"+ + "\u06e8\u0005V\u0000\u0000\u06e8\u06e9\u0005S\u0000\u0000\u06e9\u06ea\u0005"+ + "Q\u0000\u0000\u06ea\u0166\u0001\u0000\u0000\u0000\u06eb\u06ec\u0005V\u0000"+ + "\u0000\u06ec\u06ed\u0005A\u0000\u0000\u06ed\u06f4\u0005R\u0000\u0000\u06ee"+ + "\u06ef\u0005V\u0000\u0000\u06ef\u06f0\u0005A\u0000\u0000\u06f0\u06f1\u0005"+ + "R\u0000\u0000\u06f1\u06f2\u0005.\u0000\u0000\u06f2\u06f4\u0005S\u0000"+ + "\u0000\u06f3\u06eb\u0001\u0000\u0000\u0000\u06f3\u06ee\u0001\u0000\u0000"+ + "\u0000\u06f4\u0168\u0001\u0000\u0000\u0000\u06f5\u06f6\u0005V\u0000\u0000"+ + "\u06f6\u06f7\u0005A\u0000\u0000\u06f7\u06f8\u0005R\u0000\u0000\u06f8\u06ff"+ + "\u0005P\u0000\u0000\u06f9\u06fa\u0005V\u0000\u0000\u06fa\u06fb\u0005A"+ + "\u0000\u0000\u06fb\u06fc\u0005R\u0000\u0000\u06fc\u06fd\u0005.\u0000\u0000"+ + "\u06fd\u06ff\u0005P\u0000\u0000\u06fe\u06f5\u0001\u0000\u0000\u0000\u06fe"+ + "\u06f9\u0001\u0000\u0000\u0000\u06ff\u016a\u0001\u0000\u0000\u0000\u0700"+ + "\u0701\u0005N\u0000\u0000\u0701\u0702\u0005O\u0000\u0000\u0702\u0703\u0005"+ + "R\u0000\u0000\u0703\u0704\u0005M\u0000\u0000\u0704\u0705\u0005D\u0000"+ + "\u0000\u0705\u0706\u0005I\u0000\u0000\u0706\u0707\u0005S\u0000\u0000\u0707"+ + "\u0712\u0005T\u0000\u0000\u0708\u0709\u0005N\u0000\u0000\u0709\u070a\u0005"+ + "O\u0000\u0000\u070a\u070b\u0005R\u0000\u0000\u070b\u070c\u0005M\u0000"+ + "\u0000\u070c\u070d\u0005.\u0000\u0000\u070d\u070e\u0005D\u0000\u0000\u070e"+ + "\u070f\u0005I\u0000\u0000\u070f\u0710\u0005S\u0000\u0000\u0710\u0712\u0005"+ + "T\u0000\u0000\u0711\u0700\u0001\u0000\u0000\u0000\u0711\u0708\u0001\u0000"+ + "\u0000\u0000\u0712\u016c\u0001\u0000\u0000\u0000\u0713\u0714\u0005N\u0000"+ + "\u0000\u0714\u0715\u0005O\u0000\u0000\u0715\u0716\u0005R\u0000\u0000\u0716"+ + "\u0717\u0005M\u0000\u0000\u0717\u0718\u0005I\u0000\u0000\u0718\u0719\u0005"+ + "N\u0000\u0000\u0719\u0723\u0005V\u0000\u0000\u071a\u071b\u0005N\u0000"+ + "\u0000\u071b\u071c\u0005O\u0000\u0000\u071c\u071d\u0005R\u0000\u0000\u071d"+ + "\u071e\u0005M\u0000\u0000\u071e\u071f\u0005.\u0000\u0000\u071f\u0720\u0005"+ + "I\u0000\u0000\u0720\u0721\u0005N\u0000\u0000\u0721\u0723\u0005V\u0000"+ + "\u0000\u0722\u0713\u0001\u0000\u0000\u0000\u0722\u071a\u0001\u0000\u0000"+ + "\u0000\u0723\u016e\u0001\u0000\u0000\u0000\u0724\u0725\u0005N\u0000\u0000"+ + "\u0725\u0726\u0005O\u0000\u0000\u0726\u0727\u0005R\u0000\u0000\u0727\u0728"+ + "\u0005M\u0000\u0000\u0728\u0729\u0005S\u0000\u0000\u0729\u072a\u0005D"+ + "\u0000\u0000\u072a\u072b\u0005I\u0000\u0000\u072b\u072c\u0005S\u0000\u0000"+ + "\u072c\u0739\u0005T\u0000\u0000\u072d\u072e\u0005N\u0000\u0000\u072e\u072f"+ + "\u0005O\u0000\u0000\u072f\u0730\u0005R\u0000\u0000\u0730\u0731\u0005M"+ + "\u0000\u0000\u0731\u0732\u0005.\u0000\u0000\u0732\u0733\u0005S\u0000\u0000"+ + "\u0733\u0734\u0005.\u0000\u0000\u0734\u0735\u0005D\u0000\u0000\u0735\u0736"+ + "\u0005I\u0000\u0000\u0736\u0737\u0005S\u0000\u0000\u0737\u0739\u0005T"+ + "\u0000\u0000\u0738\u0724\u0001\u0000\u0000\u0000\u0738\u072d\u0001\u0000"+ + "\u0000\u0000\u0739\u0170\u0001\u0000\u0000\u0000\u073a\u073b\u0005N\u0000"+ + "\u0000\u073b\u073c\u0005O\u0000\u0000\u073c\u073d\u0005R\u0000\u0000\u073d"+ + "\u073e\u0005M\u0000\u0000\u073e\u073f\u0005S\u0000\u0000\u073f\u0740\u0005"+ + "I\u0000\u0000\u0740\u0741\u0005N\u0000\u0000\u0741\u074d\u0005V\u0000"+ + "\u0000\u0742\u0743\u0005N\u0000\u0000\u0743\u0744\u0005O\u0000\u0000\u0744"+ + "\u0745\u0005R\u0000\u0000\u0745\u0746\u0005M\u0000\u0000\u0746\u0747\u0005"+ + ".\u0000\u0000\u0747\u0748\u0005S\u0000\u0000\u0748\u0749\u0005.\u0000"+ + "\u0000\u0749\u074a\u0005I\u0000\u0000\u074a\u074b\u0005N\u0000\u0000\u074b"+ + "\u074d\u0005V\u0000\u0000\u074c\u073a\u0001\u0000\u0000\u0000\u074c\u0742"+ + "\u0001\u0000\u0000\u0000\u074d\u0172\u0001\u0000\u0000\u0000\u074e\u074f"+ + "\u0005B\u0000\u0000\u074f\u0750\u0005E\u0000\u0000\u0750\u0751\u0005T"+ + "\u0000\u0000\u0751\u0752\u0005A\u0000\u0000\u0752\u0753\u0005D\u0000\u0000"+ + "\u0753\u0754\u0005I\u0000\u0000\u0754\u0755\u0005S\u0000\u0000\u0755\u0760"+ + "\u0005T\u0000\u0000\u0756\u0757\u0005B\u0000\u0000\u0757\u0758\u0005E"+ + "\u0000\u0000\u0758\u0759\u0005T\u0000\u0000\u0759\u075a\u0005A\u0000\u0000"+ + "\u075a\u075b\u0005.\u0000\u0000\u075b\u075c\u0005D\u0000\u0000\u075c\u075d"+ + "\u0005I\u0000\u0000\u075d\u075e\u0005S\u0000\u0000\u075e\u0760\u0005T"+ + "\u0000\u0000\u075f\u074e\u0001\u0000\u0000\u0000\u075f\u0756\u0001\u0000"+ + "\u0000\u0000\u0760\u0174\u0001\u0000\u0000\u0000\u0761\u0762\u0005B\u0000"+ + "\u0000\u0762\u0763\u0005E\u0000\u0000\u0763\u0764\u0005T\u0000\u0000\u0764"+ + "\u0765\u0005A\u0000\u0000\u0765\u0766\u0005I\u0000\u0000\u0766\u0767\u0005"+ + "N\u0000\u0000\u0767\u0771\u0005V\u0000\u0000\u0768\u0769\u0005B\u0000"+ + "\u0000\u0769\u076a\u0005E\u0000\u0000\u076a\u076b\u0005T\u0000\u0000\u076b"+ + "\u076c\u0005A\u0000\u0000\u076c\u076d\u0005.\u0000\u0000\u076d\u076e\u0005"+ + "I\u0000\u0000\u076e\u076f\u0005N\u0000\u0000\u076f\u0771\u0005V\u0000"+ + "\u0000\u0770\u0761\u0001\u0000\u0000\u0000\u0770\u0768\u0001\u0000\u0000"+ + "\u0000\u0771\u0176\u0001\u0000\u0000\u0000\u0772\u0773\u0005B\u0000\u0000"+ + "\u0773\u0774\u0005I\u0000\u0000\u0774\u0775\u0005N\u0000\u0000\u0775\u0776"+ + "\u0005O\u0000\u0000\u0776\u0777\u0005M\u0000\u0000\u0777\u0778\u0005D"+ + "\u0000\u0000\u0778\u0779\u0005I\u0000\u0000\u0779\u077a\u0005S\u0000\u0000"+ + "\u077a\u0786\u0005T\u0000\u0000\u077b\u077c\u0005B\u0000\u0000\u077c\u077d"+ + "\u0005I\u0000\u0000\u077d\u077e\u0005N\u0000\u0000\u077e\u077f\u0005O"+ + "\u0000\u0000\u077f\u0780\u0005M\u0000\u0000\u0780\u0781\u0005.\u0000\u0000"+ + "\u0781\u0782\u0005D\u0000\u0000\u0782\u0783\u0005I\u0000\u0000\u0783\u0784"+ + "\u0005S\u0000\u0000\u0784\u0786\u0005T\u0000\u0000\u0785\u0772\u0001\u0000"+ + "\u0000\u0000\u0785\u077b\u0001\u0000\u0000\u0000\u0786\u0178\u0001\u0000"+ + "\u0000\u0000\u0787\u0788\u0005E\u0000\u0000\u0788\u0789\u0005X\u0000\u0000"+ + "\u0789\u078a\u0005P\u0000\u0000\u078a\u078b\u0005O\u0000\u0000\u078b\u078c"+ + "\u0005N\u0000\u0000\u078c\u078d\u0005D\u0000\u0000\u078d\u078e\u0005I"+ + "\u0000\u0000\u078e\u078f\u0005S\u0000\u0000\u078f\u079b\u0005T\u0000\u0000"+ + "\u0790\u0791\u0005E\u0000\u0000\u0791\u0792\u0005X\u0000\u0000\u0792\u0793"+ + "\u0005P\u0000\u0000\u0793\u0794\u0005O\u0000\u0000\u0794\u0795\u0005N"+ + "\u0000\u0000\u0795\u0796\u0005.\u0000\u0000\u0796\u0797\u0005D\u0000\u0000"+ + "\u0797\u0798\u0005I\u0000\u0000\u0798\u0799\u0005S\u0000\u0000\u0799\u079b"+ + "\u0005T\u0000\u0000\u079a\u0787\u0001\u0000\u0000\u0000\u079a\u0790\u0001"+ + "\u0000\u0000\u0000\u079b\u017a\u0001\u0000\u0000\u0000\u079c\u079d\u0005"+ + "F\u0000\u0000\u079d\u079e\u0005D\u0000\u0000\u079e\u079f\u0005I\u0000"+ + "\u0000\u079f\u07a0\u0005S\u0000\u0000\u07a0\u07a8\u0005T\u0000\u0000\u07a1"+ + "\u07a2\u0005F\u0000\u0000\u07a2\u07a3\u0005.\u0000\u0000\u07a3\u07a4\u0005"+ + "D\u0000\u0000\u07a4\u07a5\u0005I\u0000\u0000\u07a5\u07a6\u0005S\u0000"+ + "\u0000\u07a6\u07a8\u0005T\u0000\u0000\u07a7\u079c\u0001\u0000\u0000\u0000"+ + "\u07a7\u07a1\u0001\u0000\u0000\u0000\u07a8\u017c\u0001\u0000\u0000\u0000"+ + "\u07a9\u07aa\u0005F\u0000\u0000\u07aa\u07ab\u0005I\u0000\u0000\u07ab\u07ac"+ + "\u0005N\u0000\u0000\u07ac\u07b3\u0005V\u0000\u0000\u07ad\u07ae\u0005F"+ + "\u0000\u0000\u07ae\u07af\u0005.\u0000\u0000\u07af\u07b0\u0005I\u0000\u0000"+ + "\u07b0\u07b1\u0005N\u0000\u0000\u07b1\u07b3\u0005V\u0000\u0000\u07b2\u07a9"+ + "\u0001\u0000\u0000\u0000\u07b2\u07ad\u0001\u0000\u0000\u0000\u07b3\u017e"+ + "\u0001\u0000\u0000\u0000\u07b4\u07b5\u0005F\u0000\u0000\u07b5\u07b6\u0005"+ + "I\u0000\u0000\u07b6\u07b7\u0005S\u0000\u0000\u07b7\u07b8\u0005H\u0000"+ + "\u0000\u07b8\u07b9\u0005E\u0000\u0000\u07b9\u07ba\u0005R\u0000\u0000\u07ba"+ + "\u0180\u0001\u0000\u0000\u0000\u07bb\u07bc\u0005F\u0000\u0000\u07bc\u07bd"+ + "\u0005I\u0000\u0000\u07bd\u07be\u0005S\u0000\u0000\u07be\u07bf\u0005H"+ + "\u0000\u0000\u07bf\u07c0\u0005E\u0000\u0000\u07c0\u07c1\u0005R\u0000\u0000"+ + "\u07c1\u07c2\u0005I\u0000\u0000\u07c2\u07c3\u0005N\u0000\u0000\u07c3\u07c4"+ + "\u0005V\u0000\u0000\u07c4\u0182\u0001\u0000\u0000\u0000\u07c5\u07c6\u0005"+ + "G\u0000\u0000\u07c6\u07c7\u0005A\u0000\u0000\u07c7\u07c8\u0005M\u0000"+ + "\u0000\u07c8\u07c9\u0005M\u0000\u0000\u07c9\u07ca\u0005A\u0000\u0000\u07ca"+ + "\u07cb\u0005D\u0000\u0000\u07cb\u07cc\u0005I\u0000\u0000\u07cc\u07cd\u0005"+ + "S\u0000\u0000\u07cd\u07d9\u0005T\u0000\u0000\u07ce\u07cf\u0005G\u0000"+ + "\u0000\u07cf\u07d0\u0005A\u0000\u0000\u07d0\u07d1\u0005M\u0000\u0000\u07d1"+ + "\u07d2\u0005M\u0000\u0000\u07d2\u07d3\u0005A\u0000\u0000\u07d3\u07d4\u0005"+ + ".\u0000\u0000\u07d4\u07d5\u0005D\u0000\u0000\u07d5\u07d6\u0005I\u0000"+ + "\u0000\u07d6\u07d7\u0005S\u0000\u0000\u07d7\u07d9\u0005T\u0000\u0000\u07d8"+ + "\u07c5\u0001\u0000\u0000\u0000\u07d8\u07ce\u0001\u0000\u0000\u0000\u07d9"+ + "\u0184\u0001\u0000\u0000\u0000\u07da\u07db\u0005G\u0000\u0000\u07db\u07dc"+ + "\u0005A\u0000\u0000\u07dc\u07dd\u0005M\u0000\u0000\u07dd\u07de\u0005M"+ + "\u0000\u0000\u07de\u07df\u0005A\u0000\u0000\u07df\u07e0\u0005I\u0000\u0000"+ + "\u07e0\u07e1\u0005N\u0000\u0000\u07e1\u07ec\u0005V\u0000\u0000\u07e2\u07e3"+ + "\u0005G\u0000\u0000\u07e3\u07e4\u0005A\u0000\u0000\u07e4\u07e5\u0005M"+ + "\u0000\u0000\u07e5\u07e6\u0005M\u0000\u0000\u07e6\u07e7\u0005A\u0000\u0000"+ + "\u07e7\u07e8\u0005.\u0000\u0000\u07e8\u07e9\u0005I\u0000\u0000\u07e9\u07ea"+ + "\u0005N\u0000\u0000\u07ea\u07ec\u0005V\u0000\u0000\u07eb\u07da\u0001\u0000"+ + "\u0000\u0000\u07eb\u07e2\u0001\u0000\u0000\u0000\u07ec\u0186\u0001\u0000"+ + "\u0000\u0000\u07ed\u07ee\u0005G\u0000\u0000\u07ee\u07ef\u0005A\u0000\u0000"+ + "\u07ef\u07f0\u0005M\u0000\u0000\u07f0\u07f1\u0005M\u0000\u0000\u07f1\u07f2"+ + "\u0005A\u0000\u0000\u07f2\u07f3\u0005L\u0000\u0000\u07f3\u0804\u0005N"+ + "\u0000\u0000\u07f4\u07f5\u0005G\u0000\u0000\u07f5\u07f6\u0005A\u0000\u0000"+ + "\u07f6\u07f7\u0005M\u0000\u0000\u07f7\u07f8\u0005M\u0000\u0000\u07f8\u07f9"+ + "\u0005A\u0000\u0000\u07f9\u07fa\u0005L\u0000\u0000\u07fa\u07fb\u0005N"+ + "\u0000\u0000\u07fb\u07fc\u0005.\u0000\u0000\u07fc\u07fd\u0005P\u0000\u0000"+ + "\u07fd\u07fe\u0005R\u0000\u0000\u07fe\u07ff\u0005E\u0000\u0000\u07ff\u0800"+ + "\u0005C\u0000\u0000\u0800\u0801\u0005I\u0000\u0000\u0801\u0802\u0005S"+ + "\u0000\u0000\u0802\u0804\u0005E\u0000\u0000\u0803\u07ed\u0001\u0000\u0000"+ + "\u0000\u0803\u07f4\u0001\u0000\u0000\u0000\u0804\u0188\u0001\u0000\u0000"+ + "\u0000\u0805\u0806\u0005H\u0000\u0000\u0806\u0807\u0005Y\u0000\u0000\u0807"+ + "\u0808\u0005P\u0000\u0000\u0808\u0809\u0005G\u0000\u0000\u0809\u080a\u0005"+ + "E\u0000\u0000\u080a\u080b\u0005O\u0000\u0000\u080b\u080c\u0005M\u0000"+ + "\u0000\u080c\u080d\u0005D\u0000\u0000\u080d\u080e\u0005I\u0000\u0000\u080e"+ + "\u080f\u0005S\u0000\u0000\u080f\u081d\u0005T\u0000\u0000\u0810\u0811\u0005"+ + "H\u0000\u0000\u0811\u0812\u0005Y\u0000\u0000\u0812\u0813\u0005P\u0000"+ + "\u0000\u0813\u0814\u0005G\u0000\u0000\u0814\u0815\u0005E\u0000\u0000\u0815"+ + "\u0816\u0005O\u0000\u0000\u0816\u0817\u0005M\u0000\u0000\u0817\u0818\u0005"+ + ".\u0000\u0000\u0818\u0819\u0005D\u0000\u0000\u0819\u081a\u0005I\u0000"+ + "\u0000\u081a\u081b\u0005S\u0000\u0000\u081b\u081d\u0005T\u0000\u0000\u081c"+ + "\u0805\u0001\u0000\u0000\u0000\u081c\u0810\u0001\u0000\u0000\u0000\u081d"+ + "\u018a\u0001\u0000\u0000\u0000\u081e\u081f\u0005L\u0000\u0000\u081f\u0820"+ + "\u0005O\u0000\u0000\u0820\u0821\u0005G\u0000\u0000\u0821\u0822\u0005I"+ + "\u0000\u0000\u0822\u0823\u0005N\u0000\u0000\u0823\u0830\u0005V\u0000\u0000"+ + "\u0824\u0825\u0005L\u0000\u0000\u0825\u0826\u0005O\u0000\u0000\u0826\u0827"+ + "\u0005G\u0000\u0000\u0827\u0828\u0005N\u0000\u0000\u0828\u0829\u0005O"+ + "\u0000\u0000\u0829\u082a\u0005R\u0000\u0000\u082a\u082b\u0005M\u0000\u0000"+ + "\u082b\u082c\u0005.\u0000\u0000\u082c\u082d\u0005I\u0000\u0000\u082d\u082e"+ + "\u0005N\u0000\u0000\u082e\u0830\u0005V\u0000\u0000\u082f\u081e\u0001\u0000"+ + "\u0000\u0000\u082f\u0824\u0001\u0000\u0000\u0000\u0830\u018c\u0001\u0000"+ + "\u0000\u0000\u0831\u0832\u0005L\u0000\u0000\u0832\u0833\u0005O\u0000\u0000"+ + "\u0833\u0834\u0005G\u0000\u0000\u0834\u0835\u0005N\u0000\u0000\u0835\u0836"+ + "\u0005O\u0000\u0000\u0836\u0837\u0005R\u0000\u0000\u0837\u0838\u0005M"+ + "\u0000\u0000\u0838\u0839\u0005D\u0000\u0000\u0839\u083a\u0005I\u0000\u0000"+ + "\u083a\u083b\u0005S\u0000\u0000\u083b\u0849\u0005T\u0000\u0000\u083c\u083d"+ + "\u0005L\u0000\u0000\u083d\u083e\u0005O\u0000\u0000\u083e\u083f\u0005G"+ + "\u0000\u0000\u083f\u0840\u0005N\u0000\u0000\u0840\u0841\u0005O\u0000\u0000"+ + "\u0841\u0842\u0005R\u0000\u0000\u0842\u0843\u0005M\u0000\u0000\u0843\u0844"+ + "\u0005.\u0000\u0000\u0844\u0845\u0005D\u0000\u0000\u0845\u0846\u0005I"+ + "\u0000\u0000\u0846\u0847\u0005S\u0000\u0000\u0847\u0849\u0005T\u0000\u0000"+ + "\u0848\u0831\u0001\u0000\u0000\u0000\u0848\u083c\u0001\u0000\u0000\u0000"+ + "\u0849\u018e\u0001\u0000\u0000\u0000\u084a\u084b\u0005N\u0000\u0000\u084b"+ + "\u084c\u0005E\u0000\u0000\u084c\u084d\u0005G\u0000\u0000\u084d\u084e\u0005"+ + "B\u0000\u0000\u084e\u084f\u0005I\u0000\u0000\u084f\u0850\u0005N\u0000"+ + "\u0000\u0850\u0851\u0005O\u0000\u0000\u0851\u0852\u0005M\u0000\u0000\u0852"+ + "\u0853\u0005D\u0000\u0000\u0853\u0854\u0005I\u0000\u0000\u0854\u0855\u0005"+ + "S\u0000\u0000\u0855\u0864\u0005T\u0000\u0000\u0856\u0857\u0005N\u0000"+ + "\u0000\u0857\u0858\u0005E\u0000\u0000\u0858\u0859\u0005G\u0000\u0000\u0859"+ + "\u085a\u0005B\u0000\u0000\u085a\u085b\u0005I\u0000\u0000\u085b\u085c\u0005"+ + "N\u0000\u0000\u085c\u085d\u0005O\u0000\u0000\u085d\u085e\u0005M\u0000"+ + "\u0000\u085e\u085f\u0005.\u0000\u0000\u085f\u0860\u0005D\u0000\u0000\u0860"+ + "\u0861\u0005I\u0000\u0000\u0861\u0862\u0005S\u0000\u0000\u0862\u0864\u0005"+ + "T\u0000\u0000\u0863\u084a\u0001\u0000\u0000\u0000\u0863\u0856\u0001\u0000"+ + "\u0000\u0000\u0864\u0190\u0001\u0000\u0000\u0000\u0865\u0866\u0005P\u0000"+ + "\u0000\u0866\u0867\u0005O\u0000\u0000\u0867\u0868\u0005I\u0000\u0000\u0868"+ + "\u0869\u0005S\u0000\u0000\u0869\u086a\u0005S\u0000\u0000\u086a\u086b\u0005"+ + "O\u0000\u0000\u086b\u0879\u0005N\u0000\u0000\u086c\u086d\u0005P\u0000"+ + "\u0000\u086d\u086e\u0005O\u0000\u0000\u086e\u086f\u0005I\u0000\u0000\u086f"+ + "\u0870\u0005S\u0000\u0000\u0870\u0871\u0005S\u0000\u0000\u0871\u0872\u0005"+ + "O\u0000\u0000\u0872\u0873\u0005N\u0000\u0000\u0873\u0874\u0005.\u0000"+ + "\u0000\u0874\u0875\u0005D\u0000\u0000\u0875\u0876\u0005I\u0000\u0000\u0876"+ + "\u0877\u0005S\u0000\u0000\u0877\u0879\u0005T\u0000\u0000\u0878\u0865\u0001"+ + "\u0000\u0000\u0000\u0878\u086c\u0001\u0000\u0000\u0000\u0879\u0192\u0001"+ + "\u0000\u0000\u0000\u087a\u087b\u0005T\u0000\u0000\u087b\u087c\u0005D\u0000"+ + "\u0000\u087c\u087d\u0005I\u0000\u0000\u087d\u087e\u0005S\u0000\u0000\u087e"+ + "\u0886\u0005T\u0000\u0000\u087f\u0880\u0005T\u0000\u0000\u0880\u0881\u0005"+ + ".\u0000\u0000\u0881\u0882\u0005D\u0000\u0000\u0882\u0883\u0005I\u0000"+ + "\u0000\u0883\u0884\u0005S\u0000\u0000\u0884\u0886\u0005T\u0000\u0000\u0885"+ + "\u087a\u0001\u0000\u0000\u0000\u0885\u087f\u0001\u0000\u0000\u0000\u0886"+ + "\u0194\u0001\u0000\u0000\u0000\u0887\u0888\u0005T\u0000\u0000\u0888\u0889"+ + "\u0005I\u0000\u0000\u0889\u088a\u0005N\u0000\u0000\u088a\u0891\u0005V"+ + "\u0000\u0000\u088b\u088c\u0005T\u0000\u0000\u088c\u088d\u0005.\u0000\u0000"+ + "\u088d\u088e\u0005I\u0000\u0000\u088e\u088f\u0005N\u0000\u0000\u088f\u0891"+ + "\u0005V\u0000\u0000\u0890\u0887\u0001\u0000\u0000\u0000\u0890\u088b\u0001"+ + "\u0000\u0000\u0000\u0891\u0196\u0001\u0000\u0000\u0000\u0892\u0893\u0005"+ + "W\u0000\u0000\u0893\u0894\u0005E\u0000\u0000\u0894\u0895\u0005I\u0000"+ + "\u0000\u0895\u0896\u0005B\u0000\u0000\u0896\u0897\u0005U\u0000\u0000\u0897"+ + "\u0898\u0005L\u0000\u0000\u0898\u0899\u0005L\u0000\u0000\u0899\u0198\u0001"+ + "\u0000\u0000\u0000\u089a\u089b\u0005U\u0000\u0000\u089b\u089c\u0005R\u0000"+ + "\u0000\u089c\u089d\u0005L\u0000\u0000\u089d\u089e\u0005E\u0000\u0000\u089e"+ + "\u089f\u0005N\u0000\u0000\u089f\u08a0\u0005C\u0000\u0000\u08a0\u08a1\u0005"+ + "O\u0000\u0000\u08a1\u08a2\u0005D\u0000\u0000\u08a2\u08a3\u0005E\u0000"+ + "\u0000\u08a3\u019a\u0001\u0000\u0000\u0000\u08a4\u08a5\u0005U\u0000\u0000"+ + "\u08a5\u08a6\u0005R\u0000\u0000\u08a6\u08a7\u0005L\u0000\u0000\u08a7\u08a8"+ + "\u0005D\u0000\u0000\u08a8\u08a9\u0005E\u0000\u0000\u08a9\u08aa\u0005C"+ + "\u0000\u0000\u08aa\u08ab\u0005O\u0000\u0000\u08ab\u08ac\u0005D\u0000\u0000"+ + "\u08ac\u08ad\u0005E\u0000\u0000\u08ad\u019c\u0001\u0000\u0000\u0000\u08ae"+ + "\u08af\u0005H\u0000\u0000\u08af\u08b0\u0005T\u0000\u0000\u08b0\u08b1\u0005"+ + "M\u0000\u0000\u08b1\u08b2\u0005L\u0000\u0000\u08b2\u08b3\u0005E\u0000"+ + "\u0000\u08b3\u08b4\u0005N\u0000\u0000\u08b4\u08b5\u0005C\u0000\u0000\u08b5"+ + "\u08b6\u0005O\u0000\u0000\u08b6\u08b7\u0005D\u0000\u0000\u08b7\u08b8\u0005"+ + "E\u0000\u0000\u08b8\u019e\u0001\u0000\u0000\u0000\u08b9\u08ba\u0005H\u0000"+ + "\u0000\u08ba\u08bb\u0005T\u0000\u0000\u08bb\u08bc\u0005M\u0000\u0000\u08bc"+ + "\u08bd\u0005L\u0000\u0000\u08bd\u08be\u0005D\u0000\u0000\u08be\u08bf\u0005"+ + "E\u0000\u0000\u08bf\u08c0\u0005C\u0000\u0000\u08c0\u08c1\u0005O\u0000"+ + "\u0000\u08c1\u08c2\u0005D\u0000\u0000\u08c2\u08c3\u0005E\u0000\u0000\u08c3"+ + "\u01a0\u0001\u0000\u0000\u0000\u08c4\u08c5\u0005B\u0000\u0000\u08c5\u08c6"+ + "\u0005A\u0000\u0000\u08c6\u08c7\u0005S\u0000\u0000\u08c7\u08c8\u0005E"+ + "\u0000\u0000\u08c8\u08c9\u00056\u0000\u0000\u08c9\u08ca\u00054\u0000\u0000"+ + "\u08ca\u08cb\u0005T\u0000\u0000\u08cb\u08cc\u0005O\u0000\u0000\u08cc\u08cd"+ + "\u0005T\u0000\u0000\u08cd\u08ce\u0005E\u0000\u0000\u08ce\u08cf\u0005X"+ + "\u0000\u0000\u08cf\u08d0\u0005T\u0000\u0000\u08d0\u01a2\u0001\u0000\u0000"+ + "\u0000\u08d1\u08d2\u0005B\u0000\u0000\u08d2\u08d3\u0005A\u0000\u0000\u08d3"+ + "\u08d4\u0005S\u0000\u0000\u08d4\u08d5\u0005E\u0000\u0000\u08d5\u08d6\u0005"+ + "6\u0000\u0000\u08d6\u08d7\u00054\u0000\u0000\u08d7\u08d8\u0005U\u0000"+ + "\u0000\u08d8\u08d9\u0005R\u0000\u0000\u08d9\u08da\u0005L\u0000\u0000\u08da"+ + "\u08db\u0005T\u0000\u0000\u08db\u08dc\u0005O\u0000\u0000\u08dc\u08dd\u0005"+ + "T\u0000\u0000\u08dd\u08de\u0005E\u0000\u0000\u08de\u08df\u0005X\u0000"+ + "\u0000\u08df\u08e0\u0005T\u0000\u0000\u08e0\u01a4\u0001\u0000\u0000\u0000"+ + "\u08e1\u08e2\u0005T\u0000\u0000\u08e2\u08e3\u0005E\u0000\u0000\u08e3\u08e4"+ + "\u0005X\u0000\u0000\u08e4\u08e5\u0005T\u0000\u0000\u08e5\u08e6\u0005T"+ + "\u0000\u0000\u08e6\u08e7\u0005O\u0000\u0000\u08e7\u08e8\u0005B\u0000\u0000"+ + "\u08e8\u08e9\u0005A\u0000\u0000\u08e9\u08ea\u0005S\u0000\u0000\u08ea\u08eb"+ + "\u0005E\u0000\u0000\u08eb\u08ec\u00056\u0000\u0000\u08ec\u08ed\u00054"+ + "\u0000\u0000\u08ed\u01a6\u0001\u0000\u0000\u0000\u08ee\u08ef\u0005T\u0000"+ + "\u0000\u08ef\u08f0\u0005E\u0000\u0000\u08f0\u08f1\u0005X\u0000\u0000\u08f1"+ + "\u08f2\u0005T\u0000\u0000\u08f2\u08f3\u0005T\u0000\u0000\u08f3\u08f4\u0005"+ + "O\u0000\u0000\u08f4\u08f5\u0005B\u0000\u0000\u08f5\u08f6\u0005A\u0000"+ + "\u0000\u08f6\u08f7\u0005S\u0000\u0000\u08f7\u08f8\u0005E\u0000\u0000\u08f8"+ + "\u08f9\u00056\u0000\u0000\u08f9\u08fa\u00054\u0000\u0000\u08fa\u08fb\u0005"+ + "U\u0000\u0000\u08fb\u08fc\u0005R\u0000\u0000\u08fc\u08fd\u0005L\u0000"+ + "\u0000\u08fd\u01a8\u0001\u0000\u0000\u0000\u08fe\u08ff\u0005R\u0000\u0000"+ + "\u08ff\u0900\u0005E\u0000\u0000\u0900\u0901\u0005G\u0000\u0000\u0901\u0902"+ + "\u0005E\u0000\u0000\u0902\u0903\u0005X\u0000\u0000\u0903\u01aa\u0001\u0000"+ + "\u0000\u0000\u0904\u0905\u0005R\u0000\u0000\u0905\u0906\u0005E\u0000\u0000"+ + "\u0906\u0907\u0005G\u0000\u0000\u0907\u0908\u0005E\u0000\u0000\u0908\u0909"+ + "\u0005X\u0000\u0000\u0909\u090a\u0005R\u0000\u0000\u090a\u090b\u0005E"+ + "\u0000\u0000\u090b\u090c\u0005P\u0000\u0000\u090c\u090d\u0005A\u0000\u0000"+ + "\u090d\u090e\u0005L\u0000\u0000\u090e\u090f\u0005C\u0000\u0000\u090f\u0910"+ + "\u0005E\u0000\u0000\u0910\u01ac\u0001\u0000\u0000\u0000\u0911\u0912\u0005"+ + "I\u0000\u0000\u0912\u0913\u0005S\u0000\u0000\u0913\u0914\u0005R\u0000"+ + "\u0000\u0914\u0915\u0005E\u0000\u0000\u0915\u0916\u0005G\u0000\u0000\u0916"+ + "\u0917\u0005E\u0000\u0000\u0917\u0920\u0005X\u0000\u0000\u0918\u0919\u0005"+ + "I\u0000\u0000\u0919\u091a\u0005S\u0000\u0000\u091a\u091b\u0005M\u0000"+ + "\u0000\u091b\u091c\u0005A\u0000\u0000\u091c\u091d\u0005T\u0000\u0000\u091d"+ + "\u091e\u0005C\u0000\u0000\u091e\u0920\u0005H\u0000\u0000\u091f\u0911\u0001"+ + "\u0000\u0000\u0000\u091f\u0918\u0001\u0000\u0000\u0000\u0920\u01ae\u0001"+ + "\u0000\u0000\u0000\u0921\u0922\u0005G\u0000\u0000\u0922\u0923\u0005U\u0000"+ + "\u0000\u0923\u0924\u0005I\u0000\u0000\u0924\u0925\u0005D\u0000\u0000\u0925"+ + "\u01b0\u0001\u0000\u0000\u0000\u0926\u0927\u0005M\u0000\u0000\u0927\u0928"+ + "\u0005D\u0000\u0000\u0928\u0929\u00055\u0000\u0000\u0929\u01b2\u0001\u0000"+ + "\u0000\u0000\u092a\u092b\u0005S\u0000\u0000\u092b\u092c\u0005H\u0000\u0000"+ + "\u092c\u092d\u0005A\u0000\u0000\u092d\u092e\u00051\u0000\u0000\u092e\u01b4"+ + "\u0001\u0000\u0000\u0000\u092f\u0930\u0005S\u0000\u0000\u0930\u0931\u0005"+ + "H\u0000\u0000\u0931\u0932\u0005A\u0000\u0000\u0932\u0933\u00052\u0000"+ + "\u0000\u0933\u0934\u00055\u0000\u0000\u0934\u0935\u00056\u0000\u0000\u0935"+ + "\u01b6\u0001\u0000\u0000\u0000\u0936\u0937\u0005S\u0000\u0000\u0937\u0938"+ + "\u0005H\u0000\u0000\u0938\u0939\u0005A\u0000\u0000\u0939\u093a\u00055"+ + "\u0000\u0000\u093a\u093b\u00051\u0000\u0000\u093b\u093c\u00052\u0000\u0000"+ + "\u093c\u01b8\u0001\u0000\u0000\u0000\u093d\u093e\u0005H\u0000\u0000\u093e"+ + "\u093f\u0005M\u0000\u0000\u093f\u0940\u0005A\u0000\u0000\u0940\u0941\u0005"+ + "C\u0000\u0000\u0941\u0942\u0005M\u0000\u0000\u0942\u0943\u0005D\u0000"+ + "\u0000\u0943\u0944\u00055\u0000\u0000\u0944\u01ba\u0001\u0000\u0000\u0000"+ + "\u0945\u0946\u0005H\u0000\u0000\u0946\u0947\u0005M\u0000\u0000\u0947\u0948"+ + "\u0005A\u0000\u0000\u0948\u0949\u0005C\u0000\u0000\u0949\u094a\u0005S"+ + "\u0000\u0000\u094a\u094b\u0005H\u0000\u0000\u094b\u094c\u0005A\u0000\u0000"+ + "\u094c\u094d\u00051\u0000\u0000\u094d\u01bc\u0001\u0000\u0000\u0000\u094e"+ + "\u094f\u0005H\u0000\u0000\u094f\u0950\u0005M\u0000\u0000\u0950\u0951\u0005"+ + "A\u0000\u0000\u0951\u0952\u0005C\u0000\u0000\u0952\u0953\u0005S\u0000"+ + "\u0000\u0953\u0954\u0005H\u0000\u0000\u0954\u0955\u0005A\u0000\u0000\u0955"+ + "\u0956\u00052\u0000\u0000\u0956\u0957\u00055\u0000\u0000\u0957\u0958\u0005"+ + "6\u0000\u0000\u0958\u01be\u0001\u0000\u0000\u0000\u0959\u095a\u0005H\u0000"+ + "\u0000\u095a\u095b\u0005M\u0000\u0000\u095b\u095c\u0005A\u0000\u0000\u095c"+ + "\u095d\u0005C\u0000\u0000\u095d\u095e\u0005S\u0000\u0000\u095e\u095f\u0005"+ + "H\u0000\u0000\u095f\u0960\u0005A\u0000\u0000\u0960\u0961\u00055\u0000"+ + "\u0000\u0961\u0962\u00051\u0000\u0000\u0962\u0963\u00052\u0000\u0000\u0963"+ + "\u01c0\u0001\u0000\u0000\u0000\u0964\u0965\u0005T\u0000\u0000\u0965\u0966"+ + "\u0005R\u0000\u0000\u0966\u0967\u0005I\u0000\u0000\u0967\u0968\u0005M"+ + "\u0000\u0000\u0968\u0969\u0005S\u0000\u0000\u0969\u096a\u0005T\u0000\u0000"+ + "\u096a\u096b\u0005A\u0000\u0000\u096b\u096c\u0005R\u0000\u0000\u096c\u0973"+ + "\u0005T\u0000\u0000\u096d\u096e\u0005L\u0000\u0000\u096e\u096f\u0005T"+ + "\u0000\u0000\u096f\u0970\u0005R\u0000\u0000\u0970\u0971\u0005I\u0000\u0000"+ + "\u0971\u0973\u0005M\u0000\u0000\u0972\u0964\u0001\u0000\u0000\u0000\u0972"+ + "\u096d\u0001\u0000\u0000\u0000\u0973\u01c2\u0001\u0000\u0000\u0000\u0974"+ + "\u0975\u0005T\u0000\u0000\u0975\u0976\u0005R\u0000\u0000\u0976\u0977\u0005"+ + "I\u0000\u0000\u0977\u0978\u0005M\u0000\u0000\u0978\u0979\u0005E\u0000"+ + "\u0000\u0979\u097a\u0005N\u0000\u0000\u097a\u0981\u0005D\u0000\u0000\u097b"+ + "\u097c\u0005R\u0000\u0000\u097c\u097d\u0005T\u0000\u0000\u097d\u097e\u0005"+ + "R\u0000\u0000\u097e\u097f\u0005I\u0000\u0000\u097f\u0981\u0005M\u0000"+ + "\u0000\u0980\u0974\u0001\u0000\u0000\u0000\u0980\u097b\u0001\u0000\u0000"+ + "\u0000\u0981\u01c4\u0001\u0000\u0000\u0000\u0982\u0983\u0005I\u0000\u0000"+ + "\u0983\u0984\u0005N\u0000\u0000\u0984\u0985\u0005D\u0000\u0000\u0985\u0986"+ + "\u0005E\u0000\u0000\u0986\u0987\u0005X\u0000\u0000\u0987\u0988\u0005O"+ + "\u0000\u0000\u0988\u0989\u0005F\u0000\u0000\u0989\u01c6\u0001\u0000\u0000"+ + "\u0000\u098a\u098b\u0005L\u0000\u0000\u098b\u098c\u0005A\u0000\u0000\u098c"+ + "\u098d\u0005S\u0000\u0000\u098d\u098e\u0005T\u0000\u0000\u098e\u098f\u0005"+ + "I\u0000\u0000\u098f\u0990\u0005N\u0000\u0000\u0990\u0991\u0005D\u0000"+ + "\u0000\u0991\u0992\u0005E\u0000\u0000\u0992\u0993\u0005X\u0000\u0000\u0993"+ + "\u0994\u0005O\u0000\u0000\u0994\u0995\u0005F\u0000\u0000\u0995\u01c8\u0001"+ + "\u0000\u0000\u0000\u0996\u0997\u0005S\u0000\u0000\u0997\u0998\u0005P\u0000"+ + "\u0000\u0998\u0999\u0005L\u0000\u0000\u0999\u099a\u0005I\u0000\u0000\u099a"+ + "\u099b\u0005T\u0000\u0000\u099b\u01ca\u0001\u0000\u0000\u0000\u099c\u099d"+ + "\u0005J\u0000\u0000\u099d\u099e\u0005O\u0000\u0000\u099e\u099f\u0005I"+ + "\u0000\u0000\u099f\u09a0\u0005N\u0000\u0000\u09a0\u01cc\u0001\u0000\u0000"+ + "\u0000\u09a1\u09a2\u0005S\u0000\u0000\u09a2\u09a3\u0005U\u0000\u0000\u09a3"+ + "\u09a4\u0005B\u0000\u0000\u09a4\u09a5\u0005S\u0000\u0000\u09a5\u09a6\u0005"+ + "T\u0000\u0000\u09a6\u09a7\u0005R\u0000\u0000\u09a7\u09a8\u0005I\u0000"+ + "\u0000\u09a8\u09a9\u0005N\u0000\u0000\u09a9\u09aa\u0005G\u0000\u0000\u09aa"+ + "\u01ce\u0001\u0000\u0000\u0000\u09ab\u09ac\u0005S\u0000\u0000\u09ac\u09ad"+ + "\u0005T\u0000\u0000\u09ad\u09ae\u0005A\u0000\u0000\u09ae\u09af\u0005R"+ + "\u0000\u0000\u09af\u09b0\u0005T\u0000\u0000\u09b0\u09b1\u0005S\u0000\u0000"+ + "\u09b1\u09b2\u0005W\u0000\u0000\u09b2\u09b3\u0005I\u0000\u0000\u09b3\u09b4"+ + "\u0005T\u0000\u0000\u09b4\u09b5\u0005H\u0000\u0000\u09b5\u01d0\u0001\u0000"+ + "\u0000\u0000\u09b6\u09b7\u0005E\u0000\u0000\u09b7\u09b8\u0005N\u0000\u0000"+ + "\u09b8\u09b9\u0005D\u0000\u0000\u09b9\u09ba\u0005S\u0000\u0000\u09ba\u09bb"+ + "\u0005W\u0000\u0000\u09bb\u09bc\u0005I\u0000\u0000\u09bc\u09bd\u0005T"+ + "\u0000\u0000\u09bd\u09be\u0005H\u0000\u0000\u09be\u01d2\u0001\u0000\u0000"+ + "\u0000\u09bf\u09c0\u0005I\u0000\u0000\u09c0\u09c1\u0005S\u0000\u0000\u09c1"+ + "\u09c2\u0005N\u0000\u0000\u09c2\u09c3\u0005U\u0000\u0000\u09c3\u09c4\u0005"+ + "L\u0000\u0000\u09c4\u09c5\u0005L\u0000\u0000\u09c5\u09c6\u0005O\u0000"+ + "\u0000\u09c6\u09c7\u0005R\u0000\u0000\u09c7\u09c8\u0005E\u0000\u0000\u09c8"+ + "\u09c9\u0005M\u0000\u0000\u09c9\u09ca\u0005P\u0000\u0000\u09ca\u09cb\u0005"+ + "T\u0000\u0000\u09cb\u09cc\u0005Y\u0000\u0000\u09cc\u01d4\u0001\u0000\u0000"+ + "\u0000\u09cd\u09ce\u0005I\u0000\u0000\u09ce\u09cf\u0005S\u0000\u0000\u09cf"+ + "\u09d0\u0005N\u0000\u0000\u09d0\u09d1\u0005U\u0000\u0000\u09d1\u09d2\u0005"+ + "L\u0000\u0000\u09d2\u09d3\u0005L\u0000\u0000\u09d3\u09d4\u0005O\u0000"+ + "\u0000\u09d4\u09d5\u0005R\u0000"; private static final String _serializedATNSegment1 = - "\u0000\u09cc\u09cd\u0005P\u0000\u0000\u09cd\u09ce\u0005T\u0000\u0000\u09ce"+ - "\u09cf\u0005Y\u0000\u0000\u09cf\u01d6\u0001\u0000\u0000\u0000\u09d0\u09d1"+ - "\u0005I\u0000\u0000\u09d1\u09d2\u0005S\u0000\u0000\u09d2\u09d3\u0005N"+ - "\u0000\u0000\u09d3\u09d4\u0005U\u0000\u0000\u09d4\u09d5\u0005L\u0000\u0000"+ - "\u09d5\u09d6\u0005L\u0000\u0000\u09d6\u09d7\u0005O\u0000\u0000\u09d7\u09d8"+ - "\u0005R\u0000\u0000\u09d8\u09d9\u0005W\u0000\u0000\u09d9\u09da\u0005H"+ - "\u0000\u0000\u09da\u09db\u0005I\u0000\u0000\u09db\u09dc\u0005T\u0000\u0000"+ - "\u09dc\u09dd\u0005E\u0000\u0000\u09dd\u09de\u0005S\u0000\u0000\u09de\u09df"+ - "\u0005P\u0000\u0000\u09df\u09e0\u0005A\u0000\u0000\u09e0\u09e1\u0005C"+ - "\u0000\u0000\u09e1\u09e2\u0005E\u0000\u0000\u09e2\u01d8\u0001\u0000\u0000"+ - "\u0000\u09e3\u09e4\u0005R\u0000\u0000\u09e4\u09e5\u0005E\u0000\u0000\u09e5"+ - "\u09e6\u0005M\u0000\u0000\u09e6\u09e7\u0005O\u0000\u0000\u09e7\u09e8\u0005"+ - "V\u0000\u0000\u09e8\u09e9\u0005E\u0000\u0000\u09e9\u09ea\u0005S\u0000"+ - "\u0000\u09ea\u09eb\u0005T\u0000\u0000\u09eb\u09ec\u0005A\u0000\u0000\u09ec"+ - "\u09ed\u0005R\u0000\u0000\u09ed\u09ee\u0005T\u0000\u0000\u09ee\u01da\u0001"+ - "\u0000\u0000\u0000\u09ef\u09f0\u0005R\u0000\u0000\u09f0\u09f1\u0005E\u0000"+ - "\u0000\u09f1\u09f2\u0005M\u0000\u0000\u09f2\u09f3\u0005O\u0000\u0000\u09f3"+ - "\u09f4\u0005V\u0000\u0000\u09f4\u09f5\u0005E\u0000\u0000\u09f5\u09f6\u0005"+ - "E\u0000\u0000\u09f6\u09f7\u0005N\u0000\u0000\u09f7\u09f8\u0005D\u0000"+ - "\u0000\u09f8\u01dc\u0001\u0000\u0000\u0000\u09f9\u09fa\u0005J\u0000\u0000"+ - "\u09fa\u09fb\u0005S\u0000\u0000\u09fb\u09fc\u0005O\u0000\u0000\u09fc\u09fd"+ - "\u0005N\u0000\u0000\u09fd\u01de\u0001\u0000\u0000\u0000\u09fe\u09ff\u0005"+ - "V\u0000\u0000\u09ff\u0a00\u0005L\u0000\u0000\u0a00\u0a01\u0005O\u0000"+ - "\u0000\u0a01\u0a02\u0005O\u0000\u0000\u0a02\u0a03\u0005K\u0000\u0000\u0a03"+ - "\u0a04\u0005U\u0000\u0000\u0a04\u0a05\u0005P\u0000\u0000\u0a05\u01e0\u0001"+ - "\u0000\u0000\u0000\u0a06\u0a07\u0005L\u0000\u0000\u0a07\u0a08\u0005O\u0000"+ - "\u0000\u0a08\u0a09\u0005O\u0000\u0000\u0a09\u0a0a\u0005K\u0000\u0000\u0a0a"+ - "\u0a0b\u0005U\u0000\u0000\u0a0b\u0a0c\u0005P\u0000\u0000\u0a0c\u01e2\u0001"+ - "\u0000\u0000\u0000\u0a0d\u0a0e\u0005A\u0000\u0000\u0a0e\u0a0f\u0005R\u0000"+ - "\u0000\u0a0f\u0a10\u0005R\u0000\u0000\u0a10\u0a11\u0005A\u0000\u0000\u0a11"+ - "\u0a12\u0005Y\u0000\u0000\u0a12\u01e4\u0001\u0000\u0000\u0000\u0a13\u0a14"+ - "\u0005A\u0000\u0000\u0a14\u0a15\u0005L\u0000\u0000\u0a15\u0a16\u0005G"+ - "\u0000\u0000\u0a16\u0a17\u0005O\u0000\u0000\u0a17\u0a18\u0005R\u0000\u0000"+ - "\u0a18\u0a19\u0005I\u0000\u0000\u0a19\u0a1a\u0005T\u0000\u0000\u0a1a\u0a1b"+ - "\u0005H\u0000\u0000\u0a1b\u0a1c\u0005M\u0000\u0000\u0a1c\u0a1d\u0005V"+ - "\u0000\u0000\u0a1d\u0a1e\u0005E\u0000\u0000\u0a1e\u0a1f\u0005R\u0000\u0000"+ - "\u0a1f\u0a20\u0005S\u0000\u0000\u0a20\u0a21\u0005I\u0000\u0000\u0a21\u0a22"+ - "\u0005O\u0000\u0000\u0a22\u0a31\u0005N\u0000\u0000\u0a23\u0a24\u0005E"+ - "\u0000\u0000\u0a24\u0a25\u0005N\u0000\u0000\u0a25\u0a26\u0005G\u0000\u0000"+ - "\u0a26\u0a27\u0005I\u0000\u0000\u0a27\u0a28\u0005N\u0000\u0000\u0a28\u0a29"+ - "\u0005E\u0000\u0000\u0a29\u0a2a\u0005V\u0000\u0000\u0a2a\u0a2b\u0005E"+ - "\u0000\u0000\u0a2b\u0a2c\u0005R\u0000\u0000\u0a2c\u0a2d\u0005S\u0000\u0000"+ - "\u0a2d\u0a2e\u0005I\u0000\u0000\u0a2e\u0a2f\u0005O\u0000\u0000\u0a2f\u0a31"+ - "\u0005N\u0000\u0000\u0a30\u0a13\u0001\u0000\u0000\u0000\u0a30\u0a23\u0001"+ - "\u0000\u0000\u0000\u0a31\u01e6\u0001\u0000\u0000\u0000\u0a32\u0a33\u0005"+ - "A\u0000\u0000\u0a33\u0a34\u0005D\u0000\u0000\u0a34\u0a35\u0005D\u0000"+ - "\u0000\u0a35\u0a36\u0005Y\u0000\u0000\u0a36\u0a37\u0005E\u0000\u0000\u0a37"+ - "\u0a38\u0005A\u0000\u0000\u0a38\u0a39\u0005R\u0000\u0000\u0a39\u0a3a\u0005"+ - "S\u0000\u0000\u0a3a\u01e8\u0001\u0000\u0000\u0000\u0a3b\u0a3c\u0005A\u0000"+ - "\u0000\u0a3c\u0a3d\u0005D\u0000\u0000\u0a3d\u0a3e\u0005D\u0000\u0000\u0a3e"+ - "\u0a3f\u0005M\u0000\u0000\u0a3f\u0a40\u0005O\u0000\u0000\u0a40\u0a41\u0005"+ - "N\u0000\u0000\u0a41\u0a42\u0005T\u0000\u0000\u0a42\u0a43\u0005H\u0000"+ - "\u0000\u0a43\u0a44\u0005S\u0000\u0000\u0a44\u01ea\u0001\u0000\u0000\u0000"+ - "\u0a45\u0a46\u0005A\u0000\u0000\u0a46\u0a47\u0005D\u0000\u0000\u0a47\u0a48"+ - "\u0005D\u0000\u0000\u0a48\u0a49\u0005D\u0000\u0000\u0a49\u0a4a\u0005A"+ - "\u0000\u0000\u0a4a\u0a4b\u0005Y\u0000\u0000\u0a4b\u0a4c\u0005S\u0000\u0000"+ - "\u0a4c\u01ec\u0001\u0000\u0000\u0000\u0a4d\u0a4e\u0005A\u0000\u0000\u0a4e"+ - "\u0a4f\u0005D\u0000\u0000\u0a4f\u0a50\u0005D\u0000\u0000\u0a50\u0a51\u0005"+ - "H\u0000\u0000\u0a51\u0a52\u0005O\u0000\u0000\u0a52\u0a53\u0005U\u0000"+ - "\u0000\u0a53\u0a54\u0005R\u0000\u0000\u0a54\u0a55\u0005S\u0000\u0000\u0a55"+ - "\u01ee\u0001\u0000\u0000\u0000\u0a56\u0a57\u0005A\u0000\u0000\u0a57\u0a58"+ - "\u0005D\u0000\u0000\u0a58\u0a59\u0005D\u0000\u0000\u0a59\u0a5a\u0005M"+ - "\u0000\u0000\u0a5a\u0a5b\u0005I\u0000\u0000\u0a5b\u0a5c\u0005N\u0000\u0000"+ - "\u0a5c\u0a5d\u0005U\u0000\u0000\u0a5d\u0a5e\u0005T\u0000\u0000\u0a5e\u0a5f"+ - "\u0005E\u0000\u0000\u0a5f\u0a60\u0005S\u0000\u0000\u0a60\u01f0\u0001\u0000"+ - "\u0000\u0000\u0a61\u0a62\u0005A\u0000\u0000\u0a62\u0a63\u0005D\u0000\u0000"+ - "\u0a63\u0a64\u0005D\u0000\u0000\u0a64\u0a65\u0005S\u0000\u0000\u0a65\u0a66"+ - "\u0005E\u0000\u0000\u0a66\u0a67\u0005C\u0000\u0000\u0a67\u0a68\u0005O"+ - "\u0000\u0000\u0a68\u0a69\u0005N\u0000\u0000\u0a69\u0a6a\u0005D\u0000\u0000"+ - "\u0a6a\u0a6b\u0005S\u0000\u0000\u0a6b\u01f2\u0001\u0000\u0000\u0000\u0a6c"+ - "\u0a6d\u0005T\u0000\u0000\u0a6d\u0a6e\u0005I\u0000\u0000\u0a6e\u0a6f\u0005"+ - "M\u0000\u0000\u0a6f\u0a70\u0005E\u0000\u0000\u0a70\u0a71\u0005S\u0000"+ - "\u0000\u0a71\u0a72\u0005T\u0000\u0000\u0a72\u0a73\u0005A\u0000\u0000\u0a73"+ - "\u0a74\u0005M\u0000\u0000\u0a74\u0a75\u0005P\u0000\u0000\u0a75\u01f4\u0001"+ - "\u0000\u0000\u0000\u0a76\u0a77\u0005H\u0000\u0000\u0a77\u0a78\u0005A\u0000"+ - "\u0000\u0a78\u0a93\u0005S\u0000\u0000\u0a79\u0a7a\u0005H\u0000\u0000\u0a7a"+ - "\u0a7b\u0005A\u0000\u0000\u0a7b\u0a7c\u0005S\u0000\u0000\u0a7c\u0a7d\u0005"+ - "K\u0000\u0000\u0a7d\u0a7e\u0005E\u0000\u0000\u0a7e\u0a93\u0005Y\u0000"+ - "\u0000\u0a7f\u0a80\u0005C\u0000\u0000\u0a80\u0a81\u0005O\u0000\u0000\u0a81"+ - "\u0a82\u0005N\u0000\u0000\u0a82\u0a83\u0005T\u0000\u0000\u0a83\u0a84\u0005"+ - "A\u0000\u0000\u0a84\u0a85\u0005I\u0000\u0000\u0a85\u0a86\u0005N\u0000"+ - "\u0000\u0a86\u0a93\u0005S\u0000\u0000\u0a87\u0a88\u0005C\u0000\u0000\u0a88"+ - "\u0a89\u0005O\u0000\u0000\u0a89\u0a8a\u0005N\u0000\u0000\u0a8a\u0a8b\u0005"+ - "T\u0000\u0000\u0a8b\u0a8c\u0005A\u0000\u0000\u0a8c\u0a8d\u0005I\u0000"+ - "\u0000\u0a8d\u0a8e\u0005N\u0000\u0000\u0a8e\u0a8f\u0005S\u0000\u0000\u0a8f"+ - "\u0a90\u0005K\u0000\u0000\u0a90\u0a91\u0005E\u0000\u0000\u0a91\u0a93\u0005"+ - "Y\u0000\u0000\u0a92\u0a76\u0001\u0000\u0000\u0000\u0a92\u0a79\u0001\u0000"+ - "\u0000\u0000\u0a92\u0a7f\u0001\u0000\u0000\u0000\u0a92\u0a87\u0001\u0000"+ - "\u0000\u0000\u0a93\u01f6\u0001\u0000\u0000\u0000\u0a94\u0a95\u0005H\u0000"+ - "\u0000\u0a95\u0a96\u0005A\u0000\u0000\u0a96\u0a97\u0005S\u0000\u0000\u0a97"+ - "\u0a98\u0005V\u0000\u0000\u0a98\u0a99\u0005A\u0000\u0000\u0a99\u0a9a\u0005"+ - "L\u0000\u0000\u0a9a\u0a9b\u0005U\u0000\u0000\u0a9b\u0aaa\u0005E\u0000"+ - "\u0000\u0a9c\u0a9d\u0005C\u0000\u0000\u0a9d\u0a9e\u0005O\u0000\u0000\u0a9e"+ - "\u0a9f\u0005N\u0000\u0000\u0a9f\u0aa0\u0005T\u0000\u0000\u0aa0\u0aa1\u0005"+ - "A\u0000\u0000\u0aa1\u0aa2\u0005I\u0000\u0000\u0aa2\u0aa3\u0005N\u0000"+ - "\u0000\u0aa3\u0aa4\u0005S\u0000\u0000\u0aa4\u0aa5\u0005V\u0000\u0000\u0aa5"+ - "\u0aa6\u0005A\u0000\u0000\u0aa6\u0aa7\u0005L\u0000\u0000\u0aa7\u0aa8\u0005"+ - "U\u0000\u0000\u0aa8\u0aaa\u0005E\u0000\u0000\u0aa9\u0a94\u0001\u0000\u0000"+ - "\u0000\u0aa9\u0a9c\u0001\u0000\u0000\u0000\u0aaa\u01f8\u0001\u0000\u0000"+ - "\u0000\u0aab\u0aac\u0005P\u0000\u0000\u0aac\u0aad\u0005A\u0000\u0000\u0aad"+ - "\u0aae\u0005R\u0000\u0000\u0aae\u0aaf\u0005A\u0000\u0000\u0aaf\u0ac6\u0005"+ - "M\u0000\u0000\u0ab0\u0ab1\u0005P\u0000\u0000\u0ab1\u0ab2\u0005A\u0000"+ - "\u0000\u0ab2\u0ab3\u0005R\u0000\u0000\u0ab3\u0ab4\u0005A\u0000\u0000\u0ab4"+ - "\u0ab5\u0005M\u0000\u0000\u0ab5\u0ab6\u0005E\u0000\u0000\u0ab6\u0ab7\u0005"+ - "T\u0000\u0000\u0ab7\u0ab8\u0005E\u0000\u0000\u0ab8\u0ac6\u0005R\u0000"+ - "\u0000\u0ab9\u0aba\u0005G\u0000\u0000\u0aba\u0abb\u0005E\u0000\u0000\u0abb"+ - "\u0abc\u0005T\u0000\u0000\u0abc\u0abd\u0005P\u0000\u0000\u0abd\u0abe\u0005"+ - "A\u0000\u0000\u0abe\u0abf\u0005R\u0000\u0000\u0abf\u0ac0\u0005A\u0000"+ - "\u0000\u0ac0\u0ac1\u0005M\u0000\u0000\u0ac1\u0ac2\u0005E\u0000\u0000\u0ac2"+ - "\u0ac3\u0005T\u0000\u0000\u0ac3\u0ac4\u0005E\u0000\u0000\u0ac4\u0ac6\u0005"+ - "R\u0000\u0000\u0ac5\u0aab\u0001\u0000\u0000\u0000\u0ac5\u0ab0\u0001\u0000"+ - "\u0000\u0000\u0ac5\u0ab9\u0001\u0000\u0000\u0000\u0ac6\u01fa\u0001\u0000"+ - "\u0000\u0000\u0ac7\u0aca\u0007\u0006\u0000\u0000\u0ac8\u0aca\u0003\u01ff"+ - "\u00ff\u0000\u0ac9\u0ac7\u0001\u0000\u0000\u0000\u0ac9\u0ac8\u0001\u0000"+ - "\u0000\u0000\u0aca\u0acf\u0001\u0000\u0000\u0000\u0acb\u0ace\u0007\u0007"+ - "\u0000\u0000\u0acc\u0ace\u0003\u01ff\u00ff\u0000\u0acd\u0acb\u0001\u0000"+ - "\u0000\u0000\u0acd\u0acc\u0001\u0000\u0000\u0000\u0ace\u0ad1\u0001\u0000"+ - "\u0000\u0000\u0acf\u0acd\u0001\u0000\u0000\u0000\u0acf\u0ad0\u0001\u0000"+ - "\u0000\u0000\u0ad0\u01fc\u0001\u0000\u0000\u0000\u0ad1\u0acf\u0001\u0000"+ - "\u0000\u0000\u0ad2\u0ad4\u0005\u3010\u0000\u0000\u0ad3\u0ad5\b\b\u0000"+ - "\u0000\u0ad4\u0ad3\u0001\u0000\u0000\u0000\u0ad5\u0ad6\u0001\u0000\u0000"+ - "\u0000\u0ad6\u0ad4\u0001\u0000\u0000\u0000\u0ad6\u0ad7\u0001\u0000\u0000"+ - "\u0000\u0ad7\u0ad8\u0001\u0000\u0000\u0000\u0ad8\u0aed\u0005\u3011\u0000"+ - "\u0000\u0ad9\u0adb\u0005#\u0000\u0000\u0ada\u0adc\b\t\u0000\u0000\u0adb"+ - "\u0ada\u0001\u0000\u0000\u0000\u0adc\u0add\u0001\u0000\u0000\u0000\u0add"+ - "\u0adb\u0001\u0000\u0000\u0000\u0add\u0ade\u0001\u0000\u0000\u0000\u0ade"+ - "\u0adf\u0001\u0000\u0000\u0000\u0adf\u0aed\u0005#\u0000\u0000\u0ae0\u0ae3"+ - "\u0005@\u0000\u0000\u0ae1\u0ae4\u0007\u0006\u0000\u0000\u0ae2\u0ae4\u0003"+ - "\u01ff\u00ff\u0000\u0ae3\u0ae1\u0001\u0000\u0000\u0000\u0ae3\u0ae2\u0001"+ - "\u0000\u0000\u0000\u0ae4\u0ae9\u0001\u0000\u0000\u0000\u0ae5\u0ae8\u0007"+ - "\u0007\u0000\u0000\u0ae6\u0ae8\u0003\u01ff\u00ff\u0000\u0ae7\u0ae5\u0001"+ - "\u0000\u0000\u0000\u0ae7\u0ae6\u0001\u0000\u0000\u0000\u0ae8\u0aeb\u0001"+ - "\u0000\u0000\u0000\u0ae9\u0ae7\u0001\u0000\u0000\u0000\u0ae9\u0aea\u0001"+ - "\u0000\u0000\u0000\u0aea\u0aed\u0001\u0000\u0000\u0000\u0aeb\u0ae9\u0001"+ - "\u0000\u0000\u0000\u0aec\u0ad2\u0001\u0000\u0000\u0000\u0aec\u0ad9\u0001"+ - "\u0000\u0000\u0000\u0aec\u0ae0\u0001\u0000\u0000\u0000\u0aed\u01fe\u0001"+ - "\u0000\u0000\u0000\u0aee\u0aef\u0007\n\u0000\u0000\u0aef\u0200\u0001\u0000"+ - "\u0000\u0000\u0af0\u0af2\u0007\u000b\u0000\u0000\u0af1\u0af0\u0001\u0000"+ - "\u0000\u0000\u0af2\u0af3\u0001\u0000\u0000\u0000\u0af3\u0af1\u0001\u0000"+ - "\u0000\u0000\u0af3\u0af4\u0001\u0000\u0000\u0000\u0af4\u0af5\u0001\u0000"+ - "\u0000\u0000\u0af5\u0af6\u0006\u0100\u0000\u0000\u0af6\u0202\u0001\u0000"+ - "\u0000\u0000\u0af7\u0af8\u0005/\u0000\u0000\u0af8\u0af9\u0005*\u0000\u0000"+ - "\u0af9\u0afd\u0001\u0000\u0000\u0000\u0afa\u0afc\t\u0000\u0000\u0000\u0afb"+ - "\u0afa\u0001\u0000\u0000\u0000\u0afc\u0aff\u0001\u0000\u0000\u0000\u0afd"+ - "\u0afe\u0001\u0000\u0000\u0000\u0afd\u0afb\u0001\u0000\u0000\u0000\u0afe"+ - "\u0b00\u0001\u0000\u0000\u0000\u0aff\u0afd\u0001\u0000\u0000\u0000\u0b00"+ - "\u0b01\u0005*\u0000\u0000\u0b01\u0b02\u0005/\u0000\u0000\u0b02\u0b03\u0001"+ - "\u0000\u0000\u0000\u0b03\u0b04\u0006\u0101\u0000\u0000\u0b04\u0204\u0001"+ - "\u0000\u0000\u0000\u0b05\u0b06\u0005/\u0000\u0000\u0b06\u0b07\u0005/\u0000"+ - "\u0000\u0b07\u0b0b\u0001\u0000\u0000\u0000\u0b08\u0b0a\b\f\u0000\u0000"+ - "\u0b09\u0b08\u0001\u0000\u0000\u0000\u0b0a\u0b0d\u0001\u0000\u0000\u0000"+ - "\u0b0b\u0b09\u0001\u0000\u0000\u0000\u0b0b\u0b0c\u0001\u0000\u0000\u0000"+ - "\u0b0c\u0b0e\u0001\u0000\u0000\u0000\u0b0d\u0b0b\u0001\u0000\u0000\u0000"+ - "\u0b0e\u0b0f\u0006\u0102\u0000\u0000\u0b0f\u0206\u0001\u0000\u0000\u0000"+ - "H\u0000\u0251\u0253\u0259\u0260\u0262\u0269\u026b\u0271\u0278\u027a\u027c"+ - "\u0280\u0284\u0286\u028c\u028e\u0296\u0298\u02a0\u02a2\u02a6\u02de\u04df"+ - "\u0523\u0571\u0646\u0662\u06b1\u06c0\u06d3\u06f0\u06fb\u070e\u071f\u0735"+ - "\u0749\u075c\u076d\u0782\u0797\u07a4\u07af\u07d5\u07e8\u0800\u0819\u082c"+ - "\u0845\u0860\u0875\u0882\u088d\u091c\u0975\u0983\u0a30\u0a92\u0aa9\u0ac5"+ - "\u0ac9\u0acd\u0acf\u0ad6\u0add\u0ae3\u0ae7\u0ae9\u0aec\u0af3\u0afd\u0b0b"+ - "\u0001\u0006\u0000\u0000"; + "\u0000\u09d5\u09d6\u0005W\u0000\u0000\u09d6\u09d7\u0005H\u0000\u0000\u09d7"+ + "\u09d8\u0005I\u0000\u0000\u09d8\u09d9\u0005T\u0000\u0000\u09d9\u09da\u0005"+ + "E\u0000\u0000\u09da\u09db\u0005S\u0000\u0000\u09db\u09dc\u0005P\u0000"+ + "\u0000\u09dc\u09dd\u0005A\u0000\u0000\u09dd\u09de\u0005C\u0000\u0000\u09de"+ + "\u09df\u0005E\u0000\u0000\u09df\u01d6\u0001\u0000\u0000\u0000\u09e0\u09e1"+ + "\u0005R\u0000\u0000\u09e1\u09e2\u0005E\u0000\u0000\u09e2\u09e3\u0005M"+ + "\u0000\u0000\u09e3\u09e4\u0005O\u0000\u0000\u09e4\u09e5\u0005V\u0000\u0000"+ + "\u09e5\u09e6\u0005E\u0000\u0000\u09e6\u09e7\u0005S\u0000\u0000\u09e7\u09e8"+ + "\u0005T\u0000\u0000\u09e8\u09e9\u0005A\u0000\u0000\u09e9\u09ea\u0005R"+ + "\u0000\u0000\u09ea\u09eb\u0005T\u0000\u0000\u09eb\u01d8\u0001\u0000\u0000"+ + "\u0000\u09ec\u09ed\u0005R\u0000\u0000\u09ed\u09ee\u0005E\u0000\u0000\u09ee"+ + "\u09ef\u0005M\u0000\u0000\u09ef\u09f0\u0005O\u0000\u0000\u09f0\u09f1\u0005"+ + "V\u0000\u0000\u09f1\u09f2\u0005E\u0000\u0000\u09f2\u09f3\u0005E\u0000"+ + "\u0000\u09f3\u09f4\u0005N\u0000\u0000\u09f4\u09f5\u0005D\u0000\u0000\u09f5"+ + "\u01da\u0001\u0000\u0000\u0000\u09f6\u09f7\u0005J\u0000\u0000\u09f7\u09f8"+ + "\u0005S\u0000\u0000\u09f8\u09f9\u0005O\u0000\u0000\u09f9\u09fa\u0005N"+ + "\u0000\u0000\u09fa\u01dc\u0001\u0000\u0000\u0000\u09fb\u09fc\u0005L\u0000"+ + "\u0000\u09fc\u09fd\u0005O\u0000\u0000\u09fd\u09fe\u0005O\u0000\u0000\u09fe"+ + "\u09ff\u0005K\u0000\u0000\u09ff\u0a00\u0005C\u0000\u0000\u0a00\u0a01\u0005"+ + "E\u0000\u0000\u0a01\u0a02\u0005I\u0000\u0000\u0a02\u0a03\u0005L\u0000"+ + "\u0000\u0a03\u0a04\u0005I\u0000\u0000\u0a04\u0a05\u0005N\u0000\u0000\u0a05"+ + "\u0a06\u0005G\u0000\u0000\u0a06\u01de\u0001\u0000\u0000\u0000\u0a07\u0a08"+ + "\u0005L\u0000\u0000\u0a08\u0a09\u0005O\u0000\u0000\u0a09\u0a0a\u0005O"+ + "\u0000\u0000\u0a0a\u0a0b\u0005K\u0000\u0000\u0a0b\u0a0c\u0005F\u0000\u0000"+ + "\u0a0c\u0a0d\u0005L\u0000\u0000\u0a0d\u0a0e\u0005O\u0000\u0000\u0a0e\u0a0f"+ + "\u0005O\u0000\u0000\u0a0f\u0a10\u0005R\u0000\u0000\u0a10\u01e0\u0001\u0000"+ + "\u0000\u0000\u0a11\u0a12\u0005A\u0000\u0000\u0a12\u0a13\u0005R\u0000\u0000"+ + "\u0a13\u0a14\u0005R\u0000\u0000\u0a14\u0a15\u0005A\u0000\u0000\u0a15\u0a16"+ + "\u0005Y\u0000\u0000\u0a16\u01e2\u0001\u0000\u0000\u0000\u0a17\u0a18\u0005"+ + "A\u0000\u0000\u0a18\u0a19\u0005L\u0000\u0000\u0a19\u0a1a\u0005G\u0000"+ + "\u0000\u0a1a\u0a1b\u0005O\u0000\u0000\u0a1b\u0a1c\u0005R\u0000\u0000\u0a1c"+ + "\u0a1d\u0005I\u0000\u0000\u0a1d\u0a1e\u0005T\u0000\u0000\u0a1e\u0a1f\u0005"+ + "H\u0000\u0000\u0a1f\u0a20\u0005M\u0000\u0000\u0a20\u0a21\u0005V\u0000"+ + "\u0000\u0a21\u0a22\u0005E\u0000\u0000\u0a22\u0a23\u0005R\u0000\u0000\u0a23"+ + "\u0a24\u0005S\u0000\u0000\u0a24\u0a25\u0005I\u0000\u0000\u0a25\u0a26\u0005"+ + "O\u0000\u0000\u0a26\u0a35\u0005N\u0000\u0000\u0a27\u0a28\u0005E\u0000"+ + "\u0000\u0a28\u0a29\u0005N\u0000\u0000\u0a29\u0a2a\u0005G\u0000\u0000\u0a2a"+ + "\u0a2b\u0005I\u0000\u0000\u0a2b\u0a2c\u0005N\u0000\u0000\u0a2c\u0a2d\u0005"+ + "E\u0000\u0000\u0a2d\u0a2e\u0005V\u0000\u0000\u0a2e\u0a2f\u0005E\u0000"+ + "\u0000\u0a2f\u0a30\u0005R\u0000\u0000\u0a30\u0a31\u0005S\u0000\u0000\u0a31"+ + "\u0a32\u0005I\u0000\u0000\u0a32\u0a33\u0005O\u0000\u0000\u0a33\u0a35\u0005"+ + "N\u0000\u0000\u0a34\u0a17\u0001\u0000\u0000\u0000\u0a34\u0a27\u0001\u0000"+ + "\u0000\u0000\u0a35\u01e4\u0001\u0000\u0000\u0000\u0a36\u0a37\u0005A\u0000"+ + "\u0000\u0a37\u0a38\u0005D\u0000\u0000\u0a38\u0a39\u0005D\u0000\u0000\u0a39"+ + "\u0a3a\u0005Y\u0000\u0000\u0a3a\u0a3b\u0005E\u0000\u0000\u0a3b\u0a3c\u0005"+ + "A\u0000\u0000\u0a3c\u0a3d\u0005R\u0000\u0000\u0a3d\u0a3e\u0005S\u0000"+ + "\u0000\u0a3e\u01e6\u0001\u0000\u0000\u0000\u0a3f\u0a40\u0005A\u0000\u0000"+ + "\u0a40\u0a41\u0005D\u0000\u0000\u0a41\u0a42\u0005D\u0000\u0000\u0a42\u0a43"+ + "\u0005M\u0000\u0000\u0a43\u0a44\u0005O\u0000\u0000\u0a44\u0a45\u0005N"+ + "\u0000\u0000\u0a45\u0a46\u0005T\u0000\u0000\u0a46\u0a47\u0005H\u0000\u0000"+ + "\u0a47\u0a48\u0005S\u0000\u0000\u0a48\u01e8\u0001\u0000\u0000\u0000\u0a49"+ + "\u0a4a\u0005A\u0000\u0000\u0a4a\u0a4b\u0005D\u0000\u0000\u0a4b\u0a4c\u0005"+ + "D\u0000\u0000\u0a4c\u0a4d\u0005D\u0000\u0000\u0a4d\u0a4e\u0005A\u0000"+ + "\u0000\u0a4e\u0a4f\u0005Y\u0000\u0000\u0a4f\u0a50\u0005S\u0000\u0000\u0a50"+ + "\u01ea\u0001\u0000\u0000\u0000\u0a51\u0a52\u0005A\u0000\u0000\u0a52\u0a53"+ + "\u0005D\u0000\u0000\u0a53\u0a54\u0005D\u0000\u0000\u0a54\u0a55\u0005H"+ + "\u0000\u0000\u0a55\u0a56\u0005O\u0000\u0000\u0a56\u0a57\u0005U\u0000\u0000"+ + "\u0a57\u0a58\u0005R\u0000\u0000\u0a58\u0a59\u0005S\u0000\u0000\u0a59\u01ec"+ + "\u0001\u0000\u0000\u0000\u0a5a\u0a5b\u0005A\u0000\u0000\u0a5b\u0a5c\u0005"+ + "D\u0000\u0000\u0a5c\u0a5d\u0005D\u0000\u0000\u0a5d\u0a5e\u0005M\u0000"+ + "\u0000\u0a5e\u0a5f\u0005I\u0000\u0000\u0a5f\u0a60\u0005N\u0000\u0000\u0a60"+ + "\u0a61\u0005U\u0000\u0000\u0a61\u0a62\u0005T\u0000\u0000\u0a62\u0a63\u0005"+ + "E\u0000\u0000\u0a63\u0a64\u0005S\u0000\u0000\u0a64\u01ee\u0001\u0000\u0000"+ + "\u0000\u0a65\u0a66\u0005A\u0000\u0000\u0a66\u0a67\u0005D\u0000\u0000\u0a67"+ + "\u0a68\u0005D\u0000\u0000\u0a68\u0a69\u0005S\u0000\u0000\u0a69\u0a6a\u0005"+ + "E\u0000\u0000\u0a6a\u0a6b\u0005C\u0000\u0000\u0a6b\u0a6c\u0005O\u0000"+ + "\u0000\u0a6c\u0a6d\u0005N\u0000\u0000\u0a6d\u0a6e\u0005D\u0000\u0000\u0a6e"+ + "\u0a6f\u0005S\u0000\u0000\u0a6f\u01f0\u0001\u0000\u0000\u0000\u0a70\u0a71"+ + "\u0005T\u0000\u0000\u0a71\u0a72\u0005I\u0000\u0000\u0a72\u0a73\u0005M"+ + "\u0000\u0000\u0a73\u0a74\u0005E\u0000\u0000\u0a74\u0a75\u0005S\u0000\u0000"+ + "\u0a75\u0a76\u0005T\u0000\u0000\u0a76\u0a77\u0005A\u0000\u0000\u0a77\u0a78"+ + "\u0005M\u0000\u0000\u0a78\u0a79\u0005P\u0000\u0000\u0a79\u01f2\u0001\u0000"+ + "\u0000\u0000\u0a7a\u0a7b\u0005H\u0000\u0000\u0a7b\u0a7c\u0005A\u0000\u0000"+ + "\u0a7c\u0a97\u0005S\u0000\u0000\u0a7d\u0a7e\u0005H\u0000\u0000\u0a7e\u0a7f"+ + "\u0005A\u0000\u0000\u0a7f\u0a80\u0005S\u0000\u0000\u0a80\u0a81\u0005K"+ + "\u0000\u0000\u0a81\u0a82\u0005E\u0000\u0000\u0a82\u0a97\u0005Y\u0000\u0000"+ + "\u0a83\u0a84\u0005C\u0000\u0000\u0a84\u0a85\u0005O\u0000\u0000\u0a85\u0a86"+ + "\u0005N\u0000\u0000\u0a86\u0a87\u0005T\u0000\u0000\u0a87\u0a88\u0005A"+ + "\u0000\u0000\u0a88\u0a89\u0005I\u0000\u0000\u0a89\u0a8a\u0005N\u0000\u0000"+ + "\u0a8a\u0a97\u0005S\u0000\u0000\u0a8b\u0a8c\u0005C\u0000\u0000\u0a8c\u0a8d"+ + "\u0005O\u0000\u0000\u0a8d\u0a8e\u0005N\u0000\u0000\u0a8e\u0a8f\u0005T"+ + "\u0000\u0000\u0a8f\u0a90\u0005A\u0000\u0000\u0a90\u0a91\u0005I\u0000\u0000"+ + "\u0a91\u0a92\u0005N\u0000\u0000\u0a92\u0a93\u0005S\u0000\u0000\u0a93\u0a94"+ + "\u0005K\u0000\u0000\u0a94\u0a95\u0005E\u0000\u0000\u0a95\u0a97\u0005Y"+ + "\u0000\u0000\u0a96\u0a7a\u0001\u0000\u0000\u0000\u0a96\u0a7d\u0001\u0000"+ + "\u0000\u0000\u0a96\u0a83\u0001\u0000\u0000\u0000\u0a96\u0a8b\u0001\u0000"+ + "\u0000\u0000\u0a97\u01f4\u0001\u0000\u0000\u0000\u0a98\u0a99\u0005H\u0000"+ + "\u0000\u0a99\u0a9a\u0005A\u0000\u0000\u0a9a\u0a9b\u0005S\u0000\u0000\u0a9b"+ + "\u0a9c\u0005V\u0000\u0000\u0a9c\u0a9d\u0005A\u0000\u0000\u0a9d\u0a9e\u0005"+ + "L\u0000\u0000\u0a9e\u0a9f\u0005U\u0000\u0000\u0a9f\u0aae\u0005E\u0000"+ + "\u0000\u0aa0\u0aa1\u0005C\u0000\u0000\u0aa1\u0aa2\u0005O\u0000\u0000\u0aa2"+ + "\u0aa3\u0005N\u0000\u0000\u0aa3\u0aa4\u0005T\u0000\u0000\u0aa4\u0aa5\u0005"+ + "A\u0000\u0000\u0aa5\u0aa6\u0005I\u0000\u0000\u0aa6\u0aa7\u0005N\u0000"+ + "\u0000\u0aa7\u0aa8\u0005S\u0000\u0000\u0aa8\u0aa9\u0005V\u0000\u0000\u0aa9"+ + "\u0aaa\u0005A\u0000\u0000\u0aaa\u0aab\u0005L\u0000\u0000\u0aab\u0aac\u0005"+ + "U\u0000\u0000\u0aac\u0aae\u0005E\u0000\u0000\u0aad\u0a98\u0001\u0000\u0000"+ + "\u0000\u0aad\u0aa0\u0001\u0000\u0000\u0000\u0aae\u01f6\u0001\u0000\u0000"+ + "\u0000\u0aaf\u0ab0\u0005P\u0000\u0000\u0ab0\u0ab1\u0005A\u0000\u0000\u0ab1"+ + "\u0ab2\u0005R\u0000\u0000\u0ab2\u0ab3\u0005A\u0000\u0000\u0ab3\u0aca\u0005"+ + "M\u0000\u0000\u0ab4\u0ab5\u0005P\u0000\u0000\u0ab5\u0ab6\u0005A\u0000"+ + "\u0000\u0ab6\u0ab7\u0005R\u0000\u0000\u0ab7\u0ab8\u0005A\u0000\u0000\u0ab8"+ + "\u0ab9\u0005M\u0000\u0000\u0ab9\u0aba\u0005E\u0000\u0000\u0aba\u0abb\u0005"+ + "T\u0000\u0000\u0abb\u0abc\u0005E\u0000\u0000\u0abc\u0aca\u0005R\u0000"+ + "\u0000\u0abd\u0abe\u0005G\u0000\u0000\u0abe\u0abf\u0005E\u0000\u0000\u0abf"+ + "\u0ac0\u0005T\u0000\u0000\u0ac0\u0ac1\u0005P\u0000\u0000\u0ac1\u0ac2\u0005"+ + "A\u0000\u0000\u0ac2\u0ac3\u0005R\u0000\u0000\u0ac3\u0ac4\u0005A\u0000"+ + "\u0000\u0ac4\u0ac5\u0005M\u0000\u0000\u0ac5\u0ac6\u0005E\u0000\u0000\u0ac6"+ + "\u0ac7\u0005T\u0000\u0000\u0ac7\u0ac8\u0005E\u0000\u0000\u0ac8\u0aca\u0005"+ + "R\u0000\u0000\u0ac9\u0aaf\u0001\u0000\u0000\u0000\u0ac9\u0ab4\u0001\u0000"+ + "\u0000\u0000\u0ac9\u0abd\u0001\u0000\u0000\u0000\u0aca\u01f8\u0001\u0000"+ + "\u0000\u0000\u0acb\u0ace\u0007\u0006\u0000\u0000\u0acc\u0ace\u0003\u01fb"+ + "\u00fd\u0000\u0acd\u0acb\u0001\u0000\u0000\u0000\u0acd\u0acc\u0001\u0000"+ + "\u0000\u0000\u0ace\u0ad3\u0001\u0000\u0000\u0000\u0acf\u0ad2\u0007\u0007"+ + "\u0000\u0000\u0ad0\u0ad2\u0003\u01fb\u00fd\u0000\u0ad1\u0acf\u0001\u0000"+ + "\u0000\u0000\u0ad1\u0ad0\u0001\u0000\u0000\u0000\u0ad2\u0ad5\u0001\u0000"+ + "\u0000\u0000\u0ad3\u0ad1\u0001\u0000\u0000\u0000\u0ad3\u0ad4\u0001\u0000"+ + "\u0000\u0000\u0ad4\u01fa\u0001\u0000\u0000\u0000\u0ad5\u0ad3\u0001\u0000"+ + "\u0000\u0000\u0ad6\u0ad7\u0007\b\u0000\u0000\u0ad7\u01fc\u0001\u0000\u0000"+ + "\u0000\u0ad8\u0ada\u0007\t\u0000\u0000\u0ad9\u0ad8\u0001\u0000\u0000\u0000"+ + "\u0ada\u0adb\u0001\u0000\u0000\u0000\u0adb\u0ad9\u0001\u0000\u0000\u0000"+ + "\u0adb\u0adc\u0001\u0000\u0000\u0000\u0adc\u0add\u0001\u0000\u0000\u0000"+ + "\u0add\u0ade\u0006\u00fe\u0000\u0000\u0ade\u01fe\u0001\u0000\u0000\u0000"+ + "\u0adf\u0ae0\u0005/\u0000\u0000\u0ae0\u0ae1\u0005*\u0000\u0000\u0ae1\u0ae5"+ + "\u0001\u0000\u0000\u0000\u0ae2\u0ae4\t\u0000\u0000\u0000\u0ae3\u0ae2\u0001"+ + "\u0000\u0000\u0000\u0ae4\u0ae7\u0001\u0000\u0000\u0000\u0ae5\u0ae6\u0001"+ + "\u0000\u0000\u0000\u0ae5\u0ae3\u0001\u0000\u0000\u0000\u0ae6\u0ae8\u0001"+ + "\u0000\u0000\u0000\u0ae7\u0ae5\u0001\u0000\u0000\u0000\u0ae8\u0ae9\u0005"+ + "*\u0000\u0000\u0ae9\u0aea\u0005/\u0000\u0000\u0aea\u0aeb\u0001\u0000\u0000"+ + "\u0000\u0aeb\u0aec\u0006\u00ff\u0000\u0000\u0aec\u0200\u0001\u0000\u0000"+ + "\u0000\u0aed\u0aee\u0005/\u0000\u0000\u0aee\u0aef\u0005/\u0000\u0000\u0aef"+ + "\u0af3\u0001\u0000\u0000\u0000\u0af0\u0af2\b\n\u0000\u0000\u0af1\u0af0"+ + "\u0001\u0000\u0000\u0000\u0af2\u0af5\u0001\u0000\u0000\u0000\u0af3\u0af1"+ + "\u0001\u0000\u0000\u0000\u0af3\u0af4\u0001\u0000\u0000\u0000\u0af4\u0af6"+ + "\u0001\u0000\u0000\u0000\u0af5\u0af3\u0001\u0000\u0000\u0000\u0af6\u0af7"+ + "\u0006\u0100\u0000\u0000\u0af7\u0202\u0001\u0000\u0000\u0000D\u0000\u024d"+ + "\u024f\u0255\u025c\u025e\u0265\u0267\u026d\u0274\u0276\u0278\u027c\u0280"+ + "\u0282\u0288\u028a\u0292\u0294\u029c\u029e\u02a2\u02da\u0347\u0350\u04e2"+ + "\u0526\u0574\u0649\u0665\u06b4\u06c3\u06d6\u06f3\u06fe\u0711\u0722\u0738"+ + "\u074c\u075f\u0770\u0785\u079a\u07a7\u07b2\u07d8\u07eb\u0803\u081c\u082f"+ + "\u0848\u0863\u0878\u0885\u0890\u091f\u0972\u0980\u0a34\u0a96\u0aad\u0ac9"+ + "\u0acd\u0ad1\u0ad3\u0adb\u0ae5\u0af3\u0001\u0006\u0000\u0000"; public static final String _serializedATN = Utils.join( new String[] { _serializedATNSegment0, diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathParser.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathParser.java index c30f48049..cb0218c31 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathParser.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathParser.java @@ -49,14 +49,14 @@ public class mathParser extends Parser { NEGBINOMDIST=200, POISSON=201, TDIST=202, TINV=203, WEIBULL=204, URLENCODE=205, URLDECODE=206, HTMLENCODE=207, HTMLDECODE=208, BASE64TOTEXT=209, BASE64URLTOTEXT=210, TEXTTOBASE64=211, TEXTTOBASE64URL=212, REGEX=213, REGEXREPALCE=214, ISREGEX=215, - GUID=216, MD5=217, SHA1=218, SHA256=219, SHA512=220, CRC32=221, HMACMD5=222, - HMACSHA1=223, HMACSHA256=224, HMACSHA512=225, TRIMSTART=226, TRIMEND=227, - INDEXOF=228, LASTINDEXOF=229, SPLIT=230, JOIN=231, SUBSTRING=232, STARTSWITH=233, - ENDSWITH=234, ISNULLOREMPTY=235, ISNULLORWHITESPACE=236, REMOVESTART=237, - REMOVEEND=238, JSON=239, VLOOKUP=240, LOOKUP=241, ARRAY=242, ALGORITHMVERSION=243, - ADDYEARS=244, ADDMONTHS=245, ADDDAYS=246, ADDHOURS=247, ADDMINUTES=248, - ADDSECONDS=249, TIMESTAMP=250, HAS=251, HASVALUE=252, PARAM=253, PARAMETER=254, - PARAMETER2=255, WS=256, COMMENT=257, LINE_COMMENT=258; + GUID=216, MD5=217, SHA1=218, SHA256=219, SHA512=220, HMACMD5=221, HMACSHA1=222, + HMACSHA256=223, HMACSHA512=224, TRIMSTART=225, TRIMEND=226, INDEXOF=227, + LASTINDEXOF=228, SPLIT=229, JOIN=230, SUBSTRING=231, STARTSWITH=232, ENDSWITH=233, + ISNULLOREMPTY=234, ISNULLORWHITESPACE=235, REMOVESTART=236, REMOVEEND=237, + JSON=238, LOOKCEILING=239, LOOKFLOOR=240, ARRAY=241, ALGORITHMVERSION=242, + ADDYEARS=243, ADDMONTHS=244, ADDDAYS=245, ADDHOURS=246, ADDMINUTES=247, + ADDSECONDS=248, TIMESTAMP=249, HAS=250, HASVALUE=251, PARAM=252, PARAMETER=253, + WS=254, COMMENT=255, LINE_COMMENT=256; public static final int RULE_prog = 0, RULE_expr = 1, RULE_num = 2, RULE_unit = 3, RULE_arrayJson = 4, RULE_parameter2 = 5; @@ -74,7 +74,7 @@ private static String[] makeLiteralNames() { "'!=='", "'!='", "'<>'", "'&&'", "'||'", "'?'", "':'", "'{'", "'}'", "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'ISNUMBER'", "'ISTEXT'", "'ISERROR'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", - "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", "'TRUE'", "'FALSE'", + "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", "'BIN2HEX'", "'ABS'", "'QUOTIENT'", "'MOD'", "'SIGN'", "'SQRT'", "'TRUNC'", @@ -99,11 +99,11 @@ private static String[] makeLiteralNames() { null, null, null, "'WEIBULL'", "'URLENCODE'", "'URLDECODE'", "'HTMLENCODE'", "'HTMLDECODE'", "'BASE64TOTEXT'", "'BASE64URLTOTEXT'", "'TEXTTOBASE64'", "'TEXTTOBASE64URL'", "'REGEX'", "'REGEXREPALCE'", null, "'GUID'", "'MD5'", - "'SHA1'", "'SHA256'", "'SHA512'", "'CRC32'", "'HMACMD5'", "'HMACSHA1'", - "'HMACSHA256'", "'HMACSHA512'", null, null, "'INDEXOF'", "'LASTINDEXOF'", - "'SPLIT'", "'JOIN'", "'SUBSTRING'", "'STARTSWITH'", "'ENDSWITH'", "'ISNULLOREMPTY'", - "'ISNULLORWHITESPACE'", "'REMOVESTART'", "'REMOVEEND'", "'JSON'", "'VLOOKUP'", - "'LOOKUP'", "'ARRAY'", null, "'ADDYEARS'", "'ADDMONTHS'", "'ADDDAYS'", + "'SHA1'", "'SHA256'", "'SHA512'", "'HMACMD5'", "'HMACSHA1'", "'HMACSHA256'", + "'HMACSHA512'", null, null, "'INDEXOF'", "'LASTINDEXOF'", "'SPLIT'", + "'JOIN'", "'SUBSTRING'", "'STARTSWITH'", "'ENDSWITH'", "'ISNULLOREMPTY'", + "'ISNULLORWHITESPACE'", "'REMOVESTART'", "'REMOVEEND'", "'JSON'", "'LOOKCEILING'", + "'LOOKFLOOR'", "'ARRAY'", null, "'ADDYEARS'", "'ADDMONTHS'", "'ADDDAYS'", "'ADDHOURS'", "'ADDMINUTES'", "'ADDSECONDS'", "'TIMESTAMP'" }; } @@ -138,13 +138,13 @@ private static String[] makeSymbolicNames() { "LOGNORMDIST", "NEGBINOMDIST", "POISSON", "TDIST", "TINV", "WEIBULL", "URLENCODE", "URLDECODE", "HTMLENCODE", "HTMLDECODE", "BASE64TOTEXT", "BASE64URLTOTEXT", "TEXTTOBASE64", "TEXTTOBASE64URL", "REGEX", "REGEXREPALCE", - "ISREGEX", "GUID", "MD5", "SHA1", "SHA256", "SHA512", "CRC32", "HMACMD5", - "HMACSHA1", "HMACSHA256", "HMACSHA512", "TRIMSTART", "TRIMEND", "INDEXOF", - "LASTINDEXOF", "SPLIT", "JOIN", "SUBSTRING", "STARTSWITH", "ENDSWITH", - "ISNULLOREMPTY", "ISNULLORWHITESPACE", "REMOVESTART", "REMOVEEND", "JSON", - "VLOOKUP", "LOOKUP", "ARRAY", "ALGORITHMVERSION", "ADDYEARS", "ADDMONTHS", - "ADDDAYS", "ADDHOURS", "ADDMINUTES", "ADDSECONDS", "TIMESTAMP", "HAS", - "HASVALUE", "PARAM", "PARAMETER", "PARAMETER2", "WS", "COMMENT", "LINE_COMMENT" + "ISREGEX", "GUID", "MD5", "SHA1", "SHA256", "SHA512", "HMACMD5", "HMACSHA1", + "HMACSHA256", "HMACSHA512", "TRIMSTART", "TRIMEND", "INDEXOF", "LASTINDEXOF", + "SPLIT", "JOIN", "SUBSTRING", "STARTSWITH", "ENDSWITH", "ISNULLOREMPTY", + "ISNULLORWHITESPACE", "REMOVESTART", "REMOVEEND", "JSON", "LOOKCEILING", + "LOOKFLOOR", "ARRAY", "ALGORITHMVERSION", "ADDYEARS", "ADDMONTHS", "ADDDAYS", + "ADDHOURS", "ADDMINUTES", "ADDSECONDS", "TIMESTAMP", "HAS", "HASVALUE", + "PARAM", "PARAMETER", "WS", "COMMENT", "LINE_COMMENT" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -296,6 +296,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class LOOKFLOOR_funContext extends ExprContext { + public TerminalNode LOOKFLOOR() { return getToken(mathParser.LOOKFLOOR, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public LOOKFLOOR_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitLOOKFLOOR_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class HASVALUE_funContext extends ExprContext { public TerminalNode HASVALUE() { return getToken(mathParser.HASVALUE, 0); } public List expr() { @@ -470,6 +486,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class LOOKCEILING_funContext extends ExprContext { + public TerminalNode LOOKCEILING() { return getToken(mathParser.LOOKCEILING, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public LOOKCEILING_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitLOOKCEILING_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class WEEKNUM_funContext extends ExprContext { public TerminalNode WEEKNUM() { return getToken(mathParser.WEEKNUM, 0); } public List expr() { @@ -849,22 +881,6 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class CRC32_funContext extends ExprContext { - public TerminalNode CRC32() { return getToken(mathParser.CRC32, 0); } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); - } - public CRC32_funContext(ExprContext ctx) { copyFrom(ctx); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitCRC32_fun(this); - else return visitor.visitChildren(this); - } - } - @SuppressWarnings("CheckReturnValue") public static class LCM_funContext extends ExprContext { public TerminalNode LCM() { return getToken(mathParser.LCM, 0); } public List expr() { @@ -1314,6 +1330,7 @@ public List expr() { public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } + public TerminalNode PARAMETER() { return getToken(mathParser.PARAMETER, 0); } public Parameter2Context parameter2() { return getRuleContext(Parameter2Context.class,0); } @@ -1887,10 +1904,6 @@ public T accept(ParseTreeVisitor visitor) { @SuppressWarnings("CheckReturnValue") public static class PARAMETER_funContext extends ExprContext { public TerminalNode PARAMETER() { return getToken(mathParser.PARAMETER, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); - } - public TerminalNode PARAMETER2() { return getToken(mathParser.PARAMETER2, 0); } public PARAMETER_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { @@ -2246,22 +2259,6 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class VLOOKUP_funContext extends ExprContext { - public TerminalNode VLOOKUP() { return getToken(mathParser.VLOOKUP, 0); } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); - } - public VLOOKUP_funContext(ExprContext ctx) { copyFrom(ctx); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitVLOOKUP_fun(this); - else return visitor.visitChildren(this); - } - } - @SuppressWarnings("CheckReturnValue") public static class DEC2BIN_funContext extends ExprContext { public TerminalNode DEC2BIN() { return getToken(mathParser.DEC2BIN, 0); } public List expr() { @@ -2278,22 +2275,6 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class LOOKUP_funContext extends ExprContext { - public TerminalNode LOOKUP() { return getToken(mathParser.LOOKUP, 0); } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); - } - public LOOKUP_funContext(ExprContext ctx) { copyFrom(ctx); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitLOOKUP_fun(this); - else return visitor.visitChildren(this); - } - } - @SuppressWarnings("CheckReturnValue") public static class HEX2DEC_funContext extends ExprContext { public TerminalNode HEX2DEC() { return getToken(mathParser.HEX2DEC, 0); } public ExprContext expr() { @@ -3712,9 +3693,9 @@ private ExprContext expr(int _p) throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(1835); + setState(1810); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,105,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,103,_ctx) ) { case 1: { _localctx = new Bracket_funContext(_localctx); @@ -3737,7 +3718,7 @@ private ExprContext expr(int _p) throws RecognitionException { setState(20); match(T__6); setState(21); - expr(239); + expr(235); } break; case 3: @@ -7887,137 +7868,137 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 190: { - _localctx = new CRC32_funContext(_localctx); + _localctx = new HMACMD5_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(1477); - match(CRC32); + match(HMACMD5); setState(1478); match(T__1); setState(1479); expr(0); - setState(1482); + setState(1480); + match(T__3); + setState(1481); + expr(0); + setState(1484); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1480); + setState(1482); match(T__3); - setState(1481); + setState(1483); expr(0); } } - setState(1484); + setState(1486); match(T__2); } break; case 191: { - _localctx = new HMACMD5_funContext(_localctx); + _localctx = new HMACSHA1_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1486); - match(HMACMD5); - setState(1487); - match(T__1); setState(1488); - expr(0); + match(HMACSHA1); setState(1489); - match(T__3); + match(T__1); setState(1490); expr(0); - setState(1493); + setState(1491); + match(T__3); + setState(1492); + expr(0); + setState(1495); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1491); + setState(1493); match(T__3); - setState(1492); + setState(1494); expr(0); } } - setState(1495); + setState(1497); match(T__2); } break; case 192: { - _localctx = new HMACSHA1_funContext(_localctx); + _localctx = new HMACSHA256_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1497); - match(HMACSHA1); - setState(1498); - match(T__1); setState(1499); - expr(0); + match(HMACSHA256); setState(1500); - match(T__3); + match(T__1); setState(1501); expr(0); - setState(1504); + setState(1502); + match(T__3); + setState(1503); + expr(0); + setState(1506); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1502); + setState(1504); match(T__3); - setState(1503); + setState(1505); expr(0); } } - setState(1506); + setState(1508); match(T__2); } break; case 193: { - _localctx = new HMACSHA256_funContext(_localctx); + _localctx = new HMACSHA512_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1508); - match(HMACSHA256); - setState(1509); - match(T__1); setState(1510); - expr(0); + match(HMACSHA512); setState(1511); - match(T__3); + match(T__1); setState(1512); expr(0); - setState(1515); + setState(1513); + match(T__3); + setState(1514); + expr(0); + setState(1517); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1513); + setState(1515); match(T__3); - setState(1514); + setState(1516); expr(0); } } - setState(1517); + setState(1519); match(T__2); } break; case 194: { - _localctx = new HMACSHA512_funContext(_localctx); + _localctx = new TRIMSTART_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1519); - match(HMACSHA512); - setState(1520); - match(T__1); setState(1521); - expr(0); + match(TRIMSTART); setState(1522); - match(T__3); + match(T__1); setState(1523); expr(0); setState(1526); @@ -8038,11 +8019,11 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 195: { - _localctx = new TRIMSTART_funContext(_localctx); + _localctx = new TRIMEND_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(1530); - match(TRIMSTART); + match(TRIMEND); setState(1531); match(T__1); setState(1532); @@ -8065,63 +8046,36 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 196: { - _localctx = new TRIMEND_funContext(_localctx); + _localctx = new INDEXOF_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(1539); - match(TRIMEND); + match(INDEXOF); setState(1540); match(T__1); setState(1541); expr(0); - setState(1544); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1542); - match(T__3); - setState(1543); - expr(0); - } - } - - setState(1546); - match(T__2); - } - break; - case 197: - { - _localctx = new INDEXOF_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(1548); - match(INDEXOF); - setState(1549); - match(T__1); - setState(1550); - expr(0); - setState(1551); + setState(1542); match(T__3); - setState(1552); + setState(1543); expr(0); - setState(1559); + setState(1550); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1553); + setState(1544); match(T__3); - setState(1554); + setState(1545); expr(0); - setState(1557); + setState(1548); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1555); + setState(1546); match(T__3); - setState(1556); + setState(1547); expr(0); } } @@ -8129,42 +8083,42 @@ private ExprContext expr(int _p) throws RecognitionException { } } - setState(1561); + setState(1552); match(T__2); } break; - case 198: + case 197: { _localctx = new LASTINDEXOF_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1563); + setState(1554); match(LASTINDEXOF); - setState(1564); + setState(1555); match(T__1); - setState(1565); + setState(1556); expr(0); - setState(1566); + setState(1557); match(T__3); - setState(1567); + setState(1558); expr(0); - setState(1574); + setState(1565); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1568); + setState(1559); match(T__3); - setState(1569); + setState(1560); expr(0); - setState(1572); + setState(1563); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1570); + setState(1561); match(T__3); - setState(1571); + setState(1562); expr(0); } } @@ -8172,211 +8126,211 @@ private ExprContext expr(int _p) throws RecognitionException { } } - setState(1576); + setState(1567); match(T__2); } break; - case 199: + case 198: { _localctx = new SPLIT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1578); + setState(1569); match(SPLIT); - setState(1579); + setState(1570); match(T__1); - setState(1580); + setState(1571); expr(0); - setState(1581); + setState(1572); match(T__3); - setState(1582); + setState(1573); expr(0); - setState(1583); + setState(1574); match(T__2); } break; - case 200: + case 199: { _localctx = new JOIN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1585); + setState(1576); match(JOIN); - setState(1586); + setState(1577); match(T__1); - setState(1587); + setState(1578); expr(0); - setState(1590); + setState(1581); _errHandler.sync(this); _la = _input.LA(1); do { { { - setState(1588); + setState(1579); match(T__3); - setState(1589); + setState(1580); expr(0); } } - setState(1592); + setState(1583); _errHandler.sync(this); _la = _input.LA(1); } while ( _la==T__3 ); - setState(1594); + setState(1585); match(T__2); } break; - case 201: + case 200: { _localctx = new SUBSTRING_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1596); + setState(1587); match(SUBSTRING); - setState(1597); + setState(1588); match(T__1); - setState(1598); + setState(1589); expr(0); - setState(1599); + setState(1590); match(T__3); - setState(1600); + setState(1591); expr(0); - setState(1603); + setState(1594); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1601); + setState(1592); match(T__3); - setState(1602); + setState(1593); expr(0); } } - setState(1605); + setState(1596); match(T__2); } break; - case 202: + case 201: { _localctx = new STARTSWITH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1607); + setState(1598); match(STARTSWITH); - setState(1608); + setState(1599); match(T__1); - setState(1609); + setState(1600); expr(0); - setState(1610); + setState(1601); match(T__3); - setState(1611); + setState(1602); expr(0); - setState(1614); + setState(1605); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1612); + setState(1603); match(T__3); - setState(1613); + setState(1604); expr(0); } } - setState(1616); + setState(1607); match(T__2); } break; - case 203: + case 202: { _localctx = new ENDSWITH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1618); + setState(1609); match(ENDSWITH); - setState(1619); + setState(1610); match(T__1); - setState(1620); + setState(1611); expr(0); - setState(1621); + setState(1612); match(T__3); - setState(1622); + setState(1613); expr(0); - setState(1625); + setState(1616); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1623); + setState(1614); match(T__3); - setState(1624); + setState(1615); expr(0); } } - setState(1627); + setState(1618); match(T__2); } break; - case 204: + case 203: { _localctx = new ISNULLOREMPTY_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1629); + setState(1620); match(ISNULLOREMPTY); - setState(1630); + setState(1621); match(T__1); - setState(1631); + setState(1622); expr(0); - setState(1632); + setState(1623); match(T__2); } break; - case 205: + case 204: { _localctx = new ISNULLORWHITESPACE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1634); + setState(1625); match(ISNULLORWHITESPACE); - setState(1635); + setState(1626); match(T__1); - setState(1636); + setState(1627); expr(0); - setState(1637); + setState(1628); match(T__2); } break; - case 206: + case 205: { _localctx = new REMOVESTART_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1639); + setState(1630); match(REMOVESTART); - setState(1640); + setState(1631); match(T__1); - setState(1641); + setState(1632); expr(0); - setState(1648); + setState(1639); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1642); + setState(1633); match(T__3); - setState(1643); + setState(1634); expr(0); - setState(1646); + setState(1637); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1644); + setState(1635); match(T__3); - setState(1645); + setState(1636); expr(0); } } @@ -8384,38 +8338,38 @@ private ExprContext expr(int _p) throws RecognitionException { } } - setState(1650); + setState(1641); match(T__2); } break; - case 207: + case 206: { _localctx = new REMOVEEND_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1652); + setState(1643); match(REMOVEEND); - setState(1653); + setState(1644); match(T__1); - setState(1654); + setState(1645); expr(0); - setState(1661); + setState(1652); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1655); + setState(1646); match(T__3); - setState(1656); + setState(1647); expr(0); - setState(1659); + setState(1650); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1657); + setState(1648); match(T__3); - setState(1658); + setState(1649); expr(0); } } @@ -8423,551 +8377,496 @@ private ExprContext expr(int _p) throws RecognitionException { } } - setState(1663); + setState(1654); match(T__2); } break; - case 208: + case 207: { _localctx = new JSON_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1665); + setState(1656); match(JSON); - setState(1666); + setState(1657); match(T__1); - setState(1667); + setState(1658); expr(0); - setState(1668); + setState(1659); match(T__2); } break; - case 209: + case 208: { - _localctx = new VLOOKUP_funContext(_localctx); + _localctx = new LOOKCEILING_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1670); - match(VLOOKUP); - setState(1671); + setState(1661); + match(LOOKCEILING); + setState(1662); match(T__1); - setState(1672); + setState(1663); expr(0); - setState(1673); + setState(1664); match(T__3); - setState(1674); + setState(1665); expr(0); - setState(1675); - match(T__3); - setState(1676); - expr(0); - setState(1679); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1677); - match(T__3); - setState(1678); - expr(0); - } - } - - setState(1681); + setState(1666); match(T__2); } break; - case 210: + case 209: { - _localctx = new LOOKUP_funContext(_localctx); + _localctx = new LOOKFLOOR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1683); - match(LOOKUP); - setState(1684); + setState(1668); + match(LOOKFLOOR); + setState(1669); match(T__1); - setState(1685); - expr(0); - setState(1686); - match(T__3); - setState(1687); + setState(1670); expr(0); - setState(1688); + setState(1671); match(T__3); - setState(1689); + setState(1672); expr(0); - setState(1690); + setState(1673); match(T__2); } break; - case 211: + case 210: { _localctx = new DiyFunction_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1692); + setState(1675); match(PARAMETER); - setState(1693); + setState(1676); match(T__1); - setState(1702); + setState(1685); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1694); + setState(1677); expr(0); - setState(1699); + setState(1682); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(1695); + setState(1678); match(T__3); - setState(1696); + setState(1679); expr(0); } } - setState(1701); + setState(1684); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(1704); + setState(1687); match(T__2); } break; - case 212: + case 211: { _localctx = new ADDYEARS_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1705); + setState(1688); match(ADDYEARS); - setState(1706); + setState(1689); match(T__1); - setState(1707); + setState(1690); expr(0); - setState(1708); + setState(1691); match(T__3); - setState(1709); + setState(1692); expr(0); - setState(1710); + setState(1693); match(T__2); } break; - case 213: + case 212: { _localctx = new ADDMONTHS_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1712); + setState(1695); match(ADDMONTHS); - setState(1713); + setState(1696); match(T__1); - setState(1714); + setState(1697); expr(0); - setState(1715); + setState(1698); match(T__3); - setState(1716); + setState(1699); expr(0); - setState(1717); + setState(1700); match(T__2); } break; - case 214: + case 213: { _localctx = new ADDDAYS_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1719); + setState(1702); match(ADDDAYS); - setState(1720); + setState(1703); match(T__1); - setState(1721); + setState(1704); expr(0); - setState(1722); + setState(1705); match(T__3); - setState(1723); + setState(1706); expr(0); - setState(1724); + setState(1707); match(T__2); } break; - case 215: + case 214: { _localctx = new ADDHOURS_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1726); + setState(1709); match(ADDHOURS); - setState(1727); + setState(1710); match(T__1); - setState(1728); + setState(1711); expr(0); - setState(1729); + setState(1712); match(T__3); - setState(1730); + setState(1713); expr(0); - setState(1731); + setState(1714); match(T__2); } break; - case 216: + case 215: { _localctx = new ADDMINUTES_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1733); + setState(1716); match(ADDMINUTES); - setState(1734); + setState(1717); match(T__1); - setState(1735); + setState(1718); expr(0); - setState(1736); + setState(1719); match(T__3); - setState(1737); + setState(1720); expr(0); - setState(1738); + setState(1721); match(T__2); } break; - case 217: + case 216: { _localctx = new ADDSECONDS_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1740); + setState(1723); match(ADDSECONDS); - setState(1741); + setState(1724); match(T__1); - setState(1742); + setState(1725); expr(0); - setState(1743); + setState(1726); match(T__3); - setState(1744); + setState(1727); expr(0); - setState(1745); + setState(1728); match(T__2); } break; - case 218: + case 217: { _localctx = new TIMESTAMP_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1747); + setState(1730); match(TIMESTAMP); - setState(1748); + setState(1731); match(T__1); - setState(1749); + setState(1732); expr(0); - setState(1752); + setState(1735); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1750); + setState(1733); match(T__3); - setState(1751); + setState(1734); expr(0); } } - setState(1754); + setState(1737); match(T__2); } break; - case 219: + case 218: { _localctx = new PARAM_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1756); + setState(1739); match(PARAM); - setState(1757); + setState(1740); match(T__1); - setState(1758); + setState(1741); expr(0); - setState(1761); + setState(1744); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1759); + setState(1742); match(T__3); - setState(1760); + setState(1743); expr(0); } } - setState(1763); + setState(1746); match(T__2); } break; - case 220: + case 219: { _localctx = new ERROR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1765); + setState(1748); match(ERROR); - setState(1766); + setState(1749); match(T__1); - setState(1768); + setState(1751); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1767); + setState(1750); expr(0); } } - setState(1770); + setState(1753); match(T__2); } break; - case 221: + case 220: { _localctx = new HAS_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1771); + setState(1754); match(HAS); - setState(1772); + setState(1755); match(T__1); - setState(1773); + setState(1756); expr(0); - setState(1774); + setState(1757); match(T__3); - setState(1775); + setState(1758); expr(0); - setState(1776); + setState(1759); match(T__2); } break; - case 222: + case 221: { _localctx = new HASVALUE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1778); + setState(1761); match(HASVALUE); - setState(1779); + setState(1762); match(T__1); - setState(1780); + setState(1763); expr(0); - setState(1781); + setState(1764); match(T__3); - setState(1782); + setState(1765); expr(0); - setState(1783); + setState(1766); match(T__2); } break; - case 223: + case 222: { _localctx = new ArrayJson_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1785); + setState(1768); match(T__26); - setState(1786); + setState(1769); arrayJson(); - setState(1791); + setState(1774); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,100,_ctx); + _alt = getInterpreter().adaptivePredict(_input,98,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(1787); + setState(1770); match(T__3); - setState(1788); + setState(1771); arrayJson(); } } } - setState(1793); + setState(1776); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,100,_ctx); + _alt = getInterpreter().adaptivePredict(_input,98,_ctx); } - setState(1797); + setState(1780); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(1794); + setState(1777); match(T__3); } } - setState(1799); + setState(1782); _errHandler.sync(this); _la = _input.LA(1); } - setState(1800); + setState(1783); match(T__27); } break; - case 224: + case 223: { _localctx = new Array_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1802); - match(T__26); - setState(1803); + setState(1785); + match(T__4); + setState(1786); expr(0); - setState(1808); + setState(1791); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,102,_ctx); + _alt = getInterpreter().adaptivePredict(_input,100,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { { { - setState(1804); + setState(1787); match(T__3); - setState(1805); + setState(1788); expr(0); } } } - setState(1810); + setState(1793); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,102,_ctx); + _alt = getInterpreter().adaptivePredict(_input,100,_ctx); } - setState(1814); + setState(1797); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(1811); + setState(1794); match(T__3); } } - setState(1816); + setState(1799); _errHandler.sync(this); _la = _input.LA(1); } - setState(1817); - match(T__27); + setState(1800); + match(T__5); } break; - case 225: + case 224: { _localctx = new Version_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1819); + setState(1802); match(ALGORITHMVERSION); } break; - case 226: - { - _localctx = new PARAMETER_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(1820); - match(T__4); - setState(1821); - match(PARAMETER); - setState(1822); - match(T__5); - } - break; - case 227: - { - _localctx = new PARAMETER_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(1823); - match(T__4); - setState(1824); - expr(0); - setState(1825); - match(T__5); - } - break; - case 228: + case 225: { _localctx = new PARAMETER_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1827); + setState(1803); match(PARAMETER); } break; - case 229: - { - _localctx = new PARAMETER_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(1828); - match(PARAMETER2); - } - break; - case 230: + case 226: { _localctx = new NUM_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1829); + setState(1804); num(); - setState(1831); + setState(1806); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,104,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,102,_ctx) ) { case 1: { - setState(1830); + setState(1805); unit(); } break; } } break; - case 231: + case 227: { _localctx = new STRING_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1833); + setState(1808); match(STRING); } break; - case 232: + case 228: { _localctx = new NULL_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1834); + setState(1809); match(NULL); } break; } _ctx.stop = _input.LT(-1); - setState(2650); + setState(2594); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,163,_ctx); + _alt = getInterpreter().adaptivePredict(_input,159,_ctx); while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { if ( _alt==1 ) { if ( _parseListeners!=null ) triggerExitRuleEvent(); _prevctx = _localctx; { - setState(2648); + setState(2592); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,162,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,158,_ctx) ) { case 1: { _localctx = new MulDiv_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1837); - if (!(precpred(_ctx, 237))) throw new FailedPredicateException(this, "precpred(_ctx, 237)"); - setState(1838); + setState(1812); + if (!(precpred(_ctx, 233))) throw new FailedPredicateException(this, "precpred(_ctx, 233)"); + setState(1813); ((MulDiv_funContext)_localctx).op = _input.LT(1); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 1792L) != 0)) ) { @@ -8978,17 +8877,17 @@ private ExprContext expr(int _p) throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(1839); - expr(238); + setState(1814); + expr(234); } break; case 2: { _localctx = new AddSub_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1840); - if (!(precpred(_ctx, 236))) throw new FailedPredicateException(this, "precpred(_ctx, 236)"); - setState(1841); + setState(1815); + if (!(precpred(_ctx, 232))) throw new FailedPredicateException(this, "precpred(_ctx, 232)"); + setState(1816); ((AddSub_funContext)_localctx).op = _input.LT(1); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 536877056L) != 0)) ) { @@ -8999,17 +8898,17 @@ private ExprContext expr(int _p) throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(1842); - expr(237); + setState(1817); + expr(233); } break; case 3: { _localctx = new Judge_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1843); - if (!(precpred(_ctx, 235))) throw new FailedPredicateException(this, "precpred(_ctx, 235)"); - setState(1844); + setState(1818); + if (!(precpred(_ctx, 231))) throw new FailedPredicateException(this, "precpred(_ctx, 231)"); + setState(1819); ((Judge_funContext)_localctx).op = _input.LT(1); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 122880L) != 0)) ) { @@ -9020,17 +8919,17 @@ private ExprContext expr(int _p) throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(1845); - expr(236); + setState(1820); + expr(232); } break; case 4: { _localctx = new Judge_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1846); - if (!(precpred(_ctx, 234))) throw new FailedPredicateException(this, "precpred(_ctx, 234)"); - setState(1847); + setState(1821); + if (!(precpred(_ctx, 230))) throw new FailedPredicateException(this, "precpred(_ctx, 230)"); + setState(1822); ((Judge_funContext)_localctx).op = _input.LT(1); _la = _input.LA(1); if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 8257536L) != 0)) ) { @@ -9041,17 +8940,17 @@ private ExprContext expr(int _p) throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(1848); - expr(235); + setState(1823); + expr(231); } break; case 5: { _localctx = new AndOr_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1849); - if (!(precpred(_ctx, 233))) throw new FailedPredicateException(this, "precpred(_ctx, 233)"); - setState(1850); + setState(1824); + if (!(precpred(_ctx, 229))) throw new FailedPredicateException(this, "precpred(_ctx, 229)"); + setState(1825); ((AndOr_funContext)_localctx).op = _input.LT(1); _la = _input.LA(1); if ( !(_la==T__22 || _la==AND) ) { @@ -9062,17 +8961,17 @@ private ExprContext expr(int _p) throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(1851); - expr(234); + setState(1826); + expr(230); } break; case 6: { _localctx = new AndOr_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1852); - if (!(precpred(_ctx, 232))) throw new FailedPredicateException(this, "precpred(_ctx, 232)"); - setState(1853); + setState(1827); + if (!(precpred(_ctx, 228))) throw new FailedPredicateException(this, "precpred(_ctx, 228)"); + setState(1828); ((AndOr_funContext)_localctx).op = _input.LT(1); _la = _input.LA(1); if ( !(_la==T__23 || _la==OR) ) { @@ -9083,39 +8982,39 @@ private ExprContext expr(int _p) throws RecognitionException { _errHandler.reportMatch(this); consume(); } - setState(1854); - expr(233); + setState(1829); + expr(229); } break; case 7: { _localctx = new IF_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1855); - if (!(precpred(_ctx, 231))) throw new FailedPredicateException(this, "precpred(_ctx, 231)"); - setState(1856); + setState(1830); + if (!(precpred(_ctx, 227))) throw new FailedPredicateException(this, "precpred(_ctx, 227)"); + setState(1831); match(T__24); - setState(1857); + setState(1832); expr(0); - setState(1858); + setState(1833); match(T__25); - setState(1859); - expr(232); + setState(1834); + expr(228); } break; case 8: { _localctx = new ISNUMBER_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1861); - if (!(precpred(_ctx, 343))) throw new FailedPredicateException(this, "precpred(_ctx, 343)"); - setState(1862); + setState(1836); + if (!(precpred(_ctx, 336))) throw new FailedPredicateException(this, "precpred(_ctx, 336)"); + setState(1837); match(T__0); - setState(1863); + setState(1838); match(ISNUMBER); - setState(1864); + setState(1839); match(T__1); - setState(1865); + setState(1840); match(T__2); } break; @@ -9123,15 +9022,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new ISTEXT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1866); - if (!(precpred(_ctx, 342))) throw new FailedPredicateException(this, "precpred(_ctx, 342)"); - setState(1867); + setState(1841); + if (!(precpred(_ctx, 335))) throw new FailedPredicateException(this, "precpred(_ctx, 335)"); + setState(1842); match(T__0); - setState(1868); + setState(1843); match(ISTEXT); - setState(1869); + setState(1844); match(T__1); - setState(1870); + setState(1845); match(T__2); } break; @@ -9139,15 +9038,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new ISNONTEXT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1871); - if (!(precpred(_ctx, 341))) throw new FailedPredicateException(this, "precpred(_ctx, 341)"); - setState(1872); + setState(1846); + if (!(precpred(_ctx, 334))) throw new FailedPredicateException(this, "precpred(_ctx, 334)"); + setState(1847); match(T__0); - setState(1873); + setState(1848); match(ISNONTEXT); - setState(1874); + setState(1849); match(T__1); - setState(1875); + setState(1850); match(T__2); } break; @@ -9155,15 +9054,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new ISLOGICAL_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1876); - if (!(precpred(_ctx, 340))) throw new FailedPredicateException(this, "precpred(_ctx, 340)"); - setState(1877); + setState(1851); + if (!(precpred(_ctx, 333))) throw new FailedPredicateException(this, "precpred(_ctx, 333)"); + setState(1852); match(T__0); - setState(1878); + setState(1853); match(ISLOGICAL); - setState(1879); + setState(1854); match(T__1); - setState(1880); + setState(1855); match(T__2); } break; @@ -9171,15 +9070,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new ISEVEN_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1881); - if (!(precpred(_ctx, 339))) throw new FailedPredicateException(this, "precpred(_ctx, 339)"); - setState(1882); + setState(1856); + if (!(precpred(_ctx, 332))) throw new FailedPredicateException(this, "precpred(_ctx, 332)"); + setState(1857); match(T__0); - setState(1883); + setState(1858); match(ISEVEN); - setState(1884); + setState(1859); match(T__1); - setState(1885); + setState(1860); match(T__2); } break; @@ -9187,15 +9086,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new ISODD_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1886); - if (!(precpred(_ctx, 338))) throw new FailedPredicateException(this, "precpred(_ctx, 338)"); - setState(1887); + setState(1861); + if (!(precpred(_ctx, 331))) throw new FailedPredicateException(this, "precpred(_ctx, 331)"); + setState(1862); match(T__0); - setState(1888); + setState(1863); match(ISODD); - setState(1889); + setState(1864); match(T__1); - setState(1890); + setState(1865); match(T__2); } break; @@ -9203,25 +9102,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new ISERROR_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1891); - if (!(precpred(_ctx, 337))) throw new FailedPredicateException(this, "precpred(_ctx, 337)"); - setState(1892); + setState(1866); + if (!(precpred(_ctx, 330))) throw new FailedPredicateException(this, "precpred(_ctx, 330)"); + setState(1867); match(T__0); - setState(1893); + setState(1868); match(ISERROR); - setState(1894); + setState(1869); match(T__1); - setState(1896); + setState(1871); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1895); + setState(1870); expr(0); } } - setState(1898); + setState(1873); match(T__2); } break; @@ -9229,25 +9128,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new ISNULL_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1899); - if (!(precpred(_ctx, 336))) throw new FailedPredicateException(this, "precpred(_ctx, 336)"); - setState(1900); + setState(1874); + if (!(precpred(_ctx, 329))) throw new FailedPredicateException(this, "precpred(_ctx, 329)"); + setState(1875); match(T__0); - setState(1901); + setState(1876); match(ISNULL); - setState(1902); + setState(1877); match(T__1); - setState(1904); + setState(1879); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1903); + setState(1878); expr(0); } } - setState(1906); + setState(1881); match(T__2); } break; @@ -9255,25 +9154,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new ISNULLORERROR_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1907); - if (!(precpred(_ctx, 335))) throw new FailedPredicateException(this, "precpred(_ctx, 335)"); - setState(1908); + setState(1882); + if (!(precpred(_ctx, 328))) throw new FailedPredicateException(this, "precpred(_ctx, 328)"); + setState(1883); match(T__0); - setState(1909); + setState(1884); match(ISNULLORERROR); - setState(1910); + setState(1885); match(T__1); - setState(1912); + setState(1887); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1911); + setState(1886); expr(0); } } - setState(1914); + setState(1889); match(T__2); } break; @@ -9281,26 +9180,26 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new DEC2BIN_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1915); - if (!(precpred(_ctx, 334))) throw new FailedPredicateException(this, "precpred(_ctx, 334)"); - setState(1916); + setState(1890); + if (!(precpred(_ctx, 327))) throw new FailedPredicateException(this, "precpred(_ctx, 327)"); + setState(1891); match(T__0); - setState(1917); + setState(1892); match(DEC2BIN); { - setState(1918); + setState(1893); match(T__1); - setState(1920); + setState(1895); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1919); + setState(1894); expr(0); } } - setState(1922); + setState(1897); match(T__2); } } @@ -9309,26 +9208,26 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new DEC2HEX_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1923); - if (!(precpred(_ctx, 333))) throw new FailedPredicateException(this, "precpred(_ctx, 333)"); - setState(1924); + setState(1898); + if (!(precpred(_ctx, 326))) throw new FailedPredicateException(this, "precpred(_ctx, 326)"); + setState(1899); match(T__0); - setState(1925); + setState(1900); match(DEC2HEX); { - setState(1926); + setState(1901); match(T__1); - setState(1928); + setState(1903); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1927); + setState(1902); expr(0); } } - setState(1930); + setState(1905); match(T__2); } } @@ -9337,26 +9236,26 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new DEC2OCT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1931); - if (!(precpred(_ctx, 332))) throw new FailedPredicateException(this, "precpred(_ctx, 332)"); - setState(1932); + setState(1906); + if (!(precpred(_ctx, 325))) throw new FailedPredicateException(this, "precpred(_ctx, 325)"); + setState(1907); match(T__0); - setState(1933); + setState(1908); match(DEC2OCT); { - setState(1934); + setState(1909); match(T__1); - setState(1936); + setState(1911); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1935); + setState(1910); expr(0); } } - setState(1938); + setState(1913); match(T__2); } } @@ -9365,26 +9264,26 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new HEX2BIN_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1939); - if (!(precpred(_ctx, 331))) throw new FailedPredicateException(this, "precpred(_ctx, 331)"); - setState(1940); + setState(1914); + if (!(precpred(_ctx, 324))) throw new FailedPredicateException(this, "precpred(_ctx, 324)"); + setState(1915); match(T__0); - setState(1941); + setState(1916); match(HEX2BIN); { - setState(1942); + setState(1917); match(T__1); - setState(1944); + setState(1919); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1943); + setState(1918); expr(0); } } - setState(1946); + setState(1921); match(T__2); } } @@ -9393,16 +9292,16 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new HEX2DEC_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1947); - if (!(precpred(_ctx, 330))) throw new FailedPredicateException(this, "precpred(_ctx, 330)"); - setState(1948); + setState(1922); + if (!(precpred(_ctx, 323))) throw new FailedPredicateException(this, "precpred(_ctx, 323)"); + setState(1923); match(T__0); - setState(1949); + setState(1924); match(HEX2DEC); { - setState(1950); + setState(1925); match(T__1); - setState(1951); + setState(1926); match(T__2); } } @@ -9411,26 +9310,26 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new HEX2OCT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1952); - if (!(precpred(_ctx, 329))) throw new FailedPredicateException(this, "precpred(_ctx, 329)"); - setState(1953); + setState(1927); + if (!(precpred(_ctx, 322))) throw new FailedPredicateException(this, "precpred(_ctx, 322)"); + setState(1928); match(T__0); - setState(1954); + setState(1929); match(HEX2OCT); { - setState(1955); + setState(1930); match(T__1); - setState(1957); + setState(1932); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1956); + setState(1931); expr(0); } } - setState(1959); + setState(1934); match(T__2); } } @@ -9439,26 +9338,26 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new OCT2BIN_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1960); - if (!(precpred(_ctx, 328))) throw new FailedPredicateException(this, "precpred(_ctx, 328)"); - setState(1961); + setState(1935); + if (!(precpred(_ctx, 321))) throw new FailedPredicateException(this, "precpred(_ctx, 321)"); + setState(1936); match(T__0); - setState(1962); + setState(1937); match(OCT2BIN); { - setState(1963); + setState(1938); match(T__1); - setState(1965); + setState(1940); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1964); + setState(1939); expr(0); } } - setState(1967); + setState(1942); match(T__2); } } @@ -9467,16 +9366,16 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new OCT2DEC_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1968); - if (!(precpred(_ctx, 327))) throw new FailedPredicateException(this, "precpred(_ctx, 327)"); - setState(1969); + setState(1943); + if (!(precpred(_ctx, 320))) throw new FailedPredicateException(this, "precpred(_ctx, 320)"); + setState(1944); match(T__0); - setState(1970); + setState(1945); match(OCT2DEC); { - setState(1971); + setState(1946); match(T__1); - setState(1972); + setState(1947); match(T__2); } } @@ -9485,26 +9384,26 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new OCT2HEX_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1973); - if (!(precpred(_ctx, 326))) throw new FailedPredicateException(this, "precpred(_ctx, 326)"); - setState(1974); + setState(1948); + if (!(precpred(_ctx, 319))) throw new FailedPredicateException(this, "precpred(_ctx, 319)"); + setState(1949); match(T__0); - setState(1975); + setState(1950); match(OCT2HEX); { - setState(1976); + setState(1951); match(T__1); - setState(1978); + setState(1953); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1977); + setState(1952); expr(0); } } - setState(1980); + setState(1955); match(T__2); } } @@ -9513,26 +9412,26 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new BIN2OCT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1981); - if (!(precpred(_ctx, 325))) throw new FailedPredicateException(this, "precpred(_ctx, 325)"); - setState(1982); + setState(1956); + if (!(precpred(_ctx, 318))) throw new FailedPredicateException(this, "precpred(_ctx, 318)"); + setState(1957); match(T__0); - setState(1983); + setState(1958); match(BIN2OCT); { - setState(1984); + setState(1959); match(T__1); - setState(1986); + setState(1961); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1985); + setState(1960); expr(0); } } - setState(1988); + setState(1963); match(T__2); } } @@ -9541,16 +9440,16 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new BIN2DEC_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1989); - if (!(precpred(_ctx, 324))) throw new FailedPredicateException(this, "precpred(_ctx, 324)"); - setState(1990); + setState(1964); + if (!(precpred(_ctx, 317))) throw new FailedPredicateException(this, "precpred(_ctx, 317)"); + setState(1965); match(T__0); - setState(1991); + setState(1966); match(BIN2DEC); { - setState(1992); + setState(1967); match(T__1); - setState(1993); + setState(1968); match(T__2); } } @@ -9559,26 +9458,26 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new BIN2HEX_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1994); - if (!(precpred(_ctx, 323))) throw new FailedPredicateException(this, "precpred(_ctx, 323)"); - setState(1995); + setState(1969); + if (!(precpred(_ctx, 316))) throw new FailedPredicateException(this, "precpred(_ctx, 316)"); + setState(1970); match(T__0); - setState(1996); + setState(1971); match(BIN2HEX); { - setState(1997); + setState(1972); match(T__1); - setState(1999); + setState(1974); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(1998); + setState(1973); expr(0); } } - setState(2001); + setState(1976); match(T__2); } } @@ -9587,15 +9486,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new INT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2002); - if (!(precpred(_ctx, 322))) throw new FailedPredicateException(this, "precpred(_ctx, 322)"); - setState(2003); + setState(1977); + if (!(precpred(_ctx, 315))) throw new FailedPredicateException(this, "precpred(_ctx, 315)"); + setState(1978); match(T__0); - setState(2004); + setState(1979); match(INT); - setState(2005); + setState(1980); match(T__1); - setState(2006); + setState(1981); match(T__2); } break; @@ -9603,15 +9502,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new ASC_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2007); - if (!(precpred(_ctx, 321))) throw new FailedPredicateException(this, "precpred(_ctx, 321)"); - setState(2008); + setState(1982); + if (!(precpred(_ctx, 314))) throw new FailedPredicateException(this, "precpred(_ctx, 314)"); + setState(1983); match(T__0); - setState(2009); + setState(1984); match(ASC); - setState(2010); + setState(1985); match(T__1); - setState(2011); + setState(1986); match(T__2); } break; @@ -9619,15 +9518,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new JIS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2012); - if (!(precpred(_ctx, 320))) throw new FailedPredicateException(this, "precpred(_ctx, 320)"); - setState(2013); + setState(1987); + if (!(precpred(_ctx, 313))) throw new FailedPredicateException(this, "precpred(_ctx, 313)"); + setState(1988); match(T__0); - setState(2014); + setState(1989); match(JIS); - setState(2015); + setState(1990); match(T__1); - setState(2016); + setState(1991); match(T__2); } break; @@ -9635,15 +9534,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new CHAR_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2017); - if (!(precpred(_ctx, 319))) throw new FailedPredicateException(this, "precpred(_ctx, 319)"); - setState(2018); + setState(1992); + if (!(precpred(_ctx, 312))) throw new FailedPredicateException(this, "precpred(_ctx, 312)"); + setState(1993); match(T__0); - setState(2019); + setState(1994); match(CHAR); - setState(2020); + setState(1995); match(T__1); - setState(2021); + setState(1996); match(T__2); } break; @@ -9651,15 +9550,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new CLEAN_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2022); - if (!(precpred(_ctx, 318))) throw new FailedPredicateException(this, "precpred(_ctx, 318)"); - setState(2023); + setState(1997); + if (!(precpred(_ctx, 311))) throw new FailedPredicateException(this, "precpred(_ctx, 311)"); + setState(1998); match(T__0); - setState(2024); + setState(1999); match(CLEAN); - setState(2025); + setState(2000); match(T__1); - setState(2026); + setState(2001); match(T__2); } break; @@ -9667,15 +9566,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new CODE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2027); - if (!(precpred(_ctx, 317))) throw new FailedPredicateException(this, "precpred(_ctx, 317)"); - setState(2028); + setState(2002); + if (!(precpred(_ctx, 310))) throw new FailedPredicateException(this, "precpred(_ctx, 310)"); + setState(2003); match(T__0); - setState(2029); + setState(2004); match(CODE); - setState(2030); + setState(2005); match(T__1); - setState(2031); + setState(2006); match(T__2); } break; @@ -9683,41 +9582,41 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new CONCATENATE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2032); - if (!(precpred(_ctx, 316))) throw new FailedPredicateException(this, "precpred(_ctx, 316)"); - setState(2033); + setState(2007); + if (!(precpred(_ctx, 309))) throw new FailedPredicateException(this, "precpred(_ctx, 309)"); + setState(2008); match(T__0); - setState(2034); + setState(2009); match(CONCATENATE); - setState(2035); + setState(2010); match(T__1); - setState(2044); + setState(2019); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2036); + setState(2011); expr(0); - setState(2041); + setState(2016); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(2037); + setState(2012); match(T__3); - setState(2038); + setState(2013); expr(0); } } - setState(2043); + setState(2018); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(2046); + setState(2021); match(T__2); } break; @@ -9725,17 +9624,17 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new EXACT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2047); - if (!(precpred(_ctx, 315))) throw new FailedPredicateException(this, "precpred(_ctx, 315)"); - setState(2048); + setState(2022); + if (!(precpred(_ctx, 308))) throw new FailedPredicateException(this, "precpred(_ctx, 308)"); + setState(2023); match(T__0); - setState(2049); + setState(2024); match(EXACT); - setState(2050); + setState(2025); match(T__1); - setState(2051); + setState(2026); expr(0); - setState(2052); + setState(2027); match(T__2); } break; @@ -9743,29 +9642,29 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new FIND_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2054); - if (!(precpred(_ctx, 314))) throw new FailedPredicateException(this, "precpred(_ctx, 314)"); - setState(2055); + setState(2029); + if (!(precpred(_ctx, 307))) throw new FailedPredicateException(this, "precpred(_ctx, 307)"); + setState(2030); match(T__0); - setState(2056); + setState(2031); match(FIND); - setState(2057); + setState(2032); match(T__1); - setState(2058); + setState(2033); expr(0); - setState(2061); + setState(2036); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2059); + setState(2034); match(T__3); - setState(2060); + setState(2035); expr(0); } } - setState(2063); + setState(2038); match(T__2); } break; @@ -9773,25 +9672,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new LEFT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2065); - if (!(precpred(_ctx, 313))) throw new FailedPredicateException(this, "precpred(_ctx, 313)"); - setState(2066); + setState(2040); + if (!(precpred(_ctx, 306))) throw new FailedPredicateException(this, "precpred(_ctx, 306)"); + setState(2041); match(T__0); - setState(2067); + setState(2042); match(LEFT); - setState(2068); + setState(2043); match(T__1); - setState(2070); + setState(2045); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2069); + setState(2044); expr(0); } } - setState(2072); + setState(2047); match(T__2); } break; @@ -9799,15 +9698,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new LEN_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2073); - if (!(precpred(_ctx, 312))) throw new FailedPredicateException(this, "precpred(_ctx, 312)"); - setState(2074); + setState(2048); + if (!(precpred(_ctx, 305))) throw new FailedPredicateException(this, "precpred(_ctx, 305)"); + setState(2049); match(T__0); - setState(2075); + setState(2050); match(LEN); - setState(2076); + setState(2051); match(T__1); - setState(2077); + setState(2052); match(T__2); } break; @@ -9815,15 +9714,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new LOWER_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2078); - if (!(precpred(_ctx, 311))) throw new FailedPredicateException(this, "precpred(_ctx, 311)"); - setState(2079); + setState(2053); + if (!(precpred(_ctx, 304))) throw new FailedPredicateException(this, "precpred(_ctx, 304)"); + setState(2054); match(T__0); - setState(2080); + setState(2055); match(LOWER); - setState(2081); + setState(2056); match(T__1); - setState(2082); + setState(2057); match(T__2); } break; @@ -9831,21 +9730,21 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new MID_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2083); - if (!(precpred(_ctx, 310))) throw new FailedPredicateException(this, "precpred(_ctx, 310)"); - setState(2084); + setState(2058); + if (!(precpred(_ctx, 303))) throw new FailedPredicateException(this, "precpred(_ctx, 303)"); + setState(2059); match(T__0); - setState(2085); + setState(2060); match(MID); - setState(2086); + setState(2061); match(T__1); - setState(2087); + setState(2062); expr(0); - setState(2088); + setState(2063); match(T__3); - setState(2089); + setState(2064); expr(0); - setState(2090); + setState(2065); match(T__2); } break; @@ -9853,15 +9752,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new PROPER_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2092); - if (!(precpred(_ctx, 309))) throw new FailedPredicateException(this, "precpred(_ctx, 309)"); - setState(2093); + setState(2067); + if (!(precpred(_ctx, 302))) throw new FailedPredicateException(this, "precpred(_ctx, 302)"); + setState(2068); match(T__0); - setState(2094); + setState(2069); match(PROPER); - setState(2095); + setState(2070); match(T__1); - setState(2096); + setState(2071); match(T__2); } break; @@ -9869,33 +9768,33 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new REPLACE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2097); - if (!(precpred(_ctx, 308))) throw new FailedPredicateException(this, "precpred(_ctx, 308)"); - setState(2098); + setState(2072); + if (!(precpred(_ctx, 301))) throw new FailedPredicateException(this, "precpred(_ctx, 301)"); + setState(2073); match(T__0); - setState(2099); + setState(2074); match(REPLACE); - setState(2100); + setState(2075); match(T__1); - setState(2101); + setState(2076); expr(0); - setState(2102); + setState(2077); match(T__3); - setState(2103); + setState(2078); expr(0); - setState(2106); + setState(2081); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2104); + setState(2079); match(T__3); - setState(2105); + setState(2080); expr(0); } } - setState(2108); + setState(2083); match(T__2); } break; @@ -9903,17 +9802,17 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new REPT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2110); - if (!(precpred(_ctx, 307))) throw new FailedPredicateException(this, "precpred(_ctx, 307)"); - setState(2111); + setState(2085); + if (!(precpred(_ctx, 300))) throw new FailedPredicateException(this, "precpred(_ctx, 300)"); + setState(2086); match(T__0); - setState(2112); + setState(2087); match(REPT); - setState(2113); + setState(2088); match(T__1); - setState(2114); + setState(2089); expr(0); - setState(2115); + setState(2090); match(T__2); } break; @@ -9921,25 +9820,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new RIGHT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2117); - if (!(precpred(_ctx, 306))) throw new FailedPredicateException(this, "precpred(_ctx, 306)"); - setState(2118); + setState(2092); + if (!(precpred(_ctx, 299))) throw new FailedPredicateException(this, "precpred(_ctx, 299)"); + setState(2093); match(T__0); - setState(2119); + setState(2094); match(RIGHT); - setState(2120); + setState(2095); match(T__1); - setState(2122); + setState(2097); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2121); + setState(2096); expr(0); } } - setState(2124); + setState(2099); match(T__2); } break; @@ -9947,15 +9846,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new RMB_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2125); - if (!(precpred(_ctx, 305))) throw new FailedPredicateException(this, "precpred(_ctx, 305)"); - setState(2126); + setState(2100); + if (!(precpred(_ctx, 298))) throw new FailedPredicateException(this, "precpred(_ctx, 298)"); + setState(2101); match(T__0); - setState(2127); + setState(2102); match(RMB); - setState(2128); + setState(2103); match(T__1); - setState(2129); + setState(2104); match(T__2); } break; @@ -9963,29 +9862,29 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new SEARCH_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2130); - if (!(precpred(_ctx, 304))) throw new FailedPredicateException(this, "precpred(_ctx, 304)"); - setState(2131); + setState(2105); + if (!(precpred(_ctx, 297))) throw new FailedPredicateException(this, "precpred(_ctx, 297)"); + setState(2106); match(T__0); - setState(2132); + setState(2107); match(SEARCH); - setState(2133); + setState(2108); match(T__1); - setState(2134); + setState(2109); expr(0); - setState(2137); + setState(2112); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2135); + setState(2110); match(T__3); - setState(2136); + setState(2111); expr(0); } } - setState(2139); + setState(2114); match(T__2); } break; @@ -9993,33 +9892,33 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new SUBSTITUTE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2141); - if (!(precpred(_ctx, 303))) throw new FailedPredicateException(this, "precpred(_ctx, 303)"); - setState(2142); + setState(2116); + if (!(precpred(_ctx, 296))) throw new FailedPredicateException(this, "precpred(_ctx, 296)"); + setState(2117); match(T__0); - setState(2143); + setState(2118); match(SUBSTITUTE); - setState(2144); + setState(2119); match(T__1); - setState(2145); + setState(2120); expr(0); - setState(2146); + setState(2121); match(T__3); - setState(2147); + setState(2122); expr(0); - setState(2150); + setState(2125); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2148); + setState(2123); match(T__3); - setState(2149); + setState(2124); expr(0); } } - setState(2152); + setState(2127); match(T__2); } break; @@ -10027,15 +9926,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new T_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2154); - if (!(precpred(_ctx, 302))) throw new FailedPredicateException(this, "precpred(_ctx, 302)"); - setState(2155); + setState(2129); + if (!(precpred(_ctx, 295))) throw new FailedPredicateException(this, "precpred(_ctx, 295)"); + setState(2130); match(T__0); - setState(2156); + setState(2131); match(T); - setState(2157); + setState(2132); match(T__1); - setState(2158); + setState(2133); match(T__2); } break; @@ -10043,17 +9942,17 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new TEXT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2159); - if (!(precpred(_ctx, 301))) throw new FailedPredicateException(this, "precpred(_ctx, 301)"); - setState(2160); + setState(2134); + if (!(precpred(_ctx, 294))) throw new FailedPredicateException(this, "precpred(_ctx, 294)"); + setState(2135); match(T__0); - setState(2161); + setState(2136); match(TEXT); - setState(2162); + setState(2137); match(T__1); - setState(2163); + setState(2138); expr(0); - setState(2164); + setState(2139); match(T__2); } break; @@ -10061,15 +9960,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new TRIM_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2166); - if (!(precpred(_ctx, 300))) throw new FailedPredicateException(this, "precpred(_ctx, 300)"); - setState(2167); + setState(2141); + if (!(precpred(_ctx, 293))) throw new FailedPredicateException(this, "precpred(_ctx, 293)"); + setState(2142); match(T__0); - setState(2168); + setState(2143); match(TRIM); - setState(2169); + setState(2144); match(T__1); - setState(2170); + setState(2145); match(T__2); } break; @@ -10077,15 +9976,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new UPPER_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2171); - if (!(precpred(_ctx, 299))) throw new FailedPredicateException(this, "precpred(_ctx, 299)"); - setState(2172); + setState(2146); + if (!(precpred(_ctx, 292))) throw new FailedPredicateException(this, "precpred(_ctx, 292)"); + setState(2147); match(T__0); - setState(2173); + setState(2148); match(UPPER); - setState(2174); + setState(2149); match(T__1); - setState(2175); + setState(2150); match(T__2); } break; @@ -10093,15 +9992,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new VALUE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2176); - if (!(precpred(_ctx, 298))) throw new FailedPredicateException(this, "precpred(_ctx, 298)"); - setState(2177); + setState(2151); + if (!(precpred(_ctx, 291))) throw new FailedPredicateException(this, "precpred(_ctx, 291)"); + setState(2152); match(T__0); - setState(2178); + setState(2153); match(VALUE); - setState(2179); + setState(2154); match(T__1); - setState(2180); + setState(2155); match(T__2); } break; @@ -10109,25 +10008,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new DATEVALUE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2181); - if (!(precpred(_ctx, 297))) throw new FailedPredicateException(this, "precpred(_ctx, 297)"); - setState(2182); + setState(2156); + if (!(precpred(_ctx, 290))) throw new FailedPredicateException(this, "precpred(_ctx, 290)"); + setState(2157); match(T__0); - setState(2183); + setState(2158); match(DATEVALUE); - setState(2184); + setState(2159); match(T__1); - setState(2186); + setState(2161); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2185); + setState(2160); expr(0); } } - setState(2188); + setState(2163); match(T__2); } break; @@ -10135,15 +10034,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new TIMEVALUE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2189); - if (!(precpred(_ctx, 296))) throw new FailedPredicateException(this, "precpred(_ctx, 296)"); - setState(2190); + setState(2164); + if (!(precpred(_ctx, 289))) throw new FailedPredicateException(this, "precpred(_ctx, 289)"); + setState(2165); match(T__0); - setState(2191); + setState(2166); match(TIMEVALUE); - setState(2192); + setState(2167); match(T__1); - setState(2193); + setState(2168); match(T__2); } break; @@ -10151,20 +10050,20 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new YEAR_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2194); - if (!(precpred(_ctx, 295))) throw new FailedPredicateException(this, "precpred(_ctx, 295)"); - setState(2195); + setState(2169); + if (!(precpred(_ctx, 288))) throw new FailedPredicateException(this, "precpred(_ctx, 288)"); + setState(2170); match(T__0); - setState(2196); + setState(2171); match(YEAR); - setState(2199); + setState(2174); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,127,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,125,_ctx) ) { case 1: { - setState(2197); + setState(2172); match(T__1); - setState(2198); + setState(2173); match(T__2); } break; @@ -10175,20 +10074,20 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new MONTH_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2201); - if (!(precpred(_ctx, 294))) throw new FailedPredicateException(this, "precpred(_ctx, 294)"); - setState(2202); + setState(2176); + if (!(precpred(_ctx, 287))) throw new FailedPredicateException(this, "precpred(_ctx, 287)"); + setState(2177); match(T__0); - setState(2203); + setState(2178); match(MONTH); - setState(2206); + setState(2181); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,128,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,126,_ctx) ) { case 1: { - setState(2204); + setState(2179); match(T__1); - setState(2205); + setState(2180); match(T__2); } break; @@ -10199,20 +10098,20 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new DAY_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2208); - if (!(precpred(_ctx, 293))) throw new FailedPredicateException(this, "precpred(_ctx, 293)"); - setState(2209); + setState(2183); + if (!(precpred(_ctx, 286))) throw new FailedPredicateException(this, "precpred(_ctx, 286)"); + setState(2184); match(T__0); - setState(2210); + setState(2185); match(DAY); - setState(2213); + setState(2188); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,129,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,127,_ctx) ) { case 1: { - setState(2211); + setState(2186); match(T__1); - setState(2212); + setState(2187); match(T__2); } break; @@ -10223,20 +10122,20 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new HOUR_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2215); - if (!(precpred(_ctx, 292))) throw new FailedPredicateException(this, "precpred(_ctx, 292)"); - setState(2216); + setState(2190); + if (!(precpred(_ctx, 285))) throw new FailedPredicateException(this, "precpred(_ctx, 285)"); + setState(2191); match(T__0); - setState(2217); + setState(2192); match(HOUR); - setState(2220); + setState(2195); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,130,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,128,_ctx) ) { case 1: { - setState(2218); + setState(2193); match(T__1); - setState(2219); + setState(2194); match(T__2); } break; @@ -10247,20 +10146,20 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new MINUTE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2222); - if (!(precpred(_ctx, 291))) throw new FailedPredicateException(this, "precpred(_ctx, 291)"); - setState(2223); + setState(2197); + if (!(precpred(_ctx, 284))) throw new FailedPredicateException(this, "precpred(_ctx, 284)"); + setState(2198); match(T__0); - setState(2224); + setState(2199); match(MINUTE); - setState(2227); + setState(2202); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,131,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,129,_ctx) ) { case 1: { - setState(2225); + setState(2200); match(T__1); - setState(2226); + setState(2201); match(T__2); } break; @@ -10271,20 +10170,20 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new SECOND_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2229); - if (!(precpred(_ctx, 290))) throw new FailedPredicateException(this, "precpred(_ctx, 290)"); - setState(2230); + setState(2204); + if (!(precpred(_ctx, 283))) throw new FailedPredicateException(this, "precpred(_ctx, 283)"); + setState(2205); match(T__0); - setState(2231); + setState(2206); match(SECOND); - setState(2234); + setState(2209); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,132,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,130,_ctx) ) { case 1: { - setState(2232); + setState(2207); match(T__1); - setState(2233); + setState(2208); match(T__2); } break; @@ -10295,15 +10194,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new URLENCODE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2236); - if (!(precpred(_ctx, 289))) throw new FailedPredicateException(this, "precpred(_ctx, 289)"); - setState(2237); + setState(2211); + if (!(precpred(_ctx, 282))) throw new FailedPredicateException(this, "precpred(_ctx, 282)"); + setState(2212); match(T__0); - setState(2238); + setState(2213); match(URLENCODE); - setState(2239); + setState(2214); match(T__1); - setState(2240); + setState(2215); match(T__2); } break; @@ -10311,15 +10210,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new URLDECODE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2241); - if (!(precpred(_ctx, 288))) throw new FailedPredicateException(this, "precpred(_ctx, 288)"); - setState(2242); + setState(2216); + if (!(precpred(_ctx, 281))) throw new FailedPredicateException(this, "precpred(_ctx, 281)"); + setState(2217); match(T__0); - setState(2243); + setState(2218); match(URLDECODE); - setState(2244); + setState(2219); match(T__1); - setState(2245); + setState(2220); match(T__2); } break; @@ -10327,15 +10226,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new HTMLENCODE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2246); - if (!(precpred(_ctx, 287))) throw new FailedPredicateException(this, "precpred(_ctx, 287)"); - setState(2247); + setState(2221); + if (!(precpred(_ctx, 280))) throw new FailedPredicateException(this, "precpred(_ctx, 280)"); + setState(2222); match(T__0); - setState(2248); + setState(2223); match(HTMLENCODE); - setState(2249); + setState(2224); match(T__1); - setState(2250); + setState(2225); match(T__2); } break; @@ -10343,15 +10242,15 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new HTMLDECODE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2251); - if (!(precpred(_ctx, 286))) throw new FailedPredicateException(this, "precpred(_ctx, 286)"); - setState(2252); + setState(2226); + if (!(precpred(_ctx, 279))) throw new FailedPredicateException(this, "precpred(_ctx, 279)"); + setState(2227); match(T__0); - setState(2253); + setState(2228); match(HTMLDECODE); - setState(2254); + setState(2229); match(T__1); - setState(2255); + setState(2230); match(T__2); } break; @@ -10359,25 +10258,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new BASE64TOTEXT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2256); - if (!(precpred(_ctx, 285))) throw new FailedPredicateException(this, "precpred(_ctx, 285)"); - setState(2257); + setState(2231); + if (!(precpred(_ctx, 278))) throw new FailedPredicateException(this, "precpred(_ctx, 278)"); + setState(2232); match(T__0); - setState(2258); + setState(2233); match(BASE64TOTEXT); - setState(2259); + setState(2234); match(T__1); - setState(2261); + setState(2236); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2260); + setState(2235); expr(0); } } - setState(2263); + setState(2238); match(T__2); } break; @@ -10385,25 +10284,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new BASE64URLTOTEXT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2264); - if (!(precpred(_ctx, 284))) throw new FailedPredicateException(this, "precpred(_ctx, 284)"); - setState(2265); + setState(2239); + if (!(precpred(_ctx, 277))) throw new FailedPredicateException(this, "precpred(_ctx, 277)"); + setState(2240); match(T__0); - setState(2266); + setState(2241); match(BASE64URLTOTEXT); - setState(2267); + setState(2242); match(T__1); - setState(2269); + setState(2244); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2268); + setState(2243); expr(0); } } - setState(2271); + setState(2246); match(T__2); } break; @@ -10411,25 +10310,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new TEXTTOBASE64_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2272); - if (!(precpred(_ctx, 283))) throw new FailedPredicateException(this, "precpred(_ctx, 283)"); - setState(2273); + setState(2247); + if (!(precpred(_ctx, 276))) throw new FailedPredicateException(this, "precpred(_ctx, 276)"); + setState(2248); match(T__0); - setState(2274); + setState(2249); match(TEXTTOBASE64); - setState(2275); + setState(2250); match(T__1); - setState(2277); + setState(2252); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2276); + setState(2251); expr(0); } } - setState(2279); + setState(2254); match(T__2); } break; @@ -10437,25 +10336,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new TEXTTOBASE64URL_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2280); - if (!(precpred(_ctx, 282))) throw new FailedPredicateException(this, "precpred(_ctx, 282)"); - setState(2281); + setState(2255); + if (!(precpred(_ctx, 275))) throw new FailedPredicateException(this, "precpred(_ctx, 275)"); + setState(2256); match(T__0); - setState(2282); + setState(2257); match(TEXTTOBASE64URL); - setState(2283); + setState(2258); match(T__1); - setState(2285); + setState(2260); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2284); + setState(2259); expr(0); } } - setState(2287); + setState(2262); match(T__2); } break; @@ -10463,17 +10362,17 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new REGEX_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2288); - if (!(precpred(_ctx, 281))) throw new FailedPredicateException(this, "precpred(_ctx, 281)"); - setState(2289); + setState(2263); + if (!(precpred(_ctx, 274))) throw new FailedPredicateException(this, "precpred(_ctx, 274)"); + setState(2264); match(T__0); - setState(2290); + setState(2265); match(REGEX); - setState(2291); + setState(2266); match(T__1); - setState(2292); + setState(2267); expr(0); - setState(2293); + setState(2268); match(T__2); } break; @@ -10481,21 +10380,21 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new REGEXREPALCE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2295); - if (!(precpred(_ctx, 280))) throw new FailedPredicateException(this, "precpred(_ctx, 280)"); - setState(2296); + setState(2270); + if (!(precpred(_ctx, 273))) throw new FailedPredicateException(this, "precpred(_ctx, 273)"); + setState(2271); match(T__0); - setState(2297); + setState(2272); match(REGEXREPALCE); - setState(2298); + setState(2273); match(T__1); - setState(2299); + setState(2274); expr(0); - setState(2300); + setState(2275); match(T__3); - setState(2301); + setState(2276); expr(0); - setState(2302); + setState(2277); match(T__2); } break; @@ -10503,17 +10402,17 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new ISREGEX_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2304); - if (!(precpred(_ctx, 279))) throw new FailedPredicateException(this, "precpred(_ctx, 279)"); - setState(2305); + setState(2279); + if (!(precpred(_ctx, 272))) throw new FailedPredicateException(this, "precpred(_ctx, 272)"); + setState(2280); match(T__0); - setState(2306); + setState(2281); match(ISREGEX); - setState(2307); + setState(2282); match(T__1); - setState(2308); + setState(2283); expr(0); - setState(2309); + setState(2284); match(T__2); } break; @@ -10521,25 +10420,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new MD5_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2311); - if (!(precpred(_ctx, 278))) throw new FailedPredicateException(this, "precpred(_ctx, 278)"); - setState(2312); + setState(2286); + if (!(precpred(_ctx, 271))) throw new FailedPredicateException(this, "precpred(_ctx, 271)"); + setState(2287); match(T__0); - setState(2313); + setState(2288); match(MD5); - setState(2314); + setState(2289); match(T__1); - setState(2316); + setState(2291); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2315); + setState(2290); expr(0); } } - setState(2318); + setState(2293); match(T__2); } break; @@ -10547,25 +10446,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new SHA1_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2319); - if (!(precpred(_ctx, 277))) throw new FailedPredicateException(this, "precpred(_ctx, 277)"); - setState(2320); + setState(2294); + if (!(precpred(_ctx, 270))) throw new FailedPredicateException(this, "precpred(_ctx, 270)"); + setState(2295); match(T__0); - setState(2321); + setState(2296); match(SHA1); - setState(2322); + setState(2297); match(T__1); - setState(2324); + setState(2299); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2323); + setState(2298); expr(0); } } - setState(2326); + setState(2301); match(T__2); } break; @@ -10573,25 +10472,25 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new SHA256_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2327); - if (!(precpred(_ctx, 276))) throw new FailedPredicateException(this, "precpred(_ctx, 276)"); - setState(2328); + setState(2302); + if (!(precpred(_ctx, 269))) throw new FailedPredicateException(this, "precpred(_ctx, 269)"); + setState(2303); match(T__0); - setState(2329); + setState(2304); match(SHA256); - setState(2330); + setState(2305); match(T__1); - setState(2332); + setState(2307); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2331); + setState(2306); expr(0); } } - setState(2334); + setState(2309); match(T__2); } break; @@ -10599,257 +10498,231 @@ private ExprContext expr(int _p) throws RecognitionException { { _localctx = new SHA512_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2335); - if (!(precpred(_ctx, 275))) throw new FailedPredicateException(this, "precpred(_ctx, 275)"); - setState(2336); + setState(2310); + if (!(precpred(_ctx, 268))) throw new FailedPredicateException(this, "precpred(_ctx, 268)"); + setState(2311); match(T__0); - setState(2337); + setState(2312); match(SHA512); - setState(2338); + setState(2313); match(T__1); - setState(2340); + setState(2315); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2339); + setState(2314); expr(0); } } - setState(2342); + setState(2317); match(T__2); } break; case 77: { - _localctx = new CRC32_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new HMACMD5_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2343); - if (!(precpred(_ctx, 274))) throw new FailedPredicateException(this, "precpred(_ctx, 274)"); - setState(2344); + setState(2318); + if (!(precpred(_ctx, 267))) throw new FailedPredicateException(this, "precpred(_ctx, 267)"); + setState(2319); match(T__0); - setState(2345); - match(CRC32); - setState(2346); + setState(2320); + match(HMACMD5); + setState(2321); match(T__1); - setState(2348); + setState(2322); + expr(0); + setState(2325); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if (_la==T__3) { { - setState(2347); + setState(2323); + match(T__3); + setState(2324); expr(0); } } - setState(2350); + setState(2327); match(T__2); } break; case 78: { - _localctx = new HMACMD5_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new HMACSHA1_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2351); - if (!(precpred(_ctx, 273))) throw new FailedPredicateException(this, "precpred(_ctx, 273)"); - setState(2352); + setState(2329); + if (!(precpred(_ctx, 266))) throw new FailedPredicateException(this, "precpred(_ctx, 266)"); + setState(2330); match(T__0); - setState(2353); - match(HMACMD5); - setState(2354); + setState(2331); + match(HMACSHA1); + setState(2332); match(T__1); - setState(2355); + setState(2333); expr(0); - setState(2358); + setState(2336); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2356); + setState(2334); match(T__3); - setState(2357); + setState(2335); expr(0); } } - setState(2360); + setState(2338); match(T__2); } break; case 79: - { - _localctx = new HMACSHA1_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2362); - if (!(precpred(_ctx, 272))) throw new FailedPredicateException(this, "precpred(_ctx, 272)"); - setState(2363); - match(T__0); - setState(2364); - match(HMACSHA1); - setState(2365); - match(T__1); - setState(2366); - expr(0); - setState(2369); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(2367); - match(T__3); - setState(2368); - expr(0); - } - } - - setState(2371); - match(T__2); - } - break; - case 80: { _localctx = new HMACSHA256_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2373); - if (!(precpred(_ctx, 271))) throw new FailedPredicateException(this, "precpred(_ctx, 271)"); - setState(2374); + setState(2340); + if (!(precpred(_ctx, 265))) throw new FailedPredicateException(this, "precpred(_ctx, 265)"); + setState(2341); match(T__0); - setState(2375); + setState(2342); match(HMACSHA256); - setState(2376); + setState(2343); match(T__1); - setState(2377); + setState(2344); expr(0); - setState(2380); + setState(2347); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2378); + setState(2345); match(T__3); - setState(2379); + setState(2346); expr(0); } } - setState(2382); + setState(2349); match(T__2); } break; - case 81: + case 80: { _localctx = new HMACSHA512_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2384); - if (!(precpred(_ctx, 270))) throw new FailedPredicateException(this, "precpred(_ctx, 270)"); - setState(2385); + setState(2351); + if (!(precpred(_ctx, 264))) throw new FailedPredicateException(this, "precpred(_ctx, 264)"); + setState(2352); match(T__0); - setState(2386); + setState(2353); match(HMACSHA512); - setState(2387); + setState(2354); match(T__1); - setState(2388); + setState(2355); expr(0); - setState(2391); + setState(2358); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2389); + setState(2356); match(T__3); - setState(2390); + setState(2357); expr(0); } } - setState(2393); + setState(2360); match(T__2); } break; - case 82: + case 81: { _localctx = new TRIMSTART_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2395); - if (!(precpred(_ctx, 269))) throw new FailedPredicateException(this, "precpred(_ctx, 269)"); - setState(2396); + setState(2362); + if (!(precpred(_ctx, 263))) throw new FailedPredicateException(this, "precpred(_ctx, 263)"); + setState(2363); match(T__0); - setState(2397); + setState(2364); match(TRIMSTART); - setState(2398); + setState(2365); match(T__1); - setState(2400); + setState(2367); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2399); + setState(2366); expr(0); } } - setState(2402); + setState(2369); match(T__2); } break; - case 83: + case 82: { _localctx = new TRIMEND_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2403); - if (!(precpred(_ctx, 268))) throw new FailedPredicateException(this, "precpred(_ctx, 268)"); - setState(2404); + setState(2370); + if (!(precpred(_ctx, 262))) throw new FailedPredicateException(this, "precpred(_ctx, 262)"); + setState(2371); match(T__0); - setState(2405); + setState(2372); match(TRIMEND); - setState(2406); + setState(2373); match(T__1); - setState(2408); + setState(2375); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2407); + setState(2374); expr(0); } } - setState(2410); + setState(2377); match(T__2); } break; - case 84: + case 83: { _localctx = new INDEXOF_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2411); - if (!(precpred(_ctx, 267))) throw new FailedPredicateException(this, "precpred(_ctx, 267)"); - setState(2412); + setState(2378); + if (!(precpred(_ctx, 261))) throw new FailedPredicateException(this, "precpred(_ctx, 261)"); + setState(2379); match(T__0); - setState(2413); + setState(2380); match(INDEXOF); - setState(2414); + setState(2381); match(T__1); - setState(2415); + setState(2382); expr(0); - setState(2422); + setState(2389); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2416); + setState(2383); match(T__3); - setState(2417); + setState(2384); expr(0); - setState(2420); + setState(2387); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2418); + setState(2385); match(T__3); - setState(2419); + setState(2386); expr(0); } } @@ -10857,41 +10730,41 @@ private ExprContext expr(int _p) throws RecognitionException { } } - setState(2424); + setState(2391); match(T__2); } break; - case 85: + case 84: { _localctx = new LASTINDEXOF_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2426); - if (!(precpred(_ctx, 266))) throw new FailedPredicateException(this, "precpred(_ctx, 266)"); - setState(2427); + setState(2393); + if (!(precpred(_ctx, 260))) throw new FailedPredicateException(this, "precpred(_ctx, 260)"); + setState(2394); match(T__0); - setState(2428); + setState(2395); match(LASTINDEXOF); - setState(2429); + setState(2396); match(T__1); - setState(2430); + setState(2397); expr(0); - setState(2437); + setState(2404); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2431); + setState(2398); match(T__3); - setState(2432); + setState(2399); expr(0); - setState(2435); + setState(2402); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2433); + setState(2400); match(T__3); - setState(2434); + setState(2401); expr(0); } } @@ -10899,584 +10772,528 @@ private ExprContext expr(int _p) throws RecognitionException { } } - setState(2439); + setState(2406); match(T__2); } break; - case 86: + case 85: { _localctx = new SPLIT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2441); - if (!(precpred(_ctx, 265))) throw new FailedPredicateException(this, "precpred(_ctx, 265)"); - setState(2442); + setState(2408); + if (!(precpred(_ctx, 259))) throw new FailedPredicateException(this, "precpred(_ctx, 259)"); + setState(2409); match(T__0); - setState(2443); + setState(2410); match(SPLIT); - setState(2444); + setState(2411); match(T__1); - setState(2445); + setState(2412); expr(0); - setState(2446); + setState(2413); match(T__2); } break; - case 87: + case 86: { _localctx = new JOIN_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2448); - if (!(precpred(_ctx, 264))) throw new FailedPredicateException(this, "precpred(_ctx, 264)"); - setState(2449); + setState(2415); + if (!(precpred(_ctx, 258))) throw new FailedPredicateException(this, "precpred(_ctx, 258)"); + setState(2416); match(T__0); - setState(2450); + setState(2417); match(JOIN); - setState(2451); + setState(2418); match(T__1); - setState(2452); + setState(2419); expr(0); - setState(2457); + setState(2424); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(2453); + setState(2420); match(T__3); - setState(2454); + setState(2421); expr(0); } } - setState(2459); + setState(2426); _errHandler.sync(this); _la = _input.LA(1); } - setState(2460); + setState(2427); match(T__2); } break; - case 88: + case 87: { _localctx = new SUBSTRING_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2462); - if (!(precpred(_ctx, 263))) throw new FailedPredicateException(this, "precpred(_ctx, 263)"); - setState(2463); + setState(2429); + if (!(precpred(_ctx, 257))) throw new FailedPredicateException(this, "precpred(_ctx, 257)"); + setState(2430); match(T__0); - setState(2464); + setState(2431); match(SUBSTRING); - setState(2465); + setState(2432); match(T__1); - setState(2466); + setState(2433); expr(0); - setState(2469); + setState(2436); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2467); + setState(2434); match(T__3); - setState(2468); + setState(2435); expr(0); } } - setState(2471); + setState(2438); match(T__2); } break; - case 89: + case 88: { _localctx = new STARTSWITH_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2473); - if (!(precpred(_ctx, 262))) throw new FailedPredicateException(this, "precpred(_ctx, 262)"); - setState(2474); + setState(2440); + if (!(precpred(_ctx, 256))) throw new FailedPredicateException(this, "precpred(_ctx, 256)"); + setState(2441); match(T__0); - setState(2475); + setState(2442); match(STARTSWITH); - setState(2476); + setState(2443); match(T__1); - setState(2477); + setState(2444); expr(0); - setState(2480); + setState(2447); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2478); + setState(2445); match(T__3); - setState(2479); + setState(2446); expr(0); } } - setState(2482); + setState(2449); match(T__2); } break; - case 90: + case 89: { _localctx = new ENDSWITH_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2484); - if (!(precpred(_ctx, 261))) throw new FailedPredicateException(this, "precpred(_ctx, 261)"); - setState(2485); + setState(2451); + if (!(precpred(_ctx, 255))) throw new FailedPredicateException(this, "precpred(_ctx, 255)"); + setState(2452); match(T__0); - setState(2486); + setState(2453); match(ENDSWITH); - setState(2487); + setState(2454); match(T__1); - setState(2488); + setState(2455); expr(0); - setState(2491); + setState(2458); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2489); + setState(2456); match(T__3); - setState(2490); + setState(2457); expr(0); } } - setState(2493); + setState(2460); match(T__2); } break; - case 91: + case 90: { _localctx = new ISNULLOREMPTY_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2495); - if (!(precpred(_ctx, 260))) throw new FailedPredicateException(this, "precpred(_ctx, 260)"); - setState(2496); + setState(2462); + if (!(precpred(_ctx, 254))) throw new FailedPredicateException(this, "precpred(_ctx, 254)"); + setState(2463); match(T__0); - setState(2497); + setState(2464); match(ISNULLOREMPTY); - setState(2498); + setState(2465); match(T__1); - setState(2499); + setState(2466); match(T__2); } break; - case 92: + case 91: { _localctx = new ISNULLORWHITESPACE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2500); - if (!(precpred(_ctx, 259))) throw new FailedPredicateException(this, "precpred(_ctx, 259)"); - setState(2501); + setState(2467); + if (!(precpred(_ctx, 253))) throw new FailedPredicateException(this, "precpred(_ctx, 253)"); + setState(2468); match(T__0); - setState(2502); + setState(2469); match(ISNULLORWHITESPACE); - setState(2503); + setState(2470); match(T__1); - setState(2504); + setState(2471); match(T__2); } break; - case 93: + case 92: { _localctx = new REMOVESTART_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2505); - if (!(precpred(_ctx, 258))) throw new FailedPredicateException(this, "precpred(_ctx, 258)"); - setState(2506); + setState(2472); + if (!(precpred(_ctx, 252))) throw new FailedPredicateException(this, "precpred(_ctx, 252)"); + setState(2473); match(T__0); - setState(2507); + setState(2474); match(REMOVESTART); - setState(2508); + setState(2475); match(T__1); - setState(2509); + setState(2476); expr(0); - setState(2512); + setState(2479); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2510); + setState(2477); match(T__3); - setState(2511); + setState(2478); expr(0); } } - setState(2514); + setState(2481); match(T__2); } break; - case 94: + case 93: { _localctx = new REMOVEEND_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2516); - if (!(precpred(_ctx, 257))) throw new FailedPredicateException(this, "precpred(_ctx, 257)"); - setState(2517); + setState(2483); + if (!(precpred(_ctx, 251))) throw new FailedPredicateException(this, "precpred(_ctx, 251)"); + setState(2484); match(T__0); - setState(2518); + setState(2485); match(REMOVEEND); - setState(2519); + setState(2486); match(T__1); - setState(2520); + setState(2487); expr(0); - setState(2523); + setState(2490); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2521); + setState(2488); match(T__3); - setState(2522); + setState(2489); expr(0); } } - setState(2525); + setState(2492); match(T__2); } break; - case 95: + case 94: { _localctx = new JSON_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2527); - if (!(precpred(_ctx, 256))) throw new FailedPredicateException(this, "precpred(_ctx, 256)"); - setState(2528); + setState(2494); + if (!(precpred(_ctx, 250))) throw new FailedPredicateException(this, "precpred(_ctx, 250)"); + setState(2495); match(T__0); - setState(2529); + setState(2496); match(JSON); - setState(2530); - match(T__1); - setState(2531); - match(T__2); - } - break; - case 96: - { - _localctx = new VLOOKUP_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2532); - if (!(precpred(_ctx, 255))) throw new FailedPredicateException(this, "precpred(_ctx, 255)"); - setState(2533); - match(T__0); - setState(2534); - match(VLOOKUP); - setState(2535); - match(T__1); - setState(2536); - expr(0); - setState(2537); - match(T__3); - setState(2538); - expr(0); - setState(2541); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(2539); - match(T__3); - setState(2540); - expr(0); - } - } - - setState(2543); - match(T__2); - } - break; - case 97: - { - _localctx = new LOOKUP_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2545); - if (!(precpred(_ctx, 254))) throw new FailedPredicateException(this, "precpred(_ctx, 254)"); - setState(2546); - match(T__0); - setState(2547); - match(LOOKUP); - setState(2548); + setState(2497); match(T__1); - setState(2549); - expr(0); - setState(2550); - match(T__3); - setState(2551); - expr(0); - setState(2552); + setState(2498); match(T__2); } break; - case 98: + case 95: { _localctx = new DiyFunction_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2554); - if (!(precpred(_ctx, 253))) throw new FailedPredicateException(this, "precpred(_ctx, 253)"); - setState(2555); + setState(2499); + if (!(precpred(_ctx, 249))) throw new FailedPredicateException(this, "precpred(_ctx, 249)"); + setState(2500); match(T__0); - setState(2556); + setState(2501); match(PARAMETER); - setState(2557); + setState(2502); match(T__1); - setState(2566); + setState(2511); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2558); + setState(2503); expr(0); - setState(2563); + setState(2508); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(2559); + setState(2504); match(T__3); - setState(2560); + setState(2505); expr(0); } } - setState(2565); + setState(2510); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(2568); + setState(2513); match(T__2); } break; - case 99: + case 96: { _localctx = new ADDYEARS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2569); - if (!(precpred(_ctx, 252))) throw new FailedPredicateException(this, "precpred(_ctx, 252)"); - setState(2570); + setState(2514); + if (!(precpred(_ctx, 248))) throw new FailedPredicateException(this, "precpred(_ctx, 248)"); + setState(2515); match(T__0); - setState(2571); + setState(2516); match(ADDYEARS); - setState(2572); + setState(2517); match(T__1); - setState(2573); + setState(2518); expr(0); - setState(2574); + setState(2519); match(T__2); } break; - case 100: + case 97: { _localctx = new ADDMONTHS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2576); - if (!(precpred(_ctx, 251))) throw new FailedPredicateException(this, "precpred(_ctx, 251)"); - setState(2577); + setState(2521); + if (!(precpred(_ctx, 247))) throw new FailedPredicateException(this, "precpred(_ctx, 247)"); + setState(2522); match(T__0); - setState(2578); + setState(2523); match(ADDMONTHS); - setState(2579); + setState(2524); match(T__1); - setState(2580); + setState(2525); expr(0); - setState(2581); + setState(2526); match(T__2); } break; - case 101: + case 98: { _localctx = new ADDDAYS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2583); - if (!(precpred(_ctx, 250))) throw new FailedPredicateException(this, "precpred(_ctx, 250)"); - setState(2584); + setState(2528); + if (!(precpred(_ctx, 246))) throw new FailedPredicateException(this, "precpred(_ctx, 246)"); + setState(2529); match(T__0); - setState(2585); + setState(2530); match(ADDDAYS); - setState(2586); + setState(2531); match(T__1); - setState(2587); + setState(2532); expr(0); - setState(2588); + setState(2533); match(T__2); } break; - case 102: + case 99: { _localctx = new ADDHOURS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2590); - if (!(precpred(_ctx, 249))) throw new FailedPredicateException(this, "precpred(_ctx, 249)"); - setState(2591); + setState(2535); + if (!(precpred(_ctx, 245))) throw new FailedPredicateException(this, "precpred(_ctx, 245)"); + setState(2536); match(T__0); - setState(2592); + setState(2537); match(ADDHOURS); - setState(2593); + setState(2538); match(T__1); - setState(2594); + setState(2539); expr(0); - setState(2595); + setState(2540); match(T__2); } break; - case 103: + case 100: { _localctx = new ADDMINUTES_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2597); - if (!(precpred(_ctx, 248))) throw new FailedPredicateException(this, "precpred(_ctx, 248)"); - setState(2598); + setState(2542); + if (!(precpred(_ctx, 244))) throw new FailedPredicateException(this, "precpred(_ctx, 244)"); + setState(2543); match(T__0); - setState(2599); + setState(2544); match(ADDMINUTES); - setState(2600); + setState(2545); match(T__1); - setState(2601); + setState(2546); expr(0); - setState(2602); + setState(2547); match(T__2); } break; - case 104: + case 101: { _localctx = new ADDSECONDS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2604); - if (!(precpred(_ctx, 247))) throw new FailedPredicateException(this, "precpred(_ctx, 247)"); - setState(2605); + setState(2549); + if (!(precpred(_ctx, 243))) throw new FailedPredicateException(this, "precpred(_ctx, 243)"); + setState(2550); match(T__0); - setState(2606); + setState(2551); match(ADDSECONDS); - setState(2607); + setState(2552); match(T__1); - setState(2608); + setState(2553); expr(0); - setState(2609); + setState(2554); match(T__2); } break; - case 105: + case 102: { _localctx = new TIMESTAMP_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2611); - if (!(precpred(_ctx, 246))) throw new FailedPredicateException(this, "precpred(_ctx, 246)"); - setState(2612); + setState(2556); + if (!(precpred(_ctx, 242))) throw new FailedPredicateException(this, "precpred(_ctx, 242)"); + setState(2557); match(T__0); - setState(2613); + setState(2558); match(TIMESTAMP); - setState(2614); + setState(2559); match(T__1); - setState(2616); + setState(2561); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { { - setState(2615); + setState(2560); expr(0); } } - setState(2618); + setState(2563); match(T__2); } break; - case 106: + case 103: { _localctx = new HAS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2619); - if (!(precpred(_ctx, 245))) throw new FailedPredicateException(this, "precpred(_ctx, 245)"); - setState(2620); + setState(2564); + if (!(precpred(_ctx, 241))) throw new FailedPredicateException(this, "precpred(_ctx, 241)"); + setState(2565); match(T__0); - setState(2621); + setState(2566); match(HAS); - setState(2622); + setState(2567); match(T__1); - setState(2623); + setState(2568); expr(0); - setState(2624); + setState(2569); match(T__2); } break; - case 107: + case 104: { _localctx = new HASVALUE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2626); - if (!(precpred(_ctx, 244))) throw new FailedPredicateException(this, "precpred(_ctx, 244)"); - setState(2627); + setState(2571); + if (!(precpred(_ctx, 240))) throw new FailedPredicateException(this, "precpred(_ctx, 240)"); + setState(2572); match(T__0); - setState(2628); + setState(2573); match(HASVALUE); - setState(2629); + setState(2574); match(T__1); - setState(2630); + setState(2575); expr(0); - setState(2631); + setState(2576); match(T__2); } break; - case 108: + case 105: { _localctx = new GetJsonValue_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2633); - if (!(precpred(_ctx, 243))) throw new FailedPredicateException(this, "precpred(_ctx, 243)"); - setState(2634); + setState(2578); + if (!(precpred(_ctx, 239))) throw new FailedPredicateException(this, "precpred(_ctx, 239)"); + setState(2579); match(T__4); - setState(2635); - parameter2(); - setState(2636); + setState(2580); + match(PARAMETER); + setState(2581); match(T__5); } break; - case 109: + case 106: { _localctx = new GetJsonValue_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2638); - if (!(precpred(_ctx, 242))) throw new FailedPredicateException(this, "precpred(_ctx, 242)"); - setState(2639); + setState(2582); + if (!(precpred(_ctx, 238))) throw new FailedPredicateException(this, "precpred(_ctx, 238)"); + setState(2583); match(T__4); - setState(2640); + setState(2584); expr(0); - setState(2641); + setState(2585); match(T__5); } break; - case 110: + case 107: { _localctx = new GetJsonValue_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2643); - if (!(precpred(_ctx, 241))) throw new FailedPredicateException(this, "precpred(_ctx, 241)"); - setState(2644); + setState(2587); + if (!(precpred(_ctx, 237))) throw new FailedPredicateException(this, "precpred(_ctx, 237)"); + setState(2588); match(T__0); - setState(2645); + setState(2589); parameter2(); } break; - case 111: + case 108: { _localctx = new Percentage_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2646); - if (!(precpred(_ctx, 238))) throw new FailedPredicateException(this, "precpred(_ctx, 238)"); - setState(2647); + setState(2590); + if (!(precpred(_ctx, 234))) throw new FailedPredicateException(this, "precpred(_ctx, 234)"); + setState(2591); match(T__7); } break; } } } - setState(2652); + setState(2596); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,163,_ctx); + _alt = getInterpreter().adaptivePredict(_input,159,_ctx); } } } @@ -11513,17 +11330,17 @@ public final NumContext num() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(2654); + setState(2598); _errHandler.sync(this); _la = _input.LA(1); if (_la==SUB) { { - setState(2653); + setState(2597); match(SUB); } } - setState(2656); + setState(2600); match(NUM); } } @@ -11560,7 +11377,7 @@ public final UnitContext unit() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(2658); + setState(2602); _la = _input.LA(1); if ( !(_la==UNIT || _la==T) ) { _errHandler.recoverInline(this); @@ -11610,18 +11427,18 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(2663); + setState(2607); _errHandler.sync(this); switch (_input.LA(1)) { case NUM: { - setState(2660); + setState(2604); match(NUM); } break; case STRING: { - setState(2661); + setState(2605); match(STRING); } break; @@ -11814,7 +11631,6 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case SHA1: case SHA256: case SHA512: - case CRC32: case HMACMD5: case HMACSHA1: case HMACSHA256: @@ -11833,8 +11649,8 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case REMOVESTART: case REMOVEEND: case JSON: - case VLOOKUP: - case LOOKUP: + case LOOKCEILING: + case LOOKFLOOR: case ALGORITHMVERSION: case ADDYEARS: case ADDMONTHS: @@ -11848,16 +11664,16 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case PARAM: case PARAMETER: { - setState(2662); + setState(2606); parameter2(); } break; default: throw new NoViableAltException(this); } - setState(2665); + setState(2609); match(T__25); - setState(2666); + setState(2610); expr(0); } } @@ -12060,7 +11876,6 @@ public static class Parameter2Context extends ParserRuleContext { public TerminalNode SHA1() { return getToken(mathParser.SHA1, 0); } public TerminalNode SHA256() { return getToken(mathParser.SHA256, 0); } public TerminalNode SHA512() { return getToken(mathParser.SHA512, 0); } - public TerminalNode CRC32() { return getToken(mathParser.CRC32, 0); } public TerminalNode HMACMD5() { return getToken(mathParser.HMACMD5, 0); } public TerminalNode HMACSHA1() { return getToken(mathParser.HMACSHA1, 0); } public TerminalNode HMACSHA256() { return getToken(mathParser.HMACSHA256, 0); } @@ -12079,8 +11894,8 @@ public static class Parameter2Context extends ParserRuleContext { public TerminalNode REMOVESTART() { return getToken(mathParser.REMOVESTART, 0); } public TerminalNode REMOVEEND() { return getToken(mathParser.REMOVEEND, 0); } public TerminalNode JSON() { return getToken(mathParser.JSON, 0); } - public TerminalNode VLOOKUP() { return getToken(mathParser.VLOOKUP, 0); } - public TerminalNode LOOKUP() { return getToken(mathParser.LOOKUP, 0); } + public TerminalNode LOOKCEILING() { return getToken(mathParser.LOOKCEILING, 0); } + public TerminalNode LOOKFLOOR() { return getToken(mathParser.LOOKFLOOR, 0); } public TerminalNode ADDYEARS() { return getToken(mathParser.ADDYEARS, 0); } public TerminalNode ADDMONTHS() { return getToken(mathParser.ADDMONTHS, 0); } public TerminalNode ADDDAYS() { return getToken(mathParser.ADDDAYS, 0); } @@ -12114,9 +11929,9 @@ public final Parameter2Context parameter2() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(2668); + setState(2612); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & -4294967296L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 9222246136947933183L) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & -4294967296L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611123068473966591L) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -12147,233 +11962,227 @@ public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { private boolean expr_sempred(ExprContext _localctx, int predIndex) { switch (predIndex) { case 0: - return precpred(_ctx, 237); + return precpred(_ctx, 233); case 1: - return precpred(_ctx, 236); + return precpred(_ctx, 232); case 2: - return precpred(_ctx, 235); + return precpred(_ctx, 231); case 3: - return precpred(_ctx, 234); + return precpred(_ctx, 230); case 4: - return precpred(_ctx, 233); + return precpred(_ctx, 229); case 5: - return precpred(_ctx, 232); + return precpred(_ctx, 228); case 6: - return precpred(_ctx, 231); + return precpred(_ctx, 227); case 7: - return precpred(_ctx, 343); + return precpred(_ctx, 336); case 8: - return precpred(_ctx, 342); + return precpred(_ctx, 335); case 9: - return precpred(_ctx, 341); + return precpred(_ctx, 334); case 10: - return precpred(_ctx, 340); + return precpred(_ctx, 333); case 11: - return precpred(_ctx, 339); + return precpred(_ctx, 332); case 12: - return precpred(_ctx, 338); + return precpred(_ctx, 331); case 13: - return precpred(_ctx, 337); + return precpred(_ctx, 330); case 14: - return precpred(_ctx, 336); + return precpred(_ctx, 329); case 15: - return precpred(_ctx, 335); + return precpred(_ctx, 328); case 16: - return precpred(_ctx, 334); + return precpred(_ctx, 327); case 17: - return precpred(_ctx, 333); + return precpred(_ctx, 326); case 18: - return precpred(_ctx, 332); + return precpred(_ctx, 325); case 19: - return precpred(_ctx, 331); + return precpred(_ctx, 324); case 20: - return precpred(_ctx, 330); + return precpred(_ctx, 323); case 21: - return precpred(_ctx, 329); + return precpred(_ctx, 322); case 22: - return precpred(_ctx, 328); + return precpred(_ctx, 321); case 23: - return precpred(_ctx, 327); + return precpred(_ctx, 320); case 24: - return precpred(_ctx, 326); + return precpred(_ctx, 319); case 25: - return precpred(_ctx, 325); + return precpred(_ctx, 318); case 26: - return precpred(_ctx, 324); + return precpred(_ctx, 317); case 27: - return precpred(_ctx, 323); + return precpred(_ctx, 316); case 28: - return precpred(_ctx, 322); + return precpred(_ctx, 315); case 29: - return precpred(_ctx, 321); + return precpred(_ctx, 314); case 30: - return precpred(_ctx, 320); + return precpred(_ctx, 313); case 31: - return precpred(_ctx, 319); + return precpred(_ctx, 312); case 32: - return precpred(_ctx, 318); + return precpred(_ctx, 311); case 33: - return precpred(_ctx, 317); + return precpred(_ctx, 310); case 34: - return precpred(_ctx, 316); + return precpred(_ctx, 309); case 35: - return precpred(_ctx, 315); + return precpred(_ctx, 308); case 36: - return precpred(_ctx, 314); + return precpred(_ctx, 307); case 37: - return precpred(_ctx, 313); + return precpred(_ctx, 306); case 38: - return precpred(_ctx, 312); + return precpred(_ctx, 305); case 39: - return precpred(_ctx, 311); + return precpred(_ctx, 304); case 40: - return precpred(_ctx, 310); + return precpred(_ctx, 303); case 41: - return precpred(_ctx, 309); + return precpred(_ctx, 302); case 42: - return precpred(_ctx, 308); + return precpred(_ctx, 301); case 43: - return precpred(_ctx, 307); + return precpred(_ctx, 300); case 44: - return precpred(_ctx, 306); + return precpred(_ctx, 299); case 45: - return precpred(_ctx, 305); + return precpred(_ctx, 298); case 46: - return precpred(_ctx, 304); + return precpred(_ctx, 297); case 47: - return precpred(_ctx, 303); + return precpred(_ctx, 296); case 48: - return precpred(_ctx, 302); + return precpred(_ctx, 295); case 49: - return precpred(_ctx, 301); + return precpred(_ctx, 294); case 50: - return precpred(_ctx, 300); + return precpred(_ctx, 293); case 51: - return precpred(_ctx, 299); + return precpred(_ctx, 292); case 52: - return precpred(_ctx, 298); + return precpred(_ctx, 291); case 53: - return precpred(_ctx, 297); + return precpred(_ctx, 290); case 54: - return precpred(_ctx, 296); + return precpred(_ctx, 289); case 55: - return precpred(_ctx, 295); + return precpred(_ctx, 288); case 56: - return precpred(_ctx, 294); + return precpred(_ctx, 287); case 57: - return precpred(_ctx, 293); + return precpred(_ctx, 286); case 58: - return precpred(_ctx, 292); + return precpred(_ctx, 285); case 59: - return precpred(_ctx, 291); + return precpred(_ctx, 284); case 60: - return precpred(_ctx, 290); + return precpred(_ctx, 283); case 61: - return precpred(_ctx, 289); + return precpred(_ctx, 282); case 62: - return precpred(_ctx, 288); + return precpred(_ctx, 281); case 63: - return precpred(_ctx, 287); + return precpred(_ctx, 280); case 64: - return precpred(_ctx, 286); + return precpred(_ctx, 279); case 65: - return precpred(_ctx, 285); + return precpred(_ctx, 278); case 66: - return precpred(_ctx, 284); + return precpred(_ctx, 277); case 67: - return precpred(_ctx, 283); + return precpred(_ctx, 276); case 68: - return precpred(_ctx, 282); + return precpred(_ctx, 275); case 69: - return precpred(_ctx, 281); + return precpred(_ctx, 274); case 70: - return precpred(_ctx, 280); + return precpred(_ctx, 273); case 71: - return precpred(_ctx, 279); + return precpred(_ctx, 272); case 72: - return precpred(_ctx, 278); + return precpred(_ctx, 271); case 73: - return precpred(_ctx, 277); + return precpred(_ctx, 270); case 74: - return precpred(_ctx, 276); + return precpred(_ctx, 269); case 75: - return precpred(_ctx, 275); + return precpred(_ctx, 268); case 76: - return precpred(_ctx, 274); + return precpred(_ctx, 267); case 77: - return precpred(_ctx, 273); + return precpred(_ctx, 266); case 78: - return precpred(_ctx, 272); + return precpred(_ctx, 265); case 79: - return precpred(_ctx, 271); + return precpred(_ctx, 264); case 80: - return precpred(_ctx, 270); + return precpred(_ctx, 263); case 81: - return precpred(_ctx, 269); + return precpred(_ctx, 262); case 82: - return precpred(_ctx, 268); + return precpred(_ctx, 261); case 83: - return precpred(_ctx, 267); + return precpred(_ctx, 260); case 84: - return precpred(_ctx, 266); + return precpred(_ctx, 259); case 85: - return precpred(_ctx, 265); + return precpred(_ctx, 258); case 86: - return precpred(_ctx, 264); + return precpred(_ctx, 257); case 87: - return precpred(_ctx, 263); + return precpred(_ctx, 256); case 88: - return precpred(_ctx, 262); + return precpred(_ctx, 255); case 89: - return precpred(_ctx, 261); + return precpred(_ctx, 254); case 90: - return precpred(_ctx, 260); + return precpred(_ctx, 253); case 91: - return precpred(_ctx, 259); + return precpred(_ctx, 252); case 92: - return precpred(_ctx, 258); + return precpred(_ctx, 251); case 93: - return precpred(_ctx, 257); + return precpred(_ctx, 250); case 94: - return precpred(_ctx, 256); + return precpred(_ctx, 249); case 95: - return precpred(_ctx, 255); + return precpred(_ctx, 248); case 96: - return precpred(_ctx, 254); + return precpred(_ctx, 247); case 97: - return precpred(_ctx, 253); + return precpred(_ctx, 246); case 98: - return precpred(_ctx, 252); + return precpred(_ctx, 245); case 99: - return precpred(_ctx, 251); + return precpred(_ctx, 244); case 100: - return precpred(_ctx, 250); + return precpred(_ctx, 243); case 101: - return precpred(_ctx, 249); + return precpred(_ctx, 242); case 102: - return precpred(_ctx, 248); + return precpred(_ctx, 241); case 103: - return precpred(_ctx, 247); + return precpred(_ctx, 240); case 104: - return precpred(_ctx, 246); + return precpred(_ctx, 239); case 105: - return precpred(_ctx, 245); + return precpred(_ctx, 238); case 106: - return precpred(_ctx, 244); + return precpred(_ctx, 237); case 107: - return precpred(_ctx, 243); - case 108: - return precpred(_ctx, 242); - case 109: - return precpred(_ctx, 241); - case 110: - return precpred(_ctx, 238); + return precpred(_ctx, 234); } return true; } private static final String _serializedATNSegment0 = - "\u0004\u0001\u0102\u0a6f\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+ + "\u0004\u0001\u0100\u0a37\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+ "\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004"+ "\u0002\u0005\u0007\u0005\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ @@ -12619,66 +12428,62 @@ private boolean expr_sempred(ExprContext _localctx, int predIndex) { "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u05b9\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0003\u0001\u05c2\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u05cb\b\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u05d6\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u05e1\b\u0001\u0001\u0001\u0001\u0001"+ + "\u0003\u0001\u05cd\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ + "\u05d8\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u05e3\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0003\u0001\u05ec\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u05ee\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0003\u0001\u05f7\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0600\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0003\u0001\u0609\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u060d\b\u0001"+ + "\u0003\u0001\u060f\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0003\u0001\u0616\b\u0001\u0003\u0001\u0618\b\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u061c\b\u0001\u0003\u0001\u061e\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0625"+ - "\b\u0001\u0003\u0001\u0627\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004\u0001"+ - "\u0637\b\u0001\u000b\u0001\f\u0001\u0638\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0004\u0001\u062e\b\u0001\u000b\u0001\f\u0001\u062f"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u0644\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u064f\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u065a"+ - "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u063b\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u0646\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u066f\b\u0001\u0003\u0001\u0671\b\u0001"+ + "\u0001\u0001\u0003\u0001\u0651\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u067c\b\u0001\u0003\u0001"+ - "\u067e\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0666\b\u0001"+ + "\u0003\u0001\u0668\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "\u0690\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0673\b\u0001\u0003\u0001\u0675\b\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001"+ - "\u06a2\b\u0001\n\u0001\f\u0001\u06a5\t\u0001\u0003\u0001\u06a7\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005"+ + "\u0001\u0691\b\u0001\n\u0001\f\u0001\u0694\t\u0001\u0003\u0001\u0696\b"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0003\u0001\u06d9\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u06e2\b\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u06e9\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0003\u0001\u06c8\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u06d1\b\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u06d8"+ + "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0005\u0001\u06fe\b\u0001\n\u0001\f\u0001\u0701\t\u0001\u0001"+ - "\u0001\u0005\u0001\u0704\b\u0001\n\u0001\f\u0001\u0707\t\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001"+ - "\u070f\b\u0001\n\u0001\f\u0001\u0712\t\u0001\u0001\u0001\u0005\u0001\u0715"+ - "\b\u0001\n\u0001\f\u0001\u0718\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "\u0728\b\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u072c\b\u0001\u0001"+ + "\u0001\u0001\u0001\u0005\u0001\u06ed\b\u0001\n\u0001\f\u0001\u06f0\t\u0001"+ + "\u0001\u0001\u0005\u0001\u06f3\b\u0001\n\u0001\f\u0001\u06f6\t\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005"+ + "\u0001\u06fe\b\u0001\n\u0001\f\u0001\u0701\t\u0001\u0001\u0001\u0005\u0001"+ + "\u0704\b\u0001\n\u0001\f\u0001\u0707\t\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u070f\b\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u0713\b\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ @@ -12688,1705 +12493,1666 @@ private boolean expr_sempred(ExprContext _localctx, int predIndex) { "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0769"+ - "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u0771\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0779\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0781"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0750\b\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0758"+ "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u0789\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0791\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0799"+ + "\u0001\u0003\u0001\u0760\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0768\b\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0770"+ "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u07a6\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u07ae\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0003\u0001\u0778\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0780\b\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u07bb\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u07c3"+ - "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u078d\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u07d0\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0795\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0003\u0001\u07a2\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u07aa\b\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u07b7\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u07f8\b\u0001\n"+ - "\u0001\f\u0001\u07fb\t\u0001\u0003\u0001\u07fd\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u080e\b\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0817"+ - "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u083b"+ - "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u084b\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u085a\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0005\u0001\u07df\b\u0001\n\u0001\f\u0001\u07e2\t\u0001"+ + "\u0003\u0001\u07e4\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u0867\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ + "\u07f5\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u07fe\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u088b\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u0822\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u0898\b\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u089f\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u08a6\b\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u08ad"+ - "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u08b4\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u08bb\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0003\u0001\u0832\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0841\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u08d6\b\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u08de\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u08e6\b\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u08ee\b\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u084e\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u090d"+ - "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u0915\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u091d\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0925"+ - "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u092d\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0937"+ - "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0942\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u094d\b\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0872\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u0958\b\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0961"+ - "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u0969\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ + "\u087f\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0003\u0001\u0886\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u088d\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u0894\b\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u089b\b\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u08a2\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u0975\b\u0001\u0003\u0001\u0977\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0984\b\u0001"+ - "\u0003\u0001\u0986\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0005\u0001\u0998\b\u0001\n\u0001\f\u0001\u099b\t\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u08bd\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u08c5\b\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ + "\u08cd\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u08d5\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u09a6\b\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u09b1\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u09bc\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u09d1\b\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u08f4\b\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u08fc\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u09dc\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0003\u0001\u0904\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u090c\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0003\u0001\u0916\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ + "\u0921\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u092c\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u09ee\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0937\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0003\u0001\u0940\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u0948\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0a02\b\u0001\n"+ - "\u0001\f\u0001\u0a05\t\u0001\u0003\u0001\u0a07\b\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u0954\b\u0001\u0003\u0001\u0956\b"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ + "\u0001\u0963\b\u0001\u0003\u0001\u0965\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0005\u0001\u0977\b\u0001\n\u0001\f\u0001\u097a"+ + "\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0985\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0990\b\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u099b\b\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0a39"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u09b0"+ "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0005\u0001\u0a59\b\u0001\n\u0001\f\u0001\u0a5c\t\u0001\u0001\u0002"+ - "\u0003\u0002\u0a5f\b\u0002\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003"+ - "\u0001\u0004\u0001\u0004\u0001\u0004\u0003\u0004\u0a68\b\u0004\u0001\u0004"+ - "\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005\u0001\u0005\u0000\u0001"+ - "\u0002\u0006\u0000\u0002\u0004\u0006\b\n\u0000\b\u0001\u0000\b\n\u0002"+ - "\u0000\u000b\f\u001d\u001d\u0001\u0000\r\u0010\u0001\u0000\u0011\u0016"+ - "\u0002\u0000\u0017\u0017..\u0002\u0000\u0018\u0018//\u0002\u0000\"\"\u0084"+ - "\u0084\u0002\u0000 \u00f1\u00f3\u00fe\u0c62\u0000\f\u0001\u0000\u0000"+ - "\u0000\u0002\u072b\u0001\u0000\u0000\u0000\u0004\u0a5e\u0001\u0000\u0000"+ - "\u0000\u0006\u0a62\u0001\u0000\u0000\u0000\b\u0a67\u0001\u0000\u0000\u0000"+ - "\n\u0a6c\u0001\u0000\u0000\u0000\f\r\u0003\u0002\u0001\u0000\r\u000e\u0005"+ - "\u0000\u0000\u0001\u000e\u0001\u0001\u0000\u0000\u0000\u000f\u0010\u0006"+ - "\u0001\uffff\uffff\u0000\u0010\u0011\u0005\u0002\u0000\u0000\u0011\u0012"+ - "\u0003\u0002\u0001\u0000\u0012\u0013\u0005\u0003\u0000\u0000\u0013\u072c"+ - "\u0001\u0000\u0000\u0000\u0014\u0015\u0005\u0007\u0000\u0000\u0015\u072c"+ - "\u0003\u0002\u0001\u00ef\u0016\u0017\u0005\u00f2\u0000\u0000\u0017\u0018"+ - "\u0005\u0002\u0000\u0000\u0018\u001d\u0003\u0002\u0001\u0000\u0019\u001a"+ - "\u0005\u0004\u0000\u0000\u001a\u001c\u0003\u0002\u0001\u0000\u001b\u0019"+ - "\u0001\u0000\u0000\u0000\u001c\u001f\u0001\u0000\u0000\u0000\u001d\u001b"+ - "\u0001\u0000\u0000\u0000\u001d\u001e\u0001\u0000\u0000\u0000\u001e \u0001"+ - "\u0000\u0000\u0000\u001f\u001d\u0001\u0000\u0000\u0000 !\u0005\u0003\u0000"+ - "\u0000!\u072c\u0001\u0000\u0000\u0000\"#\u0005#\u0000\u0000#$\u0005\u0002"+ - "\u0000\u0000$%\u0003\u0002\u0001\u0000%&\u0005\u0004\u0000\u0000&)\u0003"+ - "\u0002\u0001\u0000\'(\u0005\u0004\u0000\u0000(*\u0003\u0002\u0001\u0000"+ - ")\'\u0001\u0000\u0000\u0000)*\u0001\u0000\u0000\u0000*+\u0001\u0000\u0000"+ - "\u0000+,\u0005\u0003\u0000\u0000,\u072c\u0001\u0000\u0000\u0000-.\u0005"+ - "%\u0000\u0000./\u0005\u0002\u0000\u0000/0\u0003\u0002\u0001\u000001\u0005"+ - "\u0003\u0000\u00001\u072c\u0001\u0000\u0000\u000023\u0005&\u0000\u0000"+ - "34\u0005\u0002\u0000\u000045\u0003\u0002\u0001\u000056\u0005\u0003\u0000"+ - "\u00006\u072c\u0001\u0000\u0000\u000078\u0005\'\u0000\u000089\u0005\u0002"+ - "\u0000\u00009<\u0003\u0002\u0001\u0000:;\u0005\u0004\u0000\u0000;=\u0003"+ - "\u0002\u0001\u0000<:\u0001\u0000\u0000\u0000<=\u0001\u0000\u0000\u0000"+ - "=>\u0001\u0000\u0000\u0000>?\u0005\u0003\u0000\u0000?\u072c\u0001\u0000"+ - "\u0000\u0000@A\u0005(\u0000\u0000AB\u0005\u0002\u0000\u0000BC\u0003\u0002"+ - "\u0001\u0000CD\u0005\u0003\u0000\u0000D\u072c\u0001\u0000\u0000\u0000"+ - "EF\u0005)\u0000\u0000FG\u0005\u0002\u0000\u0000GH\u0003\u0002\u0001\u0000"+ - "HI\u0005\u0003\u0000\u0000I\u072c\u0001\u0000\u0000\u0000JK\u0005*\u0000"+ - "\u0000KL\u0005\u0002\u0000\u0000LM\u0003\u0002\u0001\u0000MN\u0005\u0003"+ - "\u0000\u0000N\u072c\u0001\u0000\u0000\u0000OP\u0005+\u0000\u0000PQ\u0005"+ - "\u0002\u0000\u0000QR\u0003\u0002\u0001\u0000RS\u0005\u0003\u0000\u0000"+ - "S\u072c\u0001\u0000\u0000\u0000TU\u0005$\u0000\u0000UV\u0005\u0002\u0000"+ - "\u0000VW\u0003\u0002\u0001\u0000WX\u0005\u0004\u0000\u0000X[\u0003\u0002"+ - "\u0001\u0000YZ\u0005\u0004\u0000\u0000Z\\\u0003\u0002\u0001\u0000[Y\u0001"+ - "\u0000\u0000\u0000[\\\u0001\u0000\u0000\u0000\\]\u0001\u0000\u0000\u0000"+ - "]^\u0005\u0003\u0000\u0000^\u072c\u0001\u0000\u0000\u0000_`\u0005,\u0000"+ - "\u0000`a\u0005\u0002\u0000\u0000ad\u0003\u0002\u0001\u0000bc\u0005\u0004"+ - "\u0000\u0000ce\u0003\u0002\u0001\u0000db\u0001\u0000\u0000\u0000de\u0001"+ - "\u0000\u0000\u0000ef\u0001\u0000\u0000\u0000fg\u0005\u0003\u0000\u0000"+ - "g\u072c\u0001\u0000\u0000\u0000hi\u0005-\u0000\u0000ij\u0005\u0002\u0000"+ - "\u0000jm\u0003\u0002\u0001\u0000kl\u0005\u0004\u0000\u0000ln\u0003\u0002"+ - "\u0001\u0000mk\u0001\u0000\u0000\u0000mn\u0001\u0000\u0000\u0000no\u0001"+ - "\u0000\u0000\u0000op\u0005\u0003\u0000\u0000p\u072c\u0001\u0000\u0000"+ - "\u0000qr\u0005.\u0000\u0000rs\u0005\u0002\u0000\u0000sx\u0003\u0002\u0001"+ - "\u0000tu\u0005\u0004\u0000\u0000uw\u0003\u0002\u0001\u0000vt\u0001\u0000"+ - "\u0000\u0000wz\u0001\u0000\u0000\u0000xv\u0001\u0000\u0000\u0000xy\u0001"+ - "\u0000\u0000\u0000y{\u0001\u0000\u0000\u0000zx\u0001\u0000\u0000\u0000"+ - "{|\u0005\u0003\u0000\u0000|\u072c\u0001\u0000\u0000\u0000}~\u0005/\u0000"+ - "\u0000~\u007f\u0005\u0002\u0000\u0000\u007f\u0084\u0003\u0002\u0001\u0000"+ - "\u0080\u0081\u0005\u0004\u0000\u0000\u0081\u0083\u0003\u0002\u0001\u0000"+ - "\u0082\u0080\u0001\u0000\u0000\u0000\u0083\u0086\u0001\u0000\u0000\u0000"+ - "\u0084\u0082\u0001\u0000\u0000\u0000\u0084\u0085\u0001\u0000\u0000\u0000"+ - "\u0085\u0087\u0001\u0000\u0000\u0000\u0086\u0084\u0001\u0000\u0000\u0000"+ - "\u0087\u0088\u0005\u0003\u0000\u0000\u0088\u072c\u0001\u0000\u0000\u0000"+ - "\u0089\u008a\u00050\u0000\u0000\u008a\u008b\u0005\u0002\u0000\u0000\u008b"+ - "\u008c\u0003\u0002\u0001\u0000\u008c\u008d\u0005\u0003\u0000\u0000\u008d"+ - "\u072c\u0001\u0000\u0000\u0000\u008e\u0091\u00051\u0000\u0000\u008f\u0090"+ - "\u0005\u0002\u0000\u0000\u0090\u0092\u0005\u0003\u0000\u0000\u0091\u008f"+ - "\u0001\u0000\u0000\u0000\u0091\u0092\u0001\u0000\u0000\u0000\u0092\u072c"+ - "\u0001\u0000\u0000\u0000\u0093\u0096\u00052\u0000\u0000\u0094\u0095\u0005"+ - "\u0002\u0000\u0000\u0095\u0097\u0005\u0003\u0000\u0000\u0096\u0094\u0001"+ - "\u0000\u0000\u0000\u0096\u0097\u0001\u0000\u0000\u0000\u0097\u072c\u0001"+ - "\u0000\u0000\u0000\u0098\u009b\u00053\u0000\u0000\u0099\u009a\u0005\u0002"+ - "\u0000\u0000\u009a\u009c\u0005\u0003\u0000\u0000\u009b\u0099\u0001\u0000"+ - "\u0000\u0000\u009b\u009c\u0001\u0000\u0000\u0000\u009c\u072c\u0001\u0000"+ - "\u0000\u0000\u009d\u00a0\u00054\u0000\u0000\u009e\u009f\u0005\u0002\u0000"+ - "\u0000\u009f\u00a1\u0005\u0003\u0000\u0000\u00a0\u009e\u0001\u0000\u0000"+ - "\u0000\u00a0\u00a1\u0001\u0000\u0000\u0000\u00a1\u072c\u0001\u0000\u0000"+ - "\u0000\u00a2\u00a3\u00055\u0000\u0000\u00a3\u00a4\u0005\u0002\u0000\u0000"+ - "\u00a4\u00a7\u0003\u0002\u0001\u0000\u00a5\u00a6\u0005\u0004\u0000\u0000"+ - "\u00a6\u00a8\u0003\u0002\u0001\u0000\u00a7\u00a5\u0001\u0000\u0000\u0000"+ - "\u00a7\u00a8\u0001\u0000\u0000\u0000\u00a8\u00a9\u0001\u0000\u0000\u0000"+ - "\u00a9\u00aa\u0005\u0003\u0000\u0000\u00aa\u072c\u0001\u0000\u0000\u0000"+ - "\u00ab\u00ac\u00056\u0000\u0000\u00ac\u00ad\u0005\u0002\u0000\u0000\u00ad"+ - "\u00b0\u0003\u0002\u0001\u0000\u00ae\u00af\u0005\u0004\u0000\u0000\u00af"+ - "\u00b1\u0003\u0002\u0001\u0000\u00b0\u00ae\u0001\u0000\u0000\u0000\u00b0"+ - "\u00b1\u0001\u0000\u0000\u0000\u00b1\u00b2\u0001\u0000\u0000\u0000\u00b2"+ - "\u00b3\u0005\u0003\u0000\u0000\u00b3\u072c\u0001\u0000\u0000\u0000\u00b4"+ - "\u00b5\u00057\u0000\u0000\u00b5\u00b6\u0005\u0002\u0000\u0000\u00b6\u00b9"+ - "\u0003\u0002\u0001\u0000\u00b7\u00b8\u0005\u0004\u0000\u0000\u00b8\u00ba"+ - "\u0003\u0002\u0001\u0000\u00b9\u00b7\u0001\u0000\u0000\u0000\u00b9\u00ba"+ - "\u0001\u0000\u0000\u0000\u00ba\u00bb\u0001\u0000\u0000\u0000\u00bb\u00bc"+ - "\u0005\u0003\u0000\u0000\u00bc\u072c\u0001\u0000\u0000\u0000\u00bd\u00be"+ - "\u00058\u0000\u0000\u00be\u00bf\u0005\u0002\u0000\u0000\u00bf\u00c2\u0003"+ - "\u0002\u0001\u0000\u00c0\u00c1\u0005\u0004\u0000\u0000\u00c1\u00c3\u0003"+ - "\u0002\u0001\u0000\u00c2\u00c0\u0001\u0000\u0000\u0000\u00c2\u00c3\u0001"+ - "\u0000\u0000\u0000\u00c3\u00c4\u0001\u0000\u0000\u0000\u00c4\u00c5\u0005"+ - "\u0003\u0000\u0000\u00c5\u072c\u0001\u0000\u0000\u0000\u00c6\u00c7\u0005"+ - "9\u0000\u0000\u00c7\u00c8\u0005\u0002\u0000\u0000\u00c8\u00c9\u0003\u0002"+ - "\u0001\u0000\u00c9\u00ca\u0005\u0003\u0000\u0000\u00ca\u072c\u0001\u0000"+ - "\u0000\u0000\u00cb\u00cc\u0005:\u0000\u0000\u00cc\u00cd\u0005\u0002\u0000"+ - "\u0000\u00cd\u00d0\u0003\u0002\u0001\u0000\u00ce\u00cf\u0005\u0004\u0000"+ - "\u0000\u00cf\u00d1\u0003\u0002\u0001\u0000\u00d0\u00ce\u0001\u0000\u0000"+ - "\u0000\u00d0\u00d1\u0001\u0000\u0000\u0000\u00d1\u00d2\u0001\u0000\u0000"+ - "\u0000\u00d2\u00d3\u0005\u0003\u0000\u0000\u00d3\u072c\u0001\u0000\u0000"+ - "\u0000\u00d4\u00d5\u0005;\u0000\u0000\u00d5\u00d6\u0005\u0002\u0000\u0000"+ - "\u00d6\u00d9\u0003\u0002\u0001\u0000\u00d7\u00d8\u0005\u0004\u0000\u0000"+ - "\u00d8\u00da\u0003\u0002\u0001\u0000\u00d9\u00d7\u0001\u0000\u0000\u0000"+ - "\u00d9\u00da\u0001\u0000\u0000\u0000\u00da\u00db\u0001\u0000\u0000\u0000"+ - "\u00db\u00dc\u0005\u0003\u0000\u0000\u00dc\u072c\u0001\u0000\u0000\u0000"+ - "\u00dd\u00de\u0005<\u0000\u0000\u00de\u00df\u0005\u0002\u0000\u0000\u00df"+ - "\u00e0\u0003\u0002\u0001\u0000\u00e0\u00e1\u0005\u0003\u0000\u0000\u00e1"+ - "\u072c\u0001\u0000\u0000\u0000\u00e2\u00e3\u0005=\u0000\u0000\u00e3\u00e4"+ - "\u0005\u0002\u0000\u0000\u00e4\u00e7\u0003\u0002\u0001\u0000\u00e5\u00e6"+ - "\u0005\u0004\u0000\u0000\u00e6\u00e8\u0003\u0002\u0001\u0000\u00e7\u00e5"+ - "\u0001\u0000\u0000\u0000\u00e7\u00e8\u0001\u0000\u0000\u0000\u00e8\u00e9"+ - "\u0001\u0000\u0000\u0000\u00e9\u00ea\u0005\u0003\u0000\u0000\u00ea\u072c"+ - "\u0001\u0000\u0000\u0000\u00eb\u00ec\u0005>\u0000\u0000\u00ec\u00ed\u0005"+ - "\u0002\u0000\u0000\u00ed\u00f0\u0003\u0002\u0001\u0000\u00ee\u00ef\u0005"+ - "\u0004\u0000\u0000\u00ef\u00f1\u0003\u0002\u0001\u0000\u00f0\u00ee\u0001"+ - "\u0000\u0000\u0000\u00f0\u00f1\u0001\u0000\u0000\u0000\u00f1\u00f2\u0001"+ - "\u0000\u0000\u0000\u00f2\u00f3\u0005\u0003\u0000\u0000\u00f3\u072c\u0001"+ - "\u0000\u0000\u0000\u00f4\u00f5\u0005?\u0000\u0000\u00f5\u00f6\u0005\u0002"+ - "\u0000\u0000\u00f6\u00f7\u0003\u0002\u0001\u0000\u00f7\u00f8\u0005\u0003"+ - "\u0000\u0000\u00f8\u072c\u0001\u0000\u0000\u0000\u00f9\u00fa\u0005@\u0000"+ - "\u0000\u00fa\u00fb\u0005\u0002\u0000\u0000\u00fb\u00fe\u0003\u0002\u0001"+ - "\u0000\u00fc\u00fd\u0005\u0004\u0000\u0000\u00fd\u00ff\u0003\u0002\u0001"+ - "\u0000\u00fe\u00fc\u0001\u0000\u0000\u0000\u00fe\u00ff\u0001\u0000\u0000"+ - "\u0000\u00ff\u0100\u0001\u0000\u0000\u0000\u0100\u0101\u0005\u0003\u0000"+ - "\u0000\u0101\u072c\u0001\u0000\u0000\u0000\u0102\u0103\u0005A\u0000\u0000"+ - "\u0103\u0104\u0005\u0002\u0000\u0000\u0104\u0105\u0003\u0002\u0001\u0000"+ - "\u0105\u0106\u0005\u0003\u0000\u0000\u0106\u072c\u0001\u0000\u0000\u0000"+ - "\u0107\u0108\u0005B\u0000\u0000\u0108\u0109\u0005\u0002\u0000\u0000\u0109"+ - "\u010a\u0003\u0002\u0001\u0000\u010a\u010b\u0005\u0004\u0000\u0000\u010b"+ - "\u010c\u0003\u0002\u0001\u0000\u010c\u010d\u0001\u0000\u0000\u0000\u010d"+ - "\u010e\u0005\u0003\u0000\u0000\u010e\u072c\u0001\u0000\u0000\u0000\u010f"+ - "\u0110\u0005C\u0000\u0000\u0110\u0111\u0005\u0002\u0000\u0000\u0111\u0112"+ - "\u0003\u0002\u0001\u0000\u0112\u0113\u0005\u0004\u0000\u0000\u0113\u0114"+ - "\u0003\u0002\u0001\u0000\u0114\u0115\u0001\u0000\u0000\u0000\u0115\u0116"+ - "\u0005\u0003\u0000\u0000\u0116\u072c\u0001\u0000\u0000\u0000\u0117\u0118"+ - "\u0005D\u0000\u0000\u0118\u0119\u0005\u0002\u0000\u0000\u0119\u011a\u0003"+ - "\u0002\u0001\u0000\u011a\u011b\u0005\u0003\u0000\u0000\u011b\u072c\u0001"+ - "\u0000\u0000\u0000\u011c\u011d\u0005E\u0000\u0000\u011d\u011e\u0005\u0002"+ - "\u0000\u0000\u011e\u011f\u0003\u0002\u0001\u0000\u011f\u0120\u0005\u0003"+ - "\u0000\u0000\u0120\u072c\u0001\u0000\u0000\u0000\u0121\u0122\u0005F\u0000"+ - "\u0000\u0122\u0123\u0005\u0002\u0000\u0000\u0123\u0124\u0003\u0002\u0001"+ - "\u0000\u0124\u0125\u0005\u0003\u0000\u0000\u0125\u072c\u0001\u0000\u0000"+ - "\u0000\u0126\u0127\u0005G\u0000\u0000\u0127\u0128\u0005\u0002\u0000\u0000"+ - "\u0128\u0129\u0003\u0002\u0001\u0000\u0129\u012a\u0005\u0003\u0000\u0000"+ - "\u012a\u072c\u0001\u0000\u0000\u0000\u012b\u012c\u0005H\u0000\u0000\u012c"+ - "\u012d\u0005\u0002\u0000\u0000\u012d\u0130\u0003\u0002\u0001\u0000\u012e"+ - "\u012f\u0005\u0004\u0000\u0000\u012f\u0131\u0003\u0002\u0001\u0000\u0130"+ - "\u012e\u0001\u0000\u0000\u0000\u0131\u0132\u0001\u0000\u0000\u0000\u0132"+ - "\u0130\u0001\u0000\u0000\u0000\u0132\u0133\u0001\u0000\u0000\u0000\u0133"+ - "\u0134\u0001\u0000\u0000\u0000\u0134\u0135\u0005\u0003\u0000\u0000\u0135"+ - "\u072c\u0001\u0000\u0000\u0000\u0136\u0137\u0005I\u0000\u0000\u0137\u0138"+ - "\u0005\u0002\u0000\u0000\u0138\u013b\u0003\u0002\u0001\u0000\u0139\u013a"+ - "\u0005\u0004\u0000\u0000\u013a\u013c\u0003\u0002\u0001\u0000\u013b\u0139"+ - "\u0001\u0000\u0000\u0000\u013c\u013d\u0001\u0000\u0000\u0000\u013d\u013b"+ - "\u0001\u0000\u0000\u0000\u013d\u013e\u0001\u0000\u0000\u0000\u013e\u013f"+ - "\u0001\u0000\u0000\u0000\u013f\u0140\u0005\u0003\u0000\u0000\u0140\u072c"+ - "\u0001\u0000\u0000\u0000\u0141\u0142\u0005J\u0000\u0000\u0142\u0143\u0005"+ - "\u0002\u0000\u0000\u0143\u0144\u0003\u0002\u0001\u0000\u0144\u0145\u0005"+ - "\u0004\u0000\u0000\u0145\u0146\u0003\u0002\u0001\u0000\u0146\u0147\u0005"+ - "\u0003\u0000\u0000\u0147\u072c\u0001\u0000\u0000\u0000\u0148\u0149\u0005"+ - "K\u0000\u0000\u0149\u014a\u0005\u0002\u0000\u0000\u014a\u014b\u0003\u0002"+ - "\u0001\u0000\u014b\u014c\u0005\u0004\u0000\u0000\u014c\u014d\u0003\u0002"+ - "\u0001\u0000\u014d\u014e\u0005\u0003\u0000\u0000\u014e\u072c\u0001\u0000"+ - "\u0000\u0000\u014f\u0150\u0005L\u0000\u0000\u0150\u0151\u0005\u0002\u0000"+ - "\u0000\u0151\u0152\u0003\u0002\u0001\u0000\u0152\u0153\u0005\u0003\u0000"+ - "\u0000\u0153\u072c\u0001\u0000\u0000\u0000\u0154\u0155\u0005M\u0000\u0000"+ - "\u0155\u0156\u0005\u0002\u0000\u0000\u0156\u0157\u0003\u0002\u0001\u0000"+ - "\u0157\u0158\u0005\u0003\u0000\u0000\u0158\u072c\u0001\u0000\u0000\u0000"+ - "\u0159\u015a\u0005N\u0000\u0000\u015a\u015b\u0005\u0002\u0000\u0000\u015b"+ - "\u015c\u0003\u0002\u0001\u0000\u015c\u015d\u0005\u0003\u0000\u0000\u015d"+ - "\u072c\u0001\u0000\u0000\u0000\u015e\u015f\u0005O\u0000\u0000\u015f\u0160"+ - "\u0005\u0002\u0000\u0000\u0160\u0161\u0003\u0002\u0001\u0000\u0161\u0162"+ - "\u0005\u0003\u0000\u0000\u0162\u072c\u0001\u0000\u0000\u0000\u0163\u0164"+ - "\u0005P\u0000\u0000\u0164\u0165\u0005\u0002\u0000\u0000\u0165\u0166\u0003"+ - "\u0002\u0001\u0000\u0166\u0167\u0005\u0003\u0000\u0000\u0167\u072c\u0001"+ - "\u0000\u0000\u0000\u0168\u0169\u0005Q\u0000\u0000\u0169\u016a\u0005\u0002"+ - "\u0000\u0000\u016a\u016b\u0003\u0002\u0001\u0000\u016b\u016c\u0005\u0003"+ - "\u0000\u0000\u016c\u072c\u0001\u0000\u0000\u0000\u016d\u016e\u0005R\u0000"+ - "\u0000\u016e\u016f\u0005\u0002\u0000\u0000\u016f\u0170\u0003\u0002\u0001"+ - "\u0000\u0170\u0171\u0005\u0003\u0000\u0000\u0171\u072c\u0001\u0000\u0000"+ - "\u0000\u0172\u0173\u0005S\u0000\u0000\u0173\u0174\u0005\u0002\u0000\u0000"+ - "\u0174\u0175\u0003\u0002\u0001\u0000\u0175\u0176\u0005\u0003\u0000\u0000"+ - "\u0176\u072c\u0001\u0000\u0000\u0000\u0177\u0178\u0005T\u0000\u0000\u0178"+ - "\u0179\u0005\u0002\u0000\u0000\u0179\u017a\u0003\u0002\u0001\u0000\u017a"+ - "\u017b\u0005\u0003\u0000\u0000\u017b\u072c\u0001\u0000\u0000\u0000\u017c"+ - "\u017d\u0005U\u0000\u0000\u017d\u017e\u0005\u0002\u0000\u0000\u017e\u017f"+ - "\u0003\u0002\u0001\u0000\u017f\u0180\u0005\u0003\u0000\u0000\u0180\u072c"+ - "\u0001\u0000\u0000\u0000\u0181\u0182\u0005V\u0000\u0000\u0182\u0183\u0005"+ - "\u0002\u0000\u0000\u0183\u0184\u0003\u0002\u0001\u0000\u0184\u0185\u0005"+ - "\u0003\u0000\u0000\u0185\u072c\u0001\u0000\u0000\u0000\u0186\u0187\u0005"+ - "W\u0000\u0000\u0187\u0188\u0005\u0002\u0000\u0000\u0188\u0189\u0003\u0002"+ - "\u0001\u0000\u0189\u018a\u0005\u0003\u0000\u0000\u018a\u072c\u0001\u0000"+ - "\u0000\u0000\u018b\u018c\u0005X\u0000\u0000\u018c\u018d\u0005\u0002\u0000"+ - "\u0000\u018d\u018e\u0003\u0002\u0001\u0000\u018e\u018f\u0005\u0003\u0000"+ - "\u0000\u018f\u072c\u0001\u0000\u0000\u0000\u0190\u0191\u0005Y\u0000\u0000"+ - "\u0191\u0192\u0005\u0002\u0000\u0000\u0192\u0193\u0003\u0002\u0001\u0000"+ - "\u0193\u0194\u0005\u0003\u0000\u0000\u0194\u072c\u0001\u0000\u0000\u0000"+ - "\u0195\u0196\u0005Z\u0000\u0000\u0196\u0197\u0005\u0002\u0000\u0000\u0197"+ - "\u0198\u0003\u0002\u0001\u0000\u0198\u0199\u0005\u0004\u0000\u0000\u0199"+ - "\u019a\u0003\u0002\u0001\u0000\u019a\u019b\u0005\u0003\u0000\u0000\u019b"+ - "\u072c\u0001\u0000\u0000\u0000\u019c\u019d\u0005[\u0000\u0000\u019d\u019e"+ - "\u0005\u0002\u0000\u0000\u019e\u01a1\u0003\u0002\u0001\u0000\u019f\u01a0"+ - "\u0005\u0004\u0000\u0000\u01a0\u01a2\u0003\u0002\u0001\u0000\u01a1\u019f"+ - "\u0001\u0000\u0000\u0000\u01a1\u01a2\u0001\u0000\u0000\u0000\u01a2\u01a3"+ - "\u0001\u0000\u0000\u0000\u01a3\u01a4\u0005\u0003\u0000\u0000\u01a4\u072c"+ - "\u0001\u0000\u0000\u0000\u01a5\u01a6\u0005\\\u0000\u0000\u01a6\u01a7\u0005"+ - "\u0002\u0000\u0000\u01a7\u01a8\u0003\u0002\u0001\u0000\u01a8\u01a9\u0005"+ - "\u0004\u0000\u0000\u01a9\u01aa\u0003\u0002\u0001\u0000\u01aa\u01ab\u0005"+ - "\u0003\u0000\u0000\u01ab\u072c\u0001\u0000\u0000\u0000\u01ac\u01ad\u0005"+ - "]\u0000\u0000\u01ad\u01ae\u0005\u0002\u0000\u0000\u01ae\u01af\u0003\u0002"+ - "\u0001\u0000\u01af\u01b0\u0005\u0004\u0000\u0000\u01b0\u01b1\u0003\u0002"+ - "\u0001\u0000\u01b1\u01b2\u0005\u0003\u0000\u0000\u01b2\u072c\u0001\u0000"+ - "\u0000\u0000\u01b3\u01b4\u0005^\u0000\u0000\u01b4\u01b5\u0005\u0002\u0000"+ - "\u0000\u01b5\u01b8\u0003\u0002\u0001\u0000\u01b6\u01b7\u0005\u0004\u0000"+ - "\u0000\u01b7\u01b9\u0003\u0002\u0001\u0000\u01b8\u01b6\u0001\u0000\u0000"+ - "\u0000\u01b8\u01b9\u0001\u0000\u0000\u0000\u01b9\u01ba\u0001\u0000\u0000"+ - "\u0000\u01ba\u01bb\u0005\u0003\u0000\u0000\u01bb\u072c\u0001\u0000\u0000"+ - "\u0000\u01bc\u01bd\u0005_\u0000\u0000\u01bd\u01be\u0005\u0002\u0000\u0000"+ - "\u01be\u01c1\u0003\u0002\u0001\u0000\u01bf\u01c0\u0005\u0004\u0000\u0000"+ - "\u01c0\u01c2\u0003\u0002\u0001\u0000\u01c1\u01bf\u0001\u0000\u0000\u0000"+ - "\u01c1\u01c2\u0001\u0000\u0000\u0000\u01c2\u01c3\u0001\u0000\u0000\u0000"+ - "\u01c3\u01c4\u0005\u0003\u0000\u0000\u01c4\u072c\u0001\u0000\u0000\u0000"+ - "\u01c5\u01c6\u0005`\u0000\u0000\u01c6\u01c7\u0005\u0002\u0000\u0000\u01c7"+ - "\u01c8\u0003\u0002\u0001\u0000\u01c8\u01c9\u0005\u0003\u0000\u0000\u01c9"+ - "\u072c\u0001\u0000\u0000\u0000\u01ca\u01cb\u0005a\u0000\u0000\u01cb\u01cc"+ - "\u0005\u0002\u0000\u0000\u01cc\u01cd\u0003\u0002\u0001\u0000\u01cd\u01ce"+ - "\u0005\u0003\u0000\u0000\u01ce\u072c\u0001\u0000\u0000\u0000\u01cf\u01d0"+ - "\u0005b\u0000\u0000\u01d0\u01d1\u0005\u0002\u0000\u0000\u01d1\u01d2\u0003"+ - "\u0002\u0001\u0000\u01d2\u01d3\u0005\u0004\u0000\u0000\u01d3\u01d4\u0003"+ - "\u0002\u0001\u0000\u01d4\u01d5\u0005\u0003\u0000\u0000\u01d5\u072c\u0001"+ - "\u0000\u0000\u0000\u01d6\u01d7\u0005c\u0000\u0000\u01d7\u01d8\u0005\u0002"+ - "\u0000\u0000\u01d8\u072c\u0005\u0003\u0000\u0000\u01d9\u01da\u0005d\u0000"+ - "\u0000\u01da\u01db\u0005\u0002\u0000\u0000\u01db\u01dc\u0003\u0002\u0001"+ - "\u0000\u01dc\u01dd\u0005\u0004\u0000\u0000\u01dd\u01de\u0003\u0002\u0001"+ - "\u0000\u01de\u01df\u0005\u0003\u0000\u0000\u01df\u072c\u0001\u0000\u0000"+ - "\u0000\u01e0\u01e1\u0005e\u0000\u0000\u01e1\u01e2\u0005\u0002\u0000\u0000"+ - "\u01e2\u01e3\u0003\u0002\u0001\u0000\u01e3\u01e4\u0005\u0003\u0000\u0000"+ - "\u01e4\u072c\u0001\u0000\u0000\u0000\u01e5\u01e6\u0005f\u0000\u0000\u01e6"+ - "\u01e7\u0005\u0002\u0000\u0000\u01e7\u01e8\u0003\u0002\u0001\u0000\u01e8"+ - "\u01e9\u0005\u0003\u0000\u0000\u01e9\u072c\u0001\u0000\u0000\u0000\u01ea"+ - "\u01eb\u0005g\u0000\u0000\u01eb\u01ec\u0005\u0002\u0000\u0000\u01ec\u01ed"+ - "\u0003\u0002\u0001\u0000\u01ed\u01ee\u0005\u0004\u0000\u0000\u01ee\u01ef"+ - "\u0003\u0002\u0001\u0000\u01ef\u01f0\u0005\u0003\u0000\u0000\u01f0\u072c"+ - "\u0001\u0000\u0000\u0000\u01f1\u01f2\u0005h\u0000\u0000\u01f2\u01f3\u0005"+ - "\u0002\u0000\u0000\u01f3\u01f4\u0003\u0002\u0001\u0000\u01f4\u01f5\u0005"+ - "\u0003\u0000\u0000\u01f5\u072c\u0001\u0000\u0000\u0000\u01f6\u01f7\u0005"+ - "i\u0000\u0000\u01f7\u01f8\u0005\u0002\u0000\u0000\u01f8\u01f9\u0003\u0002"+ - "\u0001\u0000\u01f9\u01fa\u0005\u0003\u0000\u0000\u01fa\u072c\u0001\u0000"+ - "\u0000\u0000\u01fb\u01fc\u0005j\u0000\u0000\u01fc\u01fd\u0005\u0002\u0000"+ - "\u0000\u01fd\u0200\u0003\u0002\u0001\u0000\u01fe\u01ff\u0005\u0004\u0000"+ - "\u0000\u01ff\u0201\u0003\u0002\u0001\u0000\u0200\u01fe\u0001\u0000\u0000"+ - "\u0000\u0200\u0201\u0001\u0000\u0000\u0000\u0201\u0202\u0001\u0000\u0000"+ - "\u0000\u0202\u0203\u0005\u0003\u0000\u0000\u0203\u072c\u0001\u0000\u0000"+ - "\u0000\u0204\u0205\u0005k\u0000\u0000\u0205\u0206\u0005\u0002\u0000\u0000"+ - "\u0206\u0207\u0003\u0002\u0001\u0000\u0207\u0208\u0005\u0003\u0000\u0000"+ - "\u0208\u072c\u0001\u0000\u0000\u0000\u0209\u020a\u0005l\u0000\u0000\u020a"+ - "\u020b\u0005\u0002\u0000\u0000\u020b\u0210\u0003\u0002\u0001\u0000\u020c"+ - "\u020d\u0005\u0004\u0000\u0000\u020d\u020f\u0003\u0002\u0001\u0000\u020e"+ - "\u020c\u0001\u0000\u0000\u0000\u020f\u0212\u0001\u0000\u0000\u0000\u0210"+ - "\u020e\u0001\u0000\u0000\u0000\u0210\u0211\u0001\u0000\u0000\u0000\u0211"+ - "\u0213\u0001\u0000\u0000\u0000\u0212\u0210\u0001\u0000\u0000\u0000\u0213"+ - "\u0214\u0005\u0003\u0000\u0000\u0214\u072c\u0001\u0000\u0000\u0000\u0215"+ - "\u0216\u0005m\u0000\u0000\u0216\u0217\u0005\u0002\u0000\u0000\u0217\u021c"+ - "\u0003\u0002\u0001\u0000\u0218\u0219\u0005\u0004\u0000\u0000\u0219\u021b"+ - "\u0003\u0002\u0001\u0000\u021a\u0218\u0001\u0000\u0000\u0000\u021b\u021e"+ - "\u0001\u0000\u0000\u0000\u021c\u021a\u0001\u0000\u0000\u0000\u021c\u021d"+ - "\u0001\u0000\u0000\u0000\u021d\u021f\u0001\u0000\u0000\u0000\u021e\u021c"+ - "\u0001\u0000\u0000\u0000\u021f\u0220\u0005\u0003\u0000\u0000\u0220\u072c"+ - "\u0001\u0000\u0000\u0000\u0221\u0222\u0005n\u0000\u0000\u0222\u0223\u0005"+ - "\u0002\u0000\u0000\u0223\u0224\u0003\u0002\u0001\u0000\u0224\u0225\u0005"+ - "\u0003\u0000\u0000\u0225\u072c\u0001\u0000\u0000\u0000\u0226\u0227\u0005"+ - "o\u0000\u0000\u0227\u0228\u0005\u0002\u0000\u0000\u0228\u022d\u0003\u0002"+ - "\u0001\u0000\u0229\u022a\u0005\u0004\u0000\u0000\u022a\u022c\u0003\u0002"+ - "\u0001\u0000\u022b\u0229\u0001\u0000\u0000\u0000\u022c\u022f\u0001\u0000"+ - "\u0000\u0000\u022d\u022b\u0001\u0000\u0000\u0000\u022d\u022e\u0001\u0000"+ - "\u0000\u0000\u022e\u0230\u0001\u0000\u0000\u0000\u022f\u022d\u0001\u0000"+ - "\u0000\u0000\u0230\u0231\u0005\u0003\u0000\u0000\u0231\u072c\u0001\u0000"+ - "\u0000\u0000\u0232\u0233\u0005p\u0000\u0000\u0233\u0234\u0005\u0002\u0000"+ - "\u0000\u0234\u0235\u0003\u0002\u0001\u0000\u0235\u0236\u0005\u0003\u0000"+ - "\u0000\u0236\u072c\u0001\u0000\u0000\u0000\u0237\u0238\u0005q\u0000\u0000"+ - "\u0238\u0239\u0005\u0002\u0000\u0000\u0239\u023a\u0003\u0002\u0001\u0000"+ - "\u023a\u023b\u0005\u0003\u0000\u0000\u023b\u072c\u0001\u0000\u0000\u0000"+ - "\u023c\u023d\u0005r\u0000\u0000\u023d\u023e\u0005\u0002\u0000\u0000\u023e"+ - "\u023f\u0003\u0002\u0001\u0000\u023f\u0240\u0005\u0003\u0000\u0000\u0240"+ - "\u072c\u0001\u0000\u0000\u0000\u0241\u0242\u0005s\u0000\u0000\u0242\u0243"+ - "\u0005\u0002\u0000\u0000\u0243\u0244\u0003\u0002\u0001\u0000\u0244\u0245"+ - "\u0005\u0003\u0000\u0000\u0245\u072c\u0001\u0000\u0000\u0000\u0246\u0247"+ - "\u0005t\u0000\u0000\u0247\u0248\u0005\u0002\u0000\u0000\u0248\u0249\u0003"+ - "\u0002\u0001\u0000\u0249\u024a\u0005\u0003\u0000\u0000\u024a\u072c\u0001"+ - "\u0000\u0000\u0000\u024b\u024c\u0005u\u0000\u0000\u024c\u024d\u0005\u0002"+ - "\u0000\u0000\u024d\u0252\u0003\u0002\u0001\u0000\u024e\u024f\u0005\u0004"+ - "\u0000\u0000\u024f\u0251\u0003\u0002\u0001\u0000\u0250\u024e\u0001\u0000"+ - "\u0000\u0000\u0251\u0254\u0001\u0000\u0000\u0000\u0252\u0250\u0001\u0000"+ - "\u0000\u0000\u0252\u0253\u0001\u0000\u0000\u0000\u0253\u0255\u0001\u0000"+ - "\u0000\u0000\u0254\u0252\u0001\u0000\u0000\u0000\u0255\u0256\u0005\u0003"+ - "\u0000\u0000\u0256\u072c\u0001\u0000\u0000\u0000\u0257\u0258\u0005v\u0000"+ - "\u0000\u0258\u0259\u0005\u0002\u0000\u0000\u0259\u025a\u0003\u0002\u0001"+ - "\u0000\u025a\u025b\u0005\u0004\u0000\u0000\u025b\u025c\u0003\u0002\u0001"+ - "\u0000\u025c\u025d\u0005\u0003\u0000\u0000\u025d\u072c\u0001\u0000\u0000"+ - "\u0000\u025e\u025f\u0005w\u0000\u0000\u025f\u0260\u0005\u0002\u0000\u0000"+ - "\u0260\u0261\u0003\u0002\u0001\u0000\u0261\u0262\u0005\u0004\u0000\u0000"+ - "\u0262\u0265\u0003\u0002\u0001\u0000\u0263\u0264\u0005\u0004\u0000\u0000"+ - "\u0264\u0266\u0003\u0002\u0001\u0000\u0265\u0263\u0001\u0000\u0000\u0000"+ - "\u0265\u0266\u0001\u0000\u0000\u0000\u0266\u0267\u0001\u0000\u0000\u0000"+ - "\u0267\u0268\u0005\u0003\u0000\u0000\u0268\u072c\u0001\u0000\u0000\u0000"+ - "\u0269\u026a\u0005x\u0000\u0000\u026a\u026b\u0005\u0002\u0000\u0000\u026b"+ - "\u0272\u0003\u0002\u0001\u0000\u026c\u026d\u0005\u0004\u0000\u0000\u026d"+ - "\u0270\u0003\u0002\u0001\u0000\u026e\u026f\u0005\u0004\u0000\u0000\u026f"+ - "\u0271\u0003\u0002\u0001\u0000\u0270\u026e\u0001\u0000\u0000\u0000\u0270"+ - "\u0271\u0001\u0000\u0000\u0000\u0271\u0273\u0001\u0000\u0000\u0000\u0272"+ - "\u026c\u0001\u0000\u0000\u0000\u0272\u0273\u0001\u0000\u0000\u0000\u0273"+ - "\u0274\u0001\u0000\u0000\u0000\u0274\u0275\u0005\u0003\u0000\u0000\u0275"+ - "\u072c\u0001\u0000\u0000\u0000\u0276\u0277\u0005y\u0000\u0000\u0277\u0278"+ - "\u0005\u0002\u0000\u0000\u0278\u027b\u0003\u0002\u0001\u0000\u0279\u027a"+ - "\u0005\u0004\u0000\u0000\u027a\u027c\u0003\u0002\u0001\u0000\u027b\u0279"+ - "\u0001\u0000\u0000\u0000\u027b\u027c\u0001\u0000\u0000\u0000\u027c\u027d"+ - "\u0001\u0000\u0000\u0000\u027d\u027e\u0005\u0003\u0000\u0000\u027e\u072c"+ - "\u0001\u0000\u0000\u0000\u027f\u0280\u0005z\u0000\u0000\u0280\u0281\u0005"+ - "\u0002\u0000\u0000\u0281\u0282\u0003\u0002\u0001\u0000\u0282\u0283\u0005"+ - "\u0003\u0000\u0000\u0283\u072c\u0001\u0000\u0000\u0000\u0284\u0285\u0005"+ - "{\u0000\u0000\u0285\u0286\u0005\u0002\u0000\u0000\u0286\u0287\u0003\u0002"+ - "\u0001\u0000\u0287\u0288\u0005\u0003\u0000\u0000\u0288\u072c\u0001\u0000"+ - "\u0000\u0000\u0289\u028a\u0005|\u0000\u0000\u028a\u028b\u0005\u0002\u0000"+ - "\u0000\u028b\u028c\u0003\u0002\u0001\u0000\u028c\u028d\u0005\u0004\u0000"+ - "\u0000\u028d\u028e\u0003\u0002\u0001\u0000\u028e\u028f\u0005\u0004\u0000"+ - "\u0000\u028f\u0290\u0003\u0002\u0001\u0000\u0290\u0291\u0005\u0003\u0000"+ - "\u0000\u0291\u072c\u0001\u0000\u0000\u0000\u0292\u0293\u0005}\u0000\u0000"+ - "\u0293\u0294\u0005\u0002\u0000\u0000\u0294\u0295\u0003\u0002\u0001\u0000"+ - "\u0295\u0296\u0005\u0003\u0000\u0000\u0296\u072c\u0001\u0000\u0000\u0000"+ - "\u0297\u0298\u0005~\u0000\u0000\u0298\u0299\u0005\u0002\u0000\u0000\u0299"+ - "\u029a\u0003\u0002\u0001\u0000\u029a\u029b\u0005\u0004\u0000\u0000\u029b"+ - "\u029c\u0003\u0002\u0001\u0000\u029c\u029d\u0005\u0004\u0000\u0000\u029d"+ - "\u02a0\u0003\u0002\u0001\u0000\u029e\u029f\u0005\u0004\u0000\u0000\u029f"+ - "\u02a1\u0003\u0002\u0001\u0000\u02a0\u029e\u0001\u0000\u0000\u0000\u02a0"+ - "\u02a1\u0001\u0000\u0000\u0000\u02a1\u02a2\u0001\u0000\u0000\u0000\u02a2"+ - "\u02a3\u0005\u0003\u0000\u0000\u02a3\u072c\u0001\u0000\u0000\u0000\u02a4"+ - "\u02a5\u0005\u007f\u0000\u0000\u02a5\u02a6\u0005\u0002\u0000\u0000\u02a6"+ - "\u02a7\u0003\u0002\u0001\u0000\u02a7\u02a8\u0005\u0004\u0000\u0000\u02a8"+ - "\u02a9\u0003\u0002\u0001\u0000\u02a9\u02aa\u0005\u0003\u0000\u0000\u02aa"+ - "\u072c\u0001\u0000\u0000\u0000\u02ab\u02ac\u0005\u0080\u0000\u0000\u02ac"+ - "\u02ad\u0005\u0002\u0000\u0000\u02ad\u02b0\u0003\u0002\u0001\u0000\u02ae"+ - "\u02af\u0005\u0004\u0000\u0000\u02af\u02b1\u0003\u0002\u0001\u0000\u02b0"+ - "\u02ae\u0001\u0000\u0000\u0000\u02b0\u02b1\u0001\u0000\u0000\u0000\u02b1"+ - "\u02b2\u0001\u0000\u0000\u0000\u02b2\u02b3\u0005\u0003\u0000\u0000\u02b3"+ - "\u072c\u0001\u0000\u0000\u0000\u02b4\u02b5\u0005\u0081\u0000\u0000\u02b5"+ - "\u02b6\u0005\u0002\u0000\u0000\u02b6\u02b7\u0003\u0002\u0001\u0000\u02b7"+ - "\u02b8\u0005\u0003\u0000\u0000\u02b8\u072c\u0001\u0000\u0000\u0000\u02b9"+ - "\u02ba\u0005\u0082\u0000\u0000\u02ba\u02bb\u0005\u0002\u0000\u0000\u02bb"+ - "\u02bc\u0003\u0002\u0001\u0000\u02bc\u02bd\u0005\u0004\u0000\u0000\u02bd"+ - "\u02c0\u0003\u0002\u0001\u0000\u02be\u02bf\u0005\u0004\u0000\u0000\u02bf"+ - "\u02c1\u0003\u0002\u0001\u0000\u02c0\u02be\u0001\u0000\u0000\u0000\u02c0"+ - "\u02c1\u0001\u0000\u0000\u0000\u02c1\u02c2\u0001\u0000\u0000\u0000\u02c2"+ - "\u02c3\u0005\u0003\u0000\u0000\u02c3\u072c\u0001\u0000\u0000\u0000\u02c4"+ - "\u02c5\u0005\u0083\u0000\u0000\u02c5\u02c6\u0005\u0002\u0000\u0000\u02c6"+ - "\u02c7\u0003\u0002\u0001\u0000\u02c7\u02c8\u0005\u0004\u0000\u0000\u02c8"+ - "\u02c9\u0003\u0002\u0001\u0000\u02c9\u02ca\u0005\u0004\u0000\u0000\u02ca"+ - "\u02cd\u0003\u0002\u0001\u0000\u02cb\u02cc\u0005\u0004\u0000\u0000\u02cc"+ - "\u02ce\u0003\u0002\u0001\u0000\u02cd\u02cb\u0001\u0000\u0000\u0000\u02cd"+ - "\u02ce\u0001\u0000\u0000\u0000\u02ce\u02cf\u0001\u0000\u0000\u0000\u02cf"+ - "\u02d0\u0005\u0003\u0000\u0000\u02d0\u072c\u0001\u0000\u0000\u0000\u02d1"+ - "\u02d2\u0005\u0084\u0000\u0000\u02d2\u02d3\u0005\u0002\u0000\u0000\u02d3"+ - "\u02d4\u0003\u0002\u0001\u0000\u02d4\u02d5\u0005\u0003\u0000\u0000\u02d5"+ - "\u072c\u0001\u0000\u0000\u0000\u02d6\u02d7\u0005\u0085\u0000\u0000\u02d7"+ - "\u02d8\u0005\u0002\u0000\u0000\u02d8\u02d9\u0003\u0002\u0001\u0000\u02d9"+ - "\u02da\u0005\u0004\u0000\u0000\u02da\u02db\u0003\u0002\u0001\u0000\u02db"+ - "\u02dc\u0005\u0003\u0000\u0000\u02dc\u072c\u0001\u0000\u0000\u0000\u02dd"+ - "\u02de\u0005\u0086\u0000\u0000\u02de\u02df\u0005\u0002\u0000\u0000\u02df"+ - "\u02e0\u0003\u0002\u0001\u0000\u02e0\u02e1\u0005\u0003\u0000\u0000\u02e1"+ - "\u072c\u0001\u0000\u0000\u0000\u02e2\u02e3\u0005\u0087\u0000\u0000\u02e3"+ - "\u02e4\u0005\u0002\u0000\u0000\u02e4\u02e5\u0003\u0002\u0001\u0000\u02e5"+ - "\u02e6\u0005\u0003\u0000\u0000\u02e6\u072c\u0001\u0000\u0000\u0000\u02e7"+ - "\u02e8\u0005\u0088\u0000\u0000\u02e8\u02e9\u0005\u0002\u0000\u0000\u02e9"+ - "\u02ea\u0003\u0002\u0001\u0000\u02ea\u02eb\u0005\u0003\u0000\u0000\u02eb"+ - "\u072c\u0001\u0000\u0000\u0000\u02ec\u02ed\u0005\u0089\u0000\u0000\u02ed"+ - "\u02ee\u0005\u0002\u0000\u0000\u02ee\u02f1\u0003\u0002\u0001\u0000\u02ef"+ - "\u02f0\u0005\u0004\u0000\u0000\u02f0\u02f2\u0003\u0002\u0001\u0000\u02f1"+ - "\u02ef\u0001\u0000\u0000\u0000\u02f1\u02f2\u0001\u0000\u0000\u0000\u02f2"+ - "\u02f3\u0001\u0000\u0000\u0000\u02f3\u02f4\u0005\u0003\u0000\u0000\u02f4"+ - "\u072c\u0001\u0000\u0000\u0000\u02f5\u02f6\u0005\u008a\u0000\u0000\u02f6"+ - "\u02f7\u0005\u0002\u0000\u0000\u02f7\u02f8\u0003\u0002\u0001\u0000\u02f8"+ - "\u02f9\u0005\u0003\u0000\u0000\u02f9\u072c\u0001\u0000\u0000\u0000\u02fa"+ - "\u02fb\u0005\u008b\u0000\u0000\u02fb\u02fc\u0005\u0002\u0000\u0000\u02fc"+ - "\u02fd\u0003\u0002\u0001\u0000\u02fd\u02fe\u0005\u0004\u0000\u0000\u02fe"+ - "\u02ff\u0003\u0002\u0001\u0000\u02ff\u0300\u0005\u0004\u0000\u0000\u0300"+ - "\u030b\u0003\u0002\u0001\u0000\u0301\u0302\u0005\u0004\u0000\u0000\u0302"+ - "\u0309\u0003\u0002\u0001\u0000\u0303\u0304\u0005\u0004\u0000\u0000\u0304"+ - "\u0307\u0003\u0002\u0001\u0000\u0305\u0306\u0005\u0004\u0000\u0000\u0306"+ - "\u0308\u0003\u0002\u0001\u0000\u0307\u0305\u0001\u0000\u0000\u0000\u0307"+ - "\u0308\u0001\u0000\u0000\u0000\u0308\u030a\u0001\u0000\u0000\u0000\u0309"+ - "\u0303\u0001\u0000\u0000\u0000\u0309\u030a\u0001\u0000\u0000\u0000\u030a"+ - "\u030c\u0001\u0000\u0000\u0000\u030b\u0301\u0001\u0000\u0000\u0000\u030b"+ - "\u030c\u0001\u0000\u0000\u0000\u030c\u030d\u0001\u0000\u0000\u0000\u030d"+ - "\u030e\u0005\u0003\u0000\u0000\u030e\u072c\u0001\u0000\u0000\u0000\u030f"+ - "\u0310\u0005\u008c\u0000\u0000\u0310\u0311\u0005\u0002\u0000\u0000\u0311"+ - "\u0312\u0003\u0002\u0001\u0000\u0312\u0313\u0005\u0004\u0000\u0000\u0313"+ - "\u0316\u0003\u0002\u0001\u0000\u0314\u0315\u0005\u0004\u0000\u0000\u0315"+ - "\u0317\u0003\u0002\u0001\u0000\u0316\u0314\u0001\u0000\u0000\u0000\u0316"+ - "\u0317\u0001\u0000\u0000\u0000\u0317\u0318\u0001\u0000\u0000\u0000\u0318"+ - "\u0319\u0005\u0003\u0000\u0000\u0319\u072c\u0001\u0000\u0000\u0000\u031a"+ - "\u031b\u0005\u008d\u0000\u0000\u031b\u031c\u0005\u0002\u0000\u0000\u031c"+ - "\u072c\u0005\u0003\u0000\u0000\u031d\u031e\u0005\u008e\u0000\u0000\u031e"+ - "\u031f\u0005\u0002\u0000\u0000\u031f\u072c\u0005\u0003\u0000\u0000\u0320"+ - "\u0321\u0005\u008f\u0000\u0000\u0321\u0322\u0005\u0002\u0000\u0000\u0322"+ - "\u0323\u0003\u0002\u0001\u0000\u0323\u0324\u0005\u0003\u0000\u0000\u0324"+ - "\u072c\u0001\u0000\u0000\u0000\u0325\u0326\u0005\u0090\u0000\u0000\u0326"+ - "\u0327\u0005\u0002\u0000\u0000\u0327\u0328\u0003\u0002\u0001\u0000\u0328"+ - "\u0329\u0005\u0003\u0000\u0000\u0329\u072c\u0001\u0000\u0000\u0000\u032a"+ - "\u032b\u0005\u0091\u0000\u0000\u032b\u032c\u0005\u0002\u0000\u0000\u032c"+ - "\u032d\u0003\u0002\u0001\u0000\u032d\u032e\u0005\u0003\u0000\u0000\u032e"+ - "\u072c\u0001\u0000\u0000\u0000\u032f\u0330\u0005\u0092\u0000\u0000\u0330"+ - "\u0331\u0005\u0002\u0000\u0000\u0331\u0332\u0003\u0002\u0001\u0000\u0332"+ - "\u0333\u0005\u0003\u0000\u0000\u0333\u072c\u0001\u0000\u0000\u0000\u0334"+ - "\u0335\u0005\u0093\u0000\u0000\u0335\u0336\u0005\u0002\u0000\u0000\u0336"+ - "\u0337\u0003\u0002\u0001\u0000\u0337\u0338\u0005\u0003\u0000\u0000\u0338"+ - "\u072c\u0001\u0000\u0000\u0000\u0339\u033a\u0005\u0094\u0000\u0000\u033a"+ - "\u033b\u0005\u0002\u0000\u0000\u033b\u033c\u0003\u0002\u0001\u0000\u033c"+ - "\u033d\u0005\u0003\u0000\u0000\u033d\u072c\u0001\u0000\u0000\u0000\u033e"+ - "\u033f\u0005\u0095\u0000\u0000\u033f\u0340\u0005\u0002\u0000\u0000\u0340"+ - "\u0343\u0003\u0002\u0001\u0000\u0341\u0342\u0005\u0004\u0000\u0000\u0342"+ - "\u0344\u0003\u0002\u0001\u0000\u0343\u0341\u0001\u0000\u0000\u0000\u0343"+ - "\u0344\u0001\u0000\u0000\u0000\u0344\u0345\u0001\u0000\u0000\u0000\u0345"+ - "\u0346\u0005\u0003\u0000\u0000\u0346\u072c\u0001\u0000\u0000\u0000\u0347"+ - "\u0348\u0005\u0096\u0000\u0000\u0348\u0349\u0005\u0002\u0000\u0000\u0349"+ - "\u034a\u0003\u0002\u0001\u0000\u034a\u034b\u0005\u0004\u0000\u0000\u034b"+ - "\u034c\u0003\u0002\u0001\u0000\u034c\u034d\u0005\u0004\u0000\u0000\u034d"+ - "\u034e\u0003\u0002\u0001\u0000\u034e\u034f\u0005\u0003\u0000\u0000\u034f"+ - "\u072c\u0001\u0000\u0000\u0000\u0350\u0351\u0005\u0097\u0000\u0000\u0351"+ - "\u0352\u0005\u0002\u0000\u0000\u0352\u0353\u0003\u0002\u0001\u0000\u0353"+ - "\u0354\u0005\u0004\u0000\u0000\u0354\u0357\u0003\u0002\u0001\u0000\u0355"+ - "\u0356\u0005\u0004\u0000\u0000\u0356\u0358\u0003\u0002\u0001\u0000\u0357"+ - "\u0355\u0001\u0000\u0000\u0000\u0357\u0358\u0001\u0000\u0000\u0000\u0358"+ - "\u0359\u0001\u0000\u0000\u0000\u0359\u035a\u0005\u0003\u0000\u0000\u035a"+ - "\u072c\u0001\u0000\u0000\u0000\u035b\u035c\u0005\u0098\u0000\u0000\u035c"+ - "\u035d\u0005\u0002\u0000\u0000\u035d\u035e\u0003\u0002\u0001\u0000\u035e"+ - "\u035f\u0005\u0004\u0000\u0000\u035f\u0360\u0003\u0002\u0001\u0000\u0360"+ - "\u0361\u0005\u0003\u0000\u0000\u0361\u072c\u0001\u0000\u0000\u0000\u0362"+ - "\u0363\u0005\u0099\u0000\u0000\u0363\u0364\u0005\u0002\u0000\u0000\u0364"+ - "\u0365\u0003\u0002\u0001\u0000\u0365\u0366\u0005\u0004\u0000\u0000\u0366"+ - "\u0367\u0003\u0002\u0001\u0000\u0367\u0368\u0005\u0003\u0000\u0000\u0368"+ - "\u072c\u0001\u0000\u0000\u0000\u0369\u036a\u0005\u009a\u0000\u0000\u036a"+ - "\u036b\u0005\u0002\u0000\u0000\u036b\u036c\u0003\u0002\u0001\u0000\u036c"+ - "\u036d\u0005\u0004\u0000\u0000\u036d\u0370\u0003\u0002\u0001\u0000\u036e"+ - "\u036f\u0005\u0004\u0000\u0000\u036f\u0371\u0003\u0002\u0001\u0000\u0370"+ - "\u036e\u0001\u0000\u0000\u0000\u0370\u0371\u0001\u0000\u0000\u0000\u0371"+ - "\u0372\u0001\u0000\u0000\u0000\u0372\u0373\u0005\u0003\u0000\u0000\u0373"+ - "\u072c\u0001\u0000\u0000\u0000\u0374\u0375\u0005\u009b\u0000\u0000\u0375"+ - "\u0376\u0005\u0002\u0000\u0000\u0376\u0377\u0003\u0002\u0001\u0000\u0377"+ - "\u0378\u0005\u0004\u0000\u0000\u0378\u037b\u0003\u0002\u0001\u0000\u0379"+ - "\u037a\u0005\u0004\u0000\u0000\u037a\u037c\u0003\u0002\u0001\u0000\u037b"+ - "\u0379\u0001\u0000\u0000\u0000\u037b\u037c\u0001\u0000\u0000\u0000\u037c"+ - "\u037d\u0001\u0000\u0000\u0000\u037d\u037e\u0005\u0003\u0000\u0000\u037e"+ - "\u072c\u0001\u0000\u0000\u0000\u037f\u0380\u0005\u009c\u0000\u0000\u0380"+ - "\u0381\u0005\u0002\u0000\u0000\u0381\u0384\u0003\u0002\u0001\u0000\u0382"+ - "\u0383\u0005\u0004\u0000\u0000\u0383\u0385\u0003\u0002\u0001\u0000\u0384"+ - "\u0382\u0001\u0000\u0000\u0000\u0384\u0385\u0001\u0000\u0000\u0000\u0385"+ - "\u0386\u0001\u0000\u0000\u0000\u0386\u0387\u0005\u0003\u0000\u0000\u0387"+ - "\u072c\u0001\u0000\u0000\u0000\u0388\u0389\u0005\u009d\u0000\u0000\u0389"+ - "\u038a\u0005\u0002\u0000\u0000\u038a\u038d\u0003\u0002\u0001\u0000\u038b"+ - "\u038c\u0005\u0004\u0000\u0000\u038c\u038e\u0003\u0002\u0001\u0000\u038d"+ - "\u038b\u0001\u0000\u0000\u0000\u038e\u038f\u0001\u0000\u0000\u0000\u038f"+ - "\u038d\u0001\u0000\u0000\u0000\u038f\u0390\u0001\u0000\u0000\u0000\u0390"+ - "\u0391\u0001\u0000\u0000\u0000\u0391\u0392\u0005\u0003\u0000\u0000\u0392"+ - "\u072c\u0001\u0000\u0000\u0000\u0393\u0394\u0005\u009e\u0000\u0000\u0394"+ - "\u0395\u0005\u0002\u0000\u0000\u0395\u0398\u0003\u0002\u0001\u0000\u0396"+ - "\u0397\u0005\u0004\u0000\u0000\u0397\u0399\u0003\u0002\u0001\u0000\u0398"+ - "\u0396\u0001\u0000\u0000\u0000\u0399\u039a\u0001\u0000\u0000\u0000\u039a"+ - "\u0398\u0001\u0000\u0000\u0000\u039a\u039b\u0001\u0000\u0000\u0000\u039b"+ - "\u039c\u0001\u0000\u0000\u0000\u039c\u039d\u0005\u0003\u0000\u0000\u039d"+ - "\u072c\u0001\u0000\u0000\u0000\u039e\u039f\u0005\u009f\u0000\u0000\u039f"+ - "\u03a0\u0005\u0002\u0000\u0000\u03a0\u03a3\u0003\u0002\u0001\u0000\u03a1"+ - "\u03a2\u0005\u0004\u0000\u0000\u03a2\u03a4\u0003\u0002\u0001\u0000\u03a3"+ - "\u03a1\u0001\u0000\u0000\u0000\u03a4\u03a5\u0001\u0000\u0000\u0000\u03a5"+ - "\u03a3\u0001\u0000\u0000\u0000\u03a5\u03a6\u0001\u0000\u0000\u0000\u03a6"+ - "\u03a7\u0001\u0000\u0000\u0000\u03a7\u03a8\u0005\u0003\u0000\u0000\u03a8"+ - "\u072c\u0001\u0000\u0000\u0000\u03a9\u03aa\u0005\u00a0\u0000\u0000\u03aa"+ - "\u03ab\u0005\u0002\u0000\u0000\u03ab\u03ac\u0003\u0002\u0001\u0000\u03ac"+ - "\u03ad\u0005\u0004\u0000\u0000\u03ad\u03ae\u0003\u0002\u0001\u0000\u03ae"+ - "\u03af\u0005\u0003\u0000\u0000\u03af\u072c\u0001\u0000\u0000\u0000\u03b0"+ - "\u03b1\u0005\u00a1\u0000\u0000\u03b1\u03b2\u0005\u0002\u0000\u0000\u03b2"+ - "\u03b7\u0003\u0002\u0001\u0000\u03b3\u03b4\u0005\u0004\u0000\u0000\u03b4"+ - "\u03b6\u0003\u0002\u0001\u0000\u03b5\u03b3\u0001\u0000\u0000\u0000\u03b6"+ - "\u03b9\u0001\u0000\u0000\u0000\u03b7\u03b5\u0001\u0000\u0000\u0000\u03b7"+ - "\u03b8\u0001\u0000\u0000\u0000\u03b8\u03ba\u0001\u0000\u0000\u0000\u03b9"+ - "\u03b7\u0001\u0000\u0000\u0000\u03ba\u03bb\u0005\u0003\u0000\u0000\u03bb"+ - "\u072c\u0001\u0000\u0000\u0000\u03bc\u03bd\u0005\u00a2\u0000\u0000\u03bd"+ - "\u03be\u0005\u0002\u0000\u0000\u03be\u03bf\u0003\u0002\u0001\u0000\u03bf"+ - "\u03c0\u0005\u0004\u0000\u0000\u03c0\u03c1\u0003\u0002\u0001\u0000\u03c1"+ - "\u03c2\u0005\u0003\u0000\u0000\u03c2\u072c\u0001\u0000\u0000\u0000\u03c3"+ - "\u03c4\u0005\u00a3\u0000\u0000\u03c4\u03c5\u0005\u0002\u0000\u0000\u03c5"+ - "\u03c6\u0003\u0002\u0001\u0000\u03c6\u03c7\u0005\u0004\u0000\u0000\u03c7"+ - "\u03c8\u0003\u0002\u0001\u0000\u03c8\u03c9\u0005\u0003\u0000\u0000\u03c9"+ - "\u072c\u0001\u0000\u0000\u0000\u03ca\u03cb\u0005\u00a4\u0000\u0000\u03cb"+ - "\u03cc\u0005\u0002\u0000\u0000\u03cc\u03cd\u0003\u0002\u0001\u0000\u03cd"+ - "\u03ce\u0005\u0004\u0000\u0000\u03ce\u03cf\u0003\u0002\u0001\u0000\u03cf"+ - "\u03d0\u0005\u0003\u0000\u0000\u03d0\u072c\u0001\u0000\u0000\u0000\u03d1"+ - "\u03d2\u0005\u00a5\u0000\u0000\u03d2\u03d3\u0005\u0002\u0000\u0000\u03d3"+ - "\u03d4\u0003\u0002\u0001\u0000\u03d4\u03d5\u0005\u0004\u0000\u0000\u03d5"+ - "\u03d6\u0003\u0002\u0001\u0000\u03d6\u03d7\u0005\u0003\u0000\u0000\u03d7"+ - "\u072c\u0001\u0000\u0000\u0000\u03d8\u03d9\u0005\u00a6\u0000\u0000\u03d9"+ - "\u03da\u0005\u0002\u0000\u0000\u03da\u03df\u0003\u0002\u0001\u0000\u03db"+ - "\u03dc\u0005\u0004\u0000\u0000\u03dc\u03de\u0003\u0002\u0001\u0000\u03dd"+ - "\u03db\u0001\u0000\u0000\u0000\u03de\u03e1\u0001\u0000\u0000\u0000\u03df"+ - "\u03dd\u0001\u0000\u0000\u0000\u03df\u03e0\u0001\u0000\u0000\u0000\u03e0"+ - "\u03e2\u0001\u0000\u0000\u0000\u03e1\u03df\u0001\u0000\u0000\u0000\u03e2"+ - "\u03e3\u0005\u0003\u0000\u0000\u03e3\u072c\u0001\u0000\u0000\u0000\u03e4"+ - "\u03e5\u0005\u00a7\u0000\u0000\u03e5\u03e6\u0005\u0002\u0000\u0000\u03e6"+ - "\u03e7\u0003\u0002\u0001\u0000\u03e7\u03e8\u0005\u0004\u0000\u0000\u03e8"+ - "\u03eb\u0003\u0002\u0001\u0000\u03e9\u03ea\u0005\u0004\u0000\u0000\u03ea"+ - "\u03ec\u0003\u0002\u0001\u0000\u03eb\u03e9\u0001\u0000\u0000\u0000\u03eb"+ - "\u03ec\u0001\u0000\u0000\u0000\u03ec\u03ed\u0001\u0000\u0000\u0000\u03ed"+ - "\u03ee\u0005\u0003\u0000\u0000\u03ee\u072c\u0001\u0000\u0000\u0000\u03ef"+ - "\u03f0\u0005\u00a8\u0000\u0000\u03f0\u03f1\u0005\u0002\u0000\u0000\u03f1"+ - "\u03f6\u0003\u0002\u0001\u0000\u03f2\u03f3\u0005\u0004\u0000\u0000\u03f3"+ - "\u03f5\u0003\u0002\u0001\u0000\u03f4\u03f2\u0001\u0000\u0000\u0000\u03f5"+ - "\u03f8\u0001\u0000\u0000\u0000\u03f6\u03f4\u0001\u0000\u0000\u0000\u03f6"+ - "\u03f7\u0001\u0000\u0000\u0000\u03f7\u03f9\u0001\u0000\u0000\u0000\u03f8"+ - "\u03f6\u0001\u0000\u0000\u0000\u03f9\u03fa\u0005\u0003\u0000\u0000\u03fa"+ - "\u072c\u0001\u0000\u0000\u0000\u03fb\u03fc\u0005\u00a9\u0000\u0000\u03fc"+ - "\u03fd\u0005\u0002\u0000\u0000\u03fd\u0402\u0003\u0002\u0001\u0000\u03fe"+ - "\u03ff\u0005\u0004\u0000\u0000\u03ff\u0401\u0003\u0002\u0001\u0000\u0400"+ - "\u03fe\u0001\u0000\u0000\u0000\u0401\u0404\u0001\u0000\u0000\u0000\u0402"+ - "\u0400\u0001\u0000\u0000\u0000\u0402\u0403\u0001\u0000\u0000\u0000\u0403"+ - "\u0405\u0001\u0000\u0000\u0000\u0404\u0402\u0001\u0000\u0000\u0000\u0405"+ - "\u0406\u0005\u0003\u0000\u0000\u0406\u072c\u0001\u0000\u0000\u0000\u0407"+ - "\u0408\u0005\u00aa\u0000\u0000\u0408\u0409\u0005\u0002\u0000\u0000\u0409"+ - "\u040e\u0003\u0002\u0001\u0000\u040a\u040b\u0005\u0004\u0000\u0000\u040b"+ - "\u040d\u0003\u0002\u0001\u0000\u040c\u040a\u0001\u0000\u0000\u0000\u040d"+ - "\u0410\u0001\u0000\u0000\u0000\u040e\u040c\u0001\u0000\u0000\u0000\u040e"+ - "\u040f\u0001\u0000\u0000\u0000\u040f\u0411\u0001\u0000\u0000\u0000\u0410"+ - "\u040e\u0001\u0000\u0000\u0000\u0411\u0412\u0005\u0003\u0000\u0000\u0412"+ - "\u072c\u0001\u0000\u0000\u0000\u0413\u0414\u0005\u00ab\u0000\u0000\u0414"+ - "\u0415\u0005\u0002\u0000\u0000\u0415\u041a\u0003\u0002\u0001\u0000\u0416"+ - "\u0417\u0005\u0004\u0000\u0000\u0417\u0419\u0003\u0002\u0001\u0000\u0418"+ - "\u0416\u0001\u0000\u0000\u0000\u0419\u041c\u0001\u0000\u0000\u0000\u041a"+ - "\u0418\u0001\u0000\u0000\u0000\u041a\u041b\u0001\u0000\u0000\u0000\u041b"+ - "\u041d\u0001\u0000\u0000\u0000\u041c\u041a\u0001\u0000\u0000\u0000\u041d"+ - "\u041e\u0005\u0003\u0000\u0000\u041e\u072c\u0001\u0000\u0000\u0000\u041f"+ - "\u0420\u0005\u00ac\u0000\u0000\u0420\u0421\u0005\u0002\u0000\u0000\u0421"+ - "\u0426\u0003\u0002\u0001\u0000\u0422\u0423\u0005\u0004\u0000\u0000\u0423"+ - "\u0425\u0003\u0002\u0001\u0000\u0424\u0422\u0001\u0000\u0000\u0000\u0425"+ - "\u0428\u0001\u0000\u0000\u0000\u0426\u0424\u0001\u0000\u0000\u0000\u0426"+ - "\u0427\u0001\u0000\u0000\u0000\u0427\u0429\u0001\u0000\u0000\u0000\u0428"+ - "\u0426\u0001\u0000\u0000\u0000\u0429\u042a\u0005\u0003\u0000\u0000\u042a"+ - "\u072c\u0001\u0000\u0000\u0000\u042b\u042c\u0005\u00ad\u0000\u0000\u042c"+ - "\u042d\u0005\u0002\u0000\u0000\u042d\u042e\u0003\u0002\u0001\u0000\u042e"+ - "\u042f\u0005\u0004\u0000\u0000\u042f\u0432\u0003\u0002\u0001\u0000\u0430"+ - "\u0431\u0005\u0004\u0000\u0000\u0431\u0433\u0003\u0002\u0001\u0000\u0432"+ - "\u0430\u0001\u0000\u0000\u0000\u0432\u0433\u0001\u0000\u0000\u0000\u0433"+ - "\u0434\u0001\u0000\u0000\u0000\u0434\u0435\u0005\u0003\u0000\u0000\u0435"+ - "\u072c\u0001\u0000\u0000\u0000\u0436\u0437\u0005\u00ae\u0000\u0000\u0437"+ - "\u0438\u0005\u0002\u0000\u0000\u0438\u043d\u0003\u0002\u0001\u0000\u0439"+ - "\u043a\u0005\u0004\u0000\u0000\u043a\u043c\u0003\u0002\u0001\u0000\u043b"+ - "\u0439\u0001\u0000\u0000\u0000\u043c\u043f\u0001\u0000\u0000\u0000\u043d"+ - "\u043b\u0001\u0000\u0000\u0000\u043d\u043e\u0001\u0000\u0000\u0000\u043e"+ - "\u0440\u0001\u0000\u0000\u0000\u043f\u043d\u0001\u0000\u0000\u0000\u0440"+ - "\u0441\u0005\u0003\u0000\u0000\u0441\u072c\u0001\u0000\u0000\u0000\u0442"+ - "\u0443\u0005\u00af\u0000\u0000\u0443\u0444\u0005\u0002\u0000\u0000\u0444"+ - "\u0449\u0003\u0002\u0001\u0000\u0445\u0446\u0005\u0004\u0000\u0000\u0446"+ - "\u0448\u0003\u0002\u0001\u0000\u0447\u0445\u0001\u0000\u0000\u0000\u0448"+ - "\u044b\u0001\u0000\u0000\u0000\u0449\u0447\u0001\u0000\u0000\u0000\u0449"+ - "\u044a\u0001\u0000\u0000\u0000\u044a\u044c\u0001\u0000\u0000\u0000\u044b"+ - "\u0449\u0001\u0000\u0000\u0000\u044c\u044d\u0005\u0003\u0000\u0000\u044d"+ - "\u072c\u0001\u0000\u0000\u0000\u044e\u044f\u0005\u00b0\u0000\u0000\u044f"+ - "\u0450\u0005\u0002\u0000\u0000\u0450\u0455\u0003\u0002\u0001\u0000\u0451"+ - "\u0452\u0005\u0004\u0000\u0000\u0452\u0454\u0003\u0002\u0001\u0000\u0453"+ - "\u0451\u0001\u0000\u0000\u0000\u0454\u0457\u0001\u0000\u0000\u0000\u0455"+ - "\u0453\u0001\u0000\u0000\u0000\u0455\u0456\u0001\u0000\u0000\u0000\u0456"+ - "\u0458\u0001\u0000\u0000\u0000\u0457\u0455\u0001\u0000\u0000\u0000\u0458"+ - "\u0459\u0005\u0003\u0000\u0000\u0459\u072c\u0001\u0000\u0000\u0000\u045a"+ - "\u045b\u0005\u00b1\u0000\u0000\u045b\u045c\u0005\u0002\u0000\u0000\u045c"+ - "\u045d\u0003\u0002\u0001\u0000\u045d\u045e\u0005\u0004\u0000\u0000\u045e"+ - "\u045f\u0003\u0002\u0001\u0000\u045f\u0460\u0005\u0003\u0000\u0000\u0460"+ - "\u072c\u0001\u0000\u0000\u0000\u0461\u0462\u0005\u00b2\u0000\u0000\u0462"+ - "\u0463\u0005\u0002\u0000\u0000\u0463\u0464\u0003\u0002\u0001\u0000\u0464"+ - "\u0465\u0005\u0004\u0000\u0000\u0465\u0466\u0003\u0002\u0001\u0000\u0466"+ - "\u0467\u0005\u0003\u0000\u0000\u0467\u072c\u0001\u0000\u0000\u0000\u0468"+ - "\u0469\u0005\u00b3\u0000\u0000\u0469\u046a\u0005\u0002\u0000\u0000\u046a"+ - "\u046f\u0003\u0002\u0001\u0000\u046b\u046c\u0005\u0004\u0000\u0000\u046c"+ - "\u046e\u0003\u0002\u0001\u0000\u046d\u046b\u0001\u0000\u0000\u0000\u046e"+ - "\u0471\u0001\u0000\u0000\u0000\u046f\u046d\u0001\u0000\u0000\u0000\u046f"+ - "\u0470\u0001\u0000\u0000\u0000\u0470\u0472\u0001\u0000\u0000\u0000\u0471"+ - "\u046f\u0001\u0000\u0000\u0000\u0472\u0473\u0005\u0003\u0000\u0000\u0473"+ - "\u072c\u0001\u0000\u0000\u0000\u0474\u0475\u0005\u00b4\u0000\u0000\u0475"+ - "\u0476\u0005\u0002\u0000\u0000\u0476\u047b\u0003\u0002\u0001\u0000\u0477"+ - "\u0478\u0005\u0004\u0000\u0000\u0478\u047a\u0003\u0002\u0001\u0000\u0479"+ - "\u0477\u0001\u0000\u0000\u0000\u047a\u047d\u0001\u0000\u0000\u0000\u047b"+ - "\u0479\u0001\u0000\u0000\u0000\u047b\u047c\u0001\u0000\u0000\u0000\u047c"+ - "\u047e\u0001\u0000\u0000\u0000\u047d\u047b\u0001\u0000\u0000\u0000\u047e"+ - "\u047f\u0005\u0003\u0000\u0000\u047f\u072c\u0001\u0000\u0000\u0000\u0480"+ - "\u0481\u0005\u00b5\u0000\u0000\u0481\u0482\u0005\u0002\u0000\u0000\u0482"+ - "\u0487\u0003\u0002\u0001\u0000\u0483\u0484\u0005\u0004\u0000\u0000\u0484"+ - "\u0486\u0003\u0002\u0001\u0000\u0485\u0483\u0001\u0000\u0000\u0000\u0486"+ - "\u0489\u0001\u0000\u0000\u0000\u0487\u0485\u0001\u0000\u0000\u0000\u0487"+ - "\u0488\u0001\u0000\u0000\u0000\u0488\u048a\u0001\u0000\u0000\u0000\u0489"+ - "\u0487\u0001\u0000\u0000\u0000\u048a\u048b\u0005\u0003\u0000\u0000\u048b"+ - "\u072c\u0001\u0000\u0000\u0000\u048c\u048d\u0005\u00b6\u0000\u0000\u048d"+ - "\u048e\u0005\u0002\u0000\u0000\u048e\u048f\u0003\u0002\u0001\u0000\u048f"+ - "\u0490\u0005\u0004\u0000\u0000\u0490\u0491\u0003\u0002\u0001\u0000\u0491"+ - "\u0492\u0005\u0004\u0000\u0000\u0492\u0493\u0003\u0002\u0001\u0000\u0493"+ - "\u0494\u0005\u0004\u0000\u0000\u0494\u0495\u0003\u0002\u0001\u0000\u0495"+ - "\u0496\u0005\u0003\u0000\u0000\u0496\u072c\u0001\u0000\u0000\u0000\u0497"+ - "\u0498\u0005\u00b7\u0000\u0000\u0498\u0499\u0005\u0002\u0000\u0000\u0499"+ - "\u049a\u0003\u0002\u0001\u0000\u049a\u049b\u0005\u0004\u0000\u0000\u049b"+ - "\u049c\u0003\u0002\u0001\u0000\u049c\u049d\u0005\u0004\u0000\u0000\u049d"+ - "\u049e\u0003\u0002\u0001\u0000\u049e\u049f\u0005\u0003\u0000\u0000\u049f"+ - "\u072c\u0001\u0000\u0000\u0000\u04a0\u04a1\u0005\u00b8\u0000\u0000\u04a1"+ - "\u04a2\u0005\u0002\u0000\u0000\u04a2\u04a3\u0003\u0002\u0001\u0000\u04a3"+ - "\u04a4\u0005\u0003\u0000\u0000\u04a4\u072c\u0001\u0000\u0000\u0000\u04a5"+ - "\u04a6\u0005\u00b9\u0000\u0000\u04a6\u04a7\u0005\u0002\u0000\u0000\u04a7"+ - "\u04a8\u0003\u0002\u0001\u0000\u04a8\u04a9\u0005\u0003\u0000\u0000\u04a9"+ - "\u072c\u0001\u0000\u0000\u0000\u04aa\u04ab\u0005\u00ba\u0000\u0000\u04ab"+ - "\u04ac\u0005\u0002\u0000\u0000\u04ac\u04ad\u0003\u0002\u0001\u0000\u04ad"+ - "\u04ae\u0005\u0004\u0000\u0000\u04ae\u04af\u0003\u0002\u0001\u0000\u04af"+ - "\u04b0\u0005\u0004\u0000\u0000\u04b0\u04b1\u0003\u0002\u0001\u0000\u04b1"+ - "\u04b2\u0005\u0003\u0000\u0000\u04b2\u072c\u0001\u0000\u0000\u0000\u04b3"+ - "\u04b4\u0005\u00bb\u0000\u0000\u04b4\u04b5\u0005\u0002\u0000\u0000\u04b5"+ - "\u04b6\u0003\u0002\u0001\u0000\u04b6\u04b7\u0005\u0004\u0000\u0000\u04b7"+ - "\u04b8\u0003\u0002\u0001\u0000\u04b8\u04b9\u0005\u0004\u0000\u0000\u04b9"+ - "\u04ba\u0003\u0002\u0001\u0000\u04ba\u04bb\u0005\u0003\u0000\u0000\u04bb"+ - "\u072c\u0001\u0000\u0000\u0000\u04bc\u04bd\u0005\u00bc\u0000\u0000\u04bd"+ - "\u04be\u0005\u0002\u0000\u0000\u04be\u04bf\u0003\u0002\u0001\u0000\u04bf"+ - "\u04c0\u0005\u0004\u0000\u0000\u04c0\u04c1\u0003\u0002\u0001\u0000\u04c1"+ - "\u04c2\u0005\u0004\u0000\u0000\u04c2\u04c3\u0003\u0002\u0001\u0000\u04c3"+ - "\u04c4\u0005\u0004\u0000\u0000\u04c4\u04c5\u0003\u0002\u0001\u0000\u04c5"+ - "\u04c6\u0005\u0003\u0000\u0000\u04c6\u072c\u0001\u0000\u0000\u0000\u04c7"+ - "\u04c8\u0005\u00bd\u0000\u0000\u04c8\u04c9\u0005\u0002\u0000\u0000\u04c9"+ - "\u04ca\u0003\u0002\u0001\u0000\u04ca\u04cb\u0005\u0004\u0000\u0000\u04cb"+ - "\u04cc\u0003\u0002\u0001\u0000\u04cc\u04cd\u0005\u0004\u0000\u0000\u04cd"+ - "\u04ce\u0003\u0002\u0001\u0000\u04ce\u04cf\u0005\u0003\u0000\u0000\u04cf"+ - "\u072c\u0001\u0000\u0000\u0000\u04d0\u04d1\u0005\u00be\u0000\u0000\u04d1"+ - "\u04d2\u0005\u0002\u0000\u0000\u04d2\u04d3\u0003\u0002\u0001\u0000\u04d3"+ - "\u04d4\u0005\u0004\u0000\u0000\u04d4\u04d5\u0003\u0002\u0001\u0000\u04d5"+ - "\u04d6\u0005\u0004\u0000\u0000\u04d6\u04d7\u0003\u0002\u0001\u0000\u04d7"+ - "\u04d8\u0005\u0003\u0000\u0000\u04d8\u072c\u0001\u0000\u0000\u0000\u04d9"+ - "\u04da\u0005\u00bf\u0000\u0000\u04da\u04db\u0005\u0002\u0000\u0000\u04db"+ - "\u04dc\u0003\u0002\u0001\u0000\u04dc\u04dd\u0005\u0004\u0000\u0000\u04dd"+ - "\u04de\u0003\u0002\u0001\u0000\u04de\u04df\u0005\u0004\u0000\u0000\u04df"+ - "\u04e0\u0003\u0002\u0001\u0000\u04e0\u04e1\u0005\u0003\u0000\u0000\u04e1"+ - "\u072c\u0001\u0000\u0000\u0000\u04e2\u04e3\u0005\u00c0\u0000\u0000\u04e3"+ - "\u04e4\u0005\u0002\u0000\u0000\u04e4\u04e5\u0003\u0002\u0001\u0000\u04e5"+ - "\u04e6\u0005\u0003\u0000\u0000\u04e6\u072c\u0001\u0000\u0000\u0000\u04e7"+ - "\u04e8\u0005\u00c1\u0000\u0000\u04e8\u04e9\u0005\u0002\u0000\u0000\u04e9"+ - "\u04ea\u0003\u0002\u0001\u0000\u04ea\u04eb\u0005\u0003\u0000\u0000\u04eb"+ - "\u072c\u0001\u0000\u0000\u0000\u04ec\u04ed\u0005\u00c2\u0000\u0000\u04ed"+ - "\u04ee\u0005\u0002\u0000\u0000\u04ee\u04ef\u0003\u0002\u0001\u0000\u04ef"+ - "\u04f0\u0005\u0004\u0000\u0000\u04f0\u04f1\u0003\u0002\u0001\u0000\u04f1"+ - "\u04f2\u0005\u0004\u0000\u0000\u04f2\u04f3\u0003\u0002\u0001\u0000\u04f3"+ - "\u04f4\u0005\u0004\u0000\u0000\u04f4\u04f5\u0003\u0002\u0001\u0000\u04f5"+ - "\u04f6\u0005\u0003\u0000\u0000\u04f6\u072c\u0001\u0000\u0000\u0000\u04f7"+ - "\u04f8\u0005\u00c3\u0000\u0000\u04f8\u04f9\u0005\u0002\u0000\u0000\u04f9"+ - "\u04fa\u0003\u0002\u0001\u0000\u04fa\u04fb\u0005\u0004\u0000\u0000\u04fb"+ - "\u04fc\u0003\u0002\u0001\u0000\u04fc\u04fd\u0005\u0004\u0000\u0000\u04fd"+ - "\u04fe\u0003\u0002\u0001\u0000\u04fe\u04ff\u0005\u0003\u0000\u0000\u04ff"+ - "\u072c\u0001\u0000\u0000\u0000\u0500\u0501\u0005\u00c4\u0000\u0000\u0501"+ - "\u0502\u0005\u0002\u0000\u0000\u0502\u0503\u0003\u0002\u0001\u0000\u0503"+ - "\u0504\u0005\u0003\u0000\u0000\u0504\u072c\u0001\u0000\u0000\u0000\u0505"+ - "\u0506\u0005\u00c5\u0000\u0000\u0506\u0507\u0005\u0002\u0000\u0000\u0507"+ - "\u0508\u0003\u0002\u0001\u0000\u0508\u0509\u0005\u0004\u0000\u0000\u0509"+ - "\u050a\u0003\u0002\u0001\u0000\u050a\u050b\u0005\u0004\u0000\u0000\u050b"+ - "\u050c\u0003\u0002\u0001\u0000\u050c\u050d\u0005\u0004\u0000\u0000\u050d"+ - "\u050e\u0003\u0002\u0001\u0000\u050e\u050f\u0005\u0003\u0000\u0000\u050f"+ - "\u072c\u0001\u0000\u0000\u0000\u0510\u0511\u0005\u00c6\u0000\u0000\u0511"+ - "\u0512\u0005\u0002\u0000\u0000\u0512\u0513\u0003\u0002\u0001\u0000\u0513"+ - "\u0514\u0005\u0004\u0000\u0000\u0514\u0515\u0003\u0002\u0001\u0000\u0515"+ - "\u0516\u0005\u0004\u0000\u0000\u0516\u0517\u0003\u0002\u0001\u0000\u0517"+ - "\u0518\u0005\u0003\u0000\u0000\u0518\u072c\u0001\u0000\u0000\u0000\u0519"+ - "\u051a\u0005\u00c7\u0000\u0000\u051a\u051b\u0005\u0002\u0000\u0000\u051b"+ - "\u051c\u0003\u0002\u0001\u0000\u051c\u051d\u0005\u0004\u0000\u0000\u051d"+ - "\u051e\u0003\u0002\u0001\u0000\u051e\u051f\u0005\u0004\u0000\u0000\u051f"+ - "\u0520\u0003\u0002\u0001\u0000\u0520\u0521\u0005\u0003\u0000\u0000\u0521"+ - "\u072c\u0001\u0000\u0000\u0000\u0522\u0523\u0005\u00c8\u0000\u0000\u0523"+ - "\u0524\u0005\u0002\u0000\u0000\u0524\u0525\u0003\u0002\u0001\u0000\u0525"+ - "\u0526\u0005\u0004\u0000\u0000\u0526\u0527\u0003\u0002\u0001\u0000\u0527"+ - "\u0528\u0005\u0004\u0000\u0000\u0528\u0529\u0003\u0002\u0001\u0000\u0529"+ - "\u052a\u0005\u0003\u0000\u0000\u052a\u072c\u0001\u0000\u0000\u0000\u052b"+ - "\u052c\u0005\u00c9\u0000\u0000\u052c\u052d\u0005\u0002\u0000\u0000\u052d"+ - "\u052e\u0003\u0002\u0001\u0000\u052e\u052f\u0005\u0004\u0000\u0000\u052f"+ - "\u0530\u0003\u0002\u0001\u0000\u0530\u0531\u0005\u0004\u0000\u0000\u0531"+ - "\u0532\u0003\u0002\u0001\u0000\u0532\u0533\u0005\u0003\u0000\u0000\u0533"+ - "\u072c\u0001\u0000\u0000\u0000\u0534\u0535\u0005\u00ca\u0000\u0000\u0535"+ - "\u0536\u0005\u0002\u0000\u0000\u0536\u0537\u0003\u0002\u0001\u0000\u0537"+ - "\u0538\u0005\u0004\u0000\u0000\u0538\u0539\u0003\u0002\u0001\u0000\u0539"+ - "\u053a\u0005\u0004\u0000\u0000\u053a\u053b\u0003\u0002\u0001\u0000\u053b"+ - "\u053c\u0005\u0003\u0000\u0000\u053c\u072c\u0001\u0000\u0000\u0000\u053d"+ - "\u053e\u0005\u00cb\u0000\u0000\u053e\u053f\u0005\u0002\u0000\u0000\u053f"+ - "\u0540\u0003\u0002\u0001\u0000\u0540\u0541\u0005\u0004\u0000\u0000\u0541"+ - "\u0542\u0003\u0002\u0001\u0000\u0542\u0543\u0005\u0003\u0000\u0000\u0543"+ - "\u072c\u0001\u0000\u0000\u0000\u0544\u0545\u0005\u00cc\u0000\u0000\u0545"+ - "\u0546\u0005\u0002\u0000\u0000\u0546\u0547\u0003\u0002\u0001\u0000\u0547"+ - "\u0548\u0005\u0004\u0000\u0000\u0548\u0549\u0003\u0002\u0001\u0000\u0549"+ - "\u054a\u0005\u0004\u0000\u0000\u054a\u054b\u0003\u0002\u0001\u0000\u054b"+ - "\u054c\u0005\u0004\u0000\u0000\u054c\u054d\u0003\u0002\u0001\u0000\u054d"+ - "\u054e\u0005\u0003\u0000\u0000\u054e\u072c\u0001\u0000\u0000\u0000\u054f"+ - "\u0550\u0005\u00cd\u0000\u0000\u0550\u0551\u0005\u0002\u0000\u0000\u0551"+ - "\u0552\u0003\u0002\u0001\u0000\u0552\u0553\u0005\u0003\u0000\u0000\u0553"+ - "\u072c\u0001\u0000\u0000\u0000\u0554\u0555\u0005\u00ce\u0000\u0000\u0555"+ - "\u0556\u0005\u0002\u0000\u0000\u0556\u0557\u0003\u0002\u0001\u0000\u0557"+ - "\u0558\u0005\u0003\u0000\u0000\u0558\u072c\u0001\u0000\u0000\u0000\u0559"+ - "\u055a\u0005\u00cf\u0000\u0000\u055a\u055b\u0005\u0002\u0000\u0000\u055b"+ - "\u055c\u0003\u0002\u0001\u0000\u055c\u055d\u0005\u0003\u0000\u0000\u055d"+ - "\u072c\u0001\u0000\u0000\u0000\u055e\u055f\u0005\u00d0\u0000\u0000\u055f"+ - "\u0560\u0005\u0002\u0000\u0000\u0560\u0561\u0003\u0002\u0001\u0000\u0561"+ - "\u0562\u0005\u0003\u0000\u0000\u0562\u072c\u0001\u0000\u0000\u0000\u0563"+ - "\u0564\u0005\u00d1\u0000\u0000\u0564\u0565\u0005\u0002\u0000\u0000\u0565"+ - "\u0568\u0003\u0002\u0001\u0000\u0566\u0567\u0005\u0004\u0000\u0000\u0567"+ - "\u0569\u0003\u0002\u0001\u0000\u0568\u0566\u0001\u0000\u0000\u0000\u0568"+ - "\u0569\u0001\u0000\u0000\u0000\u0569\u056a\u0001\u0000\u0000\u0000\u056a"+ - "\u056b\u0005\u0003\u0000\u0000\u056b\u072c\u0001\u0000\u0000\u0000\u056c"+ - "\u056d\u0005\u00d2\u0000\u0000\u056d\u056e\u0005\u0002\u0000\u0000\u056e"+ - "\u0571\u0003\u0002\u0001\u0000\u056f\u0570\u0005\u0004\u0000\u0000\u0570"+ - "\u0572\u0003\u0002\u0001\u0000\u0571\u056f\u0001\u0000\u0000\u0000\u0571"+ - "\u0572\u0001\u0000\u0000\u0000\u0572\u0573\u0001\u0000\u0000\u0000\u0573"+ - "\u0574\u0005\u0003\u0000\u0000\u0574\u072c\u0001\u0000\u0000\u0000\u0575"+ - "\u0576\u0005\u00d3\u0000\u0000\u0576\u0577\u0005\u0002\u0000\u0000\u0577"+ - "\u057a\u0003\u0002\u0001\u0000\u0578\u0579\u0005\u0004\u0000\u0000\u0579"+ - "\u057b\u0003\u0002\u0001\u0000\u057a\u0578\u0001\u0000\u0000\u0000\u057a"+ - "\u057b\u0001\u0000\u0000\u0000\u057b\u057c\u0001\u0000\u0000\u0000\u057c"+ - "\u057d\u0005\u0003\u0000\u0000\u057d\u072c\u0001\u0000\u0000\u0000\u057e"+ - "\u057f\u0005\u00d4\u0000\u0000\u057f\u0580\u0005\u0002\u0000\u0000\u0580"+ - "\u0583\u0003\u0002\u0001\u0000\u0581\u0582\u0005\u0004\u0000\u0000\u0582"+ - "\u0584\u0003\u0002\u0001\u0000\u0583\u0581\u0001\u0000\u0000\u0000\u0583"+ - "\u0584\u0001\u0000\u0000\u0000\u0584\u0585\u0001\u0000\u0000\u0000\u0585"+ - "\u0586\u0005\u0003\u0000\u0000\u0586\u072c\u0001\u0000\u0000\u0000\u0587"+ - "\u0588\u0005\u00d5\u0000\u0000\u0588\u0589\u0005\u0002\u0000\u0000\u0589"+ - "\u058a\u0003\u0002\u0001\u0000\u058a\u058b\u0005\u0004\u0000\u0000\u058b"+ - "\u058c\u0003\u0002\u0001\u0000\u058c\u058d\u0005\u0003\u0000\u0000\u058d"+ - "\u072c\u0001\u0000\u0000\u0000\u058e\u058f\u0005\u00d6\u0000\u0000\u058f"+ - "\u0590\u0005\u0002\u0000\u0000\u0590\u0591\u0003\u0002\u0001\u0000\u0591"+ - "\u0592\u0005\u0004\u0000\u0000\u0592\u0593\u0003\u0002\u0001\u0000\u0593"+ - "\u0594\u0005\u0004\u0000\u0000\u0594\u0595\u0003\u0002\u0001\u0000\u0595"+ - "\u0596\u0005\u0003\u0000\u0000\u0596\u072c\u0001\u0000\u0000\u0000\u0597"+ - "\u0598\u0005\u00d7\u0000\u0000\u0598\u0599\u0005\u0002\u0000\u0000\u0599"+ - "\u059a\u0003\u0002\u0001\u0000\u059a\u059b\u0005\u0004\u0000\u0000\u059b"+ - "\u059c\u0003\u0002\u0001\u0000\u059c\u059d\u0005\u0003\u0000\u0000\u059d"+ - "\u072c\u0001\u0000\u0000\u0000\u059e\u059f\u0005\u00d8\u0000\u0000\u059f"+ - "\u05a0\u0005\u0002\u0000\u0000\u05a0\u072c\u0005\u0003\u0000\u0000\u05a1"+ - "\u05a2\u0005\u00d9\u0000\u0000\u05a2\u05a3\u0005\u0002\u0000\u0000\u05a3"+ - "\u05a6\u0003\u0002\u0001\u0000\u05a4\u05a5\u0005\u0004\u0000\u0000\u05a5"+ - "\u05a7\u0003\u0002\u0001\u0000\u05a6\u05a4\u0001\u0000\u0000\u0000\u05a6"+ - "\u05a7\u0001\u0000\u0000\u0000\u05a7\u05a8\u0001\u0000\u0000\u0000\u05a8"+ - "\u05a9\u0005\u0003\u0000\u0000\u05a9\u072c\u0001\u0000\u0000\u0000\u05aa"+ - "\u05ab\u0005\u00da\u0000\u0000\u05ab\u05ac\u0005\u0002\u0000\u0000\u05ac"+ - "\u05af\u0003\u0002\u0001\u0000\u05ad\u05ae\u0005\u0004\u0000\u0000\u05ae"+ - "\u05b0\u0003\u0002\u0001\u0000\u05af\u05ad\u0001\u0000\u0000\u0000\u05af"+ - "\u05b0\u0001\u0000\u0000\u0000\u05b0\u05b1\u0001\u0000\u0000\u0000\u05b1"+ - "\u05b2\u0005\u0003\u0000\u0000\u05b2\u072c\u0001\u0000\u0000\u0000\u05b3"+ - "\u05b4\u0005\u00db\u0000\u0000\u05b4\u05b5\u0005\u0002\u0000\u0000\u05b5"+ - "\u05b8\u0003\u0002\u0001\u0000\u05b6\u05b7\u0005\u0004\u0000\u0000\u05b7"+ - "\u05b9\u0003\u0002\u0001\u0000\u05b8\u05b6\u0001\u0000\u0000\u0000\u05b8"+ - "\u05b9\u0001\u0000\u0000\u0000\u05b9\u05ba\u0001\u0000\u0000\u0000\u05ba"+ - "\u05bb\u0005\u0003\u0000\u0000\u05bb\u072c\u0001\u0000\u0000\u0000\u05bc"+ - "\u05bd\u0005\u00dc\u0000\u0000\u05bd\u05be\u0005\u0002\u0000\u0000\u05be"+ - "\u05c1\u0003\u0002\u0001\u0000\u05bf\u05c0\u0005\u0004\u0000\u0000\u05c0"+ - "\u05c2\u0003\u0002\u0001\u0000\u05c1\u05bf\u0001\u0000\u0000\u0000\u05c1"+ - "\u05c2\u0001\u0000\u0000\u0000\u05c2\u05c3\u0001\u0000\u0000\u0000\u05c3"+ - "\u05c4\u0005\u0003\u0000\u0000\u05c4\u072c\u0001\u0000\u0000\u0000\u05c5"+ - "\u05c6\u0005\u00dd\u0000\u0000\u05c6\u05c7\u0005\u0002\u0000\u0000\u05c7"+ - "\u05ca\u0003\u0002\u0001\u0000\u05c8\u05c9\u0005\u0004\u0000\u0000\u05c9"+ - "\u05cb\u0003\u0002\u0001\u0000\u05ca\u05c8\u0001\u0000\u0000\u0000\u05ca"+ - "\u05cb\u0001\u0000\u0000\u0000\u05cb\u05cc\u0001\u0000\u0000\u0000\u05cc"+ - "\u05cd\u0005\u0003\u0000\u0000\u05cd\u072c\u0001\u0000\u0000\u0000\u05ce"+ - "\u05cf\u0005\u00de\u0000\u0000\u05cf\u05d0\u0005\u0002\u0000\u0000\u05d0"+ - "\u05d1\u0003\u0002\u0001\u0000\u05d1\u05d2\u0005\u0004\u0000\u0000\u05d2"+ - "\u05d5\u0003\u0002\u0001\u0000\u05d3\u05d4\u0005\u0004\u0000\u0000\u05d4"+ - "\u05d6\u0003\u0002\u0001\u0000\u05d5\u05d3\u0001\u0000\u0000\u0000\u05d5"+ - "\u05d6\u0001\u0000\u0000\u0000\u05d6\u05d7\u0001\u0000\u0000\u0000\u05d7"+ - "\u05d8\u0005\u0003\u0000\u0000\u05d8\u072c\u0001\u0000\u0000\u0000\u05d9"+ - "\u05da\u0005\u00df\u0000\u0000\u05da\u05db\u0005\u0002\u0000\u0000\u05db"+ - "\u05dc\u0003\u0002\u0001\u0000\u05dc\u05dd\u0005\u0004\u0000\u0000\u05dd"+ - "\u05e0\u0003\u0002\u0001\u0000\u05de\u05df\u0005\u0004\u0000\u0000\u05df"+ - "\u05e1\u0003\u0002\u0001\u0000\u05e0\u05de\u0001\u0000\u0000\u0000\u05e0"+ - "\u05e1\u0001\u0000\u0000\u0000\u05e1\u05e2\u0001\u0000\u0000\u0000\u05e2"+ - "\u05e3\u0005\u0003\u0000\u0000\u05e3\u072c\u0001\u0000\u0000\u0000\u05e4"+ - "\u05e5\u0005\u00e0\u0000\u0000\u05e5\u05e6\u0005\u0002\u0000\u0000\u05e6"+ - "\u05e7\u0003\u0002\u0001\u0000\u05e7\u05e8\u0005\u0004\u0000\u0000\u05e8"+ - "\u05eb\u0003\u0002\u0001\u0000\u05e9\u05ea\u0005\u0004\u0000\u0000\u05ea"+ - "\u05ec\u0003\u0002\u0001\u0000\u05eb\u05e9\u0001\u0000\u0000\u0000\u05eb"+ - "\u05ec\u0001\u0000\u0000\u0000\u05ec\u05ed\u0001\u0000\u0000\u0000\u05ed"+ - "\u05ee\u0005\u0003\u0000\u0000\u05ee\u072c\u0001\u0000\u0000\u0000\u05ef"+ - "\u05f0\u0005\u00e1\u0000\u0000\u05f0\u05f1\u0005\u0002\u0000\u0000\u05f1"+ - "\u05f2\u0003\u0002\u0001\u0000\u05f2\u05f3\u0005\u0004\u0000\u0000\u05f3"+ - "\u05f6\u0003\u0002\u0001\u0000\u05f4\u05f5\u0005\u0004\u0000\u0000\u05f5"+ - "\u05f7\u0003\u0002\u0001\u0000\u05f6\u05f4\u0001\u0000\u0000\u0000\u05f6"+ - "\u05f7\u0001\u0000\u0000\u0000\u05f7\u05f8\u0001\u0000\u0000\u0000\u05f8"+ - "\u05f9\u0005\u0003\u0000\u0000\u05f9\u072c\u0001\u0000\u0000\u0000\u05fa"+ - "\u05fb\u0005\u00e2\u0000\u0000\u05fb\u05fc\u0005\u0002\u0000\u0000\u05fc"+ - "\u05ff\u0003\u0002\u0001\u0000\u05fd\u05fe\u0005\u0004\u0000\u0000\u05fe"+ - "\u0600\u0003\u0002\u0001\u0000\u05ff\u05fd\u0001\u0000\u0000\u0000\u05ff"+ - "\u0600\u0001\u0000\u0000\u0000\u0600\u0601\u0001\u0000\u0000\u0000\u0601"+ - "\u0602\u0005\u0003\u0000\u0000\u0602\u072c\u0001\u0000\u0000\u0000\u0603"+ - "\u0604\u0005\u00e3\u0000\u0000\u0604\u0605\u0005\u0002\u0000\u0000\u0605"+ - "\u0608\u0003\u0002\u0001\u0000\u0606\u0607\u0005\u0004\u0000\u0000\u0607"+ - "\u0609\u0003\u0002\u0001\u0000\u0608\u0606\u0001\u0000\u0000\u0000\u0608"+ - "\u0609\u0001\u0000\u0000\u0000\u0609\u060a\u0001\u0000\u0000\u0000\u060a"+ - "\u060b\u0005\u0003\u0000\u0000\u060b\u072c\u0001\u0000\u0000\u0000\u060c"+ - "\u060d\u0005\u00e4\u0000\u0000\u060d\u060e\u0005\u0002\u0000\u0000\u060e"+ - "\u060f\u0003\u0002\u0001\u0000\u060f\u0610\u0005\u0004\u0000\u0000\u0610"+ - "\u0617\u0003\u0002\u0001\u0000\u0611\u0612\u0005\u0004\u0000\u0000\u0612"+ - "\u0615\u0003\u0002\u0001\u0000\u0613\u0614\u0005\u0004\u0000\u0000\u0614"+ - "\u0616\u0003\u0002\u0001\u0000\u0615\u0613\u0001\u0000\u0000\u0000\u0615"+ - "\u0616\u0001\u0000\u0000\u0000\u0616\u0618\u0001\u0000\u0000\u0000\u0617"+ - "\u0611\u0001\u0000\u0000\u0000\u0617\u0618\u0001\u0000\u0000\u0000\u0618"+ - "\u0619\u0001\u0000\u0000\u0000\u0619\u061a\u0005\u0003\u0000\u0000\u061a"+ - "\u072c\u0001\u0000\u0000\u0000\u061b\u061c\u0005\u00e5\u0000\u0000\u061c"+ - "\u061d\u0005\u0002\u0000\u0000\u061d\u061e\u0003\u0002\u0001\u0000\u061e"+ - "\u061f\u0005\u0004\u0000\u0000\u061f\u0626\u0003\u0002\u0001\u0000\u0620"+ - "\u0621\u0005\u0004\u0000\u0000\u0621\u0624\u0003\u0002\u0001\u0000\u0622"+ - "\u0623\u0005\u0004\u0000\u0000\u0623\u0625\u0003\u0002\u0001\u0000\u0624"+ - "\u0622\u0001\u0000\u0000\u0000\u0624\u0625\u0001\u0000\u0000\u0000\u0625"+ - "\u0627\u0001\u0000\u0000\u0000\u0626\u0620\u0001\u0000\u0000\u0000\u0626"+ - "\u0627\u0001\u0000\u0000\u0000\u0627\u0628\u0001\u0000\u0000\u0000\u0628"+ - "\u0629\u0005\u0003\u0000\u0000\u0629\u072c\u0001\u0000\u0000\u0000\u062a"+ - "\u062b\u0005\u00e6\u0000\u0000\u062b\u062c\u0005\u0002\u0000\u0000\u062c"+ - "\u062d\u0003\u0002\u0001\u0000\u062d\u062e\u0005\u0004\u0000\u0000\u062e"+ - "\u062f\u0003\u0002\u0001\u0000\u062f\u0630\u0005\u0003\u0000\u0000\u0630"+ - "\u072c\u0001\u0000\u0000\u0000\u0631\u0632\u0005\u00e7\u0000\u0000\u0632"+ - "\u0633\u0005\u0002\u0000\u0000\u0633\u0636\u0003\u0002\u0001\u0000\u0634"+ - "\u0635\u0005\u0004\u0000\u0000\u0635\u0637\u0003\u0002\u0001\u0000\u0636"+ - "\u0634\u0001\u0000\u0000\u0000\u0637\u0638\u0001\u0000\u0000\u0000\u0638"+ - "\u0636\u0001\u0000\u0000\u0000\u0638\u0639\u0001\u0000\u0000\u0000\u0639"+ - "\u063a\u0001\u0000\u0000\u0000\u063a\u063b\u0005\u0003\u0000\u0000\u063b"+ - "\u072c\u0001\u0000\u0000\u0000\u063c\u063d\u0005\u00e8\u0000\u0000\u063d"+ - "\u063e\u0005\u0002\u0000\u0000\u063e\u063f\u0003\u0002\u0001\u0000\u063f"+ - "\u0640\u0005\u0004\u0000\u0000\u0640\u0643\u0003\u0002\u0001\u0000\u0641"+ - "\u0642\u0005\u0004\u0000\u0000\u0642\u0644\u0003\u0002\u0001\u0000\u0643"+ - "\u0641\u0001\u0000\u0000\u0000\u0643\u0644\u0001\u0000\u0000\u0000\u0644"+ - "\u0645\u0001\u0000\u0000\u0000\u0645\u0646\u0005\u0003\u0000\u0000\u0646"+ - "\u072c\u0001\u0000\u0000\u0000\u0647\u0648\u0005\u00e9\u0000\u0000\u0648"+ - "\u0649\u0005\u0002\u0000\u0000\u0649\u064a\u0003\u0002\u0001\u0000\u064a"+ - "\u064b\u0005\u0004\u0000\u0000\u064b\u064e\u0003\u0002\u0001\u0000\u064c"+ - "\u064d\u0005\u0004\u0000\u0000\u064d\u064f\u0003\u0002\u0001\u0000\u064e"+ - "\u064c\u0001\u0000\u0000\u0000\u064e\u064f\u0001\u0000\u0000\u0000\u064f"+ - "\u0650\u0001\u0000\u0000\u0000\u0650\u0651\u0005\u0003\u0000\u0000\u0651"+ - "\u072c\u0001\u0000\u0000\u0000\u0652\u0653\u0005\u00ea\u0000\u0000\u0653"+ - "\u0654\u0005\u0002\u0000\u0000\u0654\u0655\u0003\u0002\u0001\u0000\u0655"+ - "\u0656\u0005\u0004\u0000\u0000\u0656\u0659\u0003\u0002\u0001\u0000\u0657"+ - "\u0658\u0005\u0004\u0000\u0000\u0658\u065a\u0003\u0002\u0001\u0000\u0659"+ - "\u0657\u0001\u0000\u0000\u0000\u0659\u065a\u0001\u0000\u0000\u0000\u065a"+ - "\u065b\u0001\u0000\u0000\u0000\u065b\u065c\u0005\u0003\u0000\u0000\u065c"+ - "\u072c\u0001\u0000\u0000\u0000\u065d\u065e\u0005\u00eb\u0000\u0000\u065e"+ - "\u065f\u0005\u0002\u0000\u0000\u065f\u0660\u0003\u0002\u0001\u0000\u0660"+ - "\u0661\u0005\u0003\u0000\u0000\u0661\u072c\u0001\u0000\u0000\u0000\u0662"+ - "\u0663\u0005\u00ec\u0000\u0000\u0663\u0664\u0005\u0002\u0000\u0000\u0664"+ - "\u0665\u0003\u0002\u0001\u0000\u0665\u0666\u0005\u0003\u0000\u0000\u0666"+ - "\u072c\u0001\u0000\u0000\u0000\u0667\u0668\u0005\u00ed\u0000\u0000\u0668"+ - "\u0669\u0005\u0002\u0000\u0000\u0669\u0670\u0003\u0002\u0001\u0000\u066a"+ - "\u066b\u0005\u0004\u0000\u0000\u066b\u066e\u0003\u0002\u0001\u0000\u066c"+ - "\u066d\u0005\u0004\u0000\u0000\u066d\u066f\u0003\u0002\u0001\u0000\u066e"+ - "\u066c\u0001\u0000\u0000\u0000\u066e\u066f\u0001\u0000\u0000\u0000\u066f"+ - "\u0671\u0001\u0000\u0000\u0000\u0670\u066a\u0001\u0000\u0000\u0000\u0670"+ - "\u0671\u0001\u0000\u0000\u0000\u0671\u0672\u0001\u0000\u0000\u0000\u0672"+ - "\u0673\u0005\u0003\u0000\u0000\u0673\u072c\u0001\u0000\u0000\u0000\u0674"+ - "\u0675\u0005\u00ee\u0000\u0000\u0675\u0676\u0005\u0002\u0000\u0000\u0676"+ - "\u067d\u0003\u0002\u0001\u0000\u0677\u0678\u0005\u0004\u0000\u0000\u0678"+ - "\u067b\u0003\u0002\u0001\u0000\u0679\u067a\u0005\u0004\u0000\u0000\u067a"+ - "\u067c\u0003\u0002\u0001\u0000\u067b\u0679\u0001\u0000\u0000\u0000\u067b"+ - "\u067c\u0001\u0000\u0000\u0000\u067c\u067e\u0001\u0000\u0000\u0000\u067d"+ - "\u0677\u0001\u0000\u0000\u0000\u067d\u067e\u0001\u0000\u0000\u0000\u067e"+ - "\u067f\u0001\u0000\u0000\u0000\u067f\u0680\u0005\u0003\u0000\u0000\u0680"+ - "\u072c\u0001\u0000\u0000\u0000\u0681\u0682\u0005\u00ef\u0000\u0000\u0682"+ - "\u0683\u0005\u0002\u0000\u0000\u0683\u0684\u0003\u0002\u0001\u0000\u0684"+ - "\u0685\u0005\u0003\u0000\u0000\u0685\u072c\u0001\u0000\u0000\u0000\u0686"+ - "\u0687\u0005\u00f0\u0000\u0000\u0687\u0688\u0005\u0002\u0000\u0000\u0688"+ - "\u0689\u0003\u0002\u0001\u0000\u0689\u068a\u0005\u0004\u0000\u0000\u068a"+ - "\u068b\u0003\u0002\u0001\u0000\u068b\u068c\u0005\u0004\u0000\u0000\u068c"+ - "\u068f\u0003\u0002\u0001\u0000\u068d\u068e\u0005\u0004\u0000\u0000\u068e"+ - "\u0690\u0003\u0002\u0001\u0000\u068f\u068d\u0001\u0000\u0000\u0000\u068f"+ - "\u0690\u0001\u0000\u0000\u0000\u0690\u0691\u0001\u0000\u0000\u0000\u0691"+ - "\u0692\u0005\u0003\u0000\u0000\u0692\u072c\u0001\u0000\u0000\u0000\u0693"+ - "\u0694\u0005\u00f1\u0000\u0000\u0694\u0695\u0005\u0002\u0000\u0000\u0695"+ - "\u0696\u0003\u0002\u0001\u0000\u0696\u0697\u0005\u0004\u0000\u0000\u0697"+ - "\u0698\u0003\u0002\u0001\u0000\u0698\u0699\u0005\u0004\u0000\u0000\u0699"+ - "\u069a\u0003\u0002\u0001\u0000\u069a\u069b\u0005\u0003\u0000\u0000\u069b"+ - "\u072c\u0001\u0000\u0000\u0000\u069c\u069d\u0005\u00fe\u0000\u0000\u069d"+ - "\u06a6\u0005\u0002\u0000\u0000\u069e\u06a3\u0003\u0002\u0001\u0000\u069f"+ - "\u06a0\u0005\u0004\u0000\u0000\u06a0\u06a2\u0003\u0002\u0001\u0000\u06a1"+ - "\u069f\u0001\u0000\u0000\u0000\u06a2\u06a5\u0001\u0000\u0000\u0000\u06a3"+ - "\u06a1\u0001\u0000\u0000\u0000\u06a3\u06a4\u0001\u0000\u0000\u0000\u06a4"+ - "\u06a7\u0001\u0000\u0000\u0000\u06a5\u06a3\u0001\u0000\u0000\u0000\u06a6"+ - "\u069e\u0001\u0000\u0000\u0000\u06a6\u06a7\u0001\u0000\u0000\u0000\u06a7"+ - "\u06a8\u0001\u0000\u0000\u0000\u06a8\u072c\u0005\u0003\u0000\u0000\u06a9"+ - "\u06aa\u0005\u00f4\u0000\u0000\u06aa\u06ab\u0005\u0002\u0000\u0000\u06ab"+ - "\u06ac\u0003\u0002\u0001\u0000\u06ac\u06ad\u0005\u0004\u0000\u0000\u06ad"+ - "\u06ae\u0003\u0002\u0001\u0000\u06ae\u06af\u0005\u0003\u0000\u0000\u06af"+ - "\u072c\u0001\u0000\u0000\u0000\u06b0\u06b1\u0005\u00f5\u0000\u0000\u06b1"+ - "\u06b2\u0005\u0002\u0000\u0000\u06b2\u06b3\u0003\u0002\u0001\u0000\u06b3"+ - "\u06b4\u0005\u0004\u0000\u0000\u06b4\u06b5\u0003\u0002\u0001\u0000\u06b5"+ - "\u06b6\u0005\u0003\u0000\u0000\u06b6\u072c\u0001\u0000\u0000\u0000\u06b7"+ - "\u06b8\u0005\u00f6\u0000\u0000\u06b8\u06b9\u0005\u0002\u0000\u0000\u06b9"+ - "\u06ba\u0003\u0002\u0001\u0000\u06ba\u06bb\u0005\u0004\u0000\u0000\u06bb"+ - "\u06bc\u0003\u0002\u0001\u0000\u06bc\u06bd\u0005\u0003\u0000\u0000\u06bd"+ - "\u072c\u0001\u0000\u0000\u0000\u06be\u06bf\u0005\u00f7\u0000\u0000\u06bf"+ - "\u06c0\u0005\u0002\u0000\u0000\u06c0\u06c1\u0003\u0002\u0001\u0000\u06c1"+ - "\u06c2\u0005\u0004\u0000\u0000\u06c2\u06c3\u0003\u0002\u0001\u0000\u06c3"+ - "\u06c4\u0005\u0003\u0000\u0000\u06c4\u072c\u0001\u0000\u0000\u0000\u06c5"+ - "\u06c6\u0005\u00f8\u0000\u0000\u06c6\u06c7\u0005\u0002\u0000\u0000\u06c7"+ - "\u06c8\u0003\u0002\u0001\u0000\u06c8\u06c9\u0005\u0004\u0000\u0000\u06c9"+ - "\u06ca\u0003\u0002\u0001\u0000\u06ca\u06cb\u0005\u0003\u0000\u0000\u06cb"+ - "\u072c\u0001\u0000\u0000\u0000\u06cc\u06cd\u0005\u00f9\u0000\u0000\u06cd"+ - "\u06ce\u0005\u0002\u0000\u0000\u06ce\u06cf\u0003\u0002\u0001\u0000\u06cf"+ - "\u06d0\u0005\u0004\u0000\u0000\u06d0\u06d1\u0003\u0002\u0001\u0000\u06d1"+ - "\u06d2\u0005\u0003\u0000\u0000\u06d2\u072c\u0001\u0000\u0000\u0000\u06d3"+ - "\u06d4\u0005\u00fa\u0000\u0000\u06d4\u06d5\u0005\u0002\u0000\u0000\u06d5"+ - "\u06d8\u0003\u0002\u0001\u0000\u06d6\u06d7\u0005\u0004\u0000\u0000\u06d7"+ - "\u06d9\u0003\u0002\u0001\u0000\u06d8\u06d6\u0001\u0000\u0000\u0000\u06d8"+ - "\u06d9\u0001\u0000\u0000\u0000\u06d9\u06da\u0001\u0000\u0000\u0000\u06da"+ - "\u06db\u0005\u0003\u0000\u0000\u06db\u072c\u0001\u0000\u0000\u0000\u06dc"+ - "\u06dd\u0005\u00fd\u0000\u0000\u06dd\u06de\u0005\u0002\u0000\u0000\u06de"+ - "\u06e1\u0003\u0002\u0001\u0000\u06df\u06e0\u0005\u0004\u0000\u0000\u06e0"+ - "\u06e2\u0003\u0002\u0001\u0000\u06e1\u06df\u0001\u0000\u0000\u0000\u06e1"+ - "\u06e2\u0001\u0000\u0000\u0000\u06e2\u06e3\u0001\u0000\u0000\u0000\u06e3"+ - "\u06e4\u0005\u0003\u0000\u0000\u06e4\u072c\u0001\u0000\u0000\u0000\u06e5"+ - "\u06e6\u0005!\u0000\u0000\u06e6\u06e8\u0005\u0002\u0000\u0000\u06e7\u06e9"+ - "\u0003\u0002\u0001\u0000\u06e8\u06e7\u0001\u0000\u0000\u0000\u06e8\u06e9"+ - "\u0001\u0000\u0000\u0000\u06e9\u06ea\u0001\u0000\u0000\u0000\u06ea\u072c"+ - "\u0005\u0003\u0000\u0000\u06eb\u06ec\u0005\u00fb\u0000\u0000\u06ec\u06ed"+ - "\u0005\u0002\u0000\u0000\u06ed\u06ee\u0003\u0002\u0001\u0000\u06ee\u06ef"+ - "\u0005\u0004\u0000\u0000\u06ef\u06f0\u0003\u0002\u0001\u0000\u06f0\u06f1"+ - "\u0005\u0003\u0000\u0000\u06f1\u072c\u0001\u0000\u0000\u0000\u06f2\u06f3"+ - "\u0005\u00fc\u0000\u0000\u06f3\u06f4\u0005\u0002\u0000\u0000\u06f4\u06f5"+ - "\u0003\u0002\u0001\u0000\u06f5\u06f6\u0005\u0004\u0000\u0000\u06f6\u06f7"+ - "\u0003\u0002\u0001\u0000\u06f7\u06f8\u0005\u0003\u0000\u0000\u06f8\u072c"+ - "\u0001\u0000\u0000\u0000\u06f9\u06fa\u0005\u001b\u0000\u0000\u06fa\u06ff"+ - "\u0003\b\u0004\u0000\u06fb\u06fc\u0005\u0004\u0000\u0000\u06fc\u06fe\u0003"+ - "\b\u0004\u0000\u06fd\u06fb\u0001\u0000\u0000\u0000\u06fe\u0701\u0001\u0000"+ - "\u0000\u0000\u06ff\u06fd\u0001\u0000\u0000\u0000\u06ff\u0700\u0001\u0000"+ - "\u0000\u0000\u0700\u0705\u0001\u0000\u0000\u0000\u0701\u06ff\u0001\u0000"+ - "\u0000\u0000\u0702\u0704\u0005\u0004\u0000\u0000\u0703\u0702\u0001\u0000"+ - "\u0000\u0000\u0704\u0707\u0001\u0000\u0000\u0000\u0705\u0703\u0001\u0000"+ - "\u0000\u0000\u0705\u0706\u0001\u0000\u0000\u0000\u0706\u0708\u0001\u0000"+ - "\u0000\u0000\u0707\u0705\u0001\u0000\u0000\u0000\u0708\u0709\u0005\u001c"+ - "\u0000\u0000\u0709\u072c\u0001\u0000\u0000\u0000\u070a\u070b\u0005\u001b"+ - "\u0000\u0000\u070b\u0710\u0003\u0002\u0001\u0000\u070c\u070d\u0005\u0004"+ - "\u0000\u0000\u070d\u070f\u0003\u0002\u0001\u0000\u070e\u070c\u0001\u0000"+ - "\u0000\u0000\u070f\u0712\u0001\u0000\u0000\u0000\u0710\u070e\u0001\u0000"+ - "\u0000\u0000\u0710\u0711\u0001\u0000\u0000\u0000\u0711\u0716\u0001\u0000"+ - "\u0000\u0000\u0712\u0710\u0001\u0000\u0000\u0000\u0713\u0715\u0005\u0004"+ - "\u0000\u0000\u0714\u0713\u0001\u0000\u0000\u0000\u0715\u0718\u0001\u0000"+ - "\u0000\u0000\u0716\u0714\u0001\u0000\u0000\u0000\u0716\u0717\u0001\u0000"+ - "\u0000\u0000\u0717\u0719\u0001\u0000\u0000\u0000\u0718\u0716\u0001\u0000"+ - "\u0000\u0000\u0719\u071a\u0005\u001c\u0000\u0000\u071a\u072c\u0001\u0000"+ - "\u0000\u0000\u071b\u072c\u0005\u00f3\u0000\u0000\u071c\u071d\u0005\u0005"+ - "\u0000\u0000\u071d\u071e\u0005\u00fe\u0000\u0000\u071e\u072c\u0005\u0006"+ - "\u0000\u0000\u071f\u0720\u0005\u0005\u0000\u0000\u0720\u0721\u0003\u0002"+ - "\u0001\u0000\u0721\u0722\u0005\u0006\u0000\u0000\u0722\u072c\u0001\u0000"+ - "\u0000\u0000\u0723\u072c\u0005\u00fe\u0000\u0000\u0724\u072c\u0005\u00ff"+ - "\u0000\u0000\u0725\u0727\u0003\u0004\u0002\u0000\u0726\u0728\u0003\u0006"+ - "\u0003\u0000\u0727\u0726\u0001\u0000\u0000\u0000\u0727\u0728\u0001\u0000"+ - "\u0000\u0000\u0728\u072c\u0001\u0000\u0000\u0000\u0729\u072c\u0005\u001f"+ - "\u0000\u0000\u072a\u072c\u0005 \u0000\u0000\u072b\u000f\u0001\u0000\u0000"+ - "\u0000\u072b\u0014\u0001\u0000\u0000\u0000\u072b\u0016\u0001\u0000\u0000"+ - "\u0000\u072b\"\u0001\u0000\u0000\u0000\u072b-\u0001\u0000\u0000\u0000"+ - "\u072b2\u0001\u0000\u0000\u0000\u072b7\u0001\u0000\u0000\u0000\u072b@"+ - "\u0001\u0000\u0000\u0000\u072bE\u0001\u0000\u0000\u0000\u072bJ\u0001\u0000"+ - "\u0000\u0000\u072bO\u0001\u0000\u0000\u0000\u072bT\u0001\u0000\u0000\u0000"+ - "\u072b_\u0001\u0000\u0000\u0000\u072bh\u0001\u0000\u0000\u0000\u072bq"+ - "\u0001\u0000\u0000\u0000\u072b}\u0001\u0000\u0000\u0000\u072b\u0089\u0001"+ - "\u0000\u0000\u0000\u072b\u008e\u0001\u0000\u0000\u0000\u072b\u0093\u0001"+ - "\u0000\u0000\u0000\u072b\u0098\u0001\u0000\u0000\u0000\u072b\u009d\u0001"+ - "\u0000\u0000\u0000\u072b\u00a2\u0001\u0000\u0000\u0000\u072b\u00ab\u0001"+ - "\u0000\u0000\u0000\u072b\u00b4\u0001\u0000\u0000\u0000\u072b\u00bd\u0001"+ - "\u0000\u0000\u0000\u072b\u00c6\u0001\u0000\u0000\u0000\u072b\u00cb\u0001"+ - "\u0000\u0000\u0000\u072b\u00d4\u0001\u0000\u0000\u0000\u072b\u00dd\u0001"+ - "\u0000\u0000\u0000\u072b\u00e2\u0001\u0000\u0000\u0000\u072b\u00eb\u0001"+ - "\u0000\u0000\u0000\u072b\u00f4\u0001\u0000\u0000\u0000\u072b\u00f9\u0001"+ - "\u0000\u0000\u0000\u072b\u0102\u0001\u0000\u0000\u0000\u072b\u0107\u0001"+ - "\u0000\u0000\u0000\u072b\u010f\u0001\u0000\u0000\u0000\u072b\u0117\u0001"+ - "\u0000\u0000\u0000\u072b\u011c\u0001\u0000\u0000\u0000\u072b\u0121\u0001"+ - "\u0000\u0000\u0000\u072b\u0126\u0001\u0000\u0000\u0000\u072b\u012b\u0001"+ - "\u0000\u0000\u0000\u072b\u0136\u0001\u0000\u0000\u0000\u072b\u0141\u0001"+ - "\u0000\u0000\u0000\u072b\u0148\u0001\u0000\u0000\u0000\u072b\u014f\u0001"+ - "\u0000\u0000\u0000\u072b\u0154\u0001\u0000\u0000\u0000\u072b\u0159\u0001"+ - "\u0000\u0000\u0000\u072b\u015e\u0001\u0000\u0000\u0000\u072b\u0163\u0001"+ - "\u0000\u0000\u0000\u072b\u0168\u0001\u0000\u0000\u0000\u072b\u016d\u0001"+ - "\u0000\u0000\u0000\u072b\u0172\u0001\u0000\u0000\u0000\u072b\u0177\u0001"+ - "\u0000\u0000\u0000\u072b\u017c\u0001\u0000\u0000\u0000\u072b\u0181\u0001"+ - "\u0000\u0000\u0000\u072b\u0186\u0001\u0000\u0000\u0000\u072b\u018b\u0001"+ - "\u0000\u0000\u0000\u072b\u0190\u0001\u0000\u0000\u0000\u072b\u0195\u0001"+ - "\u0000\u0000\u0000\u072b\u019c\u0001\u0000\u0000\u0000\u072b\u01a5\u0001"+ - "\u0000\u0000\u0000\u072b\u01ac\u0001\u0000\u0000\u0000\u072b\u01b3\u0001"+ - "\u0000\u0000\u0000\u072b\u01bc\u0001\u0000\u0000\u0000\u072b\u01c5\u0001"+ - "\u0000\u0000\u0000\u072b\u01ca\u0001\u0000\u0000\u0000\u072b\u01cf\u0001"+ - "\u0000\u0000\u0000\u072b\u01d6\u0001\u0000\u0000\u0000\u072b\u01d9\u0001"+ - "\u0000\u0000\u0000\u072b\u01e0\u0001\u0000\u0000\u0000\u072b\u01e5\u0001"+ - "\u0000\u0000\u0000\u072b\u01ea\u0001\u0000\u0000\u0000\u072b\u01f1\u0001"+ - "\u0000\u0000\u0000\u072b\u01f6\u0001\u0000\u0000\u0000\u072b\u01fb\u0001"+ - "\u0000\u0000\u0000\u072b\u0204\u0001\u0000\u0000\u0000\u072b\u0209\u0001"+ - "\u0000\u0000\u0000\u072b\u0215\u0001\u0000\u0000\u0000\u072b\u0221\u0001"+ - "\u0000\u0000\u0000\u072b\u0226\u0001\u0000\u0000\u0000\u072b\u0232\u0001"+ - "\u0000\u0000\u0000\u072b\u0237\u0001\u0000\u0000\u0000\u072b\u023c\u0001"+ - "\u0000\u0000\u0000\u072b\u0241\u0001\u0000\u0000\u0000\u072b\u0246\u0001"+ - "\u0000\u0000\u0000\u072b\u024b\u0001\u0000\u0000\u0000\u072b\u0257\u0001"+ - "\u0000\u0000\u0000\u072b\u025e\u0001\u0000\u0000\u0000\u072b\u0269\u0001"+ - "\u0000\u0000\u0000\u072b\u0276\u0001\u0000\u0000\u0000\u072b\u027f\u0001"+ - "\u0000\u0000\u0000\u072b\u0284\u0001\u0000\u0000\u0000\u072b\u0289\u0001"+ - "\u0000\u0000\u0000\u072b\u0292\u0001\u0000\u0000\u0000\u072b\u0297\u0001"+ - "\u0000\u0000\u0000\u072b\u02a4\u0001\u0000\u0000\u0000\u072b\u02ab\u0001"+ - "\u0000\u0000\u0000\u072b\u02b4\u0001\u0000\u0000\u0000\u072b\u02b9\u0001"+ - "\u0000\u0000\u0000\u072b\u02c4\u0001\u0000\u0000\u0000\u072b\u02d1\u0001"+ - "\u0000\u0000\u0000\u072b\u02d6\u0001\u0000\u0000\u0000\u072b\u02dd\u0001"+ - "\u0000\u0000\u0000\u072b\u02e2\u0001\u0000\u0000\u0000\u072b\u02e7\u0001"+ - "\u0000\u0000\u0000\u072b\u02ec\u0001\u0000\u0000\u0000\u072b\u02f5\u0001"+ - "\u0000\u0000\u0000\u072b\u02fa\u0001\u0000\u0000\u0000\u072b\u030f\u0001"+ - "\u0000\u0000\u0000\u072b\u031a\u0001\u0000\u0000\u0000\u072b\u031d\u0001"+ - "\u0000\u0000\u0000\u072b\u0320\u0001\u0000\u0000\u0000\u072b\u0325\u0001"+ - "\u0000\u0000\u0000\u072b\u032a\u0001\u0000\u0000\u0000\u072b\u032f\u0001"+ - "\u0000\u0000\u0000\u072b\u0334\u0001\u0000\u0000\u0000\u072b\u0339\u0001"+ - "\u0000\u0000\u0000\u072b\u033e\u0001\u0000\u0000\u0000\u072b\u0347\u0001"+ - "\u0000\u0000\u0000\u072b\u0350\u0001\u0000\u0000\u0000\u072b\u035b\u0001"+ - "\u0000\u0000\u0000\u072b\u0362\u0001\u0000\u0000\u0000\u072b\u0369\u0001"+ - "\u0000\u0000\u0000\u072b\u0374\u0001\u0000\u0000\u0000\u072b\u037f\u0001"+ - "\u0000\u0000\u0000\u072b\u0388\u0001\u0000\u0000\u0000\u072b\u0393\u0001"+ - "\u0000\u0000\u0000\u072b\u039e\u0001\u0000\u0000\u0000\u072b\u03a9\u0001"+ - "\u0000\u0000\u0000\u072b\u03b0\u0001\u0000\u0000\u0000\u072b\u03bc\u0001"+ - "\u0000\u0000\u0000\u072b\u03c3\u0001\u0000\u0000\u0000\u072b\u03ca\u0001"+ - "\u0000\u0000\u0000\u072b\u03d1\u0001\u0000\u0000\u0000\u072b\u03d8\u0001"+ - "\u0000\u0000\u0000\u072b\u03e4\u0001\u0000\u0000\u0000\u072b\u03ef\u0001"+ - "\u0000\u0000\u0000\u072b\u03fb\u0001\u0000\u0000\u0000\u072b\u0407\u0001"+ - "\u0000\u0000\u0000\u072b\u0413\u0001\u0000\u0000\u0000\u072b\u041f\u0001"+ - "\u0000\u0000\u0000\u072b\u042b\u0001\u0000\u0000\u0000\u072b\u0436\u0001"+ - "\u0000\u0000\u0000\u072b\u0442\u0001\u0000\u0000\u0000\u072b\u044e\u0001"+ - "\u0000\u0000\u0000\u072b\u045a\u0001\u0000\u0000\u0000\u072b\u0461\u0001"+ - "\u0000\u0000\u0000\u072b\u0468\u0001\u0000\u0000\u0000\u072b\u0474\u0001"+ - "\u0000\u0000\u0000\u072b\u0480\u0001\u0000\u0000\u0000\u072b\u048c\u0001"+ - "\u0000\u0000\u0000\u072b\u0497\u0001\u0000\u0000\u0000\u072b\u04a0\u0001"+ - "\u0000\u0000\u0000\u072b\u04a5\u0001\u0000\u0000\u0000\u072b\u04aa\u0001"+ - "\u0000\u0000\u0000\u072b\u04b3\u0001\u0000\u0000\u0000\u072b\u04bc\u0001"+ - "\u0000\u0000\u0000\u072b\u04c7\u0001\u0000\u0000\u0000\u072b\u04d0\u0001"+ - "\u0000\u0000\u0000\u072b\u04d9\u0001\u0000\u0000\u0000\u072b\u04e2\u0001"+ - "\u0000\u0000\u0000\u072b\u04e7\u0001\u0000\u0000\u0000\u072b\u04ec\u0001"+ - "\u0000\u0000\u0000\u072b\u04f7\u0001\u0000\u0000\u0000\u072b\u0500\u0001"+ - "\u0000\u0000\u0000\u072b\u0505\u0001\u0000\u0000\u0000\u072b\u0510\u0001"+ - "\u0000\u0000\u0000\u072b\u0519\u0001\u0000\u0000\u0000\u072b\u0522\u0001"+ - "\u0000\u0000\u0000\u072b\u052b\u0001\u0000\u0000\u0000\u072b\u0534\u0001"+ - "\u0000\u0000\u0000\u072b\u053d\u0001\u0000\u0000\u0000\u072b\u0544\u0001"+ - "\u0000\u0000\u0000\u072b\u054f\u0001\u0000\u0000\u0000\u072b\u0554\u0001"+ - "\u0000\u0000\u0000\u072b\u0559\u0001\u0000\u0000\u0000\u072b\u055e\u0001"+ - "\u0000\u0000\u0000\u072b\u0563\u0001\u0000\u0000\u0000\u072b\u056c\u0001"+ - "\u0000\u0000\u0000\u072b\u0575\u0001\u0000\u0000\u0000\u072b\u057e\u0001"+ - "\u0000\u0000\u0000\u072b\u0587\u0001\u0000\u0000\u0000\u072b\u058e\u0001"+ - "\u0000\u0000\u0000\u072b\u0597\u0001\u0000\u0000\u0000\u072b\u059e\u0001"+ - "\u0000\u0000\u0000\u072b\u05a1\u0001\u0000\u0000\u0000\u072b\u05aa\u0001"+ - "\u0000\u0000\u0000\u072b\u05b3\u0001\u0000\u0000\u0000\u072b\u05bc\u0001"+ - "\u0000\u0000\u0000\u072b\u05c5\u0001\u0000\u0000\u0000\u072b\u05ce\u0001"+ - "\u0000\u0000\u0000\u072b\u05d9\u0001\u0000\u0000\u0000\u072b\u05e4\u0001"+ - "\u0000\u0000\u0000\u072b\u05ef\u0001\u0000\u0000\u0000\u072b\u05fa\u0001"+ - "\u0000\u0000\u0000\u072b\u0603\u0001\u0000\u0000\u0000\u072b\u060c\u0001"+ - "\u0000\u0000\u0000\u072b\u061b\u0001\u0000\u0000\u0000\u072b\u062a\u0001"+ - "\u0000\u0000\u0000\u072b\u0631\u0001\u0000\u0000\u0000\u072b\u063c\u0001"+ - "\u0000\u0000\u0000\u072b\u0647\u0001\u0000\u0000\u0000\u072b\u0652\u0001"+ - "\u0000\u0000\u0000\u072b\u065d\u0001\u0000\u0000\u0000\u072b\u0662\u0001"+ - "\u0000\u0000\u0000\u072b\u0667\u0001\u0000\u0000\u0000\u072b\u0674\u0001"+ - "\u0000\u0000\u0000\u072b\u0681\u0001\u0000\u0000\u0000\u072b\u0686\u0001"+ - "\u0000\u0000\u0000\u072b\u0693\u0001\u0000\u0000\u0000\u072b\u069c\u0001"+ - "\u0000\u0000\u0000\u072b\u06a9\u0001\u0000\u0000\u0000\u072b\u06b0\u0001"+ - "\u0000\u0000\u0000\u072b\u06b7\u0001\u0000\u0000\u0000\u072b\u06be\u0001"+ - "\u0000\u0000\u0000\u072b\u06c5\u0001\u0000\u0000\u0000\u072b\u06cc\u0001"+ - "\u0000\u0000\u0000\u072b\u06d3\u0001\u0000\u0000\u0000\u072b\u06dc\u0001"+ - "\u0000\u0000\u0000\u072b\u06e5\u0001\u0000\u0000\u0000\u072b\u06eb\u0001"+ - "\u0000\u0000\u0000\u072b\u06f2\u0001\u0000\u0000\u0000\u072b\u06f9\u0001"+ - "\u0000\u0000\u0000\u072b\u070a\u0001\u0000\u0000\u0000\u072b\u071b\u0001"+ - "\u0000\u0000\u0000\u072b\u071c\u0001\u0000\u0000\u0000\u072b\u071f\u0001"+ - "\u0000\u0000\u0000\u072b\u0723\u0001\u0000\u0000\u0000\u072b\u0724\u0001"+ - "\u0000\u0000\u0000\u072b\u0725\u0001\u0000\u0000\u0000\u072b\u0729\u0001"+ - "\u0000\u0000\u0000\u072b\u072a\u0001\u0000\u0000\u0000\u072c\u0a5a\u0001"+ - "\u0000\u0000\u0000\u072d\u072e\n\u00ed\u0000\u0000\u072e\u072f\u0007\u0000"+ - "\u0000\u0000\u072f\u0a59\u0003\u0002\u0001\u00ee\u0730\u0731\n\u00ec\u0000"+ - "\u0000\u0731\u0732\u0007\u0001\u0000\u0000\u0732\u0a59\u0003\u0002\u0001"+ - "\u00ed\u0733\u0734\n\u00eb\u0000\u0000\u0734\u0735\u0007\u0002\u0000\u0000"+ - "\u0735\u0a59\u0003\u0002\u0001\u00ec\u0736\u0737\n\u00ea\u0000\u0000\u0737"+ - "\u0738\u0007\u0003\u0000\u0000\u0738\u0a59\u0003\u0002\u0001\u00eb\u0739"+ - "\u073a\n\u00e9\u0000\u0000\u073a\u073b\u0007\u0004\u0000\u0000\u073b\u0a59"+ - "\u0003\u0002\u0001\u00ea\u073c\u073d\n\u00e8\u0000\u0000\u073d\u073e\u0007"+ - "\u0005\u0000\u0000\u073e\u0a59\u0003\u0002\u0001\u00e9\u073f\u0740\n\u00e7"+ - "\u0000\u0000\u0740\u0741\u0005\u0019\u0000\u0000\u0741\u0742\u0003\u0002"+ - "\u0001\u0000\u0742\u0743\u0005\u001a\u0000\u0000\u0743\u0744\u0003\u0002"+ - "\u0001\u00e8\u0744\u0a59\u0001\u0000\u0000\u0000\u0745\u0746\n\u0157\u0000"+ - "\u0000\u0746\u0747\u0005\u0001\u0000\u0000\u0747\u0748\u0005%\u0000\u0000"+ - "\u0748\u0749\u0005\u0002\u0000\u0000\u0749\u0a59\u0005\u0003\u0000\u0000"+ - "\u074a\u074b\n\u0156\u0000\u0000\u074b\u074c\u0005\u0001\u0000\u0000\u074c"+ - "\u074d\u0005&\u0000\u0000\u074d\u074e\u0005\u0002\u0000\u0000\u074e\u0a59"+ - "\u0005\u0003\u0000\u0000\u074f\u0750\n\u0155\u0000\u0000\u0750\u0751\u0005"+ - "\u0001\u0000\u0000\u0751\u0752\u0005(\u0000\u0000\u0752\u0753\u0005\u0002"+ - "\u0000\u0000\u0753\u0a59\u0005\u0003\u0000\u0000\u0754\u0755\n\u0154\u0000"+ - "\u0000\u0755\u0756\u0005\u0001\u0000\u0000\u0756\u0757\u0005)\u0000\u0000"+ - "\u0757\u0758\u0005\u0002\u0000\u0000\u0758\u0a59\u0005\u0003\u0000\u0000"+ - "\u0759\u075a\n\u0153\u0000\u0000\u075a\u075b\u0005\u0001\u0000\u0000\u075b"+ - "\u075c\u0005*\u0000\u0000\u075c\u075d\u0005\u0002\u0000\u0000\u075d\u0a59"+ - "\u0005\u0003\u0000\u0000\u075e\u075f\n\u0152\u0000\u0000\u075f\u0760\u0005"+ - "\u0001\u0000\u0000\u0760\u0761\u0005+\u0000\u0000\u0761\u0762\u0005\u0002"+ - "\u0000\u0000\u0762\u0a59\u0005\u0003\u0000\u0000\u0763\u0764\n\u0151\u0000"+ - "\u0000\u0764\u0765\u0005\u0001\u0000\u0000\u0765\u0766\u0005\'\u0000\u0000"+ - "\u0766\u0768\u0005\u0002\u0000\u0000\u0767\u0769\u0003\u0002\u0001\u0000"+ - "\u0768\u0767\u0001\u0000\u0000\u0000\u0768\u0769\u0001\u0000\u0000\u0000"+ - "\u0769\u076a\u0001\u0000\u0000\u0000\u076a\u0a59\u0005\u0003\u0000\u0000"+ - "\u076b\u076c\n\u0150\u0000\u0000\u076c\u076d\u0005\u0001\u0000\u0000\u076d"+ - "\u076e\u0005,\u0000\u0000\u076e\u0770\u0005\u0002\u0000\u0000\u076f\u0771"+ - "\u0003\u0002\u0001\u0000\u0770\u076f\u0001\u0000\u0000\u0000\u0770\u0771"+ - "\u0001\u0000\u0000\u0000\u0771\u0772\u0001\u0000\u0000\u0000\u0772\u0a59"+ - "\u0005\u0003\u0000\u0000\u0773\u0774\n\u014f\u0000\u0000\u0774\u0775\u0005"+ - "\u0001\u0000\u0000\u0775\u0776\u0005-\u0000\u0000\u0776\u0778\u0005\u0002"+ - "\u0000\u0000\u0777\u0779\u0003\u0002\u0001\u0000\u0778\u0777\u0001\u0000"+ - "\u0000\u0000\u0778\u0779\u0001\u0000\u0000\u0000\u0779\u077a\u0001\u0000"+ - "\u0000\u0000\u077a\u0a59\u0005\u0003\u0000\u0000\u077b\u077c\n\u014e\u0000"+ - "\u0000\u077c\u077d\u0005\u0001\u0000\u0000\u077d\u077e\u00055\u0000\u0000"+ - "\u077e\u0780\u0005\u0002\u0000\u0000\u077f\u0781\u0003\u0002\u0001\u0000"+ - "\u0780\u077f\u0001\u0000\u0000\u0000\u0780\u0781\u0001\u0000\u0000\u0000"+ - "\u0781\u0782\u0001\u0000\u0000\u0000\u0782\u0a59\u0005\u0003\u0000\u0000"+ - "\u0783\u0784\n\u014d\u0000\u0000\u0784\u0785\u0005\u0001\u0000\u0000\u0785"+ - "\u0786\u00056\u0000\u0000\u0786\u0788\u0005\u0002\u0000\u0000\u0787\u0789"+ - "\u0003\u0002\u0001\u0000\u0788\u0787\u0001\u0000\u0000\u0000\u0788\u0789"+ - "\u0001\u0000\u0000\u0000\u0789\u078a\u0001\u0000\u0000\u0000\u078a\u0a59"+ - "\u0005\u0003\u0000\u0000\u078b\u078c\n\u014c\u0000\u0000\u078c\u078d\u0005"+ - "\u0001\u0000\u0000\u078d\u078e\u00057\u0000\u0000\u078e\u0790\u0005\u0002"+ - "\u0000\u0000\u078f\u0791\u0003\u0002\u0001\u0000\u0790\u078f\u0001\u0000"+ - "\u0000\u0000\u0790\u0791\u0001\u0000\u0000\u0000\u0791\u0792\u0001\u0000"+ - "\u0000\u0000\u0792\u0a59\u0005\u0003\u0000\u0000\u0793\u0794\n\u014b\u0000"+ - "\u0000\u0794\u0795\u0005\u0001\u0000\u0000\u0795\u0796\u00058\u0000\u0000"+ - "\u0796\u0798\u0005\u0002\u0000\u0000\u0797\u0799\u0003\u0002\u0001\u0000"+ - "\u0798\u0797\u0001\u0000\u0000\u0000\u0798\u0799\u0001\u0000\u0000\u0000"+ - "\u0799\u079a\u0001\u0000\u0000\u0000\u079a\u0a59\u0005\u0003\u0000\u0000"+ - "\u079b\u079c\n\u014a\u0000\u0000\u079c\u079d\u0005\u0001\u0000\u0000\u079d"+ - "\u079e\u00059\u0000\u0000\u079e\u079f\u0005\u0002\u0000\u0000\u079f\u0a59"+ - "\u0005\u0003\u0000\u0000\u07a0\u07a1\n\u0149\u0000\u0000\u07a1\u07a2\u0005"+ - "\u0001\u0000\u0000\u07a2\u07a3\u0005:\u0000\u0000\u07a3\u07a5\u0005\u0002"+ - "\u0000\u0000\u07a4\u07a6\u0003\u0002\u0001\u0000\u07a5\u07a4\u0001\u0000"+ - "\u0000\u0000\u07a5\u07a6\u0001\u0000\u0000\u0000\u07a6\u07a7\u0001\u0000"+ - "\u0000\u0000\u07a7\u0a59\u0005\u0003\u0000\u0000\u07a8\u07a9\n\u0148\u0000"+ - "\u0000\u07a9\u07aa\u0005\u0001\u0000\u0000\u07aa\u07ab\u0005;\u0000\u0000"+ - "\u07ab\u07ad\u0005\u0002\u0000\u0000\u07ac\u07ae\u0003\u0002\u0001\u0000"+ - "\u07ad\u07ac\u0001\u0000\u0000\u0000\u07ad\u07ae\u0001\u0000\u0000\u0000"+ - "\u07ae\u07af\u0001\u0000\u0000\u0000\u07af\u0a59\u0005\u0003\u0000\u0000"+ - "\u07b0\u07b1\n\u0147\u0000\u0000\u07b1\u07b2\u0005\u0001\u0000\u0000\u07b2"+ - "\u07b3\u0005<\u0000\u0000\u07b3\u07b4\u0005\u0002\u0000\u0000\u07b4\u0a59"+ - "\u0005\u0003\u0000\u0000\u07b5\u07b6\n\u0146\u0000\u0000\u07b6\u07b7\u0005"+ - "\u0001\u0000\u0000\u07b7\u07b8\u0005=\u0000\u0000\u07b8\u07ba\u0005\u0002"+ - "\u0000\u0000\u07b9\u07bb\u0003\u0002\u0001\u0000\u07ba\u07b9\u0001\u0000"+ - "\u0000\u0000\u07ba\u07bb\u0001\u0000\u0000\u0000\u07bb\u07bc\u0001\u0000"+ - "\u0000\u0000\u07bc\u0a59\u0005\u0003\u0000\u0000\u07bd\u07be\n\u0145\u0000"+ - "\u0000\u07be\u07bf\u0005\u0001\u0000\u0000\u07bf\u07c0\u0005>\u0000\u0000"+ - "\u07c0\u07c2\u0005\u0002\u0000\u0000\u07c1\u07c3\u0003\u0002\u0001\u0000"+ - "\u07c2\u07c1\u0001\u0000\u0000\u0000\u07c2\u07c3\u0001\u0000\u0000\u0000"+ - "\u07c3\u07c4\u0001\u0000\u0000\u0000\u07c4\u0a59\u0005\u0003\u0000\u0000"+ - "\u07c5\u07c6\n\u0144\u0000\u0000\u07c6\u07c7\u0005\u0001\u0000\u0000\u07c7"+ - "\u07c8\u0005?\u0000\u0000\u07c8\u07c9\u0005\u0002\u0000\u0000\u07c9\u0a59"+ - "\u0005\u0003\u0000\u0000\u07ca\u07cb\n\u0143\u0000\u0000\u07cb\u07cc\u0005"+ - "\u0001\u0000\u0000\u07cc\u07cd\u0005@\u0000\u0000\u07cd\u07cf\u0005\u0002"+ - "\u0000\u0000\u07ce\u07d0\u0003\u0002\u0001\u0000\u07cf\u07ce\u0001\u0000"+ - "\u0000\u0000\u07cf\u07d0\u0001\u0000\u0000\u0000\u07d0\u07d1\u0001\u0000"+ - "\u0000\u0000\u07d1\u0a59\u0005\u0003\u0000\u0000\u07d2\u07d3\n\u0142\u0000"+ - "\u0000\u07d3\u07d4\u0005\u0001\u0000\u0000\u07d4\u07d5\u0005G\u0000\u0000"+ - "\u07d5\u07d6\u0005\u0002\u0000\u0000\u07d6\u0a59\u0005\u0003\u0000\u0000"+ - "\u07d7\u07d8\n\u0141\u0000\u0000\u07d8\u07d9\u0005\u0001\u0000\u0000\u07d9"+ - "\u07da\u0005p\u0000\u0000\u07da\u07db\u0005\u0002\u0000\u0000\u07db\u0a59"+ - "\u0005\u0003\u0000\u0000\u07dc\u07dd\n\u0140\u0000\u0000\u07dd\u07de\u0005"+ - "\u0001\u0000\u0000\u07de\u07df\u0005q\u0000\u0000\u07df\u07e0\u0005\u0002"+ - "\u0000\u0000\u07e0\u0a59\u0005\u0003\u0000\u0000\u07e1\u07e2\n\u013f\u0000"+ - "\u0000\u07e2\u07e3\u0005\u0001\u0000\u0000\u07e3\u07e4\u0005r\u0000\u0000"+ - "\u07e4\u07e5\u0005\u0002\u0000\u0000\u07e5\u0a59\u0005\u0003\u0000\u0000"+ - "\u07e6\u07e7\n\u013e\u0000\u0000\u07e7\u07e8\u0005\u0001\u0000\u0000\u07e8"+ - "\u07e9\u0005s\u0000\u0000\u07e9\u07ea\u0005\u0002\u0000\u0000\u07ea\u0a59"+ - "\u0005\u0003\u0000\u0000\u07eb\u07ec\n\u013d\u0000\u0000\u07ec\u07ed\u0005"+ - "\u0001\u0000\u0000\u07ed\u07ee\u0005t\u0000\u0000\u07ee\u07ef\u0005\u0002"+ - "\u0000\u0000\u07ef\u0a59\u0005\u0003\u0000\u0000\u07f0\u07f1\n\u013c\u0000"+ - "\u0000\u07f1\u07f2\u0005\u0001\u0000\u0000\u07f2\u07f3\u0005u\u0000\u0000"+ - "\u07f3\u07fc\u0005\u0002\u0000\u0000\u07f4\u07f9\u0003\u0002\u0001\u0000"+ - "\u07f5\u07f6\u0005\u0004\u0000\u0000\u07f6\u07f8\u0003\u0002\u0001\u0000"+ - "\u07f7\u07f5\u0001\u0000\u0000\u0000\u07f8\u07fb\u0001\u0000\u0000\u0000"+ - "\u07f9\u07f7\u0001\u0000\u0000\u0000\u07f9\u07fa\u0001\u0000\u0000\u0000"+ - "\u07fa\u07fd\u0001\u0000\u0000\u0000\u07fb\u07f9\u0001\u0000\u0000\u0000"+ - "\u07fc\u07f4\u0001\u0000\u0000\u0000\u07fc\u07fd\u0001\u0000\u0000\u0000"+ - "\u07fd\u07fe\u0001\u0000\u0000\u0000\u07fe\u0a59\u0005\u0003\u0000\u0000"+ - "\u07ff\u0800\n\u013b\u0000\u0000\u0800\u0801\u0005\u0001\u0000\u0000\u0801"+ - "\u0802\u0005v\u0000\u0000\u0802\u0803\u0005\u0002\u0000\u0000\u0803\u0804"+ - "\u0003\u0002\u0001\u0000\u0804\u0805\u0005\u0003\u0000\u0000\u0805\u0a59"+ - "\u0001\u0000\u0000\u0000\u0806\u0807\n\u013a\u0000\u0000\u0807\u0808\u0005"+ - "\u0001\u0000\u0000\u0808\u0809\u0005w\u0000\u0000\u0809\u080a\u0005\u0002"+ - "\u0000\u0000\u080a\u080d\u0003\u0002\u0001\u0000\u080b\u080c\u0005\u0004"+ - "\u0000\u0000\u080c\u080e\u0003\u0002\u0001\u0000\u080d\u080b\u0001\u0000"+ - "\u0000\u0000\u080d\u080e\u0001\u0000\u0000\u0000\u080e\u080f\u0001\u0000"+ - "\u0000\u0000\u080f\u0810\u0005\u0003\u0000\u0000\u0810\u0a59\u0001\u0000"+ - "\u0000\u0000\u0811\u0812\n\u0139\u0000\u0000\u0812\u0813\u0005\u0001\u0000"+ - "\u0000\u0813\u0814\u0005y\u0000\u0000\u0814\u0816\u0005\u0002\u0000\u0000"+ - "\u0815\u0817\u0003\u0002\u0001\u0000\u0816\u0815\u0001\u0000\u0000\u0000"+ - "\u0816\u0817\u0001\u0000\u0000\u0000\u0817\u0818\u0001\u0000\u0000\u0000"+ - "\u0818\u0a59\u0005\u0003\u0000\u0000\u0819\u081a\n\u0138\u0000\u0000\u081a"+ - "\u081b\u0005\u0001\u0000\u0000\u081b\u081c\u0005z\u0000\u0000\u081c\u081d"+ - "\u0005\u0002\u0000\u0000\u081d\u0a59\u0005\u0003\u0000\u0000\u081e\u081f"+ - "\n\u0137\u0000\u0000\u081f\u0820\u0005\u0001\u0000\u0000\u0820\u0821\u0005"+ - "{\u0000\u0000\u0821\u0822\u0005\u0002\u0000\u0000\u0822\u0a59\u0005\u0003"+ - "\u0000\u0000\u0823\u0824\n\u0136\u0000\u0000\u0824\u0825\u0005\u0001\u0000"+ - "\u0000\u0825\u0826\u0005|\u0000\u0000\u0826\u0827\u0005\u0002\u0000\u0000"+ - "\u0827\u0828\u0003\u0002\u0001\u0000\u0828\u0829\u0005\u0004\u0000\u0000"+ - "\u0829\u082a\u0003\u0002\u0001\u0000\u082a\u082b\u0005\u0003\u0000\u0000"+ - "\u082b\u0a59\u0001\u0000\u0000\u0000\u082c\u082d\n\u0135\u0000\u0000\u082d"+ - "\u082e\u0005\u0001\u0000\u0000\u082e\u082f\u0005}\u0000\u0000\u082f\u0830"+ - "\u0005\u0002\u0000\u0000\u0830\u0a59\u0005\u0003\u0000\u0000\u0831\u0832"+ - "\n\u0134\u0000\u0000\u0832\u0833\u0005\u0001\u0000\u0000\u0833\u0834\u0005"+ - "~\u0000\u0000\u0834\u0835\u0005\u0002\u0000\u0000\u0835\u0836\u0003\u0002"+ - "\u0001\u0000\u0836\u0837\u0005\u0004\u0000\u0000\u0837\u083a\u0003\u0002"+ - "\u0001\u0000\u0838\u0839\u0005\u0004\u0000\u0000\u0839\u083b\u0003\u0002"+ - "\u0001\u0000\u083a\u0838\u0001\u0000\u0000\u0000\u083a\u083b\u0001\u0000"+ - "\u0000\u0000\u083b\u083c\u0001\u0000\u0000\u0000\u083c\u083d\u0005\u0003"+ - "\u0000\u0000\u083d\u0a59\u0001\u0000\u0000\u0000\u083e\u083f\n\u0133\u0000"+ - "\u0000\u083f\u0840\u0005\u0001\u0000\u0000\u0840\u0841\u0005\u007f\u0000"+ - "\u0000\u0841\u0842\u0005\u0002\u0000\u0000\u0842\u0843\u0003\u0002\u0001"+ - "\u0000\u0843\u0844\u0005\u0003\u0000\u0000\u0844\u0a59\u0001\u0000\u0000"+ - "\u0000\u0845\u0846\n\u0132\u0000\u0000\u0846\u0847\u0005\u0001\u0000\u0000"+ - "\u0847\u0848\u0005\u0080\u0000\u0000\u0848\u084a\u0005\u0002\u0000\u0000"+ - "\u0849\u084b\u0003\u0002\u0001\u0000\u084a\u0849\u0001\u0000\u0000\u0000"+ - "\u084a\u084b\u0001\u0000\u0000\u0000\u084b\u084c\u0001\u0000\u0000\u0000"+ - "\u084c\u0a59\u0005\u0003\u0000\u0000\u084d\u084e\n\u0131\u0000\u0000\u084e"+ - "\u084f\u0005\u0001\u0000\u0000\u084f\u0850\u0005\u0081\u0000\u0000\u0850"+ - "\u0851\u0005\u0002\u0000\u0000\u0851\u0a59\u0005\u0003\u0000\u0000\u0852"+ - "\u0853\n\u0130\u0000\u0000\u0853\u0854\u0005\u0001\u0000\u0000\u0854\u0855"+ - "\u0005\u0082\u0000\u0000\u0855\u0856\u0005\u0002\u0000\u0000\u0856\u0859"+ - "\u0003\u0002\u0001\u0000\u0857\u0858\u0005\u0004\u0000\u0000\u0858\u085a"+ - "\u0003\u0002\u0001\u0000\u0859\u0857\u0001\u0000\u0000\u0000\u0859\u085a"+ - "\u0001\u0000\u0000\u0000\u085a\u085b\u0001\u0000\u0000\u0000\u085b\u085c"+ - "\u0005\u0003\u0000\u0000\u085c\u0a59\u0001\u0000\u0000\u0000\u085d\u085e"+ - "\n\u012f\u0000\u0000\u085e\u085f\u0005\u0001\u0000\u0000\u085f\u0860\u0005"+ - "\u0083\u0000\u0000\u0860\u0861\u0005\u0002\u0000\u0000\u0861\u0862\u0003"+ - "\u0002\u0001\u0000\u0862\u0863\u0005\u0004\u0000\u0000\u0863\u0866\u0003"+ - "\u0002\u0001\u0000\u0864\u0865\u0005\u0004\u0000\u0000\u0865\u0867\u0003"+ - "\u0002\u0001\u0000\u0866\u0864\u0001\u0000\u0000\u0000\u0866\u0867\u0001"+ - "\u0000\u0000\u0000\u0867\u0868\u0001\u0000\u0000\u0000\u0868\u0869\u0005"+ - "\u0003\u0000\u0000\u0869\u0a59\u0001\u0000\u0000\u0000\u086a\u086b\n\u012e"+ - "\u0000\u0000\u086b\u086c\u0005\u0001\u0000\u0000\u086c\u086d\u0005\u0084"+ - "\u0000\u0000\u086d\u086e\u0005\u0002\u0000\u0000\u086e\u0a59\u0005\u0003"+ - "\u0000\u0000\u086f\u0870\n\u012d\u0000\u0000\u0870\u0871\u0005\u0001\u0000"+ - "\u0000\u0871\u0872\u0005\u0085\u0000\u0000\u0872\u0873\u0005\u0002\u0000"+ - "\u0000\u0873\u0874\u0003\u0002\u0001\u0000\u0874\u0875\u0005\u0003\u0000"+ - "\u0000\u0875\u0a59\u0001\u0000\u0000\u0000\u0876\u0877\n\u012c\u0000\u0000"+ - "\u0877\u0878\u0005\u0001\u0000\u0000\u0878\u0879\u0005\u0086\u0000\u0000"+ - "\u0879\u087a\u0005\u0002\u0000\u0000\u087a\u0a59\u0005\u0003\u0000\u0000"+ - "\u087b\u087c\n\u012b\u0000\u0000\u087c\u087d\u0005\u0001\u0000\u0000\u087d"+ - "\u087e\u0005\u0087\u0000\u0000\u087e\u087f\u0005\u0002\u0000\u0000\u087f"+ - "\u0a59\u0005\u0003\u0000\u0000\u0880\u0881\n\u012a\u0000\u0000\u0881\u0882"+ - "\u0005\u0001\u0000\u0000\u0882\u0883\u0005\u0088\u0000\u0000\u0883\u0884"+ - "\u0005\u0002\u0000\u0000\u0884\u0a59\u0005\u0003\u0000\u0000\u0885\u0886"+ - "\n\u0129\u0000\u0000\u0886\u0887\u0005\u0001\u0000\u0000\u0887\u0888\u0005"+ - "\u0089\u0000\u0000\u0888\u088a\u0005\u0002\u0000\u0000\u0889\u088b\u0003"+ - "\u0002\u0001\u0000\u088a\u0889\u0001\u0000\u0000\u0000\u088a\u088b\u0001"+ - "\u0000\u0000\u0000\u088b\u088c\u0001\u0000\u0000\u0000\u088c\u0a59\u0005"+ - "\u0003\u0000\u0000\u088d\u088e\n\u0128\u0000\u0000\u088e\u088f\u0005\u0001"+ - "\u0000\u0000\u088f\u0890\u0005\u008a\u0000\u0000\u0890\u0891\u0005\u0002"+ - "\u0000\u0000\u0891\u0a59\u0005\u0003\u0000\u0000\u0892\u0893\n\u0127\u0000"+ - "\u0000\u0893\u0894\u0005\u0001\u0000\u0000\u0894\u0897\u0005\u008f\u0000"+ - "\u0000\u0895\u0896\u0005\u0002\u0000\u0000\u0896\u0898\u0005\u0003\u0000"+ - "\u0000\u0897\u0895\u0001\u0000\u0000\u0000\u0897\u0898\u0001\u0000\u0000"+ - "\u0000\u0898\u0a59\u0001\u0000\u0000\u0000\u0899\u089a\n\u0126\u0000\u0000"+ - "\u089a\u089b\u0005\u0001\u0000\u0000\u089b\u089e\u0005\u0090\u0000\u0000"+ - "\u089c\u089d\u0005\u0002\u0000\u0000\u089d\u089f\u0005\u0003\u0000\u0000"+ - "\u089e\u089c\u0001\u0000\u0000\u0000\u089e\u089f\u0001\u0000\u0000\u0000"+ - "\u089f\u0a59\u0001\u0000\u0000\u0000\u08a0\u08a1\n\u0125\u0000\u0000\u08a1"+ - "\u08a2\u0005\u0001\u0000\u0000\u08a2\u08a5\u0005\u0091\u0000\u0000\u08a3"+ - "\u08a4\u0005\u0002\u0000\u0000\u08a4\u08a6\u0005\u0003\u0000\u0000\u08a5"+ - "\u08a3\u0001\u0000\u0000\u0000\u08a5\u08a6\u0001\u0000\u0000\u0000\u08a6"+ - "\u0a59\u0001\u0000\u0000\u0000\u08a7\u08a8\n\u0124\u0000\u0000\u08a8\u08a9"+ - "\u0005\u0001\u0000\u0000\u08a9\u08ac\u0005\u0092\u0000\u0000\u08aa\u08ab"+ - "\u0005\u0002\u0000\u0000\u08ab\u08ad\u0005\u0003\u0000\u0000\u08ac\u08aa"+ - "\u0001\u0000\u0000\u0000\u08ac\u08ad\u0001\u0000\u0000\u0000\u08ad\u0a59"+ - "\u0001\u0000\u0000\u0000\u08ae\u08af\n\u0123\u0000\u0000\u08af\u08b0\u0005"+ - "\u0001\u0000\u0000\u08b0\u08b3\u0005\u0093\u0000\u0000\u08b1\u08b2\u0005"+ - "\u0002\u0000\u0000\u08b2\u08b4\u0005\u0003\u0000\u0000\u08b3\u08b1\u0001"+ - "\u0000\u0000\u0000\u08b3\u08b4\u0001\u0000\u0000\u0000\u08b4\u0a59\u0001"+ - "\u0000\u0000\u0000\u08b5\u08b6\n\u0122\u0000\u0000\u08b6\u08b7\u0005\u0001"+ - "\u0000\u0000\u08b7\u08ba\u0005\u0094\u0000\u0000\u08b8\u08b9\u0005\u0002"+ - "\u0000\u0000\u08b9\u08bb\u0005\u0003\u0000\u0000\u08ba\u08b8\u0001\u0000"+ - "\u0000\u0000\u08ba\u08bb\u0001\u0000\u0000\u0000\u08bb\u0a59\u0001\u0000"+ - "\u0000\u0000\u08bc\u08bd\n\u0121\u0000\u0000\u08bd\u08be\u0005\u0001\u0000"+ - "\u0000\u08be\u08bf\u0005\u00cd\u0000\u0000\u08bf\u08c0\u0005\u0002\u0000"+ - "\u0000\u08c0\u0a59\u0005\u0003\u0000\u0000\u08c1\u08c2\n\u0120\u0000\u0000"+ - "\u08c2\u08c3\u0005\u0001\u0000\u0000\u08c3\u08c4\u0005\u00ce\u0000\u0000"+ - "\u08c4\u08c5\u0005\u0002\u0000\u0000\u08c5\u0a59\u0005\u0003\u0000\u0000"+ - "\u08c6\u08c7\n\u011f\u0000\u0000\u08c7\u08c8\u0005\u0001\u0000\u0000\u08c8"+ - "\u08c9\u0005\u00cf\u0000\u0000\u08c9\u08ca\u0005\u0002\u0000\u0000\u08ca"+ - "\u0a59\u0005\u0003\u0000\u0000\u08cb\u08cc\n\u011e\u0000\u0000\u08cc\u08cd"+ - "\u0005\u0001\u0000\u0000\u08cd\u08ce\u0005\u00d0\u0000\u0000\u08ce\u08cf"+ - "\u0005\u0002\u0000\u0000\u08cf\u0a59\u0005\u0003\u0000\u0000\u08d0\u08d1"+ - "\n\u011d\u0000\u0000\u08d1\u08d2\u0005\u0001\u0000\u0000\u08d2\u08d3\u0005"+ - "\u00d1\u0000\u0000\u08d3\u08d5\u0005\u0002\u0000\u0000\u08d4\u08d6\u0003"+ - "\u0002\u0001\u0000\u08d5\u08d4\u0001\u0000\u0000\u0000\u08d5\u08d6\u0001"+ - "\u0000\u0000\u0000\u08d6\u08d7\u0001\u0000\u0000\u0000\u08d7\u0a59\u0005"+ - "\u0003\u0000\u0000\u08d8\u08d9\n\u011c\u0000\u0000\u08d9\u08da\u0005\u0001"+ - "\u0000\u0000\u08da\u08db\u0005\u00d2\u0000\u0000\u08db\u08dd\u0005\u0002"+ - "\u0000\u0000\u08dc\u08de\u0003\u0002\u0001\u0000\u08dd\u08dc\u0001\u0000"+ - "\u0000\u0000\u08dd\u08de\u0001\u0000\u0000\u0000\u08de\u08df\u0001\u0000"+ - "\u0000\u0000\u08df\u0a59\u0005\u0003\u0000\u0000\u08e0\u08e1\n\u011b\u0000"+ - "\u0000\u08e1\u08e2\u0005\u0001\u0000\u0000\u08e2\u08e3\u0005\u00d3\u0000"+ - "\u0000\u08e3\u08e5\u0005\u0002\u0000\u0000\u08e4\u08e6\u0003\u0002\u0001"+ - "\u0000\u08e5\u08e4\u0001\u0000\u0000\u0000\u08e5\u08e6\u0001\u0000\u0000"+ - "\u0000\u08e6\u08e7\u0001\u0000\u0000\u0000\u08e7\u0a59\u0005\u0003\u0000"+ - "\u0000\u08e8\u08e9\n\u011a\u0000\u0000\u08e9\u08ea\u0005\u0001\u0000\u0000"+ - "\u08ea\u08eb\u0005\u00d4\u0000\u0000\u08eb\u08ed\u0005\u0002\u0000\u0000"+ - "\u08ec\u08ee\u0003\u0002\u0001\u0000\u08ed\u08ec\u0001\u0000\u0000\u0000"+ - "\u08ed\u08ee\u0001\u0000\u0000\u0000\u08ee\u08ef\u0001\u0000\u0000\u0000"+ - "\u08ef\u0a59\u0005\u0003\u0000\u0000\u08f0\u08f1\n\u0119\u0000\u0000\u08f1"+ - "\u08f2\u0005\u0001\u0000\u0000\u08f2\u08f3\u0005\u00d5\u0000\u0000\u08f3"+ - "\u08f4\u0005\u0002\u0000\u0000\u08f4\u08f5\u0003\u0002\u0001\u0000\u08f5"+ - "\u08f6\u0005\u0003\u0000\u0000\u08f6\u0a59\u0001\u0000\u0000\u0000\u08f7"+ - "\u08f8\n\u0118\u0000\u0000\u08f8\u08f9\u0005\u0001\u0000\u0000\u08f9\u08fa"+ - "\u0005\u00d6\u0000\u0000\u08fa\u08fb\u0005\u0002\u0000\u0000\u08fb\u08fc"+ - "\u0003\u0002\u0001\u0000\u08fc\u08fd\u0005\u0004\u0000\u0000\u08fd\u08fe"+ - "\u0003\u0002\u0001\u0000\u08fe\u08ff\u0005\u0003\u0000\u0000\u08ff\u0a59"+ - "\u0001\u0000\u0000\u0000\u0900\u0901\n\u0117\u0000\u0000\u0901\u0902\u0005"+ - "\u0001\u0000\u0000\u0902\u0903\u0005\u00d7\u0000\u0000\u0903\u0904\u0005"+ - "\u0002\u0000\u0000\u0904\u0905\u0003\u0002\u0001\u0000\u0905\u0906\u0005"+ - "\u0003\u0000\u0000\u0906\u0a59\u0001\u0000\u0000\u0000\u0907\u0908\n\u0116"+ - "\u0000\u0000\u0908\u0909\u0005\u0001\u0000\u0000\u0909\u090a\u0005\u00d9"+ - "\u0000\u0000\u090a\u090c\u0005\u0002\u0000\u0000\u090b\u090d\u0003\u0002"+ - "\u0001\u0000\u090c\u090b\u0001\u0000\u0000\u0000\u090c\u090d\u0001\u0000"+ - "\u0000\u0000\u090d\u090e\u0001\u0000\u0000\u0000\u090e\u0a59\u0005\u0003"+ - "\u0000\u0000\u090f\u0910\n\u0115\u0000\u0000\u0910\u0911\u0005\u0001\u0000"+ - "\u0000\u0911\u0912\u0005\u00da\u0000\u0000\u0912\u0914\u0005\u0002\u0000"+ - "\u0000\u0913\u0915\u0003\u0002\u0001\u0000\u0914\u0913\u0001\u0000\u0000"+ - "\u0000\u0914\u0915\u0001\u0000\u0000\u0000\u0915\u0916\u0001\u0000\u0000"+ - "\u0000\u0916\u0a59\u0005\u0003\u0000\u0000\u0917\u0918\n\u0114\u0000\u0000"+ - "\u0918\u0919\u0005\u0001\u0000\u0000\u0919\u091a\u0005\u00db\u0000\u0000"+ - "\u091a\u091c\u0005\u0002\u0000\u0000\u091b\u091d\u0003\u0002\u0001\u0000"+ - "\u091c\u091b\u0001\u0000\u0000\u0000\u091c\u091d\u0001\u0000\u0000\u0000"+ - "\u091d\u091e\u0001\u0000\u0000\u0000\u091e\u0a59\u0005\u0003\u0000\u0000"+ - "\u091f\u0920\n\u0113\u0000\u0000\u0920\u0921\u0005\u0001\u0000\u0000\u0921"+ - "\u0922\u0005\u00dc\u0000\u0000\u0922\u0924\u0005\u0002\u0000\u0000\u0923"+ - "\u0925\u0003\u0002\u0001\u0000\u0924\u0923\u0001\u0000\u0000\u0000\u0924"+ - "\u0925\u0001\u0000\u0000\u0000\u0925\u0926\u0001\u0000\u0000\u0000\u0926"; + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u09bb\b\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0005\u0001\u09cb\b\u0001\n\u0001\f\u0001\u09ce\t\u0001"+ + "\u0003\u0001\u09d0\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u0a02\b\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0a21\b\u0001\n\u0001"+ + "\f\u0001\u0a24\t\u0001\u0001\u0002\u0003\u0002\u0a27\b\u0002\u0001\u0002"+ + "\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004"+ + "\u0003\u0004\u0a30\b\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005"+ + "\u0001\u0005\u0001\u0005\u0000\u0001\u0002\u0006\u0000\u0002\u0004\u0006"+ + "\b\n\u0000\b\u0001\u0000\b\n\u0002\u0000\u000b\f\u001d\u001d\u0001\u0000"+ + "\r\u0010\u0001\u0000\u0011\u0016\u0002\u0000\u0017\u0017..\u0002\u0000"+ + "\u0018\u0018//\u0002\u0000\"\"\u0084\u0084\u0002\u0000 \u00f0\u00f2\u00fd"+ + "\u0c1f\u0000\f\u0001\u0000\u0000\u0000\u0002\u0712\u0001\u0000\u0000\u0000"+ + "\u0004\u0a26\u0001\u0000\u0000\u0000\u0006\u0a2a\u0001\u0000\u0000\u0000"+ + "\b\u0a2f\u0001\u0000\u0000\u0000\n\u0a34\u0001\u0000\u0000\u0000\f\r\u0003"+ + "\u0002\u0001\u0000\r\u000e\u0005\u0000\u0000\u0001\u000e\u0001\u0001\u0000"+ + "\u0000\u0000\u000f\u0010\u0006\u0001\uffff\uffff\u0000\u0010\u0011\u0005"+ + "\u0002\u0000\u0000\u0011\u0012\u0003\u0002\u0001\u0000\u0012\u0013\u0005"+ + "\u0003\u0000\u0000\u0013\u0713\u0001\u0000\u0000\u0000\u0014\u0015\u0005"+ + "\u0007\u0000\u0000\u0015\u0713\u0003\u0002\u0001\u00eb\u0016\u0017\u0005"+ + "\u00f1\u0000\u0000\u0017\u0018\u0005\u0002\u0000\u0000\u0018\u001d\u0003"+ + "\u0002\u0001\u0000\u0019\u001a\u0005\u0004\u0000\u0000\u001a\u001c\u0003"+ + "\u0002\u0001\u0000\u001b\u0019\u0001\u0000\u0000\u0000\u001c\u001f\u0001"+ + "\u0000\u0000\u0000\u001d\u001b\u0001\u0000\u0000\u0000\u001d\u001e\u0001"+ + "\u0000\u0000\u0000\u001e \u0001\u0000\u0000\u0000\u001f\u001d\u0001\u0000"+ + "\u0000\u0000 !\u0005\u0003\u0000\u0000!\u0713\u0001\u0000\u0000\u0000"+ + "\"#\u0005#\u0000\u0000#$\u0005\u0002\u0000\u0000$%\u0003\u0002\u0001\u0000"+ + "%&\u0005\u0004\u0000\u0000&)\u0003\u0002\u0001\u0000\'(\u0005\u0004\u0000"+ + "\u0000(*\u0003\u0002\u0001\u0000)\'\u0001\u0000\u0000\u0000)*\u0001\u0000"+ + "\u0000\u0000*+\u0001\u0000\u0000\u0000+,\u0005\u0003\u0000\u0000,\u0713"+ + "\u0001\u0000\u0000\u0000-.\u0005%\u0000\u0000./\u0005\u0002\u0000\u0000"+ + "/0\u0003\u0002\u0001\u000001\u0005\u0003\u0000\u00001\u0713\u0001\u0000"+ + "\u0000\u000023\u0005&\u0000\u000034\u0005\u0002\u0000\u000045\u0003\u0002"+ + "\u0001\u000056\u0005\u0003\u0000\u00006\u0713\u0001\u0000\u0000\u0000"+ + "78\u0005\'\u0000\u000089\u0005\u0002\u0000\u00009<\u0003\u0002\u0001\u0000"+ + ":;\u0005\u0004\u0000\u0000;=\u0003\u0002\u0001\u0000<:\u0001\u0000\u0000"+ + "\u0000<=\u0001\u0000\u0000\u0000=>\u0001\u0000\u0000\u0000>?\u0005\u0003"+ + "\u0000\u0000?\u0713\u0001\u0000\u0000\u0000@A\u0005(\u0000\u0000AB\u0005"+ + "\u0002\u0000\u0000BC\u0003\u0002\u0001\u0000CD\u0005\u0003\u0000\u0000"+ + "D\u0713\u0001\u0000\u0000\u0000EF\u0005)\u0000\u0000FG\u0005\u0002\u0000"+ + "\u0000GH\u0003\u0002\u0001\u0000HI\u0005\u0003\u0000\u0000I\u0713\u0001"+ + "\u0000\u0000\u0000JK\u0005*\u0000\u0000KL\u0005\u0002\u0000\u0000LM\u0003"+ + "\u0002\u0001\u0000MN\u0005\u0003\u0000\u0000N\u0713\u0001\u0000\u0000"+ + "\u0000OP\u0005+\u0000\u0000PQ\u0005\u0002\u0000\u0000QR\u0003\u0002\u0001"+ + "\u0000RS\u0005\u0003\u0000\u0000S\u0713\u0001\u0000\u0000\u0000TU\u0005"+ + "$\u0000\u0000UV\u0005\u0002\u0000\u0000VW\u0003\u0002\u0001\u0000WX\u0005"+ + "\u0004\u0000\u0000X[\u0003\u0002\u0001\u0000YZ\u0005\u0004\u0000\u0000"+ + "Z\\\u0003\u0002\u0001\u0000[Y\u0001\u0000\u0000\u0000[\\\u0001\u0000\u0000"+ + "\u0000\\]\u0001\u0000\u0000\u0000]^\u0005\u0003\u0000\u0000^\u0713\u0001"+ + "\u0000\u0000\u0000_`\u0005,\u0000\u0000`a\u0005\u0002\u0000\u0000ad\u0003"+ + "\u0002\u0001\u0000bc\u0005\u0004\u0000\u0000ce\u0003\u0002\u0001\u0000"+ + "db\u0001\u0000\u0000\u0000de\u0001\u0000\u0000\u0000ef\u0001\u0000\u0000"+ + "\u0000fg\u0005\u0003\u0000\u0000g\u0713\u0001\u0000\u0000\u0000hi\u0005"+ + "-\u0000\u0000ij\u0005\u0002\u0000\u0000jm\u0003\u0002\u0001\u0000kl\u0005"+ + "\u0004\u0000\u0000ln\u0003\u0002\u0001\u0000mk\u0001\u0000\u0000\u0000"+ + "mn\u0001\u0000\u0000\u0000no\u0001\u0000\u0000\u0000op\u0005\u0003\u0000"+ + "\u0000p\u0713\u0001\u0000\u0000\u0000qr\u0005.\u0000\u0000rs\u0005\u0002"+ + "\u0000\u0000sx\u0003\u0002\u0001\u0000tu\u0005\u0004\u0000\u0000uw\u0003"+ + "\u0002\u0001\u0000vt\u0001\u0000\u0000\u0000wz\u0001\u0000\u0000\u0000"+ + "xv\u0001\u0000\u0000\u0000xy\u0001\u0000\u0000\u0000y{\u0001\u0000\u0000"+ + "\u0000zx\u0001\u0000\u0000\u0000{|\u0005\u0003\u0000\u0000|\u0713\u0001"+ + "\u0000\u0000\u0000}~\u0005/\u0000\u0000~\u007f\u0005\u0002\u0000\u0000"+ + "\u007f\u0084\u0003\u0002\u0001\u0000\u0080\u0081\u0005\u0004\u0000\u0000"+ + "\u0081\u0083\u0003\u0002\u0001\u0000\u0082\u0080\u0001\u0000\u0000\u0000"+ + "\u0083\u0086\u0001\u0000\u0000\u0000\u0084\u0082\u0001\u0000\u0000\u0000"+ + "\u0084\u0085\u0001\u0000\u0000\u0000\u0085\u0087\u0001\u0000\u0000\u0000"+ + "\u0086\u0084\u0001\u0000\u0000\u0000\u0087\u0088\u0005\u0003\u0000\u0000"+ + "\u0088\u0713\u0001\u0000\u0000\u0000\u0089\u008a\u00050\u0000\u0000\u008a"+ + "\u008b\u0005\u0002\u0000\u0000\u008b\u008c\u0003\u0002\u0001\u0000\u008c"+ + "\u008d\u0005\u0003\u0000\u0000\u008d\u0713\u0001\u0000\u0000\u0000\u008e"+ + "\u0091\u00051\u0000\u0000\u008f\u0090\u0005\u0002\u0000\u0000\u0090\u0092"+ + "\u0005\u0003\u0000\u0000\u0091\u008f\u0001\u0000\u0000\u0000\u0091\u0092"+ + "\u0001\u0000\u0000\u0000\u0092\u0713\u0001\u0000\u0000\u0000\u0093\u0096"+ + "\u00052\u0000\u0000\u0094\u0095\u0005\u0002\u0000\u0000\u0095\u0097\u0005"+ + "\u0003\u0000\u0000\u0096\u0094\u0001\u0000\u0000\u0000\u0096\u0097\u0001"+ + "\u0000\u0000\u0000\u0097\u0713\u0001\u0000\u0000\u0000\u0098\u009b\u0005"+ + "3\u0000\u0000\u0099\u009a\u0005\u0002\u0000\u0000\u009a\u009c\u0005\u0003"+ + "\u0000\u0000\u009b\u0099\u0001\u0000\u0000\u0000\u009b\u009c\u0001\u0000"+ + "\u0000\u0000\u009c\u0713\u0001\u0000\u0000\u0000\u009d\u00a0\u00054\u0000"+ + "\u0000\u009e\u009f\u0005\u0002\u0000\u0000\u009f\u00a1\u0005\u0003\u0000"+ + "\u0000\u00a0\u009e\u0001\u0000\u0000\u0000\u00a0\u00a1\u0001\u0000\u0000"+ + "\u0000\u00a1\u0713\u0001\u0000\u0000\u0000\u00a2\u00a3\u00055\u0000\u0000"+ + "\u00a3\u00a4\u0005\u0002\u0000\u0000\u00a4\u00a7\u0003\u0002\u0001\u0000"+ + "\u00a5\u00a6\u0005\u0004\u0000\u0000\u00a6\u00a8\u0003\u0002\u0001\u0000"+ + "\u00a7\u00a5\u0001\u0000\u0000\u0000\u00a7\u00a8\u0001\u0000\u0000\u0000"+ + "\u00a8\u00a9\u0001\u0000\u0000\u0000\u00a9\u00aa\u0005\u0003\u0000\u0000"+ + "\u00aa\u0713\u0001\u0000\u0000\u0000\u00ab\u00ac\u00056\u0000\u0000\u00ac"+ + "\u00ad\u0005\u0002\u0000\u0000\u00ad\u00b0\u0003\u0002\u0001\u0000\u00ae"+ + "\u00af\u0005\u0004\u0000\u0000\u00af\u00b1\u0003\u0002\u0001\u0000\u00b0"+ + "\u00ae\u0001\u0000\u0000\u0000\u00b0\u00b1\u0001\u0000\u0000\u0000\u00b1"+ + "\u00b2\u0001\u0000\u0000\u0000\u00b2\u00b3\u0005\u0003\u0000\u0000\u00b3"+ + "\u0713\u0001\u0000\u0000\u0000\u00b4\u00b5\u00057\u0000\u0000\u00b5\u00b6"+ + "\u0005\u0002\u0000\u0000\u00b6\u00b9\u0003\u0002\u0001\u0000\u00b7\u00b8"+ + "\u0005\u0004\u0000\u0000\u00b8\u00ba\u0003\u0002\u0001\u0000\u00b9\u00b7"+ + "\u0001\u0000\u0000\u0000\u00b9\u00ba\u0001\u0000\u0000\u0000\u00ba\u00bb"+ + "\u0001\u0000\u0000\u0000\u00bb\u00bc\u0005\u0003\u0000\u0000\u00bc\u0713"+ + "\u0001\u0000\u0000\u0000\u00bd\u00be\u00058\u0000\u0000\u00be\u00bf\u0005"+ + "\u0002\u0000\u0000\u00bf\u00c2\u0003\u0002\u0001\u0000\u00c0\u00c1\u0005"+ + "\u0004\u0000\u0000\u00c1\u00c3\u0003\u0002\u0001\u0000\u00c2\u00c0\u0001"+ + "\u0000\u0000\u0000\u00c2\u00c3\u0001\u0000\u0000\u0000\u00c3\u00c4\u0001"+ + "\u0000\u0000\u0000\u00c4\u00c5\u0005\u0003\u0000\u0000\u00c5\u0713\u0001"+ + "\u0000\u0000\u0000\u00c6\u00c7\u00059\u0000\u0000\u00c7\u00c8\u0005\u0002"+ + "\u0000\u0000\u00c8\u00c9\u0003\u0002\u0001\u0000\u00c9\u00ca\u0005\u0003"+ + "\u0000\u0000\u00ca\u0713\u0001\u0000\u0000\u0000\u00cb\u00cc\u0005:\u0000"+ + "\u0000\u00cc\u00cd\u0005\u0002\u0000\u0000\u00cd\u00d0\u0003\u0002\u0001"+ + "\u0000\u00ce\u00cf\u0005\u0004\u0000\u0000\u00cf\u00d1\u0003\u0002\u0001"+ + "\u0000\u00d0\u00ce\u0001\u0000\u0000\u0000\u00d0\u00d1\u0001\u0000\u0000"+ + "\u0000\u00d1\u00d2\u0001\u0000\u0000\u0000\u00d2\u00d3\u0005\u0003\u0000"+ + "\u0000\u00d3\u0713\u0001\u0000\u0000\u0000\u00d4\u00d5\u0005;\u0000\u0000"+ + "\u00d5\u00d6\u0005\u0002\u0000\u0000\u00d6\u00d9\u0003\u0002\u0001\u0000"+ + "\u00d7\u00d8\u0005\u0004\u0000\u0000\u00d8\u00da\u0003\u0002\u0001\u0000"+ + "\u00d9\u00d7\u0001\u0000\u0000\u0000\u00d9\u00da\u0001\u0000\u0000\u0000"+ + "\u00da\u00db\u0001\u0000\u0000\u0000\u00db\u00dc\u0005\u0003\u0000\u0000"+ + "\u00dc\u0713\u0001\u0000\u0000\u0000\u00dd\u00de\u0005<\u0000\u0000\u00de"+ + "\u00df\u0005\u0002\u0000\u0000\u00df\u00e0\u0003\u0002\u0001\u0000\u00e0"+ + "\u00e1\u0005\u0003\u0000\u0000\u00e1\u0713\u0001\u0000\u0000\u0000\u00e2"+ + "\u00e3\u0005=\u0000\u0000\u00e3\u00e4\u0005\u0002\u0000\u0000\u00e4\u00e7"+ + "\u0003\u0002\u0001\u0000\u00e5\u00e6\u0005\u0004\u0000\u0000\u00e6\u00e8"+ + "\u0003\u0002\u0001\u0000\u00e7\u00e5\u0001\u0000\u0000\u0000\u00e7\u00e8"+ + "\u0001\u0000\u0000\u0000\u00e8\u00e9\u0001\u0000\u0000\u0000\u00e9\u00ea"+ + "\u0005\u0003\u0000\u0000\u00ea\u0713\u0001\u0000\u0000\u0000\u00eb\u00ec"+ + "\u0005>\u0000\u0000\u00ec\u00ed\u0005\u0002\u0000\u0000\u00ed\u00f0\u0003"+ + "\u0002\u0001\u0000\u00ee\u00ef\u0005\u0004\u0000\u0000\u00ef\u00f1\u0003"+ + "\u0002\u0001\u0000\u00f0\u00ee\u0001\u0000\u0000\u0000\u00f0\u00f1\u0001"+ + "\u0000\u0000\u0000\u00f1\u00f2\u0001\u0000\u0000\u0000\u00f2\u00f3\u0005"+ + "\u0003\u0000\u0000\u00f3\u0713\u0001\u0000\u0000\u0000\u00f4\u00f5\u0005"+ + "?\u0000\u0000\u00f5\u00f6\u0005\u0002\u0000\u0000\u00f6\u00f7\u0003\u0002"+ + "\u0001\u0000\u00f7\u00f8\u0005\u0003\u0000\u0000\u00f8\u0713\u0001\u0000"+ + "\u0000\u0000\u00f9\u00fa\u0005@\u0000\u0000\u00fa\u00fb\u0005\u0002\u0000"+ + "\u0000\u00fb\u00fe\u0003\u0002\u0001\u0000\u00fc\u00fd\u0005\u0004\u0000"+ + "\u0000\u00fd\u00ff\u0003\u0002\u0001\u0000\u00fe\u00fc\u0001\u0000\u0000"+ + "\u0000\u00fe\u00ff\u0001\u0000\u0000\u0000\u00ff\u0100\u0001\u0000\u0000"+ + "\u0000\u0100\u0101\u0005\u0003\u0000\u0000\u0101\u0713\u0001\u0000\u0000"+ + "\u0000\u0102\u0103\u0005A\u0000\u0000\u0103\u0104\u0005\u0002\u0000\u0000"+ + "\u0104\u0105\u0003\u0002\u0001\u0000\u0105\u0106\u0005\u0003\u0000\u0000"+ + "\u0106\u0713\u0001\u0000\u0000\u0000\u0107\u0108\u0005B\u0000\u0000\u0108"+ + "\u0109\u0005\u0002\u0000\u0000\u0109\u010a\u0003\u0002\u0001\u0000\u010a"+ + "\u010b\u0005\u0004\u0000\u0000\u010b\u010c\u0003\u0002\u0001\u0000\u010c"+ + "\u010d\u0001\u0000\u0000\u0000\u010d\u010e\u0005\u0003\u0000\u0000\u010e"+ + "\u0713\u0001\u0000\u0000\u0000\u010f\u0110\u0005C\u0000\u0000\u0110\u0111"+ + "\u0005\u0002\u0000\u0000\u0111\u0112\u0003\u0002\u0001\u0000\u0112\u0113"+ + "\u0005\u0004\u0000\u0000\u0113\u0114\u0003\u0002\u0001\u0000\u0114\u0115"+ + "\u0001\u0000\u0000\u0000\u0115\u0116\u0005\u0003\u0000\u0000\u0116\u0713"+ + "\u0001\u0000\u0000\u0000\u0117\u0118\u0005D\u0000\u0000\u0118\u0119\u0005"+ + "\u0002\u0000\u0000\u0119\u011a\u0003\u0002\u0001\u0000\u011a\u011b\u0005"+ + "\u0003\u0000\u0000\u011b\u0713\u0001\u0000\u0000\u0000\u011c\u011d\u0005"+ + "E\u0000\u0000\u011d\u011e\u0005\u0002\u0000\u0000\u011e\u011f\u0003\u0002"+ + "\u0001\u0000\u011f\u0120\u0005\u0003\u0000\u0000\u0120\u0713\u0001\u0000"+ + "\u0000\u0000\u0121\u0122\u0005F\u0000\u0000\u0122\u0123\u0005\u0002\u0000"+ + "\u0000\u0123\u0124\u0003\u0002\u0001\u0000\u0124\u0125\u0005\u0003\u0000"+ + "\u0000\u0125\u0713\u0001\u0000\u0000\u0000\u0126\u0127\u0005G\u0000\u0000"+ + "\u0127\u0128\u0005\u0002\u0000\u0000\u0128\u0129\u0003\u0002\u0001\u0000"+ + "\u0129\u012a\u0005\u0003\u0000\u0000\u012a\u0713\u0001\u0000\u0000\u0000"+ + "\u012b\u012c\u0005H\u0000\u0000\u012c\u012d\u0005\u0002\u0000\u0000\u012d"+ + "\u0130\u0003\u0002\u0001\u0000\u012e\u012f\u0005\u0004\u0000\u0000\u012f"+ + "\u0131\u0003\u0002\u0001\u0000\u0130\u012e\u0001\u0000\u0000\u0000\u0131"+ + "\u0132\u0001\u0000\u0000\u0000\u0132\u0130\u0001\u0000\u0000\u0000\u0132"+ + "\u0133\u0001\u0000\u0000\u0000\u0133\u0134\u0001\u0000\u0000\u0000\u0134"+ + "\u0135\u0005\u0003\u0000\u0000\u0135\u0713\u0001\u0000\u0000\u0000\u0136"+ + "\u0137\u0005I\u0000\u0000\u0137\u0138\u0005\u0002\u0000\u0000\u0138\u013b"+ + "\u0003\u0002\u0001\u0000\u0139\u013a\u0005\u0004\u0000\u0000\u013a\u013c"+ + "\u0003\u0002\u0001\u0000\u013b\u0139\u0001\u0000\u0000\u0000\u013c\u013d"+ + "\u0001\u0000\u0000\u0000\u013d\u013b\u0001\u0000\u0000\u0000\u013d\u013e"+ + "\u0001\u0000\u0000\u0000\u013e\u013f\u0001\u0000\u0000\u0000\u013f\u0140"+ + "\u0005\u0003\u0000\u0000\u0140\u0713\u0001\u0000\u0000\u0000\u0141\u0142"+ + "\u0005J\u0000\u0000\u0142\u0143\u0005\u0002\u0000\u0000\u0143\u0144\u0003"+ + "\u0002\u0001\u0000\u0144\u0145\u0005\u0004\u0000\u0000\u0145\u0146\u0003"+ + "\u0002\u0001\u0000\u0146\u0147\u0005\u0003\u0000\u0000\u0147\u0713\u0001"+ + "\u0000\u0000\u0000\u0148\u0149\u0005K\u0000\u0000\u0149\u014a\u0005\u0002"+ + "\u0000\u0000\u014a\u014b\u0003\u0002\u0001\u0000\u014b\u014c\u0005\u0004"+ + "\u0000\u0000\u014c\u014d\u0003\u0002\u0001\u0000\u014d\u014e\u0005\u0003"+ + "\u0000\u0000\u014e\u0713\u0001\u0000\u0000\u0000\u014f\u0150\u0005L\u0000"+ + "\u0000\u0150\u0151\u0005\u0002\u0000\u0000\u0151\u0152\u0003\u0002\u0001"+ + "\u0000\u0152\u0153\u0005\u0003\u0000\u0000\u0153\u0713\u0001\u0000\u0000"+ + "\u0000\u0154\u0155\u0005M\u0000\u0000\u0155\u0156\u0005\u0002\u0000\u0000"+ + "\u0156\u0157\u0003\u0002\u0001\u0000\u0157\u0158\u0005\u0003\u0000\u0000"+ + "\u0158\u0713\u0001\u0000\u0000\u0000\u0159\u015a\u0005N\u0000\u0000\u015a"+ + "\u015b\u0005\u0002\u0000\u0000\u015b\u015c\u0003\u0002\u0001\u0000\u015c"+ + "\u015d\u0005\u0003\u0000\u0000\u015d\u0713\u0001\u0000\u0000\u0000\u015e"+ + "\u015f\u0005O\u0000\u0000\u015f\u0160\u0005\u0002\u0000\u0000\u0160\u0161"+ + "\u0003\u0002\u0001\u0000\u0161\u0162\u0005\u0003\u0000\u0000\u0162\u0713"+ + "\u0001\u0000\u0000\u0000\u0163\u0164\u0005P\u0000\u0000\u0164\u0165\u0005"+ + "\u0002\u0000\u0000\u0165\u0166\u0003\u0002\u0001\u0000\u0166\u0167\u0005"+ + "\u0003\u0000\u0000\u0167\u0713\u0001\u0000\u0000\u0000\u0168\u0169\u0005"+ + "Q\u0000\u0000\u0169\u016a\u0005\u0002\u0000\u0000\u016a\u016b\u0003\u0002"+ + "\u0001\u0000\u016b\u016c\u0005\u0003\u0000\u0000\u016c\u0713\u0001\u0000"+ + "\u0000\u0000\u016d\u016e\u0005R\u0000\u0000\u016e\u016f\u0005\u0002\u0000"+ + "\u0000\u016f\u0170\u0003\u0002\u0001\u0000\u0170\u0171\u0005\u0003\u0000"+ + "\u0000\u0171\u0713\u0001\u0000\u0000\u0000\u0172\u0173\u0005S\u0000\u0000"+ + "\u0173\u0174\u0005\u0002\u0000\u0000\u0174\u0175\u0003\u0002\u0001\u0000"+ + "\u0175\u0176\u0005\u0003\u0000\u0000\u0176\u0713\u0001\u0000\u0000\u0000"+ + "\u0177\u0178\u0005T\u0000\u0000\u0178\u0179\u0005\u0002\u0000\u0000\u0179"+ + "\u017a\u0003\u0002\u0001\u0000\u017a\u017b\u0005\u0003\u0000\u0000\u017b"+ + "\u0713\u0001\u0000\u0000\u0000\u017c\u017d\u0005U\u0000\u0000\u017d\u017e"+ + "\u0005\u0002\u0000\u0000\u017e\u017f\u0003\u0002\u0001\u0000\u017f\u0180"+ + "\u0005\u0003\u0000\u0000\u0180\u0713\u0001\u0000\u0000\u0000\u0181\u0182"+ + "\u0005V\u0000\u0000\u0182\u0183\u0005\u0002\u0000\u0000\u0183\u0184\u0003"+ + "\u0002\u0001\u0000\u0184\u0185\u0005\u0003\u0000\u0000\u0185\u0713\u0001"+ + "\u0000\u0000\u0000\u0186\u0187\u0005W\u0000\u0000\u0187\u0188\u0005\u0002"+ + "\u0000\u0000\u0188\u0189\u0003\u0002\u0001\u0000\u0189\u018a\u0005\u0003"+ + "\u0000\u0000\u018a\u0713\u0001\u0000\u0000\u0000\u018b\u018c\u0005X\u0000"+ + "\u0000\u018c\u018d\u0005\u0002\u0000\u0000\u018d\u018e\u0003\u0002\u0001"+ + "\u0000\u018e\u018f\u0005\u0003\u0000\u0000\u018f\u0713\u0001\u0000\u0000"+ + "\u0000\u0190\u0191\u0005Y\u0000\u0000\u0191\u0192\u0005\u0002\u0000\u0000"+ + "\u0192\u0193\u0003\u0002\u0001\u0000\u0193\u0194\u0005\u0003\u0000\u0000"+ + "\u0194\u0713\u0001\u0000\u0000\u0000\u0195\u0196\u0005Z\u0000\u0000\u0196"+ + "\u0197\u0005\u0002\u0000\u0000\u0197\u0198\u0003\u0002\u0001\u0000\u0198"+ + "\u0199\u0005\u0004\u0000\u0000\u0199\u019a\u0003\u0002\u0001\u0000\u019a"+ + "\u019b\u0005\u0003\u0000\u0000\u019b\u0713\u0001\u0000\u0000\u0000\u019c"+ + "\u019d\u0005[\u0000\u0000\u019d\u019e\u0005\u0002\u0000\u0000\u019e\u01a1"+ + "\u0003\u0002\u0001\u0000\u019f\u01a0\u0005\u0004\u0000\u0000\u01a0\u01a2"+ + "\u0003\u0002\u0001\u0000\u01a1\u019f\u0001\u0000\u0000\u0000\u01a1\u01a2"+ + "\u0001\u0000\u0000\u0000\u01a2\u01a3\u0001\u0000\u0000\u0000\u01a3\u01a4"+ + "\u0005\u0003\u0000\u0000\u01a4\u0713\u0001\u0000\u0000\u0000\u01a5\u01a6"+ + "\u0005\\\u0000\u0000\u01a6\u01a7\u0005\u0002\u0000\u0000\u01a7\u01a8\u0003"+ + "\u0002\u0001\u0000\u01a8\u01a9\u0005\u0004\u0000\u0000\u01a9\u01aa\u0003"+ + "\u0002\u0001\u0000\u01aa\u01ab\u0005\u0003\u0000\u0000\u01ab\u0713\u0001"+ + "\u0000\u0000\u0000\u01ac\u01ad\u0005]\u0000\u0000\u01ad\u01ae\u0005\u0002"+ + "\u0000\u0000\u01ae\u01af\u0003\u0002\u0001\u0000\u01af\u01b0\u0005\u0004"+ + "\u0000\u0000\u01b0\u01b1\u0003\u0002\u0001\u0000\u01b1\u01b2\u0005\u0003"+ + "\u0000\u0000\u01b2\u0713\u0001\u0000\u0000\u0000\u01b3\u01b4\u0005^\u0000"+ + "\u0000\u01b4\u01b5\u0005\u0002\u0000\u0000\u01b5\u01b8\u0003\u0002\u0001"+ + "\u0000\u01b6\u01b7\u0005\u0004\u0000\u0000\u01b7\u01b9\u0003\u0002\u0001"+ + "\u0000\u01b8\u01b6\u0001\u0000\u0000\u0000\u01b8\u01b9\u0001\u0000\u0000"+ + "\u0000\u01b9\u01ba\u0001\u0000\u0000\u0000\u01ba\u01bb\u0005\u0003\u0000"+ + "\u0000\u01bb\u0713\u0001\u0000\u0000\u0000\u01bc\u01bd\u0005_\u0000\u0000"+ + "\u01bd\u01be\u0005\u0002\u0000\u0000\u01be\u01c1\u0003\u0002\u0001\u0000"+ + "\u01bf\u01c0\u0005\u0004\u0000\u0000\u01c0\u01c2\u0003\u0002\u0001\u0000"+ + "\u01c1\u01bf\u0001\u0000\u0000\u0000\u01c1\u01c2\u0001\u0000\u0000\u0000"+ + "\u01c2\u01c3\u0001\u0000\u0000\u0000\u01c3\u01c4\u0005\u0003\u0000\u0000"+ + "\u01c4\u0713\u0001\u0000\u0000\u0000\u01c5\u01c6\u0005`\u0000\u0000\u01c6"+ + "\u01c7\u0005\u0002\u0000\u0000\u01c7\u01c8\u0003\u0002\u0001\u0000\u01c8"+ + "\u01c9\u0005\u0003\u0000\u0000\u01c9\u0713\u0001\u0000\u0000\u0000\u01ca"+ + "\u01cb\u0005a\u0000\u0000\u01cb\u01cc\u0005\u0002\u0000\u0000\u01cc\u01cd"+ + "\u0003\u0002\u0001\u0000\u01cd\u01ce\u0005\u0003\u0000\u0000\u01ce\u0713"+ + "\u0001\u0000\u0000\u0000\u01cf\u01d0\u0005b\u0000\u0000\u01d0\u01d1\u0005"+ + "\u0002\u0000\u0000\u01d1\u01d2\u0003\u0002\u0001\u0000\u01d2\u01d3\u0005"+ + "\u0004\u0000\u0000\u01d3\u01d4\u0003\u0002\u0001\u0000\u01d4\u01d5\u0005"+ + "\u0003\u0000\u0000\u01d5\u0713\u0001\u0000\u0000\u0000\u01d6\u01d7\u0005"+ + "c\u0000\u0000\u01d7\u01d8\u0005\u0002\u0000\u0000\u01d8\u0713\u0005\u0003"+ + "\u0000\u0000\u01d9\u01da\u0005d\u0000\u0000\u01da\u01db\u0005\u0002\u0000"+ + "\u0000\u01db\u01dc\u0003\u0002\u0001\u0000\u01dc\u01dd\u0005\u0004\u0000"+ + "\u0000\u01dd\u01de\u0003\u0002\u0001\u0000\u01de\u01df\u0005\u0003\u0000"+ + "\u0000\u01df\u0713\u0001\u0000\u0000\u0000\u01e0\u01e1\u0005e\u0000\u0000"+ + "\u01e1\u01e2\u0005\u0002\u0000\u0000\u01e2\u01e3\u0003\u0002\u0001\u0000"+ + "\u01e3\u01e4\u0005\u0003\u0000\u0000\u01e4\u0713\u0001\u0000\u0000\u0000"+ + "\u01e5\u01e6\u0005f\u0000\u0000\u01e6\u01e7\u0005\u0002\u0000\u0000\u01e7"+ + "\u01e8\u0003\u0002\u0001\u0000\u01e8\u01e9\u0005\u0003\u0000\u0000\u01e9"+ + "\u0713\u0001\u0000\u0000\u0000\u01ea\u01eb\u0005g\u0000\u0000\u01eb\u01ec"+ + "\u0005\u0002\u0000\u0000\u01ec\u01ed\u0003\u0002\u0001\u0000\u01ed\u01ee"+ + "\u0005\u0004\u0000\u0000\u01ee\u01ef\u0003\u0002\u0001\u0000\u01ef\u01f0"+ + "\u0005\u0003\u0000\u0000\u01f0\u0713\u0001\u0000\u0000\u0000\u01f1\u01f2"+ + "\u0005h\u0000\u0000\u01f2\u01f3\u0005\u0002\u0000\u0000\u01f3\u01f4\u0003"+ + "\u0002\u0001\u0000\u01f4\u01f5\u0005\u0003\u0000\u0000\u01f5\u0713\u0001"+ + "\u0000\u0000\u0000\u01f6\u01f7\u0005i\u0000\u0000\u01f7\u01f8\u0005\u0002"+ + "\u0000\u0000\u01f8\u01f9\u0003\u0002\u0001\u0000\u01f9\u01fa\u0005\u0003"+ + "\u0000\u0000\u01fa\u0713\u0001\u0000\u0000\u0000\u01fb\u01fc\u0005j\u0000"+ + "\u0000\u01fc\u01fd\u0005\u0002\u0000\u0000\u01fd\u0200\u0003\u0002\u0001"+ + "\u0000\u01fe\u01ff\u0005\u0004\u0000\u0000\u01ff\u0201\u0003\u0002\u0001"+ + "\u0000\u0200\u01fe\u0001\u0000\u0000\u0000\u0200\u0201\u0001\u0000\u0000"+ + "\u0000\u0201\u0202\u0001\u0000\u0000\u0000\u0202\u0203\u0005\u0003\u0000"+ + "\u0000\u0203\u0713\u0001\u0000\u0000\u0000\u0204\u0205\u0005k\u0000\u0000"+ + "\u0205\u0206\u0005\u0002\u0000\u0000\u0206\u0207\u0003\u0002\u0001\u0000"+ + "\u0207\u0208\u0005\u0003\u0000\u0000\u0208\u0713\u0001\u0000\u0000\u0000"+ + "\u0209\u020a\u0005l\u0000\u0000\u020a\u020b\u0005\u0002\u0000\u0000\u020b"+ + "\u0210\u0003\u0002\u0001\u0000\u020c\u020d\u0005\u0004\u0000\u0000\u020d"+ + "\u020f\u0003\u0002\u0001\u0000\u020e\u020c\u0001\u0000\u0000\u0000\u020f"+ + "\u0212\u0001\u0000\u0000\u0000\u0210\u020e\u0001\u0000\u0000\u0000\u0210"+ + "\u0211\u0001\u0000\u0000\u0000\u0211\u0213\u0001\u0000\u0000\u0000\u0212"+ + "\u0210\u0001\u0000\u0000\u0000\u0213\u0214\u0005\u0003\u0000\u0000\u0214"+ + "\u0713\u0001\u0000\u0000\u0000\u0215\u0216\u0005m\u0000\u0000\u0216\u0217"+ + "\u0005\u0002\u0000\u0000\u0217\u021c\u0003\u0002\u0001\u0000\u0218\u0219"+ + "\u0005\u0004\u0000\u0000\u0219\u021b\u0003\u0002\u0001\u0000\u021a\u0218"+ + "\u0001\u0000\u0000\u0000\u021b\u021e\u0001\u0000\u0000\u0000\u021c\u021a"+ + "\u0001\u0000\u0000\u0000\u021c\u021d\u0001\u0000\u0000\u0000\u021d\u021f"+ + "\u0001\u0000\u0000\u0000\u021e\u021c\u0001\u0000\u0000\u0000\u021f\u0220"+ + "\u0005\u0003\u0000\u0000\u0220\u0713\u0001\u0000\u0000\u0000\u0221\u0222"+ + "\u0005n\u0000\u0000\u0222\u0223\u0005\u0002\u0000\u0000\u0223\u0224\u0003"+ + "\u0002\u0001\u0000\u0224\u0225\u0005\u0003\u0000\u0000\u0225\u0713\u0001"+ + "\u0000\u0000\u0000\u0226\u0227\u0005o\u0000\u0000\u0227\u0228\u0005\u0002"+ + "\u0000\u0000\u0228\u022d\u0003\u0002\u0001\u0000\u0229\u022a\u0005\u0004"+ + "\u0000\u0000\u022a\u022c\u0003\u0002\u0001\u0000\u022b\u0229\u0001\u0000"+ + "\u0000\u0000\u022c\u022f\u0001\u0000\u0000\u0000\u022d\u022b\u0001\u0000"+ + "\u0000\u0000\u022d\u022e\u0001\u0000\u0000\u0000\u022e\u0230\u0001\u0000"+ + "\u0000\u0000\u022f\u022d\u0001\u0000\u0000\u0000\u0230\u0231\u0005\u0003"+ + "\u0000\u0000\u0231\u0713\u0001\u0000\u0000\u0000\u0232\u0233\u0005p\u0000"+ + "\u0000\u0233\u0234\u0005\u0002\u0000\u0000\u0234\u0235\u0003\u0002\u0001"+ + "\u0000\u0235\u0236\u0005\u0003\u0000\u0000\u0236\u0713\u0001\u0000\u0000"+ + "\u0000\u0237\u0238\u0005q\u0000\u0000\u0238\u0239\u0005\u0002\u0000\u0000"+ + "\u0239\u023a\u0003\u0002\u0001\u0000\u023a\u023b\u0005\u0003\u0000\u0000"+ + "\u023b\u0713\u0001\u0000\u0000\u0000\u023c\u023d\u0005r\u0000\u0000\u023d"+ + "\u023e\u0005\u0002\u0000\u0000\u023e\u023f\u0003\u0002\u0001\u0000\u023f"+ + "\u0240\u0005\u0003\u0000\u0000\u0240\u0713\u0001\u0000\u0000\u0000\u0241"+ + "\u0242\u0005s\u0000\u0000\u0242\u0243\u0005\u0002\u0000\u0000\u0243\u0244"+ + "\u0003\u0002\u0001\u0000\u0244\u0245\u0005\u0003\u0000\u0000\u0245\u0713"+ + "\u0001\u0000\u0000\u0000\u0246\u0247\u0005t\u0000\u0000\u0247\u0248\u0005"+ + "\u0002\u0000\u0000\u0248\u0249\u0003\u0002\u0001\u0000\u0249\u024a\u0005"+ + "\u0003\u0000\u0000\u024a\u0713\u0001\u0000\u0000\u0000\u024b\u024c\u0005"+ + "u\u0000\u0000\u024c\u024d\u0005\u0002\u0000\u0000\u024d\u0252\u0003\u0002"+ + "\u0001\u0000\u024e\u024f\u0005\u0004\u0000\u0000\u024f\u0251\u0003\u0002"+ + "\u0001\u0000\u0250\u024e\u0001\u0000\u0000\u0000\u0251\u0254\u0001\u0000"+ + "\u0000\u0000\u0252\u0250\u0001\u0000\u0000\u0000\u0252\u0253\u0001\u0000"+ + "\u0000\u0000\u0253\u0255\u0001\u0000\u0000\u0000\u0254\u0252\u0001\u0000"+ + "\u0000\u0000\u0255\u0256\u0005\u0003\u0000\u0000\u0256\u0713\u0001\u0000"+ + "\u0000\u0000\u0257\u0258\u0005v\u0000\u0000\u0258\u0259\u0005\u0002\u0000"+ + "\u0000\u0259\u025a\u0003\u0002\u0001\u0000\u025a\u025b\u0005\u0004\u0000"+ + "\u0000\u025b\u025c\u0003\u0002\u0001\u0000\u025c\u025d\u0005\u0003\u0000"+ + "\u0000\u025d\u0713\u0001\u0000\u0000\u0000\u025e\u025f\u0005w\u0000\u0000"+ + "\u025f\u0260\u0005\u0002\u0000\u0000\u0260\u0261\u0003\u0002\u0001\u0000"+ + "\u0261\u0262\u0005\u0004\u0000\u0000\u0262\u0265\u0003\u0002\u0001\u0000"+ + "\u0263\u0264\u0005\u0004\u0000\u0000\u0264\u0266\u0003\u0002\u0001\u0000"+ + "\u0265\u0263\u0001\u0000\u0000\u0000\u0265\u0266\u0001\u0000\u0000\u0000"+ + "\u0266\u0267\u0001\u0000\u0000\u0000\u0267\u0268\u0005\u0003\u0000\u0000"+ + "\u0268\u0713\u0001\u0000\u0000\u0000\u0269\u026a\u0005x\u0000\u0000\u026a"+ + "\u026b\u0005\u0002\u0000\u0000\u026b\u0272\u0003\u0002\u0001\u0000\u026c"+ + "\u026d\u0005\u0004\u0000\u0000\u026d\u0270\u0003\u0002\u0001\u0000\u026e"+ + "\u026f\u0005\u0004\u0000\u0000\u026f\u0271\u0003\u0002\u0001\u0000\u0270"+ + "\u026e\u0001\u0000\u0000\u0000\u0270\u0271\u0001\u0000\u0000\u0000\u0271"+ + "\u0273\u0001\u0000\u0000\u0000\u0272\u026c\u0001\u0000\u0000\u0000\u0272"+ + "\u0273\u0001\u0000\u0000\u0000\u0273\u0274\u0001\u0000\u0000\u0000\u0274"+ + "\u0275\u0005\u0003\u0000\u0000\u0275\u0713\u0001\u0000\u0000\u0000\u0276"+ + "\u0277\u0005y\u0000\u0000\u0277\u0278\u0005\u0002\u0000\u0000\u0278\u027b"+ + "\u0003\u0002\u0001\u0000\u0279\u027a\u0005\u0004\u0000\u0000\u027a\u027c"+ + "\u0003\u0002\u0001\u0000\u027b\u0279\u0001\u0000\u0000\u0000\u027b\u027c"+ + "\u0001\u0000\u0000\u0000\u027c\u027d\u0001\u0000\u0000\u0000\u027d\u027e"+ + "\u0005\u0003\u0000\u0000\u027e\u0713\u0001\u0000\u0000\u0000\u027f\u0280"+ + "\u0005z\u0000\u0000\u0280\u0281\u0005\u0002\u0000\u0000\u0281\u0282\u0003"+ + "\u0002\u0001\u0000\u0282\u0283\u0005\u0003\u0000\u0000\u0283\u0713\u0001"+ + "\u0000\u0000\u0000\u0284\u0285\u0005{\u0000\u0000\u0285\u0286\u0005\u0002"+ + "\u0000\u0000\u0286\u0287\u0003\u0002\u0001\u0000\u0287\u0288\u0005\u0003"+ + "\u0000\u0000\u0288\u0713\u0001\u0000\u0000\u0000\u0289\u028a\u0005|\u0000"+ + "\u0000\u028a\u028b\u0005\u0002\u0000\u0000\u028b\u028c\u0003\u0002\u0001"+ + "\u0000\u028c\u028d\u0005\u0004\u0000\u0000\u028d\u028e\u0003\u0002\u0001"+ + "\u0000\u028e\u028f\u0005\u0004\u0000\u0000\u028f\u0290\u0003\u0002\u0001"+ + "\u0000\u0290\u0291\u0005\u0003\u0000\u0000\u0291\u0713\u0001\u0000\u0000"+ + "\u0000\u0292\u0293\u0005}\u0000\u0000\u0293\u0294\u0005\u0002\u0000\u0000"+ + "\u0294\u0295\u0003\u0002\u0001\u0000\u0295\u0296\u0005\u0003\u0000\u0000"+ + "\u0296\u0713\u0001\u0000\u0000\u0000\u0297\u0298\u0005~\u0000\u0000\u0298"+ + "\u0299\u0005\u0002\u0000\u0000\u0299\u029a\u0003\u0002\u0001\u0000\u029a"+ + "\u029b\u0005\u0004\u0000\u0000\u029b\u029c\u0003\u0002\u0001\u0000\u029c"+ + "\u029d\u0005\u0004\u0000\u0000\u029d\u02a0\u0003\u0002\u0001\u0000\u029e"+ + "\u029f\u0005\u0004\u0000\u0000\u029f\u02a1\u0003\u0002\u0001\u0000\u02a0"+ + "\u029e\u0001\u0000\u0000\u0000\u02a0\u02a1\u0001\u0000\u0000\u0000\u02a1"+ + "\u02a2\u0001\u0000\u0000\u0000\u02a2\u02a3\u0005\u0003\u0000\u0000\u02a3"+ + "\u0713\u0001\u0000\u0000\u0000\u02a4\u02a5\u0005\u007f\u0000\u0000\u02a5"+ + "\u02a6\u0005\u0002\u0000\u0000\u02a6\u02a7\u0003\u0002\u0001\u0000\u02a7"+ + "\u02a8\u0005\u0004\u0000\u0000\u02a8\u02a9\u0003\u0002\u0001\u0000\u02a9"+ + "\u02aa\u0005\u0003\u0000\u0000\u02aa\u0713\u0001\u0000\u0000\u0000\u02ab"+ + "\u02ac\u0005\u0080\u0000\u0000\u02ac\u02ad\u0005\u0002\u0000\u0000\u02ad"+ + "\u02b0\u0003\u0002\u0001\u0000\u02ae\u02af\u0005\u0004\u0000\u0000\u02af"+ + "\u02b1\u0003\u0002\u0001\u0000\u02b0\u02ae\u0001\u0000\u0000\u0000\u02b0"+ + "\u02b1\u0001\u0000\u0000\u0000\u02b1\u02b2\u0001\u0000\u0000\u0000\u02b2"+ + "\u02b3\u0005\u0003\u0000\u0000\u02b3\u0713\u0001\u0000\u0000\u0000\u02b4"+ + "\u02b5\u0005\u0081\u0000\u0000\u02b5\u02b6\u0005\u0002\u0000\u0000\u02b6"+ + "\u02b7\u0003\u0002\u0001\u0000\u02b7\u02b8\u0005\u0003\u0000\u0000\u02b8"+ + "\u0713\u0001\u0000\u0000\u0000\u02b9\u02ba\u0005\u0082\u0000\u0000\u02ba"+ + "\u02bb\u0005\u0002\u0000\u0000\u02bb\u02bc\u0003\u0002\u0001\u0000\u02bc"+ + "\u02bd\u0005\u0004\u0000\u0000\u02bd\u02c0\u0003\u0002\u0001\u0000\u02be"+ + "\u02bf\u0005\u0004\u0000\u0000\u02bf\u02c1\u0003\u0002\u0001\u0000\u02c0"+ + "\u02be\u0001\u0000\u0000\u0000\u02c0\u02c1\u0001\u0000\u0000\u0000\u02c1"+ + "\u02c2\u0001\u0000\u0000\u0000\u02c2\u02c3\u0005\u0003\u0000\u0000\u02c3"+ + "\u0713\u0001\u0000\u0000\u0000\u02c4\u02c5\u0005\u0083\u0000\u0000\u02c5"+ + "\u02c6\u0005\u0002\u0000\u0000\u02c6\u02c7\u0003\u0002\u0001\u0000\u02c7"+ + "\u02c8\u0005\u0004\u0000\u0000\u02c8\u02c9\u0003\u0002\u0001\u0000\u02c9"+ + "\u02ca\u0005\u0004\u0000\u0000\u02ca\u02cd\u0003\u0002\u0001\u0000\u02cb"+ + "\u02cc\u0005\u0004\u0000\u0000\u02cc\u02ce\u0003\u0002\u0001\u0000\u02cd"+ + "\u02cb\u0001\u0000\u0000\u0000\u02cd\u02ce\u0001\u0000\u0000\u0000\u02ce"+ + "\u02cf\u0001\u0000\u0000\u0000\u02cf\u02d0\u0005\u0003\u0000\u0000\u02d0"+ + "\u0713\u0001\u0000\u0000\u0000\u02d1\u02d2\u0005\u0084\u0000\u0000\u02d2"+ + "\u02d3\u0005\u0002\u0000\u0000\u02d3\u02d4\u0003\u0002\u0001\u0000\u02d4"+ + "\u02d5\u0005\u0003\u0000\u0000\u02d5\u0713\u0001\u0000\u0000\u0000\u02d6"+ + "\u02d7\u0005\u0085\u0000\u0000\u02d7\u02d8\u0005\u0002\u0000\u0000\u02d8"+ + "\u02d9\u0003\u0002\u0001\u0000\u02d9\u02da\u0005\u0004\u0000\u0000\u02da"+ + "\u02db\u0003\u0002\u0001\u0000\u02db\u02dc\u0005\u0003\u0000\u0000\u02dc"+ + "\u0713\u0001\u0000\u0000\u0000\u02dd\u02de\u0005\u0086\u0000\u0000\u02de"+ + "\u02df\u0005\u0002\u0000\u0000\u02df\u02e0\u0003\u0002\u0001\u0000\u02e0"+ + "\u02e1\u0005\u0003\u0000\u0000\u02e1\u0713\u0001\u0000\u0000\u0000\u02e2"+ + "\u02e3\u0005\u0087\u0000\u0000\u02e3\u02e4\u0005\u0002\u0000\u0000\u02e4"+ + "\u02e5\u0003\u0002\u0001\u0000\u02e5\u02e6\u0005\u0003\u0000\u0000\u02e6"+ + "\u0713\u0001\u0000\u0000\u0000\u02e7\u02e8\u0005\u0088\u0000\u0000\u02e8"+ + "\u02e9\u0005\u0002\u0000\u0000\u02e9\u02ea\u0003\u0002\u0001\u0000\u02ea"+ + "\u02eb\u0005\u0003\u0000\u0000\u02eb\u0713\u0001\u0000\u0000\u0000\u02ec"+ + "\u02ed\u0005\u0089\u0000\u0000\u02ed\u02ee\u0005\u0002\u0000\u0000\u02ee"+ + "\u02f1\u0003\u0002\u0001\u0000\u02ef\u02f0\u0005\u0004\u0000\u0000\u02f0"+ + "\u02f2\u0003\u0002\u0001\u0000\u02f1\u02ef\u0001\u0000\u0000\u0000\u02f1"+ + "\u02f2\u0001\u0000\u0000\u0000\u02f2\u02f3\u0001\u0000\u0000\u0000\u02f3"+ + "\u02f4\u0005\u0003\u0000\u0000\u02f4\u0713\u0001\u0000\u0000\u0000\u02f5"+ + "\u02f6\u0005\u008a\u0000\u0000\u02f6\u02f7\u0005\u0002\u0000\u0000\u02f7"+ + "\u02f8\u0003\u0002\u0001\u0000\u02f8\u02f9\u0005\u0003\u0000\u0000\u02f9"+ + "\u0713\u0001\u0000\u0000\u0000\u02fa\u02fb\u0005\u008b\u0000\u0000\u02fb"+ + "\u02fc\u0005\u0002\u0000\u0000\u02fc\u02fd\u0003\u0002\u0001\u0000\u02fd"+ + "\u02fe\u0005\u0004\u0000\u0000\u02fe\u02ff\u0003\u0002\u0001\u0000\u02ff"+ + "\u0300\u0005\u0004\u0000\u0000\u0300\u030b\u0003\u0002\u0001\u0000\u0301"+ + "\u0302\u0005\u0004\u0000\u0000\u0302\u0309\u0003\u0002\u0001\u0000\u0303"+ + "\u0304\u0005\u0004\u0000\u0000\u0304\u0307\u0003\u0002\u0001\u0000\u0305"+ + "\u0306\u0005\u0004\u0000\u0000\u0306\u0308\u0003\u0002\u0001\u0000\u0307"+ + "\u0305\u0001\u0000\u0000\u0000\u0307\u0308\u0001\u0000\u0000\u0000\u0308"+ + "\u030a\u0001\u0000\u0000\u0000\u0309\u0303\u0001\u0000\u0000\u0000\u0309"+ + "\u030a\u0001\u0000\u0000\u0000\u030a\u030c\u0001\u0000\u0000\u0000\u030b"+ + "\u0301\u0001\u0000\u0000\u0000\u030b\u030c\u0001\u0000\u0000\u0000\u030c"+ + "\u030d\u0001\u0000\u0000\u0000\u030d\u030e\u0005\u0003\u0000\u0000\u030e"+ + "\u0713\u0001\u0000\u0000\u0000\u030f\u0310\u0005\u008c\u0000\u0000\u0310"+ + "\u0311\u0005\u0002\u0000\u0000\u0311\u0312\u0003\u0002\u0001\u0000\u0312"+ + "\u0313\u0005\u0004\u0000\u0000\u0313\u0316\u0003\u0002\u0001\u0000\u0314"+ + "\u0315\u0005\u0004\u0000\u0000\u0315\u0317\u0003\u0002\u0001\u0000\u0316"+ + "\u0314\u0001\u0000\u0000\u0000\u0316\u0317\u0001\u0000\u0000\u0000\u0317"+ + "\u0318\u0001\u0000\u0000\u0000\u0318\u0319\u0005\u0003\u0000\u0000\u0319"+ + "\u0713\u0001\u0000\u0000\u0000\u031a\u031b\u0005\u008d\u0000\u0000\u031b"+ + "\u031c\u0005\u0002\u0000\u0000\u031c\u0713\u0005\u0003\u0000\u0000\u031d"+ + "\u031e\u0005\u008e\u0000\u0000\u031e\u031f\u0005\u0002\u0000\u0000\u031f"+ + "\u0713\u0005\u0003\u0000\u0000\u0320\u0321\u0005\u008f\u0000\u0000\u0321"+ + "\u0322\u0005\u0002\u0000\u0000\u0322\u0323\u0003\u0002\u0001\u0000\u0323"+ + "\u0324\u0005\u0003\u0000\u0000\u0324\u0713\u0001\u0000\u0000\u0000\u0325"+ + "\u0326\u0005\u0090\u0000\u0000\u0326\u0327\u0005\u0002\u0000\u0000\u0327"+ + "\u0328\u0003\u0002\u0001\u0000\u0328\u0329\u0005\u0003\u0000\u0000\u0329"+ + "\u0713\u0001\u0000\u0000\u0000\u032a\u032b\u0005\u0091\u0000\u0000\u032b"+ + "\u032c\u0005\u0002\u0000\u0000\u032c\u032d\u0003\u0002\u0001\u0000\u032d"+ + "\u032e\u0005\u0003\u0000\u0000\u032e\u0713\u0001\u0000\u0000\u0000\u032f"+ + "\u0330\u0005\u0092\u0000\u0000\u0330\u0331\u0005\u0002\u0000\u0000\u0331"+ + "\u0332\u0003\u0002\u0001\u0000\u0332\u0333\u0005\u0003\u0000\u0000\u0333"+ + "\u0713\u0001\u0000\u0000\u0000\u0334\u0335\u0005\u0093\u0000\u0000\u0335"+ + "\u0336\u0005\u0002\u0000\u0000\u0336\u0337\u0003\u0002\u0001\u0000\u0337"+ + "\u0338\u0005\u0003\u0000\u0000\u0338\u0713\u0001\u0000\u0000\u0000\u0339"+ + "\u033a\u0005\u0094\u0000\u0000\u033a\u033b\u0005\u0002\u0000\u0000\u033b"+ + "\u033c\u0003\u0002\u0001\u0000\u033c\u033d\u0005\u0003\u0000\u0000\u033d"+ + "\u0713\u0001\u0000\u0000\u0000\u033e\u033f\u0005\u0095\u0000\u0000\u033f"+ + "\u0340\u0005\u0002\u0000\u0000\u0340\u0343\u0003\u0002\u0001\u0000\u0341"+ + "\u0342\u0005\u0004\u0000\u0000\u0342\u0344\u0003\u0002\u0001\u0000\u0343"+ + "\u0341\u0001\u0000\u0000\u0000\u0343\u0344\u0001\u0000\u0000\u0000\u0344"+ + "\u0345\u0001\u0000\u0000\u0000\u0345\u0346\u0005\u0003\u0000\u0000\u0346"+ + "\u0713\u0001\u0000\u0000\u0000\u0347\u0348\u0005\u0096\u0000\u0000\u0348"+ + "\u0349\u0005\u0002\u0000\u0000\u0349\u034a\u0003\u0002\u0001\u0000\u034a"+ + "\u034b\u0005\u0004\u0000\u0000\u034b\u034c\u0003\u0002\u0001\u0000\u034c"+ + "\u034d\u0005\u0004\u0000\u0000\u034d\u034e\u0003\u0002\u0001\u0000\u034e"+ + "\u034f\u0005\u0003\u0000\u0000\u034f\u0713\u0001\u0000\u0000\u0000\u0350"+ + "\u0351\u0005\u0097\u0000\u0000\u0351\u0352\u0005\u0002\u0000\u0000\u0352"+ + "\u0353\u0003\u0002\u0001\u0000\u0353\u0354\u0005\u0004\u0000\u0000\u0354"+ + "\u0357\u0003\u0002\u0001\u0000\u0355\u0356\u0005\u0004\u0000\u0000\u0356"+ + "\u0358\u0003\u0002\u0001\u0000\u0357\u0355\u0001\u0000\u0000\u0000\u0357"+ + "\u0358\u0001\u0000\u0000\u0000\u0358\u0359\u0001\u0000\u0000\u0000\u0359"+ + "\u035a\u0005\u0003\u0000\u0000\u035a\u0713\u0001\u0000\u0000\u0000\u035b"+ + "\u035c\u0005\u0098\u0000\u0000\u035c\u035d\u0005\u0002\u0000\u0000\u035d"+ + "\u035e\u0003\u0002\u0001\u0000\u035e\u035f\u0005\u0004\u0000\u0000\u035f"+ + "\u0360\u0003\u0002\u0001\u0000\u0360\u0361\u0005\u0003\u0000\u0000\u0361"+ + "\u0713\u0001\u0000\u0000\u0000\u0362\u0363\u0005\u0099\u0000\u0000\u0363"+ + "\u0364\u0005\u0002\u0000\u0000\u0364\u0365\u0003\u0002\u0001\u0000\u0365"+ + "\u0366\u0005\u0004\u0000\u0000\u0366\u0367\u0003\u0002\u0001\u0000\u0367"+ + "\u0368\u0005\u0003\u0000\u0000\u0368\u0713\u0001\u0000\u0000\u0000\u0369"+ + "\u036a\u0005\u009a\u0000\u0000\u036a\u036b\u0005\u0002\u0000\u0000\u036b"+ + "\u036c\u0003\u0002\u0001\u0000\u036c\u036d\u0005\u0004\u0000\u0000\u036d"+ + "\u0370\u0003\u0002\u0001\u0000\u036e\u036f\u0005\u0004\u0000\u0000\u036f"+ + "\u0371\u0003\u0002\u0001\u0000\u0370\u036e\u0001\u0000\u0000\u0000\u0370"+ + "\u0371\u0001\u0000\u0000\u0000\u0371\u0372\u0001\u0000\u0000\u0000\u0372"+ + "\u0373\u0005\u0003\u0000\u0000\u0373\u0713\u0001\u0000\u0000\u0000\u0374"+ + "\u0375\u0005\u009b\u0000\u0000\u0375\u0376\u0005\u0002\u0000\u0000\u0376"+ + "\u0377\u0003\u0002\u0001\u0000\u0377\u0378\u0005\u0004\u0000\u0000\u0378"+ + "\u037b\u0003\u0002\u0001\u0000\u0379\u037a\u0005\u0004\u0000\u0000\u037a"+ + "\u037c\u0003\u0002\u0001\u0000\u037b\u0379\u0001\u0000\u0000\u0000\u037b"+ + "\u037c\u0001\u0000\u0000\u0000\u037c\u037d\u0001\u0000\u0000\u0000\u037d"+ + "\u037e\u0005\u0003\u0000\u0000\u037e\u0713\u0001\u0000\u0000\u0000\u037f"+ + "\u0380\u0005\u009c\u0000\u0000\u0380\u0381\u0005\u0002\u0000\u0000\u0381"+ + "\u0384\u0003\u0002\u0001\u0000\u0382\u0383\u0005\u0004\u0000\u0000\u0383"+ + "\u0385\u0003\u0002\u0001\u0000\u0384\u0382\u0001\u0000\u0000\u0000\u0384"+ + "\u0385\u0001\u0000\u0000\u0000\u0385\u0386\u0001\u0000\u0000\u0000\u0386"+ + "\u0387\u0005\u0003\u0000\u0000\u0387\u0713\u0001\u0000\u0000\u0000\u0388"+ + "\u0389\u0005\u009d\u0000\u0000\u0389\u038a\u0005\u0002\u0000\u0000\u038a"+ + "\u038d\u0003\u0002\u0001\u0000\u038b\u038c\u0005\u0004\u0000\u0000\u038c"+ + "\u038e\u0003\u0002\u0001\u0000\u038d\u038b\u0001\u0000\u0000\u0000\u038e"+ + "\u038f\u0001\u0000\u0000\u0000\u038f\u038d\u0001\u0000\u0000\u0000\u038f"+ + "\u0390\u0001\u0000\u0000\u0000\u0390\u0391\u0001\u0000\u0000\u0000\u0391"+ + "\u0392\u0005\u0003\u0000\u0000\u0392\u0713\u0001\u0000\u0000\u0000\u0393"+ + "\u0394\u0005\u009e\u0000\u0000\u0394\u0395\u0005\u0002\u0000\u0000\u0395"+ + "\u0398\u0003\u0002\u0001\u0000\u0396\u0397\u0005\u0004\u0000\u0000\u0397"+ + "\u0399\u0003\u0002\u0001\u0000\u0398\u0396\u0001\u0000\u0000\u0000\u0399"+ + "\u039a\u0001\u0000\u0000\u0000\u039a\u0398\u0001\u0000\u0000\u0000\u039a"+ + "\u039b\u0001\u0000\u0000\u0000\u039b\u039c\u0001\u0000\u0000\u0000\u039c"+ + "\u039d\u0005\u0003\u0000\u0000\u039d\u0713\u0001\u0000\u0000\u0000\u039e"+ + "\u039f\u0005\u009f\u0000\u0000\u039f\u03a0\u0005\u0002\u0000\u0000\u03a0"+ + "\u03a3\u0003\u0002\u0001\u0000\u03a1\u03a2\u0005\u0004\u0000\u0000\u03a2"+ + "\u03a4\u0003\u0002\u0001\u0000\u03a3\u03a1\u0001\u0000\u0000\u0000\u03a4"+ + "\u03a5\u0001\u0000\u0000\u0000\u03a5\u03a3\u0001\u0000\u0000\u0000\u03a5"+ + "\u03a6\u0001\u0000\u0000\u0000\u03a6\u03a7\u0001\u0000\u0000\u0000\u03a7"+ + "\u03a8\u0005\u0003\u0000\u0000\u03a8\u0713\u0001\u0000\u0000\u0000\u03a9"+ + "\u03aa\u0005\u00a0\u0000\u0000\u03aa\u03ab\u0005\u0002\u0000\u0000\u03ab"+ + "\u03ac\u0003\u0002\u0001\u0000\u03ac\u03ad\u0005\u0004\u0000\u0000\u03ad"+ + "\u03ae\u0003\u0002\u0001\u0000\u03ae\u03af\u0005\u0003\u0000\u0000\u03af"+ + "\u0713\u0001\u0000\u0000\u0000\u03b0\u03b1\u0005\u00a1\u0000\u0000\u03b1"+ + "\u03b2\u0005\u0002\u0000\u0000\u03b2\u03b7\u0003\u0002\u0001\u0000\u03b3"+ + "\u03b4\u0005\u0004\u0000\u0000\u03b4\u03b6\u0003\u0002\u0001\u0000\u03b5"+ + "\u03b3\u0001\u0000\u0000\u0000\u03b6\u03b9\u0001\u0000\u0000\u0000\u03b7"+ + "\u03b5\u0001\u0000\u0000\u0000\u03b7\u03b8\u0001\u0000\u0000\u0000\u03b8"+ + "\u03ba\u0001\u0000\u0000\u0000\u03b9\u03b7\u0001\u0000\u0000\u0000\u03ba"+ + "\u03bb\u0005\u0003\u0000\u0000\u03bb\u0713\u0001\u0000\u0000\u0000\u03bc"+ + "\u03bd\u0005\u00a2\u0000\u0000\u03bd\u03be\u0005\u0002\u0000\u0000\u03be"+ + "\u03bf\u0003\u0002\u0001\u0000\u03bf\u03c0\u0005\u0004\u0000\u0000\u03c0"+ + "\u03c1\u0003\u0002\u0001\u0000\u03c1\u03c2\u0005\u0003\u0000\u0000\u03c2"+ + "\u0713\u0001\u0000\u0000\u0000\u03c3\u03c4\u0005\u00a3\u0000\u0000\u03c4"+ + "\u03c5\u0005\u0002\u0000\u0000\u03c5\u03c6\u0003\u0002\u0001\u0000\u03c6"+ + "\u03c7\u0005\u0004\u0000\u0000\u03c7\u03c8\u0003\u0002\u0001\u0000\u03c8"+ + "\u03c9\u0005\u0003\u0000\u0000\u03c9\u0713\u0001\u0000\u0000\u0000\u03ca"+ + "\u03cb\u0005\u00a4\u0000\u0000\u03cb\u03cc\u0005\u0002\u0000\u0000\u03cc"+ + "\u03cd\u0003\u0002\u0001\u0000\u03cd\u03ce\u0005\u0004\u0000\u0000\u03ce"+ + "\u03cf\u0003\u0002\u0001\u0000\u03cf\u03d0\u0005\u0003\u0000\u0000\u03d0"+ + "\u0713\u0001\u0000\u0000\u0000\u03d1\u03d2\u0005\u00a5\u0000\u0000\u03d2"+ + "\u03d3\u0005\u0002\u0000\u0000\u03d3\u03d4\u0003\u0002\u0001\u0000\u03d4"+ + "\u03d5\u0005\u0004\u0000\u0000\u03d5\u03d6\u0003\u0002\u0001\u0000\u03d6"+ + "\u03d7\u0005\u0003\u0000\u0000\u03d7\u0713\u0001\u0000\u0000\u0000\u03d8"+ + "\u03d9\u0005\u00a6\u0000\u0000\u03d9\u03da\u0005\u0002\u0000\u0000\u03da"+ + "\u03df\u0003\u0002\u0001\u0000\u03db\u03dc\u0005\u0004\u0000\u0000\u03dc"+ + "\u03de\u0003\u0002\u0001\u0000\u03dd\u03db\u0001\u0000\u0000\u0000\u03de"+ + "\u03e1\u0001\u0000\u0000\u0000\u03df\u03dd\u0001\u0000\u0000\u0000\u03df"+ + "\u03e0\u0001\u0000\u0000\u0000\u03e0\u03e2\u0001\u0000\u0000\u0000\u03e1"+ + "\u03df\u0001\u0000\u0000\u0000\u03e2\u03e3\u0005\u0003\u0000\u0000\u03e3"+ + "\u0713\u0001\u0000\u0000\u0000\u03e4\u03e5\u0005\u00a7\u0000\u0000\u03e5"+ + "\u03e6\u0005\u0002\u0000\u0000\u03e6\u03e7\u0003\u0002\u0001\u0000\u03e7"+ + "\u03e8\u0005\u0004\u0000\u0000\u03e8\u03eb\u0003\u0002\u0001\u0000\u03e9"+ + "\u03ea\u0005\u0004\u0000\u0000\u03ea\u03ec\u0003\u0002\u0001\u0000\u03eb"+ + "\u03e9\u0001\u0000\u0000\u0000\u03eb\u03ec\u0001\u0000\u0000\u0000\u03ec"+ + "\u03ed\u0001\u0000\u0000\u0000\u03ed\u03ee\u0005\u0003\u0000\u0000\u03ee"+ + "\u0713\u0001\u0000\u0000\u0000\u03ef\u03f0\u0005\u00a8\u0000\u0000\u03f0"+ + "\u03f1\u0005\u0002\u0000\u0000\u03f1\u03f6\u0003\u0002\u0001\u0000\u03f2"+ + "\u03f3\u0005\u0004\u0000\u0000\u03f3\u03f5\u0003\u0002\u0001\u0000\u03f4"+ + "\u03f2\u0001\u0000\u0000\u0000\u03f5\u03f8\u0001\u0000\u0000\u0000\u03f6"+ + "\u03f4\u0001\u0000\u0000\u0000\u03f6\u03f7\u0001\u0000\u0000\u0000\u03f7"+ + "\u03f9\u0001\u0000\u0000\u0000\u03f8\u03f6\u0001\u0000\u0000\u0000\u03f9"+ + "\u03fa\u0005\u0003\u0000\u0000\u03fa\u0713\u0001\u0000\u0000\u0000\u03fb"+ + "\u03fc\u0005\u00a9\u0000\u0000\u03fc\u03fd\u0005\u0002\u0000\u0000\u03fd"+ + "\u0402\u0003\u0002\u0001\u0000\u03fe\u03ff\u0005\u0004\u0000\u0000\u03ff"+ + "\u0401\u0003\u0002\u0001\u0000\u0400\u03fe\u0001\u0000\u0000\u0000\u0401"+ + "\u0404\u0001\u0000\u0000\u0000\u0402\u0400\u0001\u0000\u0000\u0000\u0402"+ + "\u0403\u0001\u0000\u0000\u0000\u0403\u0405\u0001\u0000\u0000\u0000\u0404"+ + "\u0402\u0001\u0000\u0000\u0000\u0405\u0406\u0005\u0003\u0000\u0000\u0406"+ + "\u0713\u0001\u0000\u0000\u0000\u0407\u0408\u0005\u00aa\u0000\u0000\u0408"+ + "\u0409\u0005\u0002\u0000\u0000\u0409\u040e\u0003\u0002\u0001\u0000\u040a"+ + "\u040b\u0005\u0004\u0000\u0000\u040b\u040d\u0003\u0002\u0001\u0000\u040c"+ + "\u040a\u0001\u0000\u0000\u0000\u040d\u0410\u0001\u0000\u0000\u0000\u040e"+ + "\u040c\u0001\u0000\u0000\u0000\u040e\u040f\u0001\u0000\u0000\u0000\u040f"+ + "\u0411\u0001\u0000\u0000\u0000\u0410\u040e\u0001\u0000\u0000\u0000\u0411"+ + "\u0412\u0005\u0003\u0000\u0000\u0412\u0713\u0001\u0000\u0000\u0000\u0413"+ + "\u0414\u0005\u00ab\u0000\u0000\u0414\u0415\u0005\u0002\u0000\u0000\u0415"+ + "\u041a\u0003\u0002\u0001\u0000\u0416\u0417\u0005\u0004\u0000\u0000\u0417"+ + "\u0419\u0003\u0002\u0001\u0000\u0418\u0416\u0001\u0000\u0000\u0000\u0419"+ + "\u041c\u0001\u0000\u0000\u0000\u041a\u0418\u0001\u0000\u0000\u0000\u041a"+ + "\u041b\u0001\u0000\u0000\u0000\u041b\u041d\u0001\u0000\u0000\u0000\u041c"+ + "\u041a\u0001\u0000\u0000\u0000\u041d\u041e\u0005\u0003\u0000\u0000\u041e"+ + "\u0713\u0001\u0000\u0000\u0000\u041f\u0420\u0005\u00ac\u0000\u0000\u0420"+ + "\u0421\u0005\u0002\u0000\u0000\u0421\u0426\u0003\u0002\u0001\u0000\u0422"+ + "\u0423\u0005\u0004\u0000\u0000\u0423\u0425\u0003\u0002\u0001\u0000\u0424"+ + "\u0422\u0001\u0000\u0000\u0000\u0425\u0428\u0001\u0000\u0000\u0000\u0426"+ + "\u0424\u0001\u0000\u0000\u0000\u0426\u0427\u0001\u0000\u0000\u0000\u0427"+ + "\u0429\u0001\u0000\u0000\u0000\u0428\u0426\u0001\u0000\u0000\u0000\u0429"+ + "\u042a\u0005\u0003\u0000\u0000\u042a\u0713\u0001\u0000\u0000\u0000\u042b"+ + "\u042c\u0005\u00ad\u0000\u0000\u042c\u042d\u0005\u0002\u0000\u0000\u042d"+ + "\u042e\u0003\u0002\u0001\u0000\u042e\u042f\u0005\u0004\u0000\u0000\u042f"+ + "\u0432\u0003\u0002\u0001\u0000\u0430\u0431\u0005\u0004\u0000\u0000\u0431"+ + "\u0433\u0003\u0002\u0001\u0000\u0432\u0430\u0001\u0000\u0000\u0000\u0432"+ + "\u0433\u0001\u0000\u0000\u0000\u0433\u0434\u0001\u0000\u0000\u0000\u0434"+ + "\u0435\u0005\u0003\u0000\u0000\u0435\u0713\u0001\u0000\u0000\u0000\u0436"+ + "\u0437\u0005\u00ae\u0000\u0000\u0437\u0438\u0005\u0002\u0000\u0000\u0438"+ + "\u043d\u0003\u0002\u0001\u0000\u0439\u043a\u0005\u0004\u0000\u0000\u043a"+ + "\u043c\u0003\u0002\u0001\u0000\u043b\u0439\u0001\u0000\u0000\u0000\u043c"+ + "\u043f\u0001\u0000\u0000\u0000\u043d\u043b\u0001\u0000\u0000\u0000\u043d"+ + "\u043e\u0001\u0000\u0000\u0000\u043e\u0440\u0001\u0000\u0000\u0000\u043f"+ + "\u043d\u0001\u0000\u0000\u0000\u0440\u0441\u0005\u0003\u0000\u0000\u0441"+ + "\u0713\u0001\u0000\u0000\u0000\u0442\u0443\u0005\u00af\u0000\u0000\u0443"+ + "\u0444\u0005\u0002\u0000\u0000\u0444\u0449\u0003\u0002\u0001\u0000\u0445"+ + "\u0446\u0005\u0004\u0000\u0000\u0446\u0448\u0003\u0002\u0001\u0000\u0447"+ + "\u0445\u0001\u0000\u0000\u0000\u0448\u044b\u0001\u0000\u0000\u0000\u0449"+ + "\u0447\u0001\u0000\u0000\u0000\u0449\u044a\u0001\u0000\u0000\u0000\u044a"+ + "\u044c\u0001\u0000\u0000\u0000\u044b\u0449\u0001\u0000\u0000\u0000\u044c"+ + "\u044d\u0005\u0003\u0000\u0000\u044d\u0713\u0001\u0000\u0000\u0000\u044e"+ + "\u044f\u0005\u00b0\u0000\u0000\u044f\u0450\u0005\u0002\u0000\u0000\u0450"+ + "\u0455\u0003\u0002\u0001\u0000\u0451\u0452\u0005\u0004\u0000\u0000\u0452"+ + "\u0454\u0003\u0002\u0001\u0000\u0453\u0451\u0001\u0000\u0000\u0000\u0454"+ + "\u0457\u0001\u0000\u0000\u0000\u0455\u0453\u0001\u0000\u0000\u0000\u0455"+ + "\u0456\u0001\u0000\u0000\u0000\u0456\u0458\u0001\u0000\u0000\u0000\u0457"+ + "\u0455\u0001\u0000\u0000\u0000\u0458\u0459\u0005\u0003\u0000\u0000\u0459"+ + "\u0713\u0001\u0000\u0000\u0000\u045a\u045b\u0005\u00b1\u0000\u0000\u045b"+ + "\u045c\u0005\u0002\u0000\u0000\u045c\u045d\u0003\u0002\u0001\u0000\u045d"+ + "\u045e\u0005\u0004\u0000\u0000\u045e\u045f\u0003\u0002\u0001\u0000\u045f"+ + "\u0460\u0005\u0003\u0000\u0000\u0460\u0713\u0001\u0000\u0000\u0000\u0461"+ + "\u0462\u0005\u00b2\u0000\u0000\u0462\u0463\u0005\u0002\u0000\u0000\u0463"+ + "\u0464\u0003\u0002\u0001\u0000\u0464\u0465\u0005\u0004\u0000\u0000\u0465"+ + "\u0466\u0003\u0002\u0001\u0000\u0466\u0467\u0005\u0003\u0000\u0000\u0467"+ + "\u0713\u0001\u0000\u0000\u0000\u0468\u0469\u0005\u00b3\u0000\u0000\u0469"+ + "\u046a\u0005\u0002\u0000\u0000\u046a\u046f\u0003\u0002\u0001\u0000\u046b"+ + "\u046c\u0005\u0004\u0000\u0000\u046c\u046e\u0003\u0002\u0001\u0000\u046d"+ + "\u046b\u0001\u0000\u0000\u0000\u046e\u0471\u0001\u0000\u0000\u0000\u046f"+ + "\u046d\u0001\u0000\u0000\u0000\u046f\u0470\u0001\u0000\u0000\u0000\u0470"+ + "\u0472\u0001\u0000\u0000\u0000\u0471\u046f\u0001\u0000\u0000\u0000\u0472"+ + "\u0473\u0005\u0003\u0000\u0000\u0473\u0713\u0001\u0000\u0000\u0000\u0474"+ + "\u0475\u0005\u00b4\u0000\u0000\u0475\u0476\u0005\u0002\u0000\u0000\u0476"+ + "\u047b\u0003\u0002\u0001\u0000\u0477\u0478\u0005\u0004\u0000\u0000\u0478"+ + "\u047a\u0003\u0002\u0001\u0000\u0479\u0477\u0001\u0000\u0000\u0000\u047a"+ + "\u047d\u0001\u0000\u0000\u0000\u047b\u0479\u0001\u0000\u0000\u0000\u047b"+ + "\u047c\u0001\u0000\u0000\u0000\u047c\u047e\u0001\u0000\u0000\u0000\u047d"+ + "\u047b\u0001\u0000\u0000\u0000\u047e\u047f\u0005\u0003\u0000\u0000\u047f"+ + "\u0713\u0001\u0000\u0000\u0000\u0480\u0481\u0005\u00b5\u0000\u0000\u0481"+ + "\u0482\u0005\u0002\u0000\u0000\u0482\u0487\u0003\u0002\u0001\u0000\u0483"+ + "\u0484\u0005\u0004\u0000\u0000\u0484\u0486\u0003\u0002\u0001\u0000\u0485"+ + "\u0483\u0001\u0000\u0000\u0000\u0486\u0489\u0001\u0000\u0000\u0000\u0487"+ + "\u0485\u0001\u0000\u0000\u0000\u0487\u0488\u0001\u0000\u0000\u0000\u0488"+ + "\u048a\u0001\u0000\u0000\u0000\u0489\u0487\u0001\u0000\u0000\u0000\u048a"+ + "\u048b\u0005\u0003\u0000\u0000\u048b\u0713\u0001\u0000\u0000\u0000\u048c"+ + "\u048d\u0005\u00b6\u0000\u0000\u048d\u048e\u0005\u0002\u0000\u0000\u048e"+ + "\u048f\u0003\u0002\u0001\u0000\u048f\u0490\u0005\u0004\u0000\u0000\u0490"+ + "\u0491\u0003\u0002\u0001\u0000\u0491\u0492\u0005\u0004\u0000\u0000\u0492"+ + "\u0493\u0003\u0002\u0001\u0000\u0493\u0494\u0005\u0004\u0000\u0000\u0494"+ + "\u0495\u0003\u0002\u0001\u0000\u0495\u0496\u0005\u0003\u0000\u0000\u0496"+ + "\u0713\u0001\u0000\u0000\u0000\u0497\u0498\u0005\u00b7\u0000\u0000\u0498"+ + "\u0499\u0005\u0002\u0000\u0000\u0499\u049a\u0003\u0002\u0001\u0000\u049a"+ + "\u049b\u0005\u0004\u0000\u0000\u049b\u049c\u0003\u0002\u0001\u0000\u049c"+ + "\u049d\u0005\u0004\u0000\u0000\u049d\u049e\u0003\u0002\u0001\u0000\u049e"+ + "\u049f\u0005\u0003\u0000\u0000\u049f\u0713\u0001\u0000\u0000\u0000\u04a0"+ + "\u04a1\u0005\u00b8\u0000\u0000\u04a1\u04a2\u0005\u0002\u0000\u0000\u04a2"+ + "\u04a3\u0003\u0002\u0001\u0000\u04a3\u04a4\u0005\u0003\u0000\u0000\u04a4"+ + "\u0713\u0001\u0000\u0000\u0000\u04a5\u04a6\u0005\u00b9\u0000\u0000\u04a6"+ + "\u04a7\u0005\u0002\u0000\u0000\u04a7\u04a8\u0003\u0002\u0001\u0000\u04a8"+ + "\u04a9\u0005\u0003\u0000\u0000\u04a9\u0713\u0001\u0000\u0000\u0000\u04aa"+ + "\u04ab\u0005\u00ba\u0000\u0000\u04ab\u04ac\u0005\u0002\u0000\u0000\u04ac"+ + "\u04ad\u0003\u0002\u0001\u0000\u04ad\u04ae\u0005\u0004\u0000\u0000\u04ae"+ + "\u04af\u0003\u0002\u0001\u0000\u04af\u04b0\u0005\u0004\u0000\u0000\u04b0"+ + "\u04b1\u0003\u0002\u0001\u0000\u04b1\u04b2\u0005\u0003\u0000\u0000\u04b2"+ + "\u0713\u0001\u0000\u0000\u0000\u04b3\u04b4\u0005\u00bb\u0000\u0000\u04b4"+ + "\u04b5\u0005\u0002\u0000\u0000\u04b5\u04b6\u0003\u0002\u0001\u0000\u04b6"+ + "\u04b7\u0005\u0004\u0000\u0000\u04b7\u04b8\u0003\u0002\u0001\u0000\u04b8"+ + "\u04b9\u0005\u0004\u0000\u0000\u04b9\u04ba\u0003\u0002\u0001\u0000\u04ba"+ + "\u04bb\u0005\u0003\u0000\u0000\u04bb\u0713\u0001\u0000\u0000\u0000\u04bc"+ + "\u04bd\u0005\u00bc\u0000\u0000\u04bd\u04be\u0005\u0002\u0000\u0000\u04be"+ + "\u04bf\u0003\u0002\u0001\u0000\u04bf\u04c0\u0005\u0004\u0000\u0000\u04c0"+ + "\u04c1\u0003\u0002\u0001\u0000\u04c1\u04c2\u0005\u0004\u0000\u0000\u04c2"+ + "\u04c3\u0003\u0002\u0001\u0000\u04c3\u04c4\u0005\u0004\u0000\u0000\u04c4"+ + "\u04c5\u0003\u0002\u0001\u0000\u04c5\u04c6\u0005\u0003\u0000\u0000\u04c6"+ + "\u0713\u0001\u0000\u0000\u0000\u04c7\u04c8\u0005\u00bd\u0000\u0000\u04c8"+ + "\u04c9\u0005\u0002\u0000\u0000\u04c9\u04ca\u0003\u0002\u0001\u0000\u04ca"+ + "\u04cb\u0005\u0004\u0000\u0000\u04cb\u04cc\u0003\u0002\u0001\u0000\u04cc"+ + "\u04cd\u0005\u0004\u0000\u0000\u04cd\u04ce\u0003\u0002\u0001\u0000\u04ce"+ + "\u04cf\u0005\u0003\u0000\u0000\u04cf\u0713\u0001\u0000\u0000\u0000\u04d0"+ + "\u04d1\u0005\u00be\u0000\u0000\u04d1\u04d2\u0005\u0002\u0000\u0000\u04d2"+ + "\u04d3\u0003\u0002\u0001\u0000\u04d3\u04d4\u0005\u0004\u0000\u0000\u04d4"+ + "\u04d5\u0003\u0002\u0001\u0000\u04d5\u04d6\u0005\u0004\u0000\u0000\u04d6"+ + "\u04d7\u0003\u0002\u0001\u0000\u04d7\u04d8\u0005\u0003\u0000\u0000\u04d8"+ + "\u0713\u0001\u0000\u0000\u0000\u04d9\u04da\u0005\u00bf\u0000\u0000\u04da"+ + "\u04db\u0005\u0002\u0000\u0000\u04db\u04dc\u0003\u0002\u0001\u0000\u04dc"+ + "\u04dd\u0005\u0004\u0000\u0000\u04dd\u04de\u0003\u0002\u0001\u0000\u04de"+ + "\u04df\u0005\u0004\u0000\u0000\u04df\u04e0\u0003\u0002\u0001\u0000\u04e0"+ + "\u04e1\u0005\u0003\u0000\u0000\u04e1\u0713\u0001\u0000\u0000\u0000\u04e2"+ + "\u04e3\u0005\u00c0\u0000\u0000\u04e3\u04e4\u0005\u0002\u0000\u0000\u04e4"+ + "\u04e5\u0003\u0002\u0001\u0000\u04e5\u04e6\u0005\u0003\u0000\u0000\u04e6"+ + "\u0713\u0001\u0000\u0000\u0000\u04e7\u04e8\u0005\u00c1\u0000\u0000\u04e8"+ + "\u04e9\u0005\u0002\u0000\u0000\u04e9\u04ea\u0003\u0002\u0001\u0000\u04ea"+ + "\u04eb\u0005\u0003\u0000\u0000\u04eb\u0713\u0001\u0000\u0000\u0000\u04ec"+ + "\u04ed\u0005\u00c2\u0000\u0000\u04ed\u04ee\u0005\u0002\u0000\u0000\u04ee"+ + "\u04ef\u0003\u0002\u0001\u0000\u04ef\u04f0\u0005\u0004\u0000\u0000\u04f0"+ + "\u04f1\u0003\u0002\u0001\u0000\u04f1\u04f2\u0005\u0004\u0000\u0000\u04f2"+ + "\u04f3\u0003\u0002\u0001\u0000\u04f3\u04f4\u0005\u0004\u0000\u0000\u04f4"+ + "\u04f5\u0003\u0002\u0001\u0000\u04f5\u04f6\u0005\u0003\u0000\u0000\u04f6"+ + "\u0713\u0001\u0000\u0000\u0000\u04f7\u04f8\u0005\u00c3\u0000\u0000\u04f8"+ + "\u04f9\u0005\u0002\u0000\u0000\u04f9\u04fa\u0003\u0002\u0001\u0000\u04fa"+ + "\u04fb\u0005\u0004\u0000\u0000\u04fb\u04fc\u0003\u0002\u0001\u0000\u04fc"+ + "\u04fd\u0005\u0004\u0000\u0000\u04fd\u04fe\u0003\u0002\u0001\u0000\u04fe"+ + "\u04ff\u0005\u0003\u0000\u0000\u04ff\u0713\u0001\u0000\u0000\u0000\u0500"+ + "\u0501\u0005\u00c4\u0000\u0000\u0501\u0502\u0005\u0002\u0000\u0000\u0502"+ + "\u0503\u0003\u0002\u0001\u0000\u0503\u0504\u0005\u0003\u0000\u0000\u0504"+ + "\u0713\u0001\u0000\u0000\u0000\u0505\u0506\u0005\u00c5\u0000\u0000\u0506"+ + "\u0507\u0005\u0002\u0000\u0000\u0507\u0508\u0003\u0002\u0001\u0000\u0508"+ + "\u0509\u0005\u0004\u0000\u0000\u0509\u050a\u0003\u0002\u0001\u0000\u050a"+ + "\u050b\u0005\u0004\u0000\u0000\u050b\u050c\u0003\u0002\u0001\u0000\u050c"+ + "\u050d\u0005\u0004\u0000\u0000\u050d\u050e\u0003\u0002\u0001\u0000\u050e"+ + "\u050f\u0005\u0003\u0000\u0000\u050f\u0713\u0001\u0000\u0000\u0000\u0510"+ + "\u0511\u0005\u00c6\u0000\u0000\u0511\u0512\u0005\u0002\u0000\u0000\u0512"+ + "\u0513\u0003\u0002\u0001\u0000\u0513\u0514\u0005\u0004\u0000\u0000\u0514"+ + "\u0515\u0003\u0002\u0001\u0000\u0515\u0516\u0005\u0004\u0000\u0000\u0516"+ + "\u0517\u0003\u0002\u0001\u0000\u0517\u0518\u0005\u0003\u0000\u0000\u0518"+ + "\u0713\u0001\u0000\u0000\u0000\u0519\u051a\u0005\u00c7\u0000\u0000\u051a"+ + "\u051b\u0005\u0002\u0000\u0000\u051b\u051c\u0003\u0002\u0001\u0000\u051c"+ + "\u051d\u0005\u0004\u0000\u0000\u051d\u051e\u0003\u0002\u0001\u0000\u051e"+ + "\u051f\u0005\u0004\u0000\u0000\u051f\u0520\u0003\u0002\u0001\u0000\u0520"+ + "\u0521\u0005\u0003\u0000\u0000\u0521\u0713\u0001\u0000\u0000\u0000\u0522"+ + "\u0523\u0005\u00c8\u0000\u0000\u0523\u0524\u0005\u0002\u0000\u0000\u0524"+ + "\u0525\u0003\u0002\u0001\u0000\u0525\u0526\u0005\u0004\u0000\u0000\u0526"+ + "\u0527\u0003\u0002\u0001\u0000\u0527\u0528\u0005\u0004\u0000\u0000\u0528"+ + "\u0529\u0003\u0002\u0001\u0000\u0529\u052a\u0005\u0003\u0000\u0000\u052a"+ + "\u0713\u0001\u0000\u0000\u0000\u052b\u052c\u0005\u00c9\u0000\u0000\u052c"+ + "\u052d\u0005\u0002\u0000\u0000\u052d\u052e\u0003\u0002\u0001\u0000\u052e"+ + "\u052f\u0005\u0004\u0000\u0000\u052f\u0530\u0003\u0002\u0001\u0000\u0530"+ + "\u0531\u0005\u0004\u0000\u0000\u0531\u0532\u0003\u0002\u0001\u0000\u0532"+ + "\u0533\u0005\u0003\u0000\u0000\u0533\u0713\u0001\u0000\u0000\u0000\u0534"+ + "\u0535\u0005\u00ca\u0000\u0000\u0535\u0536\u0005\u0002\u0000\u0000\u0536"+ + "\u0537\u0003\u0002\u0001\u0000\u0537\u0538\u0005\u0004\u0000\u0000\u0538"+ + "\u0539\u0003\u0002\u0001\u0000\u0539\u053a\u0005\u0004\u0000\u0000\u053a"+ + "\u053b\u0003\u0002\u0001\u0000\u053b\u053c\u0005\u0003\u0000\u0000\u053c"+ + "\u0713\u0001\u0000\u0000\u0000\u053d\u053e\u0005\u00cb\u0000\u0000\u053e"+ + "\u053f\u0005\u0002\u0000\u0000\u053f\u0540\u0003\u0002\u0001\u0000\u0540"+ + "\u0541\u0005\u0004\u0000\u0000\u0541\u0542\u0003\u0002\u0001\u0000\u0542"+ + "\u0543\u0005\u0003\u0000\u0000\u0543\u0713\u0001\u0000\u0000\u0000\u0544"+ + "\u0545\u0005\u00cc\u0000\u0000\u0545\u0546\u0005\u0002\u0000\u0000\u0546"+ + "\u0547\u0003\u0002\u0001\u0000\u0547\u0548\u0005\u0004\u0000\u0000\u0548"+ + "\u0549\u0003\u0002\u0001\u0000\u0549\u054a\u0005\u0004\u0000\u0000\u054a"+ + "\u054b\u0003\u0002\u0001\u0000\u054b\u054c\u0005\u0004\u0000\u0000\u054c"+ + "\u054d\u0003\u0002\u0001\u0000\u054d\u054e\u0005\u0003\u0000\u0000\u054e"+ + "\u0713\u0001\u0000\u0000\u0000\u054f\u0550\u0005\u00cd\u0000\u0000\u0550"+ + "\u0551\u0005\u0002\u0000\u0000\u0551\u0552\u0003\u0002\u0001\u0000\u0552"+ + "\u0553\u0005\u0003\u0000\u0000\u0553\u0713\u0001\u0000\u0000\u0000\u0554"+ + "\u0555\u0005\u00ce\u0000\u0000\u0555\u0556\u0005\u0002\u0000\u0000\u0556"+ + "\u0557\u0003\u0002\u0001\u0000\u0557\u0558\u0005\u0003\u0000\u0000\u0558"+ + "\u0713\u0001\u0000\u0000\u0000\u0559\u055a\u0005\u00cf\u0000\u0000\u055a"+ + "\u055b\u0005\u0002\u0000\u0000\u055b\u055c\u0003\u0002\u0001\u0000\u055c"+ + "\u055d\u0005\u0003\u0000\u0000\u055d\u0713\u0001\u0000\u0000\u0000\u055e"+ + "\u055f\u0005\u00d0\u0000\u0000\u055f\u0560\u0005\u0002\u0000\u0000\u0560"+ + "\u0561\u0003\u0002\u0001\u0000\u0561\u0562\u0005\u0003\u0000\u0000\u0562"+ + "\u0713\u0001\u0000\u0000\u0000\u0563\u0564\u0005\u00d1\u0000\u0000\u0564"+ + "\u0565\u0005\u0002\u0000\u0000\u0565\u0568\u0003\u0002\u0001\u0000\u0566"+ + "\u0567\u0005\u0004\u0000\u0000\u0567\u0569\u0003\u0002\u0001\u0000\u0568"+ + "\u0566\u0001\u0000\u0000\u0000\u0568\u0569\u0001\u0000\u0000\u0000\u0569"+ + "\u056a\u0001\u0000\u0000\u0000\u056a\u056b\u0005\u0003\u0000\u0000\u056b"+ + "\u0713\u0001\u0000\u0000\u0000\u056c\u056d\u0005\u00d2\u0000\u0000\u056d"+ + "\u056e\u0005\u0002\u0000\u0000\u056e\u0571\u0003\u0002\u0001\u0000\u056f"+ + "\u0570\u0005\u0004\u0000\u0000\u0570\u0572\u0003\u0002\u0001\u0000\u0571"+ + "\u056f\u0001\u0000\u0000\u0000\u0571\u0572\u0001\u0000\u0000\u0000\u0572"+ + "\u0573\u0001\u0000\u0000\u0000\u0573\u0574\u0005\u0003\u0000\u0000\u0574"+ + "\u0713\u0001\u0000\u0000\u0000\u0575\u0576\u0005\u00d3\u0000\u0000\u0576"+ + "\u0577\u0005\u0002\u0000\u0000\u0577\u057a\u0003\u0002\u0001\u0000\u0578"+ + "\u0579\u0005\u0004\u0000\u0000\u0579\u057b\u0003\u0002\u0001\u0000\u057a"+ + "\u0578\u0001\u0000\u0000\u0000\u057a\u057b\u0001\u0000\u0000\u0000\u057b"+ + "\u057c\u0001\u0000\u0000\u0000\u057c\u057d\u0005\u0003\u0000\u0000\u057d"+ + "\u0713\u0001\u0000\u0000\u0000\u057e\u057f\u0005\u00d4\u0000\u0000\u057f"+ + "\u0580\u0005\u0002\u0000\u0000\u0580\u0583\u0003\u0002\u0001\u0000\u0581"+ + "\u0582\u0005\u0004\u0000\u0000\u0582\u0584\u0003\u0002\u0001\u0000\u0583"+ + "\u0581\u0001\u0000\u0000\u0000\u0583\u0584\u0001\u0000\u0000\u0000\u0584"+ + "\u0585\u0001\u0000\u0000\u0000\u0585\u0586\u0005\u0003\u0000\u0000\u0586"+ + "\u0713\u0001\u0000\u0000\u0000\u0587\u0588\u0005\u00d5\u0000\u0000\u0588"+ + "\u0589\u0005\u0002\u0000\u0000\u0589\u058a\u0003\u0002\u0001\u0000\u058a"+ + "\u058b\u0005\u0004\u0000\u0000\u058b\u058c\u0003\u0002\u0001\u0000\u058c"+ + "\u058d\u0005\u0003\u0000\u0000\u058d\u0713\u0001\u0000\u0000\u0000\u058e"+ + "\u058f\u0005\u00d6\u0000\u0000\u058f\u0590\u0005\u0002\u0000\u0000\u0590"+ + "\u0591\u0003\u0002\u0001\u0000\u0591\u0592\u0005\u0004\u0000\u0000\u0592"+ + "\u0593\u0003\u0002\u0001\u0000\u0593\u0594\u0005\u0004\u0000\u0000\u0594"+ + "\u0595\u0003\u0002\u0001\u0000\u0595\u0596\u0005\u0003\u0000\u0000\u0596"+ + "\u0713\u0001\u0000\u0000\u0000\u0597\u0598\u0005\u00d7\u0000\u0000\u0598"+ + "\u0599\u0005\u0002\u0000\u0000\u0599\u059a\u0003\u0002\u0001\u0000\u059a"+ + "\u059b\u0005\u0004\u0000\u0000\u059b\u059c\u0003\u0002\u0001\u0000\u059c"+ + "\u059d\u0005\u0003\u0000\u0000\u059d\u0713\u0001\u0000\u0000\u0000\u059e"+ + "\u059f\u0005\u00d8\u0000\u0000\u059f\u05a0\u0005\u0002\u0000\u0000\u05a0"+ + "\u0713\u0005\u0003\u0000\u0000\u05a1\u05a2\u0005\u00d9\u0000\u0000\u05a2"+ + "\u05a3\u0005\u0002\u0000\u0000\u05a3\u05a6\u0003\u0002\u0001\u0000\u05a4"+ + "\u05a5\u0005\u0004\u0000\u0000\u05a5\u05a7\u0003\u0002\u0001\u0000\u05a6"+ + "\u05a4\u0001\u0000\u0000\u0000\u05a6\u05a7\u0001\u0000\u0000\u0000\u05a7"+ + "\u05a8\u0001\u0000\u0000\u0000\u05a8\u05a9\u0005\u0003\u0000\u0000\u05a9"+ + "\u0713\u0001\u0000\u0000\u0000\u05aa\u05ab\u0005\u00da\u0000\u0000\u05ab"+ + "\u05ac\u0005\u0002\u0000\u0000\u05ac\u05af\u0003\u0002\u0001\u0000\u05ad"+ + "\u05ae\u0005\u0004\u0000\u0000\u05ae\u05b0\u0003\u0002\u0001\u0000\u05af"+ + "\u05ad\u0001\u0000\u0000\u0000\u05af\u05b0\u0001\u0000\u0000\u0000\u05b0"+ + "\u05b1\u0001\u0000\u0000\u0000\u05b1\u05b2\u0005\u0003\u0000\u0000\u05b2"+ + "\u0713\u0001\u0000\u0000\u0000\u05b3\u05b4\u0005\u00db\u0000\u0000\u05b4"+ + "\u05b5\u0005\u0002\u0000\u0000\u05b5\u05b8\u0003\u0002\u0001\u0000\u05b6"+ + "\u05b7\u0005\u0004\u0000\u0000\u05b7\u05b9\u0003\u0002\u0001\u0000\u05b8"+ + "\u05b6\u0001\u0000\u0000\u0000\u05b8\u05b9\u0001\u0000\u0000\u0000\u05b9"+ + "\u05ba\u0001\u0000\u0000\u0000\u05ba\u05bb\u0005\u0003\u0000\u0000\u05bb"+ + "\u0713\u0001\u0000\u0000\u0000\u05bc\u05bd\u0005\u00dc\u0000\u0000\u05bd"+ + "\u05be\u0005\u0002\u0000\u0000\u05be\u05c1\u0003\u0002\u0001\u0000\u05bf"+ + "\u05c0\u0005\u0004\u0000\u0000\u05c0\u05c2\u0003\u0002\u0001\u0000\u05c1"+ + "\u05bf\u0001\u0000\u0000\u0000\u05c1\u05c2\u0001\u0000\u0000\u0000\u05c2"+ + "\u05c3\u0001\u0000\u0000\u0000\u05c3\u05c4\u0005\u0003\u0000\u0000\u05c4"+ + "\u0713\u0001\u0000\u0000\u0000\u05c5\u05c6\u0005\u00dd\u0000\u0000\u05c6"+ + "\u05c7\u0005\u0002\u0000\u0000\u05c7\u05c8\u0003\u0002\u0001\u0000\u05c8"+ + "\u05c9\u0005\u0004\u0000\u0000\u05c9\u05cc\u0003\u0002\u0001\u0000\u05ca"+ + "\u05cb\u0005\u0004\u0000\u0000\u05cb\u05cd\u0003\u0002\u0001\u0000\u05cc"+ + "\u05ca\u0001\u0000\u0000\u0000\u05cc\u05cd\u0001\u0000\u0000\u0000\u05cd"+ + "\u05ce\u0001\u0000\u0000\u0000\u05ce\u05cf\u0005\u0003\u0000\u0000\u05cf"+ + "\u0713\u0001\u0000\u0000\u0000\u05d0\u05d1\u0005\u00de\u0000\u0000\u05d1"+ + "\u05d2\u0005\u0002\u0000\u0000\u05d2\u05d3\u0003\u0002\u0001\u0000\u05d3"+ + "\u05d4\u0005\u0004\u0000\u0000\u05d4\u05d7\u0003\u0002\u0001\u0000\u05d5"+ + "\u05d6\u0005\u0004\u0000\u0000\u05d6\u05d8\u0003\u0002\u0001\u0000\u05d7"+ + "\u05d5\u0001\u0000\u0000\u0000\u05d7\u05d8\u0001\u0000\u0000\u0000\u05d8"+ + "\u05d9\u0001\u0000\u0000\u0000\u05d9\u05da\u0005\u0003\u0000\u0000\u05da"+ + "\u0713\u0001\u0000\u0000\u0000\u05db\u05dc\u0005\u00df\u0000\u0000\u05dc"+ + "\u05dd\u0005\u0002\u0000\u0000\u05dd\u05de\u0003\u0002\u0001\u0000\u05de"+ + "\u05df\u0005\u0004\u0000\u0000\u05df\u05e2\u0003\u0002\u0001\u0000\u05e0"+ + "\u05e1\u0005\u0004\u0000\u0000\u05e1\u05e3\u0003\u0002\u0001\u0000\u05e2"+ + "\u05e0\u0001\u0000\u0000\u0000\u05e2\u05e3\u0001\u0000\u0000\u0000\u05e3"+ + "\u05e4\u0001\u0000\u0000\u0000\u05e4\u05e5\u0005\u0003\u0000\u0000\u05e5"+ + "\u0713\u0001\u0000\u0000\u0000\u05e6\u05e7\u0005\u00e0\u0000\u0000\u05e7"+ + "\u05e8\u0005\u0002\u0000\u0000\u05e8\u05e9\u0003\u0002\u0001\u0000\u05e9"+ + "\u05ea\u0005\u0004\u0000\u0000\u05ea\u05ed\u0003\u0002\u0001\u0000\u05eb"+ + "\u05ec\u0005\u0004\u0000\u0000\u05ec\u05ee\u0003\u0002\u0001\u0000\u05ed"+ + "\u05eb\u0001\u0000\u0000\u0000\u05ed\u05ee\u0001\u0000\u0000\u0000\u05ee"+ + "\u05ef\u0001\u0000\u0000\u0000\u05ef\u05f0\u0005\u0003\u0000\u0000\u05f0"+ + "\u0713\u0001\u0000\u0000\u0000\u05f1\u05f2\u0005\u00e1\u0000\u0000\u05f2"+ + "\u05f3\u0005\u0002\u0000\u0000\u05f3\u05f6\u0003\u0002\u0001\u0000\u05f4"+ + "\u05f5\u0005\u0004\u0000\u0000\u05f5\u05f7\u0003\u0002\u0001\u0000\u05f6"+ + "\u05f4\u0001\u0000\u0000\u0000\u05f6\u05f7\u0001\u0000\u0000\u0000\u05f7"+ + "\u05f8\u0001\u0000\u0000\u0000\u05f8\u05f9\u0005\u0003\u0000\u0000\u05f9"+ + "\u0713\u0001\u0000\u0000\u0000\u05fa\u05fb\u0005\u00e2\u0000\u0000\u05fb"+ + "\u05fc\u0005\u0002\u0000\u0000\u05fc\u05ff\u0003\u0002\u0001\u0000\u05fd"+ + "\u05fe\u0005\u0004\u0000\u0000\u05fe\u0600\u0003\u0002\u0001\u0000\u05ff"+ + "\u05fd\u0001\u0000\u0000\u0000\u05ff\u0600\u0001\u0000\u0000\u0000\u0600"+ + "\u0601\u0001\u0000\u0000\u0000\u0601\u0602\u0005\u0003\u0000\u0000\u0602"+ + "\u0713\u0001\u0000\u0000\u0000\u0603\u0604\u0005\u00e3\u0000\u0000\u0604"+ + "\u0605\u0005\u0002\u0000\u0000\u0605\u0606\u0003\u0002\u0001\u0000\u0606"+ + "\u0607\u0005\u0004\u0000\u0000\u0607\u060e\u0003\u0002\u0001\u0000\u0608"+ + "\u0609\u0005\u0004\u0000\u0000\u0609\u060c\u0003\u0002\u0001\u0000\u060a"+ + "\u060b\u0005\u0004\u0000\u0000\u060b\u060d\u0003\u0002\u0001\u0000\u060c"+ + "\u060a\u0001\u0000\u0000\u0000\u060c\u060d\u0001\u0000\u0000\u0000\u060d"+ + "\u060f\u0001\u0000\u0000\u0000\u060e\u0608\u0001\u0000\u0000\u0000\u060e"+ + "\u060f\u0001\u0000\u0000\u0000\u060f\u0610\u0001\u0000\u0000\u0000\u0610"+ + "\u0611\u0005\u0003\u0000\u0000\u0611\u0713\u0001\u0000\u0000\u0000\u0612"+ + "\u0613\u0005\u00e4\u0000\u0000\u0613\u0614\u0005\u0002\u0000\u0000\u0614"+ + "\u0615\u0003\u0002\u0001\u0000\u0615\u0616\u0005\u0004\u0000\u0000\u0616"+ + "\u061d\u0003\u0002\u0001\u0000\u0617\u0618\u0005\u0004\u0000\u0000\u0618"+ + "\u061b\u0003\u0002\u0001\u0000\u0619\u061a\u0005\u0004\u0000\u0000\u061a"+ + "\u061c\u0003\u0002\u0001\u0000\u061b\u0619\u0001\u0000\u0000\u0000\u061b"+ + "\u061c\u0001\u0000\u0000\u0000\u061c\u061e\u0001\u0000\u0000\u0000\u061d"+ + "\u0617\u0001\u0000\u0000\u0000\u061d\u061e\u0001\u0000\u0000\u0000\u061e"+ + "\u061f\u0001\u0000\u0000\u0000\u061f\u0620\u0005\u0003\u0000\u0000\u0620"+ + "\u0713\u0001\u0000\u0000\u0000\u0621\u0622\u0005\u00e5\u0000\u0000\u0622"+ + "\u0623\u0005\u0002\u0000\u0000\u0623\u0624\u0003\u0002\u0001\u0000\u0624"+ + "\u0625\u0005\u0004\u0000\u0000\u0625\u0626\u0003\u0002\u0001\u0000\u0626"+ + "\u0627\u0005\u0003\u0000\u0000\u0627\u0713\u0001\u0000\u0000\u0000\u0628"+ + "\u0629\u0005\u00e6\u0000\u0000\u0629\u062a\u0005\u0002\u0000\u0000\u062a"+ + "\u062d\u0003\u0002\u0001\u0000\u062b\u062c\u0005\u0004\u0000\u0000\u062c"+ + "\u062e\u0003\u0002\u0001\u0000\u062d\u062b\u0001\u0000\u0000\u0000\u062e"+ + "\u062f\u0001\u0000\u0000\u0000\u062f\u062d\u0001\u0000\u0000\u0000\u062f"+ + "\u0630\u0001\u0000\u0000\u0000\u0630\u0631\u0001\u0000\u0000\u0000\u0631"+ + "\u0632\u0005\u0003\u0000\u0000\u0632\u0713\u0001\u0000\u0000\u0000\u0633"+ + "\u0634\u0005\u00e7\u0000\u0000\u0634\u0635\u0005\u0002\u0000\u0000\u0635"+ + "\u0636\u0003\u0002\u0001\u0000\u0636\u0637\u0005\u0004\u0000\u0000\u0637"+ + "\u063a\u0003\u0002\u0001\u0000\u0638\u0639\u0005\u0004\u0000\u0000\u0639"+ + "\u063b\u0003\u0002\u0001\u0000\u063a\u0638\u0001\u0000\u0000\u0000\u063a"+ + "\u063b\u0001\u0000\u0000\u0000\u063b\u063c\u0001\u0000\u0000\u0000\u063c"+ + "\u063d\u0005\u0003\u0000\u0000\u063d\u0713\u0001\u0000\u0000\u0000\u063e"+ + "\u063f\u0005\u00e8\u0000\u0000\u063f\u0640\u0005\u0002\u0000\u0000\u0640"+ + "\u0641\u0003\u0002\u0001\u0000\u0641\u0642\u0005\u0004\u0000\u0000\u0642"+ + "\u0645\u0003\u0002\u0001\u0000\u0643\u0644\u0005\u0004\u0000\u0000\u0644"+ + "\u0646\u0003\u0002\u0001\u0000\u0645\u0643\u0001\u0000\u0000\u0000\u0645"+ + "\u0646\u0001\u0000\u0000\u0000\u0646\u0647\u0001\u0000\u0000\u0000\u0647"+ + "\u0648\u0005\u0003\u0000\u0000\u0648\u0713\u0001\u0000\u0000\u0000\u0649"+ + "\u064a\u0005\u00e9\u0000\u0000\u064a\u064b\u0005\u0002\u0000\u0000\u064b"+ + "\u064c\u0003\u0002\u0001\u0000\u064c\u064d\u0005\u0004\u0000\u0000\u064d"+ + "\u0650\u0003\u0002\u0001\u0000\u064e\u064f\u0005\u0004\u0000\u0000\u064f"+ + "\u0651\u0003\u0002\u0001\u0000\u0650\u064e\u0001\u0000\u0000\u0000\u0650"+ + "\u0651\u0001\u0000\u0000\u0000\u0651\u0652\u0001\u0000\u0000\u0000\u0652"+ + "\u0653\u0005\u0003\u0000\u0000\u0653\u0713\u0001\u0000\u0000\u0000\u0654"+ + "\u0655\u0005\u00ea\u0000\u0000\u0655\u0656\u0005\u0002\u0000\u0000\u0656"+ + "\u0657\u0003\u0002\u0001\u0000\u0657\u0658\u0005\u0003\u0000\u0000\u0658"+ + "\u0713\u0001\u0000\u0000\u0000\u0659\u065a\u0005\u00eb\u0000\u0000\u065a"+ + "\u065b\u0005\u0002\u0000\u0000\u065b\u065c\u0003\u0002\u0001\u0000\u065c"+ + "\u065d\u0005\u0003\u0000\u0000\u065d\u0713\u0001\u0000\u0000\u0000\u065e"+ + "\u065f\u0005\u00ec\u0000\u0000\u065f\u0660\u0005\u0002\u0000\u0000\u0660"+ + "\u0667\u0003\u0002\u0001\u0000\u0661\u0662\u0005\u0004\u0000\u0000\u0662"+ + "\u0665\u0003\u0002\u0001\u0000\u0663\u0664\u0005\u0004\u0000\u0000\u0664"+ + "\u0666\u0003\u0002\u0001\u0000\u0665\u0663\u0001\u0000\u0000\u0000\u0665"+ + "\u0666\u0001\u0000\u0000\u0000\u0666\u0668\u0001\u0000\u0000\u0000\u0667"+ + "\u0661\u0001\u0000\u0000\u0000\u0667\u0668\u0001\u0000\u0000\u0000\u0668"+ + "\u0669\u0001\u0000\u0000\u0000\u0669\u066a\u0005\u0003\u0000\u0000\u066a"+ + "\u0713\u0001\u0000\u0000\u0000\u066b\u066c\u0005\u00ed\u0000\u0000\u066c"+ + "\u066d\u0005\u0002\u0000\u0000\u066d\u0674\u0003\u0002\u0001\u0000\u066e"+ + "\u066f\u0005\u0004\u0000\u0000\u066f\u0672\u0003\u0002\u0001\u0000\u0670"+ + "\u0671\u0005\u0004\u0000\u0000\u0671\u0673\u0003\u0002\u0001\u0000\u0672"+ + "\u0670\u0001\u0000\u0000\u0000\u0672\u0673\u0001\u0000\u0000\u0000\u0673"+ + "\u0675\u0001\u0000\u0000\u0000\u0674\u066e\u0001\u0000\u0000\u0000\u0674"+ + "\u0675\u0001\u0000\u0000\u0000\u0675\u0676\u0001\u0000\u0000\u0000\u0676"+ + "\u0677\u0005\u0003\u0000\u0000\u0677\u0713\u0001\u0000\u0000\u0000\u0678"+ + "\u0679\u0005\u00ee\u0000\u0000\u0679\u067a\u0005\u0002\u0000\u0000\u067a"+ + "\u067b\u0003\u0002\u0001\u0000\u067b\u067c\u0005\u0003\u0000\u0000\u067c"+ + "\u0713\u0001\u0000\u0000\u0000\u067d\u067e\u0005\u00ef\u0000\u0000\u067e"+ + "\u067f\u0005\u0002\u0000\u0000\u067f\u0680\u0003\u0002\u0001\u0000\u0680"+ + "\u0681\u0005\u0004\u0000\u0000\u0681\u0682\u0003\u0002\u0001\u0000\u0682"+ + "\u0683\u0005\u0003\u0000\u0000\u0683\u0713\u0001\u0000\u0000\u0000\u0684"+ + "\u0685\u0005\u00f0\u0000\u0000\u0685\u0686\u0005\u0002\u0000\u0000\u0686"+ + "\u0687\u0003\u0002\u0001\u0000\u0687\u0688\u0005\u0004\u0000\u0000\u0688"+ + "\u0689\u0003\u0002\u0001\u0000\u0689\u068a\u0005\u0003\u0000\u0000\u068a"+ + "\u0713\u0001\u0000\u0000\u0000\u068b\u068c\u0005\u00fd\u0000\u0000\u068c"+ + "\u0695\u0005\u0002\u0000\u0000\u068d\u0692\u0003\u0002\u0001\u0000\u068e"+ + "\u068f\u0005\u0004\u0000\u0000\u068f\u0691\u0003\u0002\u0001\u0000\u0690"+ + "\u068e\u0001\u0000\u0000\u0000\u0691\u0694\u0001\u0000\u0000\u0000\u0692"+ + "\u0690\u0001\u0000\u0000\u0000\u0692\u0693\u0001\u0000\u0000\u0000\u0693"+ + "\u0696\u0001\u0000\u0000\u0000\u0694\u0692\u0001\u0000\u0000\u0000\u0695"+ + "\u068d\u0001\u0000\u0000\u0000\u0695\u0696\u0001\u0000\u0000\u0000\u0696"+ + "\u0697\u0001\u0000\u0000\u0000\u0697\u0713\u0005\u0003\u0000\u0000\u0698"+ + "\u0699\u0005\u00f3\u0000\u0000\u0699\u069a\u0005\u0002\u0000\u0000\u069a"+ + "\u069b\u0003\u0002\u0001\u0000\u069b\u069c\u0005\u0004\u0000\u0000\u069c"+ + "\u069d\u0003\u0002\u0001\u0000\u069d\u069e\u0005\u0003\u0000\u0000\u069e"+ + "\u0713\u0001\u0000\u0000\u0000\u069f\u06a0\u0005\u00f4\u0000\u0000\u06a0"+ + "\u06a1\u0005\u0002\u0000\u0000\u06a1\u06a2\u0003\u0002\u0001\u0000\u06a2"+ + "\u06a3\u0005\u0004\u0000\u0000\u06a3\u06a4\u0003\u0002\u0001\u0000\u06a4"+ + "\u06a5\u0005\u0003\u0000\u0000\u06a5\u0713\u0001\u0000\u0000\u0000\u06a6"+ + "\u06a7\u0005\u00f5\u0000\u0000\u06a7\u06a8\u0005\u0002\u0000\u0000\u06a8"+ + "\u06a9\u0003\u0002\u0001\u0000\u06a9\u06aa\u0005\u0004\u0000\u0000\u06aa"+ + "\u06ab\u0003\u0002\u0001\u0000\u06ab\u06ac\u0005\u0003\u0000\u0000\u06ac"+ + "\u0713\u0001\u0000\u0000\u0000\u06ad\u06ae\u0005\u00f6\u0000\u0000\u06ae"+ + "\u06af\u0005\u0002\u0000\u0000\u06af\u06b0\u0003\u0002\u0001\u0000\u06b0"+ + "\u06b1\u0005\u0004\u0000\u0000\u06b1\u06b2\u0003\u0002\u0001\u0000\u06b2"+ + "\u06b3\u0005\u0003\u0000\u0000\u06b3\u0713\u0001\u0000\u0000\u0000\u06b4"+ + "\u06b5\u0005\u00f7\u0000\u0000\u06b5\u06b6\u0005\u0002\u0000\u0000\u06b6"+ + "\u06b7\u0003\u0002\u0001\u0000\u06b7\u06b8\u0005\u0004\u0000\u0000\u06b8"+ + "\u06b9\u0003\u0002\u0001\u0000\u06b9\u06ba\u0005\u0003\u0000\u0000\u06ba"+ + "\u0713\u0001\u0000\u0000\u0000\u06bb\u06bc\u0005\u00f8\u0000\u0000\u06bc"+ + "\u06bd\u0005\u0002\u0000\u0000\u06bd\u06be\u0003\u0002\u0001\u0000\u06be"+ + "\u06bf\u0005\u0004\u0000\u0000\u06bf\u06c0\u0003\u0002\u0001\u0000\u06c0"+ + "\u06c1\u0005\u0003\u0000\u0000\u06c1\u0713\u0001\u0000\u0000\u0000\u06c2"+ + "\u06c3\u0005\u00f9\u0000\u0000\u06c3\u06c4\u0005\u0002\u0000\u0000\u06c4"+ + "\u06c7\u0003\u0002\u0001\u0000\u06c5\u06c6\u0005\u0004\u0000\u0000\u06c6"+ + "\u06c8\u0003\u0002\u0001\u0000\u06c7\u06c5\u0001\u0000\u0000\u0000\u06c7"+ + "\u06c8\u0001\u0000\u0000\u0000\u06c8\u06c9\u0001\u0000\u0000\u0000\u06c9"+ + "\u06ca\u0005\u0003\u0000\u0000\u06ca\u0713\u0001\u0000\u0000\u0000\u06cb"+ + "\u06cc\u0005\u00fc\u0000\u0000\u06cc\u06cd\u0005\u0002\u0000\u0000\u06cd"+ + "\u06d0\u0003\u0002\u0001\u0000\u06ce\u06cf\u0005\u0004\u0000\u0000\u06cf"+ + "\u06d1\u0003\u0002\u0001\u0000\u06d0\u06ce\u0001\u0000\u0000\u0000\u06d0"+ + "\u06d1\u0001\u0000\u0000\u0000\u06d1\u06d2\u0001\u0000\u0000\u0000\u06d2"+ + "\u06d3\u0005\u0003\u0000\u0000\u06d3\u0713\u0001\u0000\u0000\u0000\u06d4"+ + "\u06d5\u0005!\u0000\u0000\u06d5\u06d7\u0005\u0002\u0000\u0000\u06d6\u06d8"+ + "\u0003\u0002\u0001\u0000\u06d7\u06d6\u0001\u0000\u0000\u0000\u06d7\u06d8"+ + "\u0001\u0000\u0000\u0000\u06d8\u06d9\u0001\u0000\u0000\u0000\u06d9\u0713"+ + "\u0005\u0003\u0000\u0000\u06da\u06db\u0005\u00fa\u0000\u0000\u06db\u06dc"+ + "\u0005\u0002\u0000\u0000\u06dc\u06dd\u0003\u0002\u0001\u0000\u06dd\u06de"+ + "\u0005\u0004\u0000\u0000\u06de\u06df\u0003\u0002\u0001\u0000\u06df\u06e0"+ + "\u0005\u0003\u0000\u0000\u06e0\u0713\u0001\u0000\u0000\u0000\u06e1\u06e2"+ + "\u0005\u00fb\u0000\u0000\u06e2\u06e3\u0005\u0002\u0000\u0000\u06e3\u06e4"+ + "\u0003\u0002\u0001\u0000\u06e4\u06e5\u0005\u0004\u0000\u0000\u06e5\u06e6"+ + "\u0003\u0002\u0001\u0000\u06e6\u06e7\u0005\u0003\u0000\u0000\u06e7\u0713"+ + "\u0001\u0000\u0000\u0000\u06e8\u06e9\u0005\u001b\u0000\u0000\u06e9\u06ee"+ + "\u0003\b\u0004\u0000\u06ea\u06eb\u0005\u0004\u0000\u0000\u06eb\u06ed\u0003"+ + "\b\u0004\u0000\u06ec\u06ea\u0001\u0000\u0000\u0000\u06ed\u06f0\u0001\u0000"+ + "\u0000\u0000\u06ee\u06ec\u0001\u0000\u0000\u0000\u06ee\u06ef\u0001\u0000"+ + "\u0000\u0000\u06ef\u06f4\u0001\u0000\u0000\u0000\u06f0\u06ee\u0001\u0000"+ + "\u0000\u0000\u06f1\u06f3\u0005\u0004\u0000\u0000\u06f2\u06f1\u0001\u0000"+ + "\u0000\u0000\u06f3\u06f6\u0001\u0000\u0000\u0000\u06f4\u06f2\u0001\u0000"+ + "\u0000\u0000\u06f4\u06f5\u0001\u0000\u0000\u0000\u06f5\u06f7\u0001\u0000"+ + "\u0000\u0000\u06f6\u06f4\u0001\u0000\u0000\u0000\u06f7\u06f8\u0005\u001c"+ + "\u0000\u0000\u06f8\u0713\u0001\u0000\u0000\u0000\u06f9\u06fa\u0005\u0005"+ + "\u0000\u0000\u06fa\u06ff\u0003\u0002\u0001\u0000\u06fb\u06fc\u0005\u0004"+ + "\u0000\u0000\u06fc\u06fe\u0003\u0002\u0001\u0000\u06fd\u06fb\u0001\u0000"+ + "\u0000\u0000\u06fe\u0701\u0001\u0000\u0000\u0000\u06ff\u06fd\u0001\u0000"+ + "\u0000\u0000\u06ff\u0700\u0001\u0000\u0000\u0000\u0700\u0705\u0001\u0000"+ + "\u0000\u0000\u0701\u06ff\u0001\u0000\u0000\u0000\u0702\u0704\u0005\u0004"+ + "\u0000\u0000\u0703\u0702\u0001\u0000\u0000\u0000\u0704\u0707\u0001\u0000"+ + "\u0000\u0000\u0705\u0703\u0001\u0000\u0000\u0000\u0705\u0706\u0001\u0000"+ + "\u0000\u0000\u0706\u0708\u0001\u0000\u0000\u0000\u0707\u0705\u0001\u0000"+ + "\u0000\u0000\u0708\u0709\u0005\u0006\u0000\u0000\u0709\u0713\u0001\u0000"+ + "\u0000\u0000\u070a\u0713\u0005\u00f2\u0000\u0000\u070b\u0713\u0005\u00fd"+ + "\u0000\u0000\u070c\u070e\u0003\u0004\u0002\u0000\u070d\u070f\u0003\u0006"+ + "\u0003\u0000\u070e\u070d\u0001\u0000\u0000\u0000\u070e\u070f\u0001\u0000"+ + "\u0000\u0000\u070f\u0713\u0001\u0000\u0000\u0000\u0710\u0713\u0005\u001f"+ + "\u0000\u0000\u0711\u0713\u0005 \u0000\u0000\u0712\u000f\u0001\u0000\u0000"+ + "\u0000\u0712\u0014\u0001\u0000\u0000\u0000\u0712\u0016\u0001\u0000\u0000"+ + "\u0000\u0712\"\u0001\u0000\u0000\u0000\u0712-\u0001\u0000\u0000\u0000"+ + "\u07122\u0001\u0000\u0000\u0000\u07127\u0001\u0000\u0000\u0000\u0712@"+ + "\u0001\u0000\u0000\u0000\u0712E\u0001\u0000\u0000\u0000\u0712J\u0001\u0000"+ + "\u0000\u0000\u0712O\u0001\u0000\u0000\u0000\u0712T\u0001\u0000\u0000\u0000"+ + "\u0712_\u0001\u0000\u0000\u0000\u0712h\u0001\u0000\u0000\u0000\u0712q"+ + "\u0001\u0000\u0000\u0000\u0712}\u0001\u0000\u0000\u0000\u0712\u0089\u0001"+ + "\u0000\u0000\u0000\u0712\u008e\u0001\u0000\u0000\u0000\u0712\u0093\u0001"+ + "\u0000\u0000\u0000\u0712\u0098\u0001\u0000\u0000\u0000\u0712\u009d\u0001"+ + "\u0000\u0000\u0000\u0712\u00a2\u0001\u0000\u0000\u0000\u0712\u00ab\u0001"+ + "\u0000\u0000\u0000\u0712\u00b4\u0001\u0000\u0000\u0000\u0712\u00bd\u0001"+ + "\u0000\u0000\u0000\u0712\u00c6\u0001\u0000\u0000\u0000\u0712\u00cb\u0001"+ + "\u0000\u0000\u0000\u0712\u00d4\u0001\u0000\u0000\u0000\u0712\u00dd\u0001"+ + "\u0000\u0000\u0000\u0712\u00e2\u0001\u0000\u0000\u0000\u0712\u00eb\u0001"+ + "\u0000\u0000\u0000\u0712\u00f4\u0001\u0000\u0000\u0000\u0712\u00f9\u0001"+ + "\u0000\u0000\u0000\u0712\u0102\u0001\u0000\u0000\u0000\u0712\u0107\u0001"+ + "\u0000\u0000\u0000\u0712\u010f\u0001\u0000\u0000\u0000\u0712\u0117\u0001"+ + "\u0000\u0000\u0000\u0712\u011c\u0001\u0000\u0000\u0000\u0712\u0121\u0001"+ + "\u0000\u0000\u0000\u0712\u0126\u0001\u0000\u0000\u0000\u0712\u012b\u0001"+ + "\u0000\u0000\u0000\u0712\u0136\u0001\u0000\u0000\u0000\u0712\u0141\u0001"+ + "\u0000\u0000\u0000\u0712\u0148\u0001\u0000\u0000\u0000\u0712\u014f\u0001"+ + "\u0000\u0000\u0000\u0712\u0154\u0001\u0000\u0000\u0000\u0712\u0159\u0001"+ + "\u0000\u0000\u0000\u0712\u015e\u0001\u0000\u0000\u0000\u0712\u0163\u0001"+ + "\u0000\u0000\u0000\u0712\u0168\u0001\u0000\u0000\u0000\u0712\u016d\u0001"+ + "\u0000\u0000\u0000\u0712\u0172\u0001\u0000\u0000\u0000\u0712\u0177\u0001"+ + "\u0000\u0000\u0000\u0712\u017c\u0001\u0000\u0000\u0000\u0712\u0181\u0001"+ + "\u0000\u0000\u0000\u0712\u0186\u0001\u0000\u0000\u0000\u0712\u018b\u0001"+ + "\u0000\u0000\u0000\u0712\u0190\u0001\u0000\u0000\u0000\u0712\u0195\u0001"+ + "\u0000\u0000\u0000\u0712\u019c\u0001\u0000\u0000\u0000\u0712\u01a5\u0001"+ + "\u0000\u0000\u0000\u0712\u01ac\u0001\u0000\u0000\u0000\u0712\u01b3\u0001"+ + "\u0000\u0000\u0000\u0712\u01bc\u0001\u0000\u0000\u0000\u0712\u01c5\u0001"+ + "\u0000\u0000\u0000\u0712\u01ca\u0001\u0000\u0000\u0000\u0712\u01cf\u0001"+ + "\u0000\u0000\u0000\u0712\u01d6\u0001\u0000\u0000\u0000\u0712\u01d9\u0001"+ + "\u0000\u0000\u0000\u0712\u01e0\u0001\u0000\u0000\u0000\u0712\u01e5\u0001"+ + "\u0000\u0000\u0000\u0712\u01ea\u0001\u0000\u0000\u0000\u0712\u01f1\u0001"+ + "\u0000\u0000\u0000\u0712\u01f6\u0001\u0000\u0000\u0000\u0712\u01fb\u0001"+ + "\u0000\u0000\u0000\u0712\u0204\u0001\u0000\u0000\u0000\u0712\u0209\u0001"+ + "\u0000\u0000\u0000\u0712\u0215\u0001\u0000\u0000\u0000\u0712\u0221\u0001"+ + "\u0000\u0000\u0000\u0712\u0226\u0001\u0000\u0000\u0000\u0712\u0232\u0001"+ + "\u0000\u0000\u0000\u0712\u0237\u0001\u0000\u0000\u0000\u0712\u023c\u0001"+ + "\u0000\u0000\u0000\u0712\u0241\u0001\u0000\u0000\u0000\u0712\u0246\u0001"+ + "\u0000\u0000\u0000\u0712\u024b\u0001\u0000\u0000\u0000\u0712\u0257\u0001"+ + "\u0000\u0000\u0000\u0712\u025e\u0001\u0000\u0000\u0000\u0712\u0269\u0001"+ + "\u0000\u0000\u0000\u0712\u0276\u0001\u0000\u0000\u0000\u0712\u027f\u0001"+ + "\u0000\u0000\u0000\u0712\u0284\u0001\u0000\u0000\u0000\u0712\u0289\u0001"+ + "\u0000\u0000\u0000\u0712\u0292\u0001\u0000\u0000\u0000\u0712\u0297\u0001"+ + "\u0000\u0000\u0000\u0712\u02a4\u0001\u0000\u0000\u0000\u0712\u02ab\u0001"+ + "\u0000\u0000\u0000\u0712\u02b4\u0001\u0000\u0000\u0000\u0712\u02b9\u0001"+ + "\u0000\u0000\u0000\u0712\u02c4\u0001\u0000\u0000\u0000\u0712\u02d1\u0001"+ + "\u0000\u0000\u0000\u0712\u02d6\u0001\u0000\u0000\u0000\u0712\u02dd\u0001"+ + "\u0000\u0000\u0000\u0712\u02e2\u0001\u0000\u0000\u0000\u0712\u02e7\u0001"+ + "\u0000\u0000\u0000\u0712\u02ec\u0001\u0000\u0000\u0000\u0712\u02f5\u0001"+ + "\u0000\u0000\u0000\u0712\u02fa\u0001\u0000\u0000\u0000\u0712\u030f\u0001"+ + "\u0000\u0000\u0000\u0712\u031a\u0001\u0000\u0000\u0000\u0712\u031d\u0001"+ + "\u0000\u0000\u0000\u0712\u0320\u0001\u0000\u0000\u0000\u0712\u0325\u0001"+ + "\u0000\u0000\u0000\u0712\u032a\u0001\u0000\u0000\u0000\u0712\u032f\u0001"+ + "\u0000\u0000\u0000\u0712\u0334\u0001\u0000\u0000\u0000\u0712\u0339\u0001"+ + "\u0000\u0000\u0000\u0712\u033e\u0001\u0000\u0000\u0000\u0712\u0347\u0001"+ + "\u0000\u0000\u0000\u0712\u0350\u0001\u0000\u0000\u0000\u0712\u035b\u0001"+ + "\u0000\u0000\u0000\u0712\u0362\u0001\u0000\u0000\u0000\u0712\u0369\u0001"+ + "\u0000\u0000\u0000\u0712\u0374\u0001\u0000\u0000\u0000\u0712\u037f\u0001"+ + "\u0000\u0000\u0000\u0712\u0388\u0001\u0000\u0000\u0000\u0712\u0393\u0001"+ + "\u0000\u0000\u0000\u0712\u039e\u0001\u0000\u0000\u0000\u0712\u03a9\u0001"+ + "\u0000\u0000\u0000\u0712\u03b0\u0001\u0000\u0000\u0000\u0712\u03bc\u0001"+ + "\u0000\u0000\u0000\u0712\u03c3\u0001\u0000\u0000\u0000\u0712\u03ca\u0001"+ + "\u0000\u0000\u0000\u0712\u03d1\u0001\u0000\u0000\u0000\u0712\u03d8\u0001"+ + "\u0000\u0000\u0000\u0712\u03e4\u0001\u0000\u0000\u0000\u0712\u03ef\u0001"+ + "\u0000\u0000\u0000\u0712\u03fb\u0001\u0000\u0000\u0000\u0712\u0407\u0001"+ + "\u0000\u0000\u0000\u0712\u0413\u0001\u0000\u0000\u0000\u0712\u041f\u0001"+ + "\u0000\u0000\u0000\u0712\u042b\u0001\u0000\u0000\u0000\u0712\u0436\u0001"+ + "\u0000\u0000\u0000\u0712\u0442\u0001\u0000\u0000\u0000\u0712\u044e\u0001"+ + "\u0000\u0000\u0000\u0712\u045a\u0001\u0000\u0000\u0000\u0712\u0461\u0001"+ + "\u0000\u0000\u0000\u0712\u0468\u0001\u0000\u0000\u0000\u0712\u0474\u0001"+ + "\u0000\u0000\u0000\u0712\u0480\u0001\u0000\u0000\u0000\u0712\u048c\u0001"+ + "\u0000\u0000\u0000\u0712\u0497\u0001\u0000\u0000\u0000\u0712\u04a0\u0001"+ + "\u0000\u0000\u0000\u0712\u04a5\u0001\u0000\u0000\u0000\u0712\u04aa\u0001"+ + "\u0000\u0000\u0000\u0712\u04b3\u0001\u0000\u0000\u0000\u0712\u04bc\u0001"+ + "\u0000\u0000\u0000\u0712\u04c7\u0001\u0000\u0000\u0000\u0712\u04d0\u0001"+ + "\u0000\u0000\u0000\u0712\u04d9\u0001\u0000\u0000\u0000\u0712\u04e2\u0001"+ + "\u0000\u0000\u0000\u0712\u04e7\u0001\u0000\u0000\u0000\u0712\u04ec\u0001"+ + "\u0000\u0000\u0000\u0712\u04f7\u0001\u0000\u0000\u0000\u0712\u0500\u0001"+ + "\u0000\u0000\u0000\u0712\u0505\u0001\u0000\u0000\u0000\u0712\u0510\u0001"+ + "\u0000\u0000\u0000\u0712\u0519\u0001\u0000\u0000\u0000\u0712\u0522\u0001"+ + "\u0000\u0000\u0000\u0712\u052b\u0001\u0000\u0000\u0000\u0712\u0534\u0001"+ + "\u0000\u0000\u0000\u0712\u053d\u0001\u0000\u0000\u0000\u0712\u0544\u0001"+ + "\u0000\u0000\u0000\u0712\u054f\u0001\u0000\u0000\u0000\u0712\u0554\u0001"+ + "\u0000\u0000\u0000\u0712\u0559\u0001\u0000\u0000\u0000\u0712\u055e\u0001"+ + "\u0000\u0000\u0000\u0712\u0563\u0001\u0000\u0000\u0000\u0712\u056c\u0001"+ + "\u0000\u0000\u0000\u0712\u0575\u0001\u0000\u0000\u0000\u0712\u057e\u0001"+ + "\u0000\u0000\u0000\u0712\u0587\u0001\u0000\u0000\u0000\u0712\u058e\u0001"+ + "\u0000\u0000\u0000\u0712\u0597\u0001\u0000\u0000\u0000\u0712\u059e\u0001"+ + "\u0000\u0000\u0000\u0712\u05a1\u0001\u0000\u0000\u0000\u0712\u05aa\u0001"+ + "\u0000\u0000\u0000\u0712\u05b3\u0001\u0000\u0000\u0000\u0712\u05bc\u0001"+ + "\u0000\u0000\u0000\u0712\u05c5\u0001\u0000\u0000\u0000\u0712\u05d0\u0001"+ + "\u0000\u0000\u0000\u0712\u05db\u0001\u0000\u0000\u0000\u0712\u05e6\u0001"+ + "\u0000\u0000\u0000\u0712\u05f1\u0001\u0000\u0000\u0000\u0712\u05fa\u0001"+ + "\u0000\u0000\u0000\u0712\u0603\u0001\u0000\u0000\u0000\u0712\u0612\u0001"+ + "\u0000\u0000\u0000\u0712\u0621\u0001\u0000\u0000\u0000\u0712\u0628\u0001"+ + "\u0000\u0000\u0000\u0712\u0633\u0001\u0000\u0000\u0000\u0712\u063e\u0001"+ + "\u0000\u0000\u0000\u0712\u0649\u0001\u0000\u0000\u0000\u0712\u0654\u0001"+ + "\u0000\u0000\u0000\u0712\u0659\u0001\u0000\u0000\u0000\u0712\u065e\u0001"+ + "\u0000\u0000\u0000\u0712\u066b\u0001\u0000\u0000\u0000\u0712\u0678\u0001"+ + "\u0000\u0000\u0000\u0712\u067d\u0001\u0000\u0000\u0000\u0712\u0684\u0001"+ + "\u0000\u0000\u0000\u0712\u068b\u0001\u0000\u0000\u0000\u0712\u0698\u0001"+ + "\u0000\u0000\u0000\u0712\u069f\u0001\u0000\u0000\u0000\u0712\u06a6\u0001"+ + "\u0000\u0000\u0000\u0712\u06ad\u0001\u0000\u0000\u0000\u0712\u06b4\u0001"+ + "\u0000\u0000\u0000\u0712\u06bb\u0001\u0000\u0000\u0000\u0712\u06c2\u0001"+ + "\u0000\u0000\u0000\u0712\u06cb\u0001\u0000\u0000\u0000\u0712\u06d4\u0001"+ + "\u0000\u0000\u0000\u0712\u06da\u0001\u0000\u0000\u0000\u0712\u06e1\u0001"+ + "\u0000\u0000\u0000\u0712\u06e8\u0001\u0000\u0000\u0000\u0712\u06f9\u0001"+ + "\u0000\u0000\u0000\u0712\u070a\u0001\u0000\u0000\u0000\u0712\u070b\u0001"+ + "\u0000\u0000\u0000\u0712\u070c\u0001\u0000\u0000\u0000\u0712\u0710\u0001"+ + "\u0000\u0000\u0000\u0712\u0711\u0001\u0000\u0000\u0000\u0713\u0a22\u0001"+ + "\u0000\u0000\u0000\u0714\u0715\n\u00e9\u0000\u0000\u0715\u0716\u0007\u0000"+ + "\u0000\u0000\u0716\u0a21\u0003\u0002\u0001\u00ea\u0717\u0718\n\u00e8\u0000"+ + "\u0000\u0718\u0719\u0007\u0001\u0000\u0000\u0719\u0a21\u0003\u0002\u0001"+ + "\u00e9\u071a\u071b\n\u00e7\u0000\u0000\u071b\u071c\u0007\u0002\u0000\u0000"+ + "\u071c\u0a21\u0003\u0002\u0001\u00e8\u071d\u071e\n\u00e6\u0000\u0000\u071e"+ + "\u071f\u0007\u0003\u0000\u0000\u071f\u0a21\u0003\u0002\u0001\u00e7\u0720"+ + "\u0721\n\u00e5\u0000\u0000\u0721\u0722\u0007\u0004\u0000\u0000\u0722\u0a21"+ + "\u0003\u0002\u0001\u00e6\u0723\u0724\n\u00e4\u0000\u0000\u0724\u0725\u0007"+ + "\u0005\u0000\u0000\u0725\u0a21\u0003\u0002\u0001\u00e5\u0726\u0727\n\u00e3"+ + "\u0000\u0000\u0727\u0728\u0005\u0019\u0000\u0000\u0728\u0729\u0003\u0002"+ + "\u0001\u0000\u0729\u072a\u0005\u001a\u0000\u0000\u072a\u072b\u0003\u0002"+ + "\u0001\u00e4\u072b\u0a21\u0001\u0000\u0000\u0000\u072c\u072d\n\u0150\u0000"+ + "\u0000\u072d\u072e\u0005\u0001\u0000\u0000\u072e\u072f\u0005%\u0000\u0000"+ + "\u072f\u0730\u0005\u0002\u0000\u0000\u0730\u0a21\u0005\u0003\u0000\u0000"+ + "\u0731\u0732\n\u014f\u0000\u0000\u0732\u0733\u0005\u0001\u0000\u0000\u0733"+ + "\u0734\u0005&\u0000\u0000\u0734\u0735\u0005\u0002\u0000\u0000\u0735\u0a21"+ + "\u0005\u0003\u0000\u0000\u0736\u0737\n\u014e\u0000\u0000\u0737\u0738\u0005"+ + "\u0001\u0000\u0000\u0738\u0739\u0005(\u0000\u0000\u0739\u073a\u0005\u0002"+ + "\u0000\u0000\u073a\u0a21\u0005\u0003\u0000\u0000\u073b\u073c\n\u014d\u0000"+ + "\u0000\u073c\u073d\u0005\u0001\u0000\u0000\u073d\u073e\u0005)\u0000\u0000"+ + "\u073e\u073f\u0005\u0002\u0000\u0000\u073f\u0a21\u0005\u0003\u0000\u0000"+ + "\u0740\u0741\n\u014c\u0000\u0000\u0741\u0742\u0005\u0001\u0000\u0000\u0742"+ + "\u0743\u0005*\u0000\u0000\u0743\u0744\u0005\u0002\u0000\u0000\u0744\u0a21"+ + "\u0005\u0003\u0000\u0000\u0745\u0746\n\u014b\u0000\u0000\u0746\u0747\u0005"+ + "\u0001\u0000\u0000\u0747\u0748\u0005+\u0000\u0000\u0748\u0749\u0005\u0002"+ + "\u0000\u0000\u0749\u0a21\u0005\u0003\u0000\u0000\u074a\u074b\n\u014a\u0000"+ + "\u0000\u074b\u074c\u0005\u0001\u0000\u0000\u074c\u074d\u0005\'\u0000\u0000"+ + "\u074d\u074f\u0005\u0002\u0000\u0000\u074e\u0750\u0003\u0002\u0001\u0000"+ + "\u074f\u074e\u0001\u0000\u0000\u0000\u074f\u0750\u0001\u0000\u0000\u0000"+ + "\u0750\u0751\u0001\u0000\u0000\u0000\u0751\u0a21\u0005\u0003\u0000\u0000"+ + "\u0752\u0753\n\u0149\u0000\u0000\u0753\u0754\u0005\u0001\u0000\u0000\u0754"+ + "\u0755\u0005,\u0000\u0000\u0755\u0757\u0005\u0002\u0000\u0000\u0756\u0758"+ + "\u0003\u0002\u0001\u0000\u0757\u0756\u0001\u0000\u0000\u0000\u0757\u0758"+ + "\u0001\u0000\u0000\u0000\u0758\u0759\u0001\u0000\u0000\u0000\u0759\u0a21"+ + "\u0005\u0003\u0000\u0000\u075a\u075b\n\u0148\u0000\u0000\u075b\u075c\u0005"+ + "\u0001\u0000\u0000\u075c\u075d\u0005-\u0000\u0000\u075d\u075f\u0005\u0002"+ + "\u0000\u0000\u075e\u0760\u0003\u0002\u0001\u0000\u075f\u075e\u0001\u0000"+ + "\u0000\u0000\u075f\u0760\u0001\u0000\u0000\u0000\u0760\u0761\u0001\u0000"+ + "\u0000\u0000\u0761\u0a21\u0005\u0003\u0000\u0000\u0762\u0763\n\u0147\u0000"+ + "\u0000\u0763\u0764\u0005\u0001\u0000\u0000\u0764\u0765\u00055\u0000\u0000"+ + "\u0765\u0767\u0005\u0002\u0000\u0000\u0766\u0768\u0003\u0002\u0001\u0000"+ + "\u0767\u0766\u0001\u0000\u0000\u0000\u0767\u0768\u0001\u0000\u0000\u0000"+ + "\u0768\u0769\u0001\u0000\u0000\u0000\u0769\u0a21\u0005\u0003\u0000\u0000"+ + "\u076a\u076b\n\u0146\u0000\u0000\u076b\u076c\u0005\u0001\u0000\u0000\u076c"+ + "\u076d\u00056\u0000\u0000\u076d\u076f\u0005\u0002\u0000\u0000\u076e\u0770"+ + "\u0003\u0002\u0001\u0000\u076f\u076e\u0001\u0000\u0000\u0000\u076f\u0770"+ + "\u0001\u0000\u0000\u0000\u0770\u0771\u0001\u0000\u0000\u0000\u0771\u0a21"+ + "\u0005\u0003\u0000\u0000\u0772\u0773\n\u0145\u0000\u0000\u0773\u0774\u0005"+ + "\u0001\u0000\u0000\u0774\u0775\u00057\u0000\u0000\u0775\u0777\u0005\u0002"+ + "\u0000\u0000\u0776\u0778\u0003\u0002\u0001\u0000\u0777\u0776\u0001\u0000"+ + "\u0000\u0000\u0777\u0778\u0001\u0000\u0000\u0000\u0778\u0779\u0001\u0000"+ + "\u0000\u0000\u0779\u0a21\u0005\u0003\u0000\u0000\u077a\u077b\n\u0144\u0000"+ + "\u0000\u077b\u077c\u0005\u0001\u0000\u0000\u077c\u077d\u00058\u0000\u0000"+ + "\u077d\u077f\u0005\u0002\u0000\u0000\u077e\u0780\u0003\u0002\u0001\u0000"+ + "\u077f\u077e\u0001\u0000\u0000\u0000\u077f\u0780\u0001\u0000\u0000\u0000"+ + "\u0780\u0781\u0001\u0000\u0000\u0000\u0781\u0a21\u0005\u0003\u0000\u0000"+ + "\u0782\u0783\n\u0143\u0000\u0000\u0783\u0784\u0005\u0001\u0000\u0000\u0784"+ + "\u0785\u00059\u0000\u0000\u0785\u0786\u0005\u0002\u0000\u0000\u0786\u0a21"+ + "\u0005\u0003\u0000\u0000\u0787\u0788\n\u0142\u0000\u0000\u0788\u0789\u0005"+ + "\u0001\u0000\u0000\u0789\u078a\u0005:\u0000\u0000\u078a\u078c\u0005\u0002"+ + "\u0000\u0000\u078b\u078d\u0003\u0002\u0001\u0000\u078c\u078b\u0001\u0000"+ + "\u0000\u0000\u078c\u078d\u0001\u0000\u0000\u0000\u078d\u078e\u0001\u0000"+ + "\u0000\u0000\u078e\u0a21\u0005\u0003\u0000\u0000\u078f\u0790\n\u0141\u0000"+ + "\u0000\u0790\u0791\u0005\u0001\u0000\u0000\u0791\u0792\u0005;\u0000\u0000"+ + "\u0792\u0794\u0005\u0002\u0000\u0000\u0793\u0795\u0003\u0002\u0001\u0000"+ + "\u0794\u0793\u0001\u0000\u0000\u0000\u0794\u0795\u0001\u0000\u0000\u0000"+ + "\u0795\u0796\u0001\u0000\u0000\u0000\u0796\u0a21\u0005\u0003\u0000\u0000"+ + "\u0797\u0798\n\u0140\u0000\u0000\u0798\u0799\u0005\u0001\u0000\u0000\u0799"+ + "\u079a\u0005<\u0000\u0000\u079a\u079b\u0005\u0002\u0000\u0000\u079b\u0a21"+ + "\u0005\u0003\u0000\u0000\u079c\u079d\n\u013f\u0000\u0000\u079d\u079e\u0005"+ + "\u0001\u0000\u0000\u079e\u079f\u0005=\u0000\u0000\u079f\u07a1\u0005\u0002"+ + "\u0000\u0000\u07a0\u07a2\u0003\u0002\u0001\u0000\u07a1\u07a0\u0001\u0000"+ + "\u0000\u0000\u07a1\u07a2\u0001\u0000\u0000\u0000\u07a2\u07a3\u0001\u0000"+ + "\u0000\u0000\u07a3\u0a21\u0005\u0003\u0000\u0000\u07a4\u07a5\n\u013e\u0000"+ + "\u0000\u07a5\u07a6\u0005\u0001\u0000\u0000\u07a6\u07a7\u0005>\u0000\u0000"+ + "\u07a7\u07a9\u0005\u0002\u0000\u0000\u07a8\u07aa\u0003\u0002\u0001\u0000"+ + "\u07a9\u07a8\u0001\u0000\u0000\u0000\u07a9\u07aa\u0001\u0000\u0000\u0000"+ + "\u07aa\u07ab\u0001\u0000\u0000\u0000\u07ab\u0a21\u0005\u0003\u0000\u0000"+ + "\u07ac\u07ad\n\u013d\u0000\u0000\u07ad\u07ae\u0005\u0001\u0000\u0000\u07ae"+ + "\u07af\u0005?\u0000\u0000\u07af\u07b0\u0005\u0002\u0000\u0000\u07b0\u0a21"+ + "\u0005\u0003\u0000\u0000\u07b1\u07b2\n\u013c\u0000\u0000\u07b2\u07b3\u0005"+ + "\u0001\u0000\u0000\u07b3\u07b4\u0005@\u0000\u0000\u07b4\u07b6\u0005\u0002"+ + "\u0000\u0000\u07b5\u07b7\u0003\u0002\u0001\u0000\u07b6\u07b5\u0001\u0000"+ + "\u0000\u0000\u07b6\u07b7\u0001\u0000\u0000\u0000\u07b7\u07b8\u0001\u0000"+ + "\u0000\u0000\u07b8\u0a21\u0005\u0003\u0000\u0000\u07b9\u07ba\n\u013b\u0000"+ + "\u0000\u07ba\u07bb\u0005\u0001\u0000\u0000\u07bb\u07bc\u0005G\u0000\u0000"+ + "\u07bc\u07bd\u0005\u0002\u0000\u0000\u07bd\u0a21\u0005\u0003\u0000\u0000"+ + "\u07be\u07bf\n\u013a\u0000\u0000\u07bf\u07c0\u0005\u0001\u0000\u0000\u07c0"+ + "\u07c1\u0005p\u0000\u0000\u07c1\u07c2\u0005\u0002\u0000\u0000\u07c2\u0a21"+ + "\u0005\u0003\u0000\u0000\u07c3\u07c4\n\u0139\u0000\u0000\u07c4\u07c5\u0005"+ + "\u0001\u0000\u0000\u07c5\u07c6\u0005q\u0000\u0000\u07c6\u07c7\u0005\u0002"+ + "\u0000\u0000\u07c7\u0a21\u0005\u0003\u0000\u0000\u07c8\u07c9\n\u0138\u0000"+ + "\u0000\u07c9\u07ca\u0005\u0001\u0000\u0000\u07ca\u07cb\u0005r\u0000\u0000"+ + "\u07cb\u07cc\u0005\u0002\u0000\u0000\u07cc\u0a21\u0005\u0003\u0000\u0000"+ + "\u07cd\u07ce\n\u0137\u0000\u0000\u07ce\u07cf\u0005\u0001\u0000\u0000\u07cf"+ + "\u07d0\u0005s\u0000\u0000\u07d0\u07d1\u0005\u0002\u0000\u0000\u07d1\u0a21"+ + "\u0005\u0003\u0000\u0000\u07d2\u07d3\n\u0136\u0000\u0000\u07d3\u07d4\u0005"+ + "\u0001\u0000\u0000\u07d4\u07d5\u0005t\u0000\u0000\u07d5\u07d6\u0005\u0002"+ + "\u0000\u0000\u07d6\u0a21\u0005\u0003\u0000\u0000\u07d7\u07d8\n\u0135\u0000"+ + "\u0000\u07d8\u07d9\u0005\u0001\u0000\u0000\u07d9\u07da\u0005u\u0000\u0000"+ + "\u07da\u07e3\u0005\u0002\u0000\u0000\u07db\u07e0\u0003\u0002\u0001\u0000"+ + "\u07dc\u07dd\u0005\u0004\u0000\u0000\u07dd\u07df\u0003\u0002\u0001\u0000"+ + "\u07de\u07dc\u0001\u0000\u0000\u0000\u07df\u07e2\u0001\u0000\u0000\u0000"+ + "\u07e0\u07de\u0001\u0000\u0000\u0000\u07e0\u07e1\u0001\u0000\u0000\u0000"+ + "\u07e1\u07e4\u0001\u0000\u0000\u0000\u07e2\u07e0\u0001\u0000\u0000\u0000"+ + "\u07e3\u07db\u0001\u0000\u0000\u0000\u07e3\u07e4\u0001\u0000\u0000\u0000"+ + "\u07e4\u07e5\u0001\u0000\u0000\u0000\u07e5\u0a21\u0005\u0003\u0000\u0000"+ + "\u07e6\u07e7\n\u0134\u0000\u0000\u07e7\u07e8\u0005\u0001\u0000\u0000\u07e8"+ + "\u07e9\u0005v\u0000\u0000\u07e9\u07ea\u0005\u0002\u0000\u0000\u07ea\u07eb"+ + "\u0003\u0002\u0001\u0000\u07eb\u07ec\u0005\u0003\u0000\u0000\u07ec\u0a21"+ + "\u0001\u0000\u0000\u0000\u07ed\u07ee\n\u0133\u0000\u0000\u07ee\u07ef\u0005"+ + "\u0001\u0000\u0000\u07ef\u07f0\u0005w\u0000\u0000\u07f0\u07f1\u0005\u0002"+ + "\u0000\u0000\u07f1\u07f4\u0003\u0002\u0001\u0000\u07f2\u07f3\u0005\u0004"+ + "\u0000\u0000\u07f3\u07f5\u0003\u0002\u0001\u0000\u07f4\u07f2\u0001\u0000"+ + "\u0000\u0000\u07f4\u07f5\u0001\u0000\u0000\u0000\u07f5\u07f6\u0001\u0000"+ + "\u0000\u0000\u07f6\u07f7\u0005\u0003\u0000\u0000\u07f7\u0a21\u0001\u0000"+ + "\u0000\u0000\u07f8\u07f9\n\u0132\u0000\u0000\u07f9\u07fa\u0005\u0001\u0000"+ + "\u0000\u07fa\u07fb\u0005y\u0000\u0000\u07fb\u07fd\u0005\u0002\u0000\u0000"+ + "\u07fc\u07fe\u0003\u0002\u0001\u0000\u07fd\u07fc\u0001\u0000\u0000\u0000"+ + "\u07fd\u07fe\u0001\u0000\u0000\u0000\u07fe\u07ff\u0001\u0000\u0000\u0000"+ + "\u07ff\u0a21\u0005\u0003\u0000\u0000\u0800\u0801\n\u0131\u0000\u0000\u0801"+ + "\u0802\u0005\u0001\u0000\u0000\u0802\u0803\u0005z\u0000\u0000\u0803\u0804"+ + "\u0005\u0002\u0000\u0000\u0804\u0a21\u0005\u0003\u0000\u0000\u0805\u0806"+ + "\n\u0130\u0000\u0000\u0806\u0807\u0005\u0001\u0000\u0000\u0807\u0808\u0005"+ + "{\u0000\u0000\u0808\u0809\u0005\u0002\u0000\u0000\u0809\u0a21\u0005\u0003"+ + "\u0000\u0000\u080a\u080b\n\u012f\u0000\u0000\u080b\u080c\u0005\u0001\u0000"+ + "\u0000\u080c\u080d\u0005|\u0000\u0000\u080d\u080e\u0005\u0002\u0000\u0000"+ + "\u080e\u080f\u0003\u0002\u0001\u0000\u080f\u0810\u0005\u0004\u0000\u0000"+ + "\u0810\u0811\u0003\u0002\u0001\u0000\u0811\u0812\u0005\u0003\u0000\u0000"+ + "\u0812\u0a21\u0001\u0000\u0000\u0000\u0813\u0814\n\u012e\u0000\u0000\u0814"+ + "\u0815\u0005\u0001\u0000\u0000\u0815\u0816\u0005}\u0000\u0000\u0816\u0817"+ + "\u0005\u0002\u0000\u0000\u0817\u0a21\u0005\u0003\u0000\u0000\u0818\u0819"+ + "\n\u012d\u0000\u0000\u0819\u081a\u0005\u0001\u0000\u0000\u081a\u081b\u0005"+ + "~\u0000\u0000\u081b\u081c\u0005\u0002\u0000\u0000\u081c\u081d\u0003\u0002"+ + "\u0001\u0000\u081d\u081e\u0005\u0004\u0000\u0000\u081e\u0821\u0003\u0002"+ + "\u0001\u0000\u081f\u0820\u0005\u0004\u0000\u0000\u0820\u0822\u0003\u0002"+ + "\u0001\u0000\u0821\u081f\u0001\u0000\u0000\u0000\u0821\u0822\u0001\u0000"+ + "\u0000\u0000\u0822\u0823\u0001\u0000\u0000\u0000\u0823\u0824\u0005\u0003"+ + "\u0000\u0000\u0824\u0a21\u0001\u0000\u0000\u0000\u0825\u0826\n\u012c\u0000"+ + "\u0000\u0826\u0827\u0005\u0001\u0000\u0000\u0827\u0828\u0005\u007f\u0000"+ + "\u0000\u0828\u0829\u0005\u0002\u0000\u0000\u0829\u082a\u0003\u0002\u0001"+ + "\u0000\u082a\u082b\u0005\u0003\u0000\u0000\u082b\u0a21\u0001\u0000\u0000"+ + "\u0000\u082c\u082d\n\u012b\u0000\u0000\u082d\u082e\u0005\u0001\u0000\u0000"+ + "\u082e\u082f\u0005\u0080\u0000\u0000\u082f\u0831\u0005\u0002\u0000\u0000"+ + "\u0830\u0832\u0003\u0002\u0001\u0000\u0831\u0830\u0001\u0000\u0000\u0000"+ + "\u0831\u0832\u0001\u0000\u0000\u0000\u0832\u0833\u0001\u0000\u0000\u0000"+ + "\u0833\u0a21\u0005\u0003\u0000\u0000\u0834\u0835\n\u012a\u0000\u0000\u0835"+ + "\u0836\u0005\u0001\u0000\u0000\u0836\u0837\u0005\u0081\u0000\u0000\u0837"+ + "\u0838\u0005\u0002\u0000\u0000\u0838\u0a21\u0005\u0003\u0000\u0000\u0839"+ + "\u083a\n\u0129\u0000\u0000\u083a\u083b\u0005\u0001\u0000\u0000\u083b\u083c"+ + "\u0005\u0082\u0000\u0000\u083c\u083d\u0005\u0002\u0000\u0000\u083d\u0840"+ + "\u0003\u0002\u0001\u0000\u083e\u083f\u0005\u0004\u0000\u0000\u083f\u0841"+ + "\u0003\u0002\u0001\u0000\u0840\u083e\u0001\u0000\u0000\u0000\u0840\u0841"+ + "\u0001\u0000\u0000\u0000\u0841\u0842\u0001\u0000\u0000\u0000\u0842\u0843"+ + "\u0005\u0003\u0000\u0000\u0843\u0a21\u0001\u0000\u0000\u0000\u0844\u0845"+ + "\n\u0128\u0000\u0000\u0845\u0846\u0005\u0001\u0000\u0000\u0846\u0847\u0005"+ + "\u0083\u0000\u0000\u0847\u0848\u0005\u0002\u0000\u0000\u0848\u0849\u0003"+ + "\u0002\u0001\u0000\u0849\u084a\u0005\u0004\u0000\u0000\u084a\u084d\u0003"+ + "\u0002\u0001\u0000\u084b\u084c\u0005\u0004\u0000\u0000\u084c\u084e\u0003"+ + "\u0002\u0001\u0000\u084d\u084b\u0001\u0000\u0000\u0000\u084d\u084e\u0001"+ + "\u0000\u0000\u0000\u084e\u084f\u0001\u0000\u0000\u0000\u084f\u0850\u0005"+ + "\u0003\u0000\u0000\u0850\u0a21\u0001\u0000\u0000\u0000\u0851\u0852\n\u0127"+ + "\u0000\u0000\u0852\u0853\u0005\u0001\u0000\u0000\u0853\u0854\u0005\u0084"+ + "\u0000\u0000\u0854\u0855\u0005\u0002\u0000\u0000\u0855\u0a21\u0005\u0003"+ + "\u0000\u0000\u0856\u0857\n\u0126\u0000\u0000\u0857\u0858\u0005\u0001\u0000"+ + "\u0000\u0858\u0859\u0005\u0085\u0000\u0000\u0859\u085a\u0005\u0002\u0000"+ + "\u0000\u085a\u085b\u0003\u0002\u0001\u0000\u085b\u085c\u0005\u0003\u0000"+ + "\u0000\u085c\u0a21\u0001\u0000\u0000\u0000\u085d\u085e\n\u0125\u0000\u0000"+ + "\u085e\u085f\u0005\u0001\u0000\u0000\u085f\u0860\u0005\u0086\u0000\u0000"+ + "\u0860\u0861\u0005\u0002\u0000\u0000\u0861\u0a21\u0005\u0003\u0000\u0000"+ + "\u0862\u0863\n\u0124\u0000\u0000\u0863\u0864\u0005\u0001\u0000\u0000\u0864"+ + "\u0865\u0005\u0087\u0000\u0000\u0865\u0866\u0005\u0002\u0000\u0000\u0866"+ + "\u0a21\u0005\u0003\u0000\u0000\u0867\u0868\n\u0123\u0000\u0000\u0868\u0869"+ + "\u0005\u0001\u0000\u0000\u0869\u086a\u0005\u0088\u0000\u0000\u086a\u086b"+ + "\u0005\u0002\u0000\u0000\u086b\u0a21\u0005\u0003\u0000\u0000\u086c\u086d"+ + "\n\u0122\u0000\u0000\u086d\u086e\u0005\u0001\u0000\u0000\u086e\u086f\u0005"+ + "\u0089\u0000\u0000\u086f\u0871\u0005\u0002\u0000\u0000\u0870\u0872\u0003"+ + "\u0002\u0001\u0000\u0871\u0870\u0001\u0000\u0000\u0000\u0871\u0872\u0001"+ + "\u0000\u0000\u0000\u0872\u0873\u0001\u0000\u0000\u0000\u0873\u0a21\u0005"+ + "\u0003\u0000\u0000\u0874\u0875\n\u0121\u0000\u0000\u0875\u0876\u0005\u0001"+ + "\u0000\u0000\u0876\u0877\u0005\u008a\u0000\u0000\u0877\u0878\u0005\u0002"+ + "\u0000\u0000\u0878\u0a21\u0005\u0003\u0000\u0000\u0879\u087a\n\u0120\u0000"+ + "\u0000\u087a\u087b\u0005\u0001\u0000\u0000\u087b\u087e\u0005\u008f\u0000"+ + "\u0000\u087c\u087d\u0005\u0002\u0000\u0000\u087d\u087f\u0005\u0003\u0000"+ + "\u0000\u087e\u087c\u0001\u0000\u0000\u0000\u087e\u087f\u0001\u0000\u0000"+ + "\u0000\u087f\u0a21\u0001\u0000\u0000\u0000\u0880\u0881\n\u011f\u0000\u0000"+ + "\u0881\u0882\u0005\u0001\u0000\u0000\u0882\u0885\u0005\u0090\u0000\u0000"+ + "\u0883\u0884\u0005\u0002\u0000\u0000\u0884\u0886\u0005\u0003\u0000\u0000"+ + "\u0885\u0883\u0001\u0000\u0000\u0000\u0885\u0886\u0001\u0000\u0000\u0000"+ + "\u0886\u0a21\u0001\u0000\u0000\u0000\u0887\u0888\n\u011e\u0000\u0000\u0888"+ + "\u0889\u0005\u0001\u0000\u0000\u0889\u088c\u0005\u0091\u0000\u0000\u088a"+ + "\u088b\u0005\u0002\u0000\u0000\u088b\u088d\u0005\u0003\u0000\u0000\u088c"+ + "\u088a\u0001\u0000\u0000\u0000\u088c\u088d\u0001\u0000\u0000\u0000\u088d"+ + "\u0a21\u0001\u0000\u0000\u0000\u088e\u088f\n\u011d\u0000\u0000\u088f\u0890"+ + "\u0005\u0001\u0000\u0000\u0890\u0893\u0005\u0092\u0000\u0000\u0891\u0892"+ + "\u0005\u0002\u0000\u0000\u0892\u0894\u0005\u0003\u0000\u0000\u0893\u0891"+ + "\u0001\u0000\u0000\u0000\u0893\u0894\u0001\u0000\u0000\u0000\u0894\u0a21"+ + "\u0001\u0000\u0000\u0000\u0895\u0896\n\u011c\u0000\u0000\u0896\u0897\u0005"+ + "\u0001\u0000\u0000\u0897\u089a\u0005\u0093\u0000\u0000\u0898\u0899\u0005"+ + "\u0002\u0000\u0000\u0899\u089b\u0005\u0003\u0000\u0000\u089a\u0898\u0001"+ + "\u0000\u0000\u0000\u089a\u089b\u0001\u0000\u0000\u0000\u089b\u0a21\u0001"+ + "\u0000\u0000\u0000\u089c\u089d\n\u011b\u0000\u0000\u089d\u089e\u0005\u0001"+ + "\u0000\u0000\u089e\u08a1\u0005\u0094\u0000\u0000\u089f\u08a0\u0005\u0002"+ + "\u0000\u0000\u08a0\u08a2\u0005\u0003\u0000\u0000\u08a1\u089f\u0001\u0000"+ + "\u0000\u0000\u08a1\u08a2\u0001\u0000\u0000\u0000\u08a2\u0a21\u0001\u0000"+ + "\u0000\u0000\u08a3\u08a4\n\u011a\u0000\u0000\u08a4\u08a5\u0005\u0001\u0000"+ + "\u0000\u08a5\u08a6\u0005\u00cd\u0000\u0000\u08a6\u08a7\u0005\u0002\u0000"+ + "\u0000\u08a7\u0a21\u0005\u0003\u0000\u0000\u08a8\u08a9\n\u0119\u0000\u0000"+ + "\u08a9\u08aa\u0005\u0001\u0000\u0000\u08aa\u08ab\u0005\u00ce\u0000\u0000"+ + "\u08ab\u08ac\u0005\u0002\u0000\u0000\u08ac\u0a21\u0005\u0003\u0000\u0000"+ + "\u08ad\u08ae\n\u0118\u0000\u0000\u08ae\u08af\u0005\u0001\u0000\u0000\u08af"+ + "\u08b0\u0005\u00cf\u0000\u0000\u08b0\u08b1\u0005\u0002\u0000\u0000\u08b1"+ + "\u0a21\u0005\u0003\u0000\u0000\u08b2\u08b3\n\u0117\u0000\u0000\u08b3\u08b4"+ + "\u0005\u0001\u0000\u0000\u08b4\u08b5\u0005\u00d0\u0000\u0000\u08b5\u08b6"+ + "\u0005\u0002\u0000\u0000\u08b6\u0a21\u0005\u0003\u0000\u0000\u08b7\u08b8"+ + "\n\u0116\u0000\u0000\u08b8\u08b9\u0005\u0001\u0000\u0000\u08b9\u08ba\u0005"+ + "\u00d1\u0000\u0000\u08ba\u08bc\u0005\u0002\u0000\u0000\u08bb\u08bd\u0003"+ + "\u0002\u0001\u0000\u08bc\u08bb\u0001\u0000\u0000\u0000\u08bc\u08bd\u0001"+ + "\u0000\u0000\u0000\u08bd\u08be\u0001\u0000\u0000\u0000\u08be\u0a21\u0005"+ + "\u0003\u0000\u0000\u08bf\u08c0\n\u0115\u0000\u0000\u08c0\u08c1\u0005\u0001"+ + "\u0000\u0000\u08c1\u08c2\u0005\u00d2\u0000\u0000\u08c2\u08c4\u0005\u0002"+ + "\u0000\u0000\u08c3\u08c5\u0003\u0002\u0001\u0000\u08c4\u08c3\u0001\u0000"+ + "\u0000\u0000\u08c4\u08c5\u0001\u0000\u0000\u0000\u08c5\u08c6\u0001\u0000"+ + "\u0000\u0000\u08c6\u0a21\u0005\u0003\u0000\u0000\u08c7\u08c8\n\u0114\u0000"+ + "\u0000\u08c8\u08c9\u0005\u0001\u0000\u0000\u08c9\u08ca\u0005\u00d3\u0000"+ + "\u0000\u08ca\u08cc\u0005\u0002\u0000\u0000\u08cb\u08cd\u0003\u0002\u0001"+ + "\u0000\u08cc\u08cb\u0001\u0000\u0000\u0000\u08cc\u08cd\u0001\u0000\u0000"+ + "\u0000\u08cd\u08ce\u0001\u0000\u0000\u0000\u08ce\u0a21\u0005\u0003\u0000"+ + "\u0000\u08cf\u08d0\n\u0113\u0000\u0000\u08d0\u08d1\u0005\u0001\u0000\u0000"+ + "\u08d1\u08d2\u0005\u00d4\u0000\u0000\u08d2\u08d4\u0005\u0002\u0000\u0000"+ + "\u08d3\u08d5\u0003\u0002\u0001\u0000\u08d4\u08d3\u0001\u0000\u0000\u0000"+ + "\u08d4\u08d5\u0001\u0000\u0000\u0000\u08d5\u08d6\u0001\u0000\u0000\u0000"+ + "\u08d6\u0a21\u0005\u0003\u0000\u0000\u08d7\u08d8\n\u0112\u0000\u0000\u08d8"+ + "\u08d9\u0005\u0001\u0000\u0000\u08d9\u08da\u0005\u00d5\u0000\u0000\u08da"+ + "\u08db\u0005\u0002\u0000\u0000\u08db\u08dc\u0003\u0002\u0001\u0000\u08dc"+ + "\u08dd\u0005\u0003\u0000\u0000\u08dd\u0a21\u0001\u0000\u0000\u0000\u08de"+ + "\u08df\n\u0111\u0000\u0000\u08df\u08e0\u0005\u0001\u0000\u0000\u08e0\u08e1"+ + "\u0005\u00d6\u0000\u0000\u08e1\u08e2\u0005\u0002\u0000\u0000\u08e2\u08e3"+ + "\u0003\u0002\u0001\u0000\u08e3\u08e4\u0005\u0004\u0000\u0000\u08e4\u08e5"+ + "\u0003\u0002\u0001\u0000\u08e5\u08e6\u0005\u0003\u0000\u0000\u08e6\u0a21"+ + "\u0001\u0000\u0000\u0000\u08e7\u08e8\n\u0110\u0000\u0000\u08e8\u08e9\u0005"+ + "\u0001\u0000\u0000\u08e9\u08ea\u0005\u00d7\u0000\u0000\u08ea\u08eb\u0005"+ + "\u0002\u0000\u0000\u08eb\u08ec\u0003\u0002\u0001\u0000\u08ec\u08ed\u0005"+ + "\u0003\u0000\u0000\u08ed\u0a21\u0001\u0000\u0000\u0000\u08ee\u08ef\n\u010f"+ + "\u0000\u0000\u08ef\u08f0\u0005\u0001\u0000\u0000\u08f0\u08f1\u0005\u00d9"+ + "\u0000\u0000\u08f1\u08f3\u0005\u0002\u0000\u0000\u08f2\u08f4\u0003\u0002"+ + "\u0001\u0000\u08f3\u08f2\u0001\u0000\u0000\u0000\u08f3\u08f4\u0001\u0000"+ + "\u0000\u0000\u08f4\u08f5\u0001\u0000\u0000\u0000\u08f5\u0a21\u0005\u0003"+ + "\u0000\u0000\u08f6\u08f7\n\u010e\u0000\u0000\u08f7\u08f8\u0005\u0001\u0000"+ + "\u0000\u08f8\u08f9\u0005\u00da\u0000\u0000\u08f9\u08fb\u0005\u0002\u0000"+ + "\u0000\u08fa\u08fc\u0003\u0002\u0001\u0000\u08fb\u08fa\u0001\u0000\u0000"+ + "\u0000\u08fb\u08fc\u0001\u0000\u0000\u0000\u08fc\u08fd\u0001\u0000\u0000"+ + "\u0000\u08fd\u0a21\u0005\u0003\u0000\u0000\u08fe\u08ff\n\u010d\u0000\u0000"+ + "\u08ff\u0900\u0005\u0001\u0000\u0000\u0900\u0901\u0005\u00db\u0000\u0000"+ + "\u0901\u0903\u0005\u0002\u0000\u0000\u0902\u0904\u0003\u0002\u0001\u0000"+ + "\u0903\u0902\u0001\u0000\u0000\u0000\u0903\u0904\u0001\u0000\u0000\u0000"+ + "\u0904\u0905\u0001\u0000\u0000\u0000\u0905\u0a21\u0005\u0003\u0000\u0000"+ + "\u0906\u0907\n\u010c\u0000\u0000\u0907\u0908\u0005\u0001\u0000\u0000\u0908"+ + "\u0909\u0005\u00dc\u0000\u0000\u0909\u090b\u0005\u0002\u0000\u0000\u090a"+ + "\u090c\u0003\u0002\u0001\u0000\u090b\u090a\u0001\u0000\u0000\u0000\u090b"+ + "\u090c\u0001\u0000\u0000\u0000\u090c\u090d\u0001\u0000\u0000\u0000\u090d"+ + "\u0a21\u0005\u0003\u0000\u0000\u090e\u090f\n\u010b\u0000\u0000\u090f\u0910"+ + "\u0005\u0001\u0000\u0000\u0910\u0911\u0005\u00dd\u0000\u0000\u0911\u0912"+ + "\u0005\u0002\u0000\u0000\u0912\u0915\u0003\u0002\u0001\u0000\u0913\u0914"+ + "\u0005\u0004\u0000\u0000\u0914\u0916\u0003\u0002\u0001\u0000\u0915\u0913"+ + "\u0001\u0000\u0000\u0000\u0915\u0916\u0001\u0000\u0000\u0000\u0916\u0917"+ + "\u0001\u0000\u0000\u0000\u0917\u0918\u0005\u0003\u0000\u0000\u0918\u0a21"+ + "\u0001\u0000\u0000\u0000\u0919\u091a\n\u010a\u0000\u0000\u091a\u091b\u0005"+ + "\u0001\u0000\u0000\u091b\u091c\u0005\u00de\u0000\u0000\u091c\u091d\u0005"+ + "\u0002\u0000\u0000\u091d\u0920\u0003\u0002\u0001\u0000\u091e\u091f\u0005"+ + "\u0004\u0000\u0000\u091f\u0921\u0003\u0002\u0001\u0000\u0920\u091e\u0001"+ + "\u0000\u0000\u0000\u0920\u0921\u0001\u0000\u0000\u0000\u0921\u0922\u0001"+ + "\u0000\u0000\u0000\u0922\u0923\u0005\u0003\u0000\u0000\u0923\u0a21\u0001"+ + "\u0000\u0000\u0000\u0924\u0925\n\u0109\u0000\u0000\u0925\u0926\u0005\u0001"+ + "\u0000\u0000\u0926\u0927\u0005\u00df\u0000\u0000\u0927\u0928\u0005\u0002"+ + "\u0000\u0000\u0928\u092b\u0003\u0002\u0001\u0000\u0929\u092a\u0005\u0004"+ + "\u0000\u0000\u092a\u092c\u0003\u0002\u0001\u0000\u092b\u0929\u0001\u0000"+ + "\u0000\u0000\u092b\u092c\u0001\u0000\u0000\u0000\u092c\u092d\u0001\u0000"+ + "\u0000\u0000\u092d\u092e\u0005\u0003\u0000\u0000\u092e\u0a21\u0001\u0000"+ + "\u0000\u0000\u092f\u0930\n\u0108\u0000\u0000\u0930\u0931\u0005\u0001\u0000"+ + "\u0000\u0931\u0932\u0005\u00e0\u0000\u0000\u0932\u0933\u0005\u0002\u0000"+ + "\u0000\u0933\u0936\u0003\u0002\u0001\u0000\u0934\u0935\u0005\u0004\u0000"+ + "\u0000\u0935\u0937\u0003\u0002\u0001\u0000\u0936\u0934\u0001\u0000\u0000"+ + "\u0000\u0936\u0937\u0001\u0000\u0000\u0000\u0937\u0938\u0001\u0000\u0000"+ + "\u0000\u0938\u0939\u0005\u0003\u0000\u0000\u0939\u0a21\u0001\u0000\u0000"+ + "\u0000\u093a\u093b\n\u0107\u0000\u0000\u093b\u093c\u0005"; private static final String _serializedATNSegment1 = - "\u0a59\u0005\u0003\u0000\u0000\u0927\u0928\n\u0112\u0000\u0000\u0928\u0929"+ - "\u0005\u0001\u0000\u0000\u0929\u092a\u0005\u00dd\u0000\u0000\u092a\u092c"+ - "\u0005\u0002\u0000\u0000\u092b\u092d\u0003\u0002\u0001\u0000\u092c\u092b"+ - "\u0001\u0000\u0000\u0000\u092c\u092d\u0001\u0000\u0000\u0000\u092d\u092e"+ - "\u0001\u0000\u0000\u0000\u092e\u0a59\u0005\u0003\u0000\u0000\u092f\u0930"+ - "\n\u0111\u0000\u0000\u0930\u0931\u0005\u0001\u0000\u0000\u0931\u0932\u0005"+ - "\u00de\u0000\u0000\u0932\u0933\u0005\u0002\u0000\u0000\u0933\u0936\u0003"+ - "\u0002\u0001\u0000\u0934\u0935\u0005\u0004\u0000\u0000\u0935\u0937\u0003"+ - "\u0002\u0001\u0000\u0936\u0934\u0001\u0000\u0000\u0000\u0936\u0937\u0001"+ - "\u0000\u0000\u0000\u0937\u0938\u0001\u0000\u0000\u0000\u0938\u0939\u0005"+ - "\u0003\u0000\u0000\u0939\u0a59\u0001\u0000\u0000\u0000\u093a\u093b\n\u0110"+ - "\u0000\u0000\u093b\u093c\u0005\u0001\u0000\u0000\u093c\u093d\u0005\u00df"+ - "\u0000\u0000\u093d\u093e\u0005\u0002\u0000\u0000\u093e\u0941\u0003\u0002"+ - "\u0001\u0000\u093f\u0940\u0005\u0004\u0000\u0000\u0940\u0942\u0003\u0002"+ - "\u0001\u0000\u0941\u093f\u0001\u0000\u0000\u0000\u0941\u0942\u0001\u0000"+ - "\u0000\u0000\u0942\u0943\u0001\u0000\u0000\u0000\u0943\u0944\u0005\u0003"+ - "\u0000\u0000\u0944\u0a59\u0001\u0000\u0000\u0000\u0945\u0946\n\u010f\u0000"+ - "\u0000\u0946\u0947\u0005\u0001\u0000\u0000\u0947\u0948\u0005\u00e0\u0000"+ - "\u0000\u0948\u0949\u0005\u0002\u0000\u0000\u0949\u094c\u0003\u0002\u0001"+ - "\u0000\u094a\u094b\u0005\u0004\u0000\u0000\u094b\u094d\u0003\u0002\u0001"+ - "\u0000\u094c\u094a\u0001\u0000\u0000\u0000\u094c\u094d\u0001\u0000\u0000"+ - "\u0000\u094d\u094e\u0001\u0000\u0000\u0000\u094e\u094f\u0005\u0003\u0000"+ - "\u0000\u094f\u0a59\u0001\u0000\u0000\u0000\u0950\u0951\n\u010e\u0000\u0000"+ - "\u0951\u0952\u0005\u0001\u0000\u0000\u0952\u0953\u0005\u00e1\u0000\u0000"+ - "\u0953\u0954\u0005\u0002\u0000\u0000\u0954\u0957\u0003\u0002\u0001\u0000"+ - "\u0955\u0956\u0005\u0004\u0000\u0000\u0956\u0958\u0003\u0002\u0001\u0000"+ - "\u0957\u0955\u0001\u0000\u0000\u0000\u0957\u0958\u0001\u0000\u0000\u0000"+ - "\u0958\u0959\u0001\u0000\u0000\u0000\u0959\u095a\u0005\u0003\u0000\u0000"+ - "\u095a\u0a59\u0001\u0000\u0000\u0000\u095b\u095c\n\u010d\u0000\u0000\u095c"+ - "\u095d\u0005\u0001\u0000\u0000\u095d\u095e\u0005\u00e2\u0000\u0000\u095e"+ - "\u0960\u0005\u0002\u0000\u0000\u095f\u0961\u0003\u0002\u0001\u0000\u0960"+ - "\u095f\u0001\u0000\u0000\u0000\u0960\u0961\u0001\u0000\u0000\u0000\u0961"+ - "\u0962\u0001\u0000\u0000\u0000\u0962\u0a59\u0005\u0003\u0000\u0000\u0963"+ - "\u0964\n\u010c\u0000\u0000\u0964\u0965\u0005\u0001\u0000\u0000\u0965\u0966"+ - "\u0005\u00e3\u0000\u0000\u0966\u0968\u0005\u0002\u0000\u0000\u0967\u0969"+ - "\u0003\u0002\u0001\u0000\u0968\u0967\u0001\u0000\u0000\u0000\u0968\u0969"+ - "\u0001\u0000\u0000\u0000\u0969\u096a\u0001\u0000\u0000\u0000\u096a\u0a59"+ - "\u0005\u0003\u0000\u0000\u096b\u096c\n\u010b\u0000\u0000\u096c\u096d\u0005"+ - "\u0001\u0000\u0000\u096d\u096e\u0005\u00e4\u0000\u0000\u096e\u096f\u0005"+ - "\u0002\u0000\u0000\u096f\u0976\u0003\u0002\u0001\u0000\u0970\u0971\u0005"+ - "\u0004\u0000\u0000\u0971\u0974\u0003\u0002\u0001\u0000\u0972\u0973\u0005"+ - "\u0004\u0000\u0000\u0973\u0975\u0003\u0002\u0001\u0000\u0974\u0972\u0001"+ - "\u0000\u0000\u0000\u0974\u0975\u0001\u0000\u0000\u0000\u0975\u0977\u0001"+ - "\u0000\u0000\u0000\u0976\u0970\u0001\u0000\u0000\u0000\u0976\u0977\u0001"+ - "\u0000\u0000\u0000\u0977\u0978\u0001\u0000\u0000\u0000\u0978\u0979\u0005"+ - "\u0003\u0000\u0000\u0979\u0a59\u0001\u0000\u0000\u0000\u097a\u097b\n\u010a"+ - "\u0000\u0000\u097b\u097c\u0005\u0001\u0000\u0000\u097c\u097d\u0005\u00e5"+ - "\u0000\u0000\u097d\u097e\u0005\u0002\u0000\u0000\u097e\u0985\u0003\u0002"+ - "\u0001\u0000\u097f\u0980\u0005\u0004\u0000\u0000\u0980\u0983\u0003\u0002"+ - "\u0001\u0000\u0981\u0982\u0005\u0004\u0000\u0000\u0982\u0984\u0003\u0002"+ - "\u0001\u0000\u0983\u0981\u0001\u0000\u0000\u0000\u0983\u0984\u0001\u0000"+ - "\u0000\u0000\u0984\u0986\u0001\u0000\u0000\u0000\u0985\u097f\u0001\u0000"+ - "\u0000\u0000\u0985\u0986\u0001\u0000\u0000\u0000\u0986\u0987\u0001\u0000"+ - "\u0000\u0000\u0987\u0988\u0005\u0003\u0000\u0000\u0988\u0a59\u0001\u0000"+ - "\u0000\u0000\u0989\u098a\n\u0109\u0000\u0000\u098a\u098b\u0005\u0001\u0000"+ - "\u0000\u098b\u098c\u0005\u00e6\u0000\u0000\u098c\u098d\u0005\u0002\u0000"+ - "\u0000\u098d\u098e\u0003\u0002\u0001\u0000\u098e\u098f\u0005\u0003\u0000"+ - "\u0000\u098f\u0a59\u0001\u0000\u0000\u0000\u0990\u0991\n\u0108\u0000\u0000"+ - "\u0991\u0992\u0005\u0001\u0000\u0000\u0992\u0993\u0005\u00e7\u0000\u0000"+ - "\u0993\u0994\u0005\u0002\u0000\u0000\u0994\u0999\u0003\u0002\u0001\u0000"+ - "\u0995\u0996\u0005\u0004\u0000\u0000\u0996\u0998\u0003\u0002\u0001\u0000"+ - "\u0997\u0995\u0001\u0000\u0000\u0000\u0998\u099b\u0001\u0000\u0000\u0000"+ - "\u0999\u0997\u0001\u0000\u0000\u0000\u0999\u099a\u0001\u0000\u0000\u0000"+ - "\u099a\u099c\u0001\u0000\u0000\u0000\u099b\u0999\u0001\u0000\u0000\u0000"+ - "\u099c\u099d\u0005\u0003\u0000\u0000\u099d\u0a59\u0001\u0000\u0000\u0000"+ - "\u099e\u099f\n\u0107\u0000\u0000\u099f\u09a0\u0005\u0001\u0000\u0000\u09a0"+ - "\u09a1\u0005\u00e8\u0000\u0000\u09a1\u09a2\u0005\u0002\u0000\u0000\u09a2"+ - "\u09a5\u0003\u0002\u0001\u0000\u09a3\u09a4\u0005\u0004\u0000\u0000\u09a4"+ - "\u09a6\u0003\u0002\u0001\u0000\u09a5\u09a3\u0001\u0000\u0000\u0000\u09a5"+ - "\u09a6\u0001\u0000\u0000\u0000\u09a6\u09a7\u0001\u0000\u0000\u0000\u09a7"+ - "\u09a8\u0005\u0003\u0000\u0000\u09a8\u0a59\u0001\u0000\u0000\u0000\u09a9"+ - "\u09aa\n\u0106\u0000\u0000\u09aa\u09ab\u0005\u0001\u0000\u0000\u09ab\u09ac"+ - "\u0005\u00e9\u0000\u0000\u09ac\u09ad\u0005\u0002\u0000\u0000\u09ad\u09b0"+ - "\u0003\u0002\u0001\u0000\u09ae\u09af\u0005\u0004\u0000\u0000\u09af\u09b1"+ - "\u0003\u0002\u0001\u0000\u09b0\u09ae\u0001\u0000\u0000\u0000\u09b0\u09b1"+ - "\u0001\u0000\u0000\u0000\u09b1\u09b2\u0001\u0000\u0000\u0000\u09b2\u09b3"+ - "\u0005\u0003\u0000\u0000\u09b3\u0a59\u0001\u0000\u0000\u0000\u09b4\u09b5"+ - "\n\u0105\u0000\u0000\u09b5\u09b6\u0005\u0001\u0000\u0000\u09b6\u09b7\u0005"+ - "\u00ea\u0000\u0000\u09b7\u09b8\u0005\u0002\u0000\u0000\u09b8\u09bb\u0003"+ - "\u0002\u0001\u0000\u09b9\u09ba\u0005\u0004\u0000\u0000\u09ba\u09bc\u0003"+ - "\u0002\u0001\u0000\u09bb\u09b9\u0001\u0000\u0000\u0000\u09bb\u09bc\u0001"+ - "\u0000\u0000\u0000\u09bc\u09bd\u0001\u0000\u0000\u0000\u09bd\u09be\u0005"+ - "\u0003\u0000\u0000\u09be\u0a59\u0001\u0000\u0000\u0000\u09bf\u09c0\n\u0104"+ - "\u0000\u0000\u09c0\u09c1\u0005\u0001\u0000\u0000\u09c1\u09c2\u0005\u00eb"+ - "\u0000\u0000\u09c2\u09c3\u0005\u0002\u0000\u0000\u09c3\u0a59\u0005\u0003"+ - "\u0000\u0000\u09c4\u09c5\n\u0103\u0000\u0000\u09c5\u09c6\u0005\u0001\u0000"+ - "\u0000\u09c6\u09c7\u0005\u00ec\u0000\u0000\u09c7\u09c8\u0005\u0002\u0000"+ - "\u0000\u09c8\u0a59\u0005\u0003\u0000\u0000\u09c9\u09ca\n\u0102\u0000\u0000"+ - "\u09ca\u09cb\u0005\u0001\u0000\u0000\u09cb\u09cc\u0005\u00ed\u0000\u0000"+ - "\u09cc\u09cd\u0005\u0002\u0000\u0000\u09cd\u09d0\u0003\u0002\u0001\u0000"+ - "\u09ce\u09cf\u0005\u0004\u0000\u0000\u09cf\u09d1\u0003\u0002\u0001\u0000"+ - "\u09d0\u09ce\u0001\u0000\u0000\u0000\u09d0\u09d1\u0001\u0000\u0000\u0000"+ - "\u09d1\u09d2\u0001\u0000\u0000\u0000\u09d2\u09d3\u0005\u0003\u0000\u0000"+ - "\u09d3\u0a59\u0001\u0000\u0000\u0000\u09d4\u09d5\n\u0101\u0000\u0000\u09d5"+ - "\u09d6\u0005\u0001\u0000\u0000\u09d6\u09d7\u0005\u00ee\u0000\u0000\u09d7"+ - "\u09d8\u0005\u0002\u0000\u0000\u09d8\u09db\u0003\u0002\u0001\u0000\u09d9"+ - "\u09da\u0005\u0004\u0000\u0000\u09da\u09dc\u0003\u0002\u0001\u0000\u09db"+ - "\u09d9\u0001\u0000\u0000\u0000\u09db\u09dc\u0001\u0000\u0000\u0000\u09dc"+ - "\u09dd\u0001\u0000\u0000\u0000\u09dd\u09de\u0005\u0003\u0000\u0000\u09de"+ - "\u0a59\u0001\u0000\u0000\u0000\u09df\u09e0\n\u0100\u0000\u0000\u09e0\u09e1"+ - "\u0005\u0001\u0000\u0000\u09e1\u09e2\u0005\u00ef\u0000\u0000\u09e2\u09e3"+ - "\u0005\u0002\u0000\u0000\u09e3\u0a59\u0005\u0003\u0000\u0000\u09e4\u09e5"+ - "\n\u00ff\u0000\u0000\u09e5\u09e6\u0005\u0001\u0000\u0000\u09e6\u09e7\u0005"+ - "\u00f0\u0000\u0000\u09e7\u09e8\u0005\u0002\u0000\u0000\u09e8\u09e9\u0003"+ - "\u0002\u0001\u0000\u09e9\u09ea\u0005\u0004\u0000\u0000\u09ea\u09ed\u0003"+ - "\u0002\u0001\u0000\u09eb\u09ec\u0005\u0004\u0000\u0000\u09ec\u09ee\u0003"+ - "\u0002\u0001\u0000\u09ed\u09eb\u0001\u0000\u0000\u0000\u09ed\u09ee\u0001"+ - "\u0000\u0000\u0000\u09ee\u09ef\u0001\u0000\u0000\u0000\u09ef\u09f0\u0005"+ - "\u0003\u0000\u0000\u09f0\u0a59\u0001\u0000\u0000\u0000\u09f1\u09f2\n\u00fe"+ - "\u0000\u0000\u09f2\u09f3\u0005\u0001\u0000\u0000\u09f3\u09f4\u0005\u00f1"+ - "\u0000\u0000\u09f4\u09f5\u0005\u0002\u0000\u0000\u09f5\u09f6\u0003\u0002"+ - "\u0001\u0000\u09f6\u09f7\u0005\u0004\u0000\u0000\u09f7\u09f8\u0003\u0002"+ - "\u0001\u0000\u09f8\u09f9\u0005\u0003\u0000\u0000\u09f9\u0a59\u0001\u0000"+ - "\u0000\u0000\u09fa\u09fb\n\u00fd\u0000\u0000\u09fb\u09fc\u0005\u0001\u0000"+ - "\u0000\u09fc\u09fd\u0005\u00fe\u0000\u0000\u09fd\u0a06\u0005\u0002\u0000"+ - "\u0000\u09fe\u0a03\u0003\u0002\u0001\u0000\u09ff\u0a00\u0005\u0004\u0000"+ - "\u0000\u0a00\u0a02\u0003\u0002\u0001\u0000\u0a01\u09ff\u0001\u0000\u0000"+ - "\u0000\u0a02\u0a05\u0001\u0000\u0000\u0000\u0a03\u0a01\u0001\u0000\u0000"+ - "\u0000\u0a03\u0a04\u0001\u0000\u0000\u0000\u0a04\u0a07\u0001\u0000\u0000"+ - "\u0000\u0a05\u0a03\u0001\u0000\u0000\u0000\u0a06\u09fe\u0001\u0000\u0000"+ - "\u0000\u0a06\u0a07\u0001\u0000\u0000\u0000\u0a07\u0a08\u0001\u0000\u0000"+ - "\u0000\u0a08\u0a59\u0005\u0003\u0000\u0000\u0a09\u0a0a\n\u00fc\u0000\u0000"+ - "\u0a0a\u0a0b\u0005\u0001\u0000\u0000\u0a0b\u0a0c\u0005\u00f4\u0000\u0000"+ - "\u0a0c\u0a0d\u0005\u0002\u0000\u0000\u0a0d\u0a0e\u0003\u0002\u0001\u0000"+ - "\u0a0e\u0a0f\u0005\u0003\u0000\u0000\u0a0f\u0a59\u0001\u0000\u0000\u0000"+ - "\u0a10\u0a11\n\u00fb\u0000\u0000\u0a11\u0a12\u0005\u0001\u0000\u0000\u0a12"+ - "\u0a13\u0005\u00f5\u0000\u0000\u0a13\u0a14\u0005\u0002\u0000\u0000\u0a14"+ - "\u0a15\u0003\u0002\u0001\u0000\u0a15\u0a16\u0005\u0003\u0000\u0000\u0a16"+ - "\u0a59\u0001\u0000\u0000\u0000\u0a17\u0a18\n\u00fa\u0000\u0000\u0a18\u0a19"+ - "\u0005\u0001\u0000\u0000\u0a19\u0a1a\u0005\u00f6\u0000\u0000\u0a1a\u0a1b"+ - "\u0005\u0002\u0000\u0000\u0a1b\u0a1c\u0003\u0002\u0001\u0000\u0a1c\u0a1d"+ - "\u0005\u0003\u0000\u0000\u0a1d\u0a59\u0001\u0000\u0000\u0000\u0a1e\u0a1f"+ - "\n\u00f9\u0000\u0000\u0a1f\u0a20\u0005\u0001\u0000\u0000\u0a20\u0a21\u0005"+ - "\u00f7\u0000\u0000\u0a21\u0a22\u0005\u0002\u0000\u0000\u0a22\u0a23\u0003"+ - "\u0002\u0001\u0000\u0a23\u0a24\u0005\u0003\u0000\u0000\u0a24\u0a59\u0001"+ - "\u0000\u0000\u0000\u0a25\u0a26\n\u00f8\u0000\u0000\u0a26\u0a27\u0005\u0001"+ - "\u0000\u0000\u0a27\u0a28\u0005\u00f8\u0000\u0000\u0a28\u0a29\u0005\u0002"+ - "\u0000\u0000\u0a29\u0a2a\u0003\u0002\u0001\u0000\u0a2a\u0a2b\u0005\u0003"+ - "\u0000\u0000\u0a2b\u0a59\u0001\u0000\u0000\u0000\u0a2c\u0a2d\n\u00f7\u0000"+ - "\u0000\u0a2d\u0a2e\u0005\u0001\u0000\u0000\u0a2e\u0a2f\u0005\u00f9\u0000"+ - "\u0000\u0a2f\u0a30\u0005\u0002\u0000\u0000\u0a30\u0a31\u0003\u0002\u0001"+ - "\u0000\u0a31\u0a32\u0005\u0003\u0000\u0000\u0a32\u0a59\u0001\u0000\u0000"+ - "\u0000\u0a33\u0a34\n\u00f6\u0000\u0000\u0a34\u0a35\u0005\u0001\u0000\u0000"+ - "\u0a35\u0a36\u0005\u00fa\u0000\u0000\u0a36\u0a38\u0005\u0002\u0000\u0000"+ - "\u0a37\u0a39\u0003\u0002\u0001\u0000\u0a38\u0a37\u0001\u0000\u0000\u0000"+ - "\u0a38\u0a39\u0001\u0000\u0000\u0000\u0a39\u0a3a\u0001\u0000\u0000\u0000"+ - "\u0a3a\u0a59\u0005\u0003\u0000\u0000\u0a3b\u0a3c\n\u00f5\u0000\u0000\u0a3c"+ - "\u0a3d\u0005\u0001\u0000\u0000\u0a3d\u0a3e\u0005\u00fb\u0000\u0000\u0a3e"+ - "\u0a3f\u0005\u0002\u0000\u0000\u0a3f\u0a40\u0003\u0002\u0001\u0000\u0a40"+ - "\u0a41\u0005\u0003\u0000\u0000\u0a41\u0a59\u0001\u0000\u0000\u0000\u0a42"+ - "\u0a43\n\u00f4\u0000\u0000\u0a43\u0a44\u0005\u0001\u0000\u0000\u0a44\u0a45"+ - "\u0005\u00fc\u0000\u0000\u0a45\u0a46\u0005\u0002\u0000\u0000\u0a46\u0a47"+ - "\u0003\u0002\u0001\u0000\u0a47\u0a48\u0005\u0003\u0000\u0000\u0a48\u0a59"+ - "\u0001\u0000\u0000\u0000\u0a49\u0a4a\n\u00f3\u0000\u0000\u0a4a\u0a4b\u0005"+ - "\u0005\u0000\u0000\u0a4b\u0a4c\u0003\n\u0005\u0000\u0a4c\u0a4d\u0005\u0006"+ - "\u0000\u0000\u0a4d\u0a59\u0001\u0000\u0000\u0000\u0a4e\u0a4f\n\u00f2\u0000"+ - "\u0000\u0a4f\u0a50\u0005\u0005\u0000\u0000\u0a50\u0a51\u0003\u0002\u0001"+ - "\u0000\u0a51\u0a52\u0005\u0006\u0000\u0000\u0a52\u0a59\u0001\u0000\u0000"+ - "\u0000\u0a53\u0a54\n\u00f1\u0000\u0000\u0a54\u0a55\u0005\u0001\u0000\u0000"+ - "\u0a55\u0a59\u0003\n\u0005\u0000\u0a56\u0a57\n\u00ee\u0000\u0000\u0a57"+ - "\u0a59\u0005\b\u0000\u0000\u0a58\u072d\u0001\u0000\u0000\u0000\u0a58\u0730"+ - "\u0001\u0000\u0000\u0000\u0a58\u0733\u0001\u0000\u0000\u0000\u0a58\u0736"+ - "\u0001\u0000\u0000\u0000\u0a58\u0739\u0001\u0000\u0000\u0000\u0a58\u073c"+ - "\u0001\u0000\u0000\u0000\u0a58\u073f\u0001\u0000\u0000\u0000\u0a58\u0745"+ - "\u0001\u0000\u0000\u0000\u0a58\u074a\u0001\u0000\u0000\u0000\u0a58\u074f"+ - "\u0001\u0000\u0000\u0000\u0a58\u0754\u0001\u0000\u0000\u0000\u0a58\u0759"+ - "\u0001\u0000\u0000\u0000\u0a58\u075e\u0001\u0000\u0000\u0000\u0a58\u0763"+ - "\u0001\u0000\u0000\u0000\u0a58\u076b\u0001\u0000\u0000\u0000\u0a58\u0773"+ - "\u0001\u0000\u0000\u0000\u0a58\u077b\u0001\u0000\u0000\u0000\u0a58\u0783"+ - "\u0001\u0000\u0000\u0000\u0a58\u078b\u0001\u0000\u0000\u0000\u0a58\u0793"+ - "\u0001\u0000\u0000\u0000\u0a58\u079b\u0001\u0000\u0000\u0000\u0a58\u07a0"+ - "\u0001\u0000\u0000\u0000\u0a58\u07a8\u0001\u0000\u0000\u0000\u0a58\u07b0"+ - "\u0001\u0000\u0000\u0000\u0a58\u07b5\u0001\u0000\u0000\u0000\u0a58\u07bd"+ - "\u0001\u0000\u0000\u0000\u0a58\u07c5\u0001\u0000\u0000\u0000\u0a58\u07ca"+ - "\u0001\u0000\u0000\u0000\u0a58\u07d2\u0001\u0000\u0000\u0000\u0a58\u07d7"+ - "\u0001\u0000\u0000\u0000\u0a58\u07dc\u0001\u0000\u0000\u0000\u0a58\u07e1"+ - "\u0001\u0000\u0000\u0000\u0a58\u07e6\u0001\u0000\u0000\u0000\u0a58\u07eb"+ - "\u0001\u0000\u0000\u0000\u0a58\u07f0\u0001\u0000\u0000\u0000\u0a58\u07ff"+ - "\u0001\u0000\u0000\u0000\u0a58\u0806\u0001\u0000\u0000\u0000\u0a58\u0811"+ - "\u0001\u0000\u0000\u0000\u0a58\u0819\u0001\u0000\u0000\u0000\u0a58\u081e"+ - "\u0001\u0000\u0000\u0000\u0a58\u0823\u0001\u0000\u0000\u0000\u0a58\u082c"+ - "\u0001\u0000\u0000\u0000\u0a58\u0831\u0001\u0000\u0000\u0000\u0a58\u083e"+ - "\u0001\u0000\u0000\u0000\u0a58\u0845\u0001\u0000\u0000\u0000\u0a58\u084d"+ - "\u0001\u0000\u0000\u0000\u0a58\u0852\u0001\u0000\u0000\u0000\u0a58\u085d"+ - "\u0001\u0000\u0000\u0000\u0a58\u086a\u0001\u0000\u0000\u0000\u0a58\u086f"+ - "\u0001\u0000\u0000\u0000\u0a58\u0876\u0001\u0000\u0000\u0000\u0a58\u087b"+ - "\u0001\u0000\u0000\u0000\u0a58\u0880\u0001\u0000\u0000\u0000\u0a58\u0885"+ - "\u0001\u0000\u0000\u0000\u0a58\u088d\u0001\u0000\u0000\u0000\u0a58\u0892"+ - "\u0001\u0000\u0000\u0000\u0a58\u0899\u0001\u0000\u0000\u0000\u0a58\u08a0"+ - "\u0001\u0000\u0000\u0000\u0a58\u08a7\u0001\u0000\u0000\u0000\u0a58\u08ae"+ - "\u0001\u0000\u0000\u0000\u0a58\u08b5\u0001\u0000\u0000\u0000\u0a58\u08bc"+ - "\u0001\u0000\u0000\u0000\u0a58\u08c1\u0001\u0000\u0000\u0000\u0a58\u08c6"+ - "\u0001\u0000\u0000\u0000\u0a58\u08cb\u0001\u0000\u0000\u0000\u0a58\u08d0"+ - "\u0001\u0000\u0000\u0000\u0a58\u08d8\u0001\u0000\u0000\u0000\u0a58\u08e0"+ - "\u0001\u0000\u0000\u0000\u0a58\u08e8\u0001\u0000\u0000\u0000\u0a58\u08f0"+ - "\u0001\u0000\u0000\u0000\u0a58\u08f7\u0001\u0000\u0000\u0000\u0a58\u0900"+ - "\u0001\u0000\u0000\u0000\u0a58\u0907\u0001\u0000\u0000\u0000\u0a58\u090f"+ - "\u0001\u0000\u0000\u0000\u0a58\u0917\u0001\u0000\u0000\u0000\u0a58\u091f"+ - "\u0001\u0000\u0000\u0000\u0a58\u0927\u0001\u0000\u0000\u0000\u0a58\u092f"+ - "\u0001\u0000\u0000\u0000\u0a58\u093a\u0001\u0000\u0000\u0000\u0a58\u0945"+ - "\u0001\u0000\u0000\u0000\u0a58\u0950\u0001\u0000\u0000\u0000\u0a58\u095b"+ - "\u0001\u0000\u0000\u0000\u0a58\u0963\u0001\u0000\u0000\u0000\u0a58\u096b"+ - "\u0001\u0000\u0000\u0000\u0a58\u097a\u0001\u0000\u0000\u0000\u0a58\u0989"+ - "\u0001\u0000\u0000\u0000\u0a58\u0990\u0001\u0000\u0000\u0000\u0a58\u099e"+ - "\u0001\u0000\u0000\u0000\u0a58\u09a9\u0001\u0000\u0000\u0000\u0a58\u09b4"+ - "\u0001\u0000\u0000\u0000\u0a58\u09bf\u0001\u0000\u0000\u0000\u0a58\u09c4"+ - "\u0001\u0000\u0000\u0000\u0a58\u09c9\u0001\u0000\u0000\u0000\u0a58\u09d4"+ - "\u0001\u0000\u0000\u0000\u0a58\u09df\u0001\u0000\u0000\u0000\u0a58\u09e4"+ - "\u0001\u0000\u0000\u0000\u0a58\u09f1\u0001\u0000\u0000\u0000\u0a58\u09fa"+ - "\u0001\u0000\u0000\u0000\u0a58\u0a09\u0001\u0000\u0000\u0000\u0a58\u0a10"+ - "\u0001\u0000\u0000\u0000\u0a58\u0a17\u0001\u0000\u0000\u0000\u0a58\u0a1e"+ - "\u0001\u0000\u0000\u0000\u0a58\u0a25\u0001\u0000\u0000\u0000\u0a58\u0a2c"+ - "\u0001\u0000\u0000\u0000\u0a58\u0a33\u0001\u0000\u0000\u0000\u0a58\u0a3b"+ - "\u0001\u0000\u0000\u0000\u0a58\u0a42\u0001\u0000\u0000\u0000\u0a58\u0a49"+ - "\u0001\u0000\u0000\u0000\u0a58\u0a4e\u0001\u0000\u0000\u0000\u0a58\u0a53"+ - "\u0001\u0000\u0000\u0000\u0a58\u0a56\u0001\u0000\u0000\u0000\u0a59\u0a5c"+ - "\u0001\u0000\u0000\u0000\u0a5a\u0a58\u0001\u0000\u0000\u0000\u0a5a\u0a5b"+ - "\u0001\u0000\u0000\u0000\u0a5b\u0003\u0001\u0000\u0000\u0000\u0a5c\u0a5a"+ - "\u0001\u0000\u0000\u0000\u0a5d\u0a5f\u0005\u001d\u0000\u0000\u0a5e\u0a5d"+ - "\u0001\u0000\u0000\u0000\u0a5e\u0a5f\u0001\u0000\u0000\u0000\u0a5f\u0a60"+ - "\u0001\u0000\u0000\u0000\u0a60\u0a61\u0005\u001e\u0000\u0000\u0a61\u0005"+ - "\u0001\u0000\u0000\u0000\u0a62\u0a63\u0007\u0006\u0000\u0000\u0a63\u0007"+ - "\u0001\u0000\u0000\u0000\u0a64\u0a68\u0005\u001e\u0000\u0000\u0a65\u0a68"+ - "\u0005\u001f\u0000\u0000\u0a66\u0a68\u0003\n\u0005\u0000\u0a67\u0a64\u0001"+ - "\u0000\u0000\u0000\u0a67\u0a65\u0001\u0000\u0000\u0000\u0a67\u0a66\u0001"+ - "\u0000\u0000\u0000\u0a68\u0a69\u0001\u0000\u0000\u0000\u0a69\u0a6a\u0005"+ - "\u001a\u0000\u0000\u0a6a\u0a6b\u0003\u0002\u0001\u0000\u0a6b\t\u0001\u0000"+ - "\u0000\u0000\u0a6c\u0a6d\u0007\u0007\u0000\u0000\u0a6d\u000b\u0001\u0000"+ - "\u0000\u0000\u00a6\u001d)<[dmx\u0084\u0091\u0096\u009b\u00a0\u00a7\u00b0"+ - "\u00b9\u00c2\u00d0\u00d9\u00e7\u00f0\u00fe\u0132\u013d\u01a1\u01b8\u01c1"+ - "\u0200\u0210\u021c\u022d\u0252\u0265\u0270\u0272\u027b\u02a0\u02b0\u02c0"+ - "\u02cd\u02f1\u0307\u0309\u030b\u0316\u0343\u0357\u0370\u037b\u0384\u038f"+ - "\u039a\u03a5\u03b7\u03df\u03eb\u03f6\u0402\u040e\u041a\u0426\u0432\u043d"+ - "\u0449\u0455\u046f\u047b\u0487\u0568\u0571\u057a\u0583\u05a6\u05af\u05b8"+ - "\u05c1\u05ca\u05d5\u05e0\u05eb\u05f6\u05ff\u0608\u0615\u0617\u0624\u0626"+ - "\u0638\u0643\u064e\u0659\u066e\u0670\u067b\u067d\u068f\u06a3\u06a6\u06d8"+ - "\u06e1\u06e8\u06ff\u0705\u0710\u0716\u0727\u072b\u0768\u0770\u0778\u0780"+ - "\u0788\u0790\u0798\u07a5\u07ad\u07ba\u07c2\u07cf\u07f9\u07fc\u080d\u0816"+ - "\u083a\u084a\u0859\u0866\u088a\u0897\u089e\u08a5\u08ac\u08b3\u08ba\u08d5"+ - "\u08dd\u08e5\u08ed\u090c\u0914\u091c\u0924\u092c\u0936\u0941\u094c\u0957"+ - "\u0960\u0968\u0974\u0976\u0983\u0985\u0999\u09a5\u09b0\u09bb\u09d0\u09db"+ - "\u09ed\u0a03\u0a06\u0a38\u0a58\u0a5a\u0a5e\u0a67"; + "\u0001\u0000\u0000\u093c\u093d\u0005\u00e1\u0000\u0000\u093d\u093f\u0005"+ + "\u0002\u0000\u0000\u093e\u0940\u0003\u0002\u0001\u0000\u093f\u093e\u0001"+ + "\u0000\u0000\u0000\u093f\u0940\u0001\u0000\u0000\u0000\u0940\u0941\u0001"+ + "\u0000\u0000\u0000\u0941\u0a21\u0005\u0003\u0000\u0000\u0942\u0943\n\u0106"+ + "\u0000\u0000\u0943\u0944\u0005\u0001\u0000\u0000\u0944\u0945\u0005\u00e2"+ + "\u0000\u0000\u0945\u0947\u0005\u0002\u0000\u0000\u0946\u0948\u0003\u0002"+ + "\u0001\u0000\u0947\u0946\u0001\u0000\u0000\u0000\u0947\u0948\u0001\u0000"+ + "\u0000\u0000\u0948\u0949\u0001\u0000\u0000\u0000\u0949\u0a21\u0005\u0003"+ + "\u0000\u0000\u094a\u094b\n\u0105\u0000\u0000\u094b\u094c\u0005\u0001\u0000"+ + "\u0000\u094c\u094d\u0005\u00e3\u0000\u0000\u094d\u094e\u0005\u0002\u0000"+ + "\u0000\u094e\u0955\u0003\u0002\u0001\u0000\u094f\u0950\u0005\u0004\u0000"+ + "\u0000\u0950\u0953\u0003\u0002\u0001\u0000\u0951\u0952\u0005\u0004\u0000"+ + "\u0000\u0952\u0954\u0003\u0002\u0001\u0000\u0953\u0951\u0001\u0000\u0000"+ + "\u0000\u0953\u0954\u0001\u0000\u0000\u0000\u0954\u0956\u0001\u0000\u0000"+ + "\u0000\u0955\u094f\u0001\u0000\u0000\u0000\u0955\u0956\u0001\u0000\u0000"+ + "\u0000\u0956\u0957\u0001\u0000\u0000\u0000\u0957\u0958\u0005\u0003\u0000"+ + "\u0000\u0958\u0a21\u0001\u0000\u0000\u0000\u0959\u095a\n\u0104\u0000\u0000"+ + "\u095a\u095b\u0005\u0001\u0000\u0000\u095b\u095c\u0005\u00e4\u0000\u0000"+ + "\u095c\u095d\u0005\u0002\u0000\u0000\u095d\u0964\u0003\u0002\u0001\u0000"+ + "\u095e\u095f\u0005\u0004\u0000\u0000\u095f\u0962\u0003\u0002\u0001\u0000"+ + "\u0960\u0961\u0005\u0004\u0000\u0000\u0961\u0963\u0003\u0002\u0001\u0000"+ + "\u0962\u0960\u0001\u0000\u0000\u0000\u0962\u0963\u0001\u0000\u0000\u0000"+ + "\u0963\u0965\u0001\u0000\u0000\u0000\u0964\u095e\u0001\u0000\u0000\u0000"+ + "\u0964\u0965\u0001\u0000\u0000\u0000\u0965\u0966\u0001\u0000\u0000\u0000"+ + "\u0966\u0967\u0005\u0003\u0000\u0000\u0967\u0a21\u0001\u0000\u0000\u0000"+ + "\u0968\u0969\n\u0103\u0000\u0000\u0969\u096a\u0005\u0001\u0000\u0000\u096a"+ + "\u096b\u0005\u00e5\u0000\u0000\u096b\u096c\u0005\u0002\u0000\u0000\u096c"+ + "\u096d\u0003\u0002\u0001\u0000\u096d\u096e\u0005\u0003\u0000\u0000\u096e"+ + "\u0a21\u0001\u0000\u0000\u0000\u096f\u0970\n\u0102\u0000\u0000\u0970\u0971"+ + "\u0005\u0001\u0000\u0000\u0971\u0972\u0005\u00e6\u0000\u0000\u0972\u0973"+ + "\u0005\u0002\u0000\u0000\u0973\u0978\u0003\u0002\u0001\u0000\u0974\u0975"+ + "\u0005\u0004\u0000\u0000\u0975\u0977\u0003\u0002\u0001\u0000\u0976\u0974"+ + "\u0001\u0000\u0000\u0000\u0977\u097a\u0001\u0000\u0000\u0000\u0978\u0976"+ + "\u0001\u0000\u0000\u0000\u0978\u0979\u0001\u0000\u0000\u0000\u0979\u097b"+ + "\u0001\u0000\u0000\u0000\u097a\u0978\u0001\u0000\u0000\u0000\u097b\u097c"+ + "\u0005\u0003\u0000\u0000\u097c\u0a21\u0001\u0000\u0000\u0000\u097d\u097e"+ + "\n\u0101\u0000\u0000\u097e\u097f\u0005\u0001\u0000\u0000\u097f\u0980\u0005"+ + "\u00e7\u0000\u0000\u0980\u0981\u0005\u0002\u0000\u0000\u0981\u0984\u0003"+ + "\u0002\u0001\u0000\u0982\u0983\u0005\u0004\u0000\u0000\u0983\u0985\u0003"+ + "\u0002\u0001\u0000\u0984\u0982\u0001\u0000\u0000\u0000\u0984\u0985\u0001"+ + "\u0000\u0000\u0000\u0985\u0986\u0001\u0000\u0000\u0000\u0986\u0987\u0005"+ + "\u0003\u0000\u0000\u0987\u0a21\u0001\u0000\u0000\u0000\u0988\u0989\n\u0100"+ + "\u0000\u0000\u0989\u098a\u0005\u0001\u0000\u0000\u098a\u098b\u0005\u00e8"+ + "\u0000\u0000\u098b\u098c\u0005\u0002\u0000\u0000\u098c\u098f\u0003\u0002"+ + "\u0001\u0000\u098d\u098e\u0005\u0004\u0000\u0000\u098e\u0990\u0003\u0002"+ + "\u0001\u0000\u098f\u098d\u0001\u0000\u0000\u0000\u098f\u0990\u0001\u0000"+ + "\u0000\u0000\u0990\u0991\u0001\u0000\u0000\u0000\u0991\u0992\u0005\u0003"+ + "\u0000\u0000\u0992\u0a21\u0001\u0000\u0000\u0000\u0993\u0994\n\u00ff\u0000"+ + "\u0000\u0994\u0995\u0005\u0001\u0000\u0000\u0995\u0996\u0005\u00e9\u0000"+ + "\u0000\u0996\u0997\u0005\u0002\u0000\u0000\u0997\u099a\u0003\u0002\u0001"+ + "\u0000\u0998\u0999\u0005\u0004\u0000\u0000\u0999\u099b\u0003\u0002\u0001"+ + "\u0000\u099a\u0998\u0001\u0000\u0000\u0000\u099a\u099b\u0001\u0000\u0000"+ + "\u0000\u099b\u099c\u0001\u0000\u0000\u0000\u099c\u099d\u0005\u0003\u0000"+ + "\u0000\u099d\u0a21\u0001\u0000\u0000\u0000\u099e\u099f\n\u00fe\u0000\u0000"+ + "\u099f\u09a0\u0005\u0001\u0000\u0000\u09a0\u09a1\u0005\u00ea\u0000\u0000"+ + "\u09a1\u09a2\u0005\u0002\u0000\u0000\u09a2\u0a21\u0005\u0003\u0000\u0000"+ + "\u09a3\u09a4\n\u00fd\u0000\u0000\u09a4\u09a5\u0005\u0001\u0000\u0000\u09a5"+ + "\u09a6\u0005\u00eb\u0000\u0000\u09a6\u09a7\u0005\u0002\u0000\u0000\u09a7"+ + "\u0a21\u0005\u0003\u0000\u0000\u09a8\u09a9\n\u00fc\u0000\u0000\u09a9\u09aa"+ + "\u0005\u0001\u0000\u0000\u09aa\u09ab\u0005\u00ec\u0000\u0000\u09ab\u09ac"+ + "\u0005\u0002\u0000\u0000\u09ac\u09af\u0003\u0002\u0001\u0000\u09ad\u09ae"+ + "\u0005\u0004\u0000\u0000\u09ae\u09b0\u0003\u0002\u0001\u0000\u09af\u09ad"+ + "\u0001\u0000\u0000\u0000\u09af\u09b0\u0001\u0000\u0000\u0000\u09b0\u09b1"+ + "\u0001\u0000\u0000\u0000\u09b1\u09b2\u0005\u0003\u0000\u0000\u09b2\u0a21"+ + "\u0001\u0000\u0000\u0000\u09b3\u09b4\n\u00fb\u0000\u0000\u09b4\u09b5\u0005"+ + "\u0001\u0000\u0000\u09b5\u09b6\u0005\u00ed\u0000\u0000\u09b6\u09b7\u0005"+ + "\u0002\u0000\u0000\u09b7\u09ba\u0003\u0002\u0001\u0000\u09b8\u09b9\u0005"+ + "\u0004\u0000\u0000\u09b9\u09bb\u0003\u0002\u0001\u0000\u09ba\u09b8\u0001"+ + "\u0000\u0000\u0000\u09ba\u09bb\u0001\u0000\u0000\u0000\u09bb\u09bc\u0001"+ + "\u0000\u0000\u0000\u09bc\u09bd\u0005\u0003\u0000\u0000\u09bd\u0a21\u0001"+ + "\u0000\u0000\u0000\u09be\u09bf\n\u00fa\u0000\u0000\u09bf\u09c0\u0005\u0001"+ + "\u0000\u0000\u09c0\u09c1\u0005\u00ee\u0000\u0000\u09c1\u09c2\u0005\u0002"+ + "\u0000\u0000\u09c2\u0a21\u0005\u0003\u0000\u0000\u09c3\u09c4\n\u00f9\u0000"+ + "\u0000\u09c4\u09c5\u0005\u0001\u0000\u0000\u09c5\u09c6\u0005\u00fd\u0000"+ + "\u0000\u09c6\u09cf\u0005\u0002\u0000\u0000\u09c7\u09cc\u0003\u0002\u0001"+ + "\u0000\u09c8\u09c9\u0005\u0004\u0000\u0000\u09c9\u09cb\u0003\u0002\u0001"+ + "\u0000\u09ca\u09c8\u0001\u0000\u0000\u0000\u09cb\u09ce\u0001\u0000\u0000"+ + "\u0000\u09cc\u09ca\u0001\u0000\u0000\u0000\u09cc\u09cd\u0001\u0000\u0000"+ + "\u0000\u09cd\u09d0\u0001\u0000\u0000\u0000\u09ce\u09cc\u0001\u0000\u0000"+ + "\u0000\u09cf\u09c7\u0001\u0000\u0000\u0000\u09cf\u09d0\u0001\u0000\u0000"+ + "\u0000\u09d0\u09d1\u0001\u0000\u0000\u0000\u09d1\u0a21\u0005\u0003\u0000"+ + "\u0000\u09d2\u09d3\n\u00f8\u0000\u0000\u09d3\u09d4\u0005\u0001\u0000\u0000"+ + "\u09d4\u09d5\u0005\u00f3\u0000\u0000\u09d5\u09d6\u0005\u0002\u0000\u0000"+ + "\u09d6\u09d7\u0003\u0002\u0001\u0000\u09d7\u09d8\u0005\u0003\u0000\u0000"+ + "\u09d8\u0a21\u0001\u0000\u0000\u0000\u09d9\u09da\n\u00f7\u0000\u0000\u09da"+ + "\u09db\u0005\u0001\u0000\u0000\u09db\u09dc\u0005\u00f4\u0000\u0000\u09dc"+ + "\u09dd\u0005\u0002\u0000\u0000\u09dd\u09de\u0003\u0002\u0001\u0000\u09de"+ + "\u09df\u0005\u0003\u0000\u0000\u09df\u0a21\u0001\u0000\u0000\u0000\u09e0"+ + "\u09e1\n\u00f6\u0000\u0000\u09e1\u09e2\u0005\u0001\u0000\u0000\u09e2\u09e3"+ + "\u0005\u00f5\u0000\u0000\u09e3\u09e4\u0005\u0002\u0000\u0000\u09e4\u09e5"+ + "\u0003\u0002\u0001\u0000\u09e5\u09e6\u0005\u0003\u0000\u0000\u09e6\u0a21"+ + "\u0001\u0000\u0000\u0000\u09e7\u09e8\n\u00f5\u0000\u0000\u09e8\u09e9\u0005"+ + "\u0001\u0000\u0000\u09e9\u09ea\u0005\u00f6\u0000\u0000\u09ea\u09eb\u0005"+ + "\u0002\u0000\u0000\u09eb\u09ec\u0003\u0002\u0001\u0000\u09ec\u09ed\u0005"+ + "\u0003\u0000\u0000\u09ed\u0a21\u0001\u0000\u0000\u0000\u09ee\u09ef\n\u00f4"+ + "\u0000\u0000\u09ef\u09f0\u0005\u0001\u0000\u0000\u09f0\u09f1\u0005\u00f7"+ + "\u0000\u0000\u09f1\u09f2\u0005\u0002\u0000\u0000\u09f2\u09f3\u0003\u0002"+ + "\u0001\u0000\u09f3\u09f4\u0005\u0003\u0000\u0000\u09f4\u0a21\u0001\u0000"+ + "\u0000\u0000\u09f5\u09f6\n\u00f3\u0000\u0000\u09f6\u09f7\u0005\u0001\u0000"+ + "\u0000\u09f7\u09f8\u0005\u00f8\u0000\u0000\u09f8\u09f9\u0005\u0002\u0000"+ + "\u0000\u09f9\u09fa\u0003\u0002\u0001\u0000\u09fa\u09fb\u0005\u0003\u0000"+ + "\u0000\u09fb\u0a21\u0001\u0000\u0000\u0000\u09fc\u09fd\n\u00f2\u0000\u0000"+ + "\u09fd\u09fe\u0005\u0001\u0000\u0000\u09fe\u09ff\u0005\u00f9\u0000\u0000"+ + "\u09ff\u0a01\u0005\u0002\u0000\u0000\u0a00\u0a02\u0003\u0002\u0001\u0000"+ + "\u0a01\u0a00\u0001\u0000\u0000\u0000\u0a01\u0a02\u0001\u0000\u0000\u0000"+ + "\u0a02\u0a03\u0001\u0000\u0000\u0000\u0a03\u0a21\u0005\u0003\u0000\u0000"+ + "\u0a04\u0a05\n\u00f1\u0000\u0000\u0a05\u0a06\u0005\u0001\u0000\u0000\u0a06"+ + "\u0a07\u0005\u00fa\u0000\u0000\u0a07\u0a08\u0005\u0002\u0000\u0000\u0a08"+ + "\u0a09\u0003\u0002\u0001\u0000\u0a09\u0a0a\u0005\u0003\u0000\u0000\u0a0a"+ + "\u0a21\u0001\u0000\u0000\u0000\u0a0b\u0a0c\n\u00f0\u0000\u0000\u0a0c\u0a0d"+ + "\u0005\u0001\u0000\u0000\u0a0d\u0a0e\u0005\u00fb\u0000\u0000\u0a0e\u0a0f"+ + "\u0005\u0002\u0000\u0000\u0a0f\u0a10\u0003\u0002\u0001\u0000\u0a10\u0a11"+ + "\u0005\u0003\u0000\u0000\u0a11\u0a21\u0001\u0000\u0000\u0000\u0a12\u0a13"+ + "\n\u00ef\u0000\u0000\u0a13\u0a14\u0005\u0005\u0000\u0000\u0a14\u0a15\u0005"+ + "\u00fd\u0000\u0000\u0a15\u0a21\u0005\u0006\u0000\u0000\u0a16\u0a17\n\u00ee"+ + "\u0000\u0000\u0a17\u0a18\u0005\u0005\u0000\u0000\u0a18\u0a19\u0003\u0002"+ + "\u0001\u0000\u0a19\u0a1a\u0005\u0006\u0000\u0000\u0a1a\u0a21\u0001\u0000"+ + "\u0000\u0000\u0a1b\u0a1c\n\u00ed\u0000\u0000\u0a1c\u0a1d\u0005\u0001\u0000"+ + "\u0000\u0a1d\u0a21\u0003\n\u0005\u0000\u0a1e\u0a1f\n\u00ea\u0000\u0000"+ + "\u0a1f\u0a21\u0005\b\u0000\u0000\u0a20\u0714\u0001\u0000\u0000\u0000\u0a20"+ + "\u0717\u0001\u0000\u0000\u0000\u0a20\u071a\u0001\u0000\u0000\u0000\u0a20"+ + "\u071d\u0001\u0000\u0000\u0000\u0a20\u0720\u0001\u0000\u0000\u0000\u0a20"+ + "\u0723\u0001\u0000\u0000\u0000\u0a20\u0726\u0001\u0000\u0000\u0000\u0a20"+ + "\u072c\u0001\u0000\u0000\u0000\u0a20\u0731\u0001\u0000\u0000\u0000\u0a20"+ + "\u0736\u0001\u0000\u0000\u0000\u0a20\u073b\u0001\u0000\u0000\u0000\u0a20"+ + "\u0740\u0001\u0000\u0000\u0000\u0a20\u0745\u0001\u0000\u0000\u0000\u0a20"+ + "\u074a\u0001\u0000\u0000\u0000\u0a20\u0752\u0001\u0000\u0000\u0000\u0a20"+ + "\u075a\u0001\u0000\u0000\u0000\u0a20\u0762\u0001\u0000\u0000\u0000\u0a20"+ + "\u076a\u0001\u0000\u0000\u0000\u0a20\u0772\u0001\u0000\u0000\u0000\u0a20"+ + "\u077a\u0001\u0000\u0000\u0000\u0a20\u0782\u0001\u0000\u0000\u0000\u0a20"+ + "\u0787\u0001\u0000\u0000\u0000\u0a20\u078f\u0001\u0000\u0000\u0000\u0a20"+ + "\u0797\u0001\u0000\u0000\u0000\u0a20\u079c\u0001\u0000\u0000\u0000\u0a20"+ + "\u07a4\u0001\u0000\u0000\u0000\u0a20\u07ac\u0001\u0000\u0000\u0000\u0a20"+ + "\u07b1\u0001\u0000\u0000\u0000\u0a20\u07b9\u0001\u0000\u0000\u0000\u0a20"+ + "\u07be\u0001\u0000\u0000\u0000\u0a20\u07c3\u0001\u0000\u0000\u0000\u0a20"+ + "\u07c8\u0001\u0000\u0000\u0000\u0a20\u07cd\u0001\u0000\u0000\u0000\u0a20"+ + "\u07d2\u0001\u0000\u0000\u0000\u0a20\u07d7\u0001\u0000\u0000\u0000\u0a20"+ + "\u07e6\u0001\u0000\u0000\u0000\u0a20\u07ed\u0001\u0000\u0000\u0000\u0a20"+ + "\u07f8\u0001\u0000\u0000\u0000\u0a20\u0800\u0001\u0000\u0000\u0000\u0a20"+ + "\u0805\u0001\u0000\u0000\u0000\u0a20\u080a\u0001\u0000\u0000\u0000\u0a20"+ + "\u0813\u0001\u0000\u0000\u0000\u0a20\u0818\u0001\u0000\u0000\u0000\u0a20"+ + "\u0825\u0001\u0000\u0000\u0000\u0a20\u082c\u0001\u0000\u0000\u0000\u0a20"+ + "\u0834\u0001\u0000\u0000\u0000\u0a20\u0839\u0001\u0000\u0000\u0000\u0a20"+ + "\u0844\u0001\u0000\u0000\u0000\u0a20\u0851\u0001\u0000\u0000\u0000\u0a20"+ + "\u0856\u0001\u0000\u0000\u0000\u0a20\u085d\u0001\u0000\u0000\u0000\u0a20"+ + "\u0862\u0001\u0000\u0000\u0000\u0a20\u0867\u0001\u0000\u0000\u0000\u0a20"+ + "\u086c\u0001\u0000\u0000\u0000\u0a20\u0874\u0001\u0000\u0000\u0000\u0a20"+ + "\u0879\u0001\u0000\u0000\u0000\u0a20\u0880\u0001\u0000\u0000\u0000\u0a20"+ + "\u0887\u0001\u0000\u0000\u0000\u0a20\u088e\u0001\u0000\u0000\u0000\u0a20"+ + "\u0895\u0001\u0000\u0000\u0000\u0a20\u089c\u0001\u0000\u0000\u0000\u0a20"+ + "\u08a3\u0001\u0000\u0000\u0000\u0a20\u08a8\u0001\u0000\u0000\u0000\u0a20"+ + "\u08ad\u0001\u0000\u0000\u0000\u0a20\u08b2\u0001\u0000\u0000\u0000\u0a20"+ + "\u08b7\u0001\u0000\u0000\u0000\u0a20\u08bf\u0001\u0000\u0000\u0000\u0a20"+ + "\u08c7\u0001\u0000\u0000\u0000\u0a20\u08cf\u0001\u0000\u0000\u0000\u0a20"+ + "\u08d7\u0001\u0000\u0000\u0000\u0a20\u08de\u0001\u0000\u0000\u0000\u0a20"+ + "\u08e7\u0001\u0000\u0000\u0000\u0a20\u08ee\u0001\u0000\u0000\u0000\u0a20"+ + "\u08f6\u0001\u0000\u0000\u0000\u0a20\u08fe\u0001\u0000\u0000\u0000\u0a20"+ + "\u0906\u0001\u0000\u0000\u0000\u0a20\u090e\u0001\u0000\u0000\u0000\u0a20"+ + "\u0919\u0001\u0000\u0000\u0000\u0a20\u0924\u0001\u0000\u0000\u0000\u0a20"+ + "\u092f\u0001\u0000\u0000\u0000\u0a20\u093a\u0001\u0000\u0000\u0000\u0a20"+ + "\u0942\u0001\u0000\u0000\u0000\u0a20\u094a\u0001\u0000\u0000\u0000\u0a20"+ + "\u0959\u0001\u0000\u0000\u0000\u0a20\u0968\u0001\u0000\u0000\u0000\u0a20"+ + "\u096f\u0001\u0000\u0000\u0000\u0a20\u097d\u0001\u0000\u0000\u0000\u0a20"+ + "\u0988\u0001\u0000\u0000\u0000\u0a20\u0993\u0001\u0000\u0000\u0000\u0a20"+ + "\u099e\u0001\u0000\u0000\u0000\u0a20\u09a3\u0001\u0000\u0000\u0000\u0a20"+ + "\u09a8\u0001\u0000\u0000\u0000\u0a20\u09b3\u0001\u0000\u0000\u0000\u0a20"+ + "\u09be\u0001\u0000\u0000\u0000\u0a20\u09c3\u0001\u0000\u0000\u0000\u0a20"+ + "\u09d2\u0001\u0000\u0000\u0000\u0a20\u09d9\u0001\u0000\u0000\u0000\u0a20"+ + "\u09e0\u0001\u0000\u0000\u0000\u0a20\u09e7\u0001\u0000\u0000\u0000\u0a20"+ + "\u09ee\u0001\u0000\u0000\u0000\u0a20\u09f5\u0001\u0000\u0000\u0000\u0a20"+ + "\u09fc\u0001\u0000\u0000\u0000\u0a20\u0a04\u0001\u0000\u0000\u0000\u0a20"+ + "\u0a0b\u0001\u0000\u0000\u0000\u0a20\u0a12\u0001\u0000\u0000\u0000\u0a20"+ + "\u0a16\u0001\u0000\u0000\u0000\u0a20\u0a1b\u0001\u0000\u0000\u0000\u0a20"+ + "\u0a1e\u0001\u0000\u0000\u0000\u0a21\u0a24\u0001\u0000\u0000\u0000\u0a22"+ + "\u0a20\u0001\u0000\u0000\u0000\u0a22\u0a23\u0001\u0000\u0000\u0000\u0a23"+ + "\u0003\u0001\u0000\u0000\u0000\u0a24\u0a22\u0001\u0000\u0000\u0000\u0a25"+ + "\u0a27\u0005\u001d\u0000\u0000\u0a26\u0a25\u0001\u0000\u0000\u0000\u0a26"+ + "\u0a27\u0001\u0000\u0000\u0000\u0a27\u0a28\u0001\u0000\u0000\u0000\u0a28"+ + "\u0a29\u0005\u001e\u0000\u0000\u0a29\u0005\u0001\u0000\u0000\u0000\u0a2a"+ + "\u0a2b\u0007\u0006\u0000\u0000\u0a2b\u0007\u0001\u0000\u0000\u0000\u0a2c"+ + "\u0a30\u0005\u001e\u0000\u0000\u0a2d\u0a30\u0005\u001f\u0000\u0000\u0a2e"+ + "\u0a30\u0003\n\u0005\u0000\u0a2f\u0a2c\u0001\u0000\u0000\u0000\u0a2f\u0a2d"+ + "\u0001\u0000\u0000\u0000\u0a2f\u0a2e\u0001\u0000\u0000\u0000\u0a30\u0a31"+ + "\u0001\u0000\u0000\u0000\u0a31\u0a32\u0005\u001a\u0000\u0000\u0a32\u0a33"+ + "\u0003\u0002\u0001\u0000\u0a33\t\u0001\u0000\u0000\u0000\u0a34\u0a35\u0007"+ + "\u0007\u0000\u0000\u0a35\u000b\u0001\u0000\u0000\u0000\u00a2\u001d)<["+ + "dmx\u0084\u0091\u0096\u009b\u00a0\u00a7\u00b0\u00b9\u00c2\u00d0\u00d9"+ + "\u00e7\u00f0\u00fe\u0132\u013d\u01a1\u01b8\u01c1\u0200\u0210\u021c\u022d"+ + "\u0252\u0265\u0270\u0272\u027b\u02a0\u02b0\u02c0\u02cd\u02f1\u0307\u0309"+ + "\u030b\u0316\u0343\u0357\u0370\u037b\u0384\u038f\u039a\u03a5\u03b7\u03df"+ + "\u03eb\u03f6\u0402\u040e\u041a\u0426\u0432\u043d\u0449\u0455\u046f\u047b"+ + "\u0487\u0568\u0571\u057a\u0583\u05a6\u05af\u05b8\u05c1\u05cc\u05d7\u05e2"+ + "\u05ed\u05f6\u05ff\u060c\u060e\u061b\u061d\u062f\u063a\u0645\u0650\u0665"+ + "\u0667\u0672\u0674\u0692\u0695\u06c7\u06d0\u06d7\u06ee\u06f4\u06ff\u0705"+ + "\u070e\u0712\u074f\u0757\u075f\u0767\u076f\u0777\u077f\u078c\u0794\u07a1"+ + "\u07a9\u07b6\u07e0\u07e3\u07f4\u07fd\u0821\u0831\u0840\u084d\u0871\u087e"+ + "\u0885\u088c\u0893\u089a\u08a1\u08bc\u08c4\u08cc\u08d4\u08f3\u08fb\u0903"+ + "\u090b\u0915\u0920\u092b\u0936\u093f\u0947\u0953\u0955\u0962\u0964\u0978"+ + "\u0984\u098f\u099a\u09af\u09ba\u09cc\u09cf\u0a01\u0a20\u0a22\u0a26\u0a2f"; public static final String _serializedATN = Utils.join( new String[] { _serializedATNSegment0, diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathVisitor.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathVisitor.java index 62d2b7898..d107918d4 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathVisitor.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathVisitor.java @@ -37,6 +37,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitREGEXREPALCE_fun(mathParser.REGEXREPALCE_funContext ctx); + /** + * Visit a parse tree produced by the {@code LOOKFLOOR_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLOOKFLOOR_fun(mathParser.LOOKFLOOR_funContext ctx); /** * Visit a parse tree produced by the {@code HASVALUE_fun} * labeled alternative in {@link mathParser#expr}. @@ -114,6 +121,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitDAYS360_fun(mathParser.DAYS360_funContext ctx); + /** + * Visit a parse tree produced by the {@code LOOKCEILING_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitLOOKCEILING_fun(mathParser.LOOKCEILING_funContext ctx); /** * Visit a parse tree produced by the {@code WEEKNUM_fun} * labeled alternative in {@link mathParser#expr}. @@ -289,13 +303,6 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitJIS_fun(mathParser.JIS_funContext ctx); - /** - * Visit a parse tree produced by the {@code CRC32_fun} - * labeled alternative in {@link mathParser#expr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitCRC32_fun(mathParser.CRC32_funContext ctx); /** * Visit a parse tree produced by the {@code LCM_fun} * labeled alternative in {@link mathParser#expr}. @@ -947,13 +954,6 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitEXPONDIST_fun(mathParser.EXPONDIST_funContext ctx); - /** - * Visit a parse tree produced by the {@code VLOOKUP_fun} - * labeled alternative in {@link mathParser#expr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitVLOOKUP_fun(mathParser.VLOOKUP_funContext ctx); /** * Visit a parse tree produced by the {@code DEC2BIN_fun} * labeled alternative in {@link mathParser#expr}. @@ -961,13 +961,6 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitDEC2BIN_fun(mathParser.DEC2BIN_funContext ctx); - /** - * Visit a parse tree produced by the {@code LOOKUP_fun} - * labeled alternative in {@link mathParser#expr}. - * @param ctx the parse tree - * @return the visitor result - */ - T visitLOOKUP_fun(mathParser.LOOKUP_funContext ctx); /** * Visit a parse tree produced by the {@code HEX2DEC_fun} * labeled alternative in {@link mathParser#expr}. From 0596c97ea1fbb6932151328106109c4f5d8f0313 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sat, 31 Jan 2026 22:17:09 +0800 Subject: [PATCH 02/98] fix --- .../toolgood/algorithm/AlgorithmEngine.java | 472 -- .../algorithm/AlgorithmEngineHelper.java | 594 -- .../java/toolgood/algorithm/DiyNameInfo.java | 16 - .../main/java/toolgood/algorithm/MyDate.java | 386 -- .../main/java/toolgood/algorithm/Operand.java | 1032 +-- .../algorithm/enums/AreaUnitType.java | 62 +- .../algorithm/enums/ConditionTreeType.java | 6 + .../algorithm/enums/DistanceUnitType.java | 62 +- .../algorithm/enums/MassUnitType.java | 44 +- .../algorithm/enums/NumberUnitType.java | 9 +- .../toolgood/algorithm/enums/OperandType.java | 68 +- .../algorithm/enums/VolumeUnitType.java | 62 +- .../algorithm/internals/AntlrCharStream.java | 61 - .../internals/AntlrErrorListener.java | 22 - .../internals/AntlrLookupEngine.java | 26 - .../toolgood/algorithm/internals/Base64.java | 243 - .../algorithm/internals/CharUtil.java | 224 - .../algorithm/internals/ConditionTree.java | 104 +- .../algorithm/internals/DiyNameVisitor.java | 1438 ---- .../toolgood/algorithm/internals/Hash.java | 112 - .../MathSimplifiedFormulaVisitor.java | 1847 ----- .../algorithm/internals/MathSplitVisitor.java | 1224 ---- .../algorithm/internals/MathVisitor.java | 6061 ----------------- .../algorithm/internals/MyFunction.java | 12 - .../algorithm/internals/MyParameter.java | 8 - 25 files changed, 593 insertions(+), 13602 deletions(-) delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/AlgorithmEngine.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/DiyNameInfo.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/MyDate.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/AntlrCharStream.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/AntlrErrorListener.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/AntlrLookupEngine.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Base64.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/CharUtil.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/DiyNameVisitor.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Hash.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathSimplifiedFormulaVisitor.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathSplitVisitor.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathVisitor.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyFunction.java delete mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyParameter.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/AlgorithmEngine.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/AlgorithmEngine.java deleted file mode 100644 index 4a2d77b17..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/AlgorithmEngine.java +++ /dev/null @@ -1,472 +0,0 @@ -package toolgood.algorithm; - -import org.antlr.v4.runtime.CharStreams; -import org.antlr.v4.runtime.CommonTokenStream; -import org.antlr.v4.runtime.RecognitionException; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import toolgood.algorithm.enums.AreaUnitType; -import toolgood.algorithm.enums.DistanceUnitType; -import toolgood.algorithm.enums.MassUnitType; -import toolgood.algorithm.enums.VolumeUnitType; -import toolgood.algorithm.internals.*; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.litJson.JsonMapper; -import toolgood.algorithm.math.mathLexer; -import toolgood.algorithm.math.mathParser; -import toolgood.algorithm.math.mathParser.ProgContext; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - -public class AlgorithmEngine { - /** - * 使用EXCEL索引 - */ - public boolean UseExcelIndex = true; - /** - * 最后一个错误 - */ - public String LastError; - /** - * 保存到临时文档 - */ - public boolean UseTempDict = false; - /** - * 是否忽略大小写 - */ - public final boolean IgnoreCase; - /** - * 使用本地时区 - */ - public boolean UseLocalTime = false; - private ProgContext _context; - private final Map _tempdict; - public DistanceUnitType DistanceUnit = DistanceUnitType.M; - public AreaUnitType AreaUnit = AreaUnitType.M2; - public VolumeUnitType VolumeUnit = VolumeUnitType.M3; - public MassUnitType MassUnit = MassUnitType.KG; - - /// - /// 默认不带缓存 - /// - public AlgorithmEngine() { - IgnoreCase = false; - _tempdict = new TreeMap(); - } - - /// - /// 带缓存关键字大小写参数 - /// - /// - public AlgorithmEngine(boolean ignoreCase) { - IgnoreCase = ignoreCase; - if (ignoreCase) { - _tempdict = new TreeMap(String.CASE_INSENSITIVE_ORDER); - } else { - _tempdict = new TreeMap(); - } - } - - private Operand GetDiyParameterInside(MyParameter parameter) { - if (_tempdict.containsKey(parameter.Name)) { - return _tempdict.get(parameter.Name); - } - Operand result = GetParameter(parameter); - if (UseTempDict) { - _tempdict.put(parameter.Name, result); - } - return result; - } - - protected Operand GetParameter(final MyParameter parameter) { - return Operand.Error("Parameter [" + parameter + "] is missing."); - } - - protected Operand ExecuteDiyFunction(final String funcName, final List operands) { - return Operand.Error("DiyFunction [" + funcName + "] is missing."); - } - - public void ClearParameters() { - _tempdict.clear(); - } - - /** - * 添加自定义参数 - */ - public void AddParameter(final String key, final Operand obj) { - _tempdict.put(key, obj); - } - - /** - * 添加自定义参数 - */ - public void AddParameter(final String key, final boolean obj) { - _tempdict.put(key, Operand.Create(obj)); - } - - /** - * 添加自定义参数 - */ - public void AddParameter(final String key, final short obj) { - _tempdict.put(key, Operand.Create(obj)); - } - - /** - * 添加自定义参数 - */ - public void AddParameter(final String key, final int obj) { - _tempdict.put(key, Operand.Create(obj)); - } - - /** - * 添加自定义参数 - */ - public void AddParameter(final String key, final long obj) { - _tempdict.put(key, Operand.Create(obj)); - } - - /** - * 添加自定义参数 - */ - public void AddParameter(final String key, final float obj) { - _tempdict.put(key, Operand.Create(obj)); - } - - /** - * 添加自定义参数 - */ - public void AddParameter(final String key, final double obj) { - _tempdict.put(key, Operand.Create(obj)); - } - - /** - * 添加自定义参数 - */ - public void AddParameter(final String key, final BigDecimal obj) { - _tempdict.put(key, Operand.Create(obj)); - } - - /** - * 添加自定义参数 - */ - public void AddParameter(final String key, final String obj) { - _tempdict.put(key, Operand.Create(obj)); - } - - /** - * 添加自定义参数 - */ - public void AddParameter(final String key, final MyDate obj) { - _tempdict.put(key, Operand.Create(obj)); - } - - /** - * 添加自定义参数 - */ - public void AddParameter(final String key, final List obj) { - _tempdict.put(key, Operand.Create(obj)); - } - - /** - * 添加自定义参数 - */ - public void AddParameterFromJson(final String json) throws Exception { - if (json.startsWith("{") && json.endsWith("}")) { - final JsonData jo = (JsonData) JsonMapper.ToObject(json); - if (jo.IsObject()) { - for (String item : jo.inst_object.keySet()) { - final JsonData v = jo.inst_object.get(item); - if (v.IsString()) - _tempdict.put(item, Operand.Create(v.StringValue())); - else if (v.IsBoolean()) - _tempdict.put(item, Operand.Create(v.BooleanValue())); - else if (v.IsDouble()) - _tempdict.put(item, Operand.Create(v.NumberValue())); - else if (v.IsObject()) - _tempdict.put(item, Operand.Create(v)); - else if (v.IsArray()) - _tempdict.put(item, Operand.Create(v)); - else if (v.IsNull()) - _tempdict.put(item, Operand.CreateNull()); - } - return; - } - } - throw new Exception("Parameter is not json String."); - } - - public boolean Parse(final String exp) throws RecognitionException { - if (exp == null || exp.equals("")) { - LastError = "Parameter exp invalid !"; - return false; - } - final AntlrCharStream stream = new AntlrCharStream(CharStreams.fromString(exp)); - final mathLexer lexer = new mathLexer(stream); - final CommonTokenStream tokens = new CommonTokenStream(lexer); - final mathParser parser = new mathParser(tokens); - final AntlrErrorListener antlrErrorListener = new AntlrErrorListener(); - parser.removeErrorListeners(); - parser.addErrorListener(antlrErrorListener); - final ProgContext context = parser.prog(); - - if (antlrErrorListener.IsError) { - _context = null; - LastError = antlrErrorListener.ErrorMsg; - return false; - } - _context = context; - return true; - } - - public Operand Evaluate() throws Exception { - if (_context == null) { - LastError = "Please use Parse to compile formula !"; - throw new Exception("Please use Parse to compile formula !"); - } - final MathVisitor visitor = new MathVisitor(); - visitor.GetParameter = f -> { - try { - return GetDiyParameterInside(f); - } catch (Exception e) { - } - return null; - }; - visitor.excelIndex = UseExcelIndex ? 1 : 0; - - visitor.DiyFunction = f -> { - return ExecuteDiyFunction(f.Name, f.OperandList); - }; - visitor.useLocalTime = UseLocalTime; - visitor.DistanceUnit= DistanceUnit; - visitor.AreaUnit=AreaUnit; - visitor.VolumeUnit=VolumeUnit; - visitor.MassUnit=MassUnit; - return visitor.visit(_context); - } - - public BigDecimal TryEvaluate(final String exp, final BigDecimal defvalue) { - try { - if (Parse(exp)) { - Operand obj = Evaluate(); - obj = obj.ToNumber("It can't be converted to number!"); - if (obj.IsError()) { - LastError = obj.ErrorMsg(); - return defvalue; - } - return obj.NumberValue(); - } - } catch (final Exception ex) { - LastError = ex.getMessage(); - } - return defvalue; - } - - public int TryEvaluate(final String exp, final int defvalue) { - try { - if (Parse(exp)) { - Operand obj = Evaluate(); - obj = obj.ToNumber("It can't be converted to number!"); - if (obj.IsError()) { - LastError = obj.ErrorMsg(); - return defvalue; - } - return obj.IntValue(); - } - } catch (final Exception ex) { - LastError = ex.getMessage(); - } - return defvalue; - } - - public double TryEvaluate(final String exp, final double defvalue) { - try { - if (Parse(exp)) { - Operand obj = Evaluate(); - obj = obj.ToNumber("It can't be converted to number!"); - if (obj.IsError()) { - LastError = obj.ErrorMsg(); - return defvalue; - } - return obj.DoubleValue(); - } - } catch (final Exception ex) { - LastError = ex.getMessage(); - } - return defvalue; - } - - public long TryEvaluate(final String exp, final long defvalue) { - try { - if (Parse(exp)) { - Operand obj = Evaluate(); - obj = obj.ToNumber("It can't be converted to number!"); - if (obj.IsError()) { - LastError = obj.ErrorMsg(); - return defvalue; - } - return obj.LongValue(); - } - } catch (final Exception ex) { - LastError = ex.getMessage(); - } - return defvalue; - } - - public String TryEvaluate(final String exp, final String defvalue) { - try { - if (Parse(exp)) { - Operand obj = Evaluate(); - if (obj.IsNull()) { - return null; - } - obj = obj.ToText("It can't be converted to String!"); - if (obj.IsError()) { - LastError = obj.ErrorMsg(); - return defvalue; - } - return obj.TextValue(); - } - } catch (final Exception ex) { - LastError = ex.getMessage(); - } - return defvalue; - } - - public boolean TryEvaluate(final String exp, final boolean defvalue) { - try { - if (Parse(exp)) { - Operand obj = Evaluate(); - obj = obj.ToBoolean("It can't be converted to boolean!"); - if (obj.IsError()) { - LastError = obj.ErrorMsg(); - return defvalue; - } - return obj.BooleanValue(); - } - } catch (final Exception ex) { - LastError = ex.getMessage(); - } - return defvalue; - } - - public DateTime TryEvaluate(final String exp, final DateTime defvalue) { - try { - if (Parse(exp)) { - Operand obj = Evaluate(); - obj = obj.ToDate("It can't be converted to DateTime!"); - if (obj.IsError()) { - LastError = obj.ErrorMsg(); - return defvalue; - } - if (UseLocalTime) { - return obj.DateValue().ToDateTime(DateTimeZone.getDefault()); - } - return obj.DateValue().ToDateTime(DateTimeZone.UTC); - } - } catch (final Exception ex) { - LastError = ex.getMessage(); - } - return defvalue; - } - - public MyDate TryEvaluate(final String exp, final MyDate defvalue) { - try { - if (Parse(exp)) { - Operand obj = Evaluate(); - obj = obj.ToDate("It can't be converted to MyDate!"); - if (obj.IsError()) { - LastError = obj.ErrorMsg(); - return defvalue; - } - return obj.DateValue(); - } - } catch (final Exception ex) { - LastError = ex.getMessage(); - } - return defvalue; - } - - /** - * 获取简化公式 - * - * @param formula 公式 - */ - public String GetSimplifiedFormula(final String formula) { - try { - if (Parse(formula)) { - final MathSimplifiedFormulaVisitor visitor = new MathSimplifiedFormulaVisitor(); - visitor.GetParameter = f -> { - try { - return GetDiyParameterInside(f); - } catch (Exception e) { - } - return null; - }; - visitor.excelIndex = UseExcelIndex ? 1 : 0; - visitor.DiyFunction = f -> { - return ExecuteDiyFunction(f.Name, f.OperandList); - }; - visitor.useLocalTime = UseLocalTime; - visitor.DistanceUnit= DistanceUnit; - visitor.AreaUnit=AreaUnit; - visitor.VolumeUnit=VolumeUnit; - visitor.MassUnit=MassUnit; - Operand obj = visitor.visit(_context); - obj = obj.ToText("It can't be converted to String!"); - if (obj.IsError()) { - LastError = obj.ErrorMsg(); - return null; - } - return obj.TextValue(); - } - } catch (final Exception ex) { - LastError = ex.getMessage(); - } - return null; - } - - /** - * 计算公式 - * - * @param formula 公式 - * @param splitChar 分隔符 - * @return - */ - public String EvaluateFormula(String formula, Character splitChar) { - if (formula == null || formula.equals("")) - return ""; - List splitChars = new ArrayList<>(); - splitChars.add(splitChar); - return EvaluateFormula(formula, splitChars); - } - - /** - * 计算公式 - * - * @param formula 公式 - * @param splitChars 分隔符 - * @return - */ - public String EvaluateFormula(String formula, List splitChars) { - if (formula == null || formula.equals("")) - return ""; - List sp = CharUtil.SplitFormula(formula, splitChars); - - StringBuilder stringBuilder = new StringBuilder(); - for (int i = 0; i < sp.size(); i++) { - String s = sp.get(i); - if (s.length() == 1 && splitChars.contains(s.charAt(0))) { - stringBuilder.append(s); - } else { - // TODO 替换此处 - String d = TryEvaluate(s, ""); - stringBuilder.append(d); - } - } - return stringBuilder.toString(); - } -} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java deleted file mode 100644 index 6fce80c1d..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java +++ /dev/null @@ -1,594 +0,0 @@ -package toolgood.algorithm; - -import org.antlr.v4.runtime.CharStreams; -import org.antlr.v4.runtime.CommonTokenStream; - -import toolgood.algorithm.enums.AreaUnitType; -import toolgood.algorithm.enums.DistanceUnitType; -import toolgood.algorithm.enums.MassUnitType; -import toolgood.algorithm.enums.VolumeUnitType; -import toolgood.algorithm.internals.AntlrCharStream; -import toolgood.algorithm.internals.AntlrErrorListener; -import toolgood.algorithm.internals.CharUtil; -import toolgood.algorithm.internals.DiyNameVisitor; -import toolgood.algorithm.internals.MathVisitor; -import toolgood.algorithm.internals.MyFunction; -import toolgood.algorithm.internals.MyParameter; -import toolgood.algorithm.math.mathLexer; -import toolgood.algorithm.math.mathParser; -import toolgood.algorithm.math.mathParser.ProgContext; -import toolgood.algorithm.unitConversion.AreaConverter; -import toolgood.algorithm.unitConversion.DistanceConverter; -import toolgood.algorithm.unitConversion.MassConverter; -import toolgood.algorithm.unitConversion.VolumeConverter; - -import java.math.BigDecimal; -import java.util.HashSet; -import java.util.Set; -import java.util.function.Function; - -/** - * 算法引擎助手 - */ -public class AlgorithmEngineHelper { - - private static Set _lexerSet; - - private static Set GetLexerSet() { - if (_lexerSet == null) { - Set lexerSet = new HashSet(); - lexerSet.add("NULL"); - lexerSet.add("IF"); - lexerSet.add("IFERROR"); - lexerSet.add("ISNUMBER"); - lexerSet.add("ISTEXT"); - lexerSet.add("ISERROR"); - lexerSet.add("ISNONTEXT"); - lexerSet.add("ISLOGICAL"); - lexerSet.add("ISEVEN"); - lexerSet.add("ISODD"); - lexerSet.add("ISNULL"); - lexerSet.add("ISNULLORERROR"); - lexerSet.add("AND"); - lexerSet.add("OR"); - lexerSet.add("NOT"); - lexerSet.add("TRUE"); - lexerSet.add("FALSE"); - lexerSet.add("E"); - lexerSet.add("PI"); - lexerSet.add("DEC2BIN"); - lexerSet.add("DEC2HEX"); - lexerSet.add("DEC2OCT"); - lexerSet.add("HEX2BIN"); - lexerSet.add("HEX2DEC"); - lexerSet.add("HEX2OCT"); - lexerSet.add("OCT2BIN"); - lexerSet.add("OCT2DEC"); - lexerSet.add("OCT2HEX"); - lexerSet.add("BIN2OCT"); - lexerSet.add("BIN2DEC"); - lexerSet.add("BIN2HEX"); - lexerSet.add("ABS"); - lexerSet.add("QUOTIENT"); - lexerSet.add("MOD"); - lexerSet.add("SIGN"); - lexerSet.add("SQRT"); - lexerSet.add("TRUNC"); - lexerSet.add("INT"); - lexerSet.add("GCD"); - lexerSet.add("LCM"); - lexerSet.add("COMBIN"); - lexerSet.add("PERMUT"); - lexerSet.add("DEGREES"); - lexerSet.add("RADIANS"); - lexerSet.add("COS"); - lexerSet.add("COSH"); - lexerSet.add("SIN"); - lexerSet.add("SINH"); - lexerSet.add("TAN"); - lexerSet.add("TANH"); - lexerSet.add("ACOS"); - lexerSet.add("ACOSH"); - lexerSet.add("ASIN"); - lexerSet.add("ASINH"); - lexerSet.add("ATAN"); - lexerSet.add("ATANH"); - lexerSet.add("ATAN2"); - lexerSet.add("ROUND"); - lexerSet.add("ROUNDDOWN"); - lexerSet.add("ROUNDUP"); - lexerSet.add("CEILING"); - lexerSet.add("FLOOR"); - lexerSet.add("EVEN"); - lexerSet.add("ODD"); - lexerSet.add("MROUND"); - lexerSet.add("RAND"); - lexerSet.add("RANDBETWEEN"); - lexerSet.add("FACT"); - lexerSet.add("FACTDOUBLE"); - lexerSet.add("POWER"); - lexerSet.add("EXP"); - lexerSet.add("LN"); - lexerSet.add("LOG"); - lexerSet.add("LOG10"); - lexerSet.add("MULTINOMIAL"); - lexerSet.add("PRODUCT"); - lexerSet.add("SQRTPI"); - lexerSet.add("SUMSQ"); - lexerSet.add("ASC"); - lexerSet.add("JIS"); - lexerSet.add("WIDECHAR"); - lexerSet.add("CHAR"); - lexerSet.add("CLEAN"); - lexerSet.add("CODE"); - lexerSet.add("CONCATENATE"); - lexerSet.add("EXACT"); - lexerSet.add("FIND"); - lexerSet.add("FIXED"); - lexerSet.add("LEFT"); - lexerSet.add("LEN"); - lexerSet.add("LOWER"); - lexerSet.add("TOLOWER"); - lexerSet.add("MID"); - lexerSet.add("PROPER"); - lexerSet.add("REPLACE"); - lexerSet.add("REPT"); - lexerSet.add("RIGHT"); - lexerSet.add("RMB"); - lexerSet.add("SEARCH"); - lexerSet.add("SUBSTITUTE"); - lexerSet.add("T"); - lexerSet.add("TEXT"); - lexerSet.add("TRIM"); - lexerSet.add("UPPER"); - lexerSet.add("TOUPPER"); - lexerSet.add("VALUE"); - lexerSet.add("DATEVALUE"); - lexerSet.add("TIMEVALUE"); - lexerSet.add("DATE"); - lexerSet.add("TIME"); - lexerSet.add("NOW"); - lexerSet.add("TODAY"); - lexerSet.add("YEAR"); - lexerSet.add("MONTH"); - lexerSet.add("DAY"); - lexerSet.add("HOUR"); - lexerSet.add("MINUTE"); - lexerSet.add("SECOND"); - lexerSet.add("WEEKDAY"); - lexerSet.add("DATEDIF"); - lexerSet.add("DAYS360"); - lexerSet.add("EDATE"); - lexerSet.add("EOMONTH"); - lexerSet.add("NETWORKDAYS"); - lexerSet.add("WORKDAY"); - lexerSet.add("WEEKNUM"); - lexerSet.add("MAX"); - lexerSet.add("MEDIAN"); - lexerSet.add("MIN"); - lexerSet.add("QUARTILE"); - lexerSet.add("MODE"); - lexerSet.add("LARGE"); - lexerSet.add("SMALL"); - lexerSet.add("PERCENTILE"); - lexerSet.add("PERCENTRANK"); - lexerSet.add("AVERAGE"); - lexerSet.add("AVERAGEIF"); - lexerSet.add("GEOMEAN"); - lexerSet.add("HARMEAN"); - lexerSet.add("COUNT"); - lexerSet.add("COUNTIF"); - lexerSet.add("SUM"); - lexerSet.add("SUMIF"); - lexerSet.add("AVEDEV"); - lexerSet.add("STDEV"); - lexerSet.add("STDEV.S"); - lexerSet.add("STDEVP"); - lexerSet.add("STDEV.P"); - lexerSet.add("COVAR"); - lexerSet.add("COVARIANCE.P"); - lexerSet.add("COVARIANCE.S"); - lexerSet.add("DEVSQ"); - lexerSet.add("VAR"); - lexerSet.add("VAR.S"); - lexerSet.add("VARP"); - lexerSet.add("VAR.P"); - lexerSet.add("NORMDIST"); - lexerSet.add("NORM.DIST"); - lexerSet.add("NORMINV"); - lexerSet.add("NORM.INV"); - lexerSet.add("NORMSDIST"); - lexerSet.add("NORM.S.DIST"); - lexerSet.add("NORMSINV"); - lexerSet.add("NORM.S.INV"); - lexerSet.add("BETADIST"); - lexerSet.add("BETA.DIST"); - lexerSet.add("BETAINV"); - lexerSet.add("BETA.INV"); - lexerSet.add("BINOMDIST"); - lexerSet.add("BINOM.DIST"); - lexerSet.add("EXPONDIST"); - lexerSet.add("EXPON.DIST"); - lexerSet.add("FDIST"); - lexerSet.add("F.DIST"); - lexerSet.add("FINV"); - lexerSet.add("F.INV"); - lexerSet.add("FISHER"); - lexerSet.add("FISHERINV"); - lexerSet.add("GAMMADIST"); - lexerSet.add("GAMMA.DIST"); - lexerSet.add("GAMMAINV"); - lexerSet.add("GAMMA.INV"); - lexerSet.add("GAMMALN"); - lexerSet.add("HYPGEOMDIST"); - lexerSet.add("HYPGEOM.DIST"); - lexerSet.add("LOGINV"); - lexerSet.add("LOGNORM.INV"); - lexerSet.add("LOGNORMDIST"); - lexerSet.add("LOGNORM.DIST"); - lexerSet.add("NEGBINOMDIST"); - lexerSet.add("NEGBINOM.DIST"); - lexerSet.add("POISSON"); - lexerSet.add("POISSON.DIST"); - lexerSet.add("TDIST"); - lexerSet.add("T.DIST"); - lexerSet.add("TINV"); - lexerSet.add("T.INV"); - lexerSet.add("WEIBULL"); - lexerSet.add("URLENCODE"); - lexerSet.add("URLDECODE"); - lexerSet.add("HTMLENCODE"); - lexerSet.add("HTMLDECODE"); - lexerSet.add("BASE64TOTEXT"); - lexerSet.add("BASE64URLTOTEXT"); - lexerSet.add("TEXTTOBASE64"); - lexerSet.add("TEXTTOBASE64URL"); - lexerSet.add("REGEX"); - lexerSet.add("REGEXREPALCE"); - lexerSet.add("ISREGEX"); - lexerSet.add("ISMATCH"); - lexerSet.add("GUID"); - lexerSet.add("MD5"); - lexerSet.add("SHA1"); - lexerSet.add("SHA256"); - lexerSet.add("SHA512"); - lexerSet.add("CRC32"); - lexerSet.add("HMACMD5"); - lexerSet.add("HMACSHA1"); - lexerSet.add("HMACSHA256"); - lexerSet.add("HMACSHA512"); - lexerSet.add("TRIMSTART"); - lexerSet.add("LTRIM"); - lexerSet.add("TRIMEND"); - lexerSet.add("RTRIM"); - lexerSet.add("INDEXOF"); - lexerSet.add("LASTINDEXOF"); - lexerSet.add("SPLIT"); - lexerSet.add("JOIN"); - lexerSet.add("SUBSTRING"); - lexerSet.add("STARTSWITH"); - lexerSet.add("ENDSWITH"); - lexerSet.add("ISNULLOREMPTY"); - lexerSet.add("ISNULLORWHITESPACE"); - lexerSet.add("REMOVESTART"); - lexerSet.add("REMOVEEND"); - lexerSet.add("JSON"); - lexerSet.add("VLOOKUP"); - lexerSet.add("LOOKUP"); - lexerSet.add("ARRAY"); - lexerSet.add("ADDYEARS"); - lexerSet.add("ADDMONTHS"); - lexerSet.add("ADDDAYS"); - lexerSet.add("ADDHOURS"); - lexerSet.add("ADDMINUTES"); - lexerSet.add("ADDSECONDS"); - lexerSet.add("TIMESTAMP"); - - lexerSet.add("HAS"); - lexerSet.add("HASKEY"); - lexerSet.add("CONTAINS"); - lexerSet.add("CONTAINSKEY"); - lexerSet.add("HASVALUE"); - lexerSet.add("CONTAINSVALUE"); - lexerSet.add("PARAM"); - lexerSet.add("PARAMETER"); - lexerSet.add("GETPARAMETER"); - lexerSet.add("ERROR"); - _lexerSet = lexerSet; - } - return _lexerSet; - } - - /** - * 是否与内置关键字相同 - * - * @param parameter - * @return - */ - public static boolean IsKeywords(String parameter) { - Set lexerSet = GetLexerSet(); - return lexerSet.contains(CharUtil.StandardString(parameter)); - } - - /** - * 获取 DIY 名称 - * - * @param exp - * @return - * @throws Exception - */ - public static DiyNameInfo GetDiyNames(String exp) throws Exception { - if (exp == null || exp.equals("")) { - throw new Exception("Parameter exp invalid !"); - } - final AntlrCharStream stream = new AntlrCharStream(CharStreams.fromString(exp)); - final mathLexer lexer = new mathLexer(stream); - final CommonTokenStream tokens = new CommonTokenStream(lexer); - final mathParser parser = new mathParser(tokens); - final AntlrErrorListener antlrErrorListener = new AntlrErrorListener(); - parser.removeErrorListeners(); - parser.addErrorListener(antlrErrorListener); - final ProgContext context = parser.prog(); - - if (antlrErrorListener.IsError) { - throw new Exception(antlrErrorListener.ErrorMsg); - } - - final DiyNameVisitor visitor = new DiyNameVisitor(); - visitor.visit(context); - return visitor.diy; - } - - /** - * 单位转换 - * - * @param src - * @param oldSrcUnit - * @param oldTarUnit - * @return - * @throws Exception - */ - public static BigDecimal UnitConversion(BigDecimal src, String oldSrcUnit, String oldTarUnit) throws Exception { - return UnitConversion(src, oldSrcUnit, oldTarUnit, null); - } - - /** - * 单位转换 - * - * @param src - * @param oldSrcUnit - * @param oldTarUnit - * @param name - * @return - * @throws Exception - */ - public static BigDecimal UnitConversion(BigDecimal src, String oldSrcUnit, String oldTarUnit, String name) - throws Exception { - if (oldSrcUnit == null || oldSrcUnit.equals("") || oldTarUnit == null || oldTarUnit.equals("")) { - return src; - } - oldSrcUnit = oldSrcUnit.replaceAll("[\\s \\(\\)()\\[\\]<>]", ""); - if (oldSrcUnit.equals(oldTarUnit)) { - return src; - } - if (DistanceConverter.Exists(oldSrcUnit, oldTarUnit)) { - DistanceConverter c = new DistanceConverter(oldSrcUnit, oldTarUnit); - return c.LeftToRight(src); - } - if (MassConverter.Exists(oldSrcUnit, oldTarUnit)) { - MassConverter c = new MassConverter(oldSrcUnit, oldTarUnit); - return c.LeftToRight(src); - } - if (AreaConverter.Exists(oldSrcUnit, oldTarUnit)) { - AreaConverter c = new AreaConverter(oldSrcUnit, oldTarUnit); - return c.LeftToRight(src); - } - if (VolumeConverter.Exists(oldSrcUnit, oldTarUnit)) { - VolumeConverter c = new VolumeConverter(oldSrcUnit, oldTarUnit); - return c.LeftToRight(src); - } - if (name == null || name.equals("")) { - throw new Exception("The input item has different units and cannot be converted from [" + oldSrcUnit - + "] to [" + oldTarUnit + "]"); - } - throw new Exception("The input item [" + name + "] has different units and cannot be converted from [" - + oldSrcUnit + "] to [" + oldTarUnit + "]"); - } - - /** - * 解析 - * - * @param exp - * @return - * @throws Exception - */ - public static mathParser.ProgContext Parse(String exp) throws Exception { - if (null == exp || exp.equals("")) { - throw new Exception("Parameter exp invalid !"); - } - final AntlrCharStream stream = new AntlrCharStream(CharStreams.fromString(exp)); - final mathLexer lexer = new mathLexer(stream); - final CommonTokenStream tokens = new CommonTokenStream(lexer); - final mathParser parser = new mathParser(tokens); - final AntlrErrorListener antlrErrorListener = new AntlrErrorListener(); - parser.removeErrorListeners(); - parser.addErrorListener(antlrErrorListener); - final ProgContext context = parser.prog(); - - if (antlrErrorListener.IsError) { - throw new Exception(antlrErrorListener.ErrorMsg); - } - return context; - } - - /** - * 执行 - * - * @param context - * @return - */ - public static Operand Evaluate(mathParser.ProgContext context) { - return Evaluate(context, null, null, true, false, DistanceUnitType.M, AreaUnitType.M2, VolumeUnitType.M3, - MassUnitType.KG); - } - - /** - * 执行 - * - * @param context - * @param GetParameter - * @return - */ - public static Operand Evaluate(mathParser.ProgContext context, Function GetParameter) { - return Evaluate(context, GetParameter, null, true, false, DistanceUnitType.M, AreaUnitType.M2, - VolumeUnitType.M3, - MassUnitType.KG); - } - - /** - * 执行 - * - * @param context - * @param GetParameter - * @param ExecuteDiyFunction - * @return - */ - public static Operand Evaluate(mathParser.ProgContext context, Function GetParameter, - Function ExecuteDiyFunction) { - return Evaluate(context, GetParameter, ExecuteDiyFunction, true, false, DistanceUnitType.M, AreaUnitType.M2, - VolumeUnitType.M3, - MassUnitType.KG); - } - - /** - * 执行 - * - * @param context - * @param GetParameter - * @param ExecuteDiyFunction - * @param UseExcelIndex - * @return - */ - public static Operand Evaluate(mathParser.ProgContext context, Function GetParameter, - Function ExecuteDiyFunction, boolean UseExcelIndex) { - return Evaluate(context, GetParameter, ExecuteDiyFunction, UseExcelIndex, false, DistanceUnitType.M, - AreaUnitType.M2, - VolumeUnitType.M3, - MassUnitType.KG); - } - - /** - * 执行 - * - * @param context - * @param GetParameter - * @param ExecuteDiyFunction - * @param UseExcelIndex - * @param UseLocalTime - * @return - */ - public static Operand Evaluate(mathParser.ProgContext context, Function GetParameter, - Function ExecuteDiyFunction, boolean UseExcelIndex, boolean UseLocalTime) { - return Evaluate(context, GetParameter, ExecuteDiyFunction, UseExcelIndex, UseLocalTime, DistanceUnitType.M, - AreaUnitType.M2, - VolumeUnitType.M3, - MassUnitType.KG); - } - - /** - * 执行 - * - * @param context - * @param GetParameter - * @param ExecuteDiyFunction - * @param UseExcelIndex - * @param UseLocalTime - * @param DistanceUnit - * @return - */ - public static Operand Evaluate(mathParser.ProgContext context, Function GetParameter, - Function ExecuteDiyFunction, boolean UseExcelIndex, boolean UseLocalTime, - DistanceUnitType DistanceUnit) { - return Evaluate(context, GetParameter, ExecuteDiyFunction, UseExcelIndex, UseLocalTime, DistanceUnit, - AreaUnitType.M2, - VolumeUnitType.M3, - MassUnitType.KG); - } - - /** - * 执行 - * - * @param context - * @param GetParameter - * @param ExecuteDiyFunction - * @param UseExcelIndex - * @param UseLocalTime - * @param DistanceUnit - * @param AreaUnit - * @return - */ - public static Operand Evaluate(mathParser.ProgContext context, Function GetParameter, - Function ExecuteDiyFunction, boolean UseExcelIndex, boolean UseLocalTime, - DistanceUnitType DistanceUnit, AreaUnitType AreaUnit) { - return Evaluate(context, GetParameter, ExecuteDiyFunction, UseExcelIndex, UseLocalTime, DistanceUnit, - AreaUnit, - VolumeUnitType.M3, - MassUnitType.KG); - } - - /** - * 执行 - * - * @param context - * @param GetParameter - * @param ExecuteDiyFunction - * @param UseExcelIndex - * @param UseLocalTime - * @param DistanceUnit - * @param AreaUnit - * @param VolumeUnit - * @return - */ - public static Operand Evaluate(mathParser.ProgContext context, Function GetParameter, - Function ExecuteDiyFunction, boolean UseExcelIndex, boolean UseLocalTime, - DistanceUnitType DistanceUnit, AreaUnitType AreaUnit, VolumeUnitType VolumeUnit) { - return Evaluate(context, GetParameter, ExecuteDiyFunction, UseExcelIndex, UseLocalTime, DistanceUnit, - AreaUnit, - VolumeUnit, - MassUnitType.KG); - } - - /** - * 执行 - * - * @param context - * @param GetParameter - * @param ExecuteDiyFunction - * @param UseExcelIndex - * @param UseLocalTime - * @param DistanceUnit - * @param AreaUnit - * @param VolumeUnit - * @param MassUnit - * @return - */ - public static Operand Evaluate(mathParser.ProgContext context, Function GetParameter, - Function ExecuteDiyFunction, boolean UseExcelIndex, boolean UseLocalTime, - DistanceUnitType DistanceUnit, AreaUnitType AreaUnit, VolumeUnitType VolumeUnit, MassUnitType MassUnit) { - MathVisitor visitor = new MathVisitor(); - if (GetParameter != null) { - visitor.GetParameter = GetParameter; - } - if (ExecuteDiyFunction != null) { - visitor.DiyFunction = ExecuteDiyFunction; - } - visitor.excelIndex = UseExcelIndex ? 1 : 0; - visitor.useLocalTime = UseLocalTime; - visitor.MassUnit = MassUnit; - visitor.DistanceUnit = DistanceUnit; - visitor.AreaUnit = AreaUnit; - visitor.VolumeUnit = VolumeUnit; - return visitor.visit(context); - } - -} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/DiyNameInfo.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/DiyNameInfo.java deleted file mode 100644 index af0bdd73e..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/DiyNameInfo.java +++ /dev/null @@ -1,16 +0,0 @@ -package toolgood.algorithm; - -import java.util.ArrayList; -import java.util.List; - -public class DiyNameInfo { - public List Parameters; - - public List Functions; - - public DiyNameInfo(){ - Parameters=new ArrayList<>(); - Functions=new ArrayList<>(); - } - -} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/MyDate.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/MyDate.java deleted file mode 100644 index 61f5805f8..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/MyDate.java +++ /dev/null @@ -1,386 +0,0 @@ -package toolgood.algorithm; - -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; - -import java.math.BigDecimal; -import java.math.MathContext; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.temporal.ChronoUnit; -import java.util.Date; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class MyDate { - public Integer Year; - public Integer Month; - public Integer Day; - public int Hour; - public int Minute; - public int Second; - - // public MyDate(TimeSpan dt) { - // Day = dt.Days; - // Hour = dt.Hours; - // Minute = dt.Minutes; - // Second = dt.Seconds; - // } - - private MyDate() { - } - - public MyDate(int year, int month, int day, int hour, int minute, int second) { - Year = year; - Month = month; - Day = day; - Hour = hour; - Minute = minute; - Second = second; - } - - public MyDate(Date dt) { - DateTime dTime = new DateTime(dt); - Year = dTime.getYear(); - Month = dTime.getMonthOfYear(); - Day = dTime.getDayOfMonth(); - Hour = dTime.getHourOfDay(); - Minute = dTime.getMinuteOfHour(); - Second = dTime.getSecondOfMinute(); - } - - public MyDate(DateTime dTime) { - Year = dTime.getYear(); - Month = dTime.getMonthOfYear(); - Day = dTime.getDayOfMonth(); - Hour = dTime.getHourOfDay(); - Minute = dTime.getMinuteOfHour(); - Second = dTime.getSecondOfMinute(); - } - - public MyDate(BigDecimal num) { - int days = num.intValue(); - if (days > 365) { - LocalDate start = LocalDate.of(1900, 1, 1); - start = start.plusDays(days - 2); - Year = start.getYear(); - Month = start.getMonthValue(); - Day = start.getDayOfMonth(); - } else { - Day = days; - } - BigDecimal d = num.subtract(new BigDecimal(days)); - Hour = d.multiply(new BigDecimal(24)).intValue(); - Minute = d.multiply(new BigDecimal(24)).subtract(new BigDecimal(Hour)).multiply(new BigDecimal(60)).intValue(); - Second = d.multiply(new BigDecimal(24)).subtract(new BigDecimal(Hour)).multiply(new BigDecimal(60)) - .subtract(new BigDecimal(Minute)).multiply(new BigDecimal(60)).intValue(); - // 防止秒数出错 - if (Second == 60) { - Second = 0; - Minute = Minute + 1; - if (Minute == 60) { - Minute = 0; - Hour = Hour + 1; - } - } - } - - public MyDate(double num) { - int days = (int) num; - if (days > 365) { - LocalDate start = LocalDate.of(1900, 1, 1); - start = start.plusDays(days - 2); - Year = start.getYear(); - Month = start.getMonthValue(); - Day = start.getDayOfMonth(); - } else { - Day = days; - } - double d = num - days; - Hour = (int) (d * 24); - Minute = (int) ((d * 24 - Hour) * 60.0); - Second = (int) Math.round(((d * 24 - Hour) * 60.0 - Minute) * 60.0); - // 防止秒数出错 - if (Second == 60) { - Second = 0; - Minute = Minute + 1; - if (Minute == 60) { - Minute = 0; - Hour = Hour + 1; - } - } - } - - public static MyDate parse(String txt) { - String t = txt.trim(); - Matcher m = Pattern - .compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$") - .matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Year = Integer.parseInt(m.group(1)); - date.Month = Integer.parseInt(m.group(2)); - date.Day = Integer.parseInt(m.group(3)); - date.Hour = Integer.parseInt(m.group(4)); - date.Minute = Integer.parseInt(m.group(5)); - date.Second = Integer.parseInt(m.group(6)); - return date; - } - m = Pattern - .compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$") - .matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Year = Integer.parseInt(m.group(1)); - date.Month = Integer.parseInt(m.group(2)); - date.Day = Integer.parseInt(m.group(3)); - date.Hour = Integer.parseInt(m.group(4)); - date.Minute = Integer.parseInt(m.group(5)); - date.Second = Integer.parseInt(m.group(6)); - return date; - } - - m = Pattern.compile("(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Year = Integer.parseInt(m.group(1)); - date.Month = Integer.parseInt(m.group(2)); - date.Day = Integer.parseInt(m.group(3)); - date.Hour = Integer.parseInt(m.group(4)); - date.Minute = Integer.parseInt(m.group(5)); - return date; - } - m = Pattern.compile("(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Year = Integer.parseInt(m.group(1)); - date.Month = Integer.parseInt(m.group(2)); - date.Day = Integer.parseInt(m.group(3)); - date.Hour = Integer.parseInt(m.group(4)); - date.Minute = Integer.parseInt(m.group(5)); - return date; - } - - m = Pattern.compile("(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Year = Integer.parseInt(m.group(1)); - date.Month = Integer.parseInt(m.group(2)); - date.Day = Integer.parseInt(m.group(3)); - return date; - } - m = Pattern.compile("(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d)").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Year = Integer.parseInt(m.group(1)); - date.Month = Integer.parseInt(m.group(2)); - date.Day = Integer.parseInt(m.group(3)); - return date; - } - m = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Day = Integer.parseInt(m.group(1)); - date.Hour = Integer.parseInt(m.group(2)); - date.Minute = Integer.parseInt(m.group(3)); - date.Second = Integer.parseInt(m.group(4)); - return date; - } - m = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Hour = Integer.parseInt(m.group(1)); - date.Minute = Integer.parseInt(m.group(2)); - date.Second = Integer.parseInt(m.group(3)); - return date; - } - m = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d)$").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Hour = Integer.parseInt(m.group(1)); - date.Minute = Integer.parseInt(m.group(2)); - return date; - } - return null; - } - - public static MyDate now() { - return new MyDate(DateTime.now()); - } - - @Override - public String toString() { - StringBuffer stringBuffer = new StringBuffer(); - if (Year != null && Year > 0) { - stringBuffer.append(Year); - stringBuffer.append("-"); - if (Month < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Month); - stringBuffer.append("-"); - if (Day < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Day); - - stringBuffer.append(" "); - if (Hour < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Hour); - stringBuffer.append(":"); - if (Minute < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Minute); - stringBuffer.append(":"); - if (Second < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Second); - } else { - if (Day != null && Day > 0) { - stringBuffer.append(Day); - stringBuffer.append(" "); - } - if (Hour < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Hour); - stringBuffer.append(":"); - if (Minute < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Minute); - stringBuffer.append(":"); - if (Second < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Second); - } - - return stringBuffer.toString(); - } - - public String toString(String f) { - Date date; - if (Year != null && Year > 1900) { - date = new Date(Year, Month, Day, Hour, Minute, Second); - } else if (Day != null) { - date = new Date(1900, 1, Day, Hour, Minute, Second); - } else { - date = new Date(1900, 1, 0, Hour, Minute, Second); - } - SimpleDateFormat sd = new SimpleDateFormat(f); - return sd.format(date); - } - - public DateTime ToDateTime() { - return new DateTime(Year, Month, Day, Hour, Minute, Second, DateTimeZone.UTC); - } - - public DateTime ToDateTime(DateTimeZone zoo) { - return new DateTime(Year, Month, Day, Hour, Minute, Second, zoo); - } - - public int DayOfWeek() { - return new DateTime(Year, Month, Day, 0, 0, 0, DateTimeZone.UTC).dayOfWeek().get(); - } - - public int DayOfYear() { - return new DateTime(Year, Month, Day, 0, 0, 0, DateTimeZone.UTC).getDayOfYear(); - } - - public MyDate AddYears(int d) { - return new MyDate(ToDateTime().plusYears(d)); - } - - public MyDate AddMonths(int d) { - return new MyDate(ToDateTime().plusMonths(d)); - } - - public MyDate AddDays(int d) { - return new MyDate(ToDateTime().plusDays(d)); - } - - public MyDate AddHours(int d) { - return new MyDate(ToDateTime().plusHours(d)); - } - - public MyDate AddMinutes(int d) { - return new MyDate(ToDateTime().plusMinutes(d)); - } - - public MyDate AddSeconds(int d) { - return new MyDate(ToDateTime().plusSeconds(d)); - } - - public BigDecimal ToNumber() { - BigDecimal result = new BigDecimal(Second).divide(new BigDecimal(60), MathContext.DECIMAL32); - result = result.add(new BigDecimal(Minute)).divide(new BigDecimal(60), MathContext.DECIMAL32); - result = result.add(new BigDecimal(Hour)).divide(new BigDecimal(24), MathContext.DECIMAL32); - - if (Year != null && Year > 1900) { - LocalDate start = LocalDate.of(Year, Month, Day); - LocalDate end = LocalDate.of(1900, 1, 1); - long days = ChronoUnit.DAYS.between(end, start) + 2; - return result.add(new BigDecimal(days)); - } - if (Day != null) { - return result.add(new BigDecimal(Day)); - } - return result; - } - - public MyDate ADD(MyDate num) { - DateTime dt = this.ToDateTime(); - if (num.Year != null) { - dt = dt.plusYears(num.Year); - } - if (num.Month != null) { - dt = dt.plusMonths(num.Month); - } - if (num.Day != null) { - dt = dt.plusDays(num.Day); - } - dt = dt.plusHours(num.Hour); - dt = dt.plusMinutes(num.Minute); - dt = dt.plusSeconds(num.Second); - return new MyDate(dt); - } - - public MyDate SUB(MyDate num) { - DateTime dt = this.ToDateTime(); - if (num.Year != null) { - dt = dt.plusYears(-num.Year); - } - if (num.Month != null) { - dt = dt.plusMonths(-num.Month); - } - if (num.Day != null) { - dt = dt.plusDays(-num.Day); - } - dt = dt.plusHours(-num.Hour); - dt = dt.plusMinutes(-num.Minute); - dt = dt.plusSeconds(-num.Second); - return new MyDate(dt); - } - - public MyDate ADD(BigDecimal num) { - return new MyDate(this.ToNumber().add(num)); - } - - public MyDate SUB(BigDecimal num) { - return new MyDate(this.ToNumber().subtract(num)); - } - - public MyDate MUL(BigDecimal num) { - return new MyDate(this.ToNumber().multiply(num)); - } - - public MyDate DIV(BigDecimal num) { - return new MyDate(this.ToNumber().divide(num, MathContext.DECIMAL32)); - } - -} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/Operand.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/Operand.java index e5e26257d..29620236e 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/Operand.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/Operand.java @@ -1,738 +1,440 @@ +/** + * 操作数 + */ package toolgood.algorithm; -import org.joda.time.DateTime; -import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.litJson.JsonMapper; - import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Date; import java.util.List; -import java.util.regex.Pattern; +import java.util.Collection; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.internals.JsonData; public abstract class Operand { - public final static Operand Version = new OperandString("ToolGood.Algorithm 4.0.0.1"); - public final static Operand True = new OperandBoolean(true); - public final static Operand False = new OperandBoolean(false); - public final static Operand One = Operand.Create(1); - public final static Operand Zero = Operand.Create(0); - - public boolean IsNull() { - return false; - } - - public boolean IsError() { - return false; - } - - public String ErrorMsg() { - return null; - } - - public OperandType Type() { - return OperandType.ERROR; - } - - public BigDecimal NumberValue() { - return null; - } - - public double DoubleValue() { - return 0; - } - - public int IntValue() { - return 0; + /** + * 版本号 + */ + public static final Operand VERSION = new OperandString("ToolGood.Algorithm 6.1"); + + /** + * True + */ + public static final Operand TRUE = new OperandBoolean(true); + + /** + * False + */ + public static final Operand FALSE = new OperandBoolean(false); + + /** + * One + */ + public static final Operand ONE = Operand.create(new BigDecimal("1")); + + /** + * Zero + */ + public static final Operand ZERO = Operand.create(new BigDecimal("0")); + + + /** + * 是否为空值 + */ + public boolean isNull() { return false; } + /** + * 是否为非空值 + */ + public boolean isNotNull() { return true; } + + /** + * 是否数字 + */ + public boolean isNumber() { return false; } + /** + * 是否非数字 + */ + public boolean isNotNumber() { return true; } + + /** + * 是否字符串 + */ + public boolean isText() { return false; } + /** + * 是否非字符串 + */ + public boolean isNotText() { return true; } + + /** + * 是否布尔值 + */ + public boolean isBoolean() { return false; } + /** + * 是否非布尔值 + */ + public boolean isNotBoolean() { return true; } + /** + * 是否数组 + */ + public boolean isArray() { return false; } + /** + * 是否非数组 + */ + public boolean isNotArray() { return true; } + /** + * 是否日期 + */ + public boolean isDate() { return false; } + /** + * 是否非日期 + */ + public boolean isNotDate() { return true; } + /** + * 是否Json对象 + */ + public boolean isJson() { return false; } + /** + * 是否非Json对象 + */ + public boolean isNotJson() { return true; } + /** + * 是否Json数组 + */ + public boolean isArrayJson() { return false; } + /** + * 是否非Json数组 + */ + public boolean isNotArrayJson() { return true; } + + /** + * 是否出错 + */ + public boolean isError() { return false; } + + /** + * 错误信息 + */ + public String getErrorMsg() { return null; } + + /** + * 操作数类型 + */ + public abstract OperandType getType(); + + + + /** + * 数字值 + */ + public BigDecimal getNumberValue() { throw new UnsupportedOperationException(); } + + /** + * double值 + */ + public double getDoubleValue() { throw new UnsupportedOperationException(); } + + /** + * BigDecimal值 + */ + public BigDecimal getBigDecimalValue() { throw new UnsupportedOperationException(); } + + /** + * int值 + */ + public int getIntValue() { throw new UnsupportedOperationException(); } + + /** + * long值 + */ + public long getLongValue() { throw new UnsupportedOperationException(); } + + /** + * 字符串值 + */ + public String getTextValue() { throw new UnsupportedOperationException(); } + + /** + * 布尔值 + */ + public boolean getBooleanValue() { throw new UnsupportedOperationException(); } + + /** + * 数组值 + */ + public List getArrayValue() { throw new UnsupportedOperationException(); } + + /** + * Json值 + */ + JsonData getJsonValue() { throw new UnsupportedOperationException(); } + + /** + * 时间值 + */ + public MyDate getDateValue() { throw new UnsupportedOperationException(); } + + + + /** + * 创建操作数 + */ + public static Operand create(boolean obj) { + return obj ? TRUE : FALSE; + } + + + + /** + * 创建操作数 + */ + public static Operand create(short obj) { + return new OperandInt(obj); + } + + /** + * 创建操作数 + */ + public static Operand create(int obj) { + return new OperandInt(obj); + } + + /** + * 创建操作数 + */ + public static Operand create(long obj) { + return new OperandBigDecimal(new BigDecimal(obj)); + } + + /** + * 创建操作数 + */ + public static Operand create(float obj) { + return new OperandBigDecimal(new BigDecimal(obj)); + } + + /** + * 创建操作数 + */ + public static Operand create(double obj) { + return new OperandBigDecimal(new BigDecimal(obj)); } - public long LongValue() { - return 0; + /** + * 创建操作数 + */ + public static Operand create(BigDecimal obj) { + return new OperandBigDecimal(obj); } - public Object Value() { - return null; - } - - public String TextValue() { - return null; - } - - public boolean BooleanValue() { - return false; - } - - public List ArrayValue() { - return null; - } - - public JsonData JsonValue() { - return null; - } - - public MyDate DateValue() { - return null; - } - - public static Operand Create(final boolean obj) { - return obj ? True : False; - } - - public static Operand Create(final short obj) { - return new OperandNumber(new BigDecimal(obj)); - } + - public static Operand Create(final int obj) { - return new OperandNumber(new BigDecimal(obj)); - } - - public static Operand Create(final long obj) { - return new OperandNumber(new BigDecimal(obj)); - } - - public static Operand Create(final float obj) { - return new OperandNumber(new BigDecimal(obj)); - } - - public static Operand Create(final double obj) { - return new OperandNumber(new BigDecimal(obj)); - } - - public static Operand Create(final BigDecimal obj) { - return new OperandNumber(obj); - } - - public static Operand Create(final String obj) { - if (null == obj) { - return CreateNull(); + /** + * 创建操作数 + */ + public static Operand create(String obj) { + if (obj == null) { + return Operand.createNull(); } return new OperandString(obj); } - public static Operand CreateJson(final String txt) { + /** + * 创建操作数 + */ + public static Operand createJson(String txt) { if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { try { - JsonData json = JsonMapper.ToObject(txt); - return Create(json); + JsonData json = JsonData.parse(txt); + return Operand.create(json); } catch (Exception e) { } } - return Error("string to json is error!"); - } - - public static Operand Create(final MyDate obj) { - return new OperandDate(obj); + return Operand.error("Convert to json error!"); } - public static Operand Create(final DateTime obj) { - return new OperandDate(new MyDate(obj)); + /** + * 创建操作数 + */ + public static Operand create(MyDate obj) { + return new OperandMyDate(obj); } - public static Operand Create(final Date obj) { - return new OperandDate(new MyDate(obj)); + /** + * 创建操作数 + */ + public static Operand create(long timestamp) { + return new OperandMyDate(new MyDate(timestamp)); } - public static Operand Create(final JsonData obj) { + /** + * 创建操作数 + */ + public static Operand create(JsonData obj) { return new OperandJson(obj); } - public static Operand Create(List obj) { + /** + * 创建操作数 + */ + public static Operand create(List obj) { return new OperandArray(obj); } - public static Operand Error(final String msg) { - return new OperandError(msg); + /** + * 创建操作数 + */ + public static Operand create(Collection obj) { + List array = new ArrayList<>(); + for (String item : obj) { + array.add(create(item)); + } + return new OperandArray(array); } - public static Operand CreateNull() { - return new OperandNull(); + /** + * 创建操作数 + */ + public static Operand create(Collection obj) { + List array = new ArrayList<>(); + for (Double item : obj) { + array.add(create(new BigDecimal(item.toString()))); + } + return new OperandArray(array); } - public Operand ToNumber(final String errorMessage) { - return Error(errorMessage); + /** + * 创建操作数 + */ + public static Operand create(Collection obj) { + List array = new ArrayList<>(); + for (BigDecimal item : obj) { + array.add(create(item)); + } + return new OperandArray(array); } - public Operand ToBoolean(final String errorMessage) { - return Error(errorMessage); + /** + * 创建操作数 + */ + public static Operand create(Collection obj) { + List array = new ArrayList<>(); + for (Integer item : obj) { + array.add(create(item)); + } + return new OperandArray(array); } - public Operand ToText(final String errorMessage) { - return Error(errorMessage); + /** + * 创建操作数 + */ + public static Operand create(Collection obj) { + List array = new ArrayList<>(); + for (Boolean item : obj) { + array.add(create(item)); + } + return new OperandArray(array); } - public Operand ToDate(final String errorMessage) { - return Error(errorMessage); + /** + * 创建操作数 + */ + public static Operand error(String msg) { + return new OperandError(msg); } - public Operand ToJson(final String errorMessage) { - return Error(errorMessage); + /** + * 创建操作数 + */ + public static Operand error(String msg, Object... args) { + return new OperandError(String.format(msg, args)); } - public Operand ToArray(final String errorMessage) { - return Error(errorMessage); + /** + * 创建操作数 + */ + public static Operand createNull() { + return new OperandNull(); } - static abstract class OperandT extends Operand { - protected T _value; + - @Override - public Object Value() { - return _value; - } + - public OperandT(final T obj) { - _value = obj; - } + /** + * 转数值类型 + */ + public Operand toNumber(String errorMessage) { + return error(errorMessage != null ? errorMessage : "Convert to number error!"); } - static class OperandArray extends OperandT> { - public OperandArray(final List obj) { - super(obj); - } - - @Override - public OperandType Type() { - return OperandType.ARRARY; - } - - @Override - public List ArrayValue() { - return _value; - } - - @Override - public Operand ToArray(String errorMessage) { - return this; - } - + /** + * 转数值类型 + */ + public Operand toNumber(String errorMessage, Object... args) { + return error(String.format(errorMessage, args)); } - static class OperandBoolean extends OperandT { - public OperandBoolean(final Boolean obj) { - super(obj); - } - - @Override - public OperandType Type() { - return OperandType.BOOLEAN; - } - - @Override - public boolean BooleanValue() { - return _value; - } - - @Override - public Operand ToNumber(String errorMessage) { - return BooleanValue() ? One : Zero; - } - - @Override - public Operand ToBoolean(String errorMessage) { - return this; - } - - @Override - public Operand ToText(String errorMessage) { - return Create(BooleanValue() ? "TRUE" : "FALSE"); - } - - @Override - public Operand ToArray(String errorMessage) { - if (errorMessage == null) { - errorMessage = "Convert bool to array error!"; - } - return Error(errorMessage); - } - - @Override - public Operand ToJson(String errorMessage) { - if (errorMessage == null) { - errorMessage = "Convert bool to json error!"; - } - return Error(errorMessage); - } - - @Override - public Operand ToDate(String errorMessage) { - if (errorMessage == null) { - errorMessage = "Convert bool to date error!"; - } - return Error(errorMessage); - } + /** + * 转bool类型 + */ + public Operand toBoolean(String errorMessage) { + return error(errorMessage != null ? errorMessage : "Convert to bool error!"); } - static class OperandDate extends OperandT { - public OperandDate(final MyDate obj) { - super(obj); - } - - @Override - public OperandType Type() { - return OperandType.DATE; - } - - @Override - public MyDate DateValue() { - return _value; - } - - @Override - public Operand ToNumber(String errorMessage) { - return Create(DateValue().ToNumber()); - } - - @Override - public Operand ToBoolean(String errorMessage) { - return ((DateValue().ToNumber().compareTo(new BigDecimal(0))) != 0) ? True : False; - } - - @Override - public Operand ToText(String errorMessage) { - return Create(DateValue().toString()); - } - - @Override - public Operand ToDate(String errorMessage) { - return this; - } - - @Override - public Operand ToArray(String errorMessage) { - if (errorMessage == null) { - errorMessage = "Convert date to array error!"; - } - return Error(errorMessage); - } - - @Override - public Operand ToJson(String errorMessage) { - if (errorMessage == null) { - errorMessage = "Convert date to json error!"; - } - return Error(errorMessage); - } - + /** + * 转bool类型 + */ + public Operand toBoolean(String errorMessage, Object... args) { + return error(String.format(errorMessage, args)); } - static class OperandError extends Operand { - private final String _errorMsg; - - public OperandError(final String msg) { - _errorMsg = msg; - } - - @Override - public OperandType Type() { - return OperandType.ERROR; - } - - @Override - public boolean IsError() { - return true; - } - - public String ErrorMsg() { - return _errorMsg; - } - - @Override - public Operand ToNumber(String errorMessage) { - return this; - } - - @Override - public Operand ToBoolean(String errorMessage) { - return this; - } - - @Override - public Operand ToText(String errorMessage) { - return this; - } - - @Override - public Operand ToArray(String errorMessage) { - return this; - } - - @Override - public Operand ToJson(String errorMessage) { - return this; - } - - @Override - public Operand ToDate(String errorMessage) { - return this; - } - + /** + * 转string类型 + */ + public Operand toText(String errorMessage) { + return error(errorMessage != null ? errorMessage : "Convert to string error!"); } - static class OperandJson extends OperandT { - public OperandJson(final JsonData obj) { - super(obj); - } - - @Override - public OperandType Type() { - return OperandType.JSON; - } - - @Override - public JsonData JsonValue() { - return _value; - } - - @Override - public Operand ToJson(String errorMessage) { - return this; - } - - @Override - public Operand ToArray(String errorMessage) { - if (JsonValue().IsArray()) { - final List list = new ArrayList(); - for (JsonData v : JsonValue().inst_array) { - if (v.IsString()) - list.add(Create(v.StringValue())); - else if (v.IsBoolean()) - list.add(Create(v.BooleanValue())); - else if (v.IsDouble()) - list.add(Create(v.NumberValue())); - else if (v.IsNull()) - list.add(CreateNull()); - else - list.add(Create(v)); - } - return Create(list); - } - if (errorMessage == null) { - errorMessage = "Convert json to array error!"; - } - return Error(errorMessage); - } - - @Override - public Operand ToBoolean(String errorMessage) { - if (errorMessage == null) { - errorMessage = "Convert json to bool error!"; - } - return Error(errorMessage); - } - - @Override - public Operand ToDate(String errorMessage) { - if (errorMessage == null) { - errorMessage = "Convert json to date error!"; - } - return Error(errorMessage); - } - - @Override - public Operand ToNumber(String errorMessage) { - if (errorMessage == null) { - errorMessage = "Convert json to number error!"; - } - return Error(errorMessage); - } - - @Override - public Operand ToText(String errorMessage) { - if (errorMessage == null) { - errorMessage = "Convert number to string error!"; - } - return Error(errorMessage); - } + /** + * 转string类型 + */ + public Operand toText(String errorMessage, Object... args) { + return error(String.format(errorMessage, args)); } - static class OperandNull extends Operand { - - @Override - public OperandType Type() { - return OperandType.NULL; - } - - @Override - public boolean IsNull() { - return true; - } - + /** + * 转MyDate类型 + */ + public Operand toMyDate(String errorMessage) { + return error(errorMessage != null ? errorMessage : "Convert to date error!"); } - static class OperandNumber extends OperandT { - - public OperandNumber(BigDecimal obj) { - super(obj); - } - - @Override - public OperandType Type() { - return OperandType.NUMBER; - } - - @Override - public int IntValue() { - return _value.intValue(); - } - - @Override - public BigDecimal NumberValue() { - return _value; - } - - @Override - public double DoubleValue() { - return _value.doubleValue(); - } - - @Override - public long LongValue() { - return _value.longValue(); - } - - @Override - public Operand ToNumber(String errorMessage) { - return this; - } - - @Override - public Operand ToBoolean(String errorMessage) { - return (NumberValue().compareTo(new BigDecimal(0)) != 0) ? True : False; - } - - @Override - public Operand ToText(String errorMessage) { - String str = ((Double) NumberValue().doubleValue()).toString(); - if (str.contains(".")) { - str = Pattern.compile("(\\.)?0+$").matcher(str).replaceAll(""); - } - return Create(str); - } - - @Override - public Operand ToDate(String errorMessage) { - return Create(new MyDate(NumberValue())); - } - - @Override - public Operand ToArray(String errorMessage) { - if (errorMessage == null) { - errorMessage = "Convert number to array error!"; - } - return Error(errorMessage); - } - - @Override - public Operand ToJson(String errorMessage) { - if (errorMessage == null) { - errorMessage = "Convert number to json error!"; - } - return Error(errorMessage); - } + /** + * 转MyDate类型 + */ + public Operand toMyDate(String errorMessage, Object... args) { + return error(String.format(errorMessage, args)); } - static class OperandString extends OperandT { - - public OperandString(String obj) { - super(obj); - } - - @Override - public OperandType Type() { - return OperandType.TEXT; - } - - @Override - public String TextValue() { - return _value; - } - - @Override - public Operand ToNumber(String errorMessage) { - try { - BigDecimal d = new BigDecimal(TextValue()); - return Create(d); - } catch (Exception e) { - } - if (errorMessage == null) { - return Error("Convert string to number error!"); - } - return Error(errorMessage); - } - - @Override - public Operand ToText(String errorMessage) { - return this; - } - - @Override - public Operand ToBoolean(String errorMessage) { - if (TextValue().equalsIgnoreCase("true") || TextValue().equalsIgnoreCase("yes")) { - return True; - } - if (TextValue().equalsIgnoreCase("false") || TextValue().equalsIgnoreCase("no")) { - return False; - } - if (TextValue().equals("1") || TextValue().equals("是") || TextValue().equals("有")) { - return True; - } - if (TextValue().equals("0") || TextValue().equals("否") || TextValue().equals("不是") || TextValue().equals("无") || TextValue().equals("没有")) { - return False; - } - if (errorMessage == null) { - return Error("Convert string to bool error!"); - } - return Error(errorMessage); - } - - @Override - public Operand ToDate(String errorMessage) { - MyDate date = MyDate.parse(TextValue()); - if (date != null) { - return Create(date); - } - if (errorMessage == null) { - return Error("Convert string to date error!"); - } - return Error(errorMessage); - } - - @Override - public Operand ToJson(String errorMessage) { - final String txt = TextValue(); - if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { - try { - final JsonData json = JsonMapper.ToObject(txt); - return Operand.Create(json); - } catch (final Exception e) { - } - } - if (errorMessage == null) { - return Error("Convert string to json error!"); - } - return Error(errorMessage); - } - - @Override - public Operand ToArray(String errorMessage) { - if (errorMessage == null) { - errorMessage = "Convert string to array error!"; - } - return Error(errorMessage); - } - - } - - public static class KeyValue { - public String Key; - public Operand Value; + /** + * 转Array类型 + */ + public Operand toArray(String errorMessage) { + return error(errorMessage != null ? errorMessage : "Convert to array error!"); } - public static class OperandKeyValue extends OperandT { - public OperandKeyValue(KeyValue obj) { - super(obj); - } - - public OperandType Type() { - return OperandType.ARRARYJSON; - } + /** + * 转Array类型 + */ + public Operand toArray(String errorMessage, Object... args) { + return error(String.format(errorMessage, args)); } - public static class OperandKeyValueList extends OperandT { - private final List TextList = new ArrayList<>(); - - public OperandKeyValueList(KeyValue obj) { - super(obj); - } - - public OperandType Type() { - return OperandType.ARRARYJSON; - } - - public List ArrayValue() { - List result = new ArrayList<>(); - for (KeyValue kv : TextList) { - result.add(kv.Value); - } - return result; - } - - public Operand ToArray(String errorMessage) { - return Create(this.ArrayValue()); - } - - public void AddValue(KeyValue keyValue) { - TextList.add(keyValue); - } - - public boolean HasKey(String key) { - for (KeyValue item : TextList) { - if (item.Key.equals("" + key)) { - return true; - } - } - return false; - } - - public Operand GetValue(String key) { - for (KeyValue item : TextList) { - if (item.Key.equals(key)) { - return item.Value; - } - } - return null; - } - - public boolean ContainsKey(Operand value) { - for (KeyValue item : TextList) { - if (item.Key.equals(value.TextValue())) { - return true; - } - } - return false; - } - - public boolean ContainsValue(Operand value) { - for (KeyValue item : TextList) { - Operand op = item.Value; - if (value.Type() != op.Type()) { - continue; - } - if (value.Type() == OperandType.TEXT) { - if (value.TextValue().equals(op.TextValue())) { - return true; - } - } - if (value.Type() == OperandType.NUMBER) { - if (value.TextValue().equals(op.TextValue())) { - return true; - } - } - } - return false; - } - - public Operand TryGetValueFloor(double key, boolean range_lookup) { - Operand value = null; - for (KeyValue item : TextList) { - try { - double num = Double.parseDouble(item.Key); - double t = Math.round(key - num * 1000000000d) / 1000000000d; - if (t == 0) { - return item.Value; - } else if (range_lookup) { - if (t > 0) { - value = item.Value; - } else if (value != null) { - return value; - } - } - } catch (Exception ex) { - } - } - return value; - } + /** + * 转Json类型 + */ + public Operand toJson(String errorMessage) { + return error(errorMessage != null ? errorMessage : "Convert to json error!"); } - + } diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/AreaUnitType.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/AreaUnitType.java index 73ace3cee..db69109e2 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/AreaUnitType.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/AreaUnitType.java @@ -1,51 +1,41 @@ +/** + * 面积单位 + */ package toolgood.algorithm.enums; public enum AreaUnitType { - /// - /// 平方毫米 - /// + /** + * 平方毫米 + */ MM2(11), - /// - /// 平方厘米 - /// + + /** + * 平方厘米 + */ CM2(12), - /// - /// 平方分米 - /// + + /** + * 平方分米 + */ DM2(13), - /// - /// 平方米 - /// + + /** + * 平方米 + */ M2(14), - /// - /// 平方千米 - /// - KM2(15); - private final int value; + /** + * 平方千米 + */ + KM2(15); - AreaUnitType(int v) { - value = v; - } + private final byte value; - public static AreaUnitType intToEnum(int value) { - switch (value) { - case 11: - return MM2; - case 12: - return CM2; - case 13: - return DM2; - case 14: - return M2; - case 15: - return KM2; - default: - return null; - } + AreaUnitType(byte value) { + this.value = value; } - public int getValue() { + public byte getValue() { return value; } } diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java index 09a344298..6123a1c98 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java @@ -1,3 +1,6 @@ +/** + * 条件树类型 + */ package toolgood.algorithm.enums; public enum ConditionTreeType { @@ -5,14 +8,17 @@ public enum ConditionTreeType { * 文本 */ String, + /** * 并 */ And, + /** * 或 */ Or, + /** * 错误 */ diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java index 90773a341..a73f485af 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java @@ -1,51 +1,41 @@ +/** + * 长度单位 + */ package toolgood.algorithm.enums; public enum DistanceUnitType { - /// - /// 毫米 - /// + /** + * 毫米 + */ MM(1), - /// - /// 厘米 - /// + + /** + * 厘米 + */ CM(2), - /// - /// 分米 - /// + + /** + * 分米 + */ DM(3), - /// - /// 米 - /// + + /** + * 米 + */ M(4), - /// - /// 千米 - /// - KM(5); - private final int value; + /** + * 千米 + */ + KM(5); - DistanceUnitType(int v) { - value = v; - } + private final byte value; - public static DistanceUnitType intToEnum(int value) { - switch (value) { - case 1: - return MM; - case 2: - return CM; - case 3: - return DM; - case 4: - return M; - case 5: - return KM; - default: - return null; - } + DistanceUnitType(byte value) { + this.value = value; } - public int getValue() { + public byte getValue() { return value; } } diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/MassUnitType.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/MassUnitType.java index 3615d28a6..9e28d9d8e 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/MassUnitType.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/MassUnitType.java @@ -1,39 +1,31 @@ +/** + * 重量单位 + */ package toolgood.algorithm.enums; public enum MassUnitType { - /// - /// 克 - /// + /** + * 克 + */ G(31), - /// - /// 千克 - /// + + /** + * 千克 + */ KG(32), - /// - /// 吨 - /// - T(33); - private final int value; + /** + * 吨 + */ + T(33); - MassUnitType(int v) { - value = v; - } + private final byte value; - public static MassUnitType intToEnum(int value) { - switch (value) { - case 31: - return G; - case 32: - return KG; - case 33: - return T; - default: - return null; - } + MassUnitType(byte value) { + this.value = value; } - public int getValue() { + public byte getValue() { return value; } } diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/NumberUnitType.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/NumberUnitType.java index 0063144bc..7e361a758 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/NumberUnitType.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/NumberUnitType.java @@ -22,13 +22,14 @@ public enum NumberUnitType { G(31), KG(32), T(33); - private final int value; - NumberUnitType(int v) { - value = v; + private final byte value; + + NumberUnitType(byte value) { + this.value = value; } - public int getValue() { + public byte getValue() { return value; } } diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/OperandType.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/OperandType.java index 504e2dfa1..e679781ee 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/OperandType.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/OperandType.java @@ -1,13 +1,61 @@ +/** + * 操作数类型 + */ package toolgood.algorithm.enums; public enum OperandType { - NULL, - ERROR, - DATE, - ARRARY, - NUMBER, - BOOLEAN, - TEXT, - JSON, - ARRARYJSON, -} \ No newline at end of file + /** + * NULL + */ + NULL, + + /** + * 错误 + */ + ERROR, + + /** + * 日期 + */ + DATE, + + /** + * 数组 + */ + ARRARY, + + /** + * 数字 + */ + NUMBER, + + /** + * 布尔 + */ + BOOLEAN, + + /** + * 字符串 + */ + TEXT, + + /** + * JSON格式 + */ + JSON, + + /** + * JSON格式 + */ + ARRARYJSON; + + private final byte value; + + OperandType() { + this.value = (byte) ordinal(); + } + + public byte getValue() { + return value; + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java index cfde7347c..62b397030 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java @@ -1,51 +1,41 @@ +/** + * 体积单位 + */ package toolgood.algorithm.enums; public enum VolumeUnitType { - /// - /// 立方毫米 - /// + /** + * 立方毫米 + */ MM3(21), - /// - /// 立方厘米 - /// + + /** + * 立方厘米 + */ CM3(22), - /// - /// 立方分米 - /// + + /** + * 立方分米 + */ DM3(23), - /// - /// 立方米 - /// + + /** + * 立方米 + */ M3(24), - /// - /// 立方千米 - /// - KM3(25); - private final int value; + /** + * 立方千米 + */ + KM3(25); - VolumeUnitType(int v) { - value = v; - } + private final byte value; - public static VolumeUnitType intToEnum(int value) { - switch (value) { - case 21: - return MM3; - case 22: - return CM3; - case 23: - return DM3; - case 24: - return M3; - case 25: - return KM3; - default: - return null; - } + VolumeUnitType(byte value) { + this.value = value; } - public int getValue() { + public byte getValue() { return value; } } diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/AntlrCharStream.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/AntlrCharStream.java deleted file mode 100644 index ed9464452..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/AntlrCharStream.java +++ /dev/null @@ -1,61 +0,0 @@ -package toolgood.algorithm.internals; - -import org.antlr.v4.runtime.CharStream; -import org.antlr.v4.runtime.misc.Interval; - -public class AntlrCharStream implements CharStream { - final CharStream stream; - - public AntlrCharStream(CharStream stream) { - this.stream = stream; - } - - @Override - public String getText(Interval interval) { - return stream.getText(interval); - } - - @Override - public void consume() { - stream.consume(); - } - - @Override - public int LA(int i) { - int c = stream.LA(i); - if (c <= 0) { - return c; - } - return CharUtil.StandardChar((char)c); - } - - @Override - public int mark() { - return stream.mark(); - } - - @Override - public void release(int marker) { - stream.release(marker); - } - - @Override - public int index() { - return stream.index(); - } - - @Override - public void seek(int index) { - stream.seek(index); - } - - @Override - public int size() { - return stream.size(); - } - - @Override - public String getSourceName() { - return stream.getSourceName(); - } -} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/AntlrErrorListener.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/AntlrErrorListener.java deleted file mode 100644 index 14a316b9f..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/AntlrErrorListener.java +++ /dev/null @@ -1,22 +0,0 @@ -package toolgood.algorithm.internals; - -import org.antlr.v4.runtime.BaseErrorListener; -import org.antlr.v4.runtime.RecognitionException; -import org.antlr.v4.runtime.Recognizer; - -public class AntlrErrorListener extends BaseErrorListener { - public boolean IsError; - public String ErrorMsg; - - @Override - public void syntaxError(Recognizer recognizer, - Object offendingSymbol, - int line, - int charPositionInLine, - String msg, - RecognitionException e) - { - IsError = true; - ErrorMsg = msg; - } -} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/AntlrLookupEngine.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/AntlrLookupEngine.java deleted file mode 100644 index 44a7afc93..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/AntlrLookupEngine.java +++ /dev/null @@ -1,26 +0,0 @@ -package toolgood.algorithm.internals; - -import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.Operand; -import toolgood.algorithm.litJson.JsonData; - -public class AntlrLookupEngine extends AlgorithmEngine { - public Operand Json; - - @Override - protected Operand GetParameter(MyParameter parameter) - { - JsonData v = Json.JsonValue().GetChild(parameter.Name); - if (v!=null) - { - if (v.IsString()) return Operand.Create(v.StringValue()); - if (v.IsBoolean()) return Operand.Create(v.BooleanValue()); - if (v.IsDouble()) return Operand.Create(v.NumberValue()); - if (v.IsObject()) return Operand.Create(v); - if (v.IsArray()) return Operand.Create(v); - if (v.IsNull()) return Operand.CreateNull(); - return Operand.Create(v); - } - return super.GetParameter(parameter); - } -} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Base64.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Base64.java deleted file mode 100644 index 1004d92b4..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Base64.java +++ /dev/null @@ -1,243 +0,0 @@ -package toolgood.algorithm.internals; - -import java.util.regex.Pattern; - -public class Base64 { - public static String ToBase64String(final byte[] input) { - return Base64Util.encode(input); - } - - public static byte[] FromBase64String(final String base64) { - return Base64Util.decode(base64); - } - - public static String ToBase64ForUrlString(final byte[] input) { - String t = Pattern.compile("=*$").matcher(ToBase64String(input)).replaceAll(""); - t = Pattern.compile("\\+").matcher(t).replaceAll("-"); - t = Pattern.compile("/").matcher(t).replaceAll("_"); - return t; - } - - public static byte[] FromBase64ForUrlString(final String base64ForUrlInput) { - final String base64 = "===========================================+=+=/0123456789=======ABCDEFGHIJKLMNOPQRSTUVWXYZ====/=abcdefghijklmnopqrstuvwxyz====="; - final StringBuilder sb = new StringBuilder(); - for (int i = 0; i < base64ForUrlInput.length(); i++) { - final char c = base64ForUrlInput.charAt(i); - if ((int) c >= 128) - continue; - final char k = base64.charAt(c);// [c]; - if (k == '=') - continue; - sb.append(k); - } - final int len = sb.length(); - final int padChars = (len % 4) == 0 ? 0 : (4 - (len % 4)); - for (int i = 0; i < padChars; i++) { - sb.append('='); - } - return FromBase64String(sb.toString()); - } - public static class Base64Util { - private static final int BASELENGTH = 128; - private static final int LOOKUPLENGTH = 64; - private static final int TWENTYFOURBITGROUP = 24; - private static final int EIGHTBIT = 8; - private static final int SIXTEENBIT = 16; - private static final int FOURBYTE = 4; - private static final int SIGN = -128; - private static char PAD = '='; - private static byte[] base64Alphabet = new byte[BASELENGTH]; - private static char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; - static { - for (int i = 0; i < BASELENGTH; ++i) { - base64Alphabet[i] = -1; - } - for (int i = 'Z'; i >= 'A'; i--) { - base64Alphabet[i] = (byte) (i - 'A'); - } - for (int i = 'z'; i >= 'a'; i--) { - base64Alphabet[i] = (byte) (i - 'a' + 26); - } - for (int i = '9'; i >= '0'; i--) { - base64Alphabet[i] = (byte) (i - '0' + 52); - } - base64Alphabet['+'] = 62; - base64Alphabet['/'] = 63; - for (int i = 0; i <= 25; i++) { - lookUpBase64Alphabet[i] = (char) ('A' + i); - } - for (int i = 26, j = 0; i <= 51; i++, j++) { - lookUpBase64Alphabet[i] = (char) ('a' + j); - } - for (int i = 52, j = 0; i <= 61; i++, j++) { - lookUpBase64Alphabet[i] = (char) ('0' + j); - } - lookUpBase64Alphabet[62] = (char) '+'; - lookUpBase64Alphabet[63] = (char) '/'; - } - - private static boolean isWhiteSpace(char octect) { - return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); - } - - private static boolean isPad(char octect) { - return (octect == PAD); - } - - private static boolean isData(char octect) { - return (octect < BASELENGTH && base64Alphabet[octect] != -1); - } - - public static String encode(byte[] binaryData) { - if (binaryData == null) { - return null; - } - int lengthDataBits = binaryData.length * EIGHTBIT; - if (lengthDataBits == 0) { - return ""; - } - int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; - int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; - int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets; - char encodedData[] = null; - encodedData = new char[numberQuartet * 4]; - byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; - int encodedIndex = 0; - int dataIndex = 0; - for (int i = 0; i < numberTriplets; i++) { - b1 = binaryData[dataIndex++]; - b2 = binaryData[dataIndex++]; - b3 = binaryData[dataIndex++]; - l = (byte) (b2 & 0x0f); - k = (byte) (b1 & 0x03); - byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); - byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); - byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); - encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; - encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; - encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3]; - encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f]; - } - // form integral number of 6-bit groups - if (fewerThan24bits == EIGHTBIT) { - b1 = binaryData[dataIndex]; - k = (byte) (b1 & 0x03); - byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); - encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; - encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4]; - encodedData[encodedIndex++] = PAD; - encodedData[encodedIndex++] = PAD; - } else if (fewerThan24bits == SIXTEENBIT) { - b1 = binaryData[dataIndex]; - b2 = binaryData[dataIndex + 1]; - l = (byte) (b2 & 0x0f); - k = (byte) (b1 & 0x03); - byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); - byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); - encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; - encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; - encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2]; - encodedData[encodedIndex++] = PAD; - } - return new String(encodedData); - } - - public static byte[] decode(String encoded) { - if (encoded == null) { - return null; - } - char[] base64Data = encoded.toCharArray(); - // remove white spaces - int len = removeWhiteSpace(base64Data); - if (len % FOURBYTE != 0) { - return null;// should be divisible by four - } - int numberQuadruple = (len / FOURBYTE); - if (numberQuadruple == 0) { - return new byte[0]; - } - byte decodedData[] = null; - byte b1 = 0, b2 = 0, b3 = 0, b4 = 0; - char d1 = 0, d2 = 0, d3 = 0, d4 = 0; - int i = 0; - int encodedIndex = 0; - int dataIndex = 0; - decodedData = new byte[(numberQuadruple) * 3]; - for (; i < numberQuadruple - 1; i++) { - if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])) - || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++]))) { - return null; - } // if found "no data" just return null - b1 = base64Alphabet[d1]; - b2 = base64Alphabet[d2]; - b3 = base64Alphabet[d3]; - b4 = base64Alphabet[d4]; - decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); - decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); - decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); - } - if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))) { - return null;// if found "no data" just return null - } - b1 = base64Alphabet[d1]; - b2 = base64Alphabet[d2]; - d3 = base64Data[dataIndex++]; - d4 = base64Data[dataIndex++]; - if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters - if (isPad(d3) && isPad(d4)) { - if ((b2 & 0xf) != 0)// last 4 bits should be zero - { - return null; - } - byte[] tmp = new byte[i * 3 + 1]; - System.arraycopy(decodedData, 0, tmp, 0, i * 3); - tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); - return tmp; - } else if (!isPad(d3) && isPad(d4)) { - b3 = base64Alphabet[d3]; - if ((b3 & 0x3) != 0)// last 2 bits should be zero - { - return null; - } - byte[] tmp = new byte[i * 3 + 2]; - System.arraycopy(decodedData, 0, tmp, 0, i * 3); - tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); - tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); - return tmp; - } else { - return null; - } - } else { // No PAD e.g 3cQl - b3 = base64Alphabet[d3]; - b4 = base64Alphabet[d4]; - decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); - decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); - decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); - } - return decodedData; - } - - /** - * remove WhiteSpace from MIME containing encoded Base64Util data. - * - * @param data the byte array of base64 data (with WS) - * @return the new length - */ - private static int removeWhiteSpace(char[] data) { - if (data == null) { - return 0; - } - // count characters that's not whitespace - int newSize = 0; - int len = data.length; - for (int i = 0; i < len; i++) { - if (!isWhiteSpace(data[i])) { - data[newSize++] = data[i]; - } - } - return newSize; - } - } - - -} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/CharUtil.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/CharUtil.java deleted file mode 100644 index ed7337567..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/CharUtil.java +++ /dev/null @@ -1,224 +0,0 @@ -package toolgood.algorithm.internals; - -import java.util.ArrayList; -import java.util.List; - -public class CharUtil { - public static char StandardChar(char c) { - if (c <= 0) - return c; - char o = (char) c; - if (o == '‘') - return '\''; - if (o == '’') - return '\''; - if (o == '“') - return '"'; - if (o == '”') - return '"'; - if (o == '〔') - return '('; - if (o == '〕') - return ')'; - if (o == '=') - return '='; - if (o == '+') - return '+'; - if (o == '-') - return '-'; - if (o == '×') - return '*'; - if (o == '÷') - return '/'; - if (o == '/') - return '/'; - - if (c == 12288) { - o = (char) 32; - } else if (c > 65280 && c < 65375) { - o = (char) (c - 65248); - } - return Character.toUpperCase(o); - } - - public static String StandardString(String s) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - sb.append(StandardChar(c)); - } - return sb.toString(); - } - - private static boolean EqualsOnce(String left, String right) { - if (left.length() != right.length()) - return false; - for (int i = 0; i < left.length(); i++) { - if (left.charAt(i) != right.charAt(i)) { - char a = StandardChar(left.charAt(i)); - char b = StandardChar(right.charAt(i)); - if (a != b) - return false; - } - } - return true; - } - - public static boolean Equals(String left, String right) { - if (left == null) - return false; - if (right == null) - return false; - return EqualsOnce(left, right); - } - - public static boolean Equals(String left, String arg1, String arg2) { - if (left == null) - return false; - if (arg1 != null && EqualsOnce(left, arg1)) - return true; - if (arg2 != null && EqualsOnce(left, arg2)) - return true; - return false; - } - - public static boolean Equals(String left, String arg1, String arg2, String arg3) { - if (left == null) - return false; - if (arg1 != null && EqualsOnce(left, arg1)) - return true; - if (arg2 != null && EqualsOnce(left, arg2)) - return true; - if (arg3 != null && EqualsOnce(left, arg3)) - return true; - return false; - } - - public static List SplitFormula(String formula, List splitChars) { - List result = new ArrayList<>(); - boolean inSquareBrackets = false; - boolean inBraceBrackets = false; - int inBracketsCount = 0; - boolean inText = false; - char textChar = (char) 0; - - StringBuilder str = new StringBuilder(); - Integer i = 0; - while (i < formula.length()) { - char c = formula.charAt(i); - if (inSquareBrackets) { - str.append(c); - if (c == ']') - inSquareBrackets = false; - } else if (inBraceBrackets) { - str.append(c); - if (c == '}') - inBraceBrackets = false; - } else if (inText) { - str.append(c); - if (c == '\\') { - i++; - if (i < formula.length()) { - str.append(formula.charAt(i)); - } - } else if (c == textChar) { - inText = false; - } - } else if (splitChars.contains(c) && inBracketsCount == 0) { - result.add(str.toString()); - result.add(((Character) c).toString()); - str = new StringBuilder(); - } else { - str.append(c); - if (c == '\'' || c == '"' || c == '`') { - textChar = c; - inText = true; - } else if (c == '[') { - inSquareBrackets = true; - } else if (c == '{') { - inBraceBrackets = true; - } else if (c == '(') { - inBracketsCount++; - } else if (c == ')') { - inBracketsCount--; - } - } - i++; - } - if (str.length() > 0) - result.add(str.toString()); - return result; - } - - public static List SplitFormulaForAnd(String formula) { - List result = new ArrayList<>(); - boolean inSquareBrackets = false; - boolean inBraceBrackets = false; - int inBracketsCount = 0; - boolean inText = false; - char textChar = (char) 0; - - StringBuilder str = new StringBuilder(); - Integer i = 0; - while (i < formula.length()) { - char c = formula.charAt(i); - if (inSquareBrackets) { - str.append(c); - if (c == ']') - inSquareBrackets = false; - } else if (inBraceBrackets) { - str.append(c); - if (c == '}') - inBraceBrackets = false; - } else if (inText) { - str.append(c); - if (c == '\\') { - i++; - if (i < formula.length()) { - str.append(formula.charAt(i)); - } - } else if (c == textChar) { - inText = false; - } - } else if (c == '&' && inBracketsCount == 0) { - if (i + 1 < formula.length() && formula.charAt(i + 1) == '&') { - i++; - result.add(str.toString()); - str = new StringBuilder(); - } else { - result.add(str.toString()); - } - } else if (c == '|' && inBracketsCount == 0) { - if (i + 1 < formula.length() && formula.charAt(i + 1) == '|') { - i++; - result.add(str.toString()); - str = new StringBuilder(); - str.append(String.join("&&", result)); - str.append("||"); - result.clear(); - } else { - result.add(str.toString()); - } - } else { - str.append(c); - if (c == '\'' || c == '"' || c == '`') { - textChar = c; - inText = true; - } else if (c == '[') { - inSquareBrackets = true; - } else if (c == '{') { - inBraceBrackets = true; - } else if (c == '(') { - inBracketsCount++; - } else if (c == ')') { - inBracketsCount--; - } - } - i++; - } - if (str.length() > 0) - result.add(str.toString()); - return result; - } - -} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/ConditionTree.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/ConditionTree.java index 7bea506b1..04181df03 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/ConditionTree.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/ConditionTree.java @@ -1,73 +1,91 @@ +/** + * 条件树 + */ package toolgood.algorithm.internals; -import org.antlr.v4.runtime.CharStreams; -import org.antlr.v4.runtime.CommonTokenStream; -import toolgood.algorithm.enums.ConditionTreeType; -import toolgood.algorithm.math.mathLexer; -import toolgood.algorithm.math.mathParser; - +import java.util.ArrayList; import java.util.List; +import toolgood.algorithm.enums.ConditionTreeType; -public class ConditionTree { +public final class ConditionTree { /** * 子节点 */ - public List Nodes; + private List nodes; + /** * 开始位置 */ - public int Start; + private int start; + /** * 结束位置 */ - public int End; + private int end; + /** * 类型 */ - public ConditionTreeType Type; + private ConditionTreeType type; + /** * 条件 */ - public String ConditionString; + private String conditionString; + /** * 出错信息 */ - public String ErrorMessage; + private String errorMessage; + + ConditionTree() { + } - public ConditionTree() { + public List getNodes() { + return nodes; + } + void setNodes(List nodes) { + this.nodes = nodes; } + public int getStart() { + return start; + } + + void setStart(int start) { + this.start = start; + } - public static ConditionTree Parse(String condition) { - ConditionTree tree = new ConditionTree(); - if (condition == null || condition.equals("")) { - tree.Type = ConditionTreeType.Error; - tree.ErrorMessage = "condition 为空"; - return tree; - } - try { - final AntlrCharStream stream = new AntlrCharStream(CharStreams.fromString(condition)); - final mathLexer lexer = new mathLexer(stream); - final CommonTokenStream tokens = new CommonTokenStream(lexer); - final mathParser parser = new mathParser(tokens); - final AntlrErrorListener antlrErrorListener = new AntlrErrorListener(); - parser.removeErrorListeners(); - parser.addErrorListener(antlrErrorListener); - final mathParser.ProgContext context = parser.prog(); - - if (antlrErrorListener.IsError) { - tree.ErrorMessage = antlrErrorListener.ErrorMsg; - return tree; - } - - final MathSplitVisitor visitor = new MathSplitVisitor(); - return visitor.visit(context); - } catch (Exception ex) { - tree.Type = ConditionTreeType.Error; - tree.ErrorMessage = ex.getMessage(); - } - return tree; + public int getEnd() { + return end; } + void setEnd(int end) { + this.end = end; + } + + public ConditionTreeType getType() { + return type; + } + + void setType(ConditionTreeType type) { + this.type = type; + } + + public String getConditionString() { + return conditionString; + } + + void setConditionString(String conditionString) { + this.conditionString = conditionString; + } + + public String getErrorMessage() { + return errorMessage; + } + + void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } } diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/DiyNameVisitor.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/DiyNameVisitor.java deleted file mode 100644 index 5c5df4880..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/DiyNameVisitor.java +++ /dev/null @@ -1,1438 +0,0 @@ -package toolgood.algorithm.internals; - -import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; -import org.antlr.v4.runtime.tree.TerminalNode; - -import toolgood.algorithm.math.mathParser.*; -import toolgood.algorithm.DiyNameInfo; -import toolgood.algorithm.math.mathVisitor; - -public class DiyNameVisitor extends AbstractParseTreeVisitor implements mathVisitor { - public DiyNameInfo diy = new DiyNameInfo(); - - @Override - public Object visitPARAMETER_fun(PARAMETER_funContext context) { - TerminalNode node = context.PARAMETER(); - if (node != null) { - diy.Parameters.add(node.getText()); - } - node = context.PARAMETER2(); - if (node != null) { - String str = node.getText(); - if (str.startsWith("@")) { - diy.Parameters.add(str.substring(1)); - } else if ((str.startsWith("【") && str.endsWith("】")) - || (str.startsWith("[") && str.endsWith("]")) - || (str.startsWith("#") && str.endsWith("#"))) { - diy.Parameters.add(str.substring(1, str.length() - 1)); - - } else { - diy.Parameters.add(str); - } - return null; - } - return visitChildren(context); - } - @Override - public Object visitDiyFunction_fun(DiyFunction_funContext context) { - diy.Functions.add(context.PARAMETER().getText()); - return visitChildren(context); - } - - @Override - public Object visitParameter2(Parameter2Context context) { - - return visitChildren(context); - } - - - - @Override - public Object visitProg(ProgContext context) { - return visitChildren(context); - } - - @Override - public Object visitCEILING_fun(CEILING_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFACT_fun(FACT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitREGEXREPALCE_fun(REGEXREPALCE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHASVALUE_fun(HASVALUE_funContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitAddSub_fun(AddSub_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitAVERAGEIF_fun(AVERAGEIF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPARAM_fun(PARAM_funContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitRIGHT_fun(RIGHT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitOCT2BIN_fun(OCT2BIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitQUARTILE_fun(QUARTILE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFINV_fun(FINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNOT_fun(NOT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDAYS360_fun(DAYS360_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitWEEKNUM_fun(WEEKNUM_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPOISSON_fun(POISSON_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISREGEX_fun(ISREGEX_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPERCENTILE_fun(PERCENTILE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSHA256_fun(SHA256_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHAS_fun(HAS_funContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitHYPGEOMDIST_fun(HYPGEOMDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPERMUT_fun(PERMUT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTRIMSTART_fun(TRIMSTART_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitRMB_fun(RMB_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDEC2HEX_fun(DEC2HEX_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCLEAN_fun(CLEAN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLOWER_fun(LOWER_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitOR_fun(OR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitADDMONTHS_fun(ADDMONTHS_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitNORMSINV_fun(NORMSINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLEFT_fun(LEFT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISEVEN_fun(ISEVEN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLOGINV_fun(LOGINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitWORKDAY_fun(WORKDAY_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISERROR_fun(ISERROR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBIN2DEC_fun(BIN2DEC_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitJIS_fun(JIS_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCRC32_fun(CRC32_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLCM_fun(LCM_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHARMEAN_fun(HARMEAN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNORMINV_fun(NORMINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGAMMAINV_fun(GAMMAINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSQRT_fun(SQRT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDEGREES_fun(DEGREES_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMROUND_fun(MROUND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDATEDIF_fun(DATEDIF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTRIMEND_fun(TRIMEND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISLOGICAL_fun(ISLOGICAL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitINT_fun(INT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSUMIF_fun(SUMIF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHEX2OCT_fun(HEX2OCT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPI_fun(PI_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitYEAR_fun(YEAR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSQRTPI_fun(SQRTPI_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCONCATENATE_fun(CONCATENATE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCOUNT_fun(COUNT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFALSE_fun(FALSE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHTMLENCODE_fun(HTMLENCODE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBASE64URLTOTEXT_fun(BASE64URLTOTEXT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLOG10_fun(LOG10_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISTEXT_fun(ISTEXT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNEGBINOMDIST_fun(NEGBINOMDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNETWORKDAYS_fun(NETWORKDAYS_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFACTDOUBLE_fun(FACTDOUBLE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTIMEVALUE_fun(TIMEVALUE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitAVEDEV_fun(AVEDEV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGUID_fun(GUID_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitJSON_fun(JSON_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFIXED_fun(FIXED_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGetJsonValue_fun(GetJsonValue_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTINV_fun(TINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitEDATE_fun(EDATE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGEOMEAN_fun(GEOMEAN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitVAR_fun(VAR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSIGN_fun(SIGN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitEOMONTH_fun(EOMONTH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFLOOR_fun(FLOOR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHOUR_fun(HOUR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLEN_fun(LEN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitACOS_fun(ACOS_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISNULLORWHITESPACE_fun(ISNULLORWHITESPACE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNUM_fun(NUM_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCOSH_fun(COSH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitQUOTIENT_fun(QUOTIENT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitOCT2DEC_fun(OCT2DEC_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSEARCH_fun(SEARCH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitROUNDUP_fun(ROUNDUP_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCOMBIN_fun(COMBIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCODE_fun(CODE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitASINH_fun(ASINH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSIN_fun(SIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSUBSTRING_fun(SUBSTRING_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitRANDBETWEEN_fun(RANDBETWEEN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitAVERAGE_fun(AVERAGE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLOG_fun(LOG_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHMACSHA512_fun(HMACSHA512_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitAndOr_fun(AndOr_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSTDEVP_fun(STDEVP_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitADDYEARS_fun(ADDYEARS_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitADDSECONDS_fun(ADDSECONDS_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitArray_fun(Array_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitROUND_fun(ROUND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitEXP_fun(EXP_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCOUNTIF_fun(COUNTIF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitVARP_fun(VARP_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitREMOVEEND_fun(REMOVEEND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDATE_fun(DATE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSPLIT_fun(SPLIT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitURLDECODE_fun(URLDECODE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLARGE_fun(LARGE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTIMESTAMP_fun(TIMESTAMP_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitVALUE_fun(VALUE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDAY_fun(DAY_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitWEIBULL_fun(WEIBULL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHMACSHA256_fun(HMACSHA256_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBINOMDIST_fun(BINOMDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitJudge_fun(Judge_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDEVSQ_fun(DEVSQ_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMODE_fun(MODE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBETAINV_fun(BETAINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMAX_fun(MAX_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMINUTE_fun(MINUTE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTAN_fun(TAN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitIFERROR_fun(IFERROR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFDIST_fun(FDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitINDEXOF_fun(INDEXOF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitUPPER_fun(UPPER_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHTMLDECODE_fun(HTMLDECODE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitEXPONDIST_fun(EXPONDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDEC2BIN_fun(DEC2BIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHEX2DEC_fun(HEX2DEC_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSMALL_fun(SMALL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitODD_fun(ODD_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTEXTTOBASE64_fun(TEXTTOBASE64_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMID_fun(MID_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPERCENTRANK_fun(PERCENTRANK_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSTDEV_fun(STDEV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNORMSDIST_fun(NORMSDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISNUMBER_fun(ISNUMBER_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLASTINDEXOF_fun(LASTINDEXOF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMOD_fun(MOD_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCHAR_fun(CHAR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitREGEX_fun(REGEX_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTEXTTOBASE64URL_fun(TEXTTOBASE64URL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMD5_fun(MD5_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitREPLACE_fun(REPLACE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitACOSH_fun(ACOSH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISODD_fun(ISODD_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitASC_fun(ASC_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCOS_fun(COS_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLN_fun(LN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSTRING_fun(STRING_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHMACMD5_fun(HMACMD5_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPRODUCT_fun(PRODUCT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitEXACT_fun(EXACT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitADDMINUTES_fun(ADDMINUTES_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitSUMSQ_fun(SUMSQ_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSUM_fun(SUM_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSECOND_fun(SECOND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGAMMADIST_fun(GAMMADIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitOCT2HEX_fun(OCT2HEX_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTODAY_fun(TODAY_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitERROR_fun(ERROR_funContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitATAN_fun(ATAN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitE_fun(E_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTRIM_fun(TRIM_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitRADIANS_fun(RADIANS_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGAMMALN_fun(GAMMALN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTEXT_fun(TEXT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFISHER_fun(FISHER_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitAND_fun(AND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitArrayJson_fun(ArrayJson_funContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitBIN2HEX_fun(BIN2HEX_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMULTINOMIAL_fun(MULTINOMIAL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMONTH_fun(MONTH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitURLENCODE_fun(URLENCODE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNORMDIST_fun(NORMDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHMACSHA1_fun(HMACSHA1_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitENDSWITH_fun(ENDSWITH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBracket_fun(Bracket_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBETADIST_fun(BETADIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitATANH_fun(ATANH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNOW_fun(NOW_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMEDIAN_fun(MEDIAN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPOWER_fun(POWER_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDEC2OCT_fun(DEC2OCT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPROPER_fun(PROPER_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTRUNC_fun(TRUNC_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGCD_fun(GCD_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTANH_fun(TANH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHEX2BIN_fun(HEX2BIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSINH_fun(SINH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSHA512_fun(SHA512_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMIN_fun(MIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitADDDAYS_fun(ADDDAYS_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitISNONTEXT_fun(ISNONTEXT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitABS_fun(ABS_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitROUNDDOWN_fun(ROUNDDOWN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitIF_fun(IF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitJOIN_fun(JOIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFIND_fun(FIND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSUBSTITUTE_fun(SUBSTITUTE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitREPT_fun(REPT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitASIN_fun(ASIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMulDiv_fun(MulDiv_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitREMOVESTART_fun(REMOVESTART_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitT_fun(T_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitWEEKDAY_fun(WEEKDAY_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBIN2OCT_fun(BIN2OCT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBASE64TOTEXT_fun(BASE64TOTEXT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTDIST_fun(TDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDATEVALUE_fun(DATEVALUE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSTARTSWITH_fun(STARTSWITH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitEVEN_fun(EVEN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLOGNORMDIST_fun(LOGNORMDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISNULLOREMPTY_fun(ISNULLOREMPTY_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTRUE_fun(TRUE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFISHERINV_fun(FISHERINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSHA1_fun(SHA1_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTIME_fun(TIME_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitATAN2_fun(ATAN2_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitADDHOURS_fun(ADDHOURS_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitRAND_fun(RAND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNum(NumContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitUnit(UnitContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitArrayJson(ArrayJsonContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitVLOOKUP_fun(VLOOKUP_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLOOKUP_fun(LOOKUP_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNULL_fun(NULL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISNULL_fun(ISNULL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISNULLORERROR_fun(ISNULLORERROR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPercentage_fun(Percentage_funContext context) { - - return visitChildren(context); - } - @Override - public Object visitCOVARIANCES_fun(COVARIANCES_funContext context) { - return visitChildren(context); - } - @Override - public Object visitCOVAR_fun(COVAR_funContext context) { - return visitChildren(context); - } - @Override - public Object visitVersion_fun(Version_funContext context) { - return visitChildren(context); - } - -} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Hash.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Hash.java deleted file mode 100644 index baefa154d..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Hash.java +++ /dev/null @@ -1,112 +0,0 @@ -package toolgood.algorithm.internals; - -import java.util.zip.CRC32; - -import javax.crypto.Mac; -import javax.crypto.SecretKey; -import javax.crypto.spec.SecretKeySpec; - -import java.security.InvalidKeyException; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -class Hash { - public static String GetCrc32String(final byte[] buffer) { - CRC32 c = new CRC32(); - c.reset();// Resets CRC-32 to initial value. - c.update(buffer, 0, buffer.length);// 将数据丢入CRC32解码器 - int value = (int) c.getValue(); - return byteArrayToHexString(toHH(value)); - } - - public static String GetMd5String(final byte[] buffer) throws NoSuchAlgorithmException { - MessageDigest m = MessageDigest.getInstance("MD5"); - m.update(buffer); - byte[] result = m.digest(); - return byteArrayToHexString(result); - } - - public static String GetSha1String(final byte[] buffer) throws NoSuchAlgorithmException { - MessageDigest mDigest = MessageDigest.getInstance("SHA1"); - byte[] result = mDigest.digest(buffer); - return byteArrayToHexString(result); - } - - public static String GetSha256String(final byte[] buffer) throws NoSuchAlgorithmException { - MessageDigest mDigest = MessageDigest.getInstance("SHA-256"); - byte[] result = mDigest.digest(buffer); - return byteArrayToHexString(result); - } - - public static String GetSha512String(final byte[] buffer) throws NoSuchAlgorithmException { - MessageDigest mDigest = MessageDigest.getInstance("SHA-512"); - byte[] result = mDigest.digest(buffer); - return byteArrayToHexString(result); - } - - public static String GetHmacMd5String(final byte[] buffer) throws NoSuchAlgorithmException { - MessageDigest mDigest = MessageDigest.getInstance("MD5"); - byte[] result = mDigest.digest(buffer); - return byteArrayToHexString(result); } - - public static String GetHmacMd5String(final byte[] buffer, final String secret) throws NoSuchAlgorithmException, - InvalidKeyException { - SecretKey secretKey = new SecretKeySpec(secret.getBytes(), "HmacMD5"); - Mac mac = Mac.getInstance(secretKey.getAlgorithm()); - mac.init(secretKey); - byte[] result = mac.doFinal(buffer); - return byteArrayToHexString(result); - } - - public static String GetHmacSha1String(final byte[] buffer, final String secret) - throws NoSuchAlgorithmException, InvalidKeyException - { - SecretKey secretKey = new SecretKeySpec(secret.getBytes(), "HmacSHA1"); - Mac mac = Mac.getInstance(secretKey.getAlgorithm()); - mac.init(secretKey); - byte[] result= mac.doFinal(buffer); - return byteArrayToHexString(result); - } - - public static String GetHmacSha256String(final byte[] buffer, final String secret) throws NoSuchAlgorithmException, - InvalidKeyException - { - SecretKey secretKey = new SecretKeySpec(secret.getBytes(), "HmacSHA256"); - Mac mac = Mac.getInstance(secretKey.getAlgorithm()); - mac.init(secretKey); - byte[] result= mac.doFinal(buffer); - return byteArrayToHexString(result); - } - - public static String GetHmacSha512String(final byte[] buffer, final String secret) throws NoSuchAlgorithmException, - InvalidKeyException - { - SecretKey secretKey = new SecretKeySpec(secret.getBytes(), "HmacSHA512"); - Mac mac = Mac.getInstance(secretKey.getAlgorithm()); - mac.init(secretKey); - byte[] result= mac.doFinal(buffer); - return byteArrayToHexString(result); - } - - private static byte[] toHH(int n) { - byte[] b = new byte[4]; - b[3] = (byte) (n & 0xff); - b[2] = (byte) (n >> 8 & 0xff); - b[1] = (byte) (n >> 16 & 0xff); - b[0] = (byte) (n >> 24 & 0xff); - return b; - } - - private static String byteArrayToHexString(byte[] b) { - StringBuffer sb = new StringBuffer(b.length * 2); - for (int i = 0; i < b.length; i++) { - int v = b[i] & 0xff; - if (v < 16) { - sb.append('0'); - } - sb.append(Integer.toHexString(v)); - } - return sb.toString().toUpperCase(); - } - -} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathSimplifiedFormulaVisitor.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathSimplifiedFormulaVisitor.java deleted file mode 100644 index 7c2fa7ff6..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathSimplifiedFormulaVisitor.java +++ /dev/null @@ -1,1847 +0,0 @@ -package toolgood.algorithm.internals; - -import java.util.ArrayList; -import java.util.List; - -import toolgood.algorithm.Operand; -import toolgood.algorithm.math.mathParser.*; - -public class MathSimplifiedFormulaVisitor extends MathVisitor { - private int inFunctionCount = 0; - - @Override - public Operand visitProg(ProgContext context) { - return super.visitProg(context); - } - - @Override - public Operand visitAddSub_fun(AddSub_funContext context) { - if (inFunctionCount > 0) { - return super.visitAddSub_fun(context); - } - - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = visit(item); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0).ToText(""); - Operand secondValue = args.get(1).ToText(""); - final String t = context.op.getText(); - - return Operand.Create(firstValue.TextValue() +" "+ t +" "+ secondValue.TextValue()); - } - - @Override - public Operand visitMulDiv_fun(MulDiv_funContext context) { - if (inFunctionCount > 0) { - return super.visitMulDiv_fun(context); - } - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = visit(item); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0).ToText(""); - Operand secondValue = args.get(1).ToText(""); - final String t = context.op.getText(); - - return Operand.Create(firstValue.TextValue() +" "+ t +" "+ secondValue.TextValue()); - } - - @Override - public Operand visitBracket_fun(Bracket_funContext context) { - if (inFunctionCount > 0) { - return super.visitBracket_fun(context); - } - Operand firstValue = visit(context.expr()).ToText(""); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create("(" + firstValue.TextValue() + ")"); - } - - @Override - public Operand visitABS_fun(ABS_funContext context) { - inFunctionCount++; - Operand r = super.visitABS_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitACOSH_fun(ACOSH_funContext context) { - inFunctionCount++; - Operand r = super.visitACOSH_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitACOS_fun(ACOS_funContext context) { - inFunctionCount++; - Operand r = super.visitACOS_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitAND_fun(AND_funContext context) { - inFunctionCount++; - Operand r = super.visitAND_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitASC_fun(ASC_funContext context) { - inFunctionCount++; - Operand r = super.visitASC_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitASINH_fun(ASINH_funContext context) { - inFunctionCount++; - Operand r = super.visitASINH_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitASIN_fun(ASIN_funContext context) { - inFunctionCount++; - Operand r = super.visitASIN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitATAN2_fun(ATAN2_funContext context) { - inFunctionCount++; - Operand r = super.visitATAN2_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitATANH_fun(ATANH_funContext context) { - inFunctionCount++; - Operand r = super.visitATANH_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitATAN_fun(ATAN_funContext context) { - inFunctionCount++; - Operand r = super.visitATAN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitAVEDEV_fun(AVEDEV_funContext context) { - inFunctionCount++; - Operand r = super.visitAVEDEV_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitAVERAGEIF_fun(AVERAGEIF_funContext context) { - inFunctionCount++; - Operand r = super.visitAVERAGEIF_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitAVERAGE_fun(AVERAGE_funContext context) { - inFunctionCount++; - Operand r = super.visitAVERAGE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitAndOr_fun(AndOr_funContext context) { - inFunctionCount++; - Operand r = super.visitAndOr_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitArray_fun(Array_funContext context) { - inFunctionCount++; - Operand r = super.visitArray_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitBASE64TOTEXT_fun(BASE64TOTEXT_funContext context) { - inFunctionCount++; - Operand r = super.visitBASE64TOTEXT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitBASE64URLTOTEXT_fun(BASE64URLTOTEXT_funContext context) { - inFunctionCount++; - Operand r = super.visitBASE64URLTOTEXT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitBETADIST_fun(BETADIST_funContext context) { - inFunctionCount++; - Operand r = super.visitBETADIST_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitBETAINV_fun(BETAINV_funContext context) { - inFunctionCount++; - Operand r = super.visitBETAINV_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitBIN2DEC_fun(BIN2DEC_funContext context) { - inFunctionCount++; - Operand r = super.visitBIN2DEC_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitBIN2HEX_fun(BIN2HEX_funContext context) { - inFunctionCount++; - Operand r = super.visitBIN2HEX_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitBIN2OCT_fun(BIN2OCT_funContext context) { - inFunctionCount++; - Operand r = super.visitBIN2OCT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitBINOMDIST_fun(BINOMDIST_funContext context) { - inFunctionCount++; - Operand r = super.visitBINOMDIST_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitCEILING_fun(CEILING_funContext context) { - inFunctionCount++; - Operand r = super.visitCEILING_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitCHAR_fun(CHAR_funContext context) { - inFunctionCount++; - Operand r = super.visitCHAR_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitCLEAN_fun(CLEAN_funContext context) { - inFunctionCount++; - Operand r = super.visitCLEAN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitCODE_fun(CODE_funContext context) { - inFunctionCount++; - Operand r = super.visitCODE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitCOMBIN_fun(COMBIN_funContext context) { - inFunctionCount++; - Operand r = super.visitCOMBIN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitCONCATENATE_fun(CONCATENATE_funContext context) { - inFunctionCount++; - Operand r = super.visitCONCATENATE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitCOSH_fun(COSH_funContext context) { - inFunctionCount++; - Operand r = super.visitCOSH_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitCOS_fun(COS_funContext context) { - inFunctionCount++; - Operand r = super.visitCOS_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitCOUNTIF_fun(COUNTIF_funContext context) { - inFunctionCount++; - Operand r = super.visitCOUNTIF_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitCOUNT_fun(COUNT_funContext context) { - inFunctionCount++; - Operand r = super.visitCOUNT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitCRC32_fun(CRC32_funContext context) { - inFunctionCount++; - Operand r = super.visitCRC32_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitDATEDIF_fun(DATEDIF_funContext context) { - inFunctionCount++; - Operand r = super.visitDATEDIF_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitDATEVALUE_fun(DATEVALUE_funContext context) { - inFunctionCount++; - Operand r = super.visitDATEVALUE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitDATE_fun(DATE_funContext context) { - inFunctionCount++; - Operand r = super.visitDATE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitDAYS360_fun(DAYS360_funContext context) { - inFunctionCount++; - Operand r = super.visitDAYS360_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitDAY_fun(DAY_funContext context) { - inFunctionCount++; - Operand r = super.visitDAY_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitDEC2BIN_fun(DEC2BIN_funContext context) { - inFunctionCount++; - Operand r = super.visitDEC2BIN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitDEC2HEX_fun(DEC2HEX_funContext context) { - inFunctionCount++; - Operand r = super.visitDEC2HEX_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitDEC2OCT_fun(DEC2OCT_funContext context) { - inFunctionCount++; - Operand r = super.visitDEC2OCT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitDEGREES_fun(DEGREES_funContext context) { - inFunctionCount++; - Operand r = super.visitDEGREES_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitDEVSQ_fun(DEVSQ_funContext context) { - inFunctionCount++; - Operand r = super.visitDEVSQ_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitDiyFunction_fun(DiyFunction_funContext context) { - inFunctionCount++; - Operand r = super.visitDiyFunction_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitEDATE_fun(EDATE_funContext context) { - inFunctionCount++; - Operand r = super.visitEDATE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitENDSWITH_fun(ENDSWITH_funContext context) { - inFunctionCount++; - Operand r = super.visitENDSWITH_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitEOMONTH_fun(EOMONTH_funContext context) { - inFunctionCount++; - Operand r = super.visitEOMONTH_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitEVEN_fun(EVEN_funContext context) { - inFunctionCount++; - Operand r = super.visitEVEN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitEXACT_fun(EXACT_funContext context) { - inFunctionCount++; - Operand r = super.visitEXACT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitEXPONDIST_fun(EXPONDIST_funContext context) { - inFunctionCount++; - Operand r = super.visitEXPONDIST_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitEXP_fun(EXP_funContext context) { - inFunctionCount++; - Operand r = super.visitEXP_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitE_fun(E_funContext context) { - inFunctionCount++; - Operand r = super.visitE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitFACTDOUBLE_fun(FACTDOUBLE_funContext context) { - inFunctionCount++; - Operand r = super.visitFACTDOUBLE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitFACT_fun(FACT_funContext context) { - inFunctionCount++; - Operand r = super.visitFACT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitFALSE_fun(FALSE_funContext context) { - inFunctionCount++; - Operand r = super.visitFALSE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitFDIST_fun(FDIST_funContext context) { - inFunctionCount++; - Operand r = super.visitFDIST_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitFIND_fun(FIND_funContext context) { - inFunctionCount++; - Operand r = super.visitFIND_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitFINV_fun(FINV_funContext context) { - inFunctionCount++; - Operand r = super.visitFINV_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitFISHERINV_fun(FISHERINV_funContext context) { - inFunctionCount++; - Operand r = super.visitFISHERINV_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitFISHER_fun(FISHER_funContext context) { - inFunctionCount++; - Operand r = super.visitFISHER_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitFIXED_fun(FIXED_funContext context) { - inFunctionCount++; - Operand r = super.visitFIXED_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitFLOOR_fun(FLOOR_funContext context) { - inFunctionCount++; - Operand r = super.visitFLOOR_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitGAMMADIST_fun(GAMMADIST_funContext context) { - inFunctionCount++; - Operand r = super.visitGAMMADIST_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitGAMMAINV_fun(GAMMAINV_funContext context) { - inFunctionCount++; - Operand r = super.visitGAMMAINV_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitGAMMALN_fun(GAMMALN_funContext context) { - inFunctionCount++; - Operand r = super.visitGAMMALN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitGCD_fun(GCD_funContext context) { - inFunctionCount++; - Operand r = super.visitGCD_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitGEOMEAN_fun(GEOMEAN_funContext context) { - inFunctionCount++; - Operand r = super.visitGEOMEAN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitGUID_fun(GUID_funContext context) { - inFunctionCount++; - Operand r = super.visitGUID_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitGetJsonValue_fun(GetJsonValue_funContext context) { - inFunctionCount++; - Operand r = super.visitGetJsonValue_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitHARMEAN_fun(HARMEAN_funContext context) { - inFunctionCount++; - Operand r = super.visitHARMEAN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitHEX2BIN_fun(HEX2BIN_funContext context) { - inFunctionCount++; - Operand r = super.visitHEX2BIN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitHEX2DEC_fun(HEX2DEC_funContext context) { - inFunctionCount++; - Operand r = super.visitHEX2DEC_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitHEX2OCT_fun(HEX2OCT_funContext context) { - inFunctionCount++; - Operand r = super.visitHEX2OCT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitHMACMD5_fun(HMACMD5_funContext context) { - inFunctionCount++; - Operand r = super.visitHMACMD5_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitHMACSHA1_fun(HMACSHA1_funContext context) { - inFunctionCount++; - Operand r = super.visitHMACSHA1_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitHMACSHA256_fun(HMACSHA256_funContext context) { - inFunctionCount++; - Operand r = super.visitHMACSHA256_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitHMACSHA512_fun(HMACSHA512_funContext context) { - inFunctionCount++; - Operand r = super.visitHMACSHA512_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitHOUR_fun(HOUR_funContext context) { - inFunctionCount++; - Operand r = super.visitHOUR_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitHTMLDECODE_fun(HTMLDECODE_funContext context) { - inFunctionCount++; - Operand r = super.visitHTMLDECODE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitHTMLENCODE_fun(HTMLENCODE_funContext context) { - inFunctionCount++; - Operand r = super.visitHTMLENCODE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitHYPGEOMDIST_fun(HYPGEOMDIST_funContext context) { - inFunctionCount++; - Operand r = super.visitHYPGEOMDIST_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitIFERROR_fun(IFERROR_funContext context) { - inFunctionCount++; - Operand r = super.visitIFERROR_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitIF_fun(IF_funContext context) { - inFunctionCount++; - Operand r = super.visitIF_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitINDEXOF_fun(INDEXOF_funContext context) { - inFunctionCount++; - Operand r = super.visitINDEXOF_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitINT_fun(INT_funContext context) { - inFunctionCount++; - Operand r = super.visitINT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitISERROR_fun(ISERROR_funContext context) { - inFunctionCount++; - Operand r = super.visitISERROR_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitISEVEN_fun(ISEVEN_funContext context) { - inFunctionCount++; - Operand r = super.visitISEVEN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitISLOGICAL_fun(ISLOGICAL_funContext context) { - inFunctionCount++; - Operand r = super.visitISLOGICAL_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitISNONTEXT_fun(ISNONTEXT_funContext context) { - inFunctionCount++; - Operand r = super.visitISNONTEXT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitISNULLOREMPTY_fun(ISNULLOREMPTY_funContext context) { - inFunctionCount++; - Operand r = super.visitISNULLOREMPTY_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitISNULLORERROR_fun(ISNULLORERROR_funContext context) { - inFunctionCount++; - Operand r = super.visitISNULLORERROR_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitISNULLORWHITESPACE_fun(ISNULLORWHITESPACE_funContext context) { - inFunctionCount++; - Operand r = super.visitISNULLORWHITESPACE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitISNULL_fun(ISNULL_funContext context) { - inFunctionCount++; - Operand r = super.visitISNULL_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitISNUMBER_fun(ISNUMBER_funContext context) { - inFunctionCount++; - Operand r = super.visitISNUMBER_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitISODD_fun(ISODD_funContext context) { - inFunctionCount++; - Operand r = super.visitISODD_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitISREGEX_fun(ISREGEX_funContext context) { - inFunctionCount++; - Operand r = super.visitISREGEX_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitISTEXT_fun(ISTEXT_funContext context) { - inFunctionCount++; - Operand r = super.visitISTEXT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitJIS_fun(JIS_funContext context) { - inFunctionCount++; - Operand r = super.visitJIS_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitJOIN_fun(JOIN_funContext context) { - inFunctionCount++; - Operand r = super.visitJOIN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitJSON_fun(JSON_funContext context) { - inFunctionCount++; - Operand r = super.visitJSON_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitJudge_fun(Judge_funContext context) { - inFunctionCount++; - Operand r = super.visitJudge_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitLARGE_fun(LARGE_funContext context) { - inFunctionCount++; - Operand r = super.visitLARGE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitLASTINDEXOF_fun(LASTINDEXOF_funContext context) { - inFunctionCount++; - Operand r = super.visitLASTINDEXOF_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitLCM_fun(LCM_funContext context) { - inFunctionCount++; - Operand r = super.visitLCM_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitLEFT_fun(LEFT_funContext context) { - inFunctionCount++; - Operand r = super.visitLEFT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitLEN_fun(LEN_funContext context) { - inFunctionCount++; - Operand r = super.visitLEN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitLN_fun(LN_funContext context) { - inFunctionCount++; - Operand r = super.visitLN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitLOG10_fun(LOG10_funContext context) { - inFunctionCount++; - Operand r = super.visitLOG10_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitLOGINV_fun(LOGINV_funContext context) { - inFunctionCount++; - Operand r = super.visitLOGINV_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitLOGNORMDIST_fun(LOGNORMDIST_funContext context) { - inFunctionCount++; - Operand r = super.visitLOGNORMDIST_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitLOG_fun(LOG_funContext context) { - inFunctionCount++; - Operand r = super.visitLOG_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitLOOKUP_fun(LOOKUP_funContext context) { - inFunctionCount++; - Operand r = super.visitLOOKUP_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitLOWER_fun(LOWER_funContext context) { - inFunctionCount++; - Operand r = super.visitLOWER_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitMAX_fun(MAX_funContext context) { - inFunctionCount++; - Operand r = super.visitMAX_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitMD5_fun(MD5_funContext context) { - inFunctionCount++; - Operand r = super.visitMD5_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitMEDIAN_fun(MEDIAN_funContext context) { - inFunctionCount++; - Operand r = super.visitMEDIAN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitMID_fun(MID_funContext context) { - inFunctionCount++; - Operand r = super.visitMID_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitMINUTE_fun(MINUTE_funContext context) { - inFunctionCount++; - Operand r = super.visitMINUTE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitMIN_fun(MIN_funContext context) { - inFunctionCount++; - Operand r = super.visitMIN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitMODE_fun(MODE_funContext context) { - inFunctionCount++; - Operand r = super.visitMODE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitMOD_fun(MOD_funContext context) { - inFunctionCount++; - Operand r = super.visitMOD_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitMONTH_fun(MONTH_funContext context) { - inFunctionCount++; - Operand r = super.visitMONTH_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitMROUND_fun(MROUND_funContext context) { - inFunctionCount++; - Operand r = super.visitMROUND_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitMULTINOMIAL_fun(MULTINOMIAL_funContext context) { - inFunctionCount++; - Operand r = super.visitMULTINOMIAL_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitNEGBINOMDIST_fun(NEGBINOMDIST_funContext context) { - inFunctionCount++; - Operand r = super.visitNEGBINOMDIST_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitNETWORKDAYS_fun(NETWORKDAYS_funContext context) { - inFunctionCount++; - Operand r = super.visitNETWORKDAYS_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitNORMDIST_fun(NORMDIST_funContext context) { - inFunctionCount++; - Operand r = super.visitNORMDIST_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitNORMINV_fun(NORMINV_funContext context) { - inFunctionCount++; - Operand r = super.visitNORMINV_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitNORMSDIST_fun(NORMSDIST_funContext context) { - inFunctionCount++; - Operand r = super.visitNORMSDIST_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitNORMSINV_fun(NORMSINV_funContext context) { - inFunctionCount++; - Operand r = super.visitNORMSINV_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitNOT_fun(NOT_funContext context) { - inFunctionCount++; - Operand r = super.visitNOT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitNOW_fun(NOW_funContext context) { - inFunctionCount++; - Operand r = super.visitNOW_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitNULL_fun(NULL_funContext context) { - inFunctionCount++; - Operand r = super.visitNULL_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitNUM_fun(NUM_funContext context) { - inFunctionCount++; - Operand r = super.visitNUM_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitOCT2BIN_fun(OCT2BIN_funContext context) { - inFunctionCount++; - Operand r = super.visitOCT2BIN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitOCT2DEC_fun(OCT2DEC_funContext context) { - inFunctionCount++; - Operand r = super.visitOCT2DEC_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitOCT2HEX_fun(OCT2HEX_funContext context) { - inFunctionCount++; - Operand r = super.visitOCT2HEX_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitODD_fun(ODD_funContext context) { - inFunctionCount++; - Operand r = super.visitODD_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitOR_fun(OR_funContext context) { - inFunctionCount++; - Operand r = super.visitOR_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitPARAMETER_fun(PARAMETER_funContext context) { - inFunctionCount++; - Operand r = super.visitPARAMETER_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitPERCENTILE_fun(PERCENTILE_funContext context) { - inFunctionCount++; - Operand r = super.visitPERCENTILE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitPERCENTRANK_fun(PERCENTRANK_funContext context) { - inFunctionCount++; - Operand r = super.visitPERCENTRANK_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitPERMUT_fun(PERMUT_funContext context) { - inFunctionCount++; - Operand r = super.visitPERMUT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitPI_fun(PI_funContext context) { - inFunctionCount++; - Operand r = super.visitPI_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitPOISSON_fun(POISSON_funContext context) { - inFunctionCount++; - Operand r = super.visitPOISSON_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitPOWER_fun(POWER_funContext context) { - inFunctionCount++; - Operand r = super.visitPOWER_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitPRODUCT_fun(PRODUCT_funContext context) { - inFunctionCount++; - Operand r = super.visitPRODUCT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitPROPER_fun(PROPER_funContext context) { - inFunctionCount++; - Operand r = super.visitPROPER_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitParameter2(Parameter2Context context) { - inFunctionCount++; - Operand r = super.visitParameter2(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitPercentage_fun(Percentage_funContext context) { - inFunctionCount++; - Operand r = super.visitPercentage_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitQUARTILE_fun(QUARTILE_funContext context) { - inFunctionCount++; - Operand r = super.visitQUARTILE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitQUOTIENT_fun(QUOTIENT_funContext context) { - inFunctionCount++; - Operand r = super.visitQUOTIENT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitRADIANS_fun(RADIANS_funContext context) { - inFunctionCount++; - Operand r = super.visitRADIANS_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitRANDBETWEEN_fun(RANDBETWEEN_funContext context) { - inFunctionCount++; - Operand r = super.visitRANDBETWEEN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitRAND_fun(RAND_funContext context) { - inFunctionCount++; - Operand r = super.visitRAND_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitREGEXREPALCE_fun(REGEXREPALCE_funContext context) { - inFunctionCount++; - Operand r = super.visitREGEXREPALCE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitREGEX_fun(REGEX_funContext context) { - inFunctionCount++; - Operand r = super.visitREGEX_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitREMOVEEND_fun(REMOVEEND_funContext context) { - inFunctionCount++; - Operand r = super.visitREMOVEEND_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitREMOVESTART_fun(REMOVESTART_funContext context) { - inFunctionCount++; - Operand r = super.visitREMOVESTART_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitREPLACE_fun(REPLACE_funContext context) { - inFunctionCount++; - Operand r = super.visitREPLACE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitREPT_fun(REPT_funContext context) { - inFunctionCount++; - Operand r = super.visitREPT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitRIGHT_fun(RIGHT_funContext context) { - inFunctionCount++; - Operand r = super.visitRIGHT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitRMB_fun(RMB_funContext context) { - inFunctionCount++; - Operand r = super.visitRMB_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitROUNDDOWN_fun(ROUNDDOWN_funContext context) { - inFunctionCount++; - Operand r = super.visitROUNDDOWN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitROUNDUP_fun(ROUNDUP_funContext context) { - inFunctionCount++; - Operand r = super.visitROUNDUP_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitROUND_fun(ROUND_funContext context) { - inFunctionCount++; - Operand r = super.visitROUND_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSEARCH_fun(SEARCH_funContext context) { - inFunctionCount++; - Operand r = super.visitSEARCH_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSECOND_fun(SECOND_funContext context) { - inFunctionCount++; - Operand r = super.visitSECOND_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSHA1_fun(SHA1_funContext context) { - inFunctionCount++; - Operand r = super.visitSHA1_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSHA256_fun(SHA256_funContext context) { - inFunctionCount++; - Operand r = super.visitSHA256_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSHA512_fun(SHA512_funContext context) { - inFunctionCount++; - Operand r = super.visitSHA512_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSIGN_fun(SIGN_funContext context) { - inFunctionCount++; - Operand r = super.visitSIGN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSINH_fun(SINH_funContext context) { - inFunctionCount++; - Operand r = super.visitSINH_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSIN_fun(SIN_funContext context) { - inFunctionCount++; - Operand r = super.visitSIN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSMALL_fun(SMALL_funContext context) { - inFunctionCount++; - Operand r = super.visitSMALL_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSPLIT_fun(SPLIT_funContext context) { - inFunctionCount++; - Operand r = super.visitSPLIT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSQRTPI_fun(SQRTPI_funContext context) { - inFunctionCount++; - Operand r = super.visitSQRTPI_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSQRT_fun(SQRT_funContext context) { - inFunctionCount++; - Operand r = super.visitSQRT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSTARTSWITH_fun(STARTSWITH_funContext context) { - inFunctionCount++; - Operand r = super.visitSTARTSWITH_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSTDEVP_fun(STDEVP_funContext context) { - inFunctionCount++; - Operand r = super.visitSTDEVP_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSTDEV_fun(STDEV_funContext context) { - inFunctionCount++; - Operand r = super.visitSTDEV_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSTRING_fun(STRING_funContext context) { - inFunctionCount++; - Operand r = super.visitSTRING_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSUBSTITUTE_fun(SUBSTITUTE_funContext context) { - inFunctionCount++; - Operand r = super.visitSUBSTITUTE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSUBSTRING_fun(SUBSTRING_funContext context) { - inFunctionCount++; - Operand r = super.visitSUBSTRING_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSUMIF_fun(SUMIF_funContext context) { - inFunctionCount++; - Operand r = super.visitSUMIF_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSUMSQ_fun(SUMSQ_funContext context) { - inFunctionCount++; - Operand r = super.visitSUMSQ_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitSUM_fun(SUM_funContext context) { - inFunctionCount++; - Operand r = super.visitSUM_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTANH_fun(TANH_funContext context) { - inFunctionCount++; - Operand r = super.visitTANH_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTAN_fun(TAN_funContext context) { - inFunctionCount++; - Operand r = super.visitTAN_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTDIST_fun(TDIST_funContext context) { - inFunctionCount++; - Operand r = super.visitTDIST_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTEXTTOBASE64URL_fun(TEXTTOBASE64URL_funContext context) { - inFunctionCount++; - Operand r = super.visitTEXTTOBASE64URL_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTEXTTOBASE64_fun(TEXTTOBASE64_funContext context) { - inFunctionCount++; - Operand r = super.visitTEXTTOBASE64_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTEXT_fun(TEXT_funContext context) { - inFunctionCount++; - Operand r = super.visitTEXT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTIMEVALUE_fun(TIMEVALUE_funContext context) { - inFunctionCount++; - Operand r = super.visitTIMEVALUE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTIME_fun(TIME_funContext context) { - inFunctionCount++; - Operand r = super.visitTIME_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTINV_fun(TINV_funContext context) { - inFunctionCount++; - Operand r = super.visitTINV_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTODAY_fun(TODAY_funContext context) { - inFunctionCount++; - Operand r = super.visitTODAY_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTRIMEND_fun(TRIMEND_funContext context) { - inFunctionCount++; - Operand r = super.visitTRIMEND_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTRIMSTART_fun(TRIMSTART_funContext context) { - inFunctionCount++; - Operand r = super.visitTRIMSTART_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTRIM_fun(TRIM_funContext context) { - inFunctionCount++; - Operand r = super.visitTRIM_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTRUE_fun(TRUE_funContext context) { - inFunctionCount++; - Operand r = super.visitTRUE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitTRUNC_fun(TRUNC_funContext context) { - inFunctionCount++; - Operand r = super.visitTRUNC_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitT_fun(T_funContext context) { - inFunctionCount++; - Operand r = super.visitT_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitUPPER_fun(UPPER_funContext context) { - inFunctionCount++; - Operand r = super.visitUPPER_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitURLDECODE_fun(URLDECODE_funContext context) { - inFunctionCount++; - Operand r = super.visitURLDECODE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitURLENCODE_fun(URLENCODE_funContext context) { - inFunctionCount++; - Operand r = super.visitURLENCODE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitVALUE_fun(VALUE_funContext context) { - inFunctionCount++; - Operand r = super.visitVALUE_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitVARP_fun(VARP_funContext context) { - inFunctionCount++; - Operand r = super.visitVARP_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitVAR_fun(VAR_funContext context) { - inFunctionCount++; - Operand r = super.visitVAR_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitVLOOKUP_fun(VLOOKUP_funContext context) { - inFunctionCount++; - Operand r = super.visitVLOOKUP_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitWEEKDAY_fun(WEEKDAY_funContext context) { - inFunctionCount++; - Operand r = super.visitWEEKDAY_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitWEEKNUM_fun(WEEKNUM_funContext context) { - inFunctionCount++; - Operand r = super.visitWEEKNUM_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitWEIBULL_fun(WEIBULL_funContext context) { - inFunctionCount++; - Operand r = super.visitWEIBULL_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitWORKDAY_fun(WORKDAY_funContext context) { - inFunctionCount++; - Operand r = super.visitWORKDAY_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitYEAR_fun(YEAR_funContext context) { - inFunctionCount++; - Operand r = super.visitYEAR_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitADDYEARS_fun(ADDYEARS_funContext context) { - inFunctionCount++; - Operand r = super.visitADDYEARS_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitADDMONTHS_fun(ADDMONTHS_funContext context) { - inFunctionCount++; - Operand r = super.visitADDMONTHS_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitADDDAYS_fun(ADDDAYS_funContext context) { - inFunctionCount++; - Operand r = super.visitADDDAYS_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitADDHOURS_fun(ADDHOURS_funContext context) { - inFunctionCount++; - Operand r = super.visitADDHOURS_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitADDMINUTES_fun(ADDMINUTES_funContext context) { - inFunctionCount++; - Operand r = super.visitADDMINUTES_fun(context); - inFunctionCount--; - return r; - } - - @Override - public Operand visitADDSECONDS_fun(ADDSECONDS_funContext context) { - inFunctionCount++; - Operand r = super.visitADDSECONDS_fun(context); - inFunctionCount--; - return r; - } -} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathSplitVisitor.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathSplitVisitor.java deleted file mode 100644 index d69fa71d2..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathSplitVisitor.java +++ /dev/null @@ -1,1224 +0,0 @@ -package toolgood.algorithm.internals; - -import org.antlr.v4.runtime.ParserRuleContext; -import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; -import toolgood.algorithm.enums.ConditionTreeType; -import toolgood.algorithm.math.mathParser; -import toolgood.algorithm.math.mathParser.COVARIANCES_funContext; -import toolgood.algorithm.math.mathParser.COVAR_funContext; -import toolgood.algorithm.math.mathParser.Version_funContext; -import toolgood.algorithm.math.mathVisitor; - -import java.util.ArrayList; - -public class MathSplitVisitor extends AbstractParseTreeVisitor implements mathVisitor { - @Override - public ConditionTree visitProg(mathParser.ProgContext context) { - return visit(context.expr()); - } - - @Override - public ConditionTree visitAndOr_fun(mathParser.AndOr_funContext context) { - ConditionTree tree = new ConditionTree(); - tree.Nodes = new ArrayList<>(); - String t = context.op.getText(); - if (CharUtil.Equals(t, "&&", "and")) { - tree.Type = ConditionTreeType.And; - } else { - tree.Type = ConditionTreeType.Or; - } - tree.Nodes.add(this.visit(context.expr(0))); - tree.Nodes.add(this.visit(context.expr(1))); - return tree; - } - - @Override - public ConditionTree visitBracket_fun(mathParser.Bracket_funContext context) { - return visit(context.expr()); - } - - public ConditionTree visit_fun(ParserRuleContext context) { - ConditionTree tree = new ConditionTree(); - tree.Type = ConditionTreeType.String; - tree.Start = context.start.getStartIndex(); - tree.End = context.stop.getStopIndex(); - tree.ConditionString = context.getText(); - return tree; - } - - @Override - public ConditionTree visitCEILING_fun(mathParser.CEILING_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFACT_fun(mathParser.FACT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitREGEXREPALCE_fun(mathParser.REGEXREPALCE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHASVALUE_fun(mathParser.HASVALUE_funContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitAddSub_fun(mathParser.AddSub_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitAVERAGEIF_fun(mathParser.AVERAGEIF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPARAM_fun(mathParser.PARAM_funContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitRIGHT_fun(mathParser.RIGHT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitOCT2BIN_fun(mathParser.OCT2BIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitQUARTILE_fun(mathParser.QUARTILE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFINV_fun(mathParser.FINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNOT_fun(mathParser.NOT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDAYS360_fun(mathParser.DAYS360_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitWEEKNUM_fun(mathParser.WEEKNUM_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPOISSON_fun(mathParser.POISSON_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISREGEX_fun(mathParser.ISREGEX_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPERCENTILE_fun(mathParser.PERCENTILE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSHA256_fun(mathParser.SHA256_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHAS_fun(mathParser.HAS_funContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitHYPGEOMDIST_fun(mathParser.HYPGEOMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPERMUT_fun(mathParser.PERMUT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTRIMSTART_fun(mathParser.TRIMSTART_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitRMB_fun(mathParser.RMB_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDEC2HEX_fun(mathParser.DEC2HEX_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCLEAN_fun(mathParser.CLEAN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOWER_fun(mathParser.LOWER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitOR_fun(mathParser.OR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitADDMONTHS_fun(mathParser.ADDMONTHS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNORMSINV_fun(mathParser.NORMSINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLEFT_fun(mathParser.LEFT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISEVEN_fun(mathParser.ISEVEN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOGINV_fun(mathParser.LOGINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitWORKDAY_fun(mathParser.WORKDAY_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISERROR_fun(mathParser.ISERROR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitBIN2DEC_fun(mathParser.BIN2DEC_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitJIS_fun(mathParser.JIS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCRC32_fun(mathParser.CRC32_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLCM_fun(mathParser.LCM_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHARMEAN_fun(mathParser.HARMEAN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNORMINV_fun(mathParser.NORMINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGAMMAINV_fun(mathParser.GAMMAINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSQRT_fun(mathParser.SQRT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDEGREES_fun(mathParser.DEGREES_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMROUND_fun(mathParser.MROUND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDATEDIF_fun(mathParser.DATEDIF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTRIMEND_fun(mathParser.TRIMEND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISLOGICAL_fun(mathParser.ISLOGICAL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitINT_fun(mathParser.INT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSUMIF_fun(mathParser.SUMIF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHEX2OCT_fun(mathParser.HEX2OCT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPI_fun(mathParser.PI_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitYEAR_fun(mathParser.YEAR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSQRTPI_fun(mathParser.SQRTPI_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCONCATENATE_fun(mathParser.CONCATENATE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOUNT_fun(mathParser.COUNT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFALSE_fun(mathParser.FALSE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHTMLENCODE_fun(mathParser.HTMLENCODE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitBASE64URLTOTEXT_fun(mathParser.BASE64URLTOTEXT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOG10_fun(mathParser.LOG10_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISTEXT_fun(mathParser.ISTEXT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNEGBINOMDIST_fun(mathParser.NEGBINOMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNETWORKDAYS_fun(mathParser.NETWORKDAYS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFACTDOUBLE_fun(mathParser.FACTDOUBLE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTIMEVALUE_fun(mathParser.TIMEVALUE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitAVEDEV_fun(mathParser.AVEDEV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGUID_fun(mathParser.GUID_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitJSON_fun(mathParser.JSON_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFIXED_fun(mathParser.FIXED_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGetJsonValue_fun(mathParser.GetJsonValue_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTINV_fun(mathParser.TINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitEDATE_fun(mathParser.EDATE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGEOMEAN_fun(mathParser.GEOMEAN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitVAR_fun(mathParser.VAR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSIGN_fun(mathParser.SIGN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitEOMONTH_fun(mathParser.EOMONTH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFLOOR_fun(mathParser.FLOOR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHOUR_fun(mathParser.HOUR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLEN_fun(mathParser.LEN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitACOS_fun(mathParser.ACOS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISNULLORWHITESPACE_fun(mathParser.ISNULLORWHITESPACE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNUM_fun(mathParser.NUM_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOSH_fun(mathParser.COSH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitQUOTIENT_fun(mathParser.QUOTIENT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitOCT2DEC_fun(mathParser.OCT2DEC_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSEARCH_fun(mathParser.SEARCH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitROUNDUP_fun(mathParser.ROUNDUP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOMBIN_fun(mathParser.COMBIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCODE_fun(mathParser.CODE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitASINH_fun(mathParser.ASINH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSIN_fun(mathParser.SIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSUBSTRING_fun(mathParser.SUBSTRING_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitRANDBETWEEN_fun(mathParser.RANDBETWEEN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitAVERAGE_fun(mathParser.AVERAGE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOG_fun(mathParser.LOG_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHMACSHA512_fun(mathParser.HMACSHA512_funContext context) { - return visit_fun(context); - } - - - @Override - public ConditionTree visitSTDEVP_fun(mathParser.STDEVP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitADDYEARS_fun(mathParser.ADDYEARS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitADDSECONDS_fun(mathParser.ADDSECONDS_funContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitArray_fun(mathParser.Array_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitROUND_fun(mathParser.ROUND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitEXP_fun(mathParser.EXP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOUNTIF_fun(mathParser.COUNTIF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitVARP_fun(mathParser.VARP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitREMOVEEND_fun(mathParser.REMOVEEND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDATE_fun(mathParser.DATE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPARAMETER_fun(mathParser.PARAMETER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSPLIT_fun(mathParser.SPLIT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitURLDECODE_fun(mathParser.URLDECODE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLARGE_fun(mathParser.LARGE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTIMESTAMP_fun(mathParser.TIMESTAMP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitVALUE_fun(mathParser.VALUE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDAY_fun(mathParser.DAY_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitWEIBULL_fun(mathParser.WEIBULL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHMACSHA256_fun(mathParser.HMACSHA256_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitBINOMDIST_fun(mathParser.BINOMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitJudge_fun(mathParser.Judge_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDEVSQ_fun(mathParser.DEVSQ_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMODE_fun(mathParser.MODE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitBETAINV_fun(mathParser.BETAINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMAX_fun(mathParser.MAX_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMINUTE_fun(mathParser.MINUTE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTAN_fun(mathParser.TAN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitIFERROR_fun(mathParser.IFERROR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFDIST_fun(mathParser.FDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitINDEXOF_fun(mathParser.INDEXOF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitUPPER_fun(mathParser.UPPER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHTMLDECODE_fun(mathParser.HTMLDECODE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitEXPONDIST_fun(mathParser.EXPONDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDEC2BIN_fun(mathParser.DEC2BIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHEX2DEC_fun(mathParser.HEX2DEC_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSMALL_fun(mathParser.SMALL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitODD_fun(mathParser.ODD_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTEXTTOBASE64_fun(mathParser.TEXTTOBASE64_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMID_fun(mathParser.MID_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPERCENTRANK_fun(mathParser.PERCENTRANK_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSTDEV_fun(mathParser.STDEV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNORMSDIST_fun(mathParser.NORMSDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISNUMBER_fun(mathParser.ISNUMBER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLASTINDEXOF_fun(mathParser.LASTINDEXOF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMOD_fun(mathParser.MOD_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCHAR_fun(mathParser.CHAR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitREGEX_fun(mathParser.REGEX_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTEXTTOBASE64URL_fun(mathParser.TEXTTOBASE64URL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMD5_fun(mathParser.MD5_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitREPLACE_fun(mathParser.REPLACE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitACOSH_fun(mathParser.ACOSH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISODD_fun(mathParser.ISODD_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitASC_fun(mathParser.ASC_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOS_fun(mathParser.COS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLN_fun(mathParser.LN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSTRING_fun(mathParser.STRING_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHMACMD5_fun(mathParser.HMACMD5_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPRODUCT_fun(mathParser.PRODUCT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitEXACT_fun(mathParser.EXACT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitADDMINUTES_fun(mathParser.ADDMINUTES_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSUMSQ_fun(mathParser.SUMSQ_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSUM_fun(mathParser.SUM_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSECOND_fun(mathParser.SECOND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGAMMADIST_fun(mathParser.GAMMADIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitOCT2HEX_fun(mathParser.OCT2HEX_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTODAY_fun(mathParser.TODAY_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitERROR_fun(mathParser.ERROR_funContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitATAN_fun(mathParser.ATAN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitE_fun(mathParser.E_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTRIM_fun(mathParser.TRIM_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitRADIANS_fun(mathParser.RADIANS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGAMMALN_fun(mathParser.GAMMALN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTEXT_fun(mathParser.TEXT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFISHER_fun(mathParser.FISHER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitAND_fun(mathParser.AND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitArrayJson_fun(mathParser.ArrayJson_funContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitBIN2HEX_fun(mathParser.BIN2HEX_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMULTINOMIAL_fun(mathParser.MULTINOMIAL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMONTH_fun(mathParser.MONTH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitURLENCODE_fun(mathParser.URLENCODE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNORMDIST_fun(mathParser.NORMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHMACSHA1_fun(mathParser.HMACSHA1_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitENDSWITH_fun(mathParser.ENDSWITH_funContext context) { - return visit_fun(context); - } - - - @Override - public ConditionTree visitBETADIST_fun(mathParser.BETADIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitATANH_fun(mathParser.ATANH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNOW_fun(mathParser.NOW_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMEDIAN_fun(mathParser.MEDIAN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPOWER_fun(mathParser.POWER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDEC2OCT_fun(mathParser.DEC2OCT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPROPER_fun(mathParser.PROPER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTRUNC_fun(mathParser.TRUNC_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGCD_fun(mathParser.GCD_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTANH_fun(mathParser.TANH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHEX2BIN_fun(mathParser.HEX2BIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSINH_fun(mathParser.SINH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSHA512_fun(mathParser.SHA512_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMIN_fun(mathParser.MIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitADDDAYS_fun(mathParser.ADDDAYS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISNONTEXT_fun(mathParser.ISNONTEXT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitABS_fun(mathParser.ABS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitROUNDDOWN_fun(mathParser.ROUNDDOWN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitIF_fun(mathParser.IF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitJOIN_fun(mathParser.JOIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFIND_fun(mathParser.FIND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSUBSTITUTE_fun(mathParser.SUBSTITUTE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitREPT_fun(mathParser.REPT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitASIN_fun(mathParser.ASIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMulDiv_fun(mathParser.MulDiv_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitREMOVESTART_fun(mathParser.REMOVESTART_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitT_fun(mathParser.T_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitWEEKDAY_fun(mathParser.WEEKDAY_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitBIN2OCT_fun(mathParser.BIN2OCT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitBASE64TOTEXT_fun(mathParser.BASE64TOTEXT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTDIST_fun(mathParser.TDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDATEVALUE_fun(mathParser.DATEVALUE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSTARTSWITH_fun(mathParser.STARTSWITH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitEVEN_fun(mathParser.EVEN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOGNORMDIST_fun(mathParser.LOGNORMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISNULLOREMPTY_fun(mathParser.ISNULLOREMPTY_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTRUE_fun(mathParser.TRUE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFISHERINV_fun(mathParser.FISHERINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSHA1_fun(mathParser.SHA1_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTIME_fun(mathParser.TIME_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitATAN2_fun(mathParser.ATAN2_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitADDHOURS_fun(mathParser.ADDHOURS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitRAND_fun(mathParser.RAND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNum(mathParser.NumContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitUnit(mathParser.UnitContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitArrayJson(mathParser.ArrayJsonContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitParameter2(mathParser.Parameter2Context context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitVLOOKUP_fun(mathParser.VLOOKUP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOOKUP_fun(mathParser.LOOKUP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNULL_fun(mathParser.NULL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISNULL_fun(mathParser.ISNULL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISNULLORERROR_fun(mathParser.ISNULLORERROR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDiyFunction_fun(mathParser.DiyFunction_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPercentage_fun(mathParser.Percentage_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOVARIANCES_fun(COVARIANCES_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOVAR_fun(COVAR_funContext context) { - return visit_fun(context); - } - @Override - public ConditionTree visitVersion_fun(Version_funContext context) { - return visit_fun(context); - } -} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathVisitor.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathVisitor.java deleted file mode 100644 index 1918f3722..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MathVisitor.java +++ /dev/null @@ -1,6061 +0,0 @@ -package toolgood.algorithm.internals; - -import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; -import org.antlr.v4.runtime.tree.TerminalNode; -import org.apache.commons.text.StringEscapeUtils; -import org.joda.time.DateTime; -import org.joda.time.DateTimeConstants; -import org.joda.time.DateTimeZone; -import toolgood.algorithm.MyDate; -import toolgood.algorithm.Operand; -import toolgood.algorithm.enums.*; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.litJson.JsonMapper; -import toolgood.algorithm.math.mathParser.*; -import toolgood.algorithm.math.mathVisitor; -import toolgood.algorithm.mathNet.ExcelFunctions; - -import java.math.BigDecimal; -import java.math.MathContext; -import java.math.RoundingMode; -import java.net.URLDecoder; -import java.net.URLEncoder; -import java.text.DecimalFormat; -import java.util.*; -import java.util.function.Function; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class MathVisitor extends AbstractParseTreeVisitor implements mathVisitor { - private static final Pattern sumifRegex = Pattern - .compile("(<|<=|>|>=|=|==|===|!=|!==|<>) *([-+]?\\d+(\\.(\\d+)?)?)"); - private static final Pattern bit_2 = Pattern.compile("^[01]+"); - private static final Pattern bit_8 = Pattern.compile("^[0-8]+"); - private static final Pattern bit_16 = Pattern.compile("^[0-9a-fA-F]+"); - private static final Pattern clearRegex = Pattern.compile("[\\f\\n\\r\\t\\v]"); - private static final Pattern numberRegex = Pattern.compile("^-?(0|[1-9])\\d*(\\.\\d+)?$"); - public Function GetParameter; - public Function DiyFunction; - public int excelIndex; - public boolean useLocalTime; - public DistanceUnitType DistanceUnit = DistanceUnitType.M; - public AreaUnitType AreaUnit = AreaUnitType.M2; - public VolumeUnitType VolumeUnit = VolumeUnitType.M3; - public MassUnitType MassUnit = MassUnitType.KG; - private ProgContext mainContext = null; - - public Operand visitProg(final ProgContext context) { - mainContext = context; - return context.expr().accept(this); - } - - public Operand visitMulDiv_fun(final MulDiv_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0); - Operand secondValue = args.get(1); - final String t = context.op.getText(); - if (firstValue.Type() == OperandType.TEXT) { - if (numberRegex.matcher(firstValue.TextValue()).find()) { - final Operand a = firstValue.ToNumber(null); - if (a.IsError() == false) - firstValue = a; - } else { - final Operand a = firstValue.ToDate(null); - if (a.IsError() == false) - firstValue = a; - } - } - if (secondValue.Type() == OperandType.TEXT) { - if (numberRegex.matcher(secondValue.TextValue()).find()) { - final Operand a = secondValue.ToNumber(null); - if (a.IsError() == false) - secondValue = a; - } else { - final Operand a = secondValue.ToDate(null); - if (a.IsError() == false) - secondValue = a; - } - } - if (CharUtil.Equals(t, "*")) { - if (secondValue.Type() == OperandType.BOOLEAN) { - if (secondValue.BooleanValue()) - return firstValue; - else - return Operand.Create(0); - } else if (firstValue.Type() == OperandType.BOOLEAN) { - if (firstValue.BooleanValue()) - return secondValue; - else - return Operand.Create(0); - } - if (firstValue.Type() == OperandType.DATE) { - secondValue = secondValue.ToNumber("Function '" + t + "' parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - return Operand.Create(firstValue.DateValue().MUL(secondValue.NumberValue())); - } - if (secondValue.Type() == OperandType.DATE) { - firstValue = firstValue.ToNumber("Function '" + t + "' parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(secondValue.DateValue().MUL(firstValue.NumberValue())); - } - - firstValue = firstValue.ToNumber("Function '" + t + "' parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - secondValue = secondValue.ToNumber("Function '" + t + "' parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - return Operand.Create(firstValue.NumberValue().multiply(secondValue.NumberValue())); - } else if (CharUtil.Equals(t, "/")) { - if (firstValue.Type() == OperandType.DATE) { - return Operand.Create(firstValue.DateValue().DIV(secondValue.NumberValue())); - } - - firstValue = firstValue.ToNumber("Function '" + t + "' parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - secondValue = secondValue.ToNumber("Div fun right value"); - if (secondValue.IsError()) { - return secondValue; - } - if (secondValue.NumberValue().compareTo(new BigDecimal(0)) == 0) { - return Operand.Error("Function '" + t + "' parameter 2 is error!"); - } - return Operand.Create(firstValue.NumberValue().divide(secondValue.NumberValue(), MathContext.DECIMAL32)); - } else if (CharUtil.Equals(t, "%")) { - firstValue = firstValue.ToNumber("% fun right value"); - if (firstValue.IsError()) { - return firstValue; - } - secondValue = secondValue.ToNumber("% fun right value"); - if (secondValue.IsError()) { - return secondValue; - } - if (secondValue.NumberValue().compareTo(new BigDecimal(0)) == 0) { - return Operand.Error("Div 0 is error!"); - } - return Operand.Create( - firstValue.NumberValue().divideAndRemainder(secondValue.NumberValue(), MathContext.DECIMAL32)[1]); - } - return Operand.Error("Function '" + t + "' parameter is error!"); - } - - public Operand visitAddSub_fun(final AddSub_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0); - Operand secondValue = args.get(1); - final String t = context.op.getText(); - - if (CharUtil.Equals(t, "&")) { - if (firstValue.IsNull() && secondValue.IsNull()) { - return firstValue; - } else if (firstValue.IsNull()) { - secondValue = secondValue.ToText("Function '" + t + "' parameter 2 is error!"); - return secondValue; - } else if (secondValue.IsNull()) { - firstValue = firstValue.ToText("Function '" + t + "' parameter 1 is error!"); - return firstValue; - } - - firstValue = firstValue.ToText("Function '" + t + "' parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - secondValue = secondValue.ToText("Function '" + t + "' parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - return Operand.Create(firstValue.TextValue() + secondValue.TextValue()); - } - if (firstValue.Type() == OperandType.TEXT) { - if (numberRegex.matcher(firstValue.TextValue()).find()) { - final Operand a = firstValue.ToNumber(null); - if (a.IsError() == false) - firstValue = a; - } else { - final Operand a = firstValue.ToDate(null); - if (a.IsError() == false) - firstValue = a; - } - } - if (secondValue.Type() == OperandType.TEXT) { - if (numberRegex.matcher(secondValue.TextValue()).find()) { - final Operand a = secondValue.ToNumber(null); - if (a.IsError() == false) - secondValue = a; - } else { - final Operand a = secondValue.ToDate(null); - if (a.IsError() == false) - secondValue = a; - } - } - if (CharUtil.Equals(t, "+")) { - if (firstValue.Type() == OperandType.DATE && secondValue.Type() == OperandType.DATE) { - return Operand.Create(firstValue.DateValue().ADD(secondValue.DateValue())); - } else if (firstValue.Type() == OperandType.DATE) { - secondValue = secondValue.ToNumber("Function '" + t + "' parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - return Operand.Create(firstValue.DateValue().ADD(secondValue.NumberValue())); - } else if (secondValue.Type() == OperandType.DATE) { - firstValue = firstValue.ToNumber("Function '" + t + "' parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(secondValue.DateValue().ADD(firstValue.NumberValue())); - } - firstValue = firstValue.ToNumber("Function '" + t + "' parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - secondValue = secondValue.ToNumber("Function '" + t + "' parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - return Operand.Create(firstValue.NumberValue().add(secondValue.NumberValue())); - } else if (CharUtil.Equals(t, "-")) { - if (firstValue.Type() == OperandType.DATE && secondValue.Type() == OperandType.DATE) { - return Operand.Create(firstValue.DateValue().SUB(secondValue.DateValue())); - } else if (firstValue.Type() == OperandType.DATE) { - secondValue = secondValue.ToNumber("Function '" + t + "' parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - return Operand.Create(firstValue.DateValue().SUB(secondValue.NumberValue())); - } else if (secondValue.Type() == OperandType.DATE) { - firstValue = firstValue.ToNumber("Function '" + t + "' parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(secondValue.DateValue().SUB(firstValue.NumberValue())); - } - firstValue = firstValue.ToNumber(null); - if (firstValue.IsError()) { - return firstValue; - } - secondValue = secondValue.ToNumber("Function '" + t + "' parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - return Operand.Create(firstValue.NumberValue().subtract(secondValue.NumberValue())); - } - return Operand.Error("Function '" + t + "' parameter is error!"); - } - - public Operand visitJudge_fun(final Judge_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0); - Operand secondValue = args.get(1); - final String type = context.op.getText(); - - if (firstValue.IsNull()) { - if (secondValue.IsNull() && CharUtil.Equals(type, "=", "==", "===")) { - return Operand.True; - } else if (secondValue.IsNull() == false && CharUtil.Equals(type, "<>", "!=", "!==")) { - return Operand.True; - } - return Operand.False; - } else if (secondValue.IsNull()) { - if (CharUtil.Equals(type, "=", "==", "===")) { - return Operand.False; - } - return Operand.True; - } - - int r; - if (firstValue.Type() == secondValue.Type()) { - if (firstValue.Type() == OperandType.TEXT || firstValue.Type() == OperandType.JSON) { - firstValue = firstValue.ToText("Function '" + type + "' parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - secondValue = secondValue.ToText("Function '" + type + "' parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - r = firstValue.TextValue().compareTo(secondValue.TextValue()); - } else if (firstValue.Type() == OperandType.ARRARY) { - return Operand.Error("The two types cannot be compared."); - } else { - firstValue = firstValue.ToNumber("Function '" + type + "' parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - secondValue = secondValue.ToNumber("Function '" + type + "' parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - r = firstValue.NumberValue().setScale(12, RoundingMode.HALF_UP) - .compareTo(secondValue.NumberValue().setScale(12, RoundingMode.HALF_UP)); - } - } else if ((firstValue.Type() == OperandType.DATE && secondValue.Type() == OperandType.TEXT) - || (secondValue.Type() == OperandType.DATE && firstValue.Type() == OperandType.TEXT) - || (firstValue.Type() == OperandType.NUMBER && secondValue.Type() == OperandType.TEXT) - || (secondValue.Type() == OperandType.NUMBER && firstValue.Type() == OperandType.TEXT)) { - firstValue = firstValue.ToText("Function '" + type + "' parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - secondValue = secondValue.ToText("Function '" + type + "' parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - r = firstValue.TextValue().compareTo(secondValue.TextValue()); - } else if ((firstValue.Type() == OperandType.BOOLEAN && secondValue.Type() == OperandType.TEXT) - || (secondValue.Type() == OperandType.BOOLEAN && firstValue.Type() == OperandType.TEXT)) { - firstValue = firstValue.ToText("Function '" + type + "' parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - secondValue = secondValue.ToText("Function '" + type + "' parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - r = firstValue.TextValue().compareToIgnoreCase(secondValue.TextValue()); - // r = String.Compare(firstValue.TextValue(), secondValue.TextValue(), true); - } else if (firstValue.Type() == OperandType.TEXT || secondValue.Type() == OperandType.TEXT - || firstValue.Type() == OperandType.JSON || secondValue.Type() == OperandType.JSON - || firstValue.Type() == OperandType.ARRARY || secondValue.Type() == OperandType.ARRARY) { - return Operand.Error("The two types cannot be compared."); - } else { - firstValue = firstValue.ToNumber("Function '" + type + "' parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - secondValue = secondValue.ToNumber("Function '" + type + "' parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - r = firstValue.NumberValue().setScale(12, RoundingMode.HALF_UP) - .compareTo(secondValue.NumberValue().setScale(12, RoundingMode.HALF_UP)); - } - if (CharUtil.Equals(type, "<")) { - return Operand.Create(r == -1); - } else if (CharUtil.Equals(type, "<=")) { - return Operand.Create(r <= 0); - } else if (CharUtil.Equals(type, ">")) { - return Operand.Create(r == 1); - } else if (CharUtil.Equals(type, ">=")) { - return Operand.Create(r >= 0); - } else if (CharUtil.Equals(type, "=", "==", "===")) { - return Operand.Create(r == 0); - } - return Operand.Create(r != 0); - } - - public Operand visitAndOr_fun(final AndOr_funContext context) { - // 程序 && and || or 与 excel的 AND(x,y) OR(x,y) 有区别 - // 在excel内 AND(x,y) OR(x,y) 先报错, - // 在程序中,&& and 有true 直接返回true 就不会检测下一个会不会报错 - // 在程序中,|| or 有false 直接返回false 就不会检测下一个会不会报错 - final String t = context.op.getText(); - final Operand first = context.expr(0).accept(this).ToBoolean("Function '" + t + "' parameter 1 is error!"); - if (first.IsError()) - return first; - if (CharUtil.Equals(t, "&&", "and")) { - if (first.BooleanValue() == false) - return Operand.False; - } else { - if (first.BooleanValue()) - return Operand.True; - } - return context.expr(1).accept(this).ToBoolean("Function '" + t + "' parameter 2 is error!"); - } - - public Operand visitIF_fun(final IF_funContext context) { - List exprs = context.expr(); - - Operand b = exprs.get(0).accept(this).ToBoolean("Function IF first parameter is error!"); - if (b.IsError()) { - return b; - } - - if (b.BooleanValue()) { - if (exprs.size() > 1) { - return exprs.get(1).accept(this); - } - return Operand.True; - } - if (exprs.size() == 3) { - return exprs.get(2).accept(this); - } - return Operand.False; - } - - public Operand visitIFERROR_fun(final IFERROR_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this); - args.add(a); - } - - if (args.get(0).IsError()) { - return args.get(1); - } - if (args.size() == 3) { - return args.get(2); - } - return Operand.False; - } - - public Operand visitISNUMBER_fun(final ISNUMBER_funContext context) { - final Operand firstValue = context.expr().accept(this); - if (firstValue.IsError()) { - return firstValue; - } - - if (firstValue.Type() == OperandType.NUMBER) { - return Operand.True; - } - return Operand.False; - } - - public Operand visitISTEXT_fun(final ISTEXT_funContext context) { - final Operand firstValue = context.expr().accept(this); - if (firstValue.IsError()) { - return firstValue; - } - - if (firstValue.Type() == OperandType.TEXT) { - return Operand.True; - } - return Operand.False; - } - - public Operand visitISERROR_fun(final ISERROR_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - args.add(aa); - } - if (args.size() == 2) { - if (args.get(0).IsError()) { - return args.get(1); - } - return args.get(0); - } - - if (args.get(0).IsError()) { - return Operand.True; - } - return Operand.False; - } - - public Operand visitISNULL_fun(final ISNULL_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - args.add(aa); - } - - if (args.size() == 2) { - if (args.get(0).IsNull()) { - return args.get(1); - } - return args.get(0); - } - if (args.get(0).IsNull()) { - return Operand.True; - } - return Operand.False; - } - - public Operand visitISNULLORERROR_fun(final ISNULLORERROR_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - args.add(aa); - } - - if (args.size() == 2) { - if (args.get(0).IsNull() || args.get(0).IsError()) { - return args.get(1); - } - return args.get(0); - } - if (args.get(0).IsNull() || args.get(0).IsError()) { - return Operand.True; - } - return Operand.False; - } - - public Operand visitISEVEN_fun(final ISEVEN_funContext context) { - final Operand firstValue = context.expr().accept(this); - if (firstValue.Type() == OperandType.NUMBER) { - if (firstValue.IntValue() % 2 == 0) { - return Operand.True; - } - } - return Operand.False; - } - - public Operand visitISLOGICAL_fun(final ISLOGICAL_funContext context) { - final Operand firstValue = context.expr().accept(this); - if (firstValue.Type() == OperandType.BOOLEAN) { - return Operand.True; - } - return Operand.False; - } - - public Operand visitISODD_fun(final ISODD_funContext context) { - final Operand firstValue = context.expr().accept(this); - if (firstValue.Type() == OperandType.NUMBER) { - if (firstValue.IntValue() % 2 == 1) { - return Operand.True; - } - } - return Operand.False; - } - - public Operand visitISNONTEXT_fun(final ISNONTEXT_funContext context) { - final Operand firstValue = context.expr().accept(this); - if (firstValue.Type() != OperandType.TEXT) { - return Operand.True; - } - return Operand.False; - } - - public Operand visitAND_fun(final AND_funContext context) { - int index = 1; - Boolean b = true; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToBoolean("Function AND parameter " + (index++) + " is error!"); - if (a.IsError()) - return a; - if (a.BooleanValue() == false) - b = false; - } - return b ? Operand.True : Operand.False; - } - - public Operand visitOR_fun(final OR_funContext context) { - int index = 1; - boolean b = false; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToBoolean("Function OR parameter " + (index++) + " is error!"); - if (a.IsError()) - return a; - if (a.BooleanValue()) - b = true; - } - return b ? Operand.True : Operand.False; - } - - public Operand visitNOT_fun(final NOT_funContext context) { - final Operand firstValue = context.expr().accept(this).ToBoolean("Function NOT parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(!firstValue.BooleanValue()); - } - - public Operand visitTRUE_fun(final TRUE_funContext context) { - return Operand.True; - } - - public Operand visitFALSE_fun(final FALSE_funContext context) { - return Operand.False; - } - - public Operand visitE_fun(final E_funContext context) { - return Operand.Create(Math.E); - } - - public Operand visitPI_fun(final PI_funContext context) { - return Operand.Create(Math.PI); - } - - public Operand visitABS_fun(final ABS_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function ABS parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(Math.abs(firstValue.NumberValue().doubleValue())); - } - - public Operand visitQUOTIENT_fun(final QUOTIENT_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function QUOTIENT parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - final Operand secondValue = args.get(1); - - if (secondValue.NumberValue().compareTo(new BigDecimal(0)) == 0) { - return Operand.Error("Function QUOTIENT div 0 error!"); - } - return Operand.Create( - (double) (int) (firstValue.NumberValue().doubleValue() / secondValue.NumberValue().doubleValue())); - } - - public Operand visitMOD_fun(final MOD_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function MOD parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - final Operand secondValue = args.get(1); - - if (secondValue.NumberValue().compareTo(new BigDecimal(0)) == 0) { - return Operand.Error("Function MOD div 0 error!"); - } - return Operand.Create((int) (firstValue.NumberValue().doubleValue() % secondValue.NumberValue().doubleValue())); - - } - - public Operand visitSIGN_fun(final SIGN_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function SIGN parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(sign(firstValue.NumberValue().doubleValue())); - } - - public Operand visitSQRT_fun(final SQRT_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function SQRT parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(Math.sqrt(firstValue.NumberValue().doubleValue())); - } - - public Operand visitTRUNC_fun(final TRUNC_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function TRUNC parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create((int) (firstValue.NumberValue().doubleValue())); - } - - public Operand visitINT_fun(final INT_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function INT parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create((int) (firstValue.NumberValue().doubleValue())); - } - - public Operand visitGCD_fun(final GCD_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function GCD parameter is error!"); - } - - return Operand.Create(F_base_gcd(list)); - } - - public Operand visitLCM_fun(final LCM_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function GCD parameter is error!"); - } - - return Operand.Create(F_base_lgm(list)); - } - - public Operand visitCOMBIN_fun(final COMBIN_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function COMBIN parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - final Operand secondValue = args.get(1); - - final int total = firstValue.IntValue(); - final int count = secondValue.IntValue(); - double sum = 1; - double sum2 = 1; - for (int i = 0; i < count; i++) { - sum *= (total - i); - sum2 *= (i + 1); - } - return Operand.Create(sum / sum2); - } - - public Operand visitPERMUT_fun(final PERMUT_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function PERMUT parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - final Operand secondValue = args.get(1); - - final int total = firstValue.IntValue(); - final int count = secondValue.IntValue(); - - double sum = 1; - for (int i = 0; i < count; i++) { - sum *= (total - i); - } - return Operand.Create(sum); - } - - public Operand visitPercentage_fun(Percentage_funContext context) { - Operand firstValue = context.expr().accept(this).ToNumber("Function Percentage parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(firstValue.NumberValue().divide(new BigDecimal(100), MathContext.DECIMAL32)); - } - - private int F_base_gcd(List list) { - list = ShellSort(list); - // list = list.OrderBy(q => q).ToList(); - int g = F_base_gcd(list.get(1).intValue(), list.get(0).intValue()); - for (int i = 2; i < list.size(); i++) { - g = F_base_gcd(list.get(i).intValue(), g); - } - return g; - } - - private int F_base_gcd(final int a, final int b) { - if (b == 1) { - return 1; - } - if (b == 0) { - return a; - } - return F_base_gcd(b, a % b); - } - - private int F_base_lgm(List list) { - for (int i = list.size() - 1; i >= 0; i--) { - final int item = list.get(i).intValue();// [i]; - if (item <= 1) { - list.remove(i); - } - } - list = ShellSort(list); - - int a = list.get(0).intValue();// [0]; - for (int i = 1; i < list.size(); i++) { - final int b = list.get(i).intValue(); - final int g = b > a ? F_base_gcd(b, a) : F_base_gcd(a, b); - a = a / g * b; - } - return a; - } - - private List ShellSort(final List array) { - final int len = array.size(); - BigDecimal temp; - int gap = len / 2; - while (gap > 0) { - for (int i = gap; i < len; i++) { - temp = array.get(i); - int preIndex = i - gap; - while (preIndex >= 0 && array.get(preIndex).compareTo(temp) > 0) { - array.set(preIndex + gap, array.get(preIndex)); - // array[preIndex + gap] = array[preIndex]; - preIndex -= gap; - } - array.set(preIndex + gap, temp); - // array[preIndex + gap] = temp; - } - gap /= 2; - } - return array; - } - - public Operand visitDEGREES_fun(final DEGREES_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function DEGREES parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final double z = firstValue.NumberValue().doubleValue(); - final double r = (z / Math.PI * 180); - return Operand.Create(r); - } - - public Operand visitRADIANS_fun(final RADIANS_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function RADIANS parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final double r = firstValue.NumberValue().doubleValue() / 180 * Math.PI; - return Operand.Create(r); - } - - public Operand visitCOS_fun(final COS_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function COS parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(Math.cos(firstValue.NumberValue().doubleValue())); - } - - public Operand visitCOSH_fun(final COSH_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function COSH parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(Math.cosh(firstValue.NumberValue().doubleValue())); - } - - public Operand visitSIN_fun(final SIN_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function SIN parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(Math.sin(firstValue.NumberValue().doubleValue())); - } - - public Operand visitSINH_fun(final SINH_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function SINH parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(Math.sinh(firstValue.NumberValue().doubleValue())); - } - - public Operand visitTAN_fun(final TAN_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function TAN parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(Math.tan(firstValue.NumberValue().doubleValue())); - } - - public Operand visitTANH_fun(final TANH_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function TANH parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(Math.tanh(firstValue.NumberValue().doubleValue())); - } - - public Operand visitACOS_fun(final ACOS_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function ACOS parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final double x = firstValue.NumberValue().doubleValue(); - if (x < -1 || x > 1) { - return Operand.Error("Function ACOS parameter is error!"); - } - return Operand.Create(Math.acos(x)); - } - - public Operand visitACOSH_fun(final ACOSH_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function ACOSH parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final double z = firstValue.NumberValue().doubleValue(); - if (z < 1) { - return Operand.Error("Function ACOSH parameter is error!"); - } - final double r = Math.log(z + Math.pow(z * z - 1, 0.5)); - return Operand.Create(r); - } - - public Operand visitASIN_fun(final ASIN_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function ASIN parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final double x = firstValue.NumberValue().doubleValue(); - if (x < -1 || x > 1) { - return Operand.Error("Function ASIN parameter is error!"); - } - return Operand.Create(Math.asin(x)); - } - - public Operand visitASINH_fun(final ASINH_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function ASINH parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final double x = firstValue.NumberValue().doubleValue(); - final double d = Math.log(x + Math.sqrt(x * x + 1)); - return Operand.Create(d); - } - - public Operand visitATAN_fun(final ATAN_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function ATAN parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(Math.atan(firstValue.NumberValue().doubleValue())); - } - - public Operand visitATANH_fun(final ATANH_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function ATANH parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final double x = firstValue.NumberValue().doubleValue(); - if (x >= 1 || x <= -1) { - return Operand.Error("Function ATANH parameter is error!"); - } - final double d = Math.log((1 + x) / (1 - x)) / 2; - return Operand.Create(d); - } - - public Operand visitATAN2_fun(final ATAN2_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function ATAN2 parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - final Operand secondValue = args.get(1); - - return Operand - .Create(Math.atan2(secondValue.NumberValue().doubleValue(), firstValue.NumberValue().doubleValue())); - } - - public Operand visitFIXED_fun(final FIXED_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - int num = 2; - if (args.size() > 1) { - final Operand secondValue = args.get(1).ToNumber("Function FIXED parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - num = secondValue.IntValue(); - } - final Operand firstValue = args.get(0).ToNumber("Function FIXED parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final double s = round(firstValue.NumberValue().doubleValue(), num); - boolean no = false; - if (args.size() == 3) { - final Operand thirdValue = args.get(2).ToBoolean("Function FIXED parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - no = thirdValue.BooleanValue(); - } - if (num <= 0) { - String f = no ? "#" : "#,###"; - final DecimalFormat myFormatter = new DecimalFormat(f); - return Operand.Create(myFormatter.format(s)); - } else { - String f = no ? "#." : "#,###."; - for (int i = 0; i < num; i++) { - f += "#"; - } - final DecimalFormat myFormatter = new DecimalFormat(f); - return Operand.Create(myFormatter.format(s)); - } - // return Operand.Create(((Double)s).toString()); - } - - public Operand visitBIN2OCT_fun(final BIN2OCT_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function BIN2OCT parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - if (bit_2.matcher(firstValue.TextValue()).find() == false) { - return Operand.Error("Function BIN2OCT parameter 1 is error!"); - } - final String num = Integer.toOctalString(Integer.parseUnsignedInt(firstValue.TextValue(), 2)); - // String num = Convert.toString(Convert.ToInt32(firstValue.TextValue(), 2), 8); - if (args.size() == 2) { - final Operand secondValue = args.get(1).ToNumber("Function BIN2OCT parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - if (num.length() > secondValue.IntValue()) { - return Operand.Create(padLeft(num, secondValue.IntValue(), '0')); - } - return Operand.Error("Function BIN2OCT parameter 2 is error!"); - } - return Operand.Create(num); - } - - public Operand visitBIN2DEC_fun(final BIN2DEC_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function BIN2DEC parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - if (bit_2.matcher(firstValue.TextValue()).find() == false) { - return Operand.Error("Function BIN2DEC parameter is error!"); - } - final int num = Integer.parseUnsignedInt(firstValue.TextValue(), 2); - // String num = Convert.ToInt32(firstValue.TextValue(), 2); - return Operand.Create(num); - } - - public Operand visitBIN2HEX_fun(final BIN2HEX_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function BIN2HEX parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - if (bit_2.matcher(firstValue.TextValue()).find() == false) { - return Operand.Error("Function BIN2HEX parameter 1 is error!"); - } - final String num = Integer.toHexString(Integer.parseUnsignedInt(firstValue.TextValue(), 2)).toUpperCase(); - if (args.size() == 2) { - final Operand secondValue = args.get(1).ToNumber("Function BIN2HEX parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - if (num.length() > secondValue.IntValue()) { - return Operand.Create(padLeft(num, secondValue.IntValue(), '0')); - } - return Operand.Error("Function BIN2HEX parameter 2 is error!"); - } - return Operand.Create(num); - } - - public Operand visitOCT2BIN_fun(final OCT2BIN_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function OCT2BIN parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - if (bit_8.matcher(firstValue.TextValue()).find() == false) { - return Operand.Error("Function OCT2BIN parameter 1 is error!"); - } - final String num = Integer.toBinaryString(Integer.parseUnsignedInt(firstValue.TextValue(), 8)); - // String num = Convert.toString(Convert.ToInt32(firstValue.TextValue(), 8), 2); - if (args.size() == 2) { - final Operand secondValue = args.get(1).ToNumber("Function OCT2BIN parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - if (num.length() > secondValue.IntValue()) { - return Operand.Create(padLeft(num, secondValue.IntValue(), '0')); - } - return Operand.Error("Function OCT2BIN parameter 2 is error!"); - } - return Operand.Create(num); - } - - public Operand visitOCT2DEC_fun(final OCT2DEC_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function OCT2DEC parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - if (bit_8.matcher(firstValue.TextValue()).find() == false) { - return Operand.Error("Function OCT2DEC parameter is error!"); - } - final int num = Integer.parseUnsignedInt(firstValue.TextValue(), 8); - // String num = Convert.ToInt32(firstValue.TextValue(), 8); - return Operand.Create(num); - } - - public Operand visitOCT2HEX_fun(final OCT2HEX_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function OCT2HEX parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - if (bit_8.matcher(firstValue.TextValue()).find() == false) { - return Operand.Error("Function OCT2HEX parameter 1 is error!"); - } - final String num = Integer.toHexString(Integer.parseUnsignedInt(firstValue.TextValue(), 8)).toUpperCase(); - if (args.size() == 2) { - final Operand secondValue = args.get(1).ToNumber("Function OCT2HEX parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - if (num.length() > secondValue.IntValue()) { - return Operand.Create(padLeft(num, secondValue.IntValue(), '0')); - } - return Operand.Error("Function OCT2HEX parameter 2 is error!"); - } - return Operand.Create(num); - } - - public Operand visitDEC2BIN_fun(final DEC2BIN_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToNumber("Function DEC2BIN parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final String num = Integer.toBinaryString(firstValue.IntValue()); - // String num = System.Convert.toString(firstValue.IntValue(), 2); - if (args.size() == 2) { - final Operand secondValue = args.get(1).ToNumber("Function DEC2BIN parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - if (num.length() > secondValue.IntValue()) { - return Operand.Create(padLeft(num, secondValue.IntValue(), '0')); - } - return Operand.Error("Function DEC2BIN parameter 2 is error!"); - } - return Operand.Create(num); - } - - public Operand visitDEC2OCT_fun(final DEC2OCT_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToNumber("Function DEC2OCT parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final String num = Integer.toOctalString(firstValue.IntValue()); - if (args.size() == 2) { - final Operand secondValue = args.get(1).ToNumber("Function DEC2OCT parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - if (num.length() > secondValue.IntValue()) { - return Operand.Create(padLeft(num, secondValue.IntValue(), '0')); - } - return Operand.Error("Function DEC2OCT parameter 2 is error!"); - } - return Operand.Create(num); - } - - public Operand visitDEC2HEX_fun(final DEC2HEX_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToNumber("Function DEC2HEX parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final String num = Integer.toHexString(firstValue.IntValue()).toUpperCase(); - // String num = System.Convert.toString(firstValue.IntValue(), 16).ToUpper(); - if (args.size() == 2) { - final Operand secondValue = args.get(1).ToNumber("Function DEC2HEX parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - if (num.length() > secondValue.IntValue()) { - return Operand.Create(padLeft(num, secondValue.IntValue(), '0')); - } - return Operand.Error("Function DEC2HEX parameter 2 is error!"); - } - return Operand.Create(num); - } - - public Operand visitHEX2BIN_fun(final HEX2BIN_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function HEX2BIN parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - if (bit_16.matcher(firstValue.TextValue()).find() == false) { - return Operand.Error("Function HEX2BIN parameter 1 is error!"); - } - final String num = Integer.toBinaryString(Integer.parseUnsignedInt(firstValue.TextValue(), 16)); - if (args.size() == 2) { - final Operand secondValue = args.get(1).ToNumber("Function HEX2BIN parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - if (num.length() > secondValue.IntValue()) { - return Operand.Create(padLeft(num, secondValue.IntValue(), '0')); - } - return Operand.Error("Function HEX2BIN parameter 2 is error!"); - } - return Operand.Create(num); - } - - public Operand visitHEX2OCT_fun(final HEX2OCT_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function HEX2OCT parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - if (bit_16.matcher(firstValue.TextValue()).find() == false) { - return Operand.Error("Function HEX2OCT parameter 1 is error!"); - } - final String num = Integer.toOctalString(Integer.parseUnsignedInt(firstValue.TextValue(), 16)); - if (args.size() == 2) { - final Operand secondValue = args.get(1).ToNumber("Function HEX2OCT parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - if (num.length() > secondValue.IntValue()) { - return Operand.Create(padLeft(num, secondValue.IntValue(), '0')); - } - return Operand.Error("Function HEX2OCT parameter 2 is error!"); - } - return Operand.Create(num); - } - - public Operand visitHEX2DEC_fun(final HEX2DEC_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function HEX2DEC parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - if (bit_16.matcher(firstValue.TextValue()).find() == false) { - return Operand.Error("Function HEX2DEC parameter is error!"); - } - final int num = Integer.parseUnsignedInt(firstValue.TextValue(), 16); - // String num = Convert.ToInt32(firstValue.TextValue(), 16); - return Operand.Create(num); - } - - public Operand visitROUND_fun(final ROUND_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function ROUND parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - if (args.size() == 1) { - return Operand.Create(Math.round(firstValue.NumberValue().doubleValue())); - } - final Operand secondValue = args.get(1); - return Operand.Create(round(firstValue.NumberValue().doubleValue(), secondValue.IntValue())); - } - - public Operand visitROUNDDOWN_fun(final ROUNDDOWN_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function ROUNDDOWN parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - final Operand secondValue = args.get(1); - if (firstValue.NumberValue().compareTo(new BigDecimal(0)) == 0) { - return firstValue; - } - final double a = Math.pow(10, secondValue.IntValue()); - double b = firstValue.NumberValue().doubleValue(); - - b = ((double) (int) (b * a)) / a; - return Operand.Create(b); - } - - public Operand visitROUNDUP_fun(final ROUNDUP_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function ROUNDUP parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - final Operand secondValue = args.get(1); - if (firstValue.NumberValue().compareTo(new BigDecimal(0)) == 0) { - return firstValue; - } - final double a = Math.pow(10, secondValue.IntValue()); - final double b = firstValue.NumberValue().doubleValue(); - - final double t = (Math.ceil(Math.abs(b) * a)) / a; - if (b > 0) - return Operand.Create(t); - return Operand.Create(-t); - } - - public Operand visitCEILING_fun(final CEILING_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function CEILING parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - if (args.size() == 1) - return Operand.Create(Math.ceil(firstValue.NumberValue().doubleValue())); - - final Operand secondValue = args.get(1); - final double b = secondValue.NumberValue().doubleValue(); - if (b == 0) { - return Operand.Create(0); - } - if (b < 0) { - return Operand.Error("Function CEILING parameter 2 is error!"); - } - final double a = firstValue.NumberValue().doubleValue(); - final double d = Math.ceil(a / b) * b; - return Operand.Create(d); - } - - public Operand visitFLOOR_fun(final FLOOR_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function FLOOR parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - if (args.size() == 1) - return Operand.Create(Math.floor(firstValue.NumberValue().doubleValue())); - - final Operand secondValue = args.get(1); - final double b = secondValue.NumberValue().doubleValue(); - if (b >= 1) { - return Operand.Create(firstValue.IntValue()); - } - if (b <= 0) { - return Operand.Error("Function FLOOR parameter 2 is error!"); - } - final double a = firstValue.NumberValue().doubleValue(); - final double d = Math.floor(a / b) * b; - return Operand.Create(d); - } - - public Operand visitEVEN_fun(final EVEN_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function EVEN parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - double z = firstValue.NumberValue().doubleValue(); - if (z % 2 == 0) { - return firstValue; - } - z = Math.ceil(z); - if (z % 2 == 0) { - return Operand.Create(z); - } - z = z + 1; - return Operand.Create(z); - } - - public Operand visitODD_fun(final ODD_funContext context) { - - final Operand firstValue = context.expr().accept(this).ToNumber("Function ODD parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - double z = firstValue.NumberValue().doubleValue(); - if (z % 2 == 1) { - return firstValue; - } - z = Math.ceil(z); - if (z % 2 == 1) { - return Operand.Create(z); - } - z = z + 1; - return Operand.Create(z); - } - - public Operand visitMROUND_fun(final MROUND_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function MROUND parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - final Operand secondValue = args.get(1); - - final double a = secondValue.NumberValue().doubleValue(); - if (a <= 0) { - return Operand.Error("Function MROUND parameter 2 is error!"); - } - final double b = firstValue.NumberValue().doubleValue(); - final double r = round(b / a, 0) * a; - return Operand.Create(r); - } - - public Operand visitRAND_fun(final RAND_funContext context) { - final long tick = DateTime.now().getMillis(); - final Random rand = new Random((int) (tick & 0xffffffffL) | (int) (tick >> 32)); - return Operand.Create(rand.nextDouble()); - } - - public Operand visitRANDBETWEEN_fun(final RANDBETWEEN_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function RANDBETWEEN parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - final Operand secondValue = args.get(1); - - final long tick = DateTime.now().getMillis(); - final Random rand = new Random((int) (tick & 0xffffffffL) | (int) (tick >> 32)); - return Operand.Create( - rand.nextDouble() * (secondValue.NumberValue().doubleValue() - firstValue.NumberValue().doubleValue()) - + firstValue.NumberValue().doubleValue()); - } - - public Operand visitFACT_fun(final FACT_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function FACT parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final int z = firstValue.IntValue(); - if (z < 0) { - return Operand.Error("Function FACT parameter is error!"); - } - double d = 1; - for (int i = 1; i <= z; i++) { - d *= i; - } - return Operand.Create(d); - } - - public Operand visitFACTDOUBLE_fun(final FACTDOUBLE_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function FACTDOUBLE parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final int z = firstValue.IntValue(); - if (z < 0) { - return Operand.Error("Function FACTDOUBLE parameter is error!"); - } - double d = 1; - for (int i = z; i > 0; i -= 2) { - d *= i; - } - return Operand.Create(d); - } - - public Operand visitPOWER_fun(final POWER_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function POWER parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - final Operand secondValue = args.get(1); - - return Operand - .Create(Math.pow(firstValue.NumberValue().doubleValue(), secondValue.NumberValue().doubleValue())); - } - - public Operand visitEXP_fun(final EXP_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function EXP parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(Math.exp(firstValue.NumberValue().doubleValue())); - } - - public Operand visitLN_fun(final LN_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function LN parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(Math.log(firstValue.NumberValue().doubleValue())); - } - - public Operand visitLOG_fun(final LOG_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToNumber("Function LOG parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - if (args.size() > 1) { - return Operand - .Create(log(args.get(0).NumberValue().doubleValue(), args.get(1).NumberValue().doubleValue())); - } - return Operand.Create(Math.log10(args.get(0).NumberValue().doubleValue())); - } - - public Operand visitLOG10_fun(final LOG10_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function LOG10 parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(Math.log10(firstValue.NumberValue().doubleValue())); - } - - public Operand visitMULTINOMIAL_fun(final MULTINOMIAL_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function MULTINOMIAL parameter is error!"); - } - - int sum = 0; - int n = 1; - for (final BigDecimal a : list) { - n *= F_base_Factorial(a.intValue()); - sum += a.intValue(); - } - final int r = F_base_Factorial(sum) / n; - return Operand.Create(r); - } - - public Operand visitPRODUCT_fun(final PRODUCT_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function PRODUCT parameter is error!"); - } - - BigDecimal d = new BigDecimal(1); - for (final BigDecimal a : list) { - d = d.multiply(a); - } - return Operand.Create(d); - } - - public Operand visitSQRTPI_fun(final SQRTPI_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function SQRTPI parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(Math.sqrt(firstValue.NumberValue().doubleValue() * Math.PI)); - } - - public Operand visitSUMSQ_fun(final SUMSQ_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function SUMSQ parameter is error!"); - } - - BigDecimal d = new BigDecimal(0); - for (final BigDecimal a : list) { - d = d.add(a.multiply(a)); - } - return Operand.Create(d); - } - - private int F_base_Factorial(final int a) { - if (a == 0) { - return 1; - } - int r = 1; - for (int i = a; i > 0; i--) { - r *= i; - } - return r; - } - - public Operand visitASC_fun(final ASC_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function ASC parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(F_base_ToDBC(firstValue.TextValue())); - } - - public Operand visitJIS_fun(final JIS_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function JIS parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(F_base_ToSBC(firstValue.TextValue())); - } - - public Operand visitCHAR_fun(final CHAR_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function CHAR parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final char c = (char) firstValue.NumberValue().intValue(); - return Operand.Create(((Character) c).toString()); - } - - public Operand visitCLEAN_fun(final CLEAN_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function CLEAN parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - String t = firstValue.TextValue(); - t = clearRegex.matcher(t).replaceAll(""); - return Operand.Create(t); - } - - public Operand visitCODE_fun(final CODE_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function CODE parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final String t = firstValue.TextValue(); - if (t.length() == 0) { - return Operand.Error("Function CODE parameter is error!"); - } - return Operand.Create((double) (int) t.charAt(0)); - } - - public Operand visitCONCATENATE_fun(final CONCATENATE_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function CONCATENATE parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - final StringBuilder sb = new StringBuilder(); - for (final Operand item : args) { - sb.append(item.TextValue()); - } - return Operand.Create(sb.toString()); - } - - public Operand visitEXACT_fun(final EXACT_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToText("Function EXACT parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0); - final Operand secondValue = args.get(1); - - return Operand.Create(firstValue.TextValue().equals(secondValue.TextValue())); - } - - public Operand visitFIND_fun(final FIND_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function FIND parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToText("Function FIND parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - if (args.size() == 2) { - final int p = secondValue.TextValue().indexOf(firstValue.TextValue()) + excelIndex; - return Operand.Create(p); - } - final Operand count = args.get(2).ToNumber("Function FIND parameter 3 is error!"); - if (count.IsError()) { - return count; - } - final int p2 = secondValue.TextValue().indexOf(firstValue.TextValue(), count.IntValue()) + excelIndex; - return Operand.Create(p2); - } - - public Operand visitLEFT_fun(final LEFT_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function LEFT parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - if (args.size() == 1) { - return Operand.Create(((Character) firstValue.TextValue().charAt(0)).toString()); - } - final Operand secondValue = args.get(1).ToNumber("Function LEFT parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - return Operand.Create(firstValue.TextValue().substring(0, secondValue.IntValue())); - } - - public Operand visitLEN_fun(final LEN_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function LEN parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(firstValue.TextValue().length()); - } - - public Operand visitLOWER_fun(final LOWER_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function LOWER/TOLOWER parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(firstValue.TextValue().toLowerCase()); - } - - public Operand visitMID_fun(final MID_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function MID parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToNumber("Function MID parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - final Operand thirdValue = args.get(2).ToNumber("Function MID parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - return Operand.Create(firstValue.TextValue().substring(secondValue.IntValue() - excelIndex, - secondValue.IntValue() - excelIndex + thirdValue.IntValue())); - } - - public Operand visitPROPER_fun(final PROPER_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function PROPER parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final String text = firstValue.TextValue(); - final StringBuilder sb = new StringBuilder(text); - boolean isFirst = true; - for (int i = 0; i < text.length(); i++) { - final char t = text.charAt(i); - if (t == ' ' || t == '\r' || t == '\n' || t == '\t' || t == '.') { - isFirst = true; - } else if (isFirst) { - sb.setCharAt(i, Character.toUpperCase(t)); - isFirst = false; - } - } - return Operand.Create(sb.toString()); - } - - public Operand visitREPLACE_fun(final REPLACE_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function REPLACE parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final String oldtext = firstValue.TextValue(); - if (args.size() == 3) { - final Operand secondValue2 = args.get(1).ToText("Function REPLACE parameter 2 is error!"); - final Operand thirdValue2 = args.get(2).ToText("Function REPLACE parameter 3 is error!"); - final String old = secondValue2.TextValue(); - final String newstr = thirdValue2.TextValue(); - return Operand.Create(oldtext.replace(old, newstr)); - } - - final Operand secondValue = args.get(1).ToNumber("Function REPLACE parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - final Operand thirdValue = args.get(2).ToNumber("Function REPLACE parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - final Operand fourthValue = args.get(3).ToText("Function REPLACE parameter 3 is error!"); - if (fourthValue.IsError()) { - return fourthValue; - } - - final int start = secondValue.IntValue() - excelIndex; - final int length = thirdValue.IntValue(); - final String newtext = fourthValue.TextValue(); - - final StringBuilder sb = new StringBuilder(); - for (int i = 0; i < oldtext.length(); i++) { - if (i < start) { - sb.append(oldtext.charAt(i)); - } else if (i == start) { - sb.append(newtext); - } else if (i >= start + length) { - sb.append(oldtext.charAt(i)); - } - } - return Operand.Create(sb.toString()); - } - - public Operand visitREPT_fun(final REPT_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function REPT parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToNumber("Function REPT parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - final String newtext = firstValue.TextValue(); - final int length = secondValue.IntValue(); - final StringBuilder sb = new StringBuilder(); - for (int i = 0; i < length; i++) { - sb.append(newtext); - } - return Operand.Create(sb.toString()); - } - - public Operand visitRIGHT_fun(final RIGHT_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function RIGHT parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - if (args.size() == 1) { - return Operand.Create( - ((Character) firstValue.TextValue().charAt(firstValue.TextValue().length() - 1)).toString()); - } - final Operand secondValue = args.get(1).ToNumber("Function RIGHT parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - return Operand - .Create(firstValue.TextValue().substring(firstValue.TextValue().length() - secondValue.IntValue())); - } - - public Operand visitRMB_fun(final RMB_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function RMB parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(F_base_ToChineseRMB(firstValue.NumberValue())); - } - - public Operand visitSEARCH_fun(final SEARCH_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function SEARCH parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToText("Function SEARCH parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - if (args.size() == 2) { - final int p = secondValue.TextValue().toLowerCase().indexOf(firstValue.TextValue().toLowerCase()) - + excelIndex; - return Operand.Create(p); - } - final Operand thirdValue = args.get(2).ToNumber("Function SEARCH parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - final int p2 = secondValue.TextValue().toLowerCase().indexOf(firstValue.TextValue().toLowerCase(), - thirdValue.IntValue()) + excelIndex; - return Operand.Create(p2); - } - - public Operand visitSUBSTITUTE_fun(final SUBSTITUTE_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - final Operand firstValue = args.get(0).ToText("Function SUBSTITUTE parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToText("Function SUBSTITUTE parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - final Operand thirdValue = args.get(2).ToText("Function SUBSTITUTE parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - if (args.size() == 3) { - return Operand.Create(firstValue.TextValue().replace(secondValue.TextValue(), thirdValue.TextValue())); - } - final Operand fourthValue = args.get(3).ToNumber("Function SUBSTITUTE parameter 4 is error!"); - if (fourthValue.IsError()) { - return fourthValue; - } - - final String text = firstValue.TextValue(); - final String oldtext = secondValue.TextValue(); - final String newtext = thirdValue.TextValue(); - final int index = fourthValue.IntValue(); - - int index2 = 0; - final StringBuilder sb = new StringBuilder(); - for (int i = 0; i < text.length(); i++) { - boolean b = true; - for (int j = 0; j < oldtext.length(); j++) { - final char t = text.charAt(i + j); - final char t2 = oldtext.charAt(j); - if (t != t2) { - b = false; - break; - } - } - if (b) { - index2++; - } - if (b && index2 == index) { - sb.append(newtext); - i += oldtext.length() - 1; - } else { - sb.append(text.charAt(i)); - } - } - return Operand.Create(sb.toString()); - } - - public Operand visitT_fun(final T_funContext context) { - final Operand firstValue = context.expr().accept(this); - if (firstValue.Type() == OperandType.TEXT) { - return firstValue; - } - return Operand.Create(""); - } - - public Operand visitTEXT_fun(final TEXT_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToText("Function TEXT parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - if (firstValue.Type() == OperandType.TEXT) { - return firstValue; - } else if (firstValue.Type() == OperandType.BOOLEAN) { - return Operand.Create(firstValue.BooleanValue() ? "TRUE" : "FALSE"); - } else if (firstValue.Type() == OperandType.NUMBER) { - final DecimalFormat myFormatter = new DecimalFormat(secondValue.TextValue()); - return Operand.Create(myFormatter.format(firstValue.NumberValue())); - } else if (firstValue.Type() == OperandType.DATE) { - return Operand.Create(firstValue.DateValue().toString(secondValue.TextValue())); - } - firstValue = firstValue.ToText("Function TEXT parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(firstValue.TextValue()); - } - - public Operand visitTRIM_fun(final TRIM_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function TRIM parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(firstValue.TextValue().trim()); - } - - public Operand visitUPPER_fun(final UPPER_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function UPPER/TOUPPER parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - return Operand.Create(firstValue.TextValue().toUpperCase()); - } - - public Operand visitVALUE_fun(final VALUE_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function VALUE parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - try { - final BigDecimal d = new BigDecimal(firstValue.TextValue()); - return Operand.Create(d); - } catch (final Exception e) { - } - // if (double.TryParse(firstValue.TextValue(), NumberStyles.Any, cultureInfo, - // out double d)) { - // return Operand.Create(d); - // } - return Operand.Error("Function VALUE parameter is error!"); - } - - private String F_base_ToSBC(final String input) { - final StringBuilder sb = new StringBuilder(input); - for (int i = 0; i < input.length(); i++) { - final char c = input.charAt(i);// [i]; - if (c == ' ') { - sb.setCharAt(i, (char) 12288); - // sb[i] = (char) 12288; - } else if (c < 127) { - sb.setCharAt(i, (char) (c + 65248)); - // sb[i] = (char) (c + 65248); - } - } - return sb.toString(); - } - - private String F_base_ToDBC(final String input) { - final StringBuilder sb = new StringBuilder(input); - for (int i = 0; i < input.length(); i++) { - final char c = input.charAt(i);// [i]; - if (c == 12288) { - sb.setCharAt(i, (char) 32); - } else if (c > 65280 && c < 65375) { - sb.setCharAt(i, (char) (c - 65248)); - } - } - return sb.toString(); - } - - static final String[] CN_UPPER_NUMBER = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; - static final String[] CN_UPPER_MONETRAY_UNIT = { "分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", - "仟", "兆", "拾", "佰", "仟" }; - static final String CN_FULL = "整"; - static final String CN_NEGATIVE = "负"; - static final int MONEY_PRECISION = 2; - static final String CN_ZEOR_FULL = "零元" + CN_FULL; - - // @SuppressWarnings("deprecation") - private String F_base_ToChineseRMB(final BigDecimal numberOfMoney) { - StringBuffer sb = new StringBuffer(); - int signum = numberOfMoney.signum(); - if (signum == 0) { - return CN_ZEOR_FULL; - } - long number = numberOfMoney.movePointRight(MONEY_PRECISION).setScale(0, RoundingMode.HALF_UP).abs().longValue(); - long scale = number % 100; - int numUnit; - int numIndex = 0; - boolean getZero = false; - if (!(scale > 0)) { - numIndex = 2; - number = number / 100; - getZero = true; - } - if ((scale > 0) && (!(scale % 10 > 0))) { - numIndex = 1; - number = number / 10; - getZero = true; - } - int zeroSize = 0; - while (true) { - if (number <= 0) { - break; - } - // 每次获取到最后一个数 - numUnit = (int) (number % 10); - if (numUnit > 0) { - if ((numIndex == 9) && (zeroSize >= 3)) { - sb.insert(0, CN_UPPER_MONETRAY_UNIT[6]); - } - if ((numIndex == 13) && (zeroSize >= 3)) { - sb.insert(0, CN_UPPER_MONETRAY_UNIT[10]); - } - sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]); - sb.insert(0, CN_UPPER_NUMBER[numUnit]); - getZero = false; - zeroSize = 0; - } else { - ++zeroSize; - if (!(getZero)) { - sb.insert(0, CN_UPPER_NUMBER[numUnit]); - } - if (numIndex == 2) { - if (number > 0) { - sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]); - } - } else if (((numIndex - 2) % 4 == 0) && (number % 1000 > 0)) { - sb.insert(0, CN_UPPER_MONETRAY_UNIT[numIndex]); - } - getZero = true; - } - // 让number每次都去掉最后一个数 - number = number / 10; - ++numIndex; - } - // 如果signum == -1,则说明输入的数字为负数,就在最前面追加特殊字符:负 - if (signum == -1) { - sb.insert(0, CN_NEGATIVE); - } - // 输入的数字小数点后两位为"00"的情况,则要在最后追加特殊字符:整 - if (!(scale > 0)) { - sb.append(CN_FULL); - } - return sb.toString(); - } - - public Operand visitDATEVALUE_fun(final DATEVALUE_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - if (args.get(0).Type() == OperandType.DATE) { - return args.get(0); - } - int type = 0; - if (args.size() == 2) { - Operand secondValue = args.get(1).ToNumber("Function DATEVALUE parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - type = secondValue.IntValue(); - } - if (type == 0) { - if (args.get(0).Type() == OperandType.TEXT) { - MyDate date = MyDate.parse(args.get(0).TextValue()); - if (date != null) { - return Operand.Create(date); - } - } - Operand firstValue = args.get(0).ToNumber("Function DATEVALUE parameter 1 is error!"); - if (firstValue.LongValue() <= 2958465L) { // 9999-12-31 日时间在excel的数字为 2958465 - return firstValue.ToDate("Function DATEVALUE parameter 1 is error!"); - } - if (firstValue.LongValue() <= 253402232399L) { // 9999-12-31 12:59:59 日时间 转 时间截 为 253402232399L, - DateTime time = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeZone.UTC).plus(firstValue.LongValue() * 1000); - if (useLocalTime) { - return Operand.Create(time.toDateTime(DateTimeZone.getDefault())); - } - return Operand.Create(time); - } - // 注:时间截 253402232399 ms 转时间 为 1978-01-12 05:30:32 - DateTime time2 = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeZone.UTC).plus(firstValue.LongValue()); - if (useLocalTime) { - return Operand.Create(time2.toDateTime(DateTimeZone.getDefault())); - } - return Operand.Create(time2); - } else if (type == 1) { - Operand firstValue = args.get(0).ToText("Function DATEVALUE parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - MyDate date = MyDate.parse(firstValue.TextValue()); - if (date != null) { - return Operand.Create(date); - } - } else if (type == 2) { - return args.get(0).ToNumber("Function DATEVALUE parameter is error!").ToDate(""); - } else if (type == 3) { - Operand firstValue = args.get(0).ToNumber("Function DATEVALUE parameter 1 is error!"); - DateTime time = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeZone.UTC).plus(firstValue.LongValue()); - if (useLocalTime) { - return Operand.Create(time.toDateTime(DateTimeZone.getDefault())); - } - return Operand.Create(time); - } else if (type == 4) { - Operand firstValue = args.get(0).ToNumber("Function DATEVALUE parameter 1 is error!"); - DateTime time = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeZone.UTC).plus(firstValue.LongValue() * 1000); - if (useLocalTime) { - return Operand.Create(time.toDateTime(DateTimeZone.getDefault())); - } - return Operand.Create(time); - } - return Operand.Error("Function DATEVALUE parameter is error!"); - } - - @Override - public Operand visitTIMESTAMP_fun(TIMESTAMP_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - int type = 0; // 毫秒 - if (args.size() == 2) { - Operand secondValue = args.get(1).ToNumber("Function TIMESTAMP parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - type = secondValue.IntValue(); - } - DateTime firstValue; - if (useLocalTime) { - firstValue = args.get(0).ToDate("Function TIMESTAMP parameter 1 is error!").DateValue() - .ToDateTime(DateTimeZone.getDefault()); - } else { - firstValue = args.get(0).ToDate("Function TIMESTAMP parameter 1 is error!").DateValue() - .ToDateTime(DateTimeZone.UTC); - } - if (type == 0) { - firstValue.getMillis(); - return Operand.Create(firstValue.getMillis()); - } else if (type == 1) { - return Operand.Create(firstValue.getMillis() / 1000); - } - return Operand.Error("Function TIMESTAMP parameter is error!"); - } - - public Operand visitTIMEVALUE_fun(final TIMEVALUE_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function TIMEVALUE parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - MyDate date = MyDate.parse(firstValue.TextValue()); - if (date != null) { - return Operand.Create(date); - } - return Operand.Error("Function TIMEVALUE parameter is error!"); - } - - public Operand visitDATE_fun(final DATE_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function DATE parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - MyDate d; - if (args.size() == 3) { - d = new MyDate(args.get(0).IntValue(), args.get(1).IntValue(), args.get(2).IntValue(), 0, 0, 0); - } else if (args.size() == 4) { - d = new MyDate(args.get(0).IntValue(), args.get(1).IntValue(), args.get(2).IntValue(), - args.get(3).IntValue(), 0, 0); - } else if (args.size() == 5) { - d = new MyDate(args.get(0).IntValue(), args.get(1).IntValue(), args.get(2).IntValue(), - args.get(3).IntValue(), args.get(4).IntValue(), 0); - } else { - d = new MyDate(args.get(0).IntValue(), args.get(1).IntValue(), args.get(2).IntValue(), - args.get(3).IntValue(), args.get(4).IntValue(), args.get(5).IntValue()); - } - return Operand.Create(d); - } - - public Operand visitTIME_fun(final TIME_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function TIME parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - MyDate d; - if (args.size() == 3) { - d = new MyDate(0, 0, 0, args.get(0).IntValue(), args.get(1).IntValue(), args.get(2).IntValue()); - } else { - d = new MyDate(0, 0, 0, args.get(0).IntValue(), args.get(1).IntValue(), 0); - } - return Operand.Create(d); - } - - public Operand visitNOW_fun(final NOW_funContext context) { - return Operand.Create(new MyDate(DateTime.now())); - } - - public Operand visitTODAY_fun(final TODAY_funContext context) { - final DateTime dt = DateTime.now(); - return Operand.Create(new MyDate(dt.getYear(), dt.getMonthOfYear(), dt.getDayOfMonth(), 0, 0, 0)); - } - - @Override - public Operand visitERROR_fun(ERROR_funContext context) { - if (context.expr() == null) { - return Operand.Error(""); - } - Operand args1 = this.visit(context.expr()); - if (args1.Type() != OperandType.TEXT) { - args1 = args1.ToText(""); - if (args1.IsError()) - return args1; - } - return Operand.Error(args1.TextValue()); - } - - public Operand visitYEAR_fun(final YEAR_funContext context) { - final Operand firstValue = context.expr().accept(this).ToDate("Function YEAR parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - if (firstValue.DateValue().Year == null) { - return Operand.Error("Function YEAR is error!"); - } - return Operand.Create(firstValue.DateValue().Year); - } - - public Operand visitMONTH_fun(final MONTH_funContext context) { - final Operand firstValue = context.expr().accept(this).ToDate("Function MONTH parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - if (firstValue.DateValue().Month == null) { - return Operand.Error("Function MONTH is error!"); - } - return Operand.Create(firstValue.DateValue().Month); - } - - public Operand visitDAY_fun(final DAY_funContext context) { - final Operand firstValue = context.expr().accept(this).ToDate("Function DAY parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - if (firstValue.DateValue().Day == null) { - return Operand.Error("Function DAY is error!"); - } - return Operand.Create(firstValue.DateValue().Day); - } - - public Operand visitHOUR_fun(final HOUR_funContext context) { - final Operand firstValue = context.expr().accept(this).ToDate("Function HOUR parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(firstValue.DateValue().Hour); - } - - public Operand visitMINUTE_fun(final MINUTE_funContext context) { - final Operand firstValue = context.expr().accept(this).ToDate("Function MINUTE parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(firstValue.DateValue().Minute); - } - - public Operand visitSECOND_fun(final SECOND_funContext context) { - final Operand firstValue = context.expr().accept(this).ToDate("Function SECOND parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(firstValue.DateValue().Second); - } - - public Operand visitWEEKDAY_fun(final WEEKDAY_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToDate("Function WEEKDAY parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - int type = 1; - if (args.size() == 2) { - final Operand secondValue = args.get(1).ToNumber("Function WEEKDAY parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - type = secondValue.IntValue(); - } - - final int t = firstValue.DateValue().DayOfWeek(); - if (type == 1) { - if (t == 7) { - return Operand.Create(1); - } - return Operand.Create((double) (t + 1)); - } else if (type == 2) { - if (t == 0) - return Operand.Create(7d); - return Operand.Create((double) t); - } - if (t == 0) { - return Operand.Create(6d); - } - return Operand.Create((double) (t - 1)); - } - - public Operand visitDATEDIF_fun(final DATEDIF_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToDate("Function DATEDIF parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToDate("Function DATEDIF parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - final Operand thirdValue = args.get(2).ToText("Function DATEDIF parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - - final MyDate startDate = firstValue.DateValue(); - final MyDate endDate = secondValue.DateValue(); - final String t = thirdValue.TextValue().toLowerCase(); - - if (CharUtil.Equals(t, "y")) { - boolean b = false; - if (startDate.Month < endDate.Month) { - b = true; - } else if (startDate.Month.equals(endDate.Month)) { - if (startDate.Day <= endDate.Day) - b = true; - } - if (b) { - return Operand.Create((endDate.Year - startDate.Year)); - } else { - return Operand.Create((endDate.Year - startDate.Year - 1)); - } - } else if (CharUtil.Equals(t, "m")) { - boolean b = startDate.Day <= endDate.Day; - if (b) { - return Operand.Create((endDate.Year * 12 + endDate.Month - startDate.Year * 12 - startDate.Month)); - } else { - return Operand.Create((endDate.Year * 12 + endDate.Month - startDate.Year * 12 - startDate.Month - 1)); - } - } else if (CharUtil.Equals(t, "d")) { - return Operand.Create((endDate.ToNumber().subtract(startDate.ToNumber())).intValue()); - } else if (CharUtil.Equals(t, "yd")) { - int day = endDate.DayOfYear() - startDate.DayOfYear(); - if (endDate.Year > startDate.Year && day < 0) { - final int days = new DateTime(startDate.Year, 12, 31, 0, 0, 0, DateTimeZone.UTC).getDayOfYear(); - day = days + day; - } - return Operand.Create((day)); - } else if (CharUtil.Equals(t, "md")) { - int mo = endDate.Day - startDate.Day; - if (mo < 0) { - final int days; - if (startDate.Month == 12) { - days = new DateTime(startDate.Year + 1, 1, 1, 0, 0, DateTimeZone.UTC).plusDays(-1) - .dayOfMonth().get(); - } else { - days = new DateTime(startDate.Year, startDate.Month + 1, 1, 0, 0, DateTimeZone.UTC) - .plusDays(-1).dayOfMonth().get(); - } - mo += days; - } - return Operand.Create((mo)); - } else if (CharUtil.Equals(t, "ym")) { - int mo = endDate.Month - startDate.Month; - if (endDate.Day < startDate.Day) - mo = mo - 1; - if (mo < 0) - mo += 12; - return Operand.Create((mo)); - } - return Operand.Error("Function DATEDIF parameter 3 is error!"); - } - - public Operand visitDAYS360_fun(final DAYS360_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToDate("Function DAYS360 parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToDate("Function DAYS360 parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - final MyDate startDate = firstValue.DateValue(); - final MyDate endDate = secondValue.DateValue(); - - boolean method = false; - if (args.size() == 3) { - final Operand thirdValue = args.get(2).ToDate("Function DAYS360 parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - method = thirdValue.BooleanValue(); - } - int days = endDate.Year * 360 + (endDate.Month - 1) * 30 - startDate.Year * 360 - (startDate.Month - 1) * 30; - if (method) { - if (endDate.Day == 31) - days += 30; - if (startDate.Day == 31) - days -= 30; - } else { - if (startDate.Month == 12) { - if (startDate.Day == new DateTime(startDate.Year + 1, 1, 1, 0, 0, 0, DateTimeZone.UTC).plusDays(-1) - .dayOfMonth().get()) { - days -= 30; - } else { - days -= startDate.Day; - } - } else { - if (startDate.Day == new DateTime(startDate.Year, startDate.Month + 1, 1, 0, 0, 0, DateTimeZone.UTC) - .plusDays(-1).dayOfMonth().get()) { - days -= 30; - } else { - days -= startDate.Day; - } - } - if (endDate.Month == 12) { - if (endDate.Day == new DateTime(endDate.Year + 1, 1, 1, 0, 0, 0, DateTimeZone.UTC).plusDays(-1) - .dayOfMonth().get()) { - if (startDate.Day < 30) { - days += 31; - } else { - days += 30; - } - } else { - days += endDate.Day; - } - } else { - if (endDate.Day == new DateTime(endDate.Year, endDate.Month + 1, 1, 0, 0, 0, DateTimeZone.UTC) - .plusDays(-1).dayOfMonth().get()) { - if (startDate.Day < 30) { - days += 31; - } else { - days += 30; - } - } else { - days += endDate.Day; - } - } - } - return Operand.Create(days); - } - - public Operand visitEDATE_fun(final EDATE_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToDate("Function EDATE parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToNumber("Function EDATE parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - return Operand.Create(firstValue.DateValue().AddMonths(secondValue.IntValue())); - } - - public Operand visitEOMONTH_fun(final EOMONTH_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToDate("Function EOMONTH parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToNumber("Function EOMONTH parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - final MyDate dt = firstValue.DateValue().AddMonths(secondValue.IntValue() + 1); - final DateTime dt2 = new DateTime(dt.Year, dt.Month, 1, 0, 0, 0, DateTimeZone.UTC).plusDays(-1); - return Operand.Create(dt2); - } - - public Operand visitNETWORKDAYS_fun(final NETWORKDAYS_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToDate("Function NETWORKDAYS parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - DateTime startDate = args.get(0).DateValue().ToDateTime(); - final DateTime endDate = args.get(1).DateValue().ToDateTime(); - - final List list = new ArrayList(); - for (int i = 2; i < args.size(); i++) { - list.add(args.get(i).DateValue().ToDateTime()); - } - - int days = 0; - while (startDate.isBefore(endDate) || startDate.isEqual(endDate)) { - if (startDate.dayOfWeek().get() != DateTimeConstants.SUNDAY - && startDate.dayOfWeek().get() != DateTimeConstants.SATURDAY) { - if (list.contains(startDate) == false) { - days++; - } - } - startDate = startDate.plusDays(1); - } - return Operand.Create(days); - } - - public Operand visitWORKDAY_fun(final WORKDAY_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToDate("Function WORKDAY parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToNumber("Function WORKDAY parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - DateTime startDate = firstValue.DateValue().ToDateTime(); - int days = secondValue.IntValue(); - final List list = new ArrayList(); - for (int i = 2; i < args.size(); i++) { - args.set(i, args.get(i).ToDate("Function WORKDAY parameter {i + 1} is error!")); - if (args.get(i).IsError()) { - return args.get(i); - } - list.add(args.get(i).DateValue().ToDateTime()); - } - while (days > 0) { - startDate = startDate.plusDays(1); - if (startDate.dayOfWeek().get() == DateTimeConstants.SATURDAY) - continue; - if (startDate.dayOfWeek().get() == DateTimeConstants.SUNDAY) - continue; - if (list.contains(startDate)) - continue; - days--; - } - return Operand.Create(startDate); - } - - public Operand visitWEEKNUM_fun(final WEEKNUM_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToDate("Function WEEKNUM parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final DateTime startDate = firstValue.DateValue().ToDateTime(); - - int days = startDate.dayOfYear().get() - + new DateTime(startDate.getYear(), 1, 1, 0, 0, 0, DateTimeZone.UTC).dayOfWeek().get(); - if (args.size() == 2) { - final Operand secondValue = args.get(1).ToNumber("Function WEEKNUM parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - if (secondValue.IntValue() == 2) { - days--; - } - } - - final double week = Math.ceil(days / 7.0); - return Operand.Create(week); - } - - @Override - public Operand visitADDYEARS_fun(ADDYEARS_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0).ToDate("Function AddYears parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - Operand secondValue = args.get(1).ToNumber("Function AddYears parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - MyDate date = firstValue.DateValue().AddYears(secondValue.IntValue()); - return Operand.Create(date); - } - - @Override - public Operand visitADDMONTHS_fun(ADDMONTHS_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0).ToDate("Function AddMonths parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - Operand secondValue = args.get(1).ToNumber("Function AddMonths parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - MyDate date = firstValue.DateValue().AddMonths(secondValue.IntValue()); - return Operand.Create(date); - } - - @Override - public Operand visitADDDAYS_fun(ADDDAYS_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0).ToDate("Function AddDays parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - Operand secondValue = args.get(1).ToNumber("Function AddDays parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - MyDate date = firstValue.DateValue().AddDays(secondValue.IntValue()); - return Operand.Create(date); - } - - @Override - public Operand visitADDHOURS_fun(ADDHOURS_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0).ToDate("Function AddHours parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - Operand secondValue = args.get(1).ToNumber("Function AddHours parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - MyDate date = firstValue.DateValue().AddHours(secondValue.IntValue()); - return Operand.Create(date); - } - - @Override - public Operand visitADDMINUTES_fun(ADDMINUTES_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0).ToDate("Function AddMinutes parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - Operand secondValue = args.get(1).ToNumber("Function AddMinutes parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - MyDate date = firstValue.DateValue().AddMinutes(secondValue.IntValue()); - return Operand.Create(date); - } - - @Override - public Operand visitADDSECONDS_fun(ADDSECONDS_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0).ToDate("Function AddSeconds parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - Operand secondValue = args.get(1).ToNumber("Function AddSeconds parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - MyDate date = firstValue.DateValue().AddSeconds(secondValue.IntValue()); - return Operand.Create(date); - } - - public Operand visitMAX_fun(final MAX_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function MAX parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function MAX parameter error!"); - } - return Operand.Create(Max(list)); - } - - public Operand visitMEDIAN_fun(final MEDIAN_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function MEDIAN parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function MEDIAN parameter error!"); - } - - list = ShellSort(list); - // list = list.OrderBy(q => q).ToList(); - return Operand.Create(list.get(list.size() / 2)); - } - - public Operand visitMIN_fun(final MIN_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function MIN parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function MIN parameter error!"); - } - - return Operand.Create(Min(list)); - } - - public Operand visitQUARTILE_fun(final QUARTILE_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToArray("Function QUARTILE parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToNumber("Function QUARTILE parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_2(firstValue, list); - if (o == false) { - return Operand.Error("Function QUARTILE parameter 1 error!"); - } - - final int quant = secondValue.IntValue(); - if (quant < 0 || quant > 4) { - return Operand.Error("Function QUARTILE parameter 2 is error!"); - } - final List list2 = new ArrayList(); - for (BigDecimal item : list) { - list2.add(item.doubleValue()); - } - try { - return Operand.Create(ExcelFunctions.Quartile(list2, quant)); - } catch (final Exception e) { - } - return Operand.Error("Function QUARTILE is error!"); - } - - public Operand visitMODE_fun(final MODE_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function MODE parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function MODE parameter error!"); - } - - final Map dict = new HashMap(); - for (final BigDecimal item : list) { - if (dict.containsKey(item)) { - dict.put(item, dict.get(item) + 1); - } else { - dict.put(item, 1); - } - } - int maxCount = 0; - BigDecimal maxValue = new BigDecimal(0); - for (final BigDecimal d : dict.keySet()) { - final int count = dict.get(d); - if (count > maxCount) { - maxCount = count; - maxValue = d; - } - } - return Operand.Create(maxValue); - // return Operand.Create(dict.OrderByDescending(q => q.Value).First().Key); - } - - public Operand visitLARGE_fun(final LARGE_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToArray("Function LARGE parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToNumber("Function LARGE parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function LARGE parameter error!"); - } - - list = ShellSort(list); - // list = list.OrderByDescending(q => q).ToList(); - // int quant = secondValue.IntValue(); - return Operand.Create(list.get(list.size() - 1 - (secondValue.IntValue() - excelIndex))); - } - - public Operand visitSMALL_fun(final SMALL_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToArray("Function SMALL parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToNumber("Function SMALL parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function SMALL parameter error!"); - } - - list = ShellSort(list); - // list = list.OrderBy(q => q).ToList(); - // int quant = secondValue.IntValue(); - return Operand.Create(list.get(secondValue.IntValue() - excelIndex)); - // return Operand.Create(list[secondValue.IntValue() - excelIndex]); - } - - public Operand visitPERCENTILE_fun(final PERCENTILE_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToArray("Function PERCENTILE parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToNumber("Function PERCENTILE parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_2(firstValue, list); - if (o == false) { - return Operand.Error("Function PERCENTILE parameter error!"); - } - - final double k = secondValue.NumberValue().doubleValue(); - final List list2 = new ArrayList(); - for (BigDecimal item : list) { - list2.add(item.doubleValue()); - } - try { - return Operand.Create(ExcelFunctions.Percentile(list2, k)); - } catch (final Exception e) { - } - return Operand.Error("Function PERCENTILE parameter error!"); - } - - public Operand visitPERCENTRANK_fun(final PERCENTRANK_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToArray("Function PERCENTRANK parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToNumber("Function PERCENTRANK parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_2(firstValue, list); - if (o == false) { - return Operand.Error("Function PERCENTRANK parameter error!"); - } - - final double k = secondValue.NumberValue().doubleValue(); - final List list2 = new ArrayList(); - for (BigDecimal item : list) { - list2.add(item.doubleValue()); - } - final double v = ExcelFunctions.PercentRank(list2, k); - int d = 3; - if (args.size() == 3) { - final Operand thirdValue = args.get(2).ToNumber("Function PERCENTRANK parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - d = thirdValue.IntValue(); - } - return Operand.Create(round(v, d)); - } - - public Operand visitAVERAGE_fun(final AVERAGE_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function AVERAGE parameter error!"); - } - - return Operand.Create(Average(list)); - } - - public Operand visitAVERAGEIF_fun(final AVERAGEIF_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_2(args.get(0), list); - if (o == false) { - return Operand.Error("Function AVERAGE parameter 1 error!"); - } - - List sumdbs; - if (args.size() == 3) { - sumdbs = new ArrayList(); - final boolean o2 = F_base_GetList_2(args.get(2), sumdbs); - if (o2 == false) { - return Operand.Error("Function AVERAGE parameter 3 error!"); - } - } else { - sumdbs = list; - } - - BigDecimal sum; - int count; - if (args.get(1).Type() == OperandType.NUMBER) { - count = F_base_countif(list, args.get(1).NumberValue()); - sum = args.get(1).NumberValue().multiply(new BigDecimal(count)); - } else { - try { - final BigDecimal d = new BigDecimal(args.get(1).TextValue().trim()); - count = F_base_countif(list, d); - sum = F_base_sumif(list, "=" + args.get(1).TextValue().trim(), sumdbs); - } catch (final Exception e) { - final String sunif = args.get(1).TextValue().trim(); - if (sumifRegex.matcher(sunif).find()) { - count = F_base_countif(list, sunif); - sum = F_base_sumif(list, sunif, sumdbs); - } else { - return Operand.Error("Function AVERAGE parameter 2 error!"); - } - } - } - return Operand.Create(sum.divide(new BigDecimal(count), MathContext.DECIMAL32)); - } - - @Override - public Operand visitPARAM_fun(PARAM_funContext context) { - List exprs = context.expr(); - Operand args1 = this.visit(exprs.get(0)); - if (args1.Type() != OperandType.TEXT) { - args1 = args1.ToText(""); - if (args1.IsError()) - return args1; - } - final MyParameter myParameter = new MyParameter(); - myParameter.Context = mainContext; - myParameter.Name = args1.TextValue(); - Operand result = GetParameter.apply(myParameter); - if (result.IsError()) { - if (exprs.size() == 2) { - return this.visit(exprs.get(1)); - } - } - return result; - } - - public Operand visitGEOMEAN_fun(final GEOMEAN_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - if (args.size() == 1) - return args.get(0); - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function GEOMEAN parameter error!"); - } - - double sum = 1; - for (final BigDecimal db : list) { - sum *= db.doubleValue(); - } - return Operand.Create(Math.pow(sum, 1.0 / list.size())); - } - - public Operand visitHARMEAN_fun(final HARMEAN_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - if (args.size() == 1) - return args.get(0); - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function HARMEAN parameter error!"); - } - - double sum = 0; - for (final BigDecimal db : list) { - if (db.compareTo(new BigDecimal(0)) == 0) { - return Operand.Error("Function HARMEAN parameter error!"); - } - sum += 1 / db.doubleValue(); - } - return Operand.Create(list.size() / sum); - } - - public Operand visitCOUNT_fun(final COUNT_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function COUNT parameter error!"); - } - - return Operand.Create(list.size()); - } - - public Operand visitCOUNTIF_fun(final COUNTIF_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_2(args.get(0), list); - if (o == false) { - return Operand.Error("Function COUNTIF parameter error!"); - } - - int count; - if (args.get(1).Type() == OperandType.NUMBER) { - count = F_base_countif(list, args.get(1).NumberValue()); - } else { - try { - final BigDecimal d = new BigDecimal(args.get(1).TextValue().trim()); - count = F_base_countif(list, d); - } catch (final Exception e) { - final String sunif = args.get(1).TextValue().trim(); - if (sumifRegex.matcher(sunif).find()) { - count = F_base_countif(list, sunif); - } else { - return Operand.Error("Function COUNTIF parameter 2 error!"); - } - } - // if (double.TryParse(args.get(1).TextValue().trim(), NumberStyles.Any, - // cultureInfo, out double d)) { - // count = F_base_countif(list, d); - // } else { - // String sunif = args.get(1).TextValue().trim(); - // if (sumifRegex.matcher(sunif)) { - // count = F_base_countif(list, sunif); - // } else { - // return Operand.Error("Function COUNTIF parameter 2 error!"); - // } - // } - } - return Operand.Create(count); - } - - public Operand visitSUM_fun(final SUM_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - if (args.size() == 1) - return args.get(0); - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function SUM parameter error!"); - } - - final BigDecimal sum = Sum(list); - return Operand.Create(sum); - } - - public Operand visitSUMIF_fun(final SUMIF_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_2(args.get(0), list); - if (o == false) { - return Operand.Error("Function SUMIF parameter 1 error!"); - } - - List sumdbs; - if (args.size() == 3) { - sumdbs = new ArrayList(); - final boolean o2 = F_base_GetList_2(args.get(2), sumdbs); - if (o2 == false) { - return Operand.Error("Function SUMIF parameter 3 error!"); - } - } else { - sumdbs = list; - } - - BigDecimal sum; - if (args.get(1).Type() == OperandType.NUMBER) { - sum = args.get(1).NumberValue().multiply(new BigDecimal(F_base_countif(list, args.get(1).NumberValue()))); - } else { - if (Pattern.compile("^-?(\\d+)(\\.\\d+)?$").matcher(args.get(1).TextValue().trim()).find()) { - sum = F_base_sumif(list, "=" + args.get(1).TextValue().trim(), sumdbs); - } else { - final String sunif = args.get(1).TextValue().trim(); - if (sumifRegex.matcher(sunif).find()) { - sum = F_base_sumif(list, sunif, sumdbs); - } else { - return Operand.Error("Function SUMIF parameter 2 error!"); - } - } - // if (double.TryParse(args.get(1).TextValue().trim(), NumberStyles.Any, - // cultureInfo, out _)) { - // sum = F_base_sumif(list, "=" + args.get(1).TextValue().trim(), sumdbs); - // } else { - // String sunif = args.get(1).TextValue().trim(); - // if (sumifRegex.matcher(sunif)) { - // sum = F_base_sumif(list, sunif, sumdbs); - // } else { - // return Operand.Error("Function SUMIF parameter 2 error!"); - // } - // } - } - return Operand.Create(sum); - } - - public Operand visitAVEDEV_fun(final AVEDEV_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function AVEDEV parameter error!"); - } - - final double avg = Average(list).doubleValue(); - double sum = 0; - for (int i = 0; i < list.size(); i++) { - sum += Math.abs(list.get(i).doubleValue() - avg); - } - return Operand.Create(sum / list.size()); - } - - public Operand visitSTDEV_fun(final STDEV_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - if (args.size() == 1) { - return Operand.Error("Function STDEV parameter only one error!"); - } - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function STDEV parameter error!"); - } - - final double avg = Average(list).doubleValue(); - double sum = 0; - for (int i = 0; i < list.size(); i++) { - sum += (list.get(i).doubleValue() - avg) * (list.get(i).intValue() - avg); - } - return Operand.Create(Math.sqrt(sum / (list.size() - 1))); - } - - public Operand visitSTDEVP_fun(final STDEVP_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function STDEVP parameter error!"); - } - - double sum = 0; - final double avg = Average(list).doubleValue(); - - for (int i = 0; i < list.size(); i++) { - sum += (list.get(i).doubleValue() - avg) * (list.get(i).doubleValue() - avg); - } - return Operand.Create(Math.sqrt(sum / (list.size()))); - } - - public Operand visitDEVSQ_fun(final DEVSQ_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function DEVSQ parameter error!"); - } - - final double avg = Average(list).doubleValue(); - double sum = 0; - for (int i = 0; i < list.size(); i++) { - sum += (list.get(i).doubleValue() - avg) * (list.get(i).doubleValue() - avg); - } - return Operand.Create(sum); - } - - public Operand visitVAR_fun(final VAR_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - if (args.size() == 1) { - return Operand.Error("Function VAR parameter only one error!"); - } - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function VAR parameter error!"); - } - - double sum = 0; - double sum2 = 0; - for (int i = 0; i < list.size(); i++) { - sum += list.get(i).doubleValue() * list.get(i).doubleValue(); - sum2 += list.get(i).doubleValue(); - } - return Operand.Create((list.size() * sum - sum2 * sum2) / list.size() / (list.size() - 1)); - } - - public Operand visitVARP_fun(final VARP_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list = new ArrayList(); - final boolean o = F_base_GetList_1(args, list); - if (o == false) { - return Operand.Error("Function VARP parameter error!"); - } - - double sum = 0; - final double avg = Average(list).doubleValue(); - for (int i = 0; i < list.size(); i++) { - sum += (avg - list.get(i).doubleValue()) * (avg - list.get(i).doubleValue()); - } - return Operand.Create(sum / list.size()); - } - - public Operand visitNORMDIST_fun(final NORMDIST_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToNumber("Function NORMDIST parameter 1 error!"); - if (firstValue.IsError()) - return firstValue; - final Operand secondValue = args.get(1).ToNumber("Function NORMDIST parameter 2 error!"); - if (secondValue.IsError()) - return secondValue; - final Operand thirdValue = args.get(2).ToNumber("Function NORMDIST parameter 3 error!"); - if (thirdValue.IsError()) - return thirdValue; - - final Operand fourthValue = args.get(3).ToBoolean("Function NORMDIST parameter 4 error!"); - if (fourthValue.IsError()) - return fourthValue; - - final double num = firstValue.NumberValue().doubleValue(); - final double avg = secondValue.NumberValue().doubleValue(); - final double STDEV = thirdValue.NumberValue().doubleValue(); - final boolean b = fourthValue.BooleanValue(); - return Operand.Create(ExcelFunctions.NormDist(num, avg, STDEV, b)); - } - - public Operand visitNORMINV_fun(final NORMINV_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function NORMINV parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final double num = args.get(0).NumberValue().doubleValue(); - final double avg = args.get(1).NumberValue().doubleValue(); - final double STDEV = args.get(2).NumberValue().doubleValue(); - return Operand.Create(ExcelFunctions.NormInv(num, avg, STDEV)); - } - - public Operand visitNORMSDIST_fun(final NORMSDIST_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function NORMSDIST parameter 1 error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final double k = firstValue.NumberValue().doubleValue(); - return Operand.Create(ExcelFunctions.NormSDist(k)); - } - - public Operand visitNORMSINV_fun(final NORMSINV_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function NORMSINV parameter 1 error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final double k = firstValue.NumberValue().doubleValue(); - return Operand.Create(ExcelFunctions.NormSInv(k)); - } - - public Operand visitBETADIST_fun(final BETADIST_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function BETADIST parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final double x = args.get(0).NumberValue().doubleValue(); - final double alpha = args.get(1).NumberValue().doubleValue(); - final double beta = args.get(2).NumberValue().doubleValue(); - - if (alpha < 0.0 || beta < 0.0) { - return Operand.Error("Function BETADIST parameter error!"); - } - - return Operand.Create(ExcelFunctions.BetaDist(x, alpha, beta)); - } - - public Operand visitBETAINV_fun(final BETAINV_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function BETAINV parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final double probability = args.get(0).NumberValue().doubleValue(); - final double alpha = args.get(1).NumberValue().doubleValue(); - final double beta = args.get(2).NumberValue().doubleValue(); - if (alpha < 0.0 || beta < 0.0 || probability < 0.0 || probability > 1.0) { - return Operand.Error("Function BETAINV parameter error!"); - } - try { - return Operand.Create(ExcelFunctions.BetaInv(probability, alpha, beta)); - } catch (final Exception e) { - } - return Operand.Error("Function BETAINV parameter error!"); - } - - public Operand visitBINOMDIST_fun(final BINOMDIST_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToNumber("Function BINOMDIST parameter 1 error!"); - if (firstValue.IsError()) - return firstValue; - final Operand secondValue = args.get(1).ToNumber("Function BINOMDIST parameter 2 error!"); - if (secondValue.IsError()) - return secondValue; - final Operand thirdValue = args.get(2).ToNumber("Function BINOMDIST parameter 3 error!"); - if (thirdValue.IsError()) - return thirdValue; - - final Operand fourthValue = args.get(3).ToBoolean("Function BINOMDIST parameter 4 error!"); - if (fourthValue.IsError()) - return fourthValue; - - if (!(thirdValue.NumberValue().doubleValue() >= 0.0 && thirdValue.NumberValue().doubleValue() <= 1.0 - && secondValue.NumberValue().doubleValue() >= 0)) { - return Operand.Error("Function BINOMDIST parameter error!"); - } - return Operand.Create(ExcelFunctions.BinomDist(firstValue.IntValue(), secondValue.IntValue(), - thirdValue.NumberValue().doubleValue(), fourthValue.BooleanValue())); - } - - public Operand visitEXPONDIST_fun(final EXPONDIST_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToNumber("Function EXPONDIST parameter 1 error!"); - if (firstValue.IsError()) - return firstValue; - final Operand secondValue = args.get(1).ToNumber("Function EXPONDIST parameter 2 error!"); - if (secondValue.IsError()) - return secondValue; - final Operand thirdValue = args.get(2).ToBoolean("Function EXPONDIST parameter 3 error!"); - if (thirdValue.IsError()) - return thirdValue; - - if (firstValue.NumberValue().doubleValue() < 0.0) { - return Operand.Error("Function EXPONDIST parameter error!"); - } - - return Operand.Create(ExcelFunctions.ExponDist(firstValue.NumberValue().doubleValue(), - secondValue.NumberValue().doubleValue(), - thirdValue.BooleanValue())); - } - - public Operand visitFDIST_fun(final FDIST_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function FDIST parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final double x = args.get(0).NumberValue().doubleValue(); - final int degreesFreedom = args.get(1).IntValue(); - final int degreesFreedom2 = args.get(2).IntValue(); - if (degreesFreedom <= 0.0 || degreesFreedom2 <= 0.0) { - return Operand.Error("Function FDIST parameter error!"); - } - return Operand.Create(ExcelFunctions.FDist(x, degreesFreedom, degreesFreedom2)); - } - - public Operand visitFINV_fun(final FINV_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function FINV parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final double probability = args.get(0).NumberValue().doubleValue(); - final int degreesFreedom = args.get(1).IntValue(); - final int degreesFreedom2 = args.get(2).IntValue(); - if (degreesFreedom <= 0.0 || degreesFreedom2 <= 0.0) { - return Operand.Error("Function FINV parameter error!"); - } - try { - return Operand.Create(ExcelFunctions.FInv(probability, degreesFreedom, degreesFreedom2)); - } catch (final Exception e) { - } - return Operand.Error("Function FINV parameter error!"); - } - - public Operand visitFISHER_fun(final FISHER_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function FISHER parameter error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final double x = firstValue.NumberValue().doubleValue(); - if (x >= 1 || x <= -1) { - return Operand.Error("Function FISHER parameter error!"); - } - final double n = 0.5 * Math.log((1 + x) / (1 - x)); - return Operand.Create(n); - } - - public Operand visitFISHERINV_fun(final FISHERINV_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function FISHERINV parameter error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final double x = firstValue.NumberValue().doubleValue(); - final double n = (Math.exp(2 * x) - 1) / (Math.exp(2 * x) + 1); - return Operand.Create(n); - } - - public Operand visitGAMMADIST_fun(final GAMMADIST_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToNumber("Function GAMMADIST parameter 1 error!"); - if (firstValue.IsError()) - return firstValue; - final Operand secondValue = args.get(1).ToNumber("Function GAMMADIST parameter 2 error!"); - if (secondValue.IsError()) - return secondValue; - final Operand thirdValue = args.get(2).ToNumber("Function GAMMADIST parameter 3 error!"); - if (thirdValue.IsError()) - return thirdValue; - - final Operand fourthValue = args.get(3).ToBoolean("Function GAMMADIST parameter 4 error!"); - if (fourthValue.IsError()) - return fourthValue; - - final double x = firstValue.NumberValue().doubleValue(); - final double alpha = secondValue.NumberValue().doubleValue(); - final double beta = thirdValue.NumberValue().doubleValue(); - final boolean cumulative = fourthValue.BooleanValue(); - if (alpha < 0.0 || beta < 0.0) { - return Operand.Error("Function GAMMADIST parameter error!"); - } - return Operand.Create(ExcelFunctions.GammaDist(x, alpha, beta, cumulative)); - } - - public Operand visitGAMMAINV_fun(final GAMMAINV_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function GAMMAINV parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final double probability = args.get(0).NumberValue().doubleValue(); - final double alpha = args.get(1).NumberValue().doubleValue(); - final double beta = args.get(2).NumberValue().doubleValue(); - if (alpha < 0.0 || beta < 0.0 || probability < 0 || probability > 1.0) { - return Operand.Error("Function GAMMAINV parameter error!"); - } - return Operand.Create(ExcelFunctions.GammaInv(probability, alpha, beta)); - } - - public Operand visitGAMMALN_fun(final GAMMALN_funContext context) { - final Operand firstValue = context.expr().accept(this).ToNumber("Function GAMMALN parameter error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(ExcelFunctions.GAMMALN(firstValue.NumberValue().doubleValue())); - } - - public Operand visitHYPGEOMDIST_fun(final HYPGEOMDIST_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function HYPGEOMDIST parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final int k = args.get(0).IntValue(); - final int draws = args.get(1).IntValue(); - final int success = args.get(2).IntValue(); - final int population = args.get(3).IntValue(); - if (!(population >= 0 && success >= 0 && draws >= 0 && success <= population && draws <= population)) { - return Operand.Error("Function HYPGEOMDIST parameter error!"); - } - return Operand.Create(ExcelFunctions.HypgeomDist(k, draws, success, population)); - } - - public Operand visitLOGINV_fun(final LOGINV_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function LOGINV parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - if (args.get(2).NumberValue().doubleValue() < 0.0) { - return Operand.Error("Function LOGINV parameter error!"); - } - return Operand.Create( - ExcelFunctions.LogInv(args.get(0).NumberValue().doubleValue(), args.get(1).NumberValue().doubleValue(), - args.get(2).NumberValue().doubleValue())); - } - - public Operand visitLOGNORMDIST_fun(final LOGNORMDIST_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function LOGNORMDIST parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - if (args.get(2).NumberValue().doubleValue() < 0.0) { - return Operand.Error("Function LOGNORMDIST parameter error!"); - } - return Operand.Create(ExcelFunctions.LognormDist(args.get(0).NumberValue().doubleValue(), - args.get(1).NumberValue().doubleValue(), - args.get(2).NumberValue().doubleValue())); - } - - public Operand visitNEGBINOMDIST_fun(final NEGBINOMDIST_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this) - .ToNumber("Function NEGBINOMDIST parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final int k = args.get(0).IntValue(); - final double r = args.get(1).NumberValue().doubleValue(); - final double p = args.get(2).NumberValue().doubleValue(); - - if (!(r >= 0.0 && p >= 0.0 && p <= 1.0)) { - return Operand.Error("Function NEGBINOMDIST parameter error!"); - } - return Operand.Create(ExcelFunctions.NegbinomDist(k, r, p)); - } - - public Operand visitPOISSON_fun(final POISSON_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToNumber("Function POISSON parameter 1 error!"); - if (firstValue.IsError()) - return firstValue; - final Operand secondValue = args.get(1).ToNumber("Function POISSON parameter 2 error!"); - if (secondValue.IsError()) - return secondValue; - final Operand thirdValue = args.get(2).ToBoolean("Function POISSON parameter 3 error!"); - if (thirdValue.IsError()) - return thirdValue; - - final int k = firstValue.IntValue(); - final double lambda = secondValue.NumberValue().doubleValue(); - final boolean state = thirdValue.BooleanValue(); - if (!(lambda > 0.0)) { - return Operand.Error("Function POISSON parameter error!"); - } - return Operand.Create(ExcelFunctions.POISSON(k, lambda, state)); - } - - public Operand visitTDIST_fun(final TDIST_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function TDIST parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final double x = args.get(0).NumberValue().doubleValue(); - final int degreesFreedom = args.get(1).IntValue(); - final int tails = args.get(2).IntValue(); - if (degreesFreedom <= 0.0 || tails < 1 || tails > 2) { - return Operand.Error("Function TDIST parameter error!"); - } - try { - return Operand.Create(ExcelFunctions.TDist(x, degreesFreedom, tails)); - } catch (final Exception e) { - } - return Operand.Error("Function TDIST parameter error!"); - } - - public Operand visitTINV_fun(final TINV_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this).ToNumber("Function TINV parameter " + (index++) + " is error!"); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final double probability = args.get(0).NumberValue().doubleValue(); - final int degreesFreedom = args.get(1).IntValue(); - if (degreesFreedom <= 0.0) { - return Operand.Error("Function TINV parameter error!"); - } - try { - return Operand.Create(ExcelFunctions.TInv(probability, degreesFreedom)); - } catch (final Exception e) { - } - return Operand.Error("Function TINV parameter error!"); - } - - public Operand visitWEIBULL_fun(final WEIBULL_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToNumber("Function WEIBULL parameter 1 error!"); - if (firstValue.IsError()) - return firstValue; - final Operand secondValue = args.get(1).ToNumber("Function WEIBULL parameter 2 error!"); - if (secondValue.IsError()) - return secondValue; - final Operand thirdValue = args.get(2).ToNumber("Function WEIBULL parameter 3 error!"); - if (thirdValue.IsError()) - return thirdValue; - - final Operand fourthValue = args.get(3).ToBoolean("Function WEIBULL parameter 4 error!"); - if (fourthValue.IsError()) - return fourthValue; - - final double x = firstValue.NumberValue().doubleValue(); - final double shape = secondValue.NumberValue().doubleValue(); - final double scale = thirdValue.NumberValue().doubleValue(); - final boolean state = fourthValue.BooleanValue(); - if (shape <= 0.0 || scale <= 0.0) { - return Operand.Error("Function WEIBULL parameter error!"); - } - - return Operand.Create(ExcelFunctions.WEIBULL(x, shape, scale, state)); - } - - private int F_base_countif(final List dbs, BigDecimal d) { - int count = 0; - for (final BigDecimal item : dbs) { - if (item.compareTo(d) == 0) { - count++; - } - } - return count; - } - - private int F_base_countif(final List dbs, final String s) { - Matcher m = sumifRegex.matcher(s); - int count = 0; - if (m.find()) { - final BigDecimal d = new BigDecimal(m.group(2)); - for (final BigDecimal item : dbs) { - if (F_base_compare(item, d, m.group(1))) { - count++; - } - } - } - - return count; - } - - private BigDecimal F_base_sumif(final List dbs, final String s, final List sumdbs) { - final Matcher m = sumifRegex.matcher(s); - BigDecimal sum = new BigDecimal(0); - if (m.find()) { - final BigDecimal d = new BigDecimal(m.group(2)); - for (int i = 0; i < dbs.size(); i++) { - if (F_base_compare(dbs.get(i), d, m.group(1))) { - sum = sum.add(sumdbs.get(i)); - } - } - } - return sum; - } - - private boolean F_base_compare(final BigDecimal a, final BigDecimal b, final String ss) { - if (CharUtil.Equals(ss, "<")) { - return a.compareTo(b) < 0; - } else if (CharUtil.Equals(ss, "<=")) { - return a.compareTo(b) <= 0; - } else if (CharUtil.Equals(ss, ">")) { - return a.compareTo(b) > 0; - } else if (CharUtil.Equals(ss, ">=")) { - return a.compareTo(b) >= 0; - } else if (CharUtil.Equals(ss, "=", "==", "===")) { - return a.compareTo(b) == 0; - } - return a.compareTo(b) != 0; - } - - private boolean F_base_GetList_1(final List args, final List list) { - for (final Operand item : args) { - if (item.Type() == OperandType.NUMBER) { - list.add(item.NumberValue()); - } else if (item.Type() == OperandType.ARRARY) { - final boolean o = F_base_GetList_1(item.ArrayValue(), list); - if (o == false) { - return false; - } - } else if (item.Type() == OperandType.JSON) { - final Operand i = item.ToArray(null); - if (i.IsError()) { - return false; - } - final boolean o = F_base_GetList_1(i.ArrayValue(), list); - if (o == false) { - return false; - } - } else { - final Operand o = item.ToNumber(null); - if (o.IsError()) { - return false; - } - list.add(o.NumberValue()); - } - } - return true; - } - - private boolean F_base_GetList_2(final Operand args, final List list) { - if (args.IsError()) { - return false; - } - if (args.Type() == OperandType.NUMBER) { - list.add(args.NumberValue()); - } else if (args.Type() == OperandType.ARRARY) { - return F_base_GetList_1(args.ArrayValue(), list); - } else if (args.Type() == OperandType.JSON) { - final Operand i = args.ToArray(null); - if (i.IsError()) { - return false; - } - return F_base_GetList_1(i.ArrayValue(), list); - } else { - final Operand o = args.ToNumber(null); - if (o.IsError()) { - return false; - } - list.add(o.NumberValue()); - } - return true; - } - - private boolean F_base_GetList(final Operand args, final List list) { - if (args.IsError()) { - return false; - } - if (args.Type() == OperandType.ARRARY) { - return F_base_GetList(args.ArrayValue(), list); - } else if (args.Type() == OperandType.JSON) { - final Operand i = args.ToArray(null); - if (i.IsError()) { - return false; - } - return F_base_GetList(i.ArrayValue(), list); - } else { - final Operand o = args.ToText(null); - if (o.IsError()) { - return false; - } - list.add(o.TextValue()); - } - return true; - } - - private boolean F_base_GetList(final List args, final List list) { - for (final Operand item : args) { - if (item.Type() == OperandType.ARRARY) { - final boolean o = F_base_GetList(item.ArrayValue(), list); - if (o == false) { - return false; - } - } else if (item.Type() == OperandType.JSON) { - final Operand i = item.ToArray(null); - if (i.IsError()) { - return false; - } - final boolean o = F_base_GetList(i.ArrayValue(), list); - if (o == false) { - return false; - } - } else { - final Operand o = item.ToText(null); - if (o.IsError()) { - return false; - } - list.add(o.TextValue()); - } - } - return true; - } - - @SuppressWarnings("deprecation") - public Operand visitURLENCODE_fun(final URLENCODE_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function URLENCODE parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - try { - return Operand.Create(URLEncoder.encode(firstValue.TextValue())); - } catch (Exception e) { - } - return Operand.Error("Function URLENCODE is error!"); - } - - @SuppressWarnings("deprecation") - public Operand visitURLDECODE_fun(final URLDECODE_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function URLDECODE parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - try { - return Operand.Create(URLDecoder.decode(firstValue.TextValue())); - } catch (Exception e) { - } - return Operand.Error("Function URLDECODE is error!"); - } - - public Operand visitHTMLENCODE_fun(final HTMLENCODE_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function HTMLENCODE parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(StringEscapeUtils.escapeHtml4(firstValue.TextValue())); - } - - public Operand visitHTMLDECODE_fun(final HTMLDECODE_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function HTMLDECODE parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - return Operand.Create(StringEscapeUtils.unescapeHtml4(firstValue.TextValue())); - } - - public Operand visitBASE64TOTEXT_fun(final BASE64TOTEXT_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function BASE64TOTEXT parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 1) { - encoding = "utf-8"; - } else { - encoding = args.get(1).TextValue(); - } - try { - final String t = new String(Base64.FromBase64String(args.get(0).TextValue()), encoding); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function BASE64TOTEXT is error!"); - } - - public Operand visitBASE64URLTOTEXT_fun(final BASE64URLTOTEXT_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this) - .ToText("Function BASE64URLTOTEXT parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 1) { - encoding = "utf-8"; - } else { - encoding = args.get(1).TextValue(); - } - try { - final String t = new String(Base64.FromBase64ForUrlString(args.get(0).TextValue()), encoding); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function BASE64URLTOTEXT is error!"); - } - - public Operand visitTEXTTOBASE64_fun(final TEXTTOBASE64_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function TEXTTOBASE64 parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 1) { - encoding = "utf-8"; - } else { - encoding = args.get(1).TextValue(); - } - try { - final String t = Base64.ToBase64String(args.get(0).TextValue().getBytes(encoding)); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function TEXTTOBASE64 is error!"); - } - - public Operand visitTEXTTOBASE64URL_fun(final TEXTTOBASE64URL_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this) - .ToText("Function TEXTTOBASE64URL parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 1) { - encoding = "utf-8"; - } else { - encoding = args.get(1).TextValue(); - } - try { - final String t = Base64.ToBase64ForUrlString(args.get(0).TextValue().getBytes(encoding)); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function TEXTTOBASE64 is error!"); - } - - public Operand visitREGEX_fun(final REGEX_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function REGEX parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToText("Function REGEX parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - Matcher b = Pattern.compile(secondValue.TextValue()).matcher(firstValue.TextValue()); - if (b.find() == false) { - return Operand.Error("Function REGEX is error!"); - } - return Operand.Create(b.group(0)); - } - - public Operand visitREGEXREPALCE_fun(final REGEXREPALCE_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function REGEXREPALCE parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - final Matcher b = Pattern.compile(args.get(0).TextValue()).matcher(args.get(1).TextValue());// .Replace(args.get(0).TextValue(), - // args.get(1).TextValue(), - // args.get(2).TextValue()); - final String t = b.replaceAll(args.get(2).TextValue()); - return Operand.Create(t); - } - - public Operand visitISREGEX_fun(final ISREGEX_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function ISREGEX parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - final boolean b = Pattern.compile(args.get(1).TextValue()).matcher(args.get(0).TextValue()).find(); - return Operand.Create(b); - } - - public Operand visitGUID_fun(final GUID_funContext context) { - return Operand.Create(UUID.randomUUID().toString().replaceAll("-", "")); - } - - public Operand visitMD5_fun(final MD5_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function MD5 parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 1) { - encoding = "utf-8"; - } else { - encoding = args.get(1).TextValue(); - } - try { - final String t = Hash.GetMd5String(args.get(0).TextValue().getBytes(encoding)); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function MD5 is error!"); - } - - public Operand visitSHA1_fun(final SHA1_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function SHA1 parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 1) { - encoding = "utf-8"; - } else { - encoding = args.get(1).TextValue(); - } - try { - final String t = Hash.GetSha1String(args.get(0).TextValue().getBytes(encoding)); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function SHA1 is error!"); - } - - public Operand visitSHA256_fun(final SHA256_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function SHA256 parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 1) { - encoding = "utf-8"; - } else { - encoding = args.get(1).TextValue(); - } - try { - final String t = Hash.GetSha256String(args.get(0).TextValue().getBytes(encoding)); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function SHA256 is error!"); - } - - public Operand visitSHA512_fun(final SHA512_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function SHA512 parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 1) { - encoding = "utf-8"; - } else { - encoding = args.get(1).TextValue(); - } - try { - final String t = Hash.GetSha512String(args.get(0).TextValue().getBytes(encoding)); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function SHA512 is error!"); - } - - public Operand visitCRC32_fun(final CRC32_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function CRC32 parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 1) { - encoding = "utf-8"; - } else { - encoding = args.get(1).TextValue(); - } - try { - final String t = Hash.GetCrc32String(args.get(0).TextValue().getBytes(encoding)); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function CRC32 is error!"); - } - - public Operand visitHMACMD5_fun(final HMACMD5_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function HMACMD5 parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 2) { - encoding = "utf-8"; - } else { - encoding = args.get(2).TextValue(); - } - try { - final String t = Hash.GetHmacMd5String(args.get(0).TextValue().getBytes(encoding), args.get(1).TextValue()); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function HMACMD5 is error!"); - } - - public Operand visitHMACSHA1_fun(final HMACSHA1_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function HMACSHA1 parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 2) { - encoding = "utf-8"; - } else { - encoding = args.get(2).TextValue(); - } - try { - final String t = Hash.GetHmacSha1String(args.get(0).TextValue().getBytes(encoding), - args.get(1).TextValue()); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function HMACSHA1 is error!"); - } - - public Operand visitHMACSHA256_fun(final HMACSHA256_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function HMACSHA256 parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 2) { - encoding = "utf-8"; - } else { - encoding = args.get(2).TextValue(); - } - try { - final String t = Hash.GetHmacSha256String(args.get(0).TextValue().getBytes(encoding), - args.get(1).TextValue()); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function HMACSHA256 is error!"); - } - - public Operand visitHMACSHA512_fun(final HMACSHA512_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function HMACSHA512 parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String encoding; - if (args.size() == 2) { - encoding = "utf-8"; - } else { - encoding = args.get(2).TextValue(); - } - try { - final String t = Hash.GetHmacSha512String(args.get(0).TextValue().getBytes(encoding), - args.get(1).TextValue()); - return Operand.Create(t); - } catch (final Exception e) { - } - return Operand.Error("Function HMACSHA512 is error!"); - } - - public Operand visitTRIMSTART_fun(final TRIMSTART_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function TRIMSTART parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String text = args.get(0).TextValue(); - if (args.size() == 2) { - text = Pattern.compile( - "^[" + args.get(1).TextValue().replace("[", "\\[").replace("]", "\\]").replace("\\", "\\\\") + "]*") - .matcher(text).replaceAll(""); - return Operand.Create(text); - } - text = Pattern.compile("^\\s*").matcher(text).replaceAll(""); - return Operand.Create(text); - } - - public Operand visitTRIMEND_fun(final TRIMEND_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function TRIMEND parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - - String text = args.get(0).TextValue(); - if (args.size() == 2) { - text = Pattern.compile( - "[" + args.get(1).TextValue().replace("[", "\\[").replace("]", "\\]").replace("\\", "\\\\") + "]*$") - .matcher(text).replaceAll(""); - return Operand.Create(text); - } - text = Pattern.compile("\\s*$").matcher(text).replaceAll(""); - return Operand.Create(text); - } - - public Operand visitINDEXOF_fun(final INDEXOF_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function INDEXOF parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToText("Function INDEXOF parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - final String text = firstValue.TextValue(); - if (args.size() == 2) { - return Operand.Create(text.indexOf(secondValue.TextValue()) + excelIndex); - } - final Operand thirdValue = args.get(2).ToText("Function INDEXOF parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - if (args.size() == 3) { - return Operand.Create(text.substring(thirdValue.IntValue()).indexOf(secondValue.TextValue()) - + text.length() + excelIndex); - } - final Operand fourthValue = args.get(3).ToText("Function INDEXOF parameter 4 is error!"); - if (fourthValue.IsError()) { - return fourthValue; - } - return Operand.Create(text.substring(thirdValue.IntValue()).indexOf(secondValue.TextValue(), - fourthValue.IntValue()) + thirdValue.IntValue() + excelIndex); - } - - public Operand visitLASTINDEXOF_fun(final LASTINDEXOF_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function LASTINDEXOF parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToText("Function LASTINDEXOF parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - final String text = firstValue.TextValue(); - if (args.size() == 2) { - return Operand.Create(text.lastIndexOf(secondValue.TextValue()) + excelIndex); - } - final Operand thirdValue = args.get(2).ToText("Function LASTINDEXOF parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - if (args.size() == 3) { - return Operand - .Create(text.substring(thirdValue.IntValue()).lastIndexOf(secondValue.TextValue()) - + thirdValue.IntValue() + excelIndex); - } - final Operand fourthValue = args.get(3).ToText("Function LASTINDEXOF parameter 4 is error!"); - if (fourthValue.IsError()) { - return fourthValue; - } - return Operand.Create(text.substring(thirdValue.IntValue()).lastIndexOf(secondValue.TextValue(), - fourthValue.IntValue()) + thirdValue.IntValue() + excelIndex); - } - - public Operand visitSPLIT_fun(final SPLIT_funContext context) { - final List args = new ArrayList(); - int index = 1; - for (final ExprContext item : context.expr()) { - final Operand a = item.accept(this).ToText("Function SPLIT parameter " + (index++) + " is error!"); - if (a.IsError()) { - return a; - } - args.add(a); - } - final String[] txts = args.get(0).TextValue().split(args.get(1).TextValue()); - final List array = new ArrayList(); - for (int i = 0; i < txts.length; i++) { - array.add(Operand.Create(txts[i])); - } - return Operand.Create(array); - } - - public Operand visitJOIN_fun(final JOIN_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - Operand firstValue = args.get(0); - if (firstValue.Type() == OperandType.JSON) { - final Operand o = firstValue.ToArray(null); - if (o.IsError() == false) { - firstValue = o; - } - } - if (firstValue.Type() == OperandType.ARRARY) { - final List list = new ArrayList(); - final boolean o = F_base_GetList(firstValue, list); - if (o == false) - return Operand.Error("Function JOIN parameter 1 is error!"); - - final Operand secondValue = args.get(1).ToText("Function JOIN parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - return Operand.Create(String.join(secondValue.TextValue(), list)); - } else { - firstValue = firstValue.ToText("Function JOIN parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - - final List list = new ArrayList(); - for (int i = 1; i < args.size(); i++) { - final boolean o = F_base_GetList(args.get(i), list); - if (o == false) - return Operand.Error("Function JOIN parameter {i + 1} is error!"); - } - - return Operand.Create(String.join(firstValue.TextValue(), list)); - } - } - - public Operand visitSUBSTRING_fun(final SUBSTRING_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function SUBSTRING parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToNumber("Function SUBSTRING parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - final String text = firstValue.TextValue(); - if (args.size() == 2) { - return Operand.Create(text.substring(secondValue.IntValue() - excelIndex)); - } - final Operand thirdValue = args.get(2).ToNumber("Function SUBSTRING parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - return Operand.Create(text.substring(secondValue.IntValue() - excelIndex, - secondValue.IntValue() - excelIndex + thirdValue.IntValue())); - } - - public Operand visitSTARTSWITH_fun(final STARTSWITH_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function STARTSWITH parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToText("Function STARTSWITH parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - final String text = firstValue.TextValue(); - if (args.size() == 2) { - return Operand.Create(text.startsWith(secondValue.TextValue())); - } - final Operand thirdValue = args.get(2).ToBoolean("Function STARTSWITH parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - if (thirdValue.BooleanValue()) { - return Operand.Create(text.toLowerCase().startsWith(secondValue.TextValue().toLowerCase())); - } - return Operand.Create(text.startsWith(secondValue.TextValue())); - } - - public Operand visitENDSWITH_fun(final ENDSWITH_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function ENDSWITH parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToText("Function ENDSWITH parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - final String text = firstValue.TextValue(); - if (args.size() == 2) { - return Operand.Create(text.endsWith(secondValue.TextValue())); - } - final Operand thirdValue = args.get(2).ToBoolean("Function ENDSWITH parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - if (thirdValue.BooleanValue()) { - return Operand.Create(text.toLowerCase().endsWith(secondValue.TextValue().toLowerCase())); - } - return Operand.Create(text.endsWith(secondValue.TextValue())); - } - - public Operand visitISNULLOREMPTY_fun(final ISNULLOREMPTY_funContext context) { - final Operand firstValue = context.expr().accept(this).ToText("Function ISNULLOREMPTY parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - boolean b = false; - if (firstValue.TextValue() == null || firstValue.TextValue().equals("")) { - b = true; - } - return Operand.Create(b); - // return Operand.Create(String.IsNullOrEmpty(firstValue.TextValue())); - } - - public Operand visitISNULLORWHITESPACE_fun(final ISNULLORWHITESPACE_funContext context) { - final Operand firstValue = context.expr().accept(this) - .ToText("Function ISNULLORWHITESPACE parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - boolean b = firstValue.TextValue() == null || firstValue.TextValue().trim().equals(""); - return Operand.Create(b); - } - - public Operand visitREMOVESTART_fun(final REMOVESTART_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function REMOVESTART parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToText("Function REMOVESTART parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - final String text = firstValue.TextValue(); - if (args.size() == 3) { - final Operand thirdValue = args.get(2).ToBoolean("Function REMOVESTART parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - if (thirdValue.BooleanValue()) { - if (text.toLowerCase().startsWith(secondValue.TextValue().toLowerCase())) { - return Operand.Create(text.substring(secondValue.TextValue().length())); - } - return firstValue; - } - } - if (text.startsWith(secondValue.TextValue())) { - return Operand.Create(text.substring(secondValue.TextValue().length())); - } - return firstValue; - } - - public Operand visitREMOVEEND_fun(final REMOVEEND_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToText("Function REMOVEEND parameter 1 is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final Operand secondValue = args.get(1).ToText("Function REMOVEEND parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - - final String text = firstValue.TextValue(); - // StringComparison comparison = StringComparison.Ordinal; - if (args.size() == 3) { - final Operand thirdValue = args.get(2).ToBoolean("Function REMOVESTART parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - if (thirdValue.BooleanValue()) { - if (text.toLowerCase().endsWith(secondValue.TextValue().toLowerCase())) { - return Operand.Create(text.substring(0, text.length() - secondValue.TextValue().length())); - } - return firstValue; - } - } - if (text.endsWith(secondValue.TextValue())) { - return Operand.Create(text.substring(0, text.length() - secondValue.TextValue().length())); - } - return firstValue; - } - - public Operand visitJSON_fun(final JSON_funContext context) { - Operand firstValue = context.expr().accept(this); - if (firstValue.Type() == OperandType.JSON) { - return firstValue; - } - firstValue = firstValue.ToText("Function JSON parameter is error!"); - if (firstValue.IsError()) { - return firstValue; - } - final String txt = firstValue.TextValue(); - if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { - try { - final JsonData json = JsonMapper.ToObject(txt); - return Operand.Create(json); - } catch (final Exception e) { - } - } - return Operand.Error("Function JSON parameter is error!"); - } - - public Operand visitVLOOKUP_fun(final VLOOKUP_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToArray("Function VLOOKUP parameter 1 error!"); - if (firstValue.IsError()) { - return firstValue; - } - Operand secondValue = args.get(1); - - final Operand thirdValue = args.get(2).ToNumber("Function VLOOKUP parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - - boolean vague = true; - if (args.size() == 4) { - final Operand fourthValue = args.get(2).ToBoolean("Function VLOOKUP parameter 4 is error!"); - if (fourthValue.IsError()) { - return fourthValue; - } - vague = fourthValue.BooleanValue(); - } - if (secondValue.Type() != OperandType.NULL) { - final Operand sv = secondValue.ToText("Function VLOOKUP parameter 2 is error!"); - if (sv.IsError()) { - return sv; - } - secondValue = sv; - } - for (final Operand item : firstValue.ArrayValue()) { - final Operand o = item.ToArray("Function VLOOKUP parameter 1 error!"); - if (o.IsError()) { - return o; - } - if (o.ArrayValue().size() > 0) { - final Operand o1 = o.ArrayValue().get(0);// [0]; - int b = -1; - if (secondValue.Type() == OperandType.NUMBER) { - final Operand o2 = o1.ToNumber(null); - if (o2.IsError() == false) { - b = o2.NumberValue().compareTo(secondValue.NumberValue()); - } - } else { - final Operand o2 = o1.ToText(null); - if (o2.IsError() == false) { - b = o2.TextValue().compareTo(secondValue.TextValue()); - } - } - if (b == 0) { - final int index = thirdValue.IntValue() - excelIndex; - if (index < o.ArrayValue().size()) { - return o.ArrayValue().get(index);// [index]; - } - } - } - } - - if (vague) // 进行模糊匹配 - { - Operand last = null; - final int index = thirdValue.IntValue() - excelIndex; - for (final Operand item : firstValue.ArrayValue()) { - final Operand o = item.ToArray(null); - if (o.IsError()) { - return o; - } - if (o.ArrayValue().size() > 0) { - final Operand o1 = o.ArrayValue().get(0);// [0]; - int b = -1; - if (secondValue.Type() == OperandType.NUMBER) { - final Operand o2 = o1.ToNumber(null); - if (o2.IsError() == false) { - b = o2.NumberValue().compareTo(secondValue.NumberValue()); - } - } else { - final Operand o2 = o1.ToText(null); - if (o2.IsError() == false) { - b = o2.TextValue().compareTo(secondValue.TextValue()); - // b = String.CompareOrdinal(o2.TextValue(), secondValue.TextValue()); - } - } - if (b < 0 && index < o.ArrayValue().size()) { - last = o; - } else if (b > 0 && last != null) { - return last.ArrayValue().get(index);// [index]; - } - } - } - } - return Operand.Error("Function VLOOKUP is not match !"); - } - - public Operand visitLOOKUP_fun(final LOOKUP_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final Operand firstValue = args.get(0).ToArray("Function LOOKUP parameter 1 error!"); - if (firstValue.IsError()) { - return firstValue; - } - Operand secondValue = args.get(1).ToText("Function LOOKUP parameter 2 is error!"); - if (secondValue.IsError()) { - return secondValue; - } - if (firstValue.Type() == OperandType.ARRARYJSON) { - secondValue = secondValue.ToNumber(""); - if (secondValue.IsError()) { - return secondValue; - } - boolean range = false; - if (args.size() == 3) { - Operand t = args.get(2).ToBoolean("Function LOOKUP parameter 3 is error!"); - if (t.IsError()) { - return t; - } - range = t.BooleanValue(); - } - Operand operand = ((Operand.OperandKeyValueList) firstValue) - .TryGetValueFloor(secondValue.NumberValue().doubleValue(), range); - if (operand != null) { - return operand; - } - return Operand.Error("Function LOOKUP not find !"); - } - final Operand thirdValue = args.get(2).ToText("Function LOOKUP parameter 3 is error!"); - if (thirdValue.IsError()) { - return thirdValue; - } - - if (secondValue.TextValue() == null || secondValue.TextValue().equals("")) { - return Operand.Error("Function LOOKUP parameter 2 is null!"); - } - - final AntlrLookupEngine engine = new AntlrLookupEngine(); - if (engine.Parse(secondValue.TextValue()) == false) { - return Operand.Error("Function LOOKUP parameter 2 Parse is error!"); - } - - for (final Operand item : firstValue.ArrayValue()) { - final Operand json = item.ToJson(null); - if (json.IsError() == false) { - engine.Json = json; - try { - final Operand o = engine.Evaluate().ToBoolean(null); - if (o.IsError() == false) { - if (o.BooleanValue()) { - final JsonData v = json.JsonValue().GetChild(thirdValue.TextValue());// [thirdValue.TextValue()]; - if (v != null) { - if (v.IsString()) - return Operand.Create(v.StringValue()); - if (v.IsBoolean()) - return Operand.Create(v.BooleanValue()); - if (v.IsDouble()) - return Operand.Create(v.NumberValue()); - if (v.IsObject()) - return Operand.Create(v); - if (v.IsArray()) - return Operand.Create(v); - if (v.IsNull()) - return Operand.CreateNull(); - return Operand.Create(v); - } - } - } - } catch (final Exception e) { - } - } - } - return Operand.Error("Function LOOKUP not find!"); - } - - public Operand visitArray_fun(final Array_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - return Operand.Create(args); - } - - public Operand visitBracket_fun(final Bracket_funContext context) { - return context.expr().accept(this); - } - - public Operand visitNUM_fun(final NUM_funContext context) { - final String t = context.num().getText(); - BigDecimal d = new BigDecimal(t); - if (context.unit() == null) - return Operand.Create(d); - String unit = context.unit().getText().toUpperCase(); - Map dict = NumberUnitTypeHelper.GetUnitTypedict(); - - try { - d = NumberUnitTypeHelper.TransformationUnit(d, dict.get(unit), DistanceUnit, AreaUnit, VolumeUnit, - MassUnit); - return Operand.Create(d); - } catch (Exception e) { - return Operand.Error(e.getMessage()); - } - } - - public Operand visitNum(NumContext ctx) { - return Operand.Create(new BigDecimal(ctx.getText())); - } - - public Operand visitUnit(UnitContext ctx) { - return Operand.Create(ctx.getText()); - } - - public Operand visitArrayJson_fun(ArrayJson_funContext context) { - Operand.OperandKeyValueList result = new Operand.OperandKeyValueList(null); - - List js = context.arrayJson(); - for (int i = 0; i < js.size(); i++) { - ArrayJsonContext item = js.get(i); - Operand aa = this.visit(item); - if (aa.IsError()) { - return aa; - } - result.AddValue((Operand.KeyValue) ((Operand.OperandKeyValue) aa).Value()); - } - return result; - } - - public Operand visitArrayJson(ArrayJsonContext context) { - Operand.KeyValue keyValue = new Operand.KeyValue(); - if (context.NUM() != null) { - try { - Integer key = Integer.parseInt(context.NUM().getText()); - keyValue.Key = key.toString(); - } catch (Exception e) { - return Operand.Error("Json key '" + context.NUM().getText() + "' is error!"); - } - } - if (context.STRING() != null) { - String opd = context.STRING().getText(); - StringBuilder sb = new StringBuilder(opd.length() - 2); - int index = 1; - while (index < opd.length() - 1) { - char c = opd.charAt(index++); - if (c == '\\') { - char c2 = opd.charAt(index++); - if (c2 == 'n') - sb.append('\n'); - else if (c2 == 'r') - sb.append('\r'); - else if (c2 == 't') - sb.append('\t'); - else if (c2 == '0') - sb.append('\0'); - else if (c2 == 'b') - sb.append('\b'); - else if (c2 == 'f') - sb.append('\f'); - else - sb.append(opd.charAt(index++)); - } else { - sb.append(c); - } - } - keyValue.Key = sb.toString(); - } - if (context.parameter2() != null) { - keyValue.Key = context.parameter2().getText(); - } - keyValue.Value = visit(context.expr()); - return new Operand.OperandKeyValue(keyValue); - } - - @Override - public Operand visitHAS_fun(HAS_funContext context) { - List exprs = context.expr(); - Operand args1 = this.visit(exprs.get(0)); - if (args1.IsError()) { - return args1; - } - Operand args2 = this.visit(exprs.get(1)).ToText("Function HAS parameter 2 is error!"); - if (args2.IsError()) { - return args2; - } - - if (args1.Type() == OperandType.ARRARYJSON) { - return Operand.Create(((Operand.OperandKeyValueList) args1).ContainsKey(args2)); - } else if (args1.Type() == OperandType.JSON) { - JsonData json = args1.JsonValue(); - if (json.IsArray()) { - for (int i = 0; i < json.Count(); i++) { - JsonData v = json.inst_array.get(i); - if (v.IsString()) { - if (v.StringValue().equals(args2.TextValue())) { - return Operand.True; - } - } else if (v.IsDouble()) { - if (v.NumberValue().toString().equals(args2.TextValue())) { - return Operand.True; - } - } else if (v.IsBoolean()) { - if ((v.BooleanValue() ? "TRUE" : "FALSE").equals(args2.TextValue())) { - return Operand.True; - } - } - } - } else { - JsonData v = json.inst_object.get(args2.TextValue()); - if (v != null) { - return Operand.True; - } - } - return Operand.False; - } else if (args1.Type() == OperandType.ARRARY) { - for (Operand item : args1.ArrayValue()) { - Operand t = item.ToText(""); - if (t.IsError()) { - continue; - } - if (t.TextValue().equals(args2.TextValue())) { - return Operand.True; - } - } - return Operand.False; - } - return Operand.Error("Function HAS parameter 1 is error!"); - } - - @Override - public Operand visitHASVALUE_fun(HASVALUE_funContext context) { - List exprs = context.expr(); - Operand args1 = this.visit(exprs.get(0)); - if (args1.IsError()) { - return args1; - } - Operand args2 = this.visit(exprs.get(1)).ToText("Function HASVALUE parameter 2 is error!"); - if (args2.IsError()) { - return args2; - } - - if (args1.Type() == OperandType.ARRARYJSON) { - return Operand.Create(((Operand.OperandKeyValueList) args1).ContainsValue(args2)); - } else if (args1.Type() == OperandType.JSON) { - JsonData json = args1.JsonValue(); - if (json.IsArray()) { - for (int i = 0; i < json.Count(); i++) { - JsonData v = json.inst_array.get(i); - if (v.IsString()) { - if (v.StringValue().equals(args2.TextValue())) { - return Operand.True; - } - } else if (v.IsDouble()) { - if (v.NumberValue().toString().equals(args2.TextValue())) { - return Operand.True; - } - } else if (v.IsBoolean()) { - if ((v.BooleanValue() ? "TRUE" : "FALSE").equals(args2.TextValue())) { - return Operand.True; - } - } - } - } else { - for (JsonData v : json.inst_object.values()) { - if (v.IsString()) { - if (v.StringValue().equals(args2.TextValue())) { - return Operand.True; - } - } else if (v.IsDouble()) { - if (v.NumberValue().toString().equals(args2.TextValue())) { - return Operand.True; - } - } else if (v.IsBoolean()) { - if ((v.BooleanValue() ? "TRUE" : "FALSE").equals(args2.TextValue())) { - return Operand.True; - } - } - } - } - return Operand.False; - } else if (args1.Type() == OperandType.ARRARY) { - for (Operand item : args1.ArrayValue()) { - Operand t = item.ToText(""); - if (t.IsError()) { - continue; - } - if (t.TextValue().equals(args2.TextValue())) { - return Operand.True; - } - } - return Operand.False; - } - return Operand.Error("Function HASVALUE parameter 1 is error!"); - } - - public Operand visitSTRING_fun(final STRING_funContext context) { - final String opd = context.STRING().getText(); - final StringBuilder sb = new StringBuilder(); - int index = 1; - while (index < opd.length() - 1) { - final char c = opd.charAt(index++);// [index++]; - if (c == '\\') { - final char c2 = opd.charAt(index++); - if (c2 == 'n') - sb.append('\n'); - else if (c2 == 'r') - sb.append('\r'); - else if (c2 == 't') - sb.append('\t'); - else if (c2 == '0') - sb.append('\0'); - // else if (c2 == 'v') sb.append('\v'); - // else if (c2 == 'a') sb.append('\a'); - else if (c2 == 'b') - sb.append('\b'); - else if (c2 == 'f') - sb.append('\f'); - else - sb.append(opd.charAt(index++)); - } else { - sb.append(c); - } - } - return Operand.Create(sb.toString()); - } - - public Operand visitNULL_fun(final NULL_funContext context) { - return Operand.CreateNull(); - } - - public Operand visitPARAMETER_fun(final PARAMETER_funContext context) { - - TerminalNode node = context.PARAMETER(); - if (node != null) { - final MyParameter myParameter = new MyParameter(); - myParameter.Context = mainContext; - myParameter.Name = node.getText(); - return GetParameter.apply(myParameter); - } - node = context.PARAMETER2(); - if (node != null) { - String str = node.getText(); - final MyParameter myParameter = new MyParameter(); - myParameter.Context = mainContext; - if (str.startsWith("@")) { - str = str.substring(1); - } else { - str = str.substring(1, str.length() - 1); - } - myParameter.Name = str; - return GetParameter.apply(myParameter); - } - // 防止 多重引用 - if (context.expr() != null) { - Operand p = context.expr().accept(this).ToText("Function PARAMETER first parameter is error!"); - if (p.IsError()) - return p; - - if (GetParameter != null) { - final MyParameter myParameter = new MyParameter(); - myParameter.Context = mainContext; - myParameter.Name = p.TextValue(); - return GetParameter.apply(myParameter); - } - } - return Operand.Error("Function PARAMETER first parameter is error!"); - } - - public Operand visitParameter2(final Parameter2Context context) { - return Operand.Create(context.children.get(0).getText()); - } - - public Operand visitGetJsonValue_fun(final GetJsonValue_funContext context) { - final Operand firstValue = context.expr(0).accept(this); - if (firstValue.IsError()) { - return firstValue; - } - - Operand op; - if (context.parameter2() != null) { - op = context.parameter2().accept(this); - } else { - op = context.expr(1).accept(this); - if (op.IsError()) { - op = Operand.Create(context.expr(1).getText()); - } - } - - if (firstValue.Type() == OperandType.ARRARY) { - op = op.ToNumber("ARRARY index is error!"); - if (op.IsError()) { - return op; - } - final int index = op.IntValue() - excelIndex; - if (index < firstValue.ArrayValue().size()) - return firstValue.ArrayValue().get(index);// [index]; - return Operand.Error("ARRARY index " + index + " greater than maximum length!"); - } - if (firstValue.Type() == OperandType.ARRARYJSON) { - if (op.Type() == OperandType.NUMBER) { - if (((Operand.OperandKeyValueList) firstValue).HasKey(op.NumberValue().toString())) { - return ((Operand.OperandKeyValueList) firstValue).GetValue(op.NumberValue().toString()); - } - return Operand.Error("Parameter name `" + op.NumberValue().toString() + "` is missing!"); - } else if (op.Type() == OperandType.TEXT) { - if (((Operand.OperandKeyValueList) firstValue).HasKey(op.TextValue())) { - return ((Operand.OperandKeyValueList) firstValue).GetValue(op.TextValue()); - } - return Operand.Error("Parameter name `" + op.TextValue() + "` is missing!"); - } - return Operand.Error("Parameter name is missing!"); - } - if (firstValue.Type() == OperandType.JSON) { - final JsonData json = firstValue.JsonValue(); - if (json.IsArray()) { - op = op.ToNumber("JSON parameter index is error!"); - if (op.IsError()) { - return op; - } - final int index = op.IntValue() - excelIndex; - if (index < json.inst_array.size()) { - final JsonData v = json.GetChild(index);// [op.IntValue() - excelIndex]; - if (v.IsString()) - return Operand.Create(v.StringValue()); - if (v.IsBoolean()) - return Operand.Create(v.BooleanValue()); - if (v.IsDouble()) - return Operand.Create(v.NumberValue()); - if (v.IsObject()) - return Operand.Create(v); - if (v.IsArray()) - return Operand.Create(v); - if (v.IsNull()) - return Operand.CreateNull(); - return Operand.Create(v); - } - return Operand.Error("JSON index " + index + " greater than maximum length!"); - } else { - op = op.ToText("JSON parameter name is error!"); - if (op.IsError()) { - return op; - } - final JsonData v = json.GetChild(op.TextValue());// [op.TextValue()]; - if (v != null) { - if (v.IsString()) - return Operand.Create(v.StringValue()); - if (v.IsBoolean()) - return Operand.Create(v.BooleanValue()); - if (v.IsDouble()) - return Operand.Create(v.NumberValue()); - if (v.IsObject()) - return Operand.Create(v); - if (v.IsArray()) - return Operand.Create(v); - if (v.IsNull()) - return Operand.CreateNull(); - return Operand.Create(v); - } - } - } - return Operand.Error(" Operator is error!"); - } - - public Operand visitDiyFunction_fun(final DiyFunction_funContext context) { - if (DiyFunction != null) { - final String funName = context.PARAMETER().getText(); - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - args.add(aa); - } - final MyFunction myFunction = new MyFunction(); - myFunction.Context = mainContext; - myFunction.Name = funName; - myFunction.OperandList = args; - return DiyFunction.apply(myFunction); - } - return Operand.Error("DiyFunction is error!"); - } - - @SuppressWarnings("deprecation") - private double round(final double value, final int p) { - final BigDecimal bigD = BigDecimal.valueOf(value); - return bigD.setScale(p, BigDecimal.ROUND_HALF_UP).doubleValue(); - } - - static int sign(final double a) { - if (a == 0.0) { - return 0; - } - if (a < 0) { - return -1; - } - return 1; - } - - private BigDecimal Sum(final List array) { - BigDecimal d = new BigDecimal(0); - for (int i = 0; i < array.size(); i++) { - d = d.add(array.get(i)); - } - return d; - } - - private BigDecimal Average(final List array) { - BigDecimal d = new BigDecimal(0); - for (int i = 0; i < array.size(); i++) { - d = d.add(array.get(i)); - } - return d.divide(new BigDecimal(array.size()), MathContext.DECIMAL32); - } - - private BigDecimal Max(final List array) { - BigDecimal d = new BigDecimal(Double.MIN_VALUE); - for (int i = 0; i < array.size(); i++) { - if (d.compareTo(array.get(i)) < 0) { - d = array.get(i); - } - } - return d; - } - - private BigDecimal Min(final List array) { - BigDecimal d = new BigDecimal(Double.MAX_VALUE); - for (int i = 0; i < array.size(); i++) { - if (d.compareTo(array.get(i)) > 0) { - d = array.get(i); - } - } - return d; - } - - private String padLeft(final String src, final int len, final char ch) { - final int diff = len - src.length(); - if (diff <= 0) { - return src; - } - - final char[] charr = new char[len]; - System.arraycopy(src.toCharArray(), 0, charr, 0, src.length()); - for (int i = src.length(); i < len; i++) { - charr[i] = ch; - } - return new String(charr); - } - - private double log(final double value, final double base) { - return Math.log(value) / Math.log(base); - } - - @Override - public Operand visitCOVARIANCES_fun(COVARIANCES_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list1 = new ArrayList(); - final List list2 = new ArrayList(); - final boolean o1 = F_base_GetList_2(args.get(0), list1); - final boolean o2 = F_base_GetList_2(args.get(1), list2); - - if (o1 == false) { - return Operand.Error("Function COVAR parameter 1 error!"); - } - if (o2 == false) { - return Operand.Error("Function COVAR parameter 2 error!"); - } - if (list1.size() != list2.size()) { - return Operand.Error("Function COVAR parameter's count error!"); - } - - BigDecimal avg1 = Average(list1); - BigDecimal avg2 = Average(list2); - BigDecimal sum = new BigDecimal(0); - for (int i = 0; i < list1.size(); i++) { - BigDecimal m = (list1.get(i).subtract(avg1)).multiply(list2.get(i).subtract(avg2)); - sum = sum.add(m); - } - BigDecimal val = sum.divide(new BigDecimal(list1.size() - 1), MathContext.DECIMAL32); - return Operand.Create(val); - } - - @Override - public Operand visitCOVAR_fun(COVAR_funContext context) { - final List args = new ArrayList(); - for (final ExprContext item : context.expr()) { - final Operand aa = item.accept(this); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } - - final List list1 = new ArrayList(); - final List list2 = new ArrayList(); - final boolean o1 = F_base_GetList_2(args.get(0), list1); - final boolean o2 = F_base_GetList_2(args.get(1), list2); - - if (o1 == false) { - return Operand.Error("Function COVAR parameter 1 error!"); - } - if (o2 == false) { - return Operand.Error("Function COVAR parameter 2 error!"); - } - if (list1.size() != list2.size()) { - return Operand.Error("Function COVAR parameter's count error!"); - } - - BigDecimal avg1 = Average(list1); - BigDecimal avg2 = Average(list2); - BigDecimal sum = new BigDecimal(0); - for (int i = 0; i < list1.size(); i++) { - BigDecimal m = (list1.get(i).subtract(avg1)).multiply(list2.get(i).subtract(avg2)); - sum = sum.add(m); - } - BigDecimal val = sum.divide(new BigDecimal(list1.size()), MathContext.DECIMAL32); - return Operand.Create(val); - } - @Override - public Operand visitVersion_fun(Version_funContext context) { - return Operand.Version; - } -} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyFunction.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyFunction.java deleted file mode 100644 index ef559074b..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyFunction.java +++ /dev/null @@ -1,12 +0,0 @@ -package toolgood.algorithm.internals; - -import toolgood.algorithm.Operand; -import toolgood.algorithm.math.mathParser.ProgContext; - -import java.util.List; - -public class MyFunction { - public ProgContext Context; - public String Name; - public List OperandList; -} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyParameter.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyParameter.java deleted file mode 100644 index 1253600c3..000000000 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyParameter.java +++ /dev/null @@ -1,8 +0,0 @@ -package toolgood.algorithm.internals; - -import toolgood.algorithm.math.mathParser.ProgContext; - -public class MyParameter { - public ProgContext Context; - public String Name; -} From 566d0bbbc083ec9b35f9cea0ac09b76c35cd80c6 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sat, 31 Jan 2026 22:17:19 +0800 Subject: [PATCH 03/98] fix --- .../java/toolgood/algorithm/OperandImpl.java | 739 +++++++++ .../algorithm/enums/CalculateTreeType.java | 39 + .../algorithm/internals/CalculateTree.java | 90 ++ .../algorithm/internals/DiyNameInfo.java | 82 + .../internals/Functions/FunctionBase.java | 265 +++ .../internals/Functions/FunctionUtil.java | 367 +++++ .../internals/Functions/Function_1.java | 18 + .../internals/Functions/Function_2.java | 24 + .../internals/Functions/Function_3.java | 30 + .../internals/Functions/Function_4.java | 36 + .../internals/Functions/Function_N.java | 23 + .../Functions/compare/Function_EQ.java | 71 + .../Functions/compare/Function_GE.java | 73 + .../Functions/compare/Function_GT.java | 73 + .../Functions/compare/Function_LE.java | 73 + .../Functions/compare/Function_LT.java | 73 + .../Functions/compare/Function_NE.java | 71 + .../Functions/csharp/Function_ENDSWITH.java | 53 + .../Functions/csharp/Function_GUID.java | 23 + .../Functions/csharp/Function_HAS.java | 57 + .../Functions/csharp/Function_HASVALUE.java | 57 + .../Functions/csharp/Function_INDEXOF.java | 74 + .../Functions/csharp/Function_ISREGEX.java | 40 + .../Functions/csharp/Function_JOIN.java | 68 + .../csharp/Function_LASTINDEXOF.java | 72 + .../csharp/Function_LOOKCEILING.java | 65 + .../Functions/csharp/Function_LOOKFLOOR.java | 64 + .../Functions/csharp/Function_REGEX.java | 46 + .../csharp/Function_REGEXREPALCE.java | 47 + .../Functions/csharp/Function_REMOVEEND.java | 62 + .../csharp/Function_REMOVESTART.java | 62 + .../Functions/csharp/Function_SPLIT.java | 39 + .../Functions/csharp/Function_STARTSWITH.java | 53 + .../Functions/csharp/Function_SUBSTRING.java | 38 + .../Functions/csharp/Function_TRIMEND.java | 48 + .../toolgood/algorithm/internals/MyDate.java | 386 +++++ .../algorithm/internals/RegexHelper.java | 73 + .../internals/Visitors/AntlrCharStream.java | 61 + .../internals/Visitors/CharUtil.java | 224 +++ .../internals/Visitors/DiyNameVisitor.java | 1438 +++++++++++++++++ .../internals/Visitors/MathSplitVisitor.java | 1224 ++++++++++++++ 41 files changed, 6521 insertions(+) create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/OperandImpl.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/CalculateTree.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/FunctionBase.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/FunctionUtil.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_1.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_2.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_3.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_4.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_N.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_EQ.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_NE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ENDSWITH.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_GUID.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HAS.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HASVALUE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_INDEXOF.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ISREGEX.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_JOIN.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LASTINDEXOF.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKCEILING.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKFLOOR.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEX.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEXREPALCE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVEEND.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVESTART.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SPLIT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_STARTSWITH.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyDate.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/RegexHelper.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/AntlrCharStream.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/CharUtil.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/DiyNameVisitor.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/MathSplitVisitor.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/OperandImpl.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/OperandImpl.java new file mode 100644 index 000000000..c173fe927 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/OperandImpl.java @@ -0,0 +1,739 @@ +package toolgood.algorithm; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.internals.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; + +class OperandInt extends Operand { + private final int value; + + public OperandInt(int obj) { + value = obj; + } + + @Override + public boolean isNumber() { return true; } + + @Override + public boolean isNotNumber() { return false; } + + @Override + public OperandType getType() { return OperandType.NUMBER; } + + @Override + public int getIntValue() { return value; } + + @Override + public BigDecimal getNumberValue() { return BigDecimal.valueOf(value); } + + @Override + public long getLongValue() { return value; } + + @Override + public double getDoubleValue() { return value; } + + @Override + public BigDecimal getBigDecimalValue() { return BigDecimal.valueOf(value); } + + @Override + public Operand toNumber(String errorMessage) { return this; } + + @Override + public Operand toNumber(String errorMessage, Object... args) { return this; } + + @Override + public Operand toBoolean(String errorMessage) { return getIntValue() != 0 ? TRUE : FALSE; } + + @Override + public Operand toBoolean(String errorMessage, Object... args) { return getIntValue() != 0 ? TRUE : FALSE; } + + @Override + public Operand toText(String errorMessage) { return create(Integer.toString(value)); } + + @Override + public Operand toText(String errorMessage, Object... args) { return create(Integer.toString(value)); } + + @Override + public Operand toMyDate(String errorMessage) { return create(new MyDate(value)); } + + @Override + public Operand toMyDate(String errorMessage, Object... args) { return create(new MyDate(value)); } + + @Override + public String toString() { return getNumberValue().toString(); } +} + +class OperandBigDecimal extends Operand { + private final BigDecimal value; + + public OperandBigDecimal(BigDecimal obj) { + value = obj; + } + + @Override + public boolean isNumber() { return true; } + + @Override + public boolean isNotNumber() { return false; } + + @Override + public OperandType getType() { return OperandType.NUMBER; } + + @Override + public int getIntValue() { return value.intValue(); } + + @Override + public BigDecimal getNumberValue() { return value; } + + @Override + public long getLongValue() { return value.longValue(); } + + @Override + public double getDoubleValue() { return value.doubleValue(); } + + @Override + public BigDecimal getBigDecimalValue() { return value; } + + @Override + public Operand toNumber(String errorMessage) { return this; } + + @Override + public Operand toNumber(String errorMessage, Object... args) { return this; } + + @Override + public Operand toBoolean(String errorMessage) { return value.compareTo(BigDecimal.ZERO) != 0 ? TRUE : FALSE; } + + @Override + public Operand toBoolean(String errorMessage, Object... args) { return value.compareTo(BigDecimal.ZERO) != 0 ? TRUE : FALSE; } + + @Override + public Operand toText(String errorMessage) { return create(value.toString()); } + + @Override + public Operand toText(String errorMessage, Object... args) { return create(value.toString()); } + + @Override + public Operand toMyDate(String errorMessage) { return create(new MyDate(value.longValue())); } + + @Override + public Operand toMyDate(String errorMessage, Object... args) { return create(new MyDate(value.longValue())); } + + @Override + public String toString() { return getNumberValue().toString(); } +} + + + +class OperandBoolean extends Operand { + private final boolean value; + + public OperandBoolean(boolean obj) { + value = obj; + } + + @Override + public boolean isBoolean() { return true; } + + @Override + public boolean isNotBoolean() { return false; } + + @Override + public OperandType getType() { return OperandType.BOOLEAN; } + + @Override + public boolean getBooleanValue() { return value; } + + @Override + public Operand toNumber(String errorMessage) { return value ? ONE : ZERO; } + + @Override + public Operand toNumber(String errorMessage, Object... args) { return value ? ONE : ZERO; } + + @Override + public Operand toBoolean(String errorMessage) { return this; } + + @Override + public Operand toBoolean(String errorMessage, Object... args) { return this; } + + @Override + public Operand toText(String errorMessage) { return create(value ? "TRUE" : "FALSE"); } + + @Override + public Operand toText(String errorMessage, Object... args) { return create(value ? "TRUE" : "FALSE"); } + + @Override + public String toString() { return value ? "true" : "false"; } +} + +class OperandString extends Operand { + private final String value; + + public OperandString(String obj) { + value = obj; + } + + @Override + public boolean isText() { return true; } + + @Override + public boolean isNotText() { return false; } + + @Override + public OperandType getType() { return OperandType.TEXT; } + + @Override + public String getTextValue() { return value; } + + @Override + public Operand toNumber(String errorMessage) { + try { + BigDecimal bd = new BigDecimal(value); + return Operand.create(bd); + } catch (NumberFormatException e) { + if (errorMessage == null) { + return error("Convert to number error!"); + } + return error(errorMessage); + } + } + + @Override + public Operand toNumber(String errorMessage, Object... args) { + try { + BigDecimal bd = new BigDecimal(value); + return Operand.create(bd); + } catch (NumberFormatException e) { + if (errorMessage == null) { + return error("Convert to number error!"); + } + return error(String.format(errorMessage, args)); + } + } + + @Override + public Operand toText(String errorMessage) { return this; } + + @Override + public Operand toText(String errorMessage, Object... args) { return this; } + + @Override + public Operand toBoolean(String errorMessage) { + FunctionUtil.BooleanHolder boolHolder = new FunctionUtil.BooleanHolder(); + if (FunctionUtil.tryParseBoolean(value, boolHolder)) { + return boolHolder.value ? Operand.TRUE : Operand.FALSE; + } + if (errorMessage == null) { + return error("Convert to bool error!"); + } + return error(errorMessage); + } + + @Override + public Operand toBoolean(String errorMessage, Object... args) { + FunctionUtil.BooleanHolder boolHolder = new FunctionUtil.BooleanHolder(); + if (FunctionUtil.tryParseBoolean(value, boolHolder)) { + return boolHolder.value ? Operand.TRUE : Operand.FALSE; + } + if (errorMessage == null) { + return error("Convert to bool error!"); + } + return error(String.format(errorMessage, args)); + } + + @Override + public Operand toMyDate(String errorMessage) { + try { + // 尝试解析为时间戳 + long timestamp = Long.parseLong(value); + return create(new MyDate(timestamp)); + } catch (NumberFormatException e) { + // 尝试解析为日期字符串 + try { + MyDate date = MyDate.parse(value); + return create(date); + } catch (Exception ex) { + if (errorMessage == null) { + return error("Convert to date error!"); + } + return error(errorMessage); + } + } + } + + @Override + public Operand toMyDate(String errorMessage, Object... args) { + try { + // 尝试解析为时间戳 + long timestamp = Long.parseLong(value); + return create(new MyDate(timestamp)); + } catch (NumberFormatException e) { + // 尝试解析为日期字符串 + try { + MyDate date = MyDate.parse(value); + return create(date); + } catch (Exception ex) { + if (errorMessage == null) { + return error("Convert to date error!"); + } + return error(String.format(errorMessage, args)); + } + } + } + + @Override + public Operand toArray(String errorMessage) { + return error(errorMessage != null ? errorMessage : "Convert to array error!"); + } + + @Override + public Operand toJson(String errorMessage) { + String txt = value.trim(); + if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { + try { + JsonData json = JsonData.parse(txt); + return Operand.create(json); + } catch (Exception e) { + } + } + return error(errorMessage != null ? errorMessage : "Convert to json error!"); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append('"'); + for (char c : value.toCharArray()) { + switch (c) { + case '"': + sb.append("\\\""); + break; + case '\n': + sb.append("\\n"); + break; + case '\r': + sb.append("\\r"); + break; + case '\t': + sb.append("\\t"); + break; + case '\0': + sb.append("\\0"); + break; + case '\v': + sb.append("\\v"); + break; + case '\a': + sb.append("\\a"); + break; + case '\b': + sb.append("\\b"); + break; + case '\f': + sb.append("\\f"); + break; + default: + sb.append(c); + break; + } + } + sb.append('"'); + return sb.toString(); + } +} + +class OperandMyDate extends Operand { + private final MyDate value; + + public OperandMyDate(MyDate obj) { + value = obj; + } + + @Override + public boolean isDate() { return true; } + + @Override + public boolean isNotDate() { return false; } + + @Override + public OperandType getType() { return OperandType.DATE; } + + @Override + public MyDate getDateValue() { return value; } + + @Override + public Operand toNumber(String errorMessage) { return create(value.toTimestamp()); } + + @Override + public Operand toNumber(String errorMessage, Object... args) { return create(value.toTimestamp()); } + + @Override + public Operand toBoolean(String errorMessage) { return value.toTimestamp() != 0 ? TRUE : FALSE; } + + @Override + public Operand toBoolean(String errorMessage, Object... args) { return value.toTimestamp() != 0 ? TRUE : FALSE; } + + @Override + public Operand toText(String errorMessage) { return create(value.toString()); } + + @Override + public Operand toText(String errorMessage, Object... args) { return create(value.toString()); } + + @Override + public Operand toMyDate(String errorMessage) { return this; } + + @Override + public Operand toMyDate(String errorMessage, Object... args) { return this; } + + @Override + public String toString() { return '"' + value.toString() + '"'; } +} + +class OperandJson extends Operand { + private final JsonData value; + + public OperandJson(JsonData obj) { + value = obj; + } + + @Override + public boolean isJson() { return true; } + + @Override + public boolean isNotJson() { return false; } + + @Override + public OperandType getType() { return OperandType.JSON; } + + @Override + JsonData getJsonValue() { return value; } + + @Override + public Operand toText(String errorMessage) { + return create(value.toString()); + } + + @Override + public Operand toText(String errorMessage, Object... args) { + return create(value.toString()); + } + + @Override + public Operand toArray(String errorMessage) { + if (value.isArray()) { + List list = new ArrayList<>(); + for (JsonData v : value.getArray()) { + if (v.isString()) { + list.add(Operand.create(v.getString())); + } else if (v.isBoolean()) { + list.add(Operand.create(v.getBoolean())); + } else if (v.isNumber()) { + list.add(Operand.create(new BigDecimal(v.getNumber().toString()))); + } else if (v.isNull()) { + list.add(Operand.createNull()); + } else { + list.add(Operand.create(v)); + } + } + return Operand.create(list); + } + return error(errorMessage != null ? errorMessage : "Convert to array error!"); + } + + @Override + public Operand toArray(String errorMessage, Object... args) { + if (value.isArray()) { + List list = new ArrayList<>(); + for (JsonData v : value.getArray()) { + if (v.isString()) { + list.add(Operand.create(v.getString())); + } else if (v.isBoolean()) { + list.add(Operand.create(v.getBoolean())); + } else if (v.isNumber()) { + list.add(Operand.create(new BigDecimal(v.getNumber().toString()))); + } else if (v.isNull()) { + list.add(Operand.createNull()); + } else { + list.add(Operand.create(v)); + } + } + return Operand.create(list); + } + return error(String.format(errorMessage, args)); + } + + @Override + public Operand toJson(String errorMessage) { + return this; + } + + @Override + public String toString() { + return value.toString(); + } +} + +class OperandArray extends Operand { + private final List value; + + public OperandArray(List obj) { + value = obj; + } + + @Override + public boolean isArray() { return true; } + + @Override + public boolean isNotArray() { return false; } + + @Override + public OperandType getType() { return OperandType.ARRARY; } + + @Override + public List getArrayValue() { return value; } + + @Override + public Operand toText(String errorMessage) { + return create(this.toString()); + } + + @Override + public Operand toText(String errorMessage, Object... args) { + return create(this.toString()); + } + + @Override + public Operand toArray(String errorMessage) { return this; } + + @Override + public Operand toArray(String errorMessage, Object... args) { return this; } + + @Override + public Operand toJson(String errorMessage) { + String txt = this.toString(); + try { + JsonData json = JsonData.parse(txt); + return Operand.create(json); + } catch (Exception e) { + return error(errorMessage != null ? errorMessage : "Convert to json error!"); + } + } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append('['); + for (int i = 0; i < value.size(); i++) { + if (i > 0) { + stringBuilder.append(','); + } + stringBuilder.append(value.get(i).toString()); + } + stringBuilder.append(']'); + return stringBuilder.toString(); + } +} + +class OperandError extends Operand { + private final String errorMsg; + + public OperandError(String msg) { + errorMsg = msg; + } + + @Override + public OperandType getType() { return OperandType.ERROR; } + + @Override + public boolean isError() { return true; } + + @Override + public String getErrorMsg() { return errorMsg; } + + @Override + public Operand toNumber(String errorMessage) { return this; } + + @Override + public Operand toNumber(String errorMessage, Object... args) { return this; } + + @Override + public Operand toBoolean(String errorMessage) { return this; } + + @Override + public Operand toBoolean(String errorMessage, Object... args) { return this; } + + @Override + public Operand toText(String errorMessage) { return this; } + + @Override + public Operand toText(String errorMessage, Object... args) { return this; } + + @Override + public Operand toArray(String errorMessage) { return this; } + + @Override + public Operand toArray(String errorMessage, Object... args) { return this; } + + @Override + public Operand toMyDate(String errorMessage) { return this; } + + @Override + public Operand toMyDate(String errorMessage, Object... args) { return this; } +} + +class OperandNull extends Operand { + @Override + public boolean isNull() { return true; } + + @Override + public boolean isNotNull() { return false; } + + @Override + public OperandType getType() { return OperandType.NULL; } + + @Override + public String toString() { return "null"; } +} + +class KeyValue { + public String key; + public Operand value; +} + +class OperandKeyValueList extends Operand { + private final List textList; + + public OperandKeyValueList() { + textList = new ArrayList<>(); + } + + @Override + public boolean isArrayJson() { return true; } + + @Override + public boolean isNotArrayJson() { return false; } + + @Override + public OperandType getType() { return OperandType.ARRARYJSON; } + + @Override + public List getArrayValue() { + List result = new ArrayList<>(); + for (KeyValue kv : textList) { + result.add(kv.value); + } + return result; + } + + @Override + public Operand toText(String errorMessage) { + return create(this.toString()); + } + + @Override + public Operand toText(String errorMessage, Object... args) { + return create(this.toString()); + } + + @Override + public Operand toArray(String errorMessage) { + return create(this.getArrayValue()); + } + + @Override + public Operand toArray(String errorMessage, Object... args) { + return create(this.getArrayValue()); + } + + @Override + public Operand toJson(String errorMessage) { + String txt = this.toString(); + try { + JsonData json = JsonData.parse(txt); + return Operand.create(json); + } catch (Exception e) { + return error(errorMessage != null ? errorMessage : "Convert to json error!"); + } + } + + public void addValue(KeyValue keyValue) { + textList.add(keyValue); + } + + public boolean tryGetValue(String key, Operand[] value) { + for (KeyValue item : textList) { + if (item.key.equals(key)) { + value[0] = item.value; + return true; + } + } + return false; + } + + public boolean containsKey(Operand value) { + for (KeyValue item : textList) { + if (value.getTextValue().equals(item.key)) { + return true; + } + } + return false; + } + + public boolean containsValue(Operand value) { + for (KeyValue item : textList) { + Operand op = item.value; + if (value.getType() != op.getType()) { + continue; + } + if (value.isText()) { + if (value.getTextValue().equals(op.getTextValue())) { + return true; + } + } + } + return false; + } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append('{'); + for (int i = 0; i < textList.size(); i++) { + if (i > 0) { + stringBuilder.append(','); + } + stringBuilder.append('"'); + stringBuilder.append(textList.get(i).key); + stringBuilder.append('"'); + stringBuilder.append(':'); + stringBuilder.append(textList.get(i).value.toString()); + } + stringBuilder.append('}'); + return stringBuilder.toString(); + } +} + +class OperandKeyValue extends Operand { + private final KeyValue value; + + public OperandKeyValue(KeyValue obj) { + value = obj; + } + + @Override + public boolean isArrayJson() { return true; } + + @Override + public boolean isNotArrayJson() { return false; } + + @Override + public OperandType getType() { return OperandType.ARRARYJSON; } + + public KeyValue getValue() { return value; } +} + +#endregion diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java new file mode 100644 index 000000000..3d8262ee6 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java @@ -0,0 +1,39 @@ +/** + * 计算树类型 + */ +package toolgood.algorithm.enums; + +public enum CalculateTreeType { + /** + * 文本 + */ + String, + /** + * 加 + */ + Add, + /** + * 减 + */ + Sub, + /** + * 乘 + */ + Mul, + /** + * 除 + */ + Div, + /** + * 求模 + */ + Mod, + /** + * 连接 + */ + Connect, + /** + * 错误 + */ + Error +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/CalculateTree.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/CalculateTree.java new file mode 100644 index 000000000..cac917aa0 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/CalculateTree.java @@ -0,0 +1,90 @@ +/** + * 计算树 + */ +package toolgood.algorithm.internals; + +import java.util.ArrayList; +import java.util.List; +import toolgood.algorithm.enums.CalculateTreeType; + +public final class CalculateTree { + /** + * 子节点 + */ + private List nodes; + /** + * 开始位置 + */ + private int start; + + /** + * 结束位置 + */ + private int end; + + /** + * 类型 + */ + private CalculateTreeType type; + + /** + * 条件 + */ + private String conditionString; + + /** + * 出错信息 + */ + private String errorMessage; + + CalculateTree() { + } + + public List getNodes() { + return nodes; + } + + void setNodes(List nodes) { + this.nodes = nodes; + } + + public int getStart() { + return start; + } + + void setStart(int start) { + this.start = start; + } + + public int getEnd() { + return end; + } + + void setEnd(int end) { + this.end = end; + } + + public CalculateTreeType getType() { + return type; + } + + void setType(CalculateTreeType type) { + this.type = type; + } + + public String getConditionString() { + return conditionString; + } + + void setConditionString(String conditionString) { + this.conditionString = conditionString; + } + + public String getErrorMessage() { + return errorMessage; + } + + void setErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java new file mode 100644 index 000000000..02d4ee120 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java @@ -0,0 +1,82 @@ +/** + * 自定义类型 + */ +package toolgood.algorithm.internals; + +import java.util.ArrayList; +import java.util.List; + +public final class DiyNameInfo { + /** + * 自定义 参数 + */ + private final List parameters; + + /** + * 自定义方法 + */ + private final List functions; + + /** + * 自定义类型 + */ + DiyNameInfo() { + parameters = new ArrayList<>(); + functions = new ArrayList<>(); + } + + public List getParameters() { + return parameters; + } + + public List getFunctions() { + return functions; + } + + /** + * 关键字信息 + */ + public class KeyInfo { + /** + * 名称 + */ + private String name; + /** + * 开始位置 + */ + private int start; + /** + * 结束位置 + */ + private int end; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getStart() { + return start; + } + + public void setStart(int start) { + this.start = start; + } + + public int getEnd() { + return end; + } + + public void setEnd(int end) { + this.end = end; + } + + @Override + public String toString() { + return name; + } + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/FunctionBase.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/FunctionBase.java new file mode 100644 index 000000000..2163d6e35 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/FunctionBase.java @@ -0,0 +1,265 @@ +/** + * Represents the base class for all function implementations that can be calculated by an algorithm engine. + *

+ * This abstract class defines a contract for functions that can be evaluated within the context + * of an algorithm engine. Derived classes must implement the {@link #evaluate} method to provide specific + * function logic. + */ +package toolgood.algorithm.internals.functions; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; + +public abstract class FunctionBase { + /** + * 进行计算 + * + * @param work + * @param tempParameter 临时参数,未找到返回null + * @return + */ + public abstract Operand evaluate(AlgorithmEngine work, Function tempParameter); + + //region TryEvaluate + + /** + * 执行函数,如果异常,返回默认值 + * + * @param work + * @param def + * @param tempParameter + * @return + */ + public short tryEvaluate(AlgorithmEngine work, short def, Function tempParameter) { + try { + Operand obj = this.evaluate(work, tempParameter); + if (!obj.isNumber()) { + obj = obj.toNumber("It can't be converted to number!"); + if (obj.isError()) { + work.setLastError(obj.getErrorMsg()); + return def; + } + } + return (short) obj.getIntValue(); + } catch (Exception ex) { + work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + * + * @param work + * @param def + * @param tempParameter + * @return + */ + public int tryEvaluate(AlgorithmEngine work, int def, Function tempParameter) { + try { + Operand obj = this.evaluate(work, tempParameter); + if (!obj.isNumber()) { + obj = obj.toNumber("It can't be converted to number!"); + if (obj.isError()) { + work.setLastError(obj.getErrorMsg()); + return def; + } + } + return obj.getIntValue(); + } catch (Exception ex) { + work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + * + * @param work + * @param def + * @param tempParameter + * @return + */ + public long tryEvaluate(AlgorithmEngine work, long def, Function tempParameter) { + try { + Operand obj = this.evaluate(work, tempParameter); + if (!obj.isNumber()) { + obj = obj.toNumber("It can't be converted to number!"); + if (obj.isError()) { + work.setLastError(obj.getErrorMsg()); + return def; + } + } + return obj.getLongValue(); + } catch (Exception ex) { + work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + * + * @param work + * @param def + * @param tempParameter + * @return + */ + public float tryEvaluate(AlgorithmEngine work, float def, Function tempParameter) { + try { + Operand obj = this.evaluate(work, tempParameter); + if (!obj.isNumber()) { + obj = obj.toNumber("It can't be converted to number!"); + if (obj.isError()) { + work.setLastError(obj.getErrorMsg()); + return def; + } + } + return (float) obj.getDoubleValue(); + } catch (Exception ex) { + work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + * + * @param work + * @param def + * @param tempParameter + * @return + */ + public double tryEvaluate(AlgorithmEngine work, double def, Function tempParameter) { + try { + Operand obj = this.evaluate(work, tempParameter); + if (!obj.isNumber()) { + obj = obj.toNumber("It can't be converted to number!"); + if (obj.isError()) { + work.setLastError(obj.getErrorMsg()); + return def; + } + } + return obj.getDoubleValue(); + } catch (Exception ex) { + work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + * + * @param work + * @param def + * @param tempParameter + * @return + */ + public String tryEvaluate(AlgorithmEngine work, String def, Function tempParameter) { + try { + Operand obj = this.evaluate(work, tempParameter); + if (!obj.isText()) { + obj = obj.toText("It can't be converted to string!"); + if (obj.isError()) { + work.setLastError(obj.getErrorMsg()); + return def; + } + } + return obj.getTextValue(); + } catch (Exception ex) { + work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + * + * @param work + * @param def + * @param tempParameter + * @return + */ + public boolean tryEvaluate(AlgorithmEngine work, boolean def, Function tempParameter) { + try { + Operand obj = this.evaluate(work, tempParameter); + if (!obj.isBoolean()) { + obj = obj.toBoolean("It can't be converted to bool!"); + if (obj.isError()) { + work.setLastError(obj.getErrorMsg()); + return def; + } + } + return obj.getBooleanValue(); + } catch (Exception ex) { + work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值。 + * 解决 def 为 null 二义性问题 + * + * @param work + * @param def + * @param tempParameter + * @return + */ + public MyDate tryEvaluate_MyDate(AlgorithmEngine work, MyDate def, Function tempParameter) { + try { + Operand obj = this.evaluate(work, tempParameter); + if (!obj.isDate()) { + obj = obj.toMyDate("It can't be converted to DateTime!"); + if (obj.isError()) { + work.setLastError(obj.getErrorMsg()); + return def; + } + } + return obj.getDateValue(); + } catch (Exception ex) { + work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + } + return def; + } + + //endregion TryEvaluate + + /** + * Returns a string that represents the current object. + * + * @return A string that represents the current object. + */ + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(); + toString(stringBuilder, false); + return stringBuilder.toString(); + } + + /** + * Appends a string representation of the current object to the specified StringBuilder, optionally including + * brackets. + * + * @param stringBuilder The StringBuilder to which the string representation will be appended. Cannot be null. + * @param addBrackets true to enclose the string representation in brackets; otherwise, false. + */ + public abstract void toString(StringBuilder stringBuilder, boolean addBrackets); + + /** + * 获取异常堆栈信息 + * + * @param ex 异常 + * @return 堆栈信息字符串 + */ + private String getStackTrace(Exception ex) { + StringBuilder sb = new StringBuilder(); + for (StackTraceElement element : ex.getStackTrace()) { + sb.append(element.toString()).append("\r\n"); + } + return sb.toString(); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/FunctionUtil.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/FunctionUtil.java new file mode 100644 index 000000000..e981639c6 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/FunctionUtil.java @@ -0,0 +1,367 @@ +package toolgood.algorithm.internals.functions; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.function.Predicate; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.Visitors.CharUtil; + +public class FunctionUtil { + public static final long START_DATE_UTC = 0; // 1970-01-01 00:00:00 UTC in milliseconds + + public static boolean F_base_GetList(List args, List list) { + for (Operand item : args) { + if (item.isNumber()) { + list.add(item.getDoubleValue()); + } else if (item.isArray()) { + boolean o = F_base_GetList(item.getArrayValue(), list); + if (!o) { + return false; + } + } else if (item.isJson()) { + Operand i = item.toArray(null); + if (i.isError()) { + return false; + } + boolean o = F_base_GetList(i.getArrayValue(), list); + if (!o) { + return false; + } + } else { + Operand o = item.toNumber(null); + if (o.isError()) { + return false; + } + list.add(o.getDoubleValue()); + } + } + return true; + } + + public static boolean F_base_GetList(Operand args, List list) { + if (args.isError()) { + return false; + } + if (args.isNumber()) { + list.add(args.getDoubleValue()); + } else if (args.isArray()) { + boolean o = F_base_GetList(args.getArrayValue(), list); + if (!o) { + return false; + } + } else if (args.isJson()) { + Operand i = args.toArray(null); + if (i.isError()) { + return false; + } + boolean o = F_base_GetList(i.getArrayValue(), list); + if (!o) { + return false; + } + } else { + Operand o = args.toNumber(null); + if (o.isError()) { + return false; + } + list.add(o.getDoubleValue()); + } + return true; + } + + public static boolean F_base_GetList(List args, List list) { + for (Operand item : args) { + if (item.isArray()) { + boolean o = F_base_GetList(item.getArrayValue(), list); + if (!o) { + return false; + } + } else if (item.isJson()) { + Operand i = item.toArray(null); + if (i.isError()) { + return false; + } + boolean o = F_base_GetList(i.getArrayValue(), list); + if (!o) { + return false; + } + } else { + Operand o = item.toText(null); + if (o.isError()) { + return false; + } + list.add(o.getTextValue()); + } + } + return true; + } + + public static boolean F_base_GetList(Operand args, List list) { + if (args.isError()) { + return false; + } + if (args.isArray()) { + boolean o = F_base_GetList(args.getArrayValue(), list); + if (!o) { + return false; + } + } else if (args.isJson()) { + Operand i = args.toArray(null); + if (i.isError()) { + return false; + } + boolean o = F_base_GetList(i.getArrayValue(), list); + if (!o) { + return false; + } + } else { + Operand o = args.toText(null); + if (o.isError()) { + return false; + } + list.add(o.getTextValue()); + } + return true; + } + + public static int F_base_countif(List dbs, double d) { + int count = 0; + for (double item : dbs) { + if (item == d) { + count++; + } + } + return count; + } + + public static int F_base_countif(List dbs, String s, double d) { + int count = 0; + for (double item : dbs) { + if (F_base_compare(item, d, s)) { + count++; + } + } + return count; + } + + public static double F_base_sumif(List dbs, double d, List sumdbs) { + double sum = 0; + for (int i = 0; i < dbs.size(); i++) { + double item = dbs.get(i); + if (item == d) { + sum += sumdbs.get(i); + } + } + return sum; + } + + public static double F_base_sumif(List dbs, String s, double d, List sumdbs) { + double sum = 0; + for (int i = 0; i < dbs.size(); i++) { + if (F_base_compare(dbs.get(i), d, s)) { + sum += sumdbs.get(i); + } + } + return sum; + } + + public static boolean F_base_compare(double a, double b, String ss) { + if (CharUtil.equals(ss, "<")) { + return a < b; + } else if (CharUtil.equals(ss, "<=")) { + return a <= b; + } else if (CharUtil.equals(ss, ">")) { + return a > b; + } else if (CharUtil.equals(ss, ">=")) { + return a >= b; + } else if (CharUtil.equals(ss, "=") || CharUtil.equals(ss, "==") || CharUtil.equals(ss, "===")) { + return a == b; + } + return a != b; + } + + public static int F_base_gcd(List list) { + List sortedList = new ArrayList<>(list); + Collections.sort(sortedList); + int g = F_base_gcd((int) sortedList.get(1).doubleValue(), (int) sortedList.get(0).doubleValue()); + for (int i = 2; i < sortedList.size(); i++) { + g = F_base_gcd((int) sortedList.get(i).doubleValue(), g); + } + return g; + } + + public static int F_base_gcd(int a, int b) { + if (b == 1) { + return 1; + } + if (b == 0) { + return a; + } + return F_base_gcd(b, a % b); + } + + public static int F_base_lgm(List list) { + List sortedList = new ArrayList<>(list); + Collections.sort(sortedList); + sortedList.removeIf(d -> d <= 1); + + int a = (int) sortedList.get(0).doubleValue(); + for (int i = 1; i < sortedList.size(); i++) { + int b = (int) sortedList.get(i).doubleValue(); + int g = b > a ? F_base_gcd(b, a) : F_base_gcd(a, b); + a = a / g * b; + } + return a; + } + + public static int F_base_Factorial(int a) { + if (a <= 0) { + return 1; + } + int r = 1; + for (int i = a; i > 0; i--) { + r *= i; + } + return r; + } + + public static Pair sumifMatch(String s) { + if (s == null || s.isEmpty()) { + return null; + } + char c = s.charAt(0); + if (c == '>' || c == '>') { + if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '=')) { + try { + double d = Double.parseDouble(s.substring(2).trim()); + return new Pair<>(">=", d); + } catch (NumberFormatException e) { + return null; + } + } else { + try { + double d = Double.parseDouble(s.substring(1).trim()); + return new Pair<>(">", d); + } catch (NumberFormatException e) { + return null; + } + } + } else if (c == '<' || c == '<') { + if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '=')) { + try { + double d = Double.parseDouble(s.substring(2).trim()); + return new Pair<>("<=", d); + } catch (NumberFormatException e) { + return null; + } + } else if (s.length() > 1 && (s.charAt(1) == '>' || s.charAt(1) == '>')) { + try { + double d = Double.parseDouble(s.substring(2).trim()); + return new Pair<>("!=", d); + } catch (NumberFormatException e) { + return null; + } + } else { + try { + double d = Double.parseDouble(s.substring(1).trim()); + return new Pair<>("<", d); + } catch (NumberFormatException e) { + return null; + } + } + } else if (c == '=' || c == '=') { + int index = 1; + if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '=')) { + index = 2; + if (s.length() > 2 && (s.charAt(2) == '=' || s.charAt(2) == '=')) { + index = 3; + } + } + try { + double d = Double.parseDouble(s.substring(index).trim()); + return new Pair<>("=", d); + } catch (NumberFormatException e) { + return null; + } + } else if (c == '!' || c == '!') { + int index = 1; + if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '=')) { + index = 2; + if (s.length() > 2 && (s.charAt(2) == '=' || s.charAt(2) == '=')) { + index = 3; + } + } + try { + double d = Double.parseDouble(s.substring(index).trim()); + return new Pair<>("!=", d); + } catch (NumberFormatException e) { + return null; + } + } + return null; + } + + public static int Compare(double t1, double t2) { + double b = t1 - t2; + if (b == 0) { + return 0; + } else if (b > 0) { + return 1; + } + return -1; + } + + public static boolean tryParseBoolean(String textValue, BooleanHolder boolValue) { + if (textValue.equalsIgnoreCase("true")) { + boolValue.value = true; + return true; + } + if (textValue.equalsIgnoreCase("false")) { + boolValue.value = false; + return true; + } + if (textValue.equalsIgnoreCase("yes")) { + boolValue.value = true; + return true; + } + if (textValue.equalsIgnoreCase("no")) { + boolValue.value = false; + return true; + } + if (textValue.equals("1") || textValue.equals("是") || textValue.equals("有")) { + boolValue.value = true; + return true; + } + if (textValue.equals("0") || textValue.equals("否") || textValue.equals("不是") || textValue.equals("无") || textValue.equals("没有")) { + boolValue.value = false; + return true; + } + boolValue.value = false; + return false; + } + + // 辅助类,用于在tryParseBoolean中返回布尔值 + public static class BooleanHolder { + public boolean value; + } + + // 辅助类,用于替代Tuple + public static class Pair { + private final F first; + private final S second; + + public Pair(F first, S second) { + this.first = first; + this.second = second; + } + + public F getFirst() { + return first; + } + + public S getSecond() { + return second; + } + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_1.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_1.java new file mode 100644 index 000000000..b7692c15d --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_1.java @@ -0,0 +1,18 @@ +package toolgood.algorithm.internals.functions; + +import java.lang.StringBuilder; + +abstract class Function_1 extends FunctionBase { + protected FunctionBase func1; + + protected Function_1(FunctionBase func1) { + this.func1 = func1; + } + + protected void addFunction(StringBuilder stringBuilder, String functionName) { + stringBuilder.append(functionName); + stringBuilder.append('('); + func1.toString(stringBuilder, false); + stringBuilder.append(')'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_2.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_2.java new file mode 100644 index 000000000..7284cc8fe --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_2.java @@ -0,0 +1,24 @@ +package toolgood.algorithm.internals.functions; + +import java.lang.StringBuilder; + +abstract class Function_2 extends FunctionBase { + protected FunctionBase func1; + protected FunctionBase func2; + + public Function_2(FunctionBase func1, FunctionBase func2) { + this.func1 = func1; + this.func2 = func2; + } + + protected void addFunction(StringBuilder stringBuilder, String functionName) { + stringBuilder.append(functionName); + stringBuilder.append('('); + func1.toString(stringBuilder, false); + if (func2 != null) { + stringBuilder.append(", "); + func2.toString(stringBuilder, false); + } + stringBuilder.append(')'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_3.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_3.java new file mode 100644 index 000000000..75c8e0f0c --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_3.java @@ -0,0 +1,30 @@ +package toolgood.algorithm.internals.functions; + +import java.lang.StringBuilder; + +abstract class Function_3 extends FunctionBase { + protected FunctionBase func1; + protected FunctionBase func2; + protected FunctionBase func3; + + protected Function_3(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + this.func1 = func1; + this.func2 = func2; + this.func3 = func3; + } + + protected void addFunction(StringBuilder stringBuilder, String functionName) { + stringBuilder.append(functionName); + stringBuilder.append('('); + func1.toString(stringBuilder, false); + if (func2 != null) { + stringBuilder.append(", "); + func2.toString(stringBuilder, false); + if (func3 != null) { + stringBuilder.append(", "); + func3.toString(stringBuilder, false); + } + } + stringBuilder.append(')'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_4.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_4.java new file mode 100644 index 000000000..559fa34e6 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_4.java @@ -0,0 +1,36 @@ +package toolgood.algorithm.internals.functions; + +import java.lang.StringBuilder; + +abstract class Function_4 extends FunctionBase { + protected FunctionBase func1; + protected FunctionBase func2; + protected FunctionBase func3; + protected FunctionBase func4; + + protected Function_4(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { + this.func1 = func1; + this.func2 = func2; + this.func3 = func3; + this.func4 = func4; + } + + protected void addFunction(StringBuilder stringBuilder, String functionName) { + stringBuilder.append(functionName); + stringBuilder.append('('); + func1.toString(stringBuilder, false); + if (func2 != null) { + stringBuilder.append(", "); + func2.toString(stringBuilder, false); + if (func3 != null) { + stringBuilder.append(", "); + func3.toString(stringBuilder, false); + if (func4 != null) { + stringBuilder.append(", "); + func4.toString(stringBuilder, false); + } + } + } + stringBuilder.append(')'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_N.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_N.java new file mode 100644 index 000000000..6f65f0957 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_N.java @@ -0,0 +1,23 @@ +package toolgood.algorithm.internals.functions; + +import java.lang.StringBuilder; + +abstract class Function_N extends FunctionBase { + protected FunctionBase[] funcs; + + protected Function_N(FunctionBase[] funcs) { + this.funcs = funcs; + } + + protected void addFunction(StringBuilder stringBuilder, String functionName) { + stringBuilder.append(functionName); + stringBuilder.append('('); + for (int i = 0; i < funcs.length; i++) { + if (i > 0) { + stringBuilder.append(", "); + } + funcs[i].toString(stringBuilder, false); + } + stringBuilder.append(')'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_EQ.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_EQ.java new file mode 100644 index 000000000..525d0309f --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_EQ.java @@ -0,0 +1,71 @@ +package toolgood.algorithm.internals.functions.compare; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_EQ extends Function_2 { + public Function_EQ(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); if(args1.isError()) { return args1; } + Operand args2 = func2.evaluate(work, tempParameter); if(args2.isError()) { return args2; } + + if(args1.getType() == args2.getType()) { + if(args1.isNumber()) { + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) == 0); + } else if(args1.isText()) { + return Operand.create(args1.getTextValue().equals(args2.getTextValue())); + } else if(args1.isBoolean()) { + return Operand.create(args1.getBooleanValue() == args2.getBooleanValue()); + } else if(args1.isDate()) { + args1 = args1.toNumber(null); + args2 = args2.toNumber(null); + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) == 0); + } else if(args1.isJson()) { + args1 = args1.toText(null); + args2 = args2.toText(null); + return Operand.create(args1.getTextValue().equals(args2.getTextValue())); + } else if(args1.isNull()) { + return Operand.TRUE; + } else { + return Operand.error("Function '{0}' compare is error.", "=="); + } + } else if(args1.isNull() || args2.isNull()) { + return Operand.FALSE; + } else if(args2.isText()) { + if(args1.isBoolean()) { + Operand a = args2.toBoolean(null); + if(!a.isError()) { + return a.getBooleanValue() == args1.getBooleanValue() ? Operand.TRUE : Operand.FALSE; + } + args1 = args1.toText(null); + return Operand.create(args1.getTextValue().equals(args2.getTextValue())); + } else if(args1.isDate() || args1.isNumber() || args1.isJson()) { + args1 = args1.toText(null); + return Operand.create(args1.getTextValue().equals(args2.getTextValue())); + } else { + return Operand.error("Function '{0}' compare is error.", "=="); + } + } else if(args1.isJson() || args2.isJson() || args1.isArray() || args2.isArray() || args1.isArrayJson() || args2.isArrayJson()) { + return Operand.error("Function '{0}' compare is error.", "=="); + } + if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "==", 1); if(args1.isError()) { return args1; } } + if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "==", 2); if(args2.isError()) { return args2; } } + + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) == 0); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + if(addBrackets) stringBuilder.append('('); + func1.toString(stringBuilder, false); + stringBuilder.append(" == "); + func2.toString(stringBuilder, false); + if(addBrackets) stringBuilder.append(')'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GE.java new file mode 100644 index 000000000..c7151e60e --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GE.java @@ -0,0 +1,73 @@ +package toolgood.algorithm.internals.functions.compare; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_GE extends Function_2 { + public Function_GE(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); if(args1.isError()) { return args1; } + Operand args2 = func2.evaluate(work, tempParameter); if(args2.isError()) { return args2; } + + if(args1.getType() == args2.getType()) { + if(args1.isNumber()) { + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); + } else if(args1.isText()) { + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r >= 0 ? Operand.TRUE : Operand.FALSE; + } else if(args1.isDate() || args1.isBoolean()) { + args1 = args1.toNumber(null); + args2 = args2.toNumber(null); + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); + } else if(args1.isJson()) { + args1 = args1.toText(null); + args2 = args2.toText(null); + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r >= 0 ? Operand.TRUE : Operand.FALSE; + } else if(args1.isNull()) { + return Operand.TRUE; + } else { + return Operand.error("Function '{0}' compare is error.", ">="); + } + } else if(args1.isNull() || args2.isNull()) { + return Operand.FALSE; + } else if(args2.isText()) { + if(args1.isBoolean()) { + Operand a = args2.toBoolean(null); + if(!a.isError()) { + return a.getBooleanValue() != args1.getBooleanValue() ? Operand.TRUE : Operand.FALSE; + } + args1 = args1.toText(null); + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r >= 0 ? Operand.TRUE : Operand.FALSE; + } else if(args1.isDate() || args1.isNumber() || args1.isJson()) { + args1 = args1.toText(null); + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r >= 0 ? Operand.TRUE : Operand.FALSE; + } else { + return Operand.error("Function '{0}' compare is error.", ">="); + } + } else if(args1.isJson() || args2.isJson() || args1.isArray() || args2.isArray() || args1.isArrayJson() || args2.isArrayJson()) { + return Operand.error("Function '{0}' compare is error.", ">="); + } + if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", ">=", 1); if(args1.isError()) { return args1; } } + if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", ">=", 2); if(args2.isError()) { return args2; } } + + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + if(addBrackets) stringBuilder.append('('); + func1.toString(stringBuilder, false); + stringBuilder.append(" >= "); + func2.toString(stringBuilder, false); + if(addBrackets) stringBuilder.append(')'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GT.java new file mode 100644 index 000000000..492e00794 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GT.java @@ -0,0 +1,73 @@ +package toolgood.algorithm.internals.functions.compare; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_GT extends Function_2 { + public Function_GT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); if(args1.isError()) { return args1; } + Operand args2 = func2.evaluate(work, tempParameter); if(args2.isError()) { return args2; } + + if(args1.getType() == args2.getType()) { + if(args1.isNumber()) { + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); + } else if(args1.isText()) { + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r > 0 ? Operand.TRUE : Operand.FALSE; + } else if(args1.isDate() || args1.isBoolean()) { + args1 = args1.toNumber(null); + args2 = args2.toNumber(null); + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); + } else if(args1.isJson()) { + args1 = args1.toText(null); + args2 = args2.toText(null); + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r > 0 ? Operand.TRUE : Operand.FALSE; + } else if(args1.isNull()) { + return Operand.TRUE; + } else { + return Operand.error("Function '{0}' compare is error.", ">"); + } + } else if(args1.isNull() || args2.isNull()) { + return Operand.FALSE; + } else if(args2.isText()) { + if(args1.isBoolean()) { + Operand a = args2.toBoolean(null); + if(!a.isError()) { + return a.getBooleanValue() != args1.getBooleanValue() ? Operand.TRUE : Operand.FALSE; + } + args1 = args1.toText(null); + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r > 0 ? Operand.TRUE : Operand.FALSE; + } else if(args1.isDate() || args1.isNumber() || args1.isJson()) { + args1 = args1.toText(null); + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r > 0 ? Operand.TRUE : Operand.FALSE; + } else { + return Operand.error("Function '{0}' compare is error.", ">"); + } + } else if(args1.isJson() || args2.isJson() || args1.isArray() || args2.isArray() || args1.isArrayJson() || args2.isArrayJson()) { + return Operand.error("Function '{0}' compare is error.", ">"); + } + if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", ">", 1); if(args1.isError()) { return args1; } } + if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", ">", 2); if(args2.isError()) { return args2; } } + + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + if(addBrackets) stringBuilder.append('('); + func1.toString(stringBuilder, false); + stringBuilder.append(" > "); + func2.toString(stringBuilder, false); + if(addBrackets) stringBuilder.append(')'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LE.java new file mode 100644 index 000000000..b63bf2cd9 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LE.java @@ -0,0 +1,73 @@ +package toolgood.algorithm.internals.functions.compare; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_LE extends Function_2 { + public Function_LE(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); if(args1.isError()) { return args1; } + Operand args2 = func2.evaluate(work, tempParameter); if(args2.isError()) { return args2; } + + if(args1.getType() == args2.getType()) { + if(args1.isNumber()) { + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) <= 0); + } else if(args1.isText()) { + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r <= 0 ? Operand.TRUE : Operand.FALSE; + } else if(args1.isDate() || args1.isBoolean()) { + args1 = args1.toNumber(null); + args2 = args2.toNumber(null); + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) <= 0); + } else if(args1.isJson()) { + args1 = args1.toText(null); + args2 = args2.toText(null); + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r <= 0 ? Operand.TRUE : Operand.FALSE; + } else if(args1.isNull()) { + return Operand.TRUE; + } else { + return Operand.error("Function '{0}' compare is error.", "<="); + } + } else if(args1.isNull() || args2.isNull()) { + return Operand.FALSE; + } else if(args2.isText()) { + if(args1.isBoolean()) { + Operand a = args2.toBoolean(null); + if(!a.isError()) { + return a.getBooleanValue() != args1.getBooleanValue() ? Operand.TRUE : Operand.FALSE; + } + args1 = args1.toText(null); + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r <= 0 ? Operand.TRUE : Operand.FALSE; + } else if(args1.isDate() || args1.isNumber() || args1.isJson()) { + args1 = args1.toText(null); + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r <= 0 ? Operand.TRUE : Operand.FALSE; + } else { + return Operand.error("Function '{0}' compare is error.", "<="); + } + } else if(args1.isJson() || args2.isJson() || args1.isArray() || args2.isArray() || args1.isArrayJson() || args2.isArrayJson()) { + return Operand.error("Function '{0}' compare is error.", "<="); + } + if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "<=", 1); if(args1.isError()) { return args1; } } + if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "<=", 2); if(args2.isError()) { return args2; } } + + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) <= 0); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + if(addBrackets) stringBuilder.append('('); + func1.toString(stringBuilder, false); + stringBuilder.append(" <= "); + func2.toString(stringBuilder, false); + if(addBrackets) stringBuilder.append(')'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LT.java new file mode 100644 index 000000000..c7563d831 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LT.java @@ -0,0 +1,73 @@ +package toolgood.algorithm.internals.functions.compare; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_LT extends Function_2 { + public Function_LT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); if(args1.isError()) { return args1; } + Operand args2 = func2.evaluate(work, tempParameter); if(args2.isError()) { return args2; } + + if(args1.getType() == args2.getType()) { + if(args1.isNumber()) { + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) < 0); + } else if(args1.isText()) { + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r < 0 ? Operand.TRUE : Operand.FALSE; + } else if(args1.isDate() || args1.isBoolean()) { + args1 = args1.toNumber(null); + args2 = args2.toNumber(null); + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) < 0); + } else if(args1.isJson()) { + args1 = args1.toText(null); + args2 = args2.toText(null); + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r < 0 ? Operand.TRUE : Operand.FALSE; + } else if(args1.isNull()) { + return Operand.TRUE; + } else { + return Operand.error("Function '{0}' compare is error.", "<"); + } + } else if(args1.isNull() || args2.isNull()) { + return Operand.FALSE; + } else if(args2.isText()) { + if(args1.isBoolean()) { + Operand a = args2.toBoolean(null); + if(!a.isError()) { + return a.getBooleanValue() != args1.getBooleanValue() ? Operand.TRUE : Operand.FALSE; + } + args1 = args1.toText(null); + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r < 0 ? Operand.TRUE : Operand.FALSE; + } else if(args1.isDate() || args1.isNumber() || args1.isJson()) { + args1 = args1.toText(null); + int r = args1.getTextValue().compareTo(args2.getTextValue()); + return r < 0 ? Operand.TRUE : Operand.FALSE; + } else { + return Operand.error("Function '{0}' compare is error.", "<"); + } + } else if(args1.isJson() || args2.isJson() || args1.isArray() || args2.isArray() || args1.isArrayJson() || args2.isArrayJson()) { + return Operand.error("Function '{0}' compare is error.", "<"); + } + if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "<", 1); if(args1.isError()) { return args1; } } + if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "<", 2); if(args2.isError()) { return args2; } } + + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) < 0); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + if(addBrackets) stringBuilder.append('('); + func1.toString(stringBuilder, false); + stringBuilder.append(" < "); + func2.toString(stringBuilder, false); + if(addBrackets) stringBuilder.append(')'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_NE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_NE.java new file mode 100644 index 000000000..f1d0f0c06 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_NE.java @@ -0,0 +1,71 @@ +package toolgood.algorithm.internals.functions.compare; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_NE extends Function_2 { + public Function_NE(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); if(args1.isError()) { return args1; } + Operand args2 = func2.evaluate(work, tempParameter); if(args2.isError()) { return args2; } + + if(args1.getType() == args2.getType()) { + if(args1.isNumber()) { + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) != 0); + } else if(args1.isText()) { + return Operand.create(!args1.getTextValue().equals(args2.getTextValue())); + } else if(args1.isBoolean()) { + return Operand.create(args1.getBooleanValue() != args2.getBooleanValue()); + } else if(args1.isDate()) { + args1 = args1.toNumber(null); + args2 = args2.toNumber(null); + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) != 0); + } else if(args1.isJson()) { + args1 = args1.toText(null); + args2 = args2.toText(null); + return Operand.create(!args1.getTextValue().equals(args2.getTextValue())); + } else if(args1.isNull()) { + return Operand.FALSE; + } else { + return Operand.error("Function '{0}' compare is error.", "!="); + } + } else if(args1.isNull() || args2.isNull()) { + return Operand.TRUE; + } else if(args2.isText()) { + if(args1.isBoolean()) { + Operand a = args2.toBoolean(null); + if(!a.isError()) { + return a.getBooleanValue() != args1.getBooleanValue() ? Operand.TRUE : Operand.FALSE; + } + args1 = args1.toText(null); + return Operand.create(!args1.getTextValue().equals(args2.getTextValue())); + } else if(args1.isDate() || args1.isNumber() || args1.isJson()) { + args1 = args1.toText(null); + return Operand.create(!args1.getTextValue().equals(args2.getTextValue())); + } else { + return Operand.error("Function '{0}' compare is error.", "!="); + } + } else if(args1.isJson() || args2.isJson() || args1.isArray() || args2.isArray() || args1.isArrayJson() || args2.isArrayJson()) { + return Operand.error("Function '{0}' compare is error.", "!="); + } + if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "!=", 1); if(args1.isError()) { return args1; } } + if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "!=", 2); if(args2.isError()) { return args2; } } + + return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) != 0); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + if(addBrackets) stringBuilder.append('('); + func1.toString(stringBuilder, false); + stringBuilder.append(" != "); + func2.toString(stringBuilder, false); + if(addBrackets) stringBuilder.append(')'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ENDSWITH.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ENDSWITH.java new file mode 100644 index 000000000..8d7ec655e --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ENDSWITH.java @@ -0,0 +1,53 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_ENDSWITH extends Function_3 { + public Function_ENDSWITH(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "EndsWith", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "EndsWith", 2); + if (args2.IsError()) { + return args2; + } + } + String text = args1.getTextValue(); + if (func3 == null) { + return Operand.Create(text.endsWith(args2.getTextValue())); + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotBoolean()) { + args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "EndsWith", 3); + if (args3.IsError()) { + return args3; + } + } + if (args3.getBooleanValue()) { + return Operand.Create(text.toLowerCase().endsWith(args2.getTextValue().toLowerCase())); + } else { + return Operand.Create(text.endsWith(args2.getTextValue())); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "EndsWith"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_GUID.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_GUID.java new file mode 100644 index 000000000..8841835d3 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_GUID.java @@ -0,0 +1,23 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.UUID; +import java.util.function.Function; + +public class Function_GUID extends FunctionBase { + public Function_GUID() { + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + return Operand.Create(UUID.randomUUID().toString()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + stringBuilder.append("GUID()"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HAS.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HAS.java new file mode 100644 index 000000000..202fd474f --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HAS.java @@ -0,0 +1,57 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_HAS extends Function_2 { + public Function_HAS(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Has", 2); + if (args2.IsError()) { + return args2; + } + } + + if (args1.IsArrayJson()) { + return Operand.Create(((toolgood.algorithm.internals.OperandKeyValueList) args1).ContainsKey(args2)); + } else if (args1.IsJson()) { + Object json = args1.getJsonValue(); + // 这里需要根据实际的 JSON 实现进行调整 + // 假设使用了某种 JSON 库,如 Gson 或 Jackson + // 此处为简化实现,实际需要根据具体的 JSON 处理方式进行修改 + return Operand.False(); + } else if (args1.IsArray()) { + toolgood.algorithm.internals.OperandArray ar = (toolgood.algorithm.internals.OperandArray) args1; + for (Operand item : ar.getArrayValue()) { + Operand t = item.ToText(); + if (t.IsError()) { + continue; + } + if (t.getTextValue().equals(args2.getTextValue())) { + return Operand.True(); + } + } + return Operand.False(); + } + return Operand.Error("Function '{0}' parameter {1} is error!", "Has", 1); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Has"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HASVALUE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HASVALUE.java new file mode 100644 index 000000000..9c67e6ccf --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HASVALUE.java @@ -0,0 +1,57 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_HASVALUE extends Function_2 { + public Function_HASVALUE(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "HasValue", 2); + if (args2.IsError()) { + return args2; + } + } + + if (args1.IsArrayJson()) { + return Operand.Create(((toolgood.algorithm.internals.OperandKeyValueList) args1).ContainsValue(args2)); + } else if (args1.IsJson()) { + Object json = args1.getJsonValue(); + // 这里需要根据实际的 JSON 实现进行调整 + // 假设使用了某种 JSON 库,如 Gson 或 Jackson + // 此处为简化实现,实际需要根据具体的 JSON 处理方式进行修改 + return Operand.False(); + } else if (args1.IsArray()) { + toolgood.algorithm.internals.OperandArray ar = (toolgood.algorithm.internals.OperandArray) args1; + for (Operand item : ar.getArrayValue()) { + Operand t = item.ToText(); + if (t.IsError()) { + continue; + } + if (t.getTextValue().equals(args2.getTextValue())) { + return Operand.True(); + } + } + return Operand.False(); + } + return Operand.Error("Function '{0}' parameter {1} is error!", "HasValue", 1); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "HasValue"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_INDEXOF.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_INDEXOF.java new file mode 100644 index 000000000..9fcc86baa --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_INDEXOF.java @@ -0,0 +1,74 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_4; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_INDEXOF extends Function_4 { + public Function_INDEXOF(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { + super(func1, func2, func3, func4); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IndexOf", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "IndexOf", 2); + if (args2.IsError()) { + return args2; + } + } + String text = args1.getTextValue(); + if (func3 == null) { + return Operand.Create(text.indexOf(args2.getTextValue()) + work.getExcelIndex()); + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "IndexOf", 3); + if (args3.IsError()) { + return args3; + } + } + if (func4 == null) { + int startIndex = args3.getIntValue(); + if (startIndex >= text.length()) { + return Operand.Create(-1 + work.getExcelIndex()); + } + return Operand.Create(text.substring(startIndex).indexOf(args2.getTextValue()) + startIndex + work.getExcelIndex()); + } + Operand args4 = func4.Evaluate(work, tempParameter); + if (args4.IsNotNumber()) { + args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "IndexOf", 4); + if (args4.IsError()) { + return args4; + } + } + int startIndex = args3.getIntValue(); + int count = args4.getIntValue(); + if (startIndex >= text.length()) { + return Operand.Create(-1 + work.getExcelIndex()); + } + int endIndex = Math.min(startIndex + count, text.length()); + String substring = text.substring(startIndex, endIndex); + int result = substring.indexOf(args2.getTextValue()); + if (result == -1) { + return Operand.Create(-1 + work.getExcelIndex()); + } + return Operand.Create(result + startIndex + work.getExcelIndex()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IndexOf"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ISREGEX.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ISREGEX.java new file mode 100644 index 000000000..c2228a8c8 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ISREGEX.java @@ -0,0 +1,40 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; +import java.util.regex.Pattern; + +public class Function_ISREGEX extends Function_2 { + public Function_ISREGEX(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IsRegex", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "IsRegex", 2); + if (args2.IsError()) { + return args2; + } + } + boolean b = Pattern.matches(args2.getTextValue(), args1.getTextValue()); + return Operand.Create(b); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IsRegex"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_JOIN.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_JOIN.java new file mode 100644 index 000000000..c516b4f4f --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_JOIN.java @@ -0,0 +1,68 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +public class Function_JOIN extends Function_N { + public Function_JOIN(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + Operand args1 = args.get(0); + if (args1.IsJson()) { + Operand o = args1.ToArray(null); + if (!o.IsError()) { + args1 = o; + } + } + if (args1.IsArray()) { + List list = new ArrayList<>(); + boolean o = toolgood.algorithm.internals.FunctionUtil.F_base_GetList(args1, list); + if (!o) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Join", 1); + } + + Operand args2 = args.get(1).ToText("Function '{0}' parameter {1} is error!", "Join", 2); + if (args2.IsError()) { + return args2; + } + + return Operand.Create(String.join(args2.getTextValue(), list)); + } else { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Join", 1); + if (args1.IsError()) { + return args1; + } + + List list = new ArrayList<>(); + for (int i = 1; i < args.size(); i++) { + boolean o = toolgood.algorithm.internals.FunctionUtil.F_base_GetList(args.get(i), list); + if (!o) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Join", i + 1); + } + } + return Operand.Create(String.join(args1.getTextValue(), list)); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Join"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LASTINDEXOF.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LASTINDEXOF.java new file mode 100644 index 000000000..ea28a5ad2 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LASTINDEXOF.java @@ -0,0 +1,72 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_4; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_LASTINDEXOF extends Function_4 { + public Function_LASTINDEXOF(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { + super(func1, func2, func3, func4); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "LastIndexOf", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "LastIndexOf", 2); + if (args2.IsError()) { + return args2; + } + } + String text = args1.getTextValue(); + if (func3 == null) { + return Operand.Create(text.lastIndexOf(args2.getTextValue()) + work.getExcelIndex()); + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LastIndexOf", 3); + if (args3.IsError()) { + return args3; + } + } + if (func4 == null) { + int endIndex = args3.getIntValue(); + if (endIndex < 0) { + return Operand.Create(-1 + work.getExcelIndex()); + } + endIndex = Math.min(endIndex, text.length()); + return Operand.Create(text.substring(0, endIndex).lastIndexOf(args2.getTextValue()) + work.getExcelIndex()); + } + Operand args4 = func4.Evaluate(work, tempParameter); + if (args4.IsNotNumber()) { + args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "LastIndexOf", 4); + if (args4.IsError()) { + return args4; + } + } + int startIndex = args3.getIntValue(); + int count = args4.getIntValue(); + if (startIndex < 0) { + return Operand.Create(-1 + work.getExcelIndex()); + } + int endIndex = Math.min(startIndex + count, text.length()); + String substring = text.substring(0, endIndex); + int result = substring.lastIndexOf(args2.getTextValue()); + return Operand.Create(result + work.getExcelIndex()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "LastIndexOf"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKCEILING.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKCEILING.java new file mode 100644 index 000000000..5e29c64ec --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKCEILING.java @@ -0,0 +1,65 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.function.Function; + +public class Function_LOOKCEILING extends Function_2 { + public Function_LOOKCEILING(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LookCeiling", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotArray()) { + args2 = args2.ToArray("Function '{0}' parameter {1} is error!", "LookCeiling", 2); + if (args2.IsError()) { + return args2; + } + } + + List list = new ArrayList<>(); + toolgood.algorithm.internals.FunctionUtil.F_base_GetList(args2, list); + if (list.isEmpty()) { + return Operand.Error("Function '{0}' parameter {1} is error!", "LookCeiling", 2); + } + list.sort(Collections.reverseOrder()); + BigDecimal value = args1.getNumberValue(); + BigDecimal result = list.get(0); + if (result.compareTo(value) == 0) { + return args1; + } + for (int i = 1; i < list.size(); i++) { + BigDecimal val = list.get(i); + if (val.compareTo(value) > 0) { + result = val; + } else if (val.compareTo(value) == 0) { + return args1; + } else { + break; + } + } + return Operand.Create(result); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "LookCeiling"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKFLOOR.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKFLOOR.java new file mode 100644 index 000000000..2cac7f89f --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKFLOOR.java @@ -0,0 +1,64 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.function.Function; + +public class Function_LOOKFLOOR extends Function_2 { + public Function_LOOKFLOOR(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LookFloor", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotArray()) { + args2 = args2.ToArray("Function '{0}' parameter {1} is error!", "LookFloor", 2); + if (args2.IsError()) { + return args2; + } + } + + List list = new ArrayList<>(); + toolgood.algorithm.internals.FunctionUtil.F_base_GetList(args2, list); + if (list.isEmpty()) { + return Operand.Error("Function '{0}' parameter {1} is error!", "LookFloor", 2); + } + Collections.sort(list); + BigDecimal value = args1.getNumberValue(); + BigDecimal result = list.get(0); + if (result.compareTo(value) == 0) { + return args1; + } + for (int i = 1; i < list.size(); i++) { + BigDecimal val = list.get(i); + if (val.compareTo(value) < 0) { + result = val; + } else if (val.compareTo(value) == 0) { + return args1; + } else { + break; + } + } + return Operand.Create(result); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "LookFloor"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEX.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEX.java new file mode 100644 index 000000000..a8154855a --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEX.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Function_REGEX extends Function_2 { + public Function_REGEX(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Regex", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Regex", 2); + if (args2.IsError()) { + return args2; + } + } + + Pattern pattern = Pattern.compile(args2.getTextValue()); + Matcher matcher = pattern.matcher(args1.getTextValue()); + if (!matcher.find()) { + return Operand.Error("Function '{0}' is error!", "Regex"); + } + return Operand.Create(matcher.group()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Regex"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEXREPALCE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEXREPALCE.java new file mode 100644 index 000000000..a74ac7aa3 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEXREPALCE.java @@ -0,0 +1,47 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; +import java.util.regex.Pattern; + +public class Function_REGEXREPALCE extends Function_3 { + public Function_REGEXREPALCE(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "RegexReplace", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "RegexReplace", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotText()) { + args3 = args3.ToText("Function '{0}' parameter {1} is error!", "RegexReplace", 3); + if (args3.IsError()) { + return args3; + } + } + String result = Pattern.compile(args2.getTextValue()).matcher(args1.getTextValue()).replaceAll(args3.getTextValue()); + return Operand.Create(result); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "RegexReplace"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVEEND.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVEEND.java new file mode 100644 index 000000000..147aa2865 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVEEND.java @@ -0,0 +1,62 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_REMOVEEND extends Function_3 { + public Function_REMOVEEND(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "RemoveEnd", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "RemoveEnd", 2); + if (args2.IsError()) { + return args2; + } + } + boolean ignoreCase = false; + if (func3 != null) { + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotBoolean()) { + args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "RemoveEnd", 3); + if (args3.IsError()) { + return args3; + } + } + if (args3.getBooleanValue()) { + ignoreCase = true; + } + } + String text = args1.getTextValue(); + String suffix = args2.getTextValue(); + boolean endsWith = false; + if (ignoreCase) { + endsWith = text.toLowerCase().endsWith(suffix.toLowerCase()); + } else { + endsWith = text.endsWith(suffix); + } + if (endsWith) { + return Operand.Create(text.substring(0, text.length() - suffix.length())); + } + return args1; + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "RemoveEnd"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVESTART.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVESTART.java new file mode 100644 index 000000000..2fea55cc2 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVESTART.java @@ -0,0 +1,62 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_REMOVESTART extends Function_3 { + public Function_REMOVESTART(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "RemoveStart", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "RemoveStart", 2); + if (args2.IsError()) { + return args2; + } + } + boolean ignoreCase = false; + if (func3 != null) { + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotBoolean()) { + args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "RemoveStart", 3); + if (args3.IsError()) { + return args3; + } + } + if (args3.getBooleanValue()) { + ignoreCase = true; + } + } + String text = args1.getTextValue(); + String prefix = args2.getTextValue(); + boolean startsWith = false; + if (ignoreCase) { + startsWith = text.toLowerCase().startsWith(prefix.toLowerCase()); + } else { + startsWith = text.startsWith(prefix); + } + if (startsWith) { + return Operand.Create(text.substring(prefix.length())); + } + return args1; + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "RemoveStart"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SPLIT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SPLIT.java new file mode 100644 index 000000000..c27001d99 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SPLIT.java @@ -0,0 +1,39 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_SPLIT extends Function_2 { + public Function_SPLIT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Split", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Split", 2); + if (args2.IsError()) { + return args2; + } + } + String[] parts = args1.getTextValue().split(args2.getTextValue()); + return Operand.Create(parts); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Split"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_STARTSWITH.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_STARTSWITH.java new file mode 100644 index 000000000..77ddce749 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_STARTSWITH.java @@ -0,0 +1,53 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_STARTSWITH extends Function_3 { + public Function_STARTSWITH(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "StartsWith", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "StartsWith", 2); + if (args2.IsError()) { + return args2; + } + } + String text = args1.getTextValue(); + if (func3 == null) { + return Operand.Create(text.startsWith(args2.getTextValue())); + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotBoolean()) { + args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "StartsWith", 3); + if (args3.IsError()) { + return args3; + } + } + if (args3.getBooleanValue()) { + return Operand.Create(text.toLowerCase().startsWith(args2.getTextValue().toLowerCase())); + } else { + return Operand.Create(text.startsWith(args2.getTextValue())); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "StartsWith"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java new file mode 100644 index 000000000..e0955befb --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java @@ -0,0 +1,38 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_SUBSTRING extends Function_3 { + public Function_SUBSTRING(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); if(args1.isNotText()) { args1 = args1.toText("Function '{0}' parameter {1} is error!", "Substring", 1); if(args1.isError()) { return args1; } } + Operand args2 = func2.evaluate(work, tempParameter); if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Substring", 2); if(args2.isError()) { return args2; } } + + String text = args1.getTextValue(); + int startIndex = args2.getIntValue() - work.getExcelIndex(); + if(func3 == null) { + if(startIndex < 0) startIndex = 0; + if(startIndex > text.length()) startIndex = text.length(); + return Operand.create(text.substring(startIndex)); + } + Operand args3 = func3.evaluate(work, tempParameter); if(args3.isNotNumber()) { args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "Substring", 3); if(args3.isError()) { return args3; } } + int length = args3.getIntValue(); + if(startIndex < 0) startIndex = 0; + if(startIndex > text.length()) startIndex = text.length(); + int endIndex = startIndex + length; + if(endIndex > text.length()) endIndex = text.length(); + return Operand.create(text.substring(startIndex, endIndex)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Substring"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java new file mode 100644 index 000000000..8961989f3 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java @@ -0,0 +1,48 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_TRIMEND extends Function_2 { + public Function_TRIMEND(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); if(args1.isNotText()) { args1 = args1.toText("Function '{0}' parameter {1} is error!", "TrimEnd", 1); if(args1.isError()) return args1; } + if(func2 == null) { + return Operand.create(args1.getTextValue().trim()); + } + Operand args2 = func2.evaluate(work, tempParameter); if(args2.isNotText()) { args2 = args2.toText("Function '{0}' parameter {1} is error!", "TrimEnd", 2); if(args2.isError()) return args2; } + char[] trimChars = args2.getTextValue().toCharArray(); + return Operand.create(trimEnd(args1.getTextValue(), trimChars)); + } + + private String trimEnd(String str, char[] trimChars) { + if (str == null || str.isEmpty()) { + return str; + } + int length = str.length(); + while (length > 0 && contains(trimChars, str.charAt(length - 1))) { + length--; + } + return str.substring(0, length); + } + + private boolean contains(char[] array, char c) { + for (char ch : array) { + if (ch == c) { + return true; + } + } + return false; + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "TrimEnd"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyDate.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyDate.java new file mode 100644 index 000000000..77a82c76d --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyDate.java @@ -0,0 +1,386 @@ +package toolgood.algorithm.internals; + +import org.joda.time.DateTime; +import org.joda.time.DateTimeZone; + +import java.math.BigDecimal; +import java.math.MathContext; +import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.temporal.ChronoUnit; +import java.util.Date; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class MyDate { + public Integer Year; + public Integer Month; + public Integer Day; + public int Hour; + public int Minute; + public int Second; + + // public MyDate(TimeSpan dt) { + // Day = dt.Days; + // Hour = dt.Hours; + // Minute = dt.Minutes; + // Second = dt.Seconds; + // } + + private MyDate() { + } + + public MyDate(int year, int month, int day, int hour, int minute, int second) { + Year = year; + Month = month; + Day = day; + Hour = hour; + Minute = minute; + Second = second; + } + + public MyDate(Date dt) { + DateTime dTime = new DateTime(dt); + Year = dTime.getYear(); + Month = dTime.getMonthOfYear(); + Day = dTime.getDayOfMonth(); + Hour = dTime.getHourOfDay(); + Minute = dTime.getMinuteOfHour(); + Second = dTime.getSecondOfMinute(); + } + + public MyDate(DateTime dTime) { + Year = dTime.getYear(); + Month = dTime.getMonthOfYear(); + Day = dTime.getDayOfMonth(); + Hour = dTime.getHourOfDay(); + Minute = dTime.getMinuteOfHour(); + Second = dTime.getSecondOfMinute(); + } + + public MyDate(BigDecimal num) { + int days = num.intValue(); + if (days > 365) { + LocalDate start = LocalDate.of(1900, 1, 1); + start = start.plusDays(days - 2); + Year = start.getYear(); + Month = start.getMonthValue(); + Day = start.getDayOfMonth(); + } else { + Day = days; + } + BigDecimal d = num.subtract(new BigDecimal(days)); + Hour = d.multiply(new BigDecimal(24)).intValue(); + Minute = d.multiply(new BigDecimal(24)).subtract(new BigDecimal(Hour)).multiply(new BigDecimal(60)).intValue(); + Second = d.multiply(new BigDecimal(24)).subtract(new BigDecimal(Hour)).multiply(new BigDecimal(60)) + .subtract(new BigDecimal(Minute)).multiply(new BigDecimal(60)).intValue(); + // 防止秒数出错 + if (Second == 60) { + Second = 0; + Minute = Minute + 1; + if (Minute == 60) { + Minute = 0; + Hour = Hour + 1; + } + } + } + + public MyDate(double num) { + int days = (int) num; + if (days > 365) { + LocalDate start = LocalDate.of(1900, 1, 1); + start = start.plusDays(days - 2); + Year = start.getYear(); + Month = start.getMonthValue(); + Day = start.getDayOfMonth(); + } else { + Day = days; + } + double d = num - days; + Hour = (int) (d * 24); + Minute = (int) ((d * 24 - Hour) * 60.0); + Second = (int) Math.round(((d * 24 - Hour) * 60.0 - Minute) * 60.0); + // 防止秒数出错 + if (Second == 60) { + Second = 0; + Minute = Minute + 1; + if (Minute == 60) { + Minute = 0; + Hour = Hour + 1; + } + } + } + + public static MyDate parse(String txt) { + String t = txt.trim(); + Matcher m = Pattern + .compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$") + .matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Year = Integer.parseInt(m.group(1)); + date.Month = Integer.parseInt(m.group(2)); + date.Day = Integer.parseInt(m.group(3)); + date.Hour = Integer.parseInt(m.group(4)); + date.Minute = Integer.parseInt(m.group(5)); + date.Second = Integer.parseInt(m.group(6)); + return date; + } + m = Pattern + .compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$") + .matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Year = Integer.parseInt(m.group(1)); + date.Month = Integer.parseInt(m.group(2)); + date.Day = Integer.parseInt(m.group(3)); + date.Hour = Integer.parseInt(m.group(4)); + date.Minute = Integer.parseInt(m.group(5)); + date.Second = Integer.parseInt(m.group(6)); + return date; + } + + m = Pattern.compile("(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Year = Integer.parseInt(m.group(1)); + date.Month = Integer.parseInt(m.group(2)); + date.Day = Integer.parseInt(m.group(3)); + date.Hour = Integer.parseInt(m.group(4)); + date.Minute = Integer.parseInt(m.group(5)); + return date; + } + m = Pattern.compile("(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Year = Integer.parseInt(m.group(1)); + date.Month = Integer.parseInt(m.group(2)); + date.Day = Integer.parseInt(m.group(3)); + date.Hour = Integer.parseInt(m.group(4)); + date.Minute = Integer.parseInt(m.group(5)); + return date; + } + + m = Pattern.compile("(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Year = Integer.parseInt(m.group(1)); + date.Month = Integer.parseInt(m.group(2)); + date.Day = Integer.parseInt(m.group(3)); + return date; + } + m = Pattern.compile("(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d)").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Year = Integer.parseInt(m.group(1)); + date.Month = Integer.parseInt(m.group(2)); + date.Day = Integer.parseInt(m.group(3)); + return date; + } + m = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Day = Integer.parseInt(m.group(1)); + date.Hour = Integer.parseInt(m.group(2)); + date.Minute = Integer.parseInt(m.group(3)); + date.Second = Integer.parseInt(m.group(4)); + return date; + } + m = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Hour = Integer.parseInt(m.group(1)); + date.Minute = Integer.parseInt(m.group(2)); + date.Second = Integer.parseInt(m.group(3)); + return date; + } + m = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Hour = Integer.parseInt(m.group(1)); + date.Minute = Integer.parseInt(m.group(2)); + return date; + } + return null; + } + + public static MyDate now() { + return new MyDate(DateTime.now()); + } + + @Override + public String toString() { + StringBuffer stringBuffer = new StringBuffer(); + if (Year != null && Year > 0) { + stringBuffer.append(Year); + stringBuffer.append("-"); + if (Month < 10) { + stringBuffer.append("0"); + } + stringBuffer.append(Month); + stringBuffer.append("-"); + if (Day < 10) { + stringBuffer.append("0"); + } + stringBuffer.append(Day); + + stringBuffer.append(" "); + if (Hour < 10) { + stringBuffer.append("0"); + } + stringBuffer.append(Hour); + stringBuffer.append(":"); + if (Minute < 10) { + stringBuffer.append("0"); + } + stringBuffer.append(Minute); + stringBuffer.append(":"); + if (Second < 10) { + stringBuffer.append("0"); + } + stringBuffer.append(Second); + } else { + if (Day != null && Day > 0) { + stringBuffer.append(Day); + stringBuffer.append(" "); + } + if (Hour < 10) { + stringBuffer.append("0"); + } + stringBuffer.append(Hour); + stringBuffer.append(":"); + if (Minute < 10) { + stringBuffer.append("0"); + } + stringBuffer.append(Minute); + stringBuffer.append(":"); + if (Second < 10) { + stringBuffer.append("0"); + } + stringBuffer.append(Second); + } + + return stringBuffer.toString(); + } + + public String toString(String f) { + Date date; + if (Year != null && Year > 1900) { + date = new Date(Year, Month, Day, Hour, Minute, Second); + } else if (Day != null) { + date = new Date(1900, 1, Day, Hour, Minute, Second); + } else { + date = new Date(1900, 1, 0, Hour, Minute, Second); + } + SimpleDateFormat sd = new SimpleDateFormat(f); + return sd.format(date); + } + + public DateTime ToDateTime() { + return new DateTime(Year, Month, Day, Hour, Minute, Second, DateTimeZone.UTC); + } + + public DateTime ToDateTime(DateTimeZone zoo) { + return new DateTime(Year, Month, Day, Hour, Minute, Second, zoo); + } + + public int DayOfWeek() { + return new DateTime(Year, Month, Day, 0, 0, 0, DateTimeZone.UTC).dayOfWeek().get(); + } + + public int DayOfYear() { + return new DateTime(Year, Month, Day, 0, 0, 0, DateTimeZone.UTC).getDayOfYear(); + } + + public MyDate AddYears(int d) { + return new MyDate(ToDateTime().plusYears(d)); + } + + public MyDate AddMonths(int d) { + return new MyDate(ToDateTime().plusMonths(d)); + } + + public MyDate AddDays(int d) { + return new MyDate(ToDateTime().plusDays(d)); + } + + public MyDate AddHours(int d) { + return new MyDate(ToDateTime().plusHours(d)); + } + + public MyDate AddMinutes(int d) { + return new MyDate(ToDateTime().plusMinutes(d)); + } + + public MyDate AddSeconds(int d) { + return new MyDate(ToDateTime().plusSeconds(d)); + } + + public BigDecimal ToNumber() { + BigDecimal result = new BigDecimal(Second).divide(new BigDecimal(60), MathContext.DECIMAL32); + result = result.add(new BigDecimal(Minute)).divide(new BigDecimal(60), MathContext.DECIMAL32); + result = result.add(new BigDecimal(Hour)).divide(new BigDecimal(24), MathContext.DECIMAL32); + + if (Year != null && Year > 1900) { + LocalDate start = LocalDate.of(Year, Month, Day); + LocalDate end = LocalDate.of(1900, 1, 1); + long days = ChronoUnit.DAYS.between(end, start) + 2; + return result.add(new BigDecimal(days)); + } + if (Day != null) { + return result.add(new BigDecimal(Day)); + } + return result; + } + + public MyDate ADD(MyDate num) { + DateTime dt = this.ToDateTime(); + if (num.Year != null) { + dt = dt.plusYears(num.Year); + } + if (num.Month != null) { + dt = dt.plusMonths(num.Month); + } + if (num.Day != null) { + dt = dt.plusDays(num.Day); + } + dt = dt.plusHours(num.Hour); + dt = dt.plusMinutes(num.Minute); + dt = dt.plusSeconds(num.Second); + return new MyDate(dt); + } + + public MyDate SUB(MyDate num) { + DateTime dt = this.ToDateTime(); + if (num.Year != null) { + dt = dt.plusYears(-num.Year); + } + if (num.Month != null) { + dt = dt.plusMonths(-num.Month); + } + if (num.Day != null) { + dt = dt.plusDays(-num.Day); + } + dt = dt.plusHours(-num.Hour); + dt = dt.plusMinutes(-num.Minute); + dt = dt.plusSeconds(-num.Second); + return new MyDate(dt); + } + + public MyDate ADD(BigDecimal num) { + return new MyDate(this.ToNumber().add(num)); + } + + public MyDate SUB(BigDecimal num) { + return new MyDate(this.ToNumber().subtract(num)); + } + + public MyDate MUL(BigDecimal num) { + return new MyDate(this.ToNumber().multiply(num)); + } + + public MyDate DIV(BigDecimal num) { + return new MyDate(this.ToNumber().divide(num, MathContext.DECIMAL32)); + } + +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/RegexHelper.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/RegexHelper.java new file mode 100644 index 000000000..460bcf0f2 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/RegexHelper.java @@ -0,0 +1,73 @@ +/** + * 正则表达式帮助类 + */ +package toolgood.algorithm.internals; + +import java.util.regex.Pattern; + +class RegexHelper { + /** + * 十六进制正则表达式 + */ + static final Pattern HexRegex = Pattern.compile("^[0-9A-Fa-f]+$"); + + /** + * 八进制正则表达式 + */ + static final Pattern OctRegex = Pattern.compile("^[0-7]+$"); + + /** + * 二进制正则表达式 + */ + static final Pattern BinRegex = Pattern.compile("^[01]+$"); + + /** + * 日期时间正则表达式 (yyyy-MM-dd HH:mm:ss) + */ + static final Pattern dateTimeRegex = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$"); + + /** + * 日期时间正则表达式 (yyyy/MM/dd HH:mm:ss) + */ + static final Pattern dateTimeRegex2 = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$"); + + /** + * 日期时间正则表达式 (yyyy-MM-dd HH:mm) + */ + static final Pattern dateTimeRegex3 = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)$"); + + /** + * 日期时间正则表达式 (yyyy/MM/dd HH:mm) + */ + static final Pattern dateTimeRegex4 = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)$"); + + /** + * 日期正则表达式 (yyyy-MM-dd) + */ + static final Pattern dateRegex = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)$"); + + /** + * 日期正则表达式 (yyyy-MM-dd) + */ + static final Pattern dateRegex2 = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)$"); + + /** + * 天时间正则表达式 (dd HH:mm:ss) + */ + static final Pattern dayTimeRegex = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$"); + + /** + * 天时间正则表达式 (dd HH:mm) + */ + static final Pattern dayTimeRegex2 = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d)$"); + + /** + * 时间正则表达式 (HH:mm:ss) + */ + static final Pattern timeRegex = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$"); + + /** + * 时间正则表达式 (HH:mm) + */ + static final Pattern timeRegex2 = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d)$"); +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/AntlrCharStream.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/AntlrCharStream.java new file mode 100644 index 000000000..ed9464452 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/AntlrCharStream.java @@ -0,0 +1,61 @@ +package toolgood.algorithm.internals; + +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.misc.Interval; + +public class AntlrCharStream implements CharStream { + final CharStream stream; + + public AntlrCharStream(CharStream stream) { + this.stream = stream; + } + + @Override + public String getText(Interval interval) { + return stream.getText(interval); + } + + @Override + public void consume() { + stream.consume(); + } + + @Override + public int LA(int i) { + int c = stream.LA(i); + if (c <= 0) { + return c; + } + return CharUtil.StandardChar((char)c); + } + + @Override + public int mark() { + return stream.mark(); + } + + @Override + public void release(int marker) { + stream.release(marker); + } + + @Override + public int index() { + return stream.index(); + } + + @Override + public void seek(int index) { + stream.seek(index); + } + + @Override + public int size() { + return stream.size(); + } + + @Override + public String getSourceName() { + return stream.getSourceName(); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/CharUtil.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/CharUtil.java new file mode 100644 index 000000000..ed7337567 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/CharUtil.java @@ -0,0 +1,224 @@ +package toolgood.algorithm.internals; + +import java.util.ArrayList; +import java.util.List; + +public class CharUtil { + public static char StandardChar(char c) { + if (c <= 0) + return c; + char o = (char) c; + if (o == '‘') + return '\''; + if (o == '’') + return '\''; + if (o == '“') + return '"'; + if (o == '”') + return '"'; + if (o == '〔') + return '('; + if (o == '〕') + return ')'; + if (o == '=') + return '='; + if (o == '+') + return '+'; + if (o == '-') + return '-'; + if (o == '×') + return '*'; + if (o == '÷') + return '/'; + if (o == '/') + return '/'; + + if (c == 12288) { + o = (char) 32; + } else if (c > 65280 && c < 65375) { + o = (char) (c - 65248); + } + return Character.toUpperCase(o); + } + + public static String StandardString(String s) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < s.length(); i++) { + char c = s.charAt(i); + sb.append(StandardChar(c)); + } + return sb.toString(); + } + + private static boolean EqualsOnce(String left, String right) { + if (left.length() != right.length()) + return false; + for (int i = 0; i < left.length(); i++) { + if (left.charAt(i) != right.charAt(i)) { + char a = StandardChar(left.charAt(i)); + char b = StandardChar(right.charAt(i)); + if (a != b) + return false; + } + } + return true; + } + + public static boolean Equals(String left, String right) { + if (left == null) + return false; + if (right == null) + return false; + return EqualsOnce(left, right); + } + + public static boolean Equals(String left, String arg1, String arg2) { + if (left == null) + return false; + if (arg1 != null && EqualsOnce(left, arg1)) + return true; + if (arg2 != null && EqualsOnce(left, arg2)) + return true; + return false; + } + + public static boolean Equals(String left, String arg1, String arg2, String arg3) { + if (left == null) + return false; + if (arg1 != null && EqualsOnce(left, arg1)) + return true; + if (arg2 != null && EqualsOnce(left, arg2)) + return true; + if (arg3 != null && EqualsOnce(left, arg3)) + return true; + return false; + } + + public static List SplitFormula(String formula, List splitChars) { + List result = new ArrayList<>(); + boolean inSquareBrackets = false; + boolean inBraceBrackets = false; + int inBracketsCount = 0; + boolean inText = false; + char textChar = (char) 0; + + StringBuilder str = new StringBuilder(); + Integer i = 0; + while (i < formula.length()) { + char c = formula.charAt(i); + if (inSquareBrackets) { + str.append(c); + if (c == ']') + inSquareBrackets = false; + } else if (inBraceBrackets) { + str.append(c); + if (c == '}') + inBraceBrackets = false; + } else if (inText) { + str.append(c); + if (c == '\\') { + i++; + if (i < formula.length()) { + str.append(formula.charAt(i)); + } + } else if (c == textChar) { + inText = false; + } + } else if (splitChars.contains(c) && inBracketsCount == 0) { + result.add(str.toString()); + result.add(((Character) c).toString()); + str = new StringBuilder(); + } else { + str.append(c); + if (c == '\'' || c == '"' || c == '`') { + textChar = c; + inText = true; + } else if (c == '[') { + inSquareBrackets = true; + } else if (c == '{') { + inBraceBrackets = true; + } else if (c == '(') { + inBracketsCount++; + } else if (c == ')') { + inBracketsCount--; + } + } + i++; + } + if (str.length() > 0) + result.add(str.toString()); + return result; + } + + public static List SplitFormulaForAnd(String formula) { + List result = new ArrayList<>(); + boolean inSquareBrackets = false; + boolean inBraceBrackets = false; + int inBracketsCount = 0; + boolean inText = false; + char textChar = (char) 0; + + StringBuilder str = new StringBuilder(); + Integer i = 0; + while (i < formula.length()) { + char c = formula.charAt(i); + if (inSquareBrackets) { + str.append(c); + if (c == ']') + inSquareBrackets = false; + } else if (inBraceBrackets) { + str.append(c); + if (c == '}') + inBraceBrackets = false; + } else if (inText) { + str.append(c); + if (c == '\\') { + i++; + if (i < formula.length()) { + str.append(formula.charAt(i)); + } + } else if (c == textChar) { + inText = false; + } + } else if (c == '&' && inBracketsCount == 0) { + if (i + 1 < formula.length() && formula.charAt(i + 1) == '&') { + i++; + result.add(str.toString()); + str = new StringBuilder(); + } else { + result.add(str.toString()); + } + } else if (c == '|' && inBracketsCount == 0) { + if (i + 1 < formula.length() && formula.charAt(i + 1) == '|') { + i++; + result.add(str.toString()); + str = new StringBuilder(); + str.append(String.join("&&", result)); + str.append("||"); + result.clear(); + } else { + result.add(str.toString()); + } + } else { + str.append(c); + if (c == '\'' || c == '"' || c == '`') { + textChar = c; + inText = true; + } else if (c == '[') { + inSquareBrackets = true; + } else if (c == '{') { + inBraceBrackets = true; + } else if (c == '(') { + inBracketsCount++; + } else if (c == ')') { + inBracketsCount--; + } + } + i++; + } + if (str.length() > 0) + result.add(str.toString()); + return result; + } + +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/DiyNameVisitor.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/DiyNameVisitor.java new file mode 100644 index 000000000..5c5df4880 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/DiyNameVisitor.java @@ -0,0 +1,1438 @@ +package toolgood.algorithm.internals; + +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; +import org.antlr.v4.runtime.tree.TerminalNode; + +import toolgood.algorithm.math.mathParser.*; +import toolgood.algorithm.DiyNameInfo; +import toolgood.algorithm.math.mathVisitor; + +public class DiyNameVisitor extends AbstractParseTreeVisitor implements mathVisitor { + public DiyNameInfo diy = new DiyNameInfo(); + + @Override + public Object visitPARAMETER_fun(PARAMETER_funContext context) { + TerminalNode node = context.PARAMETER(); + if (node != null) { + diy.Parameters.add(node.getText()); + } + node = context.PARAMETER2(); + if (node != null) { + String str = node.getText(); + if (str.startsWith("@")) { + diy.Parameters.add(str.substring(1)); + } else if ((str.startsWith("【") && str.endsWith("】")) + || (str.startsWith("[") && str.endsWith("]")) + || (str.startsWith("#") && str.endsWith("#"))) { + diy.Parameters.add(str.substring(1, str.length() - 1)); + + } else { + diy.Parameters.add(str); + } + return null; + } + return visitChildren(context); + } + @Override + public Object visitDiyFunction_fun(DiyFunction_funContext context) { + diy.Functions.add(context.PARAMETER().getText()); + return visitChildren(context); + } + + @Override + public Object visitParameter2(Parameter2Context context) { + + return visitChildren(context); + } + + + + @Override + public Object visitProg(ProgContext context) { + return visitChildren(context); + } + + @Override + public Object visitCEILING_fun(CEILING_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitFACT_fun(FACT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitREGEXREPALCE_fun(REGEXREPALCE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHASVALUE_fun(HASVALUE_funContext ctx) { + return visitChildren(ctx); + } + + @Override + public Object visitAddSub_fun(AddSub_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitAVERAGEIF_fun(AVERAGEIF_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitPARAM_fun(PARAM_funContext ctx) { + return visitChildren(ctx); + } + + @Override + public Object visitRIGHT_fun(RIGHT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitOCT2BIN_fun(OCT2BIN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitQUARTILE_fun(QUARTILE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitFINV_fun(FINV_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitNOT_fun(NOT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitDAYS360_fun(DAYS360_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitWEEKNUM_fun(WEEKNUM_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitPOISSON_fun(POISSON_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitISREGEX_fun(ISREGEX_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitPERCENTILE_fun(PERCENTILE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSHA256_fun(SHA256_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHAS_fun(HAS_funContext ctx) { + return visitChildren(ctx); + } + + @Override + public Object visitHYPGEOMDIST_fun(HYPGEOMDIST_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitPERMUT_fun(PERMUT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTRIMSTART_fun(TRIMSTART_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitRMB_fun(RMB_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitDEC2HEX_fun(DEC2HEX_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitCLEAN_fun(CLEAN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitLOWER_fun(LOWER_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitOR_fun(OR_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitADDMONTHS_fun(ADDMONTHS_funContext context) { + return visitChildren(context); + } + + @Override + public Object visitNORMSINV_fun(NORMSINV_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitLEFT_fun(LEFT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitISEVEN_fun(ISEVEN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitLOGINV_fun(LOGINV_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitWORKDAY_fun(WORKDAY_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitISERROR_fun(ISERROR_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitBIN2DEC_fun(BIN2DEC_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitJIS_fun(JIS_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitCRC32_fun(CRC32_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitLCM_fun(LCM_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHARMEAN_fun(HARMEAN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitNORMINV_fun(NORMINV_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitGAMMAINV_fun(GAMMAINV_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSQRT_fun(SQRT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitDEGREES_fun(DEGREES_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitMROUND_fun(MROUND_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitDATEDIF_fun(DATEDIF_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTRIMEND_fun(TRIMEND_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitISLOGICAL_fun(ISLOGICAL_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitINT_fun(INT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSUMIF_fun(SUMIF_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHEX2OCT_fun(HEX2OCT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitPI_fun(PI_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitYEAR_fun(YEAR_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSQRTPI_fun(SQRTPI_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitCONCATENATE_fun(CONCATENATE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitCOUNT_fun(COUNT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitFALSE_fun(FALSE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHTMLENCODE_fun(HTMLENCODE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitBASE64URLTOTEXT_fun(BASE64URLTOTEXT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitLOG10_fun(LOG10_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitISTEXT_fun(ISTEXT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitNEGBINOMDIST_fun(NEGBINOMDIST_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitNETWORKDAYS_fun(NETWORKDAYS_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitFACTDOUBLE_fun(FACTDOUBLE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTIMEVALUE_fun(TIMEVALUE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitAVEDEV_fun(AVEDEV_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitGUID_fun(GUID_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitJSON_fun(JSON_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitFIXED_fun(FIXED_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitGetJsonValue_fun(GetJsonValue_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTINV_fun(TINV_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitEDATE_fun(EDATE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitGEOMEAN_fun(GEOMEAN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitVAR_fun(VAR_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSIGN_fun(SIGN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitEOMONTH_fun(EOMONTH_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitFLOOR_fun(FLOOR_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHOUR_fun(HOUR_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitLEN_fun(LEN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitACOS_fun(ACOS_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitISNULLORWHITESPACE_fun(ISNULLORWHITESPACE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitNUM_fun(NUM_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitCOSH_fun(COSH_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitQUOTIENT_fun(QUOTIENT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitOCT2DEC_fun(OCT2DEC_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSEARCH_fun(SEARCH_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitROUNDUP_fun(ROUNDUP_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitCOMBIN_fun(COMBIN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitCODE_fun(CODE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitASINH_fun(ASINH_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSIN_fun(SIN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSUBSTRING_fun(SUBSTRING_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitRANDBETWEEN_fun(RANDBETWEEN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitAVERAGE_fun(AVERAGE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitLOG_fun(LOG_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHMACSHA512_fun(HMACSHA512_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitAndOr_fun(AndOr_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSTDEVP_fun(STDEVP_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitADDYEARS_fun(ADDYEARS_funContext context) { + return visitChildren(context); + } + + @Override + public Object visitADDSECONDS_fun(ADDSECONDS_funContext context) { + return visitChildren(context); + } + + @Override + public Object visitArray_fun(Array_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitROUND_fun(ROUND_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitEXP_fun(EXP_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitCOUNTIF_fun(COUNTIF_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitVARP_fun(VARP_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitREMOVEEND_fun(REMOVEEND_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitDATE_fun(DATE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSPLIT_fun(SPLIT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitURLDECODE_fun(URLDECODE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitLARGE_fun(LARGE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTIMESTAMP_fun(TIMESTAMP_funContext context) { + return visitChildren(context); + } + + @Override + public Object visitVALUE_fun(VALUE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitDAY_fun(DAY_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitWEIBULL_fun(WEIBULL_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHMACSHA256_fun(HMACSHA256_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitBINOMDIST_fun(BINOMDIST_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitJudge_fun(Judge_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitDEVSQ_fun(DEVSQ_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitMODE_fun(MODE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitBETAINV_fun(BETAINV_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitMAX_fun(MAX_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitMINUTE_fun(MINUTE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTAN_fun(TAN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitIFERROR_fun(IFERROR_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitFDIST_fun(FDIST_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitINDEXOF_fun(INDEXOF_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitUPPER_fun(UPPER_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHTMLDECODE_fun(HTMLDECODE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitEXPONDIST_fun(EXPONDIST_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitDEC2BIN_fun(DEC2BIN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHEX2DEC_fun(HEX2DEC_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSMALL_fun(SMALL_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitODD_fun(ODD_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTEXTTOBASE64_fun(TEXTTOBASE64_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitMID_fun(MID_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitPERCENTRANK_fun(PERCENTRANK_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSTDEV_fun(STDEV_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitNORMSDIST_fun(NORMSDIST_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitISNUMBER_fun(ISNUMBER_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitLASTINDEXOF_fun(LASTINDEXOF_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitMOD_fun(MOD_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitCHAR_fun(CHAR_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitREGEX_fun(REGEX_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTEXTTOBASE64URL_fun(TEXTTOBASE64URL_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitMD5_fun(MD5_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitREPLACE_fun(REPLACE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitACOSH_fun(ACOSH_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitISODD_fun(ISODD_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitASC_fun(ASC_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitCOS_fun(COS_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitLN_fun(LN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSTRING_fun(STRING_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHMACMD5_fun(HMACMD5_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitPRODUCT_fun(PRODUCT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitEXACT_fun(EXACT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitADDMINUTES_fun(ADDMINUTES_funContext context) { + return visitChildren(context); + } + + @Override + public Object visitSUMSQ_fun(SUMSQ_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSUM_fun(SUM_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSECOND_fun(SECOND_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitGAMMADIST_fun(GAMMADIST_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitOCT2HEX_fun(OCT2HEX_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTODAY_fun(TODAY_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitERROR_fun(ERROR_funContext ctx) { + return visitChildren(ctx); + } + + @Override + public Object visitATAN_fun(ATAN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitE_fun(E_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTRIM_fun(TRIM_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitRADIANS_fun(RADIANS_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitGAMMALN_fun(GAMMALN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTEXT_fun(TEXT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitFISHER_fun(FISHER_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitAND_fun(AND_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitArrayJson_fun(ArrayJson_funContext ctx) { + return visitChildren(ctx); + } + + @Override + public Object visitBIN2HEX_fun(BIN2HEX_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitMULTINOMIAL_fun(MULTINOMIAL_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitMONTH_fun(MONTH_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitURLENCODE_fun(URLENCODE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitNORMDIST_fun(NORMDIST_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHMACSHA1_fun(HMACSHA1_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitENDSWITH_fun(ENDSWITH_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitBracket_fun(Bracket_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitBETADIST_fun(BETADIST_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitATANH_fun(ATANH_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitNOW_fun(NOW_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitMEDIAN_fun(MEDIAN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitPOWER_fun(POWER_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitDEC2OCT_fun(DEC2OCT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitPROPER_fun(PROPER_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTRUNC_fun(TRUNC_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitGCD_fun(GCD_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTANH_fun(TANH_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitHEX2BIN_fun(HEX2BIN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSINH_fun(SINH_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSHA512_fun(SHA512_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitMIN_fun(MIN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitADDDAYS_fun(ADDDAYS_funContext context) { + return visitChildren(context); + } + + @Override + public Object visitISNONTEXT_fun(ISNONTEXT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitABS_fun(ABS_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitROUNDDOWN_fun(ROUNDDOWN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitIF_fun(IF_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitJOIN_fun(JOIN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitFIND_fun(FIND_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSUBSTITUTE_fun(SUBSTITUTE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitREPT_fun(REPT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitASIN_fun(ASIN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitMulDiv_fun(MulDiv_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitREMOVESTART_fun(REMOVESTART_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitT_fun(T_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitWEEKDAY_fun(WEEKDAY_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitBIN2OCT_fun(BIN2OCT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitBASE64TOTEXT_fun(BASE64TOTEXT_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTDIST_fun(TDIST_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitDATEVALUE_fun(DATEVALUE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSTARTSWITH_fun(STARTSWITH_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitEVEN_fun(EVEN_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitLOGNORMDIST_fun(LOGNORMDIST_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitISNULLOREMPTY_fun(ISNULLOREMPTY_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTRUE_fun(TRUE_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitFISHERINV_fun(FISHERINV_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitSHA1_fun(SHA1_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitTIME_fun(TIME_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitATAN2_fun(ATAN2_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitADDHOURS_fun(ADDHOURS_funContext context) { + return visitChildren(context); + } + + @Override + public Object visitRAND_fun(RAND_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitNum(NumContext ctx) { + return visitChildren(ctx); + } + + @Override + public Object visitUnit(UnitContext ctx) { + return visitChildren(ctx); + } + + @Override + public Object visitArrayJson(ArrayJsonContext ctx) { + return visitChildren(ctx); + } + + @Override + public Object visitVLOOKUP_fun(VLOOKUP_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitLOOKUP_fun(LOOKUP_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitNULL_fun(NULL_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitISNULL_fun(ISNULL_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitISNULLORERROR_fun(ISNULLORERROR_funContext context) { + + return visitChildren(context); + } + + @Override + public Object visitPercentage_fun(Percentage_funContext context) { + + return visitChildren(context); + } + @Override + public Object visitCOVARIANCES_fun(COVARIANCES_funContext context) { + return visitChildren(context); + } + @Override + public Object visitCOVAR_fun(COVAR_funContext context) { + return visitChildren(context); + } + @Override + public Object visitVersion_fun(Version_funContext context) { + return visitChildren(context); + } + +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/MathSplitVisitor.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/MathSplitVisitor.java new file mode 100644 index 000000000..d69fa71d2 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/MathSplitVisitor.java @@ -0,0 +1,1224 @@ +package toolgood.algorithm.internals; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; +import toolgood.algorithm.enums.ConditionTreeType; +import toolgood.algorithm.math.mathParser; +import toolgood.algorithm.math.mathParser.COVARIANCES_funContext; +import toolgood.algorithm.math.mathParser.COVAR_funContext; +import toolgood.algorithm.math.mathParser.Version_funContext; +import toolgood.algorithm.math.mathVisitor; + +import java.util.ArrayList; + +public class MathSplitVisitor extends AbstractParseTreeVisitor implements mathVisitor { + @Override + public ConditionTree visitProg(mathParser.ProgContext context) { + return visit(context.expr()); + } + + @Override + public ConditionTree visitAndOr_fun(mathParser.AndOr_funContext context) { + ConditionTree tree = new ConditionTree(); + tree.Nodes = new ArrayList<>(); + String t = context.op.getText(); + if (CharUtil.Equals(t, "&&", "and")) { + tree.Type = ConditionTreeType.And; + } else { + tree.Type = ConditionTreeType.Or; + } + tree.Nodes.add(this.visit(context.expr(0))); + tree.Nodes.add(this.visit(context.expr(1))); + return tree; + } + + @Override + public ConditionTree visitBracket_fun(mathParser.Bracket_funContext context) { + return visit(context.expr()); + } + + public ConditionTree visit_fun(ParserRuleContext context) { + ConditionTree tree = new ConditionTree(); + tree.Type = ConditionTreeType.String; + tree.Start = context.start.getStartIndex(); + tree.End = context.stop.getStopIndex(); + tree.ConditionString = context.getText(); + return tree; + } + + @Override + public ConditionTree visitCEILING_fun(mathParser.CEILING_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitFACT_fun(mathParser.FACT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitREGEXREPALCE_fun(mathParser.REGEXREPALCE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHASVALUE_fun(mathParser.HASVALUE_funContext ctx) { + return visit_fun(ctx); + } + + @Override + public ConditionTree visitAddSub_fun(mathParser.AddSub_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitAVERAGEIF_fun(mathParser.AVERAGEIF_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitPARAM_fun(mathParser.PARAM_funContext ctx) { + return visit_fun(ctx); + } + + @Override + public ConditionTree visitRIGHT_fun(mathParser.RIGHT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitOCT2BIN_fun(mathParser.OCT2BIN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitQUARTILE_fun(mathParser.QUARTILE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitFINV_fun(mathParser.FINV_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitNOT_fun(mathParser.NOT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitDAYS360_fun(mathParser.DAYS360_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitWEEKNUM_fun(mathParser.WEEKNUM_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitPOISSON_fun(mathParser.POISSON_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitISREGEX_fun(mathParser.ISREGEX_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitPERCENTILE_fun(mathParser.PERCENTILE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSHA256_fun(mathParser.SHA256_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHAS_fun(mathParser.HAS_funContext ctx) { + return visit_fun(ctx); + } + + @Override + public ConditionTree visitHYPGEOMDIST_fun(mathParser.HYPGEOMDIST_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitPERMUT_fun(mathParser.PERMUT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTRIMSTART_fun(mathParser.TRIMSTART_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitRMB_fun(mathParser.RMB_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitDEC2HEX_fun(mathParser.DEC2HEX_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitCLEAN_fun(mathParser.CLEAN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLOWER_fun(mathParser.LOWER_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitOR_fun(mathParser.OR_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitADDMONTHS_fun(mathParser.ADDMONTHS_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitNORMSINV_fun(mathParser.NORMSINV_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLEFT_fun(mathParser.LEFT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitISEVEN_fun(mathParser.ISEVEN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLOGINV_fun(mathParser.LOGINV_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitWORKDAY_fun(mathParser.WORKDAY_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitISERROR_fun(mathParser.ISERROR_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitBIN2DEC_fun(mathParser.BIN2DEC_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitJIS_fun(mathParser.JIS_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitCRC32_fun(mathParser.CRC32_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLCM_fun(mathParser.LCM_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHARMEAN_fun(mathParser.HARMEAN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitNORMINV_fun(mathParser.NORMINV_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitGAMMAINV_fun(mathParser.GAMMAINV_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSQRT_fun(mathParser.SQRT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitDEGREES_fun(mathParser.DEGREES_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitMROUND_fun(mathParser.MROUND_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitDATEDIF_fun(mathParser.DATEDIF_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTRIMEND_fun(mathParser.TRIMEND_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitISLOGICAL_fun(mathParser.ISLOGICAL_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitINT_fun(mathParser.INT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSUMIF_fun(mathParser.SUMIF_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHEX2OCT_fun(mathParser.HEX2OCT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitPI_fun(mathParser.PI_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitYEAR_fun(mathParser.YEAR_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSQRTPI_fun(mathParser.SQRTPI_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitCONCATENATE_fun(mathParser.CONCATENATE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitCOUNT_fun(mathParser.COUNT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitFALSE_fun(mathParser.FALSE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHTMLENCODE_fun(mathParser.HTMLENCODE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitBASE64URLTOTEXT_fun(mathParser.BASE64URLTOTEXT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLOG10_fun(mathParser.LOG10_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitISTEXT_fun(mathParser.ISTEXT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitNEGBINOMDIST_fun(mathParser.NEGBINOMDIST_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitNETWORKDAYS_fun(mathParser.NETWORKDAYS_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitFACTDOUBLE_fun(mathParser.FACTDOUBLE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTIMEVALUE_fun(mathParser.TIMEVALUE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitAVEDEV_fun(mathParser.AVEDEV_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitGUID_fun(mathParser.GUID_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitJSON_fun(mathParser.JSON_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitFIXED_fun(mathParser.FIXED_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitGetJsonValue_fun(mathParser.GetJsonValue_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTINV_fun(mathParser.TINV_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitEDATE_fun(mathParser.EDATE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitGEOMEAN_fun(mathParser.GEOMEAN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitVAR_fun(mathParser.VAR_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSIGN_fun(mathParser.SIGN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitEOMONTH_fun(mathParser.EOMONTH_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitFLOOR_fun(mathParser.FLOOR_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHOUR_fun(mathParser.HOUR_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLEN_fun(mathParser.LEN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitACOS_fun(mathParser.ACOS_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitISNULLORWHITESPACE_fun(mathParser.ISNULLORWHITESPACE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitNUM_fun(mathParser.NUM_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitCOSH_fun(mathParser.COSH_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitQUOTIENT_fun(mathParser.QUOTIENT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitOCT2DEC_fun(mathParser.OCT2DEC_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSEARCH_fun(mathParser.SEARCH_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitROUNDUP_fun(mathParser.ROUNDUP_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitCOMBIN_fun(mathParser.COMBIN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitCODE_fun(mathParser.CODE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitASINH_fun(mathParser.ASINH_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSIN_fun(mathParser.SIN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSUBSTRING_fun(mathParser.SUBSTRING_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitRANDBETWEEN_fun(mathParser.RANDBETWEEN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitAVERAGE_fun(mathParser.AVERAGE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLOG_fun(mathParser.LOG_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHMACSHA512_fun(mathParser.HMACSHA512_funContext context) { + return visit_fun(context); + } + + + @Override + public ConditionTree visitSTDEVP_fun(mathParser.STDEVP_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitADDYEARS_fun(mathParser.ADDYEARS_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitADDSECONDS_fun(mathParser.ADDSECONDS_funContext ctx) { + return visit_fun(ctx); + } + + @Override + public ConditionTree visitArray_fun(mathParser.Array_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitROUND_fun(mathParser.ROUND_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitEXP_fun(mathParser.EXP_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitCOUNTIF_fun(mathParser.COUNTIF_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitVARP_fun(mathParser.VARP_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitREMOVEEND_fun(mathParser.REMOVEEND_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitDATE_fun(mathParser.DATE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitPARAMETER_fun(mathParser.PARAMETER_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSPLIT_fun(mathParser.SPLIT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitURLDECODE_fun(mathParser.URLDECODE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLARGE_fun(mathParser.LARGE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTIMESTAMP_fun(mathParser.TIMESTAMP_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitVALUE_fun(mathParser.VALUE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitDAY_fun(mathParser.DAY_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitWEIBULL_fun(mathParser.WEIBULL_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHMACSHA256_fun(mathParser.HMACSHA256_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitBINOMDIST_fun(mathParser.BINOMDIST_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitJudge_fun(mathParser.Judge_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitDEVSQ_fun(mathParser.DEVSQ_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitMODE_fun(mathParser.MODE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitBETAINV_fun(mathParser.BETAINV_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitMAX_fun(mathParser.MAX_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitMINUTE_fun(mathParser.MINUTE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTAN_fun(mathParser.TAN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitIFERROR_fun(mathParser.IFERROR_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitFDIST_fun(mathParser.FDIST_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitINDEXOF_fun(mathParser.INDEXOF_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitUPPER_fun(mathParser.UPPER_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHTMLDECODE_fun(mathParser.HTMLDECODE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitEXPONDIST_fun(mathParser.EXPONDIST_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitDEC2BIN_fun(mathParser.DEC2BIN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHEX2DEC_fun(mathParser.HEX2DEC_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSMALL_fun(mathParser.SMALL_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitODD_fun(mathParser.ODD_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTEXTTOBASE64_fun(mathParser.TEXTTOBASE64_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitMID_fun(mathParser.MID_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitPERCENTRANK_fun(mathParser.PERCENTRANK_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSTDEV_fun(mathParser.STDEV_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitNORMSDIST_fun(mathParser.NORMSDIST_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitISNUMBER_fun(mathParser.ISNUMBER_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLASTINDEXOF_fun(mathParser.LASTINDEXOF_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitMOD_fun(mathParser.MOD_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitCHAR_fun(mathParser.CHAR_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitREGEX_fun(mathParser.REGEX_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTEXTTOBASE64URL_fun(mathParser.TEXTTOBASE64URL_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitMD5_fun(mathParser.MD5_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitREPLACE_fun(mathParser.REPLACE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitACOSH_fun(mathParser.ACOSH_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitISODD_fun(mathParser.ISODD_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitASC_fun(mathParser.ASC_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitCOS_fun(mathParser.COS_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLN_fun(mathParser.LN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSTRING_fun(mathParser.STRING_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHMACMD5_fun(mathParser.HMACMD5_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitPRODUCT_fun(mathParser.PRODUCT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitEXACT_fun(mathParser.EXACT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitADDMINUTES_fun(mathParser.ADDMINUTES_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSUMSQ_fun(mathParser.SUMSQ_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSUM_fun(mathParser.SUM_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSECOND_fun(mathParser.SECOND_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitGAMMADIST_fun(mathParser.GAMMADIST_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitOCT2HEX_fun(mathParser.OCT2HEX_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTODAY_fun(mathParser.TODAY_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitERROR_fun(mathParser.ERROR_funContext ctx) { + return visit_fun(ctx); + } + + @Override + public ConditionTree visitATAN_fun(mathParser.ATAN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitE_fun(mathParser.E_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTRIM_fun(mathParser.TRIM_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitRADIANS_fun(mathParser.RADIANS_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitGAMMALN_fun(mathParser.GAMMALN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTEXT_fun(mathParser.TEXT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitFISHER_fun(mathParser.FISHER_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitAND_fun(mathParser.AND_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitArrayJson_fun(mathParser.ArrayJson_funContext ctx) { + return visit_fun(ctx); + } + + @Override + public ConditionTree visitBIN2HEX_fun(mathParser.BIN2HEX_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitMULTINOMIAL_fun(mathParser.MULTINOMIAL_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitMONTH_fun(mathParser.MONTH_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitURLENCODE_fun(mathParser.URLENCODE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitNORMDIST_fun(mathParser.NORMDIST_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHMACSHA1_fun(mathParser.HMACSHA1_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitENDSWITH_fun(mathParser.ENDSWITH_funContext context) { + return visit_fun(context); + } + + + @Override + public ConditionTree visitBETADIST_fun(mathParser.BETADIST_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitATANH_fun(mathParser.ATANH_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitNOW_fun(mathParser.NOW_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitMEDIAN_fun(mathParser.MEDIAN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitPOWER_fun(mathParser.POWER_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitDEC2OCT_fun(mathParser.DEC2OCT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitPROPER_fun(mathParser.PROPER_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTRUNC_fun(mathParser.TRUNC_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitGCD_fun(mathParser.GCD_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTANH_fun(mathParser.TANH_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitHEX2BIN_fun(mathParser.HEX2BIN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSINH_fun(mathParser.SINH_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSHA512_fun(mathParser.SHA512_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitMIN_fun(mathParser.MIN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitADDDAYS_fun(mathParser.ADDDAYS_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitISNONTEXT_fun(mathParser.ISNONTEXT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitABS_fun(mathParser.ABS_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitROUNDDOWN_fun(mathParser.ROUNDDOWN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitIF_fun(mathParser.IF_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitJOIN_fun(mathParser.JOIN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitFIND_fun(mathParser.FIND_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSUBSTITUTE_fun(mathParser.SUBSTITUTE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitREPT_fun(mathParser.REPT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitASIN_fun(mathParser.ASIN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitMulDiv_fun(mathParser.MulDiv_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitREMOVESTART_fun(mathParser.REMOVESTART_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitT_fun(mathParser.T_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitWEEKDAY_fun(mathParser.WEEKDAY_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitBIN2OCT_fun(mathParser.BIN2OCT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitBASE64TOTEXT_fun(mathParser.BASE64TOTEXT_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTDIST_fun(mathParser.TDIST_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitDATEVALUE_fun(mathParser.DATEVALUE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSTARTSWITH_fun(mathParser.STARTSWITH_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitEVEN_fun(mathParser.EVEN_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLOGNORMDIST_fun(mathParser.LOGNORMDIST_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitISNULLOREMPTY_fun(mathParser.ISNULLOREMPTY_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTRUE_fun(mathParser.TRUE_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitFISHERINV_fun(mathParser.FISHERINV_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitSHA1_fun(mathParser.SHA1_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitTIME_fun(mathParser.TIME_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitATAN2_fun(mathParser.ATAN2_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitADDHOURS_fun(mathParser.ADDHOURS_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitRAND_fun(mathParser.RAND_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitNum(mathParser.NumContext ctx) { + return visit_fun(ctx); + } + + @Override + public ConditionTree visitUnit(mathParser.UnitContext ctx) { + return visit_fun(ctx); + } + + @Override + public ConditionTree visitArrayJson(mathParser.ArrayJsonContext ctx) { + return visit_fun(ctx); + } + + @Override + public ConditionTree visitParameter2(mathParser.Parameter2Context context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitVLOOKUP_fun(mathParser.VLOOKUP_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLOOKUP_fun(mathParser.LOOKUP_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitNULL_fun(mathParser.NULL_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitISNULL_fun(mathParser.ISNULL_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitISNULLORERROR_fun(mathParser.ISNULLORERROR_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitDiyFunction_fun(mathParser.DiyFunction_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitPercentage_fun(mathParser.Percentage_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitCOVARIANCES_fun(COVARIANCES_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitCOVAR_fun(COVAR_funContext context) { + return visit_fun(context); + } + @Override + public ConditionTree visitVersion_fun(Version_funContext context) { + return visit_fun(context); + } +} From 300fb38ed54bdc51002753fbc60214f80db7690a Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sat, 31 Jan 2026 22:48:29 +0800 Subject: [PATCH 04/98] fix --- .../Functions/csharp/Function_SUBSTRING.java | 60 ++++++--- .../Functions/csharp/Function_TRIMEND.java | 71 ++++++---- .../Functions/csharp/Function_TRIMSTART.java | 75 +++++++++++ .../csharpsecurity/Function_HMACMD5.java | 79 +++++++++++ .../csharpsecurity/Function_HMACSHA1.java | 79 +++++++++++ .../csharpsecurity/Function_HMACSHA256.java | 79 +++++++++++ .../csharpsecurity/Function_HMACSHA512.java | 79 +++++++++++ .../csharpsecurity/Function_MD5.java | 66 ++++++++++ .../csharpsecurity/Function_SHA1.java | 66 ++++++++++ .../csharpsecurity/Function_SHA256.java | 66 ++++++++++ .../csharpsecurity/Function_SHA512.java | 66 ++++++++++ .../internals/Functions/csharpweb/Base64.java | 49 +++++++ .../csharpweb/Function_BASE64TOTEXT.java | 51 ++++++++ .../csharpweb/Function_BASE64URLTOTEXT.java | 51 ++++++++ .../csharpweb/Function_HTMLDECODE.java | 44 +++++++ .../csharpweb/Function_HTMLENCODE.java | 63 +++++++++ .../csharpweb/Function_TEXTTOBASE64.java | 51 ++++++++ .../csharpweb/Function_TEXTTOBASE64URL.java | 51 ++++++++ .../csharpweb/Function_URLDECODE.java | 38 ++++++ .../csharpweb/Function_URLENCODE.java | 38 ++++++ .../Functions/datetimes/Function_ADDDAYS.java | 46 +++++++ .../datetimes/Function_ADDHOURS.java | 46 +++++++ .../datetimes/Function_ADDMINUTES.java | 46 +++++++ .../datetimes/Function_ADDMONTHS.java | 46 +++++++ .../datetimes/Function_ADDSECONDS.java | 46 +++++++ .../datetimes/Function_ADDYEARS.java | 46 +++++++ .../Functions/datetimes/Function_DATE.java | 98 ++++++++++++++ .../Functions/datetimes/Function_DATEDIF.java | 107 +++++++++++++++ .../datetimes/Function_DATEVALUE.java | 84 ++++++++++++ .../Functions/datetimes/Function_DAY.java | 35 +++++ .../Functions/datetimes/Function_DAYS360.java | 123 ++++++++++++++++++ .../Functions/datetimes/Function_EDATE.java | 46 +++++++ .../Functions/datetimes/Function_EOMONTH.java | 51 ++++++++ .../Functions/datetimes/Function_HOUR.java | 32 +++++ .../Functions/datetimes/Function_MINUTE.java | 32 +++++ 35 files changed, 2066 insertions(+), 40 deletions(-) create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMSTART.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACMD5.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA1.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA256.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA512.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_MD5.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA1.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA256.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA512.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Base64.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64TOTEXT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64URLTOTEXT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLDECODE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLENCODE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64URL.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLDECODE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLENCODE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDDAYS.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDHOURS.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMINUTES.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMONTHS.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDSECONDS.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDYEARS.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEDIF.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEVALUE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAY.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAYS360.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EDATE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EOMONTH.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_HOUR.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MINUTE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java index e0955befb..d103864c3 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java @@ -1,9 +1,11 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; public class Function_SUBSTRING extends Function_3 { public Function_SUBSTRING(FunctionBase func1, FunctionBase func2, FunctionBase func3) { @@ -11,28 +13,50 @@ public Function_SUBSTRING(FunctionBase func1, FunctionBase func2, FunctionBase f } @Override - public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); if(args1.isNotText()) { args1 = args1.toText("Function '{0}' parameter {1} is error!", "Substring", 1); if(args1.isError()) { return args1; } } - Operand args2 = func2.evaluate(work, tempParameter); if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Substring", 2); if(args2.isError()) { return args2; } } + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Substring", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Substring", 2); + if (args2.IsError()) { + return args2; + } + } String text = args1.getTextValue(); int startIndex = args2.getIntValue() - work.getExcelIndex(); - if(func3 == null) { - if(startIndex < 0) startIndex = 0; - if(startIndex > text.length()) startIndex = text.length(); - return Operand.create(text.substring(startIndex)); + if (startIndex < 0) { + startIndex = 0; + } + if (startIndex >= text.length()) { + return Operand.Create(""); + } + if (func3 == null) { + return Operand.Create(text.substring(startIndex)); + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Substring", 3); + if (args3.IsError()) { + return args3; + } } - Operand args3 = func3.evaluate(work, tempParameter); if(args3.isNotNumber()) { args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "Substring", 3); if(args3.isError()) { return args3; } } int length = args3.getIntValue(); - if(startIndex < 0) startIndex = 0; - if(startIndex > text.length()) startIndex = text.length(); int endIndex = startIndex + length; - if(endIndex > text.length()) endIndex = text.length(); - return Operand.create(text.substring(startIndex, endIndex)); + if (endIndex > text.length()) { + endIndex = text.length(); + } + return Operand.Create(text.substring(startIndex, endIndex)); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - addFunction(stringBuilder, "Substring"); + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Substring"); } } diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java index 8961989f3..8b2cbc102 100644 --- a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java @@ -1,9 +1,11 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; public class Function_TRIMEND extends Function_2 { public Function_TRIMEND(FunctionBase func1, FunctionBase func2) { @@ -11,38 +13,63 @@ public Function_TRIMEND(FunctionBase func1, FunctionBase func2) { } @Override - public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); if(args1.isNotText()) { args1 = args1.toText("Function '{0}' parameter {1} is error!", "TrimEnd", 1); if(args1.isError()) return args1; } - if(func2 == null) { - return Operand.create(args1.getTextValue().trim()); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TrimEnd", 1); + if (args1.IsError()) { + return args1; + } + } + if (func2 == null) { + return Operand.Create(trimEnd(args1.getTextValue())); + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "TrimEnd", 2); + if (args2.IsError()) { + return args2; + } } - Operand args2 = func2.evaluate(work, tempParameter); if(args2.isNotText()) { args2 = args2.toText("Function '{0}' parameter {1} is error!", "TrimEnd", 2); if(args2.isError()) return args2; } char[] trimChars = args2.getTextValue().toCharArray(); - return Operand.create(trimEnd(args1.getTextValue(), trimChars)); + return Operand.Create(trimEnd(args1.getTextValue(), trimChars)); } - private String trimEnd(String str, char[] trimChars) { + private String trimEnd(String str) { if (str == null || str.isEmpty()) { return str; } - int length = str.length(); - while (length > 0 && contains(trimChars, str.charAt(length - 1))) { - length--; + int end = str.length(); + while (end > 0 && Character.isWhitespace(str.charAt(end - 1))) { + end--; } - return str.substring(0, length); + return str.substring(0, end); } - private boolean contains(char[] array, char c) { - for (char ch : array) { - if (ch == c) { - return true; + private String trimEnd(String str, char[] trimChars) { + if (str == null || str.isEmpty()) { + return str; + } + int end = str.length(); + while (end > 0) { + boolean found = false; + char c = str.charAt(end - 1); + for (char trimChar : trimChars) { + if (c == trimChar) { + found = true; + break; + } + } + if (!found) { + break; } + end--; } - return false; + return str.substring(0, end); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - addFunction(stringBuilder, "TrimEnd"); + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "TrimEnd"); } } diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMSTART.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMSTART.java new file mode 100644 index 000000000..bf290b64a --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMSTART.java @@ -0,0 +1,75 @@ +package toolgood.algorithm.internals.functions.csharp; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_TRIMSTART extends Function_2 { + public Function_TRIMSTART(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TrimStart", 1); + if (args1.IsError()) { + return args1; + } + } + if (func2 == null) { + return Operand.Create(trimStart(args1.getTextValue())); + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "TrimStart", 2); + if (args2.IsError()) { + return args2; + } + } + char[] trimChars = args2.getTextValue().toCharArray(); + return Operand.Create(trimStart(args1.getTextValue(), trimChars)); + } + + private String trimStart(String str) { + if (str == null || str.isEmpty()) { + return str; + } + int start = 0; + while (start < str.length() && Character.isWhitespace(str.charAt(start))) { + start++; + } + return str.substring(start); + } + + private String trimStart(String str, char[] trimChars) { + if (str == null || str.isEmpty()) { + return str; + } + int start = 0; + while (start < str.length()) { + boolean found = false; + char c = str.charAt(start); + for (char trimChar : trimChars) { + if (c == trimChar) { + found = true; + break; + } + } + if (!found) { + break; + } + start++; + } + return str.substring(start); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "TrimStart"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACMD5.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACMD5.java new file mode 100644 index 000000000..76746d15b --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACMD5.java @@ -0,0 +1,79 @@ +package toolgood.algorithm.internals.functions.csharpsecurity; + +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.function.Function; + +public class Function_HMACMD5 extends Function_3 { + public Function_HMACMD5(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HmacMD5", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "HmacMD5", 2); + if (args2.IsError()) { + return args2; + } + } + try { + java.nio.charset.Charset charset; + if (func3 == null) { + charset = java.nio.charset.StandardCharsets.UTF_8; + } else { + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotText()) { + args3 = args3.ToText("Function '{0}' parameter {1} is error!", "HmacMD5", 3); + if (args3.IsError()) { + return args3; + } + } + charset = java.nio.charset.Charset.forName(args3.getTextValue()); + } + byte[] buffer = args1.getTextValue().getBytes(charset); + String secret = args2.getTextValue(); + String t = getHmacMd5String(buffer, secret); + return Operand.Create(t); + } catch (Exception ex) { + return Operand.Error("Function '{0}' is error!{1}", "HmacMD5", ex.getMessage()); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "HmacMD5"); + } + + private String getHmacMd5String(byte[] buffer, String secret) throws NoSuchAlgorithmException, InvalidKeyException { + byte[] keyByte = (secret != null ? secret : "").getBytes(java.nio.charset.StandardCharsets.UTF_8); + Mac mac = Mac.getInstance("HmacMD5"); + SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte, "HmacMD5"); + mac.init(secretKeySpec); + byte[] hashmessage = mac.doFinal(buffer); + return bytesToHex(hashmessage); + } + + private String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString().toUpperCase(); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA1.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA1.java new file mode 100644 index 000000000..652027d1a --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA1.java @@ -0,0 +1,79 @@ +package toolgood.algorithm.internals.functions.csharpsecurity; + +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.function.Function; + +public class Function_HMACSHA1 extends Function_3 { + public Function_HMACSHA1(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HmacSHA1", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "HmacSHA1", 2); + if (args2.IsError()) { + return args2; + } + } + try { + java.nio.charset.Charset charset; + if (func3 == null) { + charset = java.nio.charset.StandardCharsets.UTF_8; + } else { + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotText()) { + args3 = args3.ToText("Function '{0}' parameter {1} is error!", "HmacSHA1", 3); + if (args3.IsError()) { + return args3; + } + } + charset = java.nio.charset.Charset.forName(args3.getTextValue()); + } + byte[] buffer = args1.getTextValue().getBytes(charset); + String secret = args2.getTextValue(); + String t = getHmacSha1String(buffer, secret); + return Operand.Create(t); + } catch (Exception ex) { + return Operand.Error("Function '{0}' is error!{1}", "HmacSHA1", ex.getMessage()); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "HmacSHA1"); + } + + private String getHmacSha1String(byte[] buffer, String secret) throws NoSuchAlgorithmException, InvalidKeyException { + byte[] keyByte = (secret != null ? secret : "").getBytes(java.nio.charset.StandardCharsets.UTF_8); + Mac mac = Mac.getInstance("HmacSHA1"); + SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte, "HmacSHA1"); + mac.init(secretKeySpec); + byte[] hashmessage = mac.doFinal(buffer); + return bytesToHex(hashmessage); + } + + private String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString().toUpperCase(); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA256.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA256.java new file mode 100644 index 000000000..75a0a34a5 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA256.java @@ -0,0 +1,79 @@ +package toolgood.algorithm.internals.functions.csharpsecurity; + +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.function.Function; + +public class Function_HMACSHA256 extends Function_3 { + public Function_HMACSHA256(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HmacSHA256", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "HmacSHA256", 2); + if (args2.IsError()) { + return args2; + } + } + try { + java.nio.charset.Charset charset; + if (func3 == null) { + charset = java.nio.charset.StandardCharsets.UTF_8; + } else { + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotText()) { + args3 = args3.ToText("Function '{0}' parameter {1} is error!", "HmacSHA256", 3); + if (args3.IsError()) { + return args3; + } + } + charset = java.nio.charset.Charset.forName(args3.getTextValue()); + } + byte[] buffer = args1.getTextValue().getBytes(charset); + String secret = args2.getTextValue(); + String t = getHmacSha256String(buffer, secret); + return Operand.Create(t); + } catch (Exception ex) { + return Operand.Error("Function '{0}' is error!{1}", "HmacSHA256", ex.getMessage()); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "HmacSHA256"); + } + + private String getHmacSha256String(byte[] buffer, String secret) throws NoSuchAlgorithmException, InvalidKeyException { + byte[] keyByte = (secret != null ? secret : "").getBytes(java.nio.charset.StandardCharsets.UTF_8); + Mac mac = Mac.getInstance("HmacSHA256"); + SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte, "HmacSHA256"); + mac.init(secretKeySpec); + byte[] hashmessage = mac.doFinal(buffer); + return bytesToHex(hashmessage); + } + + private String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString().toUpperCase(); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA512.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA512.java new file mode 100644 index 000000000..9cd9612b2 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA512.java @@ -0,0 +1,79 @@ +package toolgood.algorithm.internals.functions.csharpsecurity; + +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.util.function.Function; + +public class Function_HMACSHA512 extends Function_3 { + public Function_HMACSHA512(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HmacSHA512", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "HmacSHA512", 2); + if (args2.IsError()) { + return args2; + } + } + try { + java.nio.charset.Charset charset; + if (func3 == null) { + charset = java.nio.charset.StandardCharsets.UTF_8; + } else { + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotText()) { + args3 = args3.ToText("Function '{0}' parameter {1} is error!", "HmacSHA512", 3); + if (args3.IsError()) { + return args3; + } + } + charset = java.nio.charset.Charset.forName(args3.getTextValue()); + } + byte[] buffer = args1.getTextValue().getBytes(charset); + String secret = args2.getTextValue(); + String t = getHmacSha512String(buffer, secret); + return Operand.Create(t); + } catch (Exception ex) { + return Operand.Error("Function '{0}' is error!{1}", "HmacSHA512", ex.getMessage()); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "HmacSHA512"); + } + + private String getHmacSha512String(byte[] buffer, String secret) throws NoSuchAlgorithmException, InvalidKeyException { + byte[] keyByte = (secret != null ? secret : "").getBytes(java.nio.charset.StandardCharsets.UTF_8); + Mac mac = Mac.getInstance("HmacSHA512"); + SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte, "HmacSHA512"); + mac.init(secretKeySpec); + byte[] hashmessage = mac.doFinal(buffer); + return bytesToHex(hashmessage); + } + + private String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString().toUpperCase(); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_MD5.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_MD5.java new file mode 100644 index 000000000..de0807cc9 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_MD5.java @@ -0,0 +1,66 @@ +package toolgood.algorithm.internals.functions.csharpsecurity; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.function.Function; + +public class Function_MD5 extends Function_2 { + public Function_MD5(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "MD5", 1); + if (args1.IsError()) { + return args1; + } + } + try { + java.nio.charset.Charset charset; + if (func2 == null) { + charset = java.nio.charset.StandardCharsets.UTF_8; + } else { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "MD5", 2); + if (args2.IsError()) { + return args2; + } + } + charset = java.nio.charset.Charset.forName(args2.getTextValue()); + } + byte[] buffer = args1.getTextValue().getBytes(charset); + String t = getMd5String(buffer); + return Operand.Create(t); + } catch (Exception ex) { + return Operand.Error("Function '{0}' is error!{1}", "MD5", ex.getMessage()); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "MD5"); + } + + private String getMd5String(byte[] buffer) throws NoSuchAlgorithmException { + MessageDigest md5 = MessageDigest.getInstance("MD5"); + byte[] retVal = md5.digest(buffer); + return bytesToHex(retVal); + } + + private String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString().toUpperCase(); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA1.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA1.java new file mode 100644 index 000000000..98cd87fb7 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA1.java @@ -0,0 +1,66 @@ +package toolgood.algorithm.internals.functions.csharpsecurity; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.function.Function; + +public class Function_SHA1 extends Function_2 { + public Function_SHA1(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "SHA1", 1); + if (args1.IsError()) { + return args1; + } + } + try { + java.nio.charset.Charset charset; + if (func2 == null) { + charset = java.nio.charset.StandardCharsets.UTF_8; + } else { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "SHA1", 2); + if (args2.IsError()) { + return args2; + } + } + charset = java.nio.charset.Charset.forName(args2.getTextValue()); + } + byte[] buffer = args1.getTextValue().getBytes(charset); + String t = getSha1String(buffer); + return Operand.Create(t); + } catch (Exception ex) { + return Operand.Error("Function '{0}' is error!{1}", "SHA1", ex.getMessage()); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "SHA1"); + } + + private String getSha1String(byte[] buffer) throws NoSuchAlgorithmException { + MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); + byte[] retVal = sha1.digest(buffer); + return bytesToHex(retVal); + } + + private String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString().toUpperCase(); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA256.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA256.java new file mode 100644 index 000000000..1e83de4b0 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA256.java @@ -0,0 +1,66 @@ +package toolgood.algorithm.internals.functions.csharpsecurity; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.function.Function; + +public class Function_SHA256 extends Function_2 { + public Function_SHA256(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "SHA256", 1); + if (args1.IsError()) { + return args1; + } + } + try { + java.nio.charset.Charset charset; + if (func2 == null) { + charset = java.nio.charset.StandardCharsets.UTF_8; + } else { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "SHA256", 2); + if (args2.IsError()) { + return args2; + } + } + charset = java.nio.charset.Charset.forName(args2.getTextValue()); + } + byte[] buffer = args1.getTextValue().getBytes(charset); + String t = getSha256String(buffer); + return Operand.Create(t); + } catch (Exception ex) { + return Operand.Error("Function '{0}' is error!{1}", "SHA256", ex.getMessage()); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "SHA256"); + } + + private String getSha256String(byte[] buffer) throws NoSuchAlgorithmException { + MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); + byte[] retVal = sha256.digest(buffer); + return bytesToHex(retVal); + } + + private String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString().toUpperCase(); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA512.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA512.java new file mode 100644 index 000000000..6212dde5c --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA512.java @@ -0,0 +1,66 @@ +package toolgood.algorithm.internals.functions.csharpsecurity; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.security.MessageDigest; +import java.security.NoSuchAlgorithmException; +import java.util.function.Function; + +public class Function_SHA512 extends Function_2 { + public Function_SHA512(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "SHA512", 1); + if (args1.IsError()) { + return args1; + } + } + try { + java.nio.charset.Charset charset; + if (func2 == null) { + charset = java.nio.charset.StandardCharsets.UTF_8; + } else { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "SHA512", 2); + if (args2.IsError()) { + return args2; + } + } + charset = java.nio.charset.Charset.forName(args2.getTextValue()); + } + byte[] buffer = args1.getTextValue().getBytes(charset); + String t = getSha512String(buffer); + return Operand.Create(t); + } catch (Exception ex) { + return Operand.Error("Function '{0}' is error!{1}", "SHA512", ex.getMessage()); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "SHA512"); + } + + private String getSha512String(byte[] buffer) throws NoSuchAlgorithmException { + MessageDigest sha512 = MessageDigest.getInstance("SHA-512"); + byte[] retVal = sha512.digest(buffer); + return bytesToHex(retVal); + } + + private String bytesToHex(byte[] bytes) { + StringBuilder sb = new StringBuilder(); + for (byte b : bytes) { + sb.append(String.format("%02x", b)); + } + return sb.toString().toUpperCase(); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Base64.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Base64.java new file mode 100644 index 000000000..8c59a4696 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Base64.java @@ -0,0 +1,49 @@ +package toolgood.algorithm.internals.functions.csharpweb; + +import java.util.Base64; + +/** + * Modified Base64 for URL applications ('base64url' encoding) + * + * See http://tools.ietf.org/html/rfc4648 + * For more information see http://en.wikipedia.org/wiki/Base64 + */ +public class Base64 { + private static final Base64.Encoder encoder = Base64.getEncoder(); + private static final Base64.Decoder decoder = Base64.getDecoder(); + private static final Base64.Encoder urlEncoder = Base64.getUrlEncoder().withoutPadding(); + private static final Base64.Decoder urlDecoder = Base64.getUrlDecoder(); + private static final String base64 = "===========================================+=+=/0123456789=======ABCDEFGHIJKLMNOPQRSTUVWXYZ====/=abcdefghijklmnopqrstuvwxyz====="; + + public static String ToBase64String(byte[] input) { + return encoder.encodeToString(input); + } + + public static byte[] FromBase64String(String base64Str) { + return decoder.decode(base64Str); + } + + /** + * Modified Base64 for URL applications ('base64url' encoding) + * + * See http://tools.ietf.org/html/rfc4648 + * For more information see http://en.wikipedia.org/wiki/Base64 + * @param input + * @return Input byte array converted to a base64ForUrl encoded string + */ + public static String ToBase64ForUrlString(byte[] input) { + return urlEncoder.encodeToString(input); + } + + /** + * Modified Base64 for URL applications ('base64url' encoding) + * + * See http://tools.ietf.org/html/rfc4648 + * For more information see http://en.wikipedia.org/wiki/Base64 + * @param base64ForUrlInput + * @return Input base64ForUrl encoded string as the original byte array + */ + public static byte[] FromBase64ForUrlString(String base64ForUrlInput) { + return urlDecoder.decode(base64ForUrlInput); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64TOTEXT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64TOTEXT.java new file mode 100644 index 000000000..f0b874cf8 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64TOTEXT.java @@ -0,0 +1,51 @@ +package toolgood.algorithm.internals.functions.csharpweb; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_BASE64TOTEXT extends Function_2 { + public Function_BASE64TOTEXT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Base64ToText", 1); + if (args1.IsError()) { + return args1; + } + } + try { + java.nio.charset.Charset charset; + if (func2 == null) { + charset = java.nio.charset.StandardCharsets.UTF_8; + } else { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Base64ToText", 2); + if (args2.IsError()) { + return args2; + } + } + charset = java.nio.charset.Charset.forName(args2.getTextValue()); + } + byte[] bytes = Base64.FromBase64String(args1.getTextValue()); + String t = new String(bytes, charset); + return Operand.Create(t); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.Error("Function '{0}' is error!", "Base64ToText"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Base64ToText"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64URLTOTEXT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64URLTOTEXT.java new file mode 100644 index 000000000..0d88332f9 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64URLTOTEXT.java @@ -0,0 +1,51 @@ +package toolgood.algorithm.internals.functions.csharpweb; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_BASE64URLTOTEXT extends Function_2 { + public Function_BASE64URLTOTEXT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Base64urlToText", 1); + if (args1.IsError()) { + return args1; + } + } + try { + java.nio.charset.Charset charset; + if (func2 == null) { + charset = java.nio.charset.StandardCharsets.UTF_8; + } else { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Base64urlToText", 2); + if (args2.IsError()) { + return args2; + } + } + charset = java.nio.charset.Charset.forName(args2.getTextValue()); + } + byte[] bytes = Base64.FromBase64ForUrlString(args1.getTextValue()); + String t = new String(bytes, charset); + return Operand.Create(t); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.Error("Function '{0}' is error!", "Base64urlToText"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Base64urlToText"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLDECODE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLDECODE.java new file mode 100644 index 000000000..1ba08caaf --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLDECODE.java @@ -0,0 +1,44 @@ +package toolgood.algorithm.internals.functions.csharpweb; + +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_HTMLDECODE extends Function_1 { + public Function_HTMLDECODE(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "HtmlDecode"); + if (args1.IsError()) { + return args1; + } + } + String s = args1.getTextValue(); + String r = HtmlDecode(s); + return Operand.Create(r); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "HtmlDecode"); + } + + private String HtmlDecode(String value) { + if (value == null) { + return ""; + } + return value.replace("<", "<") + .replace(">", ">") + .replace("&", "&") + .replace(""", "\"") + .replace("'", "'"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLENCODE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLENCODE.java new file mode 100644 index 000000000..0d7f60709 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLENCODE.java @@ -0,0 +1,63 @@ +package toolgood.algorithm.internals.functions.csharpweb; + +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_HTMLENCODE extends Function_1 { + public Function_HTMLENCODE(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "HtmlEncode"); + if (args1.IsError()) { + return args1; + } + } + String s = args1.getTextValue(); + String r = HtmlEncode(s); + return Operand.Create(r); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "HtmlEncode"); + } + + private String HtmlEncode(String value) { + if (value == null) { + return ""; + } + StringBuilder sb = new StringBuilder(value.length()); + for (char c : value.toCharArray()) { + switch (c) { + case '<': + sb.append("<"); + break; + case '>': + sb.append(">"); + break; + case '&': + sb.append("&"); + break; + case '"': + sb.append("""); + break; + case '\'': + sb.append("'"); + break; + default: + sb.append(c); + break; + } + } + return sb.toString(); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64.java new file mode 100644 index 000000000..ba10b93ff --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64.java @@ -0,0 +1,51 @@ +package toolgood.algorithm.internals.functions.csharpweb; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_TEXTTOBASE64 extends Function_2 { + public Function_TEXTTOBASE64(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TextToBase64", 1); + if (args1.IsError()) { + return args1; + } + } + try { + java.nio.charset.Charset charset; + if (func2 == null) { + charset = java.nio.charset.StandardCharsets.UTF_8; + } else { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "TextToBase64", 2); + if (args2.IsError()) { + return args2; + } + } + charset = java.nio.charset.Charset.forName(args2.getTextValue()); + } + byte[] bytes = args1.getTextValue().getBytes(charset); + String t = Base64.ToBase64String(bytes); + return Operand.Create(t); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.Error("Function '{0}' is error!", "TextToBase64"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "TextToBase64"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64URL.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64URL.java new file mode 100644 index 000000000..025890861 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64URL.java @@ -0,0 +1,51 @@ +package toolgood.algorithm.internals.functions.csharpweb; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_TEXTTOBASE64URL extends Function_2 { + public Function_TEXTTOBASE64URL(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TextToBase64url", 1); + if (args1.IsError()) { + return args1; + } + } + try { + java.nio.charset.Charset charset; + if (func2 == null) { + charset = java.nio.charset.StandardCharsets.UTF_8; + } else { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "TextToBase64url", 2); + if (args2.IsError()) { + return args2; + } + } + charset = java.nio.charset.Charset.forName(args2.getTextValue()); + } + byte[] bytes = args1.getTextValue().getBytes(charset); + String t = Base64.ToBase64ForUrlString(bytes); + return Operand.Create(t); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.Error("Function '{0}' is error!", "TextToBase64url"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "TextToBase64url"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLDECODE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLDECODE.java new file mode 100644 index 000000000..5e7950c09 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLDECODE.java @@ -0,0 +1,38 @@ +package toolgood.algorithm.internals.functions.csharpweb; + +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_URLDECODE extends Function_1 { + public Function_URLDECODE(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "UrlDecode"); + if (args1.IsError()) { + return args1; + } + } + try { + String s = args1.getTextValue(); + String r = java.net.URLDecoder.decode(s, "UTF-8"); + return Operand.Create(r); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.Error("Function '{0}' is error!", "UrlDecode"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "UrlDecode"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLENCODE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLENCODE.java new file mode 100644 index 000000000..784214b1b --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLENCODE.java @@ -0,0 +1,38 @@ +package toolgood.algorithm.internals.functions.csharpweb; + +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_URLENCODE extends Function_1 { + public Function_URLENCODE(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "UrlEncode"); + if (args1.IsError()) { + return args1; + } + } + try { + String s = args1.getTextValue(); + String r = java.net.URLEncoder.encode(s, "UTF-8"); + return Operand.Create(r); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.Error("Function '{0}' is error!", "UrlEncode"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "UrlEncode"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDDAYS.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDDAYS.java new file mode 100644 index 000000000..2ad69f90c --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDDAYS.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_ADDDAYS extends Function_2 { + public Function_ADDDAYS(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddDays", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddDays", 2); + if (args2.isError()) { + return args2; + } + } + try { + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + int days = args2.getIntValue(); + toolgood.algorithm.internals.MyDate result = date.AddDays(days); + return Operand.create(result); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.error("Function '{0}' is error!", "AddDays"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "AddDays"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDHOURS.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDHOURS.java new file mode 100644 index 000000000..82c734587 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDHOURS.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_ADDHOURS extends Function_2 { + public Function_ADDHOURS(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddHours", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddHours", 2); + if (args2.isError()) { + return args2; + } + } + try { + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + int hours = args2.getIntValue(); + toolgood.algorithm.internals.MyDate result = date.AddHours(hours); + return Operand.create(result); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.error("Function '{0}' is error!", "AddHours"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "AddHours"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMINUTES.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMINUTES.java new file mode 100644 index 000000000..8d9bb0080 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMINUTES.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_ADDMINUTES extends Function_2 { + public Function_ADDMINUTES(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddMinutes", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddMinutes", 2); + if (args2.isError()) { + return args2; + } + } + try { + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + int minutes = args2.getIntValue(); + toolgood.algorithm.internals.MyDate result = date.AddMinutes(minutes); + return Operand.create(result); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.error("Function '{0}' is error!", "AddMinutes"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "AddMinutes"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMONTHS.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMONTHS.java new file mode 100644 index 000000000..ac3a5f23b --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMONTHS.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_ADDMONTHS extends Function_2 { + public Function_ADDMONTHS(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddMonths", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddMonths", 2); + if (args2.isError()) { + return args2; + } + } + try { + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + int months = args2.getIntValue(); + toolgood.algorithm.internals.MyDate result = date.AddMonths(months); + return Operand.create(result); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.error("Function '{0}' is error!", "AddMonths"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "AddMonths"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDSECONDS.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDSECONDS.java new file mode 100644 index 000000000..680de86e1 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDSECONDS.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_ADDSECONDS extends Function_2 { + public Function_ADDSECONDS(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddSeconds", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddSeconds", 2); + if (args2.isError()) { + return args2; + } + } + try { + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + int seconds = args2.getIntValue(); + toolgood.algorithm.internals.MyDate result = date.AddSeconds(seconds); + return Operand.create(result); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.error("Function '{0}' is error!", "AddSeconds"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "AddSeconds"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDYEARS.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDYEARS.java new file mode 100644 index 000000000..981870f09 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDYEARS.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_ADDYEARS extends Function_2 { + public Function_ADDYEARS(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddYears", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddYears", 2); + if (args2.isError()) { + return args2; + } + } + try { + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + int years = args2.getIntValue(); + toolgood.algorithm.internals.MyDate result = date.AddYears(years); + return Operand.create(result); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.error("Function '{0}' is error!", "AddYears"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "AddYears"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATE.java new file mode 100644 index 000000000..6ac882035 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATE.java @@ -0,0 +1,98 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_DATE extends Function_N { + public Function_DATE(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = funcs[0].Evaluate(work, tempParameter); + if (args1.isNotNumber()) { + args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Date", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = funcs[1].Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Date", 2); + if (args2.isError()) { + return args2; + } + } + Operand args3 = funcs[2].Evaluate(work, tempParameter); + if (args3.isNotNumber()) { + args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "Date", 3); + if (args3.isError()) { + return args3; + } + } + + toolgood.algorithm.internals.MyDate d; + if (funcs.length == 3) { + d = new toolgood.algorithm.internals.MyDate(args1.getIntValue(), args2.getIntValue(), args3.getIntValue(), 0, 0, 0); + } else if (funcs.length == 4) { + Operand args4 = funcs[3].Evaluate(work, tempParameter); + if (args4.isNotNumber()) { + args4 = args4.toNumber("Function '{0}' parameter {1} is error!", "Date", 4); + if (args4.isError()) { + return args4; + } + } + d = new toolgood.algorithm.internals.MyDate(args1.getIntValue(), args2.getIntValue(), args3.getIntValue(), args4.getIntValue(), 0, 0); + } else if (funcs.length == 5) { + Operand args4 = funcs[3].Evaluate(work, tempParameter); + if (args4.isNotNumber()) { + args4 = args4.toNumber("Function '{0}' parameter {1} is error!", "Date", 4); + if (args4.isError()) { + return args4; + } + } + Operand args5 = funcs[4].Evaluate(work, tempParameter); + if (args5.isNotNumber()) { + args5 = args5.toNumber("Function '{0}' parameter {1} is error!", "Date", 5); + if (args5.isError()) { + return args5; + } + } + d = new toolgood.algorithm.internals.MyDate(args1.getIntValue(), args2.getIntValue(), args3.getIntValue(), args4.getIntValue(), args5.getIntValue(), 0); + } else { + Operand args4 = funcs[3].Evaluate(work, tempParameter); + if (args4.isNotNumber()) { + args4 = args4.toNumber("Function '{0}' parameter {1} is error!", "Date", 4); + if (args4.isError()) { + return args4; + } + } + Operand args5 = funcs[4].Evaluate(work, tempParameter); + if (args5.isNotNumber()) { + args5 = args5.toNumber("Function '{0}' parameter {1} is error!", "Date", 5); + if (args5.isError()) { + return args5; + } + } + Operand args6 = funcs[5].Evaluate(work, tempParameter); + if (args6.isNotNumber()) { + args6 = args6.toNumber("Function '{0}' parameter {1} is error!", "Date", 6); + if (args6.isError()) { + return args6; + } + } + d = new toolgood.algorithm.internals.MyDate(args1.getIntValue(), args2.getIntValue(), args3.getIntValue(), args4.getIntValue(), args5.getIntValue(), args6.getIntValue()); + } + return Operand.create(d); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Date"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEDIF.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEDIF.java new file mode 100644 index 000000000..499a5a483 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEDIF.java @@ -0,0 +1,107 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_DATEDIF extends Function_3 { + public Function_DATEDIF(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "DateDif", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotDate()) { + args2 = args2.toMyDate("Function '{0}' parameter {1} is error!", "DateDif", 2); + if (args2.isError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.isNotText()) { + args3 = args3.toText("Function '{0}' parameter {1} is error!", "DateDif", 3); + if (args3.isError()) { + return args3; + } + } + toolgood.algorithm.internals.MyDate startMyDate = args1.getDateValue(); + toolgood.algorithm.internals.MyDate endMyDate = args2.getDateValue(); + String t = args3.getTextValue().toLowerCase(); + + if (t.equals("y")) { + // 计算年差 + boolean b = false; + if (startMyDate.Month < endMyDate.Month) { + b = true; + } else if (startMyDate.Month == endMyDate.Month) { + if (startMyDate.Day <= endMyDate.Day) b = true; + } + if (b) { + return Operand.create(endMyDate.Year - startMyDate.Year); + } else { + return Operand.create(endMyDate.Year - startMyDate.Year - 1); + } + } else if (t.equals("m")) { + // 计算月差 + boolean b = false; + if (startMyDate.Day <= endMyDate.Day) b = true; + if (b) { + return Operand.create(endMyDate.Year * 12 + endMyDate.Month - startMyDate.Year * 12 - startMyDate.Month); + } else { + return Operand.create(endMyDate.Year * 12 + endMyDate.Month - startMyDate.Year * 12 - startMyDate.Month - 1); + } + } else if (t.equals("d")) { + // 计算日差 + long days = endMyDate.ToDateTime().getMillis() - startMyDate.ToDateTime().getMillis(); + days = days / (1000 * 60 * 60 * 24); + return Operand.create((int) days); + } else if (t.equals("yd")) { + // 计算年内日差 + int startDayOfYear = startMyDate.DayOfYear(); + int endDayOfYear = endMyDate.DayOfYear(); + int day = endDayOfYear - startDayOfYear; + if (endMyDate.Year > startMyDate.Year && day < 0) { + // 获取 startMyDate 所在年份的天数 + int days = startMyDate.ToDateTime().dayOfYear().withMaximumValue().getDayOfYear(); + day = days + day; + } + return Operand.create(day); + } else if (t.equals("md")) { + // 计算月内日差 + int mo = endMyDate.Day - startMyDate.Day; + if (mo < 0) { + int days; + if (startMyDate.Month == 12) { + days = startMyDate.ToDateTime().withMonthOfYear(12).dayOfMonth().withMaximumValue().getDayOfMonth(); + } else { + days = startMyDate.ToDateTime().withMonthOfYear(startMyDate.Month).dayOfMonth().withMaximumValue().getDayOfMonth(); + } + mo += days; + } + return Operand.create(mo); + } else if (t.equals("ym")) { + // 计算年内地差 + int mo = endMyDate.Month - startMyDate.Month; + if (endMyDate.Day < startMyDate.Day) mo--; + if (mo < 0) mo += 12; + return Operand.create(mo); + } + return Operand.error("Function '{0}' parameter {1} is error!", "DateDif", 3); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "DateDif"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEVALUE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEVALUE.java new file mode 100644 index 000000000..00758a43c --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEVALUE.java @@ -0,0 +1,84 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +public class Function_DATEVALUE extends Function_N { + public Function_DATEVALUE(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.isError()) { + return aa; + } + args.add(aa); + } + if (args.get(0).isDate()) { + return args.get(0); + } + int type = 0; + if (args.size() == 2) { + Operand args2 = args.get(1).toNumber("Function '{0}' parameter {1} is error!", "DateValue", 2); + if (args2.isError()) { + return args2; + } + type = args2.getIntValue(); + } + if (type == 0) { + if (args.get(0).isText()) { + toolgood.algorithm.internals.MyDate date = toolgood.algorithm.internals.MyDate.parse(args.get(0).getTextValue()); + if (date != null) { + return Operand.create(date); + } + } + Operand args1 = args.get(0).toNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); + if (args1.getLongValue() <= 2958465L) { // 9999-12-31 日时间在excel的数字为 2958465 + return args1.toMyDate(); + } + if (args1.getLongValue() <= 253402232399L) { // 9999-12-31 12:59:59 日时间 转 时间截 为 253402232399L + // 这里需要实现类似 FunctionUtil.StartDateUtc.AddSeconds 的功能 + // 暂时使用 MyDate 的构造函数来处理 + return Operand.create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / 86400.0)); + } + // 注:时间截 253402232399 ms 转时间 为 1978-01-12 05:30:32 + // 这里需要实现类似 FunctionUtil.StartDateUtc.AddMilliseconds 的功能 + return Operand.create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / (86400.0 * 1000.0))); + } else if (type == 1) { + Operand args1 = args.get(0).toText("Function '{0}' parameter {1} is error!", "DateValue", 1); + if (args1.isError()) { + return args1; + } + toolgood.algorithm.internals.MyDate date = toolgood.algorithm.internals.MyDate.parse(args1.getTextValue()); + if (date != null) { + return Operand.create(date); + } + } else if (type == 2) { + return args.get(0).toNumber("Function '{0}' parameter is error!", "DateValue").toMyDate(); + } else if (type == 3) { + Operand args1 = args.get(0).toNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); + // 这里需要实现类似 FunctionUtil.StartDateUtc.AddMilliseconds 的功能 + return Operand.create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / (86400.0 * 1000.0))); + } else if (type == 4) { + Operand args1 = args.get(0).toNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); + // 这里需要实现类似 FunctionUtil.StartDateUtc.AddSeconds 的功能 + return Operand.create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / 86400.0)); + } + return Operand.error("Function '{0}' parameter is error!", "DateValue"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "DateValue"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAY.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAY.java new file mode 100644 index 000000000..30975f575 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAY.java @@ -0,0 +1,35 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_DAY extends Function_1 { + public Function_DAY(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter is error!", "Day"); + if (args1.isError()) { + return args1; + } + } + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + if (date.Day == null) { + return Operand.error("Function '{0}' is error!", "Day"); + } + return Operand.create(date.Day); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Day"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAYS360.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAYS360.java new file mode 100644 index 000000000..21bb2b066 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAYS360.java @@ -0,0 +1,123 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_DAYS360 extends Function_3 { + public Function_DAYS360(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "Days360", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotDate()) { + args2 = args2.toMyDate("Function '{0}' parameter {1} is error!", "Days360", 2); + if (args2.isError()) { + return args2; + } + } + + toolgood.algorithm.internals.MyDate startMyDate = args1.getDateValue(); + toolgood.algorithm.internals.MyDate endMyDate = args2.getDateValue(); + + boolean method = false; + if (func3 != null) { + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.isNotBoolean()) { + args3 = args3.toBoolean("Function '{0}' parameter {1} is error!", "Days360", 3); + if (args3.isError()) { + return args3; + } + } + if (args3.isError()) { + return args3; + } + method = args3.getBooleanValue(); + } + int days = endMyDate.Year * 360 + (endMyDate.Month - 1) * 30 + - startMyDate.Year * 360 - (startMyDate.Month - 1) * 30; + if (method) { + if (endMyDate.Day == 31) days += 30; + if (startMyDate.Day == 31) days -= 30; + } else { + if (startMyDate.Month == 12) { + // 获取12月的天数 + int daysInMonth = 31; + if (startMyDate.Day == daysInMonth) { + days -= 30; + } else { + days -= startMyDate.Day; + } + } else { + // 获取当月的天数 + int daysInMonth = getDaysInMonth(startMyDate.Year, startMyDate.Month); + if (startMyDate.Day == daysInMonth) { + days -= 30; + } else { + days -= startMyDate.Day; + } + } + if (endMyDate.Month == 12) { + // 获取12月的天数 + int daysInMonth = 31; + if (endMyDate.Day == daysInMonth) { + if (startMyDate.Day < 30) { + days += 31; + } else { + days += 30; + } + } else { + days += endMyDate.Day; + } + } else { + // 获取当月的天数 + int daysInMonth = getDaysInMonth(endMyDate.Year, endMyDate.Month); + if (endMyDate.Day == daysInMonth) { + if (startMyDate.Day < 30) { + days += 31; + } else { + days += 30; + } + } else { + days += endMyDate.Day; + } + } + } + return Operand.create(days); + } + + private int getDaysInMonth(int year, int month) { + switch (month) { + case 1: case 3: case 5: case 7: case 8: case 10: case 12: + return 31; + case 4: case 6: case 9: case 11: + return 30; + case 2: + // 检查是否是闰年 + if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) { + return 29; + } else { + return 28; + } + default: + return 0; + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Days360"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EDATE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EDATE.java new file mode 100644 index 000000000..5b2a221a8 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EDATE.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_EDATE extends Function_2 { + public Function_EDATE(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "EDate", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "EDate", 2); + if (args2.isError()) { + return args2; + } + } + try { + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + int months = args2.getIntValue(); + toolgood.algorithm.internals.MyDate result = date.AddMonths(months); + return Operand.create(result); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.error("Function '{0}' is error!", "EDate"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "EDate"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EOMONTH.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EOMONTH.java new file mode 100644 index 000000000..b181ac9da --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EOMONTH.java @@ -0,0 +1,51 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_EOMONTH extends Function_2 { + public Function_EOMONTH(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "EoMonth", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "EoMonth", 2); + if (args2.isError()) { + return args2; + } + } + try { + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + int months = args2.getIntValue(); + // 添加指定的月份数(加上1) + toolgood.algorithm.internals.MyDate tempDate = date.AddMonths(months + 1); + // 创建一个新的日期,设置为该月的第一天 + toolgood.algorithm.internals.MyDate firstDayOfMonth = new toolgood.algorithm.internals.MyDate(tempDate.Year, tempDate.Month, 1, 0, 0, 0); + // 减去一天,得到上个月的最后一天 + toolgood.algorithm.internals.MyDate lastDayOfMonth = firstDayOfMonth.AddDays(-1); + return Operand.create(lastDayOfMonth); + } catch (Exception e) { + // 捕获所有异常 + } + return Operand.error("Function '{0}' is error!", "EoMonth"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "EoMonth"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_HOUR.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_HOUR.java new file mode 100644 index 000000000..d8e3675b1 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_HOUR.java @@ -0,0 +1,32 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_HOUR extends Function_1 { + public Function_HOUR(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter is error!", "Hour"); + if (args1.isError()) { + return args1; + } + } + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + return Operand.create(date.Hour); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Hour"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MINUTE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MINUTE.java new file mode 100644 index 000000000..640966e84 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MINUTE.java @@ -0,0 +1,32 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_MINUTE extends Function_1 { + public Function_MINUTE(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter is error!", "Minute"); + if (args1.isError()) { + return args1; + } + } + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + return Operand.create(date.Minute); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Minute"); + } +} \ No newline at end of file From 6aacf76f540d93cbfd8626acaeae3e36f9b5df46 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sat, 31 Jan 2026 23:03:36 +0800 Subject: [PATCH 05/98] fix --- .../Functions/datetimes/Function_MONTH.java | 35 ++++++++++ .../datetimes/Function_NETWORKDAYS.java | 68 ++++++++++++++++++ .../Functions/datetimes/Function_NOW.java | 20 ++++++ .../Functions/datetimes/Function_SECOND.java | 32 +++++++++ .../Functions/datetimes/Function_TIME.java | 52 ++++++++++++++ .../datetimes/Function_TIMESTAMP.java | 56 +++++++++++++++ .../datetimes/Function_TIMEVALUE.java | 61 ++++++++++++++++ .../Functions/datetimes/Function_TODAY.java | 22 ++++++ .../Functions/datetimes/Function_WEEKDAY.java | 62 ++++++++++++++++ .../Functions/datetimes/Function_WEEKNUM.java | 54 ++++++++++++++ .../Functions/datetimes/Function_WORKDAY.java | 70 +++++++++++++++++++ .../Functions/datetimes/Function_YEAR.java | 31 ++++++++ 12 files changed, 563 insertions(+) create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MONTH.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NETWORKDAYS.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NOW.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_SECOND.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIME.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMESTAMP.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMEVALUE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TODAY.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKDAY.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKNUM.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WORKDAY.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_YEAR.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MONTH.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MONTH.java new file mode 100644 index 000000000..90aafbdef --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MONTH.java @@ -0,0 +1,35 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_MONTH extends Function_1 { + public Function_MONTH(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter is error!", "Month"); + if (args1.isError()) { + return args1; + } + } + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + if (date.Month == null) { + return Operand.error("Function '{0}' is error!", "Month"); + } + return Operand.create(date.Month); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Month"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NETWORKDAYS.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NETWORKDAYS.java new file mode 100644 index 000000000..630cd30a1 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NETWORKDAYS.java @@ -0,0 +1,68 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.HashSet; +import java.util.function.Function; + +public class Function_NETWORKDAYS extends Function_N { + public Function_NETWORKDAYS(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = funcs[0].Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = funcs[1].Evaluate(work, tempParameter); + if (args2.isNotDate()) { + args2 = args2.toMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 2); + if (args2.isError()) { + return args2; + } + } + + toolgood.algorithm.internals.MyDate startMyDate = args1.getDateValue(); + toolgood.algorithm.internals.MyDate endMyDate = args2.getDateValue(); + + HashSet list = new HashSet<>(); + for (int i = 2; i < funcs.length; i++) { + Operand ar = funcs[i].Evaluate(work, tempParameter); + if (ar.isNotDate()) { + ar = ar.toMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", i + 1); + if (ar.isError()) { + return ar; + } + } + toolgood.algorithm.internals.MyDate holiday = ar.getDateValue(); + list.add(holiday.Year + "-" + holiday.Month + "-" + holiday.Day); + } + int days = 0; + toolgood.algorithm.internals.MyDate currentDate = startMyDate; + while (currentDate.ToDateTime().isBefore(endMyDate.ToDateTime()) || currentDate.ToDateTime().isEqual(endMyDate.ToDateTime())) { + int dayOfWeek = currentDate.DayOfWeek(); + // 1-7,其中 1 是周日,7 是周六 + if (dayOfWeek != 1 && dayOfWeek != 7) { + String dateStr = currentDate.Year + "-" + currentDate.Month + "-" + currentDate.Day; + if (!list.contains(dateStr)) { + days++; + } + } + currentDate = currentDate.AddDays(1); + } + return Operand.create(days); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "NetWorkdays"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NOW.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NOW.java new file mode 100644 index 000000000..624458069 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NOW.java @@ -0,0 +1,20 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_NOW extends FunctionBase { + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + toolgood.algorithm.internals.MyDate now = toolgood.algorithm.internals.MyDate.now(); + return Operand.create(now); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + stringBuilder.append("Now()"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_SECOND.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_SECOND.java new file mode 100644 index 000000000..5f4c3dd55 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_SECOND.java @@ -0,0 +1,32 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_SECOND extends Function_1 { + public Function_SECOND(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter is error!", "Second"); + if (args1.isError()) { + return args1; + } + } + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + return Operand.create(date.Second); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Second"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIME.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIME.java new file mode 100644 index 000000000..d1e12932a --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIME.java @@ -0,0 +1,52 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_TIME extends Function_3 { + public Function_TIME(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotNumber()) { + args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Time", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Time", 2); + if (args2.isError()) { + return args2; + } + } + + toolgood.algorithm.internals.MyDate d; + if (func3 != null) { + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.isNotNumber()) { + args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "Time", 3); + if (args3.isError()) { + return args3; + } + } + d = new toolgood.algorithm.internals.MyDate(0, 0, 0, args1.getIntValue(), args2.getIntValue(), args3.getIntValue()); + } else { + d = new toolgood.algorithm.internals.MyDate(0, 0, 0, args1.getIntValue(), args2.getIntValue(), 0); + } + return Operand.create(d); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Time"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMESTAMP.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMESTAMP.java new file mode 100644 index 000000000..77edb71f4 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMESTAMP.java @@ -0,0 +1,56 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_TIMESTAMP extends Function_2 { + public Function_TIMESTAMP(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args0 = func1.Evaluate(work, tempParameter); + if (args0.isError()) { + return args0; + } + + int type = 0; // 毫秒 + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "TimeStamp", 2); + if (args2.isError()) { + return args2; + } + } + type = args2.getIntValue(); + } + Operand dateOperand = args0.toMyDate("Function '{0}' parameter {1} is error!", "TimeStamp", 1); + if (dateOperand.isError()) { + return dateOperand; + } + toolgood.algorithm.internals.MyDate myDate = dateOperand.getDateValue(); + + // 计算时间戳 + long timestamp = myDate.ToDateTime().getMillis(); + + if (type == 0) { + // 返回毫秒时间戳 + return Operand.create(timestamp); + } else if (type == 1) { + // 返回秒时间戳 + return Operand.create((double) timestamp / 1000); + } + return Operand.error("Function '{0}' parameter is error!", "TimeStamp"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "TimeStamp"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMEVALUE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMEVALUE.java new file mode 100644 index 000000000..f81487ba6 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMEVALUE.java @@ -0,0 +1,61 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Function_TIMEVALUE extends Function_1 { + public Function_TIMEVALUE(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotText()) { + args1 = args1.toText("Function '{0}' parameter is error!", "TimeValue"); + if (args1.isError()) { + return args1; + } + } + + String timeString = args1.getTextValue(); + // 尝试解析时间字符串 + toolgood.algorithm.internals.MyDate date = parseTimeString(timeString); + if (date != null) { + return Operand.create(date); + } + return Operand.error("Function '{0}' parameter is error!", "TimeValue"); + } + + private toolgood.algorithm.internals.MyDate parseTimeString(String timeString) { + // 匹配格式: HH:MM:SS + Pattern pattern1 = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$"); + Matcher matcher1 = pattern1.matcher(timeString); + if (matcher1.find()) { + int hour = Integer.parseInt(matcher1.group(1)); + int minute = Integer.parseInt(matcher1.group(2)); + int second = Integer.parseInt(matcher1.group(3)); + return new toolgood.algorithm.internals.MyDate(0, 0, 0, hour, minute, second); + } + // 匹配格式: HH:MM + Pattern pattern2 = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d)$"); + Matcher matcher2 = pattern2.matcher(timeString); + if (matcher2.find()) { + int hour = Integer.parseInt(matcher2.group(1)); + int minute = Integer.parseInt(matcher2.group(2)); + return new toolgood.algorithm.internals.MyDate(0, 0, 0, hour, minute, 0); + } + return null; + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "TimeValue"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TODAY.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TODAY.java new file mode 100644 index 000000000..a8ceb9942 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TODAY.java @@ -0,0 +1,22 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_TODAY extends FunctionBase { + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + toolgood.algorithm.internals.MyDate now = toolgood.algorithm.internals.MyDate.now(); + // 创建一个只包含日期部分的新 MyDate 对象 + toolgood.algorithm.internals.MyDate today = new toolgood.algorithm.internals.MyDate(now.Year, now.Month, now.Day, 0, 0, 0); + return Operand.create(today); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + stringBuilder.append("Today()"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKDAY.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKDAY.java new file mode 100644 index 000000000..60d5eb86c --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKDAY.java @@ -0,0 +1,62 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_WEEKDAY extends Function_2 { + public Function_WEEKDAY(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "WeekDay", 1); + if (args1.isError()) { + return args1; + } + } + + int type = 1; + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "WeekDay", 2); + if (args2.isError()) { + return args2; + } + } + type = args2.getIntValue(); + } + + toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + int dayOfWeek = date.DayOfWeek(); // 1-7,其中 1 是星期日,7 是星期六 + + if (type == 1) { + // 返回 1-7,其中 1 是星期日,7 是星期六 + return Operand.create(dayOfWeek); + } else if (type == 2) { + // 返回 1-7,其中 1 是星期一,7 是星期日 + if (dayOfWeek == 1) { + return Operand.create(7); + } + return Operand.create(dayOfWeek - 1); + } else { + // 返回 0-6,其中 0 是星期一,6 是星期日 + if (dayOfWeek == 1) { + return Operand.create(6); + } + return Operand.create(dayOfWeek - 2); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "WeekDay"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKNUM.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKNUM.java new file mode 100644 index 000000000..29a4ea7bc --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKNUM.java @@ -0,0 +1,54 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.function.Function; + +public class Function_WEEKNUM extends Function_2 { + public Function_WEEKNUM(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "WeekNum", 1); + if (args1.isError()) { + return args1; + } + } + toolgood.algorithm.internals.MyDate startMyDate = args1.getDateValue(); + + int dayOfYear = startMyDate.DayOfYear(); + // 计算当年第一天是星期几(1-7,1 是星期日) + toolgood.algorithm.internals.MyDate firstDayOfYear = new toolgood.algorithm.internals.MyDate(startMyDate.Year, 1, 1, 0, 0, 0); + int firstDayOfWeek = firstDayOfYear.DayOfWeek(); + + int days = dayOfYear + (firstDayOfWeek - 1); // 减 1 是因为 DayOfWeek 返回 1-7,而我们需要 0-6 + + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "WeekNum", 2); + if (args2.isError()) { + return args2; + } + } + if (args2.getIntValue() == 2) { + days--; + } + } + + double week = Math.ceil(days / 7.0); + return Operand.create((int) week); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "WeekNum"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WORKDAY.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WORKDAY.java new file mode 100644 index 000000000..b8981696b --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WORKDAY.java @@ -0,0 +1,70 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.HashSet; +import java.util.function.Function; + +public class Function_WORKDAY extends Function_N { + public Function_WORKDAY(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = funcs[0].Evaluate(work, tempParameter); + if (args1.isNotDate()) { + args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "Workday", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = funcs[1].Evaluate(work, tempParameter); + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Workday", 2); + if (args2.isError()) { + return args2; + } + } + + toolgood.algorithm.internals.MyDate startMyDate = args1.getDateValue(); + int days = args2.getIntValue(); + HashSet holidaySet = new HashSet<>(); + + for (int i = 2; i < funcs.length; i++) { + Operand ar = funcs[i].Evaluate(work, tempParameter); + if (ar.isNotDate()) { + ar = ar.toMyDate("Function '{0}' parameter {1} is error!", "Workday", i + 1); + if (ar.isError()) { + return ar; + } + } + toolgood.algorithm.internals.MyDate holiday = ar.getDateValue(); + holidaySet.add(holiday.Year + "-" + holiday.Month + "-" + holiday.Day); + } + + while (days > 0) { + startMyDate = startMyDate.AddDays(1); + int dayOfWeek = startMyDate.DayOfWeek(); + // 检查是否是周末(1 是星期日,7 是星期六) + if (dayOfWeek == 1 || dayOfWeek == 7) { + continue; + } + // 检查是否是节假日 + String dateStr = startMyDate.Year + "-" + startMyDate.Month + "-" + startMyDate.Day; + if (holidaySet.contains(dateStr)) { + continue; + } + days--; + } + return Operand.create(startMyDate); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Workday"); + } +} \ No newline at end of file diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_YEAR.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_YEAR.java new file mode 100644 index 000000000..1118792a2 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_YEAR.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_YEAR extends Function_1 { + public Function_YEAR(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotDate()) { + args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Year"); + if (args1.IsError()) { + return args1; + } + } + if (args1.DateValue().year() == null) { + return Operand.Error("Function '{0}' is error!", "Year"); + } + return Operand.Create(args1.DateValue().year().getValue()); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Year"); + } +} From d96f6986d2375d98b3967a83b1f102e43a3fca2f Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sat, 31 Jan 2026 23:23:28 +0800 Subject: [PATCH 06/98] fix --- .../internals/Functions/flow/Function_IF.java | 34 ++++++++++ .../Functions/flow/Function_IFERROR.java | 25 +++++++ .../Functions/flow/Function_ISERROR.java | 31 +++++++++ .../Functions/flow/Function_ISEVEN.java | 27 ++++++++ .../Functions/flow/Function_ISLOGICAL.java | 25 +++++++ .../Functions/flow/Function_ISNONTEXT.java | 25 +++++++ .../Functions/flow/Function_ISNULL.java | 37 +++++++++++ .../flow/Function_ISNULLOREMPTY.java | 31 +++++++++ .../flow/Function_ISNULLORERROR.java | 37 +++++++++++ .../flow/Function_ISNULLORWHITESPACE.java | 31 +++++++++ .../Functions/flow/Function_ISNUMBER.java | 25 +++++++ .../Functions/flow/Function_ISODD.java | 27 ++++++++ .../Functions/flow/Function_ISTEXT.java | 25 +++++++ .../Functions/flow/Function_NOT.java | 28 ++++++++ .../Functions/mathbase/Function_ABS.java | 28 ++++++++ .../Functions/mathbase/Function_CEILING.java | 50 ++++++++++++++ .../Functions/mathbase/Function_COMBIN.java | 47 +++++++++++++ .../Functions/mathbase/Function_EVEN.java | 37 +++++++++++ .../Functions/mathbase/Function_EXP.java | 28 ++++++++ .../Functions/mathbase/Function_FACT.java | 40 +++++++++++ .../mathbase/Function_FACTDOUBLE.java | 37 +++++++++++ .../Functions/mathbase/Function_FIXED.java | 66 +++++++++++++++++++ .../Functions/mathbase/Function_FLOOR.java | 49 ++++++++++++++ .../Functions/mathbase/Function_GCD.java | 38 +++++++++++ .../Functions/mathbase/Function_LCM.java | 38 +++++++++++ .../Functions/mathbase/Function_LN.java | 32 +++++++++ .../Functions/mathbase/Function_LOG.java | 40 +++++++++++ .../Functions/mathbase/Function_MROUND.java | 44 +++++++++++++ .../mathbase/Function_MULTINOMIAL.java | 46 +++++++++++++ .../Functions/mathbase/Function_ODD.java | 37 +++++++++++ .../Functions/mathbase/Function_PERMUT.java | 43 ++++++++++++ 31 files changed, 1108 insertions(+) create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IF.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IFERROR.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISERROR.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISEVEN.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISLOGICAL.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNONTEXT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULL.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLOREMPTY.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORERROR.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORWHITESPACE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNUMBER.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISODD.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISTEXT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_NOT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ABS.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_CEILING.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_COMBIN.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EVEN.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EXP.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACTDOUBLE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FIXED.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FLOOR.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_GCD.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LCM.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LN.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LOG.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MROUND.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MULTINOMIAL.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ODD.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PERMUT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IF.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IF.java new file mode 100644 index 000000000..1c77d28bc --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IF.java @@ -0,0 +1,34 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_IF extends Function_3 { + public Function_IF(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotBoolean()) { + args1 = args1.ToBoolean("Function '{0}' parameter {1} is error!", "If", 1); + if (args1.IsError()) { + return args1; + } + } + if (args1.BooleanValue()) { + return func2.Evaluate(work, tempParameter); + } + if (func3 == null) { + return Operand.False(); + } + return func3.Evaluate(work, tempParameter); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IF"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IFERROR.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IFERROR.java new file mode 100644 index 000000000..585a3b278 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IFERROR.java @@ -0,0 +1,25 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_IFERROR extends Function_3 { + public Function_IFERROR(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return func2.Evaluate(work, tempParameter); + } + return func3.Evaluate(work, tempParameter); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IfError"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISERROR.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISERROR.java new file mode 100644 index 000000000..da39dbc9c --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISERROR.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ISERROR extends Function_2 { + public Function_ISERROR(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (func2 != null) { + if (args1.IsError()) { + return func2.Evaluate(work, tempParameter); + } + return args1; + } + if (args1.IsError()) { + return Operand.True(); + } + return Operand.False(); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IsError"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISEVEN.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISEVEN.java new file mode 100644 index 000000000..1b59daabb --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISEVEN.java @@ -0,0 +1,27 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ISEVEN extends Function_1 { + public Function_ISEVEN(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNumber()) { + if (args1.IntValue() % 2 == 0) { + return Operand.True(); + } + } + return Operand.False(); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IsEven"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISLOGICAL.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISLOGICAL.java new file mode 100644 index 000000000..a0b68aaa6 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISLOGICAL.java @@ -0,0 +1,25 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ISLOGICAL extends Function_1 { + public Function_ISLOGICAL(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsBoolean()) { + return Operand.True(); + } + return Operand.False(); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IsLogical"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNONTEXT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNONTEXT.java new file mode 100644 index 000000000..82f312c99 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNONTEXT.java @@ -0,0 +1,25 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ISNONTEXT extends Function_1 { + public Function_ISNONTEXT(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + return Operand.True(); + } + return Operand.False(); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IsNontext"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULL.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULL.java new file mode 100644 index 000000000..f3aaacdb8 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULL.java @@ -0,0 +1,37 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ISNULL extends Function_2 { + public Function_ISNULL(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (func2 != null) { + if (args1.IsNull()) { + return func2.Evaluate(work, tempParameter); + } + if (args1.IsText() && args1.TextValue() == null) { + return func2.Evaluate(work, tempParameter); + } + return args1; + } + if (args1.IsNull()) { + return Operand.True(); + } + if (args1.IsText() && args1.TextValue() == null) { + return Operand.True(); + } + return Operand.False(); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IsNull"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLOREMPTY.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLOREMPTY.java new file mode 100644 index 000000000..2d60d61aa --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLOREMPTY.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ISNULLOREMPTY extends Function_1 { + public Function_ISNULLOREMPTY(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNull()) { + return Operand.True(); + } + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IsNullOrEmpty", 1); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(args1.TextValue() == null || args1.TextValue().isEmpty()); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IsNullOrEmpty"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORERROR.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORERROR.java new file mode 100644 index 000000000..f4ef68e6b --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORERROR.java @@ -0,0 +1,37 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ISNULLORERROR extends Function_2 { + public Function_ISNULLORERROR(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (func2 != null) { + if (args1.IsNull() || args1.IsError()) { + return func2.Evaluate(work, tempParameter); + } + if (args1.IsText() && args1.TextValue() == null) { + return func2.Evaluate(work, tempParameter); + } + return args1; + } + if (args1.IsNull() || args1.IsError()) { + return Operand.True(); + } + if (args1.IsText() && args1.TextValue() == null) { + return Operand.True(); + } + return Operand.False(); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IsNullOrError"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORWHITESPACE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORWHITESPACE.java new file mode 100644 index 000000000..0ce0ff328 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORWHITESPACE.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ISNULLORWHITESPACE extends Function_1 { + public Function_ISNULLORWHITESPACE(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNull()) { + return Operand.True(); + } + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IsNullOrWhiteSpace", 1); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(args1.TextValue() == null || args1.TextValue().trim().isEmpty()); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IsNullOrWhiteSpace"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNUMBER.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNUMBER.java new file mode 100644 index 000000000..d3fd4500d --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNUMBER.java @@ -0,0 +1,25 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ISNUMBER extends Function_1 { + public Function_ISNUMBER(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNumber()) { + return Operand.True(); + } + return Operand.False(); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IsNumber"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISODD.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISODD.java new file mode 100644 index 000000000..16e8f50df --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISODD.java @@ -0,0 +1,27 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ISODD extends Function_1 { + public Function_ISODD(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNumber()) { + if (args1.IntValue() % 2 == 1) { + return Operand.True(); + } + } + return Operand.False(); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IsOdd"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISTEXT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISTEXT.java new file mode 100644 index 000000000..98389e60f --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISTEXT.java @@ -0,0 +1,25 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ISTEXT extends Function_1 { + public Function_ISTEXT(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsText()) { + return Operand.True(); + } + return Operand.False(); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IsText"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_NOT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_NOT.java new file mode 100644 index 000000000..59c002b81 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_NOT.java @@ -0,0 +1,28 @@ +package toolgood.algorithm.internals.functions.flow; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_NOT extends Function_1 { + public Function_NOT(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotBoolean()) { + args1 = args1.ToBoolean("Function '{0}' parameter is error!", "Not"); + if (args1.IsError()) { + return args1; + } + } + return args1.BooleanValue() ? Operand.False() : Operand.True(); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Not"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ABS.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ABS.java new file mode 100644 index 000000000..4e6485c86 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ABS.java @@ -0,0 +1,28 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ABS extends Function_1 { + public Function_ABS(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Abs"); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(Math.abs(args1.NumberValue())); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Abs"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_CEILING.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_CEILING.java new file mode 100644 index 000000000..d448ae67d --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_CEILING.java @@ -0,0 +1,50 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_CEILING extends Function_2 { + public Function_CEILING(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Ceiling", 1); + if (args1.IsError()) { + return args1; + } + } + + if (func2 == null) { + return Operand.Create(Math.ceil(args1.NumberValue())); + } + + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Ceiling", 2); + if (args2.IsError()) { + return args2; + } + } + double b = args2.NumberValue(); + if (b == 0) { + return Operand.Create(0); + } + if (b < 0) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Ceiling", 2); + } + + double a = args1.NumberValue(); + double d = Math.ceil(a / b) * b; + return Operand.Create(d); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Ceiling"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_COMBIN.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_COMBIN.java new file mode 100644 index 000000000..2e2c89c3b --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_COMBIN.java @@ -0,0 +1,47 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_COMBIN extends Function_2 { + public Function_COMBIN(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Combin", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Combin", 2); + if (args2.IsError()) { + return args2; + } + } + + int total = args1.IntValue(); + int count = args2.IntValue(); + if (total < 0 || count < 0 || total < count) { + return Operand.Error("Function '{0}' parameter is error!", "Combin"); + } + double sum = 1; + double sum2 = 1; + for (int i = 0; i < count; i++) { + sum *= (total - i); + sum2 *= (i + 1); + } + return Operand.Create(sum / sum2); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Combin"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EVEN.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EVEN.java new file mode 100644 index 000000000..b17024313 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EVEN.java @@ -0,0 +1,37 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_EVEN extends Function_1 { + public Function_EVEN(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Even"); + if (args1.IsError()) { + return args1; + } + } + double z = args1.NumberValue(); + if (z % 2 == 0) { + return args1; + } + z = Math.ceil(z); + if (z % 2 == 0) { + return Operand.Create(z); + } + z++; + return Operand.Create(z); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Even"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EXP.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EXP.java new file mode 100644 index 000000000..769b005a2 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EXP.java @@ -0,0 +1,28 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_EXP extends Function_1 { + public Function_EXP(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Exp"); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(Math.exp(args1.DoubleValue())); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Exp"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACT.java new file mode 100644 index 000000000..40bc2b82e --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACT.java @@ -0,0 +1,40 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_FACT extends Function_1 { + public Function_FACT(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Fact"); + if (args1.IsError()) { + return args1; + } + } + if (args1.IsError()) { + return args1; + } + + int z = args1.IntValue(); + if (z < 0) { + return Operand.Error("Function '{0}' parameter is error!", "Fact"); + } + double d = 1; + for (int i = 1; i <= z; i++) { + d *= i; + } + return Operand.Create(d); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Fact"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACTDOUBLE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACTDOUBLE.java new file mode 100644 index 000000000..c34a2499a --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACTDOUBLE.java @@ -0,0 +1,37 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_FACTDOUBLE extends Function_1 { + public Function_FACTDOUBLE(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "FactDouble"); + if (args1.IsError()) { + return args1; + } + } + int z = args1.IntValue(); + if (z < 0) { + return Operand.Error("Function '{0}' parameter is error!", "FactDouble"); + } + + double d = 1; + for (int i = z; i > 0; i -= 2) { + d *= i; + } + return Operand.Create(d); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "FactDouble"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FIXED.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FIXED.java new file mode 100644 index 000000000..5ce486ff1 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FIXED.java @@ -0,0 +1,66 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; +import java.text.DecimalFormat; + +public class Function_FIXED extends Function_3 { + public Function_FIXED(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + int num = 2; + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Fixed", 2); + if (args2.IsError()) { + return args2; + } + } + num = args2.IntValue(); + } + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Fixed", 1); + if (args1.IsError()) { + return args1; + } + } + + double value = args1.NumberValue(); + double factor = Math.pow(10, num); + double s = Math.round(value * factor) / factor; + boolean no = false; + if (func3 != null) { + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotBoolean()) { + args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "Fixed", 3); + if (args3.IsError()) { + return args3; + } + } + no = args3.BooleanValue(); + } + if (!no) { + DecimalFormat df = new DecimalFormat(); + df.setMinimumFractionDigits(num); + df.setMaximumFractionDigits(num); + df.setGroupingUsed(true); + return Operand.Create(df.format(s)); + } + DecimalFormat df = new DecimalFormat(); + df.setMinimumFractionDigits(num); + df.setMaximumFractionDigits(num); + df.setGroupingUsed(false); + return Operand.Create(df.format(s)); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Fixed"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FLOOR.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FLOOR.java new file mode 100644 index 000000000..6ae4749a7 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FLOOR.java @@ -0,0 +1,49 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_FLOOR extends Function_2 { + public Function_FLOOR(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Floor", 1); + if (args1.IsError()) { + return args1; + } + } + if (func2 == null) { + return Operand.Create(Math.floor(args1.NumberValue())); + } + + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Floor", 2); + if (args2.IsError()) { + return args2; + } + } + double b = args2.NumberValue(); + if (b >= 1) { + return Operand.Create(args1.IntValue()); + } + if (b <= 0) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Floor", 2); + } + + double a = args1.NumberValue(); + double d = Math.floor(a / b) * b; + return Operand.Create(d); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Floor"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_GCD.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_GCD.java new file mode 100644 index 000000000..c4a29fc9b --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_GCD.java @@ -0,0 +1,38 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; +import java.util.ArrayList; +import java.util.List; + +public class Function_GCD extends Function_N { + public Function_GCD(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(funcs.length); + for (int i = 0; i < funcs.length; i++) { + Operand aa = funcs[i].Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Gcd"); + } + + return Operand.Create(FunctionUtil.F_base_gcd(list)); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Gcd"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LCM.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LCM.java new file mode 100644 index 000000000..e8c71a555 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LCM.java @@ -0,0 +1,38 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; +import java.util.ArrayList; +import java.util.List; + +public class Function_LCM extends Function_N { + public Function_LCM(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(funcs.length); + for (int i = 0; i < funcs.length; i++) { + Operand aa = funcs[i].Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Lcm"); + } + + return Operand.Create(FunctionUtil.F_base_lgm(list)); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Lcm"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LN.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LN.java new file mode 100644 index 000000000..f26eda8ad --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LN.java @@ -0,0 +1,32 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_LN extends Function_1 { + public Function_LN(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Ln"); + if (args1.IsError()) { + return args1; + } + } + double z = args1.DoubleValue(); + if (z <= 0) { + return Operand.Error("Function '{0}' parameter is error!", "Ln"); + } + return Operand.Create(Math.log(z)); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Ln"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LOG.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LOG.java new file mode 100644 index 000000000..1ca884c35 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LOG.java @@ -0,0 +1,40 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_LOG extends Function_2 { + public Function_LOG(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Log", 1); + if (args1.IsError()) { + return args1; + } + } + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Log", 2); + if (args2.IsError()) { + return args2; + } + } + double value = args1.DoubleValue(); + double baseValue = args2.DoubleValue(); + return Operand.Create(Math.log(value) / Math.log(baseValue)); + } + return Operand.Create(Math.log10(args1.DoubleValue())); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Log"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MROUND.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MROUND.java new file mode 100644 index 000000000..1f360c715 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MROUND.java @@ -0,0 +1,44 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_MROUND extends Function_2 { + public Function_MROUND(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "MRound", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "MRound", 2); + if (args2.IsError()) { + return args2; + } + } + double a = args2.NumberValue(); + if (a <= 0) { + return Operand.Error("Function '{0}' parameter {1} is error!", "MRound", 2); + } + + double b = args1.NumberValue(); + double quotient = b / a; + double roundedQuotient = Math.round(quotient); + double r = roundedQuotient * a; + return Operand.Create(r); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "MRound"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MULTINOMIAL.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MULTINOMIAL.java new file mode 100644 index 000000000..0e72af08f --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MULTINOMIAL.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; +import java.util.ArrayList; +import java.util.List; + +public class Function_MULTINOMIAL extends Function_N { + public Function_MULTINOMIAL(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Multinomial"); + } + + int sum = 0; + int n = 1; + for (int i = 0; i < list.size(); i++) { + int a = (int) list.get(i).doubleValue(); // 小于等于0 时,按0处理 + n *= FunctionUtil.F_base_Factorial(a); + sum += a; + } + + double r = FunctionUtil.F_base_Factorial(sum) / n; + return Operand.Create(r); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Multinomial"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ODD.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ODD.java new file mode 100644 index 000000000..523583966 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ODD.java @@ -0,0 +1,37 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ODD extends Function_1 { + public Function_ODD(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Odd"); + if (args1.IsError()) { + return args1; + } + } + double z = args1.NumberValue(); + if (z % 2 == 1) { + return args1; + } + z = Math.ceil(z); + if (z % 2 == 1) { + return Operand.Create(z); + } + z++; + return Operand.Create(z); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Odd"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PERMUT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PERMUT.java new file mode 100644 index 000000000..58a02a270 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PERMUT.java @@ -0,0 +1,43 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_PERMUT extends Function_2 { + public Function_PERMUT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Permut", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Permut", 2); + if (args2.IsError()) { + return args2; + } + } + + int total = args1.IntValue(); + int count = args2.IntValue(); + + double sum = 1; + for (int i = 0; i < count; i++) { + sum *= (total - i); + } + return Operand.Create(sum); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Permut"); + } +} From f1ab042fb5999984070036dea70981aadc84ab40 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sat, 31 Jan 2026 23:42:16 +0800 Subject: [PATCH 07/98] fix --- .../Functions/mathbase/Function_POWER.java | 35 +++++ .../Functions/mathbase/Function_PRODUCT.java | 42 +++++ .../mathbase/Function_Percentage.java | 29 ++++ .../Functions/mathbase/Function_QUOTIENT.java | 39 +++++ .../Functions/mathbase/Function_RAND.java | 22 +++ .../mathbase/Function_RANDBETWEEN.java | 37 +++++ .../Functions/mathbase/Function_ROUND.java | 43 ++++++ .../mathbase/Function_ROUNDDOWN.java | 42 +++++ .../Functions/mathbase/Function_ROUNDUP.java | 45 ++++++ .../Functions/mathbase/Function_SIGN.java | 30 ++++ .../Functions/mathbase/Function_SQRT.java | 31 ++++ .../Functions/mathbase/Function_SQRTPI.java | 28 ++++ .../Functions/mathbase/Function_TRUNC.java | 28 ++++ .../Functions/operator/Function_AND.java | 48 ++++++ .../Functions/operator/Function_AND_N.java | 36 +++++ .../Functions/operator/Function_Add.java | 144 +++++++++++++++++ .../Functions/operator/Function_Connect.java | 60 ++++++++ .../Functions/operator/Function_Div.java | 120 +++++++++++++++ .../Functions/operator/Function_Mod.java | 112 ++++++++++++++ .../Functions/operator/Function_Mul.java | 145 ++++++++++++++++++ .../Functions/operator/Function_OR.java | 48 ++++++ .../Functions/operator/Function_OR_N.java | 36 +++++ .../Functions/operator/Function_Sub.java | 135 ++++++++++++++++ .../Functions/value/Function_Array.java | 33 ++++ .../Functions/value/Function_ArrayJson.java | 34 ++++ .../value/Function_ArrayJsonItem.java | 30 ++++ .../Functions/value/Function_DiyFunction.java | 33 ++++ .../Functions/value/Function_ERROR.java | 29 ++++ .../value/Function_GetJsonValue.java | 122 +++++++++++++++ .../Functions/value/Function_JSON.java | 43 ++++++ .../Functions/value/Function_NUM.java | 28 ++++ .../Functions/value/Function_PARAM.java | 41 +++++ .../Functions/value/Function_PARAMETER.java | 51 ++++++ .../Functions/value/Function_Value.java | 57 +++++++ 34 files changed, 1836 insertions(+) create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_POWER.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PRODUCT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_Percentage.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_QUOTIENT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RAND.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RANDBETWEEN.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUND.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDDOWN.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDUP.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SIGN.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRTPI.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_TRUNC.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND_N.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Add.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Connect.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Div.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mod.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mul.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR_N.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Sub.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Array.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJson.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJsonItem.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_DiyFunction.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ERROR.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_GetJsonValue.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_JSON.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_NUM.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAM.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAMETER.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Value.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_POWER.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_POWER.java new file mode 100644 index 000000000..70cb96c5c --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_POWER.java @@ -0,0 +1,35 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_POWER extends Function_2 { + public Function_POWER(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Power", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Power", 2); + if (args2.IsError()) { + return args2; + } + } + return Operand.Create(Math.pow(args1.DoubleValue(), args2.DoubleValue())); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Power"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PRODUCT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PRODUCT.java new file mode 100644 index 000000000..8a2ab9408 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PRODUCT.java @@ -0,0 +1,42 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; +import java.util.ArrayList; +import java.util.List; + +public class Function_PRODUCT extends Function_N { + public Function_PRODUCT(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(funcs.length); + for (int i = 0; i < funcs.length; i++) { + Operand aa = funcs[i].Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Product"); + } + + double d = 1; + for (double a : list) { + d *= a; + } + return Operand.Create(d); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Product"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_Percentage.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_Percentage.java new file mode 100644 index 000000000..dfd352b0a --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_Percentage.java @@ -0,0 +1,29 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_Percentage extends Function_1 { + public Function_Percentage(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Percentage"); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(args1.NumberValue() / 100.0); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + func1.ToString(stringBuilder, false); + stringBuilder.append('%'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_QUOTIENT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_QUOTIENT.java new file mode 100644 index 000000000..6502df6b5 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_QUOTIENT.java @@ -0,0 +1,39 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_QUOTIENT extends Function_2 { + public Function_QUOTIENT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Quotient", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Quotient", 2); + if (args2.IsError()) { + return args2; + } + } + + if (args2.NumberValue() == 0) { + return Operand.Error("Function '{0}' div 0 error!", "Quotient"); + } + return Operand.Create((int)(args1.NumberValue() / args2.NumberValue())); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Quotient"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RAND.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RAND.java new file mode 100644 index 000000000..7125ab351 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RAND.java @@ -0,0 +1,22 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; +import java.util.Random; + +public class Function_RAND extends FunctionBase { + public Function_RAND() { + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Random rand = new Random(); + return Operand.Create(rand.nextDouble()); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + stringBuilder.append("Rand()"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RANDBETWEEN.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RANDBETWEEN.java new file mode 100644 index 000000000..fc9180b01 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RANDBETWEEN.java @@ -0,0 +1,37 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; +import java.util.Random; + +public class Function_RANDBETWEEN extends Function_2 { + public Function_RANDBETWEEN(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RandBetween", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "RandBetween", 2); + if (args2.IsError()) { + return args2; + } + } + Random rand = new Random(); + return Operand.Create(rand.nextDouble() * (args2.NumberValue() - args1.NumberValue()) + args1.NumberValue()); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "RandBetween"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUND.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUND.java new file mode 100644 index 000000000..1a550a3dd --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUND.java @@ -0,0 +1,43 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ROUND extends Function_2 { + public Function_ROUND(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Round", 1); + if (args1.IsError()) { + return args1; + } + } + + if (func2 == null) { + return Operand.Create(Math.round(args1.NumberValue())); + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Round", 2); + if (args2.IsError()) { + return args2; + } + } + int decimalPlaces = args2.IntValue(); + double value = args1.NumberValue(); + double factor = Math.pow(10, decimalPlaces); + double roundedValue = Math.round(value * factor) / factor; + return Operand.Create(roundedValue); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Round"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDDOWN.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDDOWN.java new file mode 100644 index 000000000..282365d4a --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDDOWN.java @@ -0,0 +1,42 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ROUNDDOWN extends Function_2 { + public Function_ROUNDDOWN(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RoundDown", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "RoundDown", 2); + if (args2.IsError()) { + return args2; + } + } + if (args1.NumberValue() == 0.0) { + return args1; + } + double a = Math.pow(10, args2.IntValue()); + double b = args1.NumberValue(); + + b = (Math.floor(b * a)) / a; + return Operand.Create(b); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "RoundDown"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDUP.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDUP.java new file mode 100644 index 000000000..738782c06 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDUP.java @@ -0,0 +1,45 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_ROUNDUP extends Function_2 { + public Function_ROUNDUP(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RoundUp", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "RoundUp", 2); + if (args2.IsError()) { + return args2; + } + } + if (args1.NumberValue() == 0.0) { + return args1; + } + double a = Math.pow(10, args2.IntValue()); + double b = args1.NumberValue(); + + double t = Math.ceil(Math.abs(b) * a) / a; + if (b > 0) { + return Operand.Create(t); + } + return Operand.Create(-t); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "RoundUp"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SIGN.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SIGN.java new file mode 100644 index 000000000..e954d5e4f --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SIGN.java @@ -0,0 +1,30 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.Internals.Operand; +import toolgood.algorithm.Internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionBase; + +public class Function_SIGN extends Function_1 { + public Function_SIGN(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sign"); + if (args1.IsError()) { + return args1; + } + } + double value = args1.NumberValue(); + int sign = (int) Math.signum(value); + return Operand.Create(sign); + } + + @Override + public void ToString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Sign"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRT.java new file mode 100644 index 000000000..18f902c93 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRT.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; + +public class Function_SQRT extends Function_1 { + public Function_SQRT(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sqrt"); + if (args1.IsError()) { + return args1; + } + } + if (args1.getNumberValue() < 0) { + return Operand.Error("Function '{0}' parameter is error!", "Sqrt"); + } + return Operand.Create(Math.sqrt(args1.getDoubleValue())); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Sqrt"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRTPI.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRTPI.java new file mode 100644 index 000000000..9c74f633b --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRTPI.java @@ -0,0 +1,28 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; + +public class Function_SQRTPI extends Function_1 { + public Function_SQRTPI(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "SqrtPI"); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(Math.sqrt(args1.getDoubleValue() * Math.PI)); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "SqrtPI"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_TRUNC.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_TRUNC.java new file mode 100644 index 000000000..cd73ff779 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_TRUNC.java @@ -0,0 +1,28 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; + +public class Function_TRUNC extends Function_1 { + public Function_TRUNC(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Trunc"); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create((int) args1.getIntValue()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Trunc"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND.java new file mode 100644 index 000000000..8beea3445 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND.java @@ -0,0 +1,48 @@ +package toolgood.algorithm.internals.functions.operator; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; + +public class Function_AND extends Function_2 { + public Function_AND(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + // 程序 && and || or 与 excel的 AND(x,y) OR(x,y) 有区别 + // 在excel内 AND(x,y) OR(x,y) 先报错, + // 在程序中,&& and 有true 直接返回true 就不会检测下一个会不会报错 + // 在程序中,|| or 有false 直接返回false 就不会检测下一个会不会报错 + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotBoolean()) { + args1 = args1.ToBoolean(); + if (args1.IsError()) { + return args1; + } + } + if (args1.getBooleanValue() == false) { + Operand args2 = func2.Evaluate(work, tempParameter).ToBoolean(); + if (args2.IsError()) { + return args2; + } + return Operand.False; + } + return func2.Evaluate(work, tempParameter).ToBoolean(); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + if (addBrackets) { + stringBuilder.append('('); + } + func1.ToString(stringBuilder, false); + stringBuilder.append(" && "); + func2.ToString(stringBuilder, false); + if (addBrackets) { + stringBuilder.append(')'); + } + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND_N.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND_N.java new file mode 100644 index 000000000..fca806e80 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND_N.java @@ -0,0 +1,36 @@ +package toolgood.algorithm.internals.functions.operator; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_N; + +public class Function_AND_N extends Function_N { + public Function_AND_N(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + int index = 1; + boolean b = true; + for (FunctionBase item : funcs) { + Operand a = item.Evaluate(work, tempParameter); + if (a.IsNotBoolean()) { + a = a.ToBoolean("Function '{0}' parameter {1} is error!", "AND", index++); + if (a.IsError()) { + return a; + } + } + if (a.getBooleanValue() == false) { + b = false; + } + } + return b ? Operand.True : Operand.False; + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "AND"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Add.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Add.java new file mode 100644 index 000000000..478a98ff7 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Add.java @@ -0,0 +1,144 @@ +package toolgood.algorithm.internals.functions.operator; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Locale; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_Add extends Function_2 { + public Function_Add(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsError()) { + return args2; + } + + if (args1.IsNumber() && args2.IsNumber()) { // 优化性能 + if (args1.getNumberValue() == 0) { + return args2; + } + if (args2.getNumberValue() == 0) { + return args1; + } + return Operand.Create(args1.getNumberValue() + args2.getNumberValue()); + } + if (args1.IsNull()) { + return Operand.Error("Function '{0}' parameter {1} is NULL!", "+", 1); + } + if (args2.IsNull()) { + return Operand.Error("Function '{0}' parameter {1} is NULL!", "+", 2); + } + + if (args1.IsText()) { + try { + double d = Double.parseDouble(args1.getTextValue()); + args1 = Operand.Create(d); + } catch (NumberFormatException e1) { + Boolean b = FunctionUtil.TryParseBoolean(args1.getTextValue()); + if (b != null) { + args1 = b ? Operand.One : Operand.Zero; + } else { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + java.util.Date dt = sdf.parse(args1.getTextValue()); + args1 = Operand.Create(new MyDate(dt)); + } catch (ParseException e2) { + return Operand.Error("Function '{0}' is error!", "+"); + } + } + } + } + if (args2.IsText()) { + try { + double d = Double.parseDouble(args2.getTextValue()); + args2 = Operand.Create(d); + } catch (NumberFormatException e1) { + Boolean b = FunctionUtil.TryParseBoolean(args2.getTextValue()); + if (b != null) { + args2 = b ? Operand.One : Operand.Zero; + } else { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + java.util.Date dt = sdf.parse(args2.getTextValue()); + args2 = Operand.Create(new MyDate(dt)); + } catch (ParseException e2) { + return Operand.Error("Function '{0}' is error!", "+"); + } + } + } + } + if (args1.IsDate()) { + if (args2.IsDate()) { + return Operand.Create(args1.getDateValue().add(args2.getDateValue())); + } + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "+", 2); + if (args2.IsError()) { + return args2; + } + } + if (args2.getNumberValue() == 0) { + return args1; + } + return Operand.Create(args1.getDateValue().add(args2.getNumberValue())); + } else if (args2.IsDate()) { + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "+", 1); + if (args1.IsError()) { + return args1; + } + } + if (args1.getNumberValue() == 0) { + return args2; + } + return Operand.Create(args2.getDateValue().add(args1.getNumberValue())); + } + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "+", 1); + if (args1.IsError()) { + return args1; + } + } + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "+", 2); + if (args2.IsError()) { + return args2; + } + } + + if (args1.getNumberValue() == 0) { + return args2; + } + if (args2.getNumberValue() == 0) { + return args1; + } + + return Operand.Create(args1.getNumberValue() + args2.getNumberValue()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + if (addBrackets) { + stringBuilder.append('('); + } + func1.ToString(stringBuilder, false); + stringBuilder.append(" + "); + func2.ToString(stringBuilder, false); + if (addBrackets) { + stringBuilder.append(')'); + } + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Connect.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Connect.java new file mode 100644 index 000000000..b5ca273b6 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Connect.java @@ -0,0 +1,60 @@ +package toolgood.algorithm.internals.functions.operator; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; + +public class Function_Connect extends Function_2 { + public Function_Connect(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsError()) { + return args2; + } + + if (args1.IsNull()) { + if (args2.IsNull()) { + return args1; + } + return args2.ToText("Function '{0}' parameter {1} is error!", "&", 2); + } else if (args2.IsNull()) { + return args1.ToText("Function '{0}' parameter {1} is error!", "&", 1); + } + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "&", 1); + if (args1.IsError()) { + return args1; + } + } + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "&", 2); + if (args2.IsError()) { + return args2; + } + } + + return Operand.Create(args1.getTextValue() + args2.getTextValue()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + if (addBrackets) { + stringBuilder.append('('); + } + func1.ToString(stringBuilder, false); + stringBuilder.append(" & "); + func2.ToString(stringBuilder, false); + if (addBrackets) { + stringBuilder.append(')'); + } + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Div.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Div.java new file mode 100644 index 000000000..dfee4f64f --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Div.java @@ -0,0 +1,120 @@ +package toolgood.algorithm.internals.functions.operator; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Locale; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_Div extends Function_2 { + public Function_Div(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsError()) { + return args2; + } + + if (args1.IsNumber() && args2.IsNumber()) { // 优化性能 + if (args2.getNumberValue() == 1) { + return args1; + } + if (args2.getNumberValue() == 0) { + return Operand.Error("Function '{0}' div 0 is error!", "/"); + } + return Operand.Create(args1.getNumberValue() / args2.getNumberValue()); + } + if (args1.IsNull()) { + return Operand.Error("Function '{0}' parameter {1} is NULL!", "/", 1); + } + if (args2.IsNull()) { + return Operand.Error("Function '{0}' parameter {1} is NULL!", "/", 2); + } + + if (args1.IsText()) { + try { + double d = Double.parseDouble(args1.getTextValue()); + args1 = Operand.Create(d); + } catch (NumberFormatException e1) { + Boolean b = FunctionUtil.TryParseBoolean(args1.getTextValue()); + if (b != null) { + args1 = b ? Operand.One : Operand.Zero; + } else { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + java.util.Date dt = sdf.parse(args1.getTextValue()); + args1 = Operand.Create(new MyDate(dt)); + } catch (ParseException e2) { + return Operand.Error("Function '{0}' Two types cannot be divided!", "/"); + } + } + } + } + if (args2.IsText()) { + try { + double d = Double.parseDouble(args2.getTextValue()); + args2 = Operand.Create(d); + } catch (NumberFormatException e1) { + Boolean b = FunctionUtil.TryParseBoolean(args2.getTextValue()); + if (b != null) { + args1 = b ? Operand.One : Operand.Zero; + } else { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + java.util.Date dt = sdf.parse(args2.getTextValue()); + args2 = Operand.Create(new MyDate(dt)); + } catch (ParseException e2) { + return Operand.Error("Function '{0}' Two types cannot be divided!", "/"); + } + } + } + } + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "/", 2); + if (args2.IsError()) { + return args2; + } + } + if (args2.getNumberValue() == 0) { + return Operand.Error("Function '{0}' div 0 is error!", "/"); + } + if (args2.getNumberValue() == 1) { + return args1; + } + + if (args1.IsDate()) { + return Operand.Create(args1.getDateValue().divide(args2.getNumberValue())); + } + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "/", 1); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(args1.getNumberValue() / args2.getNumberValue()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + if (addBrackets) { + stringBuilder.append('('); + } + func1.ToString(stringBuilder, true); + stringBuilder.append(" / "); + func2.ToString(stringBuilder, true); + if (addBrackets) { + stringBuilder.append(')'); + } + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mod.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mod.java new file mode 100644 index 000000000..714aeee51 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mod.java @@ -0,0 +1,112 @@ +package toolgood.algorithm.internals.functions.operator; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Locale; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_Mod extends Function_2 { + public Function_Mod(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsError()) { + return args2; + } + + if (args1.IsNumber() && args2.IsNumber()) { // 优化性能 + if (args2.getNumberValue() == 0) { + return Operand.Error("Function '{0}' Div 0 is error!", "%"); + } + return Operand.Create(args1.getNumberValue() % args2.getNumberValue()); + } + if (args1.IsNull()) { + return Operand.Error("Function '{0}' parameter {1} is NULL!", "%", 1); + } + if (args2.IsNull()) { + return Operand.Error("Function '{0}' parameter {1} is NULL!", "%", 2); + } + + if (args1.IsText()) { + try { + double d = Double.parseDouble(args1.getTextValue()); + args1 = Operand.Create(d); + } catch (NumberFormatException e1) { + Boolean b = FunctionUtil.TryParseBoolean(args1.getTextValue()); + if (b != null) { + args1 = b ? Operand.One : Operand.Zero; + } else { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + java.util.Date dt = sdf.parse(args1.getTextValue()); + args1 = Operand.Create(new MyDate(dt)); + } catch (ParseException e2) { + return Operand.Error("Function '{0}' Two types cannot be modulo", "%"); + } + } + } + } + if (args2.IsText()) { + try { + double d = Double.parseDouble(args2.getTextValue()); + args2 = Operand.Create(d); + } catch (NumberFormatException e1) { + Boolean b = FunctionUtil.TryParseBoolean(args2.getTextValue()); + if (b != null) { + args1 = b ? Operand.One : Operand.Zero; + } else { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + java.util.Date dt = sdf.parse(args2.getTextValue()); + args2 = Operand.Create(new MyDate(dt)); + } catch (ParseException e2) { + return Operand.Error("Function '{0}' Two types cannot be modulo", "%"); + } + } + } + } + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "%", 1); + if (args1.IsError()) { + return args1; + } + } + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "%", 2); + if (args2.IsError()) { + return args2; + } + } + + if (args2.getNumberValue() == 0) { + return Operand.Error("Function '{0}' Div 0 is error!", "%"); + } + + return Operand.Create(args1.getNumberValue() % args2.getNumberValue()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + if (addBrackets) { + stringBuilder.append('('); + } + func1.ToString(stringBuilder, true); + stringBuilder.append(" % "); + func2.ToString(stringBuilder, true); + if (addBrackets) { + stringBuilder.append(')'); + } + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mul.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mul.java new file mode 100644 index 000000000..db62d9d2b --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mul.java @@ -0,0 +1,145 @@ +package toolgood.algorithm.internals.functions.operator; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Locale; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_Mul extends Function_2 { + public Function_Mul(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsError()) { + return args2; + } + + if (args1.IsNumber() && args2.IsNumber()) { // 优化性能 + if (args1.getNumberValue() == 1) { + return args2; + } + if (args2.getNumberValue() == 1) { + return args1; + } + if (args1.getNumberValue() == 0 || args2.getNumberValue() == 0) { + return Operand.Zero; + } + return Operand.Create(args1.getNumberValue() * args2.getNumberValue()); + } + if (args1.IsNull()) { + return Operand.Error("Function '{0}' parameter {1} is NULL!", "*", 1); + } + if (args2.IsNull()) { + return Operand.Error("Function '{0}' parameter {1} is NULL!", "*", 2); + } + + if (args1.IsText()) { + try { + double d = Double.parseDouble(args1.getTextValue()); + args1 = Operand.Create(d); + } catch (NumberFormatException e1) { + Boolean b = FunctionUtil.TryParseBoolean(args1.getTextValue()); + if (b != null) { + args1 = b ? Operand.One : Operand.Zero; + } else { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + java.util.Date dt = sdf.parse(args1.getTextValue()); + args1 = Operand.Create(new MyDate(dt)); + } catch (ParseException e2) { + return Operand.Error("Function '{0}' Two types cannot be multiplied ", "*"); + } + } + } + } + if (args2.IsText()) { + try { + double d = Double.parseDouble(args2.getTextValue()); + args2 = Operand.Create(d); + } catch (NumberFormatException e1) { + Boolean b = FunctionUtil.TryParseBoolean(args2.getTextValue()); + if (b != null) { + args2 = b ? Operand.One : Operand.Zero; + } else { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + java.util.Date dt = sdf.parse(args2.getTextValue()); + args2 = Operand.Create(new MyDate(dt)); + } catch (ParseException e2) { + return Operand.Error("Function '{0}' Two types cannot be multiplied", "*"); + } + } + } + } + if (args1.IsDate()) { + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "*", 2); + if (args2.IsError()) { + return args2; + } + } + if (args2.getNumberValue() == 1) { + return args1; + } + return Operand.Create(args1.getDateValue().multiply(args2.getNumberValue())); + } else if (args2.IsDate()) { + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "*", 1); + if (args1.IsError()) { + return args1; + } + } + if (args1.getNumberValue() == 1) { + return args2; + } + return Operand.Create(args2.getDateValue().multiply(args1.getNumberValue())); + } + + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "*", 1); + if (args1.IsError()) { + return args1; + } + } + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "*", 2); + if (args2.IsError()) { + return args2; + } + } + + if (args1.getNumberValue() == 1) { + return args2; + } + if (args2.getNumberValue() == 1) { + return args1; + } + + return Operand.Create(args1.getNumberValue() * args2.getNumberValue()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + if (addBrackets) { + stringBuilder.append('('); + } + func1.ToString(stringBuilder, true); + stringBuilder.append(" * "); + func2.ToString(stringBuilder, true); + if (addBrackets) { + stringBuilder.append(')'); + } + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR.java new file mode 100644 index 000000000..374aaa49a --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR.java @@ -0,0 +1,48 @@ +package toolgood.algorithm.internals.functions.operator; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; + +public class Function_OR extends Function_2 { + public Function_OR(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + // 程序 && and || or 与 excel的 AND(x,y) OR(x,y) 有区别 + // 在excel内 AND(x,y) OR(x,y) 先报错, + // 在程序中,&& and 有true 直接返回true 就不会检测下一个会不会报错 + // 在程序中,|| or 有false 直接返回false 就不会检测下一个会不会报错 + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotBoolean()) { + args1 = args1.ToBoolean(); + if (args1.IsError()) { + return args1; + } + } + if (args1.getBooleanValue()) { + Operand args2 = func2.Evaluate(work, tempParameter).ToBoolean(); + if (args2.IsError()) { + return args2; + } + return Operand.True; + } + return func2.Evaluate(work, tempParameter).ToBoolean(); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + if (addBrackets) { + stringBuilder.append('('); + } + func1.ToString(stringBuilder, false); + stringBuilder.append(" || "); + func2.ToString(stringBuilder, false); + if (addBrackets) { + stringBuilder.append(')'); + } + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR_N.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR_N.java new file mode 100644 index 000000000..3ce76abb6 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR_N.java @@ -0,0 +1,36 @@ +package toolgood.algorithm.internals.functions.operator; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_N; + +public class Function_OR_N extends Function_N { + public Function_OR_N(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + int index = 1; + boolean b = false; + for (FunctionBase item : funcs) { + Operand a = item.Evaluate(work, tempParameter); + if (a.IsNotBoolean()) { + a = a.ToBoolean("Function '{0}' parameter {1} is error!", "OR", index++); + if (a.IsError()) { + return a; + } + } + if (a.getBooleanValue()) { + b = true; + } + } + return b ? Operand.True : Operand.False; + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "OR"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Sub.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Sub.java new file mode 100644 index 000000000..4bc2bc94a --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Sub.java @@ -0,0 +1,135 @@ +package toolgood.algorithm.internals.functions.operator; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Locale; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_Sub extends Function_2 { + public Function_Sub(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsError()) { + return args2; + } + + if (args1.IsNumber() && args2.IsNumber()) { // 优化性能 + if (args2.getNumberValue() == 0) { + return args1; + } + return Operand.Create(args1.getNumberValue() - args2.getNumberValue()); + } + if (args1.IsNull()) { + return Operand.Error("Function '{0}' parameter {1} is NULL!", "-", 1); + } + if (args2.IsNull()) { + return Operand.Error("Function '{0}' parameter {1} is NULL!", "-", 2); + } + + if (args1.IsText()) { + try { + double d = Double.parseDouble(args1.getTextValue()); + args1 = Operand.Create(d); + } catch (NumberFormatException e1) { + Boolean b = FunctionUtil.TryParseBoolean(args1.getTextValue()); + if (b != null) { + args1 = b ? Operand.One : Operand.Zero; + } else { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + java.util.Date dt = sdf.parse(args1.getTextValue()); + args1 = Operand.Create(new MyDate(dt)); + } catch (ParseException e2) { + return Operand.Error("Function '{0}' is error", "-"); + } + } + } + } + if (args2.IsText()) { + try { + double d = Double.parseDouble(args2.getTextValue()); + args2 = Operand.Create(d); + } catch (NumberFormatException e1) { + Boolean b = FunctionUtil.TryParseBoolean(args2.getTextValue()); + if (b != null) { + args2 = b ? Operand.One : Operand.Zero; + } else { + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); + java.util.Date dt = sdf.parse(args2.getTextValue()); + args2 = Operand.Create(new MyDate(dt)); + } catch (ParseException e2) { + return Operand.Error("Function '{0}' is error", "-"); + } + } + } + } + if (args1.IsDate()) { + if (args2.IsDate()) { + return Operand.Create(args1.getDateValue().subtract(args2.getDateValue())); + } + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "-", 2); + if (args2.IsError()) { + return args2; + } + } + if (args2.getNumberValue() == 0) { + return args1; + } + return Operand.Create(args1.getDateValue().subtract(args2.getNumberValue())); + } else if (args2.IsDate()) { + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "-", 1); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(args1.getNumberValue() - args2.getDateValue().toDouble()); + } + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "-", 1); + if (args1.IsError()) { + return args1; + } + } + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "-", 2); + if (args2.IsError()) { + return args2; + } + } + + if (args2.getNumberValue() == 0) { + return args1; + } + + return Operand.Create(args1.getNumberValue() - args2.getNumberValue()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + if (addBrackets) { + stringBuilder.append('('); + } + func1.ToString(stringBuilder, false); + stringBuilder.append(" - "); + func2.ToString(stringBuilder, false); + if (addBrackets) { + stringBuilder.append(')'); + } + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Array.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Array.java new file mode 100644 index 000000000..40b4d9ae4 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Array.java @@ -0,0 +1,33 @@ +package toolgood.algorithm.internals.functions.value; + +import java.util.ArrayList; +import java.util.List; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_N; + +public class Function_Array extends Function_N { + public Function_Array(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + return Operand.Create(args); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Array"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJson.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJson.java new file mode 100644 index 000000000..a3927dac4 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJson.java @@ -0,0 +1,34 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_N; + +public class Function_ArrayJson extends Function_N { + public Function_ArrayJson(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + OperandKeyValueList result = new OperandKeyValueList(); + for (FunctionBase item : funcs) { + Operand o = item.Evaluate(work, tempParameter); + result.AddValue(((OperandKeyValue)o).getValue()); + } + return result; + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + stringBuilder.append('{'); + for (int i = 0; i < funcs.length; i++) { + if (i > 0) { + stringBuilder.append(", "); + } + funcs[i].ToString(stringBuilder, false); + } + stringBuilder.append('}'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJsonItem.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJsonItem.java new file mode 100644 index 000000000..fed1ebc43 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJsonItem.java @@ -0,0 +1,30 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_ArrayJsonItem extends Function_1 { + private final String key; + + public Function_ArrayJsonItem(String key, FunctionBase func1) { + super(func1); + this.key = key; + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + KeyValue keyValue = new KeyValue(); + keyValue.setKey(key); + keyValue.setValue(func1.Evaluate(work, tempParameter)); + return new OperandKeyValue(keyValue); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + stringBuilder.append(key); + stringBuilder.append(':'); + func1.ToString(stringBuilder, false); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_DiyFunction.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_DiyFunction.java new file mode 100644 index 000000000..c65ebe32e --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_DiyFunction.java @@ -0,0 +1,33 @@ +package toolgood.algorithm.internals.functions.value; + +import java.util.ArrayList; +import java.util.List; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_N; + +public class Function_DiyFunction extends Function_N { + private final String funName; + + public Function_DiyFunction(String name, FunctionBase[] funcs) { + super(funcs); + this.funName = name; + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + args.add(aa); + } + return work.ExecuteDiyFunction(funName, args); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, funName); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ERROR.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ERROR.java new file mode 100644 index 000000000..b5246a904 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ERROR.java @@ -0,0 +1,29 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_ERROR extends Function_1 { + public Function_ERROR(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Error", 1); + if (args1.IsError()) { + return args1; + } + } + return Operand.Error(args1.getTextValue()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Error"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_GetJsonValue.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_GetJsonValue.java new file mode 100644 index 000000000..fc47e7c79 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_GetJsonValue.java @@ -0,0 +1,122 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; + +public class Function_GetJsonValue extends Function_2 { + public Function_GetJsonValue(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand obj = func1.Evaluate(work, tempParameter); + if (obj.IsError()) { + return obj; + } + Operand op = func2.Evaluate(work, tempParameter); + if (op.IsError()) { + return op; + } + + if (obj.IsArray()) { + op = op.ToNumber("Function '{0}' parameter {1} is error!", "GetJsonValue", 2); + if (op.IsError()) { + return op; + } + int index = op.getIntValue() - work.getExcelIndex(); + if (index < obj.getArrayValue().size()) { + return obj.getArrayValue().get(index); + } + return Operand.Error("Function '{0}' ARRARY index {1} greater than maximum length!", "GetJsonValue", index); + } + if (obj.IsArrayJson()) { + if (op.IsNumber()) { + Operand operand; + if (((OperandKeyValueList)obj).TryGetValue(op.getNumberValue().toString(), operand)) { + return operand; + } + return Operand.Error("Function '{0}' Parameter name '{1}' is missing!", "GetJsonValue", op.getTextValue()); + } else if (op.IsText()) { + Operand operand; + if (((OperandKeyValueList)obj).TryGetValue(op.getTextValue(), operand)) { + return operand; + } + return Operand.Error("Function '{0}' Parameter name '{1}' is missing!", "GetJsonValue", op.getTextValue()); + } + return Operand.Error("Function '{0}' Parameter name is missing!", "GetJsonValue"); + } + + if (obj.IsJson()) { + JsonData json = obj.getJsonValue(); + if (json.isArray()) { + op = op.ToNumber("Function '{0}' parameter {1} is error!", "GetJsonValue", 2); + if (op.IsError()) { + return op; + } + int index = op.getIntValue() - work.getExcelIndex(); + if (index < json.size()) { + JsonData v = json.get(index); + if (v.isString()) { + return Operand.Create(v.getStringValue()); + } + if (v.isBoolean()) { + return Operand.Create(v.getBooleanValue()); + } + if (v.isDouble()) { + return Operand.Create(v.getNumberValue()); + } + if (v.isObject()) { + return Operand.Create(v); + } + if (v.isArray()) { + return Operand.Create(v); + } + if (v.isNull()) { + return Operand.CreateNull(); + } + return Operand.Create(v); + } + return Operand.Error("Function '{0}' JSON index {1} greater than maximum length!", "GetJsonValue", index); + } else { + op = op.ToText("Function '{0}' parameter {1} is error!", "GetJsonValue", 2); + if (op.IsError()) { + return op; + } + JsonData v = json.get(op.getTextValue()); + if (v != null) { + if (v.isString()) { + return Operand.Create(v.getStringValue()); + } + if (v.isBoolean()) { + return Operand.Create(v.getBooleanValue()); + } + if (v.isDouble()) { + return Operand.Create(v.getNumberValue()); + } + if (v.isObject()) { + return Operand.Create(v); + } + if (v.isArray()) { + return Operand.Create(v); + } + if (v.isNull()) { + return Operand.CreateNull(); + } + return Operand.Create(v); + } + } + } + return Operand.Error("Function '{0}' Operator is error!", "GetJsonValue"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + func1.ToString(stringBuilder, false); + stringBuilder.append('['); + func2.ToString(stringBuilder, false); + stringBuilder.append(']'); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_JSON.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_JSON.java new file mode 100644 index 000000000..6c4aa510c --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_JSON.java @@ -0,0 +1,43 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_JSON extends Function_1 { + public Function_JSON(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + if (args1.IsJson()) { + return args1; + } + if (args1.IsArrayJson()) { + args1 = args1.ToText(); + } + if (args1.IsNotText()) { + return Operand.Error("Function '{0}' parameter is error!", "Json"); + } + String txt = args1.getTextValue(); + if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { + try { + var json = JsonMapper.ToObject(txt); + return Operand.Create(json); + } catch (Exception e) { + } + } + return Operand.Error("Function '{0}' parameter is error!", "Json"); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Json"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_NUM.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_NUM.java new file mode 100644 index 000000000..ef1a161d6 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_NUM.java @@ -0,0 +1,28 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; + +public class Function_NUM extends FunctionBase { + private final double d; + private final String unit; + + public Function_NUM(double func1, String func2) { + this.d = func1; + this.unit = func2; + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + var dict = NumberUnitTypeHelper.GetUnitTypedict(); + var d2 = NumberUnitTypeHelper.TransformationUnit(d, dict.get(unit), work.getDistanceUnit(), work.getAreaUnit(), work.getVolumeUnit(), work.getMassUnit()); + return Operand.Create(d2); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + stringBuilder.append(d); + stringBuilder.append(unit); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAM.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAM.java new file mode 100644 index 000000000..0e83f1410 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAM.java @@ -0,0 +1,41 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; + +public class Function_PARAM extends Function_2 { + public Function_PARAM(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Param", 1); + if (args1.IsError()) { + return args1; + } + } + if (tempParameter != null) { + Operand r = tempParameter.apply(work, args1.getTextValue()); + if (r != null) { + return r; + } + } + Operand result = work.getParameter(args1.getTextValue()); + if (result.IsError()) { + if (func2 != null) { + return func2.Evaluate(work, tempParameter); + } + } + return result; + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Param"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAMETER.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAMETER.java new file mode 100644 index 000000000..5e58ea39b --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAMETER.java @@ -0,0 +1,51 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; + +public class Function_PARAMETER extends FunctionBase { + private final String name; + private final FunctionBase func1; + + public Function_PARAMETER(String name) { + this.name = name; + this.func1 = null; + } + + public Function_PARAMETER(FunctionBase func1) { + this.name = null; + this.func1 = func1; + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + String txt = name; + if (txt == null || txt.isEmpty()) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Parameter", 1); + if (args1.IsError()) { + return args1; + } + } + txt = args1.getTextValue(); + } + if (tempParameter != null) { + Operand r = tempParameter.apply(work, txt); + if (r != null) { + return r; + } + } + return work.getParameter(txt); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + if (name == null || name.isEmpty()) { + func1.ToString(stringBuilder, false); + } else { + stringBuilder.append(name); + } + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Value.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Value.java new file mode 100644 index 000000000..e87d97412 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Value.java @@ -0,0 +1,57 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; + +public class Function_Value extends FunctionBase { + private final Operand _value; + private final String _showName; + + public Function_Value(Operand value) { + this._value = value; + this._showName = null; + } + + public Function_Value(Operand value, String showName) { + this._value = value; + this._showName = showName; + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + return _value; + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + if (_showName != null && !_showName.isEmpty()) { + stringBuilder.append(_showName); + return; + } + if (_value.IsText()) { + stringBuilder.append('"'); + String stringValue = _value.getTextValue(); + stringValue = stringValue.replace("\\", "\\\\"); + stringValue = stringValue.replace("\r", "\\r"); + stringValue = stringValue.replace("\n", "\\n"); + stringValue = stringValue.replace("\t", "\\t"); + stringValue = stringValue.replace("\0", "\\0"); + stringValue = stringValue.replace("\u000b", "\\v"); + stringValue = stringValue.replace("\u0007", "\\a"); + stringValue = stringValue.replace("\b", "\\b"); + stringValue = stringValue.replace("\f", "\\f"); + stringValue = stringValue.replace("\"", "\\\""); + stringBuilder.append(stringValue); + stringBuilder.append('"'); + } else if (_value.IsDate()) { + stringBuilder.append('"'); + stringBuilder.append(_value.getDateValue().toString()); + stringBuilder.append('"'); + } else if (_value.IsBoolean()) { + stringBuilder.append(_value.getBooleanValue() ? "true" : "false"); + } else { + stringBuilder.append(_value.toString()); + } + } +} From 214ef4116961aac8b3519736be64ad50d0b23c13 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sat, 31 Jan 2026 23:54:20 +0800 Subject: [PATCH 08/98] fix --- .../Functions/string/Function_ASC.java | 53 +++++++++ .../Functions/string/Function_CHAR.java | 30 +++++ .../Functions/string/Function_CLEAN.java | 48 ++++++++ .../Functions/string/Function_CODE.java | 33 ++++++ .../string/Function_CONCATENATE.java | 46 ++++++++ .../Functions/string/Function_EXACT.java | 36 ++++++ .../Functions/string/Function_FIND.java | 48 ++++++++ .../Functions/string/Function_JIS.java | 53 +++++++++ .../Functions/string/Function_LEFT.java | 43 +++++++ .../Functions/string/Function_LEN.java | 29 +++++ .../Functions/string/Function_LOWER.java | 29 +++++ .../Functions/string/Function_MID.java | 52 +++++++++ .../Functions/string/Function_PROPER.java | 62 ++++++++++ .../Functions/string/Function_REPLACE.java | 87 ++++++++++++++ .../Functions/string/Function_REPT.java | 49 ++++++++ .../Functions/string/Function_RIGHT.java | 49 ++++++++ .../Functions/string/Function_RMB.java | 110 ++++++++++++++++++ .../Functions/string/Function_SEARCH.java | 53 +++++++++ .../Functions/string/Function_SUBSTITUTE.java | 85 ++++++++++++++ .../Functions/string/Function_T.java | 26 +++++ .../Functions/string/Function_TEXT.java | 63 ++++++++++ .../Functions/string/Function_TRIM.java | 29 +++++ .../Functions/string/Function_UPPER.java | 29 +++++ .../Functions/string/Function_VALUE.java | 46 ++++++++ 24 files changed, 1188 insertions(+) create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_ASC.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CHAR.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CLEAN.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CODE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CONCATENATE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_EXACT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_FIND.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_JIS.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEFT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEN.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LOWER.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_MID.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_PROPER.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPLACE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RIGHT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RMB.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SEARCH.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SUBSTITUTE.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_T.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TEXT.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TRIM.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_UPPER.java create mode 100644 java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_VALUE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_ASC.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_ASC.java new file mode 100644 index 000000000..8f0ff21fe --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_ASC.java @@ -0,0 +1,53 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_ASC extends Function_1 { + public Function_ASC(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "ASC"); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(F_base_ToDBC(args1.getTextValue())); + } + + private static String F_base_ToDBC(String input) { + boolean needModify = false; + for (int i = 0; i < input.length(); i++) { + char c = input.charAt(i); + if (c == 12288 || (c > 65280 && c < 65375)) { + needModify = true; + break; + } + } + if (!needModify) { + return input; + } + char[] chars = input.toCharArray(); + for (int i = 0; i < chars.length; i++) { + char c = chars[i]; + if (c == 12288) { + chars[i] = (char)32; + } else if (c > 65280 && c < 65375) { + chars[i] = (char)(c - 65248); + } + } + return new String(chars); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "ASC"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CHAR.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CHAR.java new file mode 100644 index 000000000..0e1753836 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CHAR.java @@ -0,0 +1,30 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_CHAR extends Function_1 { + public Function_CHAR(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Char"); + if (args1.IsError()) { + return args1; + } + } + char c = (char) args1.getIntValue(); + return Operand.Create(String.valueOf(c)); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Char"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CLEAN.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CLEAN.java new file mode 100644 index 000000000..57a171c85 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CLEAN.java @@ -0,0 +1,48 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_CLEAN extends Function_1 { + public Function_CLEAN(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "Clean"); + if (args1.IsError()) { + return args1; + } + } + String t = args1.getTextValue(); + boolean needClean = false; + for (int i = 0; i < t.length(); i++) { + char c = t.charAt(i); + if (c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\v') { + needClean = true; + break; + } + } + if (!needClean) { + return args1; // no change + } + StringBuilder sb = new StringBuilder(t.length()); + for (int i = 0; i < t.length(); i++) { + char c = t.charAt(i); + if (c != '\f' && c != '\n' && c != '\r' && c != '\t' && c != '\v') { + sb.append(c); + } + } + return Operand.Create(sb.toString()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Clean"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CODE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CODE.java new file mode 100644 index 000000000..d50f329b8 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CODE.java @@ -0,0 +1,33 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_CODE extends Function_1 { + public Function_CODE(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "CODE"); + if (args1.IsError()) { + return args1; + } + } + if (args1.getTextValue().isEmpty()) { + return Operand.Error("Function '{0}' parameter is error!", "CODE"); + } + char c = args1.getTextValue().charAt(0); + return Operand.Create((int) c); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "CODE"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CONCATENATE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CONCATENATE.java new file mode 100644 index 000000000..95d74a1d6 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CONCATENATE.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_N; + +public class Function_CONCATENATE extends Function_N { + public Function_CONCATENATE(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + if (funcs.length == 0) { + return Operand.Create(""); + } + if (funcs.length == 1) { + Operand a = funcs[0].Evaluate(work, tempParameter); + if (a.IsNotText()) { + a = a.ToText("Function '{0}' parameter {1} is error!", "Concatenate", 1); + if (a.IsError()) { + return a; + } + } + return a; // 只有一个 + } + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < funcs.length; i++) { + Operand a = funcs[i].Evaluate(work, tempParameter); + if (a.IsNotText()) { + a = a.ToText("Function '{0}' parameter {1} is error!", "Concatenate", i + 1); + if (a.IsError()) { + return a; + } + } + sb.append(a.getTextValue()); + } + return Operand.Create(sb.toString()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Concatenate"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_EXACT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_EXACT.java new file mode 100644 index 000000000..fa8fe2b6e --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_EXACT.java @@ -0,0 +1,36 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; + +public class Function_EXACT extends Function_2 { + public Function_EXACT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "EXACT", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "EXACT", 2); + if (args2.IsError()) { + return args2; + } + } + return Operand.Create(args1.getTextValue().equals(args2.getTextValue())); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Exact"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_FIND.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_FIND.java new file mode 100644 index 000000000..fe761cc35 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_FIND.java @@ -0,0 +1,48 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_3; + +public class Function_FIND extends Function_3 { + public Function_FIND(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Find", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Find", 2); + if (args2.IsError()) { + return args2; + } + } + if (func3 == null) { + int p = args2.getTextValue().indexOf(args1.getTextValue()) + work.getExcelIndex(); + return Operand.Create(p); + } + Operand count = func3.Evaluate(work, tempParameter); + if (count.IsNotNumber()) { + count = count.ToNumber("Function '{0}' parameter {1} is error!", "Find", 3); + if (count.IsError()) { + return count; + } + } + int p2 = args2.getTextValue().substring(count.getIntValue()).indexOf(args1.getTextValue()) + count.getIntValue() + work.getExcelIndex(); + return Operand.Create(p2); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Find"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_JIS.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_JIS.java new file mode 100644 index 000000000..b534c7d61 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_JIS.java @@ -0,0 +1,53 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_JIS extends Function_1 { + public Function_JIS(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "JIS"); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(F_base_ToSBC(args1.getTextValue())); + } + + private static String F_base_ToSBC(String input) { + boolean needModify = false; + for (int i = 0; i < input.length(); i++) { + char c = input.charAt(i); + if (c == ' ' || c < 127) { + needModify = true; + break; + } + } + if (!needModify) { + return input; + } + char[] chars = input.toCharArray(); + for (int i = 0; i < chars.length; i++) { + char c = chars[i]; + if (c == ' ') { + chars[i] = (char)12288; + } else if (c > 0 && c < 127) { + chars[i] = (char)(c + 65248); + } + } + return new String(chars); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "JIS"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEFT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEFT.java new file mode 100644 index 000000000..c3ea2b897 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEFT.java @@ -0,0 +1,43 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; + +public class Function_LEFT extends Function_2 { + public Function_LEFT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Left", 1); + if (args1.IsError()) { + return args1; + } + } + if (args1.getTextValue().length() == 0) { + return Operand.Create(""); + } + if (func2 == null) { + return Operand.Create(args1.getTextValue().substring(0, 1)); + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Left", 2); + if (args2.IsError()) { + return args2; + } + } + int length = Math.min(args2.getIntValue(), args1.getTextValue().length()); + return Operand.Create(args1.getTextValue().substring(0, length)); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Left"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEN.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEN.java new file mode 100644 index 000000000..0ecc69161 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEN.java @@ -0,0 +1,29 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_LEN extends Function_1 { + public Function_LEN(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "Len"); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(args1.getTextValue().length()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Len"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LOWER.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LOWER.java new file mode 100644 index 000000000..595ea601c --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LOWER.java @@ -0,0 +1,29 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_LOWER extends Function_1 { + public Function_LOWER(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "Lower"); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(args1.getTextValue().toLowerCase()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Lower"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_MID.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_MID.java new file mode 100644 index 000000000..a89218037 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_MID.java @@ -0,0 +1,52 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_3; + +public class Function_MID extends Function_3 { + public Function_MID(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Mid", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Mid", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Mid", 3); + if (args3.IsError()) { + return args3; + } + } + int start = args2.getIntValue() - work.getExcelIndex(); + int length = args3.getIntValue(); + int end = Math.min(start + length, args1.getTextValue().length()); + if (start < 0) { + start = 0; + } + if (start >= args1.getTextValue().length()) { + return Operand.Create(""); + } + return Operand.Create(args1.getTextValue().substring(start, end)); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Mid"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_PROPER.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_PROPER.java new file mode 100644 index 000000000..af38c43f2 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_PROPER.java @@ -0,0 +1,62 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_PROPER extends Function_1 { + public Function_PROPER(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "Proper"); + if (args1.IsError()) { + return args1; + } + } + + String text = args1.getTextValue(); + if (text == null || text.isEmpty()) { + return Operand.Create(text); + } + boolean needModify = false; + boolean isFirst = true; + for (int i = 0; i < text.length(); i++) { + char t = text.charAt(i); + if (t == ' ' || t == '\r' || t == '\n' || t == '\t' || t == '.') { + isFirst = true; + } else if (isFirst) { + if (Character.isLowerCase(t)) { + needModify = true; + break; + } + isFirst = false; + } + } + if (!needModify) { + return args1; // no change + } + char[] chars = text.toCharArray(); + isFirst = true; + for (int i = 0; i < chars.length; i++) { + char t = chars[i]; + if (t == ' ' || t == '\r' || t == '\n' || t == '\t' || t == '.') { + isFirst = true; + } else if (isFirst) { + chars[i] = Character.toUpperCase(t); + isFirst = false; + } + } + return Operand.Create(new String(chars)); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Proper"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPLACE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPLACE.java new file mode 100644 index 000000000..7f3577d03 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPLACE.java @@ -0,0 +1,87 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_4; + +public class Function_REPLACE extends Function_4 { + public Function_REPLACE(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { + super(func1, func2, func3, func4); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Replace", 1); + if (args1.IsError()) { + return args1; + } + } + String oldtext = args1.getTextValue(); + if (func4 == null) { + Operand args22 = func2.Evaluate(work, tempParameter); + if (args22.IsNotText()) { + args22 = args22.ToText("Function '{0}' parameter {1} is error!", "Replace", 2); + if (args22.IsError()) { + return args22; + } + } + Operand args32 = func3.Evaluate(work, tempParameter); + if (args32.IsNotText()) { + args32 = args32.ToText("Function '{0}' parameter {1} is error!", "Replace", 3); + if (args32.IsError()) { + return args32; + } + } + + String old = args22.getTextValue(); + String newstr = args32.getTextValue(); + return Operand.Create(oldtext.replace(old, newstr)); + } + + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Replace", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Replace", 3); + if (args3.IsError()) { + return args3; + } + } + Operand args4 = func4.Evaluate(work, tempParameter); + if (args4.IsNotText()) { + args4 = args4.ToText("Function '{0}' parameter {1} is error!", "Replace", 4); + if (args4.IsError()) { + return args4; + } + } + + int start = args2.getIntValue() - work.getExcelIndex(); + int length = args3.getIntValue(); + String newtext = args4.getTextValue(); + + StringBuilder sb = new StringBuilder(oldtext.length() - length + newtext.length()); + for (int i = 0; i < oldtext.length(); i++) { + if (i < start) { + sb.append(oldtext.charAt(i)); + } else if (i == start) { + sb.append(newtext); + } else if (i >= start + length) { + sb.append(oldtext.charAt(i)); + } + } + return Operand.Create(sb.toString()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Replace"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPT.java new file mode 100644 index 000000000..935c2143b --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPT.java @@ -0,0 +1,49 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; + +public class Function_REPT extends Function_2 { + public Function_REPT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Rept", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Rept", 2); + if (args2.IsError()) { + return args2; + } + } + + String newtext = args1.getTextValue(); + int length = args2.getIntValue(); + if (length < 0) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Rept", 2); + } + if (length == 0) { + return Operand.Create(""); + } + StringBuilder sb = new StringBuilder(newtext.length() * length); + for (int i = 0; i < length; i++) { + sb.append(newtext); + } + return Operand.Create(sb.toString()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Rept"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RIGHT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RIGHT.java new file mode 100644 index 000000000..caabb0436 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RIGHT.java @@ -0,0 +1,49 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; + +public class Function_RIGHT extends Function_2 { + public Function_RIGHT(FunctionBase func1) { + super(func1, null); + } + + public Function_RIGHT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Right", 1); + if (args1.IsError()) { + return args1; + } + } + + if (args1.getTextValue().length() == 0) { + return Operand.Create(""); + } + if (func2 == null) { + return Operand.Create(args1.getTextValue().substring(args1.getTextValue().length() - 1)); + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Right", 2); + if (args2.IsError()) { + return args2; + } + } + int length = Math.min(args2.getIntValue(), args1.getTextValue().length()); + int start = args1.getTextValue().length() - length; + return Operand.Create(args1.getTextValue().substring(start)); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Right"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RMB.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RMB.java new file mode 100644 index 000000000..3369b8955 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RMB.java @@ -0,0 +1,110 @@ +package toolgood.algorithm.internals.functions.string; + +import java.util.Locale; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_RMB extends Function_1 { + public Function_RMB(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "RMB"); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(F_base_ToChineseRMB(args1.getNumberValue())); + } + + private static final Pattern Regex1 = Pattern.compile("((?<=-|^)[^1-9]*)|((?0)[0A-E]*((?=[1-9])|(?<-z>(?=[F-L\.]|$))))|((?[F-L])(?0)[0A-L]*((?=[1-9])|(?<-z>(?=[\.]|$))))"); + + private static String F_base_ToChineseRMB(double x) { + String s = String.format(Locale.US, "%#.2f", x); + // 这里需要实现与 C# 相同的转换逻辑 + // 由于 Java 正则表达式不支持命名捕获组的条件替换,需要使用其他方法实现 + // 简化实现,直接返回数字的人民币大写形式 + return convertToChineseRMB(x); + } + + private static String convertToChineseRMB(double x) { + if (x == 0) { + return "零元整"; + } + String[] digits = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"}; + String[] units = {"", "拾", "佰", "仟"}; + String[] bigUnits = {"", "万", "亿"}; + String[] decimalUnits = {"角", "分"}; + + StringBuilder result = new StringBuilder(); + if (x < 0) { + result.append("负"); + x = -x; + } + + long integerPart = (long) x; + int decimalPart = (int) Math.round((x - integerPart) * 100); + + if (integerPart > 0) { + int unitIndex = 0; + int bigUnitIndex = 0; + boolean needZero = false; + + while (integerPart > 0) { + long section = integerPart % 10000; + if (section > 0) { + if (needZero) { + result.insert(0, "零"); + } + StringBuilder sectionResult = new StringBuilder(); + int sectionUnitIndex = 0; + while (section > 0) { + int digit = (int) (section % 10); + if (digit > 0) { + sectionResult.insert(0, digits[digit] + units[sectionUnitIndex]); + } else if (sectionResult.length() > 0) { + sectionResult.insert(0, "零"); + } + section /= 10; + sectionUnitIndex++; + } + sectionResult.append(bigUnits[bigUnitIndex]); + result.insert(0, sectionResult); + needZero = true; + } + integerPart /= 10000; + bigUnitIndex++; + } + result.append("元"); + } + + if (decimalPart > 0) { + int jiao = decimalPart / 10; + int fen = decimalPart % 10; + if (jiao > 0) { + result.append(digits[jiao]).append(decimalUnits[0]); + } + if (fen > 0) { + result.append(digits[fen]).append(decimalUnits[1]); + } + } else { + result.append("整"); + } + + return result.toString(); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "RMB"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SEARCH.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SEARCH.java new file mode 100644 index 000000000..f08444215 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SEARCH.java @@ -0,0 +1,53 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_3; + +public class Function_SEARCH extends Function_3 { + public Function_SEARCH(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Search", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Search", 2); + if (args2.IsError()) { + return args2; + } + } + + if (func3 == null) { + int p = args2.getTextValue().toLowerCase().indexOf(args1.getTextValue().toLowerCase()) + work.getExcelIndex(); + return Operand.Create(p); + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Search", 3); + if (args3.IsError()) { + return args3; + } + } + int startIndex = args3.getIntValue(); + if (startIndex >= args2.getTextValue().length()) { + return Operand.Create(0); + } + int p2 = args2.getTextValue().substring(startIndex).toLowerCase().indexOf(args1.getTextValue().toLowerCase()) + startIndex + work.getExcelIndex(); + return Operand.Create(p2); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Search"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SUBSTITUTE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SUBSTITUTE.java new file mode 100644 index 000000000..03a5117f2 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SUBSTITUTE.java @@ -0,0 +1,85 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_4; + +public class Function_SUBSTITUTE extends Function_4 { + public Function_SUBSTITUTE(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { + super(func1, func2, func3, func4); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Substitute", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Substitute", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotText()) { + args3 = args3.ToText("Function '{0}' parameter {1} is error!", "Substitute", 3); + if (args3.IsError()) { + return args3; + } + } + if (func4 == null) { + return Operand.Create(args1.getTextValue().replace(args2.getTextValue(), args3.getTextValue())); + } + Operand args4 = func4.Evaluate(work, tempParameter); + if (args4.IsNotNumber()) { + args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "Substitute", 4); + if (args4.IsError()) { + return args4; + } + } + String text = args1.getTextValue(); + String oldtext = args2.getTextValue(); + String newtext = args3.getTextValue(); + int index = args4.getIntValue(); + + int index2 = 0; + int estimatedCapacity = Math.max(text.length(), text.length() + (newtext.length() - oldtext.length())); + StringBuilder sb = new StringBuilder(estimatedCapacity); + for (int i = 0; i < text.length(); i++) { + boolean b = true; + for (int j = 0; j < oldtext.length(); j++) { + if (i + j >= text.length()) { + b = false; + break; + } + char t = text.charAt(i + j); + char t2 = oldtext.charAt(j); + if (t != t2) { + b = false; + break; + } + } + if (b) { + index2++; + } + if (b && index2 == index) { + sb.append(newtext); + i += oldtext.length() - 1; + } else { + sb.append(text.charAt(i)); + } + } + return Operand.Create(sb.toString()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Substitute"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_T.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_T.java new file mode 100644 index 000000000..1b75630db --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_T.java @@ -0,0 +1,26 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_T extends Function_1 { + public Function_T(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsText()) { + return args1; + } + return Operand.Create(""); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "T"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TEXT.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TEXT.java new file mode 100644 index 000000000..347c877a3 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TEXT.java @@ -0,0 +1,63 @@ +package toolgood.algorithm.internals.functions.string; + +import java.text.DecimalFormat; +import java.text.SimpleDateFormat; +import java.util.Locale; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; + +public class Function_TEXT extends Function_2 { + public Function_TEXT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotText()) { + args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Text", 2); + if (args2.IsError()) { + return args2; + } + } + + if (args1.IsText()) { + return args1; + } else if (args1.IsBoolean()) { + return Operand.Create(args1.getBooleanValue() ? "TRUE" : "FALSE"); + } else if (args1.IsNumber()) { + String format = args2.getTextValue(); + try { + DecimalFormat df = new DecimalFormat(format, new DecimalFormatSymbols(Locale.US)); + return Operand.Create(df.format(args1.getNumberValue())); + } catch (Exception e) { + return Operand.Error("Function '{0}' format is error!", "Text"); + } + } else if (args1.IsDate()) { + String format = args2.getTextValue(); + try { + SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US); + return Operand.Create(sdf.format(args1.getDateValue().toDate())); + } catch (Exception e) { + return Operand.Error("Function '{0}' format is error!", "Text"); + } + } + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Text", 1); + if (args1.IsError()) { + return args1; + } + return Operand.Create(args1.getTextValue()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Text"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TRIM.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TRIM.java new file mode 100644 index 000000000..7a2cf7134 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TRIM.java @@ -0,0 +1,29 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_TRIM extends Function_1 { + public Function_TRIM(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotText()) { + args1 = args1.toText("Function '{0}' parameter is error!", "Trim"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(args1.getTextValue().trim()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Trim"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_UPPER.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_UPPER.java new file mode 100644 index 000000000..95a65ec2b --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_UPPER.java @@ -0,0 +1,29 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_UPPER extends Function_1 { + public Function_UPPER(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNotText()) { + args1 = args1.toText("Function '{0}' parameter is error!", "Upper"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(args1.getTextValue().toUpperCase()); + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Upper"); + } +} diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_VALUE.java b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_VALUE.java new file mode 100644 index 000000000..394a807e9 --- /dev/null +++ b/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_VALUE.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.string; + +import toolgood.algorithm.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; + +import java.text.NumberFormat; +import java.text.ParseException; +import java.util.Locale; + +public class Function_VALUE extends Function_1 { + public Function_VALUE(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.isNumber()) { + return args1; + } + if (args1.isBoolean()) { + return args1.getBooleanValue() ? Operand.ONE : Operand.ZERO; + } + if (args1.isNotText()) { + args1 = args1.toText("Function '{0}' parameter is error!", "Value"); + if (args1.isError()) { + return args1; + } + } + + try { + NumberFormat format = NumberFormat.getInstance(Locale.US); + Number number = format.parse(args1.getTextValue()); + return Operand.create(number.doubleValue()); + } catch (ParseException e) { + return Operand.error("Function '{0}' parameter is error!", "Value"); + } + } + + @Override + public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Value"); + } +} From 7f0b545c5b51b0886ec95f104ede477ba9355872 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sat, 31 Jan 2026 23:55:03 +0800 Subject: [PATCH 09/98] fix --- java/{toolgood.algorithm => }/.classpath | 0 java/{toolgood.algorithm => }/.gitignore | 0 java/{toolgood.algorithm => }/.project | 0 java/{toolgood.algorithm => }/README-EN.md | 0 java/{toolgood.algorithm => }/README.md | 0 java/{toolgood.algorithm => }/build.bat | 0 java/{toolgood.algorithm => }/build2.exe | Bin java/{toolgood.algorithm => }/pom.xml | 0 .../src/main/java/toolgood/algorithm/Operand.java | 0 .../main/java/toolgood/algorithm/OperandImpl.java | 0 .../java/toolgood/algorithm/enums/AreaUnitType.java | 0 .../toolgood/algorithm/enums/CalculateTreeType.java | 0 .../toolgood/algorithm/enums/ConditionTreeType.java | 0 .../toolgood/algorithm/enums/DistanceUnitType.java | 0 .../java/toolgood/algorithm/enums/MassUnitType.java | 0 .../toolgood/algorithm/enums/NumberUnitType.java | 0 .../java/toolgood/algorithm/enums/OperandType.java | 0 .../toolgood/algorithm/enums/VolumeUnitType.java | 0 .../toolgood/algorithm/internals/CalculateTree.java | 0 .../toolgood/algorithm/internals/ConditionTree.java | 0 .../toolgood/algorithm/internals/DiyNameInfo.java | 0 .../algorithm/internals/Functions/FunctionBase.java | 0 .../algorithm/internals/Functions/FunctionUtil.java | 0 .../algorithm/internals/Functions/Function_1.java | 0 .../algorithm/internals/Functions/Function_2.java | 0 .../algorithm/internals/Functions/Function_3.java | 0 .../algorithm/internals/Functions/Function_4.java | 0 .../algorithm/internals/Functions/Function_N.java | 0 .../internals/Functions/compare/Function_EQ.java | 0 .../internals/Functions/compare/Function_GE.java | 0 .../internals/Functions/compare/Function_GT.java | 0 .../internals/Functions/compare/Function_LE.java | 0 .../internals/Functions/compare/Function_LT.java | 0 .../internals/Functions/compare/Function_NE.java | 0 .../Functions/csharp/Function_ENDSWITH.java | 0 .../internals/Functions/csharp/Function_GUID.java | 0 .../internals/Functions/csharp/Function_HAS.java | 0 .../Functions/csharp/Function_HASVALUE.java | 0 .../Functions/csharp/Function_INDEXOF.java | 0 .../Functions/csharp/Function_ISREGEX.java | 0 .../internals/Functions/csharp/Function_JOIN.java | 0 .../Functions/csharp/Function_LASTINDEXOF.java | 0 .../Functions/csharp/Function_LOOKCEILING.java | 0 .../Functions/csharp/Function_LOOKFLOOR.java | 0 .../internals/Functions/csharp/Function_REGEX.java | 0 .../Functions/csharp/Function_REGEXREPALCE.java | 0 .../Functions/csharp/Function_REMOVEEND.java | 0 .../Functions/csharp/Function_REMOVESTART.java | 0 .../internals/Functions/csharp/Function_SPLIT.java | 0 .../Functions/csharp/Function_STARTSWITH.java | 0 .../Functions/csharp/Function_SUBSTRING.java | 0 .../Functions/csharp/Function_TRIMEND.java | 0 .../Functions/csharp/Function_TRIMSTART.java | 0 .../Functions/csharpsecurity/Function_HMACMD5.java | 0 .../Functions/csharpsecurity/Function_HMACSHA1.java | 0 .../csharpsecurity/Function_HMACSHA256.java | 0 .../csharpsecurity/Function_HMACSHA512.java | 0 .../Functions/csharpsecurity/Function_MD5.java | 0 .../Functions/csharpsecurity/Function_SHA1.java | 0 .../Functions/csharpsecurity/Function_SHA256.java | 0 .../Functions/csharpsecurity/Function_SHA512.java | 0 .../internals/Functions/csharpweb/Base64.java | 0 .../Functions/csharpweb/Function_BASE64TOTEXT.java | 0 .../csharpweb/Function_BASE64URLTOTEXT.java | 0 .../Functions/csharpweb/Function_HTMLDECODE.java | 0 .../Functions/csharpweb/Function_HTMLENCODE.java | 0 .../Functions/csharpweb/Function_TEXTTOBASE64.java | 0 .../csharpweb/Function_TEXTTOBASE64URL.java | 0 .../Functions/csharpweb/Function_URLDECODE.java | 0 .../Functions/csharpweb/Function_URLENCODE.java | 0 .../Functions/datetimes/Function_ADDDAYS.java | 0 .../Functions/datetimes/Function_ADDHOURS.java | 0 .../Functions/datetimes/Function_ADDMINUTES.java | 0 .../Functions/datetimes/Function_ADDMONTHS.java | 0 .../Functions/datetimes/Function_ADDSECONDS.java | 0 .../Functions/datetimes/Function_ADDYEARS.java | 0 .../Functions/datetimes/Function_DATE.java | 0 .../Functions/datetimes/Function_DATEDIF.java | 0 .../Functions/datetimes/Function_DATEVALUE.java | 0 .../internals/Functions/datetimes/Function_DAY.java | 0 .../Functions/datetimes/Function_DAYS360.java | 0 .../Functions/datetimes/Function_EDATE.java | 0 .../Functions/datetimes/Function_EOMONTH.java | 0 .../Functions/datetimes/Function_HOUR.java | 0 .../Functions/datetimes/Function_MINUTE.java | 0 .../Functions/datetimes/Function_MONTH.java | 0 .../Functions/datetimes/Function_NETWORKDAYS.java | 0 .../internals/Functions/datetimes/Function_NOW.java | 0 .../Functions/datetimes/Function_SECOND.java | 0 .../Functions/datetimes/Function_TIME.java | 0 .../Functions/datetimes/Function_TIMESTAMP.java | 0 .../Functions/datetimes/Function_TIMEVALUE.java | 0 .../Functions/datetimes/Function_TODAY.java | 0 .../Functions/datetimes/Function_WEEKDAY.java | 0 .../Functions/datetimes/Function_WEEKNUM.java | 0 .../Functions/datetimes/Function_WORKDAY.java | 0 .../Functions/datetimes/Function_YEAR.java | 0 .../internals/Functions/flow/Function_IF.java | 0 .../internals/Functions/flow/Function_IFERROR.java | 0 .../internals/Functions/flow/Function_ISERROR.java | 0 .../internals/Functions/flow/Function_ISEVEN.java | 0 .../Functions/flow/Function_ISLOGICAL.java | 0 .../Functions/flow/Function_ISNONTEXT.java | 0 .../internals/Functions/flow/Function_ISNULL.java | 0 .../Functions/flow/Function_ISNULLOREMPTY.java | 0 .../Functions/flow/Function_ISNULLORERROR.java | 0 .../Functions/flow/Function_ISNULLORWHITESPACE.java | 0 .../internals/Functions/flow/Function_ISNUMBER.java | 0 .../internals/Functions/flow/Function_ISODD.java | 0 .../internals/Functions/flow/Function_ISTEXT.java | 0 .../internals/Functions/flow/Function_NOT.java | 0 .../internals/Functions/mathbase/Function_ABS.java | 0 .../Functions/mathbase/Function_CEILING.java | 0 .../Functions/mathbase/Function_COMBIN.java | 0 .../internals/Functions/mathbase/Function_EVEN.java | 0 .../internals/Functions/mathbase/Function_EXP.java | 0 .../internals/Functions/mathbase/Function_FACT.java | 0 .../Functions/mathbase/Function_FACTDOUBLE.java | 0 .../Functions/mathbase/Function_FIXED.java | 0 .../Functions/mathbase/Function_FLOOR.java | 0 .../internals/Functions/mathbase/Function_GCD.java | 0 .../internals/Functions/mathbase/Function_LCM.java | 0 .../internals/Functions/mathbase/Function_LN.java | 0 .../internals/Functions/mathbase/Function_LOG.java | 0 .../Functions/mathbase/Function_MROUND.java | 0 .../Functions/mathbase/Function_MULTINOMIAL.java | 0 .../internals/Functions/mathbase/Function_ODD.java | 0 .../Functions/mathbase/Function_PERMUT.java | 0 .../Functions/mathbase/Function_POWER.java | 0 .../Functions/mathbase/Function_PRODUCT.java | 0 .../Functions/mathbase/Function_Percentage.java | 0 .../Functions/mathbase/Function_QUOTIENT.java | 0 .../internals/Functions/mathbase/Function_RAND.java | 0 .../Functions/mathbase/Function_RANDBETWEEN.java | 0 .../Functions/mathbase/Function_ROUND.java | 0 .../Functions/mathbase/Function_ROUNDDOWN.java | 0 .../Functions/mathbase/Function_ROUNDUP.java | 0 .../internals/Functions/mathbase/Function_SIGN.java | 0 .../internals/Functions/mathbase/Function_SQRT.java | 0 .../Functions/mathbase/Function_SQRTPI.java | 0 .../Functions/mathbase/Function_TRUNC.java | 0 .../internals/Functions/operator/Function_AND.java | 0 .../Functions/operator/Function_AND_N.java | 0 .../internals/Functions/operator/Function_Add.java | 0 .../Functions/operator/Function_Connect.java | 0 .../internals/Functions/operator/Function_Div.java | 0 .../internals/Functions/operator/Function_Mod.java | 0 .../internals/Functions/operator/Function_Mul.java | 0 .../internals/Functions/operator/Function_OR.java | 0 .../internals/Functions/operator/Function_OR_N.java | 0 .../internals/Functions/operator/Function_Sub.java | 0 .../internals/Functions/string/Function_ASC.java | 0 .../internals/Functions/string/Function_CHAR.java | 0 .../internals/Functions/string/Function_CLEAN.java | 0 .../internals/Functions/string/Function_CODE.java | 0 .../Functions/string/Function_CONCATENATE.java | 0 .../internals/Functions/string/Function_EXACT.java | 0 .../internals/Functions/string/Function_FIND.java | 0 .../internals/Functions/string/Function_JIS.java | 0 .../internals/Functions/string/Function_LEFT.java | 0 .../internals/Functions/string/Function_LEN.java | 0 .../internals/Functions/string/Function_LOWER.java | 0 .../internals/Functions/string/Function_MID.java | 0 .../internals/Functions/string/Function_PROPER.java | 0 .../Functions/string/Function_REPLACE.java | 0 .../internals/Functions/string/Function_REPT.java | 0 .../internals/Functions/string/Function_RIGHT.java | 0 .../internals/Functions/string/Function_RMB.java | 0 .../internals/Functions/string/Function_SEARCH.java | 0 .../Functions/string/Function_SUBSTITUTE.java | 0 .../internals/Functions/string/Function_T.java | 0 .../internals/Functions/string/Function_TEXT.java | 0 .../internals/Functions/string/Function_TRIM.java | 0 .../internals/Functions/string/Function_UPPER.java | 0 .../internals/Functions/string/Function_VALUE.java | 0 .../internals/Functions/value/Function_Array.java | 0 .../Functions/value/Function_ArrayJson.java | 0 .../Functions/value/Function_ArrayJsonItem.java | 0 .../Functions/value/Function_DiyFunction.java | 0 .../internals/Functions/value/Function_ERROR.java | 0 .../Functions/value/Function_GetJsonValue.java | 0 .../internals/Functions/value/Function_JSON.java | 0 .../internals/Functions/value/Function_NUM.java | 0 .../internals/Functions/value/Function_PARAM.java | 0 .../Functions/value/Function_PARAMETER.java | 0 .../internals/Functions/value/Function_Value.java | 0 .../java/toolgood/algorithm/internals/MyDate.java | 0 .../algorithm/internals/NumberUnitTypeHelper.java | 0 .../toolgood/algorithm/internals/RegexHelper.java | 0 .../internals/Visitors/AntlrCharStream.java | 0 .../algorithm/internals/Visitors/CharUtil.java | 0 .../internals/Visitors/DiyNameVisitor.java | 0 .../internals/Visitors/MathSplitVisitor.java | 0 .../java/toolgood/algorithm/litJson/FsmContext.java | 0 .../toolgood/algorithm/litJson/IJsonWrapper.java | 0 .../java/toolgood/algorithm/litJson/JsonData.java | 0 .../toolgood/algorithm/litJson/JsonException.java | 0 .../java/toolgood/algorithm/litJson/JsonMapper.java | 0 .../java/toolgood/algorithm/litJson/JsonReader.java | 0 .../java/toolgood/algorithm/litJson/JsonToken.java | 0 .../java/toolgood/algorithm/litJson/JsonType.java | 0 .../main/java/toolgood/algorithm/litJson/Lexer.java | 0 .../toolgood/algorithm/litJson/ParserToken.java | 0 .../java/toolgood/algorithm/math/mathLexer.java | 0 .../java/toolgood/algorithm/math/mathParser.java | 0 .../java/toolgood/algorithm/math/mathVisitor.java | 0 .../java/toolgood/algorithm/mathNet/Constants.java | 0 .../algorithm/mathNet/Distributions/Beta.java | 0 .../algorithm/mathNet/Distributions/Binomial.java | 0 .../mathNet/Distributions/Exponential.java | 0 .../mathNet/Distributions/FisherSnedecor.java | 0 .../algorithm/mathNet/Distributions/Gamma.java | 0 .../mathNet/Distributions/Hypergeometric.java | 0 .../algorithm/mathNet/Distributions/LogNormal.java | 0 .../mathNet/Distributions/NegativeBinomial.java | 0 .../algorithm/mathNet/Distributions/Normal.java | 0 .../algorithm/mathNet/Distributions/Poisson.java | 0 .../algorithm/mathNet/Distributions/StudentT.java | 0 .../algorithm/mathNet/Distributions/Weibull.java | 0 .../java/toolgood/algorithm/mathNet/Evaluate.java | 0 .../toolgood/algorithm/mathNet/ExcelFunctions.java | 0 .../java/toolgood/algorithm/mathNet/Precision.java | 0 .../algorithm/mathNet/RootFinding/Brent.java | 0 .../algorithm/mathNet/RootFinding/RootNumber.java | 0 .../algorithm/mathNet/SpecialFunctions.java | 0 .../mathNet/Statistics/ArrayStatistics.java | 0 .../mathNet/Statistics/QuantileDefinition.java | 0 .../mathNet/Statistics/SortedArrayStatistics.java | 0 .../algorithm/mathNet/Statistics/Statistics.java | 0 .../algorithm/unitConversion/AreaConverter.java | 0 .../algorithm/unitConversion/BaseUnitConverter.java | 0 .../algorithm/unitConversion/DistanceConverter.java | 0 .../algorithm/unitConversion/MassConverter.java | 0 .../unitConversion/UnitFactorSynonyms.java | 0 .../algorithm/unitConversion/UnitFactors.java | 0 .../unitConversion/UnitNotSupportedException.java | 0 .../algorithm/unitConversion/VolumeConverter.java | 0 .../java/toolgood/algorithm/DemoApplication.java | 0 .../algorithm/Tests/AlgorithmEngineTest.java | 0 .../algorithm/Tests/AlgorithmEngineTest_csharp.java | 0 .../Tests/AlgorithmEngineTest_dateTime.java | 0 .../algorithm/Tests/AlgorithmEngineTest_flow.java | 0 .../algorithm/Tests/AlgorithmEngineTest_math.java | 0 .../algorithm/Tests/AlgorithmEngineTest_string.java | 0 .../algorithm/Tests/AlgorithmEngineTest_sum.java | 0 .../algorithm/Tests/AlgorithmEngineTest_v3_5.java | 0 .../Tests/AlgorithmEngineTest_vlookup.java | 0 .../java/toolgood/algorithm/Tests/Cylinder.java | 0 .../java/toolgood/algorithm/Tests/IssuesTest.java | 0 .../algorithm/Tests3/AlgorithmEngineHelperTest.java | 0 .../algorithm/Tests4/ConditionTreeTest.java | 0 251 files changed, 0 insertions(+), 0 deletions(-) rename java/{toolgood.algorithm => }/.classpath (100%) rename java/{toolgood.algorithm => }/.gitignore (100%) rename java/{toolgood.algorithm => }/.project (100%) rename java/{toolgood.algorithm => }/README-EN.md (100%) rename java/{toolgood.algorithm => }/README.md (100%) rename java/{toolgood.algorithm => }/build.bat (100%) rename java/{toolgood.algorithm => }/build2.exe (100%) rename java/{toolgood.algorithm => }/pom.xml (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/Operand.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/OperandImpl.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/enums/AreaUnitType.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/enums/MassUnitType.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/enums/NumberUnitType.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/enums/OperandType.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/CalculateTree.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/ConditionTree.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/FunctionBase.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/FunctionUtil.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/Function_1.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/Function_2.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/Function_3.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/Function_4.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/Function_N.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_EQ.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_NE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ENDSWITH.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_GUID.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HAS.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HASVALUE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_INDEXOF.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ISREGEX.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_JOIN.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LASTINDEXOF.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKCEILING.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKFLOOR.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEX.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEXREPALCE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVEEND.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVESTART.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SPLIT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_STARTSWITH.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMSTART.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACMD5.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA1.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA256.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA512.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_MD5.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA1.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA256.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA512.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Base64.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64TOTEXT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64URLTOTEXT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLDECODE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLENCODE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64URL.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLDECODE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLENCODE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDDAYS.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDHOURS.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMINUTES.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMONTHS.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDSECONDS.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDYEARS.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEDIF.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEVALUE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAY.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAYS360.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EDATE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EOMONTH.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_HOUR.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MINUTE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MONTH.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NETWORKDAYS.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NOW.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_SECOND.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIME.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMESTAMP.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMEVALUE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TODAY.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKDAY.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKNUM.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WORKDAY.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_YEAR.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IF.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IFERROR.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISERROR.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISEVEN.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISLOGICAL.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNONTEXT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULL.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLOREMPTY.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORERROR.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORWHITESPACE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNUMBER.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISODD.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISTEXT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_NOT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ABS.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_CEILING.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_COMBIN.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EVEN.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EXP.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACTDOUBLE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FIXED.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FLOOR.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_GCD.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LCM.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LN.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LOG.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MROUND.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MULTINOMIAL.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ODD.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PERMUT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_POWER.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PRODUCT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_Percentage.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_QUOTIENT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RAND.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RANDBETWEEN.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUND.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDDOWN.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDUP.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SIGN.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRTPI.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_TRUNC.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND_N.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Add.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Connect.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Div.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mod.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mul.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR_N.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Sub.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_ASC.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CHAR.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CLEAN.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CODE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CONCATENATE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_EXACT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_FIND.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_JIS.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEFT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEN.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LOWER.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_MID.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_PROPER.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPLACE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RIGHT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RMB.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SEARCH.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SUBSTITUTE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_T.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TEXT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TRIM.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_UPPER.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/string/Function_VALUE.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Array.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJson.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJsonItem.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/value/Function_DiyFunction.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ERROR.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/value/Function_GetJsonValue.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/value/Function_JSON.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/value/Function_NUM.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAM.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAMETER.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Value.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/MyDate.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/RegexHelper.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Visitors/AntlrCharStream.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Visitors/CharUtil.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Visitors/DiyNameVisitor.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/internals/Visitors/MathSplitVisitor.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/litJson/FsmContext.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/litJson/JsonData.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/litJson/JsonException.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/litJson/JsonMapper.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/litJson/JsonReader.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/litJson/JsonToken.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/litJson/JsonType.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/litJson/Lexer.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/litJson/ParserToken.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/math/mathLexer.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/math/mathParser.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/math/mathVisitor.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Constants.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Evaluate.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Precision.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java (100%) rename java/{toolgood.algorithm => }/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/DemoApplication.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests/Cylinder.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests/IssuesTest.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java (100%) rename java/{toolgood.algorithm => }/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java (100%) diff --git a/java/toolgood.algorithm/.classpath b/java/.classpath similarity index 100% rename from java/toolgood.algorithm/.classpath rename to java/.classpath diff --git a/java/toolgood.algorithm/.gitignore b/java/.gitignore similarity index 100% rename from java/toolgood.algorithm/.gitignore rename to java/.gitignore diff --git a/java/toolgood.algorithm/.project b/java/.project similarity index 100% rename from java/toolgood.algorithm/.project rename to java/.project diff --git a/java/toolgood.algorithm/README-EN.md b/java/README-EN.md similarity index 100% rename from java/toolgood.algorithm/README-EN.md rename to java/README-EN.md diff --git a/java/toolgood.algorithm/README.md b/java/README.md similarity index 100% rename from java/toolgood.algorithm/README.md rename to java/README.md diff --git a/java/toolgood.algorithm/build.bat b/java/build.bat similarity index 100% rename from java/toolgood.algorithm/build.bat rename to java/build.bat diff --git a/java/toolgood.algorithm/build2.exe b/java/build2.exe similarity index 100% rename from java/toolgood.algorithm/build2.exe rename to java/build2.exe diff --git a/java/toolgood.algorithm/pom.xml b/java/pom.xml similarity index 100% rename from java/toolgood.algorithm/pom.xml rename to java/pom.xml diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/Operand.java b/java/src/main/java/toolgood/algorithm/Operand.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/Operand.java rename to java/src/main/java/toolgood/algorithm/Operand.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/OperandImpl.java b/java/src/main/java/toolgood/algorithm/OperandImpl.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/OperandImpl.java rename to java/src/main/java/toolgood/algorithm/OperandImpl.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/AreaUnitType.java b/java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/AreaUnitType.java rename to java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java b/java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java rename to java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java b/java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java rename to java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java b/java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java rename to java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/MassUnitType.java b/java/src/main/java/toolgood/algorithm/enums/MassUnitType.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/MassUnitType.java rename to java/src/main/java/toolgood/algorithm/enums/MassUnitType.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/NumberUnitType.java b/java/src/main/java/toolgood/algorithm/enums/NumberUnitType.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/NumberUnitType.java rename to java/src/main/java/toolgood/algorithm/enums/NumberUnitType.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/OperandType.java b/java/src/main/java/toolgood/algorithm/enums/OperandType.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/OperandType.java rename to java/src/main/java/toolgood/algorithm/enums/OperandType.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java b/java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java rename to java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/CalculateTree.java b/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/CalculateTree.java rename to java/src/main/java/toolgood/algorithm/internals/CalculateTree.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/ConditionTree.java b/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/ConditionTree.java rename to java/src/main/java/toolgood/algorithm/internals/ConditionTree.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java b/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java rename to java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/Functions/FunctionBase.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/FunctionBase.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/FunctionBase.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/FunctionUtil.java b/java/src/main/java/toolgood/algorithm/internals/Functions/FunctionUtil.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/FunctionUtil.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/FunctionUtil.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_1.java b/java/src/main/java/toolgood/algorithm/internals/Functions/Function_1.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_1.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/Function_1.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_2.java b/java/src/main/java/toolgood/algorithm/internals/Functions/Function_2.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_2.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/Function_2.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_3.java b/java/src/main/java/toolgood/algorithm/internals/Functions/Function_3.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_3.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/Function_3.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_4.java b/java/src/main/java/toolgood/algorithm/internals/Functions/Function_4.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_4.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/Function_4.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_N.java b/java/src/main/java/toolgood/algorithm/internals/Functions/Function_N.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/Function_N.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/Function_N.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_EQ.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_EQ.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_EQ.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_NE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_NE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_NE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_NE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ENDSWITH.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ENDSWITH.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ENDSWITH.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ENDSWITH.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_GUID.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_GUID.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_GUID.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_GUID.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HAS.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HAS.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HAS.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HAS.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HASVALUE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HASVALUE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HASVALUE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HASVALUE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_INDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_INDEXOF.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_INDEXOF.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_INDEXOF.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ISREGEX.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ISREGEX.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ISREGEX.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ISREGEX.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_JOIN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_JOIN.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_JOIN.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_JOIN.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LASTINDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LASTINDEXOF.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LASTINDEXOF.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LASTINDEXOF.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKCEILING.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKCEILING.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKCEILING.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKFLOOR.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKFLOOR.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKFLOOR.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEX.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEX.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEX.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEX.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEXREPALCE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEXREPALCE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEXREPALCE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEXREPALCE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVEEND.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVEEND.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVEEND.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVEEND.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVESTART.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVESTART.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVESTART.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVESTART.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SPLIT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SPLIT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SPLIT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SPLIT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_STARTSWITH.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_STARTSWITH.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_STARTSWITH.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_STARTSWITH.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMSTART.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMSTART.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMSTART.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMSTART.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACMD5.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACMD5.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACMD5.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACMD5.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA1.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA1.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA1.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA1.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA256.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA256.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA256.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA256.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA512.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA512.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA512.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA512.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_MD5.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_MD5.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_MD5.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_MD5.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA1.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA1.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA1.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA1.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA256.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA256.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA256.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA256.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA512.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA512.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA512.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA512.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Base64.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Base64.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Base64.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Base64.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64TOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64TOTEXT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64TOTEXT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64TOTEXT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64URLTOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64URLTOTEXT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64URLTOTEXT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64URLTOTEXT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLDECODE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLDECODE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLDECODE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLENCODE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLENCODE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLENCODE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64URL.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64URL.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64URL.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64URL.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLDECODE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLDECODE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLDECODE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLENCODE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLENCODE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLENCODE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDDAYS.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDDAYS.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDDAYS.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDDAYS.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDHOURS.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDHOURS.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDHOURS.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDHOURS.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMINUTES.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMINUTES.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMINUTES.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMONTHS.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMONTHS.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMONTHS.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDSECONDS.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDSECONDS.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDSECONDS.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDYEARS.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDYEARS.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDYEARS.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEDIF.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEDIF.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEDIF.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEVALUE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEVALUE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEVALUE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAY.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAY.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAY.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAY.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAYS360.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAYS360.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAYS360.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAYS360.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EDATE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EDATE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EDATE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EOMONTH.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EOMONTH.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EOMONTH.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_HOUR.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_HOUR.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_HOUR.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_HOUR.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MINUTE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MINUTE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MINUTE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MINUTE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MONTH.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MONTH.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MONTH.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MONTH.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NETWORKDAYS.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NETWORKDAYS.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NETWORKDAYS.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NETWORKDAYS.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NOW.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NOW.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NOW.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NOW.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_SECOND.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_SECOND.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_SECOND.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_SECOND.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIME.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIME.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIME.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIME.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMESTAMP.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMESTAMP.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMESTAMP.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMEVALUE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMEVALUE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMEVALUE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TODAY.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TODAY.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TODAY.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TODAY.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKDAY.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKDAY.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKDAY.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKNUM.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKNUM.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKNUM.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WORKDAY.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WORKDAY.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WORKDAY.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_YEAR.java b/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_YEAR.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_YEAR.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_YEAR.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IF.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IF.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IF.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IF.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IFERROR.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IFERROR.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IFERROR.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IFERROR.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISERROR.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISERROR.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISERROR.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISERROR.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISEVEN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISEVEN.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISEVEN.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISEVEN.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISLOGICAL.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISLOGICAL.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISLOGICAL.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISLOGICAL.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNONTEXT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNONTEXT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNONTEXT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNONTEXT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULL.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULL.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULL.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULL.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLOREMPTY.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLOREMPTY.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLOREMPTY.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLOREMPTY.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORERROR.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORERROR.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORERROR.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORERROR.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORWHITESPACE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORWHITESPACE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORWHITESPACE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORWHITESPACE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNUMBER.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNUMBER.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNUMBER.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNUMBER.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISODD.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISODD.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISODD.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISODD.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISTEXT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISTEXT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISTEXT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISTEXT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_NOT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_NOT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_NOT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_NOT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ABS.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ABS.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ABS.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ABS.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_CEILING.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_CEILING.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_CEILING.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_CEILING.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_COMBIN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_COMBIN.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_COMBIN.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_COMBIN.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EVEN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EVEN.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EVEN.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EVEN.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EXP.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EXP.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EXP.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EXP.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACTDOUBLE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACTDOUBLE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACTDOUBLE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACTDOUBLE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FIXED.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FIXED.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FIXED.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FIXED.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FLOOR.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FLOOR.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FLOOR.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FLOOR.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_GCD.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_GCD.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_GCD.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_GCD.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LCM.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LCM.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LCM.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LCM.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LN.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LN.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LN.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LOG.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LOG.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LOG.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LOG.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MROUND.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MROUND.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MROUND.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MROUND.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MULTINOMIAL.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MULTINOMIAL.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MULTINOMIAL.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MULTINOMIAL.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ODD.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ODD.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ODD.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ODD.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PERMUT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PERMUT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PERMUT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PERMUT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_POWER.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_POWER.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_POWER.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_POWER.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PRODUCT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PRODUCT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PRODUCT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PRODUCT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_Percentage.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_Percentage.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_Percentage.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_Percentage.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_QUOTIENT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_QUOTIENT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_QUOTIENT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_QUOTIENT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RAND.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RAND.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RAND.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RAND.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RANDBETWEEN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RANDBETWEEN.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RANDBETWEEN.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RANDBETWEEN.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUND.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUND.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUND.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUND.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDDOWN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDDOWN.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDDOWN.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDDOWN.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDUP.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDUP.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDUP.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDUP.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SIGN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SIGN.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SIGN.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SIGN.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRTPI.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRTPI.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRTPI.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRTPI.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_TRUNC.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_TRUNC.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_TRUNC.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_TRUNC.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND.java b/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND_N.java b/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND_N.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND_N.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND_N.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Add.java b/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Add.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Add.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Add.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Connect.java b/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Connect.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Connect.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Connect.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Div.java b/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Div.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Div.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Div.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mod.java b/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mod.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mod.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mod.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mul.java b/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mul.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mul.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mul.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR.java b/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR_N.java b/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR_N.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR_N.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR_N.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Sub.java b/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Sub.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Sub.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Sub.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_ASC.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_ASC.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_ASC.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_ASC.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CHAR.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CHAR.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CHAR.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CHAR.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CLEAN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CLEAN.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CLEAN.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CLEAN.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CODE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CODE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CODE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CODE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CONCATENATE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CONCATENATE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CONCATENATE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CONCATENATE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_EXACT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_EXACT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_EXACT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_EXACT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_FIND.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_FIND.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_FIND.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_FIND.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_JIS.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_JIS.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_JIS.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_JIS.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEFT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEFT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEFT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEFT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEN.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEN.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEN.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LOWER.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LOWER.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LOWER.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LOWER.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_MID.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_MID.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_MID.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_MID.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_PROPER.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_PROPER.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_PROPER.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_PROPER.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPLACE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPLACE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPLACE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPLACE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RIGHT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RIGHT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RIGHT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RIGHT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RMB.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RMB.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RMB.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RMB.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SEARCH.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SEARCH.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SEARCH.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SEARCH.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SUBSTITUTE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SUBSTITUTE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SUBSTITUTE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SUBSTITUTE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_T.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_T.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_T.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_T.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TEXT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TEXT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TEXT.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TEXT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TRIM.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TRIM.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TRIM.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TRIM.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_UPPER.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_UPPER.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_UPPER.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_UPPER.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_VALUE.java b/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_VALUE.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/string/Function_VALUE.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_VALUE.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Array.java b/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Array.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Array.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Array.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJson.java b/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJson.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJson.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJson.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJsonItem.java b/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJsonItem.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJsonItem.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJsonItem.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_DiyFunction.java b/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_DiyFunction.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_DiyFunction.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_DiyFunction.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ERROR.java b/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ERROR.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ERROR.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ERROR.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_GetJsonValue.java b/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_GetJsonValue.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_GetJsonValue.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_GetJsonValue.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_JSON.java b/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_JSON.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_JSON.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_JSON.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_NUM.java b/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_NUM.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_NUM.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_NUM.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAM.java b/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAM.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAM.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAM.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAMETER.java b/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAMETER.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAMETER.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAMETER.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Value.java b/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Value.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Value.java rename to java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Value.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyDate.java b/java/src/main/java/toolgood/algorithm/internals/MyDate.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/MyDate.java rename to java/src/main/java/toolgood/algorithm/internals/MyDate.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java b/java/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java rename to java/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/RegexHelper.java b/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/RegexHelper.java rename to java/src/main/java/toolgood/algorithm/internals/RegexHelper.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/AntlrCharStream.java b/java/src/main/java/toolgood/algorithm/internals/Visitors/AntlrCharStream.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/AntlrCharStream.java rename to java/src/main/java/toolgood/algorithm/internals/Visitors/AntlrCharStream.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/CharUtil.java b/java/src/main/java/toolgood/algorithm/internals/Visitors/CharUtil.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/CharUtil.java rename to java/src/main/java/toolgood/algorithm/internals/Visitors/CharUtil.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/DiyNameVisitor.java b/java/src/main/java/toolgood/algorithm/internals/Visitors/DiyNameVisitor.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/DiyNameVisitor.java rename to java/src/main/java/toolgood/algorithm/internals/Visitors/DiyNameVisitor.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/MathSplitVisitor.java b/java/src/main/java/toolgood/algorithm/internals/Visitors/MathSplitVisitor.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/internals/Visitors/MathSplitVisitor.java rename to java/src/main/java/toolgood/algorithm/internals/Visitors/MathSplitVisitor.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/FsmContext.java b/java/src/main/java/toolgood/algorithm/litJson/FsmContext.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/FsmContext.java rename to java/src/main/java/toolgood/algorithm/litJson/FsmContext.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java b/java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java rename to java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/JsonData.java b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/JsonData.java rename to java/src/main/java/toolgood/algorithm/litJson/JsonData.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/JsonException.java b/java/src/main/java/toolgood/algorithm/litJson/JsonException.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/JsonException.java rename to java/src/main/java/toolgood/algorithm/litJson/JsonException.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/JsonMapper.java b/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/JsonMapper.java rename to java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/JsonReader.java b/java/src/main/java/toolgood/algorithm/litJson/JsonReader.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/JsonReader.java rename to java/src/main/java/toolgood/algorithm/litJson/JsonReader.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/JsonToken.java b/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/JsonToken.java rename to java/src/main/java/toolgood/algorithm/litJson/JsonToken.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/JsonType.java b/java/src/main/java/toolgood/algorithm/litJson/JsonType.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/JsonType.java rename to java/src/main/java/toolgood/algorithm/litJson/JsonType.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/Lexer.java b/java/src/main/java/toolgood/algorithm/litJson/Lexer.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/Lexer.java rename to java/src/main/java/toolgood/algorithm/litJson/Lexer.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/ParserToken.java b/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/litJson/ParserToken.java rename to java/src/main/java/toolgood/algorithm/litJson/ParserToken.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathLexer.java b/java/src/main/java/toolgood/algorithm/math/mathLexer.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathLexer.java rename to java/src/main/java/toolgood/algorithm/math/mathLexer.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathParser.java b/java/src/main/java/toolgood/algorithm/math/mathParser.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathParser.java rename to java/src/main/java/toolgood/algorithm/math/mathParser.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathVisitor.java b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/math/mathVisitor.java rename to java/src/main/java/toolgood/algorithm/math/mathVisitor.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Constants.java b/java/src/main/java/toolgood/algorithm/mathNet/Constants.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Constants.java rename to java/src/main/java/toolgood/algorithm/mathNet/Constants.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Evaluate.java b/java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Evaluate.java rename to java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java b/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java rename to java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Precision.java b/java/src/main/java/toolgood/algorithm/mathNet/Precision.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Precision.java rename to java/src/main/java/toolgood/algorithm/mathNet/Precision.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java rename to java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java rename to java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java b/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java rename to java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java rename to java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java rename to java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java rename to java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java rename to java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java rename to java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java rename to java/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java rename to java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java rename to java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java b/java/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java rename to java/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java b/java/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java rename to java/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java b/java/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java rename to java/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java diff --git a/java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java similarity index 100% rename from java/toolgood.algorithm/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java rename to java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/DemoApplication.java b/java/src/test/java/toolgood/algorithm/DemoApplication.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/DemoApplication.java rename to java/src/test/java/toolgood/algorithm/DemoApplication.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/Cylinder.java b/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/Cylinder.java rename to java/src/test/java/toolgood/algorithm/Tests/Cylinder.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/IssuesTest.java b/java/src/test/java/toolgood/algorithm/Tests/IssuesTest.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests/IssuesTest.java rename to java/src/test/java/toolgood/algorithm/Tests/IssuesTest.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java b/java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java rename to java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java diff --git a/java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java b/java/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java similarity index 100% rename from java/toolgood.algorithm/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java rename to java/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java From 0c45677bf98eb1b941db7bb8d9d4f7cd5a0f8fa1 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 06:49:24 +0800 Subject: [PATCH 10/98] fix --- .../mathtrigonometric/Function_ACOS.java | 31 +++++++++++++++ .../mathtrigonometric/Function_ACOSH.java | 31 +++++++++++++++ .../mathtrigonometric/Function_ASIN.java | 31 +++++++++++++++ .../mathtrigonometric/Function_ASINH.java | 31 +++++++++++++++ .../mathtrigonometric/Function_ATAN.java | 31 +++++++++++++++ .../mathtrigonometric/Function_ATAN2.java | 38 +++++++++++++++++++ .../mathtrigonometric/Function_ATANH.java | 31 +++++++++++++++ .../mathtrigonometric/Function_COS.java | 31 +++++++++++++++ .../mathtrigonometric/Function_COSH.java | 31 +++++++++++++++ .../mathtrigonometric/Function_COT.java | 36 ++++++++++++++++++ .../mathtrigonometric/Function_CSC.java | 36 ++++++++++++++++++ .../mathtrigonometric/Function_DEGREES.java | 31 +++++++++++++++ .../mathtrigonometric/Function_RADIANS.java | 31 +++++++++++++++ .../mathtrigonometric/Function_SEC.java | 36 ++++++++++++++++++ .../mathtrigonometric/Function_SIN.java | 31 +++++++++++++++ .../mathtrigonometric/Function_SINH.java | 31 +++++++++++++++ .../mathtrigonometric/Function_TAN.java | 31 +++++++++++++++ .../mathtrigonometric/Function_TANH.java | 31 +++++++++++++++ 18 files changed, 580 insertions(+) create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ACOS.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ACOSH.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ASIN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ASINH.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATAN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATAN2.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATANH.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COS.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COSH.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COT.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_CSC.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_DEGREES.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_RADIANS.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SEC.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SIN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SINH.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_TAN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_TANH.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ACOS.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ACOS.java new file mode 100644 index 000000000..8dcc3786e --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ACOS.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_ACOS extends Function_1 { + public Function_ACOS(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Acos"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.acos(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Acos"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ACOSH.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ACOSH.java new file mode 100644 index 000000000..2aec80e96 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ACOSH.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_ACOSH extends Function_1 { + public Function_ACOSH(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Acosh"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.acosh(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Acosh"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ASIN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ASIN.java new file mode 100644 index 000000000..35eb8b724 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ASIN.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_ASIN extends Function_1 { + public Function_ASIN(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Asin"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.asin(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Asin"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ASINH.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ASINH.java new file mode 100644 index 000000000..fb7f7733e --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ASINH.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_ASINH extends Function_1 { + public Function_ASINH(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Asinh"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.asinh(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Asinh"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATAN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATAN.java new file mode 100644 index 000000000..1f9053ca7 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATAN.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_ATAN extends Function_1 { + public Function_ATAN(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Atan"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.atan(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Atan"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATAN2.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATAN2.java new file mode 100644 index 000000000..ddf9fb653 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATAN2.java @@ -0,0 +1,38 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_ATAN2 extends Function_2 { + public Function_ATAN2(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Atan2"); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.evaluate(work, tempParameter); + if (!args2.isNumber()) { + args2 = args2.toNumber("Function '{0}' parameter is error!", "Atan2"); + if (args2.isError()) { + return args2; + } + } + return Operand.create(Math.atan2(args1.getDoubleValue(), args2.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Atan2"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATANH.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATANH.java new file mode 100644 index 000000000..54bdaaf62 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATANH.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_ATANH extends Function_1 { + public Function_ATANH(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Atanh"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.atanh(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Atanh"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COS.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COS.java new file mode 100644 index 000000000..86585cf8d --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COS.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_COS extends Function_1 { + public Function_COS(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Cos"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.cos(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Cos"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COSH.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COSH.java new file mode 100644 index 000000000..cdf8bc4c7 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COSH.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_COSH extends Function_1 { + public Function_COSH(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Cosh"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.cosh(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Cosh"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COT.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COT.java new file mode 100644 index 000000000..57f52d4ca --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COT.java @@ -0,0 +1,36 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_COT extends Function_1 { + public Function_COT(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Cot"); + if (args1.isError()) { + return args1; + } + } + double value = args1.getDoubleValue(); + double tanValue = Math.tan(value); + if (tanValue == 0) { + return Operand.create(Double.POSITIVE_INFINITY); + } + return Operand.create(1.0 / tanValue); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Cot"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_CSC.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_CSC.java new file mode 100644 index 000000000..784920c13 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_CSC.java @@ -0,0 +1,36 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_CSC extends Function_1 { + public Function_CSC(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Csc"); + if (args1.isError()) { + return args1; + } + } + double value = args1.getDoubleValue(); + double sinValue = Math.sin(value); + if (sinValue == 0) { + return Operand.create(Double.POSITIVE_INFINITY); + } + return Operand.create(1.0 / sinValue); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Csc"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_DEGREES.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_DEGREES.java new file mode 100644 index 000000000..8398d5d1d --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_DEGREES.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_DEGREES extends Function_1 { + public Function_DEGREES(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Degrees"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.toDegrees(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Degrees"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_RADIANS.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_RADIANS.java new file mode 100644 index 000000000..7c9fc07b8 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_RADIANS.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_RADIANS extends Function_1 { + public Function_RADIANS(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Radians"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.toRadians(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Radians"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SEC.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SEC.java new file mode 100644 index 000000000..505890900 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SEC.java @@ -0,0 +1,36 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_SEC extends Function_1 { + public Function_SEC(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Sec"); + if (args1.isError()) { + return args1; + } + } + double value = args1.getDoubleValue(); + double cosValue = Math.cos(value); + if (cosValue == 0) { + return Operand.create(Double.POSITIVE_INFINITY); + } + return Operand.create(1.0 / cosValue); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Sec"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SIN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SIN.java new file mode 100644 index 000000000..bd31ef1ce --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SIN.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_SIN extends Function_1 { + public Function_SIN(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Sin"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.sin(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Sin"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SINH.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SINH.java new file mode 100644 index 000000000..3c84f5567 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SINH.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_SINH extends Function_1 { + public Function_SINH(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Sinh"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.sinh(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Sinh"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_TAN.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_TAN.java new file mode 100644 index 000000000..548ffddb1 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_TAN.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_TAN extends Function_1 { + public Function_TAN(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Tan"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.tan(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Tan"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_TANH.java b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_TANH.java new file mode 100644 index 000000000..4988fb652 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_TANH.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.Function; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_TANH extends Function_1 { + public Function_TANH(FunctionBase func1) { + super(func1); + } + + @Override + public Operand evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.evaluate(work, tempParameter); + if (!args1.isNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Tanh"); + if (args1.isError()) { + return args1; + } + } + return Operand.create(Math.tanh(args1.getDoubleValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Tanh"); + } +} From 69a0baffe3e9adeec7c0baf6519de5be34bb0cf3 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 06:51:27 +0800 Subject: [PATCH 11/98] =?UTF-8?q?fix=20=E7=9B=AE=E5=BD=95=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- {java => java1}/.classpath | 0 {java => java1}/.gitignore | 0 {java => java1}/.project | 0 {java => java1}/README-EN.md | 0 {java => java1}/README.md | 0 {java => java1}/build.bat | 0 {java => java1}/build2.exe | Bin {java => java1}/pom.xml | 0 .../src/main/java/toolgood/algorithm/Operand.java | 0 .../main/java/toolgood/algorithm/OperandImpl.java | 0 .../java/toolgood/algorithm/enums/AreaUnitType.java | 0 .../toolgood/algorithm/enums/CalculateTreeType.java | 0 .../toolgood/algorithm/enums/ConditionTreeType.java | 0 .../toolgood/algorithm/enums/DistanceUnitType.java | 0 .../java/toolgood/algorithm/enums/MassUnitType.java | 0 .../toolgood/algorithm/enums/NumberUnitType.java | 0 .../java/toolgood/algorithm/enums/OperandType.java | 0 .../toolgood/algorithm/enums/VolumeUnitType.java | 0 .../toolgood/algorithm/internals/CalculateTree.java | 0 .../toolgood/algorithm/internals/ConditionTree.java | 0 .../toolgood/algorithm/internals/DiyNameInfo.java | 0 .../java/toolgood/algorithm/internals/MyDate.java | 0 .../algorithm/internals/NumberUnitTypeHelper.java | 0 .../toolgood/algorithm/internals/RegexHelper.java | 0 .../internals/functions}/FunctionBase.java | 0 .../internals/functions}/FunctionUtil.java | 0 .../algorithm/internals/functions}/Function_1.java | 0 .../algorithm/internals/functions}/Function_2.java | 0 .../algorithm/internals/functions}/Function_3.java | 0 .../algorithm/internals/functions}/Function_4.java | 0 .../algorithm/internals/functions}/Function_N.java | 0 .../internals/functions}/compare/Function_EQ.java | 0 .../internals/functions}/compare/Function_GE.java | 0 .../internals/functions}/compare/Function_GT.java | 0 .../internals/functions}/compare/Function_LE.java | 0 .../internals/functions}/compare/Function_LT.java | 0 .../internals/functions}/compare/Function_NE.java | 0 .../functions}/csharp/Function_ENDSWITH.java | 0 .../internals/functions}/csharp/Function_GUID.java | 0 .../internals/functions}/csharp/Function_HAS.java | 0 .../functions}/csharp/Function_HASVALUE.java | 0 .../functions}/csharp/Function_INDEXOF.java | 0 .../functions}/csharp/Function_ISREGEX.java | 0 .../internals/functions}/csharp/Function_JOIN.java | 0 .../functions}/csharp/Function_LASTINDEXOF.java | 0 .../functions}/csharp/Function_LOOKCEILING.java | 0 .../functions}/csharp/Function_LOOKFLOOR.java | 0 .../internals/functions}/csharp/Function_REGEX.java | 0 .../functions}/csharp/Function_REGEXREPALCE.java | 0 .../functions}/csharp/Function_REMOVEEND.java | 0 .../functions}/csharp/Function_REMOVESTART.java | 0 .../internals/functions}/csharp/Function_SPLIT.java | 0 .../functions}/csharp/Function_STARTSWITH.java | 0 .../functions}/csharp/Function_SUBSTRING.java | 0 .../functions}/csharp/Function_TRIMEND.java | 0 .../functions}/csharp/Function_TRIMSTART.java | 0 .../functions}/csharpsecurity/Function_HMACMD5.java | 0 .../csharpsecurity/Function_HMACSHA1.java | 0 .../csharpsecurity/Function_HMACSHA256.java | 0 .../csharpsecurity/Function_HMACSHA512.java | 0 .../functions}/csharpsecurity/Function_MD5.java | 0 .../functions}/csharpsecurity/Function_SHA1.java | 0 .../functions}/csharpsecurity/Function_SHA256.java | 0 .../functions}/csharpsecurity/Function_SHA512.java | 0 .../internals/functions}/csharpweb/Base64.java | 0 .../functions}/csharpweb/Function_BASE64TOTEXT.java | 0 .../csharpweb/Function_BASE64URLTOTEXT.java | 0 .../functions}/csharpweb/Function_HTMLDECODE.java | 0 .../functions}/csharpweb/Function_HTMLENCODE.java | 0 .../functions}/csharpweb/Function_TEXTTOBASE64.java | 0 .../csharpweb/Function_TEXTTOBASE64URL.java | 0 .../functions}/csharpweb/Function_URLDECODE.java | 0 .../functions}/csharpweb/Function_URLENCODE.java | 0 .../functions}/datetimes/Function_ADDDAYS.java | 0 .../functions}/datetimes/Function_ADDHOURS.java | 0 .../functions}/datetimes/Function_ADDMINUTES.java | 0 .../functions}/datetimes/Function_ADDMONTHS.java | 0 .../functions}/datetimes/Function_ADDSECONDS.java | 0 .../functions}/datetimes/Function_ADDYEARS.java | 0 .../functions}/datetimes/Function_DATE.java | 0 .../functions}/datetimes/Function_DATEDIF.java | 0 .../functions}/datetimes/Function_DATEVALUE.java | 0 .../functions}/datetimes/Function_DAY.java | 0 .../functions}/datetimes/Function_DAYS360.java | 0 .../functions}/datetimes/Function_EDATE.java | 0 .../functions}/datetimes/Function_EOMONTH.java | 0 .../functions}/datetimes/Function_HOUR.java | 0 .../functions}/datetimes/Function_MINUTE.java | 0 .../functions}/datetimes/Function_MONTH.java | 0 .../functions}/datetimes/Function_NETWORKDAYS.java | 0 .../functions}/datetimes/Function_NOW.java | 0 .../functions}/datetimes/Function_SECOND.java | 0 .../functions}/datetimes/Function_TIME.java | 0 .../functions}/datetimes/Function_TIMESTAMP.java | 0 .../functions}/datetimes/Function_TIMEVALUE.java | 0 .../functions}/datetimes/Function_TODAY.java | 0 .../functions}/datetimes/Function_WEEKDAY.java | 0 .../functions}/datetimes/Function_WEEKNUM.java | 0 .../functions}/datetimes/Function_WORKDAY.java | 0 .../functions}/datetimes/Function_YEAR.java | 0 .../internals/functions}/flow/Function_IF.java | 0 .../internals/functions}/flow/Function_IFERROR.java | 0 .../internals/functions}/flow/Function_ISERROR.java | 0 .../internals/functions}/flow/Function_ISEVEN.java | 0 .../functions}/flow/Function_ISLOGICAL.java | 0 .../functions}/flow/Function_ISNONTEXT.java | 0 .../internals/functions}/flow/Function_ISNULL.java | 0 .../functions}/flow/Function_ISNULLOREMPTY.java | 0 .../functions}/flow/Function_ISNULLORERROR.java | 0 .../flow/Function_ISNULLORWHITESPACE.java | 0 .../functions}/flow/Function_ISNUMBER.java | 0 .../internals/functions}/flow/Function_ISODD.java | 0 .../internals/functions}/flow/Function_ISTEXT.java | 0 .../internals/functions}/flow/Function_NOT.java | 0 .../internals/functions}/mathbase/Function_ABS.java | 0 .../functions}/mathbase/Function_CEILING.java | 0 .../functions}/mathbase/Function_COMBIN.java | 0 .../functions}/mathbase/Function_EVEN.java | 0 .../internals/functions}/mathbase/Function_EXP.java | 0 .../functions}/mathbase/Function_FACT.java | 0 .../functions}/mathbase/Function_FACTDOUBLE.java | 0 .../functions}/mathbase/Function_FIXED.java | 0 .../functions}/mathbase/Function_FLOOR.java | 0 .../internals/functions}/mathbase/Function_GCD.java | 0 .../internals/functions}/mathbase/Function_LCM.java | 0 .../internals/functions}/mathbase/Function_LN.java | 0 .../internals/functions}/mathbase/Function_LOG.java | 0 .../functions}/mathbase/Function_MROUND.java | 0 .../functions}/mathbase/Function_MULTINOMIAL.java | 0 .../internals/functions}/mathbase/Function_ODD.java | 0 .../functions}/mathbase/Function_PERMUT.java | 0 .../functions}/mathbase/Function_POWER.java | 0 .../functions}/mathbase/Function_PRODUCT.java | 0 .../functions}/mathbase/Function_Percentage.java | 0 .../functions}/mathbase/Function_QUOTIENT.java | 0 .../functions}/mathbase/Function_RAND.java | 0 .../functions}/mathbase/Function_RANDBETWEEN.java | 0 .../functions}/mathbase/Function_ROUND.java | 0 .../functions}/mathbase/Function_ROUNDDOWN.java | 0 .../functions}/mathbase/Function_ROUNDUP.java | 0 .../functions}/mathbase/Function_SIGN.java | 0 .../functions}/mathbase/Function_SQRT.java | 0 .../functions}/mathbase/Function_SQRTPI.java | 0 .../functions}/mathbase/Function_TRUNC.java | 0 .../functions}/mathtrigonometric/Function_ACOS.java | 0 .../mathtrigonometric/Function_ACOSH.java | 0 .../functions}/mathtrigonometric/Function_ASIN.java | 0 .../mathtrigonometric/Function_ASINH.java | 0 .../functions}/mathtrigonometric/Function_ATAN.java | 0 .../mathtrigonometric/Function_ATAN2.java | 0 .../mathtrigonometric/Function_ATANH.java | 0 .../functions}/mathtrigonometric/Function_COS.java | 0 .../functions}/mathtrigonometric/Function_COSH.java | 0 .../functions}/mathtrigonometric/Function_COT.java | 0 .../functions}/mathtrigonometric/Function_CSC.java | 0 .../mathtrigonometric/Function_DEGREES.java | 0 .../mathtrigonometric/Function_RADIANS.java | 0 .../functions}/mathtrigonometric/Function_SEC.java | 0 .../functions}/mathtrigonometric/Function_SIN.java | 0 .../functions}/mathtrigonometric/Function_SINH.java | 0 .../functions}/mathtrigonometric/Function_TAN.java | 0 .../functions}/mathtrigonometric/Function_TANH.java | 0 .../internals/functions}/operator/Function_AND.java | 0 .../functions}/operator/Function_AND_N.java | 0 .../internals/functions}/operator/Function_Add.java | 0 .../functions}/operator/Function_Connect.java | 0 .../internals/functions}/operator/Function_Div.java | 0 .../internals/functions}/operator/Function_Mod.java | 0 .../internals/functions}/operator/Function_Mul.java | 0 .../internals/functions}/operator/Function_OR.java | 0 .../functions}/operator/Function_OR_N.java | 0 .../internals/functions}/operator/Function_Sub.java | 0 .../internals/functions}/string/Function_ASC.java | 0 .../internals/functions}/string/Function_CHAR.java | 0 .../internals/functions}/string/Function_CLEAN.java | 0 .../internals/functions}/string/Function_CODE.java | 0 .../functions}/string/Function_CONCATENATE.java | 0 .../internals/functions}/string/Function_EXACT.java | 0 .../internals/functions}/string/Function_FIND.java | 0 .../internals/functions}/string/Function_JIS.java | 0 .../internals/functions}/string/Function_LEFT.java | 0 .../internals/functions}/string/Function_LEN.java | 0 .../internals/functions}/string/Function_LOWER.java | 0 .../internals/functions}/string/Function_MID.java | 0 .../functions}/string/Function_PROPER.java | 0 .../functions}/string/Function_REPLACE.java | 0 .../internals/functions}/string/Function_REPT.java | 0 .../internals/functions}/string/Function_RIGHT.java | 0 .../internals/functions}/string/Function_RMB.java | 0 .../functions}/string/Function_SEARCH.java | 0 .../functions}/string/Function_SUBSTITUTE.java | 0 .../internals/functions}/string/Function_T.java | 0 .../internals/functions}/string/Function_TEXT.java | 0 .../internals/functions}/string/Function_TRIM.java | 0 .../internals/functions}/string/Function_UPPER.java | 0 .../internals/functions}/string/Function_VALUE.java | 0 .../internals/functions}/value/Function_Array.java | 0 .../functions}/value/Function_ArrayJson.java | 0 .../functions}/value/Function_ArrayJsonItem.java | 0 .../functions}/value/Function_DiyFunction.java | 0 .../internals/functions}/value/Function_ERROR.java | 0 .../functions}/value/Function_GetJsonValue.java | 0 .../internals/functions}/value/Function_JSON.java | 0 .../internals/functions}/value/Function_NUM.java | 0 .../internals/functions}/value/Function_PARAM.java | 0 .../functions}/value/Function_PARAMETER.java | 0 .../internals/functions}/value/Function_Value.java | 0 .../internals/visitors}/AntlrCharStream.java | 0 .../algorithm/internals/visitors}/CharUtil.java | 0 .../internals/visitors}/DiyNameVisitor.java | 0 .../internals/visitors}/MathSplitVisitor.java | 0 .../java/toolgood/algorithm/litJson/FsmContext.java | 0 .../toolgood/algorithm/litJson/IJsonWrapper.java | 0 .../java/toolgood/algorithm/litJson/JsonData.java | 0 .../toolgood/algorithm/litJson/JsonException.java | 0 .../java/toolgood/algorithm/litJson/JsonMapper.java | 0 .../java/toolgood/algorithm/litJson/JsonReader.java | 0 .../java/toolgood/algorithm/litJson/JsonToken.java | 0 .../java/toolgood/algorithm/litJson/JsonType.java | 0 .../main/java/toolgood/algorithm/litJson/Lexer.java | 0 .../toolgood/algorithm/litJson/ParserToken.java | 0 .../java/toolgood/algorithm/math/mathLexer.java | 0 .../java/toolgood/algorithm/math/mathParser.java | 0 .../java/toolgood/algorithm/math/mathVisitor.java | 0 .../java/toolgood/algorithm/mathNet/Constants.java | 0 .../algorithm/mathNet/Distributions/Beta.java | 0 .../algorithm/mathNet/Distributions/Binomial.java | 0 .../mathNet/Distributions/Exponential.java | 0 .../mathNet/Distributions/FisherSnedecor.java | 0 .../algorithm/mathNet/Distributions/Gamma.java | 0 .../mathNet/Distributions/Hypergeometric.java | 0 .../algorithm/mathNet/Distributions/LogNormal.java | 0 .../mathNet/Distributions/NegativeBinomial.java | 0 .../algorithm/mathNet/Distributions/Normal.java | 0 .../algorithm/mathNet/Distributions/Poisson.java | 0 .../algorithm/mathNet/Distributions/StudentT.java | 0 .../algorithm/mathNet/Distributions/Weibull.java | 0 .../java/toolgood/algorithm/mathNet/Evaluate.java | 0 .../toolgood/algorithm/mathNet/ExcelFunctions.java | 0 .../java/toolgood/algorithm/mathNet/Precision.java | 0 .../algorithm/mathNet/RootFinding/Brent.java | 0 .../algorithm/mathNet/RootFinding/RootNumber.java | 0 .../algorithm/mathNet/SpecialFunctions.java | 0 .../mathNet/Statistics/ArrayStatistics.java | 0 .../mathNet/Statistics/QuantileDefinition.java | 0 .../mathNet/Statistics/SortedArrayStatistics.java | 0 .../algorithm/mathNet/Statistics/Statistics.java | 0 .../algorithm/unitConversion/AreaConverter.java | 0 .../algorithm/unitConversion/BaseUnitConverter.java | 0 .../algorithm/unitConversion/DistanceConverter.java | 0 .../algorithm/unitConversion/MassConverter.java | 0 .../unitConversion/UnitFactorSynonyms.java | 0 .../algorithm/unitConversion/UnitFactors.java | 0 .../unitConversion/UnitNotSupportedException.java | 0 .../algorithm/unitConversion/VolumeConverter.java | 0 .../java/toolgood/algorithm/DemoApplication.java | 0 .../algorithm/Tests/AlgorithmEngineTest.java | 0 .../algorithm/Tests/AlgorithmEngineTest_csharp.java | 0 .../Tests/AlgorithmEngineTest_dateTime.java | 0 .../algorithm/Tests/AlgorithmEngineTest_flow.java | 0 .../algorithm/Tests/AlgorithmEngineTest_math.java | 0 .../algorithm/Tests/AlgorithmEngineTest_string.java | 0 .../algorithm/Tests/AlgorithmEngineTest_sum.java | 0 .../algorithm/Tests/AlgorithmEngineTest_v3_5.java | 0 .../Tests/AlgorithmEngineTest_vlookup.java | 0 .../java/toolgood/algorithm/Tests/Cylinder.java | 0 .../java/toolgood/algorithm/Tests/IssuesTest.java | 0 .../algorithm/Tests3/AlgorithmEngineHelperTest.java | 0 .../algorithm/Tests4/ConditionTreeTest.java | 0 269 files changed, 0 insertions(+), 0 deletions(-) rename {java => java1}/.classpath (100%) rename {java => java1}/.gitignore (100%) rename {java => java1}/.project (100%) rename {java => java1}/README-EN.md (100%) rename {java => java1}/README.md (100%) rename {java => java1}/build.bat (100%) rename {java => java1}/build2.exe (100%) rename {java => java1}/pom.xml (100%) rename {java => java1}/src/main/java/toolgood/algorithm/Operand.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/OperandImpl.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/enums/AreaUnitType.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/enums/MassUnitType.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/enums/NumberUnitType.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/enums/OperandType.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/internals/CalculateTree.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/internals/ConditionTree.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/internals/MyDate.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/internals/RegexHelper.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/FunctionBase.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/FunctionUtil.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/Function_1.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/Function_2.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/Function_3.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/Function_4.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/Function_N.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/compare/Function_EQ.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/compare/Function_GE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/compare/Function_GT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/compare/Function_LE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/compare/Function_LT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/compare/Function_NE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_ENDSWITH.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_GUID.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_HAS.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_HASVALUE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_INDEXOF.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_ISREGEX.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_JOIN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_LASTINDEXOF.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_LOOKCEILING.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_LOOKFLOOR.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_REGEX.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_REGEXREPALCE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_REMOVEEND.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_REMOVESTART.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_SPLIT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_STARTSWITH.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_SUBSTRING.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_TRIMEND.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharp/Function_TRIMSTART.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpsecurity/Function_HMACMD5.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpsecurity/Function_HMACSHA1.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpsecurity/Function_HMACSHA256.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpsecurity/Function_HMACSHA512.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpsecurity/Function_MD5.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpsecurity/Function_SHA1.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpsecurity/Function_SHA256.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpsecurity/Function_SHA512.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpweb/Base64.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpweb/Function_BASE64TOTEXT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpweb/Function_BASE64URLTOTEXT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpweb/Function_HTMLDECODE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpweb/Function_HTMLENCODE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpweb/Function_TEXTTOBASE64.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpweb/Function_TEXTTOBASE64URL.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpweb/Function_URLDECODE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/csharpweb/Function_URLENCODE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_ADDDAYS.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_ADDHOURS.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_ADDMINUTES.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_ADDMONTHS.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_ADDSECONDS.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_ADDYEARS.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_DATE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_DATEDIF.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_DATEVALUE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_DAY.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_DAYS360.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_EDATE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_EOMONTH.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_HOUR.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_MINUTE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_MONTH.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_NETWORKDAYS.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_NOW.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_SECOND.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_TIME.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_TIMESTAMP.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_TIMEVALUE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_TODAY.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_WEEKDAY.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_WEEKNUM.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_WORKDAY.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/datetimes/Function_YEAR.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_IF.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_IFERROR.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_ISERROR.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_ISEVEN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_ISLOGICAL.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_ISNONTEXT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_ISNULL.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_ISNULLOREMPTY.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_ISNULLORERROR.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_ISNULLORWHITESPACE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_ISNUMBER.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_ISODD.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_ISTEXT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/flow/Function_NOT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_ABS.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_CEILING.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_COMBIN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_EVEN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_EXP.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_FACT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_FACTDOUBLE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_FIXED.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_FLOOR.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_GCD.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_LCM.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_LN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_LOG.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_MROUND.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_MULTINOMIAL.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_ODD.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_PERMUT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_POWER.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_PRODUCT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_Percentage.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_QUOTIENT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_RAND.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_RANDBETWEEN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_ROUND.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_ROUNDDOWN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_ROUNDUP.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_SIGN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_SQRT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_SQRTPI.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathbase/Function_TRUNC.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_ACOS.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_ACOSH.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_ASIN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_ASINH.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_ATAN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_ATAN2.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_ATANH.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_COS.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_COSH.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_COT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_CSC.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_DEGREES.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_RADIANS.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_SEC.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_SIN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_SINH.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_TAN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/mathtrigonometric/Function_TANH.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/operator/Function_AND.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/operator/Function_AND_N.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/operator/Function_Add.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/operator/Function_Connect.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/operator/Function_Div.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/operator/Function_Mod.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/operator/Function_Mul.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/operator/Function_OR.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/operator/Function_OR_N.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/operator/Function_Sub.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_ASC.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_CHAR.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_CLEAN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_CODE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_CONCATENATE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_EXACT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_FIND.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_JIS.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_LEFT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_LEN.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_LOWER.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_MID.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_PROPER.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_REPLACE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_REPT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_RIGHT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_RMB.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_SEARCH.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_SUBSTITUTE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_T.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_TEXT.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_TRIM.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_UPPER.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/string/Function_VALUE.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/value/Function_Array.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/value/Function_ArrayJson.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/value/Function_ArrayJsonItem.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/value/Function_DiyFunction.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/value/Function_ERROR.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/value/Function_GetJsonValue.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/value/Function_JSON.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/value/Function_NUM.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/value/Function_PARAM.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/value/Function_PARAMETER.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Functions => java1/src/main/java/toolgood/algorithm/internals/functions}/value/Function_Value.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Visitors => java1/src/main/java/toolgood/algorithm/internals/visitors}/AntlrCharStream.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Visitors => java1/src/main/java/toolgood/algorithm/internals/visitors}/CharUtil.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Visitors => java1/src/main/java/toolgood/algorithm/internals/visitors}/DiyNameVisitor.java (100%) rename {java/src/main/java/toolgood/algorithm/internals/Visitors => java1/src/main/java/toolgood/algorithm/internals/visitors}/MathSplitVisitor.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/litJson/FsmContext.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/litJson/JsonData.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/litJson/JsonException.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/litJson/JsonMapper.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/litJson/JsonReader.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/litJson/JsonToken.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/litJson/JsonType.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/litJson/Lexer.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/litJson/ParserToken.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/math/mathLexer.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/math/mathParser.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/math/mathVisitor.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Constants.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Evaluate.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Precision.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java (100%) rename {java => java1}/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/DemoApplication.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests/Cylinder.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests/IssuesTest.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java (100%) rename {java => java1}/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java (100%) diff --git a/java/.classpath b/java1/.classpath similarity index 100% rename from java/.classpath rename to java1/.classpath diff --git a/java/.gitignore b/java1/.gitignore similarity index 100% rename from java/.gitignore rename to java1/.gitignore diff --git a/java/.project b/java1/.project similarity index 100% rename from java/.project rename to java1/.project diff --git a/java/README-EN.md b/java1/README-EN.md similarity index 100% rename from java/README-EN.md rename to java1/README-EN.md diff --git a/java/README.md b/java1/README.md similarity index 100% rename from java/README.md rename to java1/README.md diff --git a/java/build.bat b/java1/build.bat similarity index 100% rename from java/build.bat rename to java1/build.bat diff --git a/java/build2.exe b/java1/build2.exe similarity index 100% rename from java/build2.exe rename to java1/build2.exe diff --git a/java/pom.xml b/java1/pom.xml similarity index 100% rename from java/pom.xml rename to java1/pom.xml diff --git a/java/src/main/java/toolgood/algorithm/Operand.java b/java1/src/main/java/toolgood/algorithm/Operand.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/Operand.java rename to java1/src/main/java/toolgood/algorithm/Operand.java diff --git a/java/src/main/java/toolgood/algorithm/OperandImpl.java b/java1/src/main/java/toolgood/algorithm/OperandImpl.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/OperandImpl.java rename to java1/src/main/java/toolgood/algorithm/OperandImpl.java diff --git a/java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java b/java1/src/main/java/toolgood/algorithm/enums/AreaUnitType.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java rename to java1/src/main/java/toolgood/algorithm/enums/AreaUnitType.java diff --git a/java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java b/java1/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java rename to java1/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java diff --git a/java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java b/java1/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java rename to java1/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java diff --git a/java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java b/java1/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java rename to java1/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java diff --git a/java/src/main/java/toolgood/algorithm/enums/MassUnitType.java b/java1/src/main/java/toolgood/algorithm/enums/MassUnitType.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/enums/MassUnitType.java rename to java1/src/main/java/toolgood/algorithm/enums/MassUnitType.java diff --git a/java/src/main/java/toolgood/algorithm/enums/NumberUnitType.java b/java1/src/main/java/toolgood/algorithm/enums/NumberUnitType.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/enums/NumberUnitType.java rename to java1/src/main/java/toolgood/algorithm/enums/NumberUnitType.java diff --git a/java/src/main/java/toolgood/algorithm/enums/OperandType.java b/java1/src/main/java/toolgood/algorithm/enums/OperandType.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/enums/OperandType.java rename to java1/src/main/java/toolgood/algorithm/enums/OperandType.java diff --git a/java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java b/java1/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java rename to java1/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java diff --git a/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java b/java1/src/main/java/toolgood/algorithm/internals/CalculateTree.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/CalculateTree.java rename to java1/src/main/java/toolgood/algorithm/internals/CalculateTree.java diff --git a/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java b/java1/src/main/java/toolgood/algorithm/internals/ConditionTree.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/ConditionTree.java rename to java1/src/main/java/toolgood/algorithm/internals/ConditionTree.java diff --git a/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java b/java1/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java rename to java1/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java diff --git a/java/src/main/java/toolgood/algorithm/internals/MyDate.java b/java1/src/main/java/toolgood/algorithm/internals/MyDate.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/MyDate.java rename to java1/src/main/java/toolgood/algorithm/internals/MyDate.java diff --git a/java/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java b/java1/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java rename to java1/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java diff --git a/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java b/java1/src/main/java/toolgood/algorithm/internals/RegexHelper.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/RegexHelper.java rename to java1/src/main/java/toolgood/algorithm/internals/RegexHelper.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/FunctionBase.java b/java1/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/FunctionBase.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/FunctionUtil.java b/java1/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/FunctionUtil.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/Function_1.java b/java1/src/main/java/toolgood/algorithm/internals/functions/Function_1.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/Function_1.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/Function_1.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/Function_2.java b/java1/src/main/java/toolgood/algorithm/internals/functions/Function_2.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/Function_2.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/Function_2.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/Function_3.java b/java1/src/main/java/toolgood/algorithm/internals/functions/Function_3.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/Function_3.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/Function_3.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/Function_4.java b/java1/src/main/java/toolgood/algorithm/internals/functions/Function_4.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/Function_4.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/Function_4.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/Function_N.java b/java1/src/main/java/toolgood/algorithm/internals/functions/Function_N.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/Function_N.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/Function_N.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_EQ.java b/java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_EQ.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_GT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_LT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_NE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/compare/Function_NE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ENDSWITH.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ENDSWITH.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_GUID.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_GUID.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HAS.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HAS.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HASVALUE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_HASVALUE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_INDEXOF.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_INDEXOF.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ISREGEX.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_ISREGEX.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_JOIN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_JOIN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LASTINDEXOF.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LASTINDEXOF.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKCEILING.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKCEILING.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKFLOOR.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_LOOKFLOOR.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEX.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEX.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEXREPALCE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REGEXREPALCE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVEEND.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVEEND.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVESTART.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_REMOVESTART.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SPLIT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SPLIT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_STARTSWITH.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_STARTSWITH.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_SUBSTRING.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMEND.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMSTART.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharp/Function_TRIMSTART.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACMD5.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACMD5.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA1.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA1.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA256.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA256.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA512.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_HMACSHA512.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_MD5.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_MD5.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA1.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA1.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA256.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA256.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA512.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpsecurity/Function_SHA512.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Base64.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Base64.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64TOTEXT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64TOTEXT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64URLTOTEXT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_BASE64URLTOTEXT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLDECODE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLDECODE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLENCODE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_HTMLENCODE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64URL.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_TEXTTOBASE64URL.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLDECODE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLDECODE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLENCODE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/csharpweb/Function_URLENCODE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDDAYS.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDDAYS.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDHOURS.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDHOURS.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMINUTES.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMINUTES.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMONTHS.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDMONTHS.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDSECONDS.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDSECONDS.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDYEARS.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_ADDYEARS.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEDIF.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEDIF.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEVALUE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DATEVALUE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAY.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAY.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAYS360.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_DAYS360.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EDATE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EDATE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EOMONTH.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_EOMONTH.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_HOUR.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_HOUR.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MINUTE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MINUTE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MONTH.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_MONTH.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NETWORKDAYS.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NETWORKDAYS.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NOW.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_NOW.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_SECOND.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_SECOND.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIME.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIME.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMESTAMP.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMESTAMP.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMEVALUE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TIMEVALUE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TODAY.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_TODAY.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKDAY.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKDAY.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKNUM.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WEEKNUM.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WORKDAY.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_WORKDAY.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_YEAR.java b/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/datetimes/Function_YEAR.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IF.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IF.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IFERROR.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_IFERROR.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISERROR.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISERROR.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISEVEN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISEVEN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISLOGICAL.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISLOGICAL.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNONTEXT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNONTEXT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULL.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULL.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLOREMPTY.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLOREMPTY.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORERROR.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORERROR.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORWHITESPACE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNULLORWHITESPACE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNUMBER.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISNUMBER.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISODD.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISODD.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISTEXT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_ISTEXT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_NOT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/flow/Function_NOT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ABS.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ABS.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_CEILING.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_CEILING.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_COMBIN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_COMBIN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EVEN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EVEN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EXP.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_EXP.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACTDOUBLE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FACTDOUBLE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FIXED.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FIXED.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FLOOR.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_FLOOR.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_GCD.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_GCD.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LCM.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LCM.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LOG.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_LOG.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MROUND.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MROUND.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MULTINOMIAL.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_MULTINOMIAL.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ODD.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ODD.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PERMUT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PERMUT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_POWER.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_POWER.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PRODUCT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_PRODUCT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_Percentage.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_Percentage.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_QUOTIENT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_QUOTIENT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RAND.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RAND.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RANDBETWEEN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_RANDBETWEEN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUND.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUND.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDDOWN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDDOWN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDUP.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_ROUNDUP.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SIGN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SIGN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRTPI.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_SQRTPI.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_TRUNC.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathbase/Function_TRUNC.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ACOS.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ACOS.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ACOSH.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ACOSH.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ASIN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ASIN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ASINH.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ASINH.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATAN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATAN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATAN2.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATAN2.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATANH.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_ATANH.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COS.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COS.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COSH.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COSH.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_COT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_CSC.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_CSC.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_DEGREES.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_DEGREES.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_RADIANS.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_RADIANS.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SEC.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SEC.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SIN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SIN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SINH.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_SINH.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_TAN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_TAN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_TANH.java b/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/mathtrigonometric/Function_TANH.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND.java b/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND_N.java b/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_AND_N.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Add.java b/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Add.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Connect.java b/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Connect.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Div.java b/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Div.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mod.java b/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mod.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mul.java b/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Mul.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR.java b/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR_N.java b/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_OR_N.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Sub.java b/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/operator/Function_Sub.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_ASC.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_ASC.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CHAR.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CHAR.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CLEAN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CLEAN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CODE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CODE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CONCATENATE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_CONCATENATE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_EXACT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_EXACT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_FIND.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_FIND.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_JIS.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_JIS.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEFT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEFT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEN.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LEN.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LOWER.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_LOWER.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_MID.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_MID.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_PROPER.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_PROPER.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPLACE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPLACE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_REPT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RIGHT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RIGHT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RMB.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_RMB.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SEARCH.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SEARCH.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SUBSTITUTE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_SUBSTITUTE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_T.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_T.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TEXT.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TEXT.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TRIM.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_TRIM.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_UPPER.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_UPPER.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_VALUE.java b/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/string/Function_VALUE.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Array.java b/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Array.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJson.java b/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJson.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJsonItem.java b/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ArrayJsonItem.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_DiyFunction.java b/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_DiyFunction.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ERROR.java b/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_ERROR.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_GetJsonValue.java b/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_GetJsonValue.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_JSON.java b/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_JSON.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_NUM.java b/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_NUM.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAM.java b/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAM.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAMETER.java b/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_PARAMETER.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Value.java b/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Functions/value/Function_Value.java rename to java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Visitors/AntlrCharStream.java b/java1/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Visitors/AntlrCharStream.java rename to java1/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Visitors/CharUtil.java b/java1/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Visitors/CharUtil.java rename to java1/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Visitors/DiyNameVisitor.java b/java1/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Visitors/DiyNameVisitor.java rename to java1/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java diff --git a/java/src/main/java/toolgood/algorithm/internals/Visitors/MathSplitVisitor.java b/java1/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/Visitors/MathSplitVisitor.java rename to java1/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java diff --git a/java/src/main/java/toolgood/algorithm/litJson/FsmContext.java b/java1/src/main/java/toolgood/algorithm/litJson/FsmContext.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/litJson/FsmContext.java rename to java1/src/main/java/toolgood/algorithm/litJson/FsmContext.java diff --git a/java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java b/java1/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java rename to java1/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java b/java1/src/main/java/toolgood/algorithm/litJson/JsonData.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/litJson/JsonData.java rename to java1/src/main/java/toolgood/algorithm/litJson/JsonData.java diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonException.java b/java1/src/main/java/toolgood/algorithm/litJson/JsonException.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/litJson/JsonException.java rename to java1/src/main/java/toolgood/algorithm/litJson/JsonException.java diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java b/java1/src/main/java/toolgood/algorithm/litJson/JsonMapper.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java rename to java1/src/main/java/toolgood/algorithm/litJson/JsonMapper.java diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonReader.java b/java1/src/main/java/toolgood/algorithm/litJson/JsonReader.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/litJson/JsonReader.java rename to java1/src/main/java/toolgood/algorithm/litJson/JsonReader.java diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java b/java1/src/main/java/toolgood/algorithm/litJson/JsonToken.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/litJson/JsonToken.java rename to java1/src/main/java/toolgood/algorithm/litJson/JsonToken.java diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonType.java b/java1/src/main/java/toolgood/algorithm/litJson/JsonType.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/litJson/JsonType.java rename to java1/src/main/java/toolgood/algorithm/litJson/JsonType.java diff --git a/java/src/main/java/toolgood/algorithm/litJson/Lexer.java b/java1/src/main/java/toolgood/algorithm/litJson/Lexer.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/litJson/Lexer.java rename to java1/src/main/java/toolgood/algorithm/litJson/Lexer.java diff --git a/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java b/java1/src/main/java/toolgood/algorithm/litJson/ParserToken.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/litJson/ParserToken.java rename to java1/src/main/java/toolgood/algorithm/litJson/ParserToken.java diff --git a/java/src/main/java/toolgood/algorithm/math/mathLexer.java b/java1/src/main/java/toolgood/algorithm/math/mathLexer.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/math/mathLexer.java rename to java1/src/main/java/toolgood/algorithm/math/mathLexer.java diff --git a/java/src/main/java/toolgood/algorithm/math/mathParser.java b/java1/src/main/java/toolgood/algorithm/math/mathParser.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/math/mathParser.java rename to java1/src/main/java/toolgood/algorithm/math/mathParser.java diff --git a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java b/java1/src/main/java/toolgood/algorithm/math/mathVisitor.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/math/mathVisitor.java rename to java1/src/main/java/toolgood/algorithm/math/mathVisitor.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Constants.java b/java1/src/main/java/toolgood/algorithm/mathNet/Constants.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Constants.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Constants.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java b/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java b/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java b/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java b/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java b/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java b/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java b/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java b/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java b/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java b/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java b/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java b/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java b/java1/src/main/java/toolgood/algorithm/mathNet/Evaluate.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Evaluate.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java b/java1/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java rename to java1/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Precision.java b/java1/src/main/java/toolgood/algorithm/mathNet/Precision.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Precision.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Precision.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java b/java1/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java rename to java1/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java b/java1/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java rename to java1/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java b/java1/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java rename to java1/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java b/java1/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java b/java1/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java b/java1/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java b/java1/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java rename to java1/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java b/java1/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java rename to java1/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java b/java1/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java rename to java1/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java b/java1/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java rename to java1/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java b/java1/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java rename to java1/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java b/java1/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java rename to java1/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java b/java1/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java rename to java1/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java b/java1/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java rename to java1/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java b/java1/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java rename to java1/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java diff --git a/java/src/test/java/toolgood/algorithm/DemoApplication.java b/java1/src/test/java/toolgood/algorithm/DemoApplication.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/DemoApplication.java rename to java1/src/test/java/toolgood/algorithm/DemoApplication.java diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java b/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java rename to java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java b/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java rename to java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java b/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java rename to java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java b/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java rename to java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java b/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java rename to java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java b/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java rename to java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java b/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java rename to java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java b/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java rename to java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java b/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java rename to java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java diff --git a/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java b/java1/src/test/java/toolgood/algorithm/Tests/Cylinder.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests/Cylinder.java rename to java1/src/test/java/toolgood/algorithm/Tests/Cylinder.java diff --git a/java/src/test/java/toolgood/algorithm/Tests/IssuesTest.java b/java1/src/test/java/toolgood/algorithm/Tests/IssuesTest.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests/IssuesTest.java rename to java1/src/test/java/toolgood/algorithm/Tests/IssuesTest.java diff --git a/java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java b/java1/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java rename to java1/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java diff --git a/java/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java b/java1/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java similarity index 100% rename from java/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java rename to java1/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java From b7ed8e90fa787dea19e044015ad6b86531536f39 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 06:51:55 +0800 Subject: [PATCH 12/98] fix --- {java1 => java}/.classpath | 0 {java1 => java}/.gitignore | 0 {java1 => java}/.project | 0 {java1 => java}/README-EN.md | 0 {java1 => java}/README.md | 0 {java1 => java}/build.bat | 0 {java1 => java}/build2.exe | Bin {java1 => java}/pom.xml | 0 .../src/main/java/toolgood/algorithm/Operand.java | 0 .../main/java/toolgood/algorithm/OperandImpl.java | 0 .../java/toolgood/algorithm/enums/AreaUnitType.java | 0 .../toolgood/algorithm/enums/CalculateTreeType.java | 0 .../toolgood/algorithm/enums/ConditionTreeType.java | 0 .../toolgood/algorithm/enums/DistanceUnitType.java | 0 .../java/toolgood/algorithm/enums/MassUnitType.java | 0 .../toolgood/algorithm/enums/NumberUnitType.java | 0 .../java/toolgood/algorithm/enums/OperandType.java | 0 .../toolgood/algorithm/enums/VolumeUnitType.java | 0 .../toolgood/algorithm/internals/CalculateTree.java | 0 .../toolgood/algorithm/internals/ConditionTree.java | 0 .../toolgood/algorithm/internals/DiyNameInfo.java | 0 .../java/toolgood/algorithm/internals/MyDate.java | 0 .../algorithm/internals/NumberUnitTypeHelper.java | 0 .../toolgood/algorithm/internals/RegexHelper.java | 0 .../algorithm/internals/functions/FunctionBase.java | 0 .../algorithm/internals/functions/FunctionUtil.java | 0 .../algorithm/internals/functions/Function_1.java | 0 .../algorithm/internals/functions/Function_2.java | 0 .../algorithm/internals/functions/Function_3.java | 0 .../algorithm/internals/functions/Function_4.java | 0 .../algorithm/internals/functions/Function_N.java | 0 .../internals/functions/compare/Function_EQ.java | 0 .../internals/functions/compare/Function_GE.java | 0 .../internals/functions/compare/Function_GT.java | 0 .../internals/functions/compare/Function_LE.java | 0 .../internals/functions/compare/Function_LT.java | 0 .../internals/functions/compare/Function_NE.java | 0 .../functions/csharp/Function_ENDSWITH.java | 0 .../internals/functions/csharp/Function_GUID.java | 0 .../internals/functions/csharp/Function_HAS.java | 0 .../functions/csharp/Function_HASVALUE.java | 0 .../functions/csharp/Function_INDEXOF.java | 0 .../functions/csharp/Function_ISREGEX.java | 0 .../internals/functions/csharp/Function_JOIN.java | 0 .../functions/csharp/Function_LASTINDEXOF.java | 0 .../functions/csharp/Function_LOOKCEILING.java | 0 .../functions/csharp/Function_LOOKFLOOR.java | 0 .../internals/functions/csharp/Function_REGEX.java | 0 .../functions/csharp/Function_REGEXREPALCE.java | 0 .../functions/csharp/Function_REMOVEEND.java | 0 .../functions/csharp/Function_REMOVESTART.java | 0 .../internals/functions/csharp/Function_SPLIT.java | 0 .../functions/csharp/Function_STARTSWITH.java | 0 .../functions/csharp/Function_SUBSTRING.java | 0 .../functions/csharp/Function_TRIMEND.java | 0 .../functions/csharp/Function_TRIMSTART.java | 0 .../functions/csharpsecurity/Function_HMACMD5.java | 0 .../functions/csharpsecurity/Function_HMACSHA1.java | 0 .../csharpsecurity/Function_HMACSHA256.java | 0 .../csharpsecurity/Function_HMACSHA512.java | 0 .../functions/csharpsecurity/Function_MD5.java | 0 .../functions/csharpsecurity/Function_SHA1.java | 0 .../functions/csharpsecurity/Function_SHA256.java | 0 .../functions/csharpsecurity/Function_SHA512.java | 0 .../internals/functions/csharpweb/Base64.java | 0 .../functions/csharpweb/Function_BASE64TOTEXT.java | 0 .../csharpweb/Function_BASE64URLTOTEXT.java | 0 .../functions/csharpweb/Function_HTMLDECODE.java | 0 .../functions/csharpweb/Function_HTMLENCODE.java | 0 .../functions/csharpweb/Function_TEXTTOBASE64.java | 0 .../csharpweb/Function_TEXTTOBASE64URL.java | 0 .../functions/csharpweb/Function_URLDECODE.java | 0 .../functions/csharpweb/Function_URLENCODE.java | 0 .../functions/datetimes/Function_ADDDAYS.java | 0 .../functions/datetimes/Function_ADDHOURS.java | 0 .../functions/datetimes/Function_ADDMINUTES.java | 0 .../functions/datetimes/Function_ADDMONTHS.java | 0 .../functions/datetimes/Function_ADDSECONDS.java | 0 .../functions/datetimes/Function_ADDYEARS.java | 0 .../functions/datetimes/Function_DATE.java | 0 .../functions/datetimes/Function_DATEDIF.java | 0 .../functions/datetimes/Function_DATEVALUE.java | 0 .../internals/functions/datetimes/Function_DAY.java | 0 .../functions/datetimes/Function_DAYS360.java | 0 .../functions/datetimes/Function_EDATE.java | 0 .../functions/datetimes/Function_EOMONTH.java | 0 .../functions/datetimes/Function_HOUR.java | 0 .../functions/datetimes/Function_MINUTE.java | 0 .../functions/datetimes/Function_MONTH.java | 0 .../functions/datetimes/Function_NETWORKDAYS.java | 0 .../internals/functions/datetimes/Function_NOW.java | 0 .../functions/datetimes/Function_SECOND.java | 0 .../functions/datetimes/Function_TIME.java | 0 .../functions/datetimes/Function_TIMESTAMP.java | 0 .../functions/datetimes/Function_TIMEVALUE.java | 0 .../functions/datetimes/Function_TODAY.java | 0 .../functions/datetimes/Function_WEEKDAY.java | 0 .../functions/datetimes/Function_WEEKNUM.java | 0 .../functions/datetimes/Function_WORKDAY.java | 0 .../functions/datetimes/Function_YEAR.java | 0 .../internals/functions/flow/Function_IF.java | 0 .../internals/functions/flow/Function_IFERROR.java | 0 .../internals/functions/flow/Function_ISERROR.java | 0 .../internals/functions/flow/Function_ISEVEN.java | 0 .../functions/flow/Function_ISLOGICAL.java | 0 .../functions/flow/Function_ISNONTEXT.java | 0 .../internals/functions/flow/Function_ISNULL.java | 0 .../functions/flow/Function_ISNULLOREMPTY.java | 0 .../functions/flow/Function_ISNULLORERROR.java | 0 .../functions/flow/Function_ISNULLORWHITESPACE.java | 0 .../internals/functions/flow/Function_ISNUMBER.java | 0 .../internals/functions/flow/Function_ISODD.java | 0 .../internals/functions/flow/Function_ISTEXT.java | 0 .../internals/functions/flow/Function_NOT.java | 0 .../internals/functions/mathbase/Function_ABS.java | 0 .../functions/mathbase/Function_CEILING.java | 0 .../functions/mathbase/Function_COMBIN.java | 0 .../internals/functions/mathbase/Function_EVEN.java | 0 .../internals/functions/mathbase/Function_EXP.java | 0 .../internals/functions/mathbase/Function_FACT.java | 0 .../functions/mathbase/Function_FACTDOUBLE.java | 0 .../functions/mathbase/Function_FIXED.java | 0 .../functions/mathbase/Function_FLOOR.java | 0 .../internals/functions/mathbase/Function_GCD.java | 0 .../internals/functions/mathbase/Function_LCM.java | 0 .../internals/functions/mathbase/Function_LN.java | 0 .../internals/functions/mathbase/Function_LOG.java | 0 .../functions/mathbase/Function_MROUND.java | 0 .../functions/mathbase/Function_MULTINOMIAL.java | 0 .../internals/functions/mathbase/Function_ODD.java | 0 .../functions/mathbase/Function_PERMUT.java | 0 .../functions/mathbase/Function_POWER.java | 0 .../functions/mathbase/Function_PRODUCT.java | 0 .../functions/mathbase/Function_Percentage.java | 0 .../functions/mathbase/Function_QUOTIENT.java | 0 .../internals/functions/mathbase/Function_RAND.java | 0 .../functions/mathbase/Function_RANDBETWEEN.java | 0 .../functions/mathbase/Function_ROUND.java | 0 .../functions/mathbase/Function_ROUNDDOWN.java | 0 .../functions/mathbase/Function_ROUNDUP.java | 0 .../internals/functions/mathbase/Function_SIGN.java | 0 .../internals/functions/mathbase/Function_SQRT.java | 0 .../functions/mathbase/Function_SQRTPI.java | 0 .../functions/mathbase/Function_TRUNC.java | 0 .../functions/mathtrigonometric/Function_ACOS.java | 0 .../functions/mathtrigonometric/Function_ACOSH.java | 0 .../functions/mathtrigonometric/Function_ASIN.java | 0 .../functions/mathtrigonometric/Function_ASINH.java | 0 .../functions/mathtrigonometric/Function_ATAN.java | 0 .../functions/mathtrigonometric/Function_ATAN2.java | 0 .../functions/mathtrigonometric/Function_ATANH.java | 0 .../functions/mathtrigonometric/Function_COS.java | 0 .../functions/mathtrigonometric/Function_COSH.java | 0 .../functions/mathtrigonometric/Function_COT.java | 0 .../functions/mathtrigonometric/Function_CSC.java | 0 .../mathtrigonometric/Function_DEGREES.java | 0 .../mathtrigonometric/Function_RADIANS.java | 0 .../functions/mathtrigonometric/Function_SEC.java | 0 .../functions/mathtrigonometric/Function_SIN.java | 0 .../functions/mathtrigonometric/Function_SINH.java | 0 .../functions/mathtrigonometric/Function_TAN.java | 0 .../functions/mathtrigonometric/Function_TANH.java | 0 .../internals/functions/operator/Function_AND.java | 0 .../functions/operator/Function_AND_N.java | 0 .../internals/functions/operator/Function_Add.java | 0 .../functions/operator/Function_Connect.java | 0 .../internals/functions/operator/Function_Div.java | 0 .../internals/functions/operator/Function_Mod.java | 0 .../internals/functions/operator/Function_Mul.java | 0 .../internals/functions/operator/Function_OR.java | 0 .../internals/functions/operator/Function_OR_N.java | 0 .../internals/functions/operator/Function_Sub.java | 0 .../internals/functions/string/Function_ASC.java | 0 .../internals/functions/string/Function_CHAR.java | 0 .../internals/functions/string/Function_CLEAN.java | 0 .../internals/functions/string/Function_CODE.java | 0 .../functions/string/Function_CONCATENATE.java | 0 .../internals/functions/string/Function_EXACT.java | 0 .../internals/functions/string/Function_FIND.java | 0 .../internals/functions/string/Function_JIS.java | 0 .../internals/functions/string/Function_LEFT.java | 0 .../internals/functions/string/Function_LEN.java | 0 .../internals/functions/string/Function_LOWER.java | 0 .../internals/functions/string/Function_MID.java | 0 .../internals/functions/string/Function_PROPER.java | 0 .../functions/string/Function_REPLACE.java | 0 .../internals/functions/string/Function_REPT.java | 0 .../internals/functions/string/Function_RIGHT.java | 0 .../internals/functions/string/Function_RMB.java | 0 .../internals/functions/string/Function_SEARCH.java | 0 .../functions/string/Function_SUBSTITUTE.java | 0 .../internals/functions/string/Function_T.java | 0 .../internals/functions/string/Function_TEXT.java | 0 .../internals/functions/string/Function_TRIM.java | 0 .../internals/functions/string/Function_UPPER.java | 0 .../internals/functions/string/Function_VALUE.java | 0 .../internals/functions/value/Function_Array.java | 0 .../functions/value/Function_ArrayJson.java | 0 .../functions/value/Function_ArrayJsonItem.java | 0 .../functions/value/Function_DiyFunction.java | 0 .../internals/functions/value/Function_ERROR.java | 0 .../functions/value/Function_GetJsonValue.java | 0 .../internals/functions/value/Function_JSON.java | 0 .../internals/functions/value/Function_NUM.java | 0 .../internals/functions/value/Function_PARAM.java | 0 .../functions/value/Function_PARAMETER.java | 0 .../internals/functions/value/Function_Value.java | 0 .../internals/visitors/AntlrCharStream.java | 0 .../algorithm/internals/visitors/CharUtil.java | 0 .../internals/visitors/DiyNameVisitor.java | 0 .../internals/visitors/MathSplitVisitor.java | 0 .../java/toolgood/algorithm/litJson/FsmContext.java | 0 .../toolgood/algorithm/litJson/IJsonWrapper.java | 0 .../java/toolgood/algorithm/litJson/JsonData.java | 0 .../toolgood/algorithm/litJson/JsonException.java | 0 .../java/toolgood/algorithm/litJson/JsonMapper.java | 0 .../java/toolgood/algorithm/litJson/JsonReader.java | 0 .../java/toolgood/algorithm/litJson/JsonToken.java | 0 .../java/toolgood/algorithm/litJson/JsonType.java | 0 .../main/java/toolgood/algorithm/litJson/Lexer.java | 0 .../toolgood/algorithm/litJson/ParserToken.java | 0 .../java/toolgood/algorithm/math/mathLexer.java | 0 .../java/toolgood/algorithm/math/mathParser.java | 0 .../java/toolgood/algorithm/math/mathVisitor.java | 0 .../java/toolgood/algorithm/mathNet/Constants.java | 0 .../algorithm/mathNet/Distributions/Beta.java | 0 .../algorithm/mathNet/Distributions/Binomial.java | 0 .../mathNet/Distributions/Exponential.java | 0 .../mathNet/Distributions/FisherSnedecor.java | 0 .../algorithm/mathNet/Distributions/Gamma.java | 0 .../mathNet/Distributions/Hypergeometric.java | 0 .../algorithm/mathNet/Distributions/LogNormal.java | 0 .../mathNet/Distributions/NegativeBinomial.java | 0 .../algorithm/mathNet/Distributions/Normal.java | 0 .../algorithm/mathNet/Distributions/Poisson.java | 0 .../algorithm/mathNet/Distributions/StudentT.java | 0 .../algorithm/mathNet/Distributions/Weibull.java | 0 .../java/toolgood/algorithm/mathNet/Evaluate.java | 0 .../toolgood/algorithm/mathNet/ExcelFunctions.java | 0 .../java/toolgood/algorithm/mathNet/Precision.java | 0 .../algorithm/mathNet/RootFinding/Brent.java | 0 .../algorithm/mathNet/RootFinding/RootNumber.java | 0 .../algorithm/mathNet/SpecialFunctions.java | 0 .../mathNet/Statistics/ArrayStatistics.java | 0 .../mathNet/Statistics/QuantileDefinition.java | 0 .../mathNet/Statistics/SortedArrayStatistics.java | 0 .../algorithm/mathNet/Statistics/Statistics.java | 0 .../algorithm/unitConversion/AreaConverter.java | 0 .../algorithm/unitConversion/BaseUnitConverter.java | 0 .../algorithm/unitConversion/DistanceConverter.java | 0 .../algorithm/unitConversion/MassConverter.java | 0 .../unitConversion/UnitFactorSynonyms.java | 0 .../algorithm/unitConversion/UnitFactors.java | 0 .../unitConversion/UnitNotSupportedException.java | 0 .../algorithm/unitConversion/VolumeConverter.java | 0 .../java/toolgood/algorithm/DemoApplication.java | 0 .../algorithm/Tests/AlgorithmEngineTest.java | 0 .../algorithm/Tests/AlgorithmEngineTest_csharp.java | 0 .../Tests/AlgorithmEngineTest_dateTime.java | 0 .../algorithm/Tests/AlgorithmEngineTest_flow.java | 0 .../algorithm/Tests/AlgorithmEngineTest_math.java | 0 .../algorithm/Tests/AlgorithmEngineTest_string.java | 0 .../algorithm/Tests/AlgorithmEngineTest_sum.java | 0 .../algorithm/Tests/AlgorithmEngineTest_v3_5.java | 0 .../Tests/AlgorithmEngineTest_vlookup.java | 0 .../java/toolgood/algorithm/Tests/Cylinder.java | 0 .../java/toolgood/algorithm/Tests/IssuesTest.java | 0 .../algorithm/Tests3/AlgorithmEngineHelperTest.java | 0 .../algorithm/Tests4/ConditionTreeTest.java | 0 269 files changed, 0 insertions(+), 0 deletions(-) rename {java1 => java}/.classpath (100%) rename {java1 => java}/.gitignore (100%) rename {java1 => java}/.project (100%) rename {java1 => java}/README-EN.md (100%) rename {java1 => java}/README.md (100%) rename {java1 => java}/build.bat (100%) rename {java1 => java}/build2.exe (100%) rename {java1 => java}/pom.xml (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/Operand.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/OperandImpl.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/enums/AreaUnitType.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/enums/MassUnitType.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/enums/NumberUnitType.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/enums/OperandType.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/CalculateTree.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/ConditionTree.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/MyDate.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/RegexHelper.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/Function_1.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/Function_2.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/Function_3.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/Function_4.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/Function_N.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/litJson/FsmContext.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/litJson/JsonData.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/litJson/JsonException.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/litJson/JsonMapper.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/litJson/JsonReader.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/litJson/JsonToken.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/litJson/JsonType.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/litJson/Lexer.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/litJson/ParserToken.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/math/mathLexer.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/math/mathParser.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/math/mathVisitor.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Constants.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Evaluate.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Precision.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java (100%) rename {java1 => java}/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/DemoApplication.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests/Cylinder.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests/IssuesTest.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java (100%) rename {java1 => java}/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java (100%) diff --git a/java1/.classpath b/java/.classpath similarity index 100% rename from java1/.classpath rename to java/.classpath diff --git a/java1/.gitignore b/java/.gitignore similarity index 100% rename from java1/.gitignore rename to java/.gitignore diff --git a/java1/.project b/java/.project similarity index 100% rename from java1/.project rename to java/.project diff --git a/java1/README-EN.md b/java/README-EN.md similarity index 100% rename from java1/README-EN.md rename to java/README-EN.md diff --git a/java1/README.md b/java/README.md similarity index 100% rename from java1/README.md rename to java/README.md diff --git a/java1/build.bat b/java/build.bat similarity index 100% rename from java1/build.bat rename to java/build.bat diff --git a/java1/build2.exe b/java/build2.exe similarity index 100% rename from java1/build2.exe rename to java/build2.exe diff --git a/java1/pom.xml b/java/pom.xml similarity index 100% rename from java1/pom.xml rename to java/pom.xml diff --git a/java1/src/main/java/toolgood/algorithm/Operand.java b/java/src/main/java/toolgood/algorithm/Operand.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/Operand.java rename to java/src/main/java/toolgood/algorithm/Operand.java diff --git a/java1/src/main/java/toolgood/algorithm/OperandImpl.java b/java/src/main/java/toolgood/algorithm/OperandImpl.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/OperandImpl.java rename to java/src/main/java/toolgood/algorithm/OperandImpl.java diff --git a/java1/src/main/java/toolgood/algorithm/enums/AreaUnitType.java b/java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/enums/AreaUnitType.java rename to java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java diff --git a/java1/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java b/java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java rename to java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java diff --git a/java1/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java b/java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java rename to java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java diff --git a/java1/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java b/java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java rename to java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java diff --git a/java1/src/main/java/toolgood/algorithm/enums/MassUnitType.java b/java/src/main/java/toolgood/algorithm/enums/MassUnitType.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/enums/MassUnitType.java rename to java/src/main/java/toolgood/algorithm/enums/MassUnitType.java diff --git a/java1/src/main/java/toolgood/algorithm/enums/NumberUnitType.java b/java/src/main/java/toolgood/algorithm/enums/NumberUnitType.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/enums/NumberUnitType.java rename to java/src/main/java/toolgood/algorithm/enums/NumberUnitType.java diff --git a/java1/src/main/java/toolgood/algorithm/enums/OperandType.java b/java/src/main/java/toolgood/algorithm/enums/OperandType.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/enums/OperandType.java rename to java/src/main/java/toolgood/algorithm/enums/OperandType.java diff --git a/java1/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java b/java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java rename to java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/CalculateTree.java b/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/CalculateTree.java rename to java/src/main/java/toolgood/algorithm/internals/CalculateTree.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/ConditionTree.java b/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/ConditionTree.java rename to java/src/main/java/toolgood/algorithm/internals/ConditionTree.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java b/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java rename to java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/MyDate.java b/java/src/main/java/toolgood/algorithm/internals/MyDate.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/MyDate.java rename to java/src/main/java/toolgood/algorithm/internals/MyDate.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java b/java/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java rename to java/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/RegexHelper.java b/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/RegexHelper.java rename to java/src/main/java/toolgood/algorithm/internals/RegexHelper.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java rename to java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java rename to java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/Function_1.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/Function_1.java rename to java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/Function_2.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/Function_2.java rename to java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/Function_3.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/Function_3.java rename to java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/Function_4.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/Function_4.java rename to java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/Function_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/Function_N.java rename to java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java rename to java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java rename to java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java rename to java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java rename to java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java rename to java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java rename to java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java rename to java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java rename to java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java rename to java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java rename to java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java rename to java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java rename to java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java rename to java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java rename to java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java rename to java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java rename to java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java rename to java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java rename to java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java rename to java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java rename to java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java rename to java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java rename to java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java rename to java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java rename to java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java rename to java/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java b/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java rename to java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java rename to java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java diff --git a/java1/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java rename to java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java diff --git a/java1/src/main/java/toolgood/algorithm/litJson/FsmContext.java b/java/src/main/java/toolgood/algorithm/litJson/FsmContext.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/litJson/FsmContext.java rename to java/src/main/java/toolgood/algorithm/litJson/FsmContext.java diff --git a/java1/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java b/java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java rename to java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java diff --git a/java1/src/main/java/toolgood/algorithm/litJson/JsonData.java b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/litJson/JsonData.java rename to java/src/main/java/toolgood/algorithm/litJson/JsonData.java diff --git a/java1/src/main/java/toolgood/algorithm/litJson/JsonException.java b/java/src/main/java/toolgood/algorithm/litJson/JsonException.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/litJson/JsonException.java rename to java/src/main/java/toolgood/algorithm/litJson/JsonException.java diff --git a/java1/src/main/java/toolgood/algorithm/litJson/JsonMapper.java b/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/litJson/JsonMapper.java rename to java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java diff --git a/java1/src/main/java/toolgood/algorithm/litJson/JsonReader.java b/java/src/main/java/toolgood/algorithm/litJson/JsonReader.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/litJson/JsonReader.java rename to java/src/main/java/toolgood/algorithm/litJson/JsonReader.java diff --git a/java1/src/main/java/toolgood/algorithm/litJson/JsonToken.java b/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/litJson/JsonToken.java rename to java/src/main/java/toolgood/algorithm/litJson/JsonToken.java diff --git a/java1/src/main/java/toolgood/algorithm/litJson/JsonType.java b/java/src/main/java/toolgood/algorithm/litJson/JsonType.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/litJson/JsonType.java rename to java/src/main/java/toolgood/algorithm/litJson/JsonType.java diff --git a/java1/src/main/java/toolgood/algorithm/litJson/Lexer.java b/java/src/main/java/toolgood/algorithm/litJson/Lexer.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/litJson/Lexer.java rename to java/src/main/java/toolgood/algorithm/litJson/Lexer.java diff --git a/java1/src/main/java/toolgood/algorithm/litJson/ParserToken.java b/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/litJson/ParserToken.java rename to java/src/main/java/toolgood/algorithm/litJson/ParserToken.java diff --git a/java1/src/main/java/toolgood/algorithm/math/mathLexer.java b/java/src/main/java/toolgood/algorithm/math/mathLexer.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/math/mathLexer.java rename to java/src/main/java/toolgood/algorithm/math/mathLexer.java diff --git a/java1/src/main/java/toolgood/algorithm/math/mathParser.java b/java/src/main/java/toolgood/algorithm/math/mathParser.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/math/mathParser.java rename to java/src/main/java/toolgood/algorithm/math/mathParser.java diff --git a/java1/src/main/java/toolgood/algorithm/math/mathVisitor.java b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/math/mathVisitor.java rename to java/src/main/java/toolgood/algorithm/math/mathVisitor.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Constants.java b/java/src/main/java/toolgood/algorithm/mathNet/Constants.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Constants.java rename to java/src/main/java/toolgood/algorithm/mathNet/Constants.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java rename to java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Evaluate.java b/java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Evaluate.java rename to java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java b/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java rename to java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Precision.java b/java/src/main/java/toolgood/algorithm/mathNet/Precision.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Precision.java rename to java/src/main/java/toolgood/algorithm/mathNet/Precision.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java rename to java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java rename to java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java b/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java rename to java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java rename to java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java rename to java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java rename to java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java diff --git a/java1/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java rename to java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java diff --git a/java1/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java rename to java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java diff --git a/java1/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java rename to java/src/main/java/toolgood/algorithm/unitConversion/BaseUnitConverter.java diff --git a/java1/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java rename to java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java diff --git a/java1/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java rename to java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java diff --git a/java1/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java b/java/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java rename to java/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java diff --git a/java1/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java b/java/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java rename to java/src/main/java/toolgood/algorithm/unitConversion/UnitFactors.java diff --git a/java1/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java b/java/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java rename to java/src/main/java/toolgood/algorithm/unitConversion/UnitNotSupportedException.java diff --git a/java1/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java similarity index 100% rename from java1/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java rename to java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java diff --git a/java1/src/test/java/toolgood/algorithm/DemoApplication.java b/java/src/test/java/toolgood/algorithm/DemoApplication.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/DemoApplication.java rename to java/src/test/java/toolgood/algorithm/DemoApplication.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java rename to java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests/Cylinder.java b/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests/Cylinder.java rename to java/src/test/java/toolgood/algorithm/Tests/Cylinder.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests/IssuesTest.java b/java/src/test/java/toolgood/algorithm/Tests/IssuesTest.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests/IssuesTest.java rename to java/src/test/java/toolgood/algorithm/Tests/IssuesTest.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java b/java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java rename to java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java diff --git a/java1/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java b/java/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java similarity index 100% rename from java1/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java rename to java/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java From f353415972e8e252daa6966768115a188426629d Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 07:07:12 +0800 Subject: [PATCH 13/98] fix --- .../main/java/toolgood/algorithm/Operand.java | 164 +++++----- .../java/toolgood/algorithm/OperandImpl.java | 292 +++++++++--------- .../internals/functions/FunctionBase.java | 22 +- .../functions/compare/Function_EQ.java | 28 +- .../functions/compare/Function_GE.java | 18 +- .../functions/compare/Function_GT.java | 18 +- .../functions/compare/Function_LE.java | 18 +- .../functions/compare/Function_LT.java | 18 +- .../functions/compare/Function_NE.java | 28 +- .../functions/datetimes/Function_ADDDAYS.java | 4 +- .../datetimes/Function_ADDHOURS.java | 4 +- .../datetimes/Function_ADDMINUTES.java | 4 +- .../datetimes/Function_ADDMONTHS.java | 4 +- .../datetimes/Function_ADDSECONDS.java | 4 +- .../datetimes/Function_ADDYEARS.java | 4 +- .../functions/datetimes/Function_DATE.java | 2 +- .../functions/datetimes/Function_DATEDIF.java | 18 +- .../datetimes/Function_DATEVALUE.java | 14 +- .../functions/datetimes/Function_DAY.java | 4 +- .../functions/datetimes/Function_DAYS360.java | 2 +- .../functions/datetimes/Function_EDATE.java | 4 +- .../functions/datetimes/Function_EOMONTH.java | 4 +- .../functions/datetimes/Function_HOUR.java | 2 +- .../functions/datetimes/Function_MINUTE.java | 2 +- .../functions/datetimes/Function_MONTH.java | 4 +- .../datetimes/Function_NETWORKDAYS.java | 2 +- .../functions/datetimes/Function_NOW.java | 2 +- .../functions/datetimes/Function_SECOND.java | 2 +- .../functions/datetimes/Function_TIME.java | 2 +- .../datetimes/Function_TIMESTAMP.java | 6 +- .../datetimes/Function_TIMEVALUE.java | 4 +- .../functions/datetimes/Function_TODAY.java | 2 +- .../functions/datetimes/Function_WEEKDAY.java | 10 +- .../functions/datetimes/Function_WEEKNUM.java | 2 +- .../functions/datetimes/Function_WORKDAY.java | 2 +- .../functions/mathsum/Function_AVEDEV.java | 48 +++ .../functions/mathsum/Function_AVERAGE.java | 44 +++ .../functions/mathsum/Function_AVERAGEIF.java | 82 +++++ .../functions/mathsum/Function_BETADIST.java | 51 +++ .../functions/mathsum/Function_BETAINV.java | 51 +++ .../functions/mathsum/Function_BINOMDIST.java | 57 ++++ .../functions/mathsum/Function_COUNT.java | 40 +++ .../functions/mathsum/Function_COUNTIF.java | 63 ++++ .../functions/mathsum/Function_COVAR.java | 59 ++++ .../mathsum/Function_COVARIANCES.java | 59 ++++ .../mathtransformation/Function_BIN2DEC.java | 35 +++ .../mathtransformation/Function_BIN2HEX.java | 48 +++ .../mathtransformation/Function_BIN2OCT.java | 48 +++ .../mathtransformation/Function_DEC2BIN.java | 43 +++ .../mathtransformation/Function_DEC2HEX.java | 43 +++ .../mathtransformation/Function_DEC2OCT.java | 43 +++ .../mathtransformation/Function_HEX2BIN.java | 48 +++ .../mathtransformation/Function_HEX2DEC.java | 35 +++ .../mathtransformation/Function_HEX2OCT.java | 48 +++ .../mathtransformation/Function_OCT2BIN.java | 48 +++ .../mathtransformation/Function_OCT2DEC.java | 35 +++ .../mathtransformation/Function_OCT2HEX.java | 48 +++ .../mathtrigonometric/Function_ACOS.java | 6 +- .../mathtrigonometric/Function_ACOSH.java | 6 +- .../mathtrigonometric/Function_ASIN.java | 6 +- .../mathtrigonometric/Function_ASINH.java | 6 +- .../mathtrigonometric/Function_ATAN.java | 6 +- .../mathtrigonometric/Function_ATAN2.java | 8 +- .../mathtrigonometric/Function_ATANH.java | 6 +- .../mathtrigonometric/Function_COS.java | 6 +- .../mathtrigonometric/Function_COSH.java | 6 +- .../mathtrigonometric/Function_COT.java | 8 +- .../mathtrigonometric/Function_CSC.java | 8 +- .../mathtrigonometric/Function_DEGREES.java | 6 +- .../mathtrigonometric/Function_RADIANS.java | 6 +- .../mathtrigonometric/Function_SEC.java | 8 +- .../mathtrigonometric/Function_SIN.java | 6 +- .../mathtrigonometric/Function_SINH.java | 6 +- .../mathtrigonometric/Function_TAN.java | 6 +- .../mathtrigonometric/Function_TANH.java | 6 +- .../functions/string/Function_TRIM.java | 2 +- .../functions/string/Function_UPPER.java | 2 +- .../functions/string/Function_VALUE.java | 4 +- .../algorithm/litJson/JsonReader.java | 2 +- .../mathNet/Distributions/Binomial.java | 2 +- .../mathNet/Distributions/Hypergeometric.java | 2 +- .../Distributions/NegativeBinomial.java | 4 +- .../mathNet/Distributions/Poisson.java | 2 +- 83 files changed, 1504 insertions(+), 428 deletions(-) create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java diff --git a/java/src/main/java/toolgood/algorithm/Operand.java b/java/src/main/java/toolgood/algorithm/Operand.java index 29620236e..beebffd6a 100644 --- a/java/src/main/java/toolgood/algorithm/Operand.java +++ b/java/src/main/java/toolgood/algorithm/Operand.java @@ -29,155 +29,155 @@ public abstract class Operand { /** * One */ - public static final Operand ONE = Operand.create(new BigDecimal("1")); + public static final Operand ONE = Operand.Create(new BigDecimal("1")); /** * Zero */ - public static final Operand ZERO = Operand.create(new BigDecimal("0")); + public static final Operand ZERO = Operand.Create(new BigDecimal("0")); /** * 是否为空值 */ - public boolean isNull() { return false; } + public boolean IsNull() { return false; } /** * 是否为非空值 */ - public boolean isNotNull() { return true; } + public boolean IsNotNull() { return true; } /** * 是否数字 */ - public boolean isNumber() { return false; } + public boolean IsNumber() { return false; } /** * 是否非数字 */ - public boolean isNotNumber() { return true; } + public boolean IsNotNumber() { return true; } /** * 是否字符串 */ - public boolean isText() { return false; } + public boolean IsText() { return false; } /** * 是否非字符串 */ - public boolean isNotText() { return true; } + public boolean IsNotText() { return true; } /** * 是否布尔值 */ - public boolean isBoolean() { return false; } + public boolean IsBoolean() { return false; } /** * 是否非布尔值 */ - public boolean isNotBoolean() { return true; } + public boolean IsNotBoolean() { return true; } /** * 是否数组 */ - public boolean isArray() { return false; } + public boolean IsArray() { return false; } /** * 是否非数组 */ - public boolean isNotArray() { return true; } + public boolean IsNotArray() { return true; } /** * 是否日期 */ - public boolean isDate() { return false; } + public boolean IsDate() { return false; } /** * 是否非日期 */ - public boolean isNotDate() { return true; } + public boolean IsNotDate() { return true; } /** * 是否Json对象 */ - public boolean isJson() { return false; } + public boolean IsJson() { return false; } /** * 是否非Json对象 */ - public boolean isNotJson() { return true; } + public boolean IsNotJson() { return true; } /** * 是否Json数组 */ - public boolean isArrayJson() { return false; } + public boolean IsArrayJson() { return false; } /** * 是否非Json数组 */ - public boolean isNotArrayJson() { return true; } + public boolean IsNotArrayJson() { return true; } /** * 是否出错 */ - public boolean isError() { return false; } + public boolean IsError() { return false; } /** * 错误信息 */ - public String getErrorMsg() { return null; } + public String ErrorMsg() { return null; } /** * 操作数类型 */ - public abstract OperandType getType(); + public abstract OperandType Type(); /** * 数字值 */ - public BigDecimal getNumberValue() { throw new UnsupportedOperationException(); } + public BigDecimal NumberValue() { throw new UnsupportedOperationException(); } /** * double值 */ - public double getDoubleValue() { throw new UnsupportedOperationException(); } + public double DoubleValue() { throw new UnsupportedOperationException(); } /** * BigDecimal值 */ - public BigDecimal getBigDecimalValue() { throw new UnsupportedOperationException(); } + public BigDecimal BigDecimalValue() { throw new UnsupportedOperationException(); } /** * int值 */ - public int getIntValue() { throw new UnsupportedOperationException(); } + public int IntValue() { throw new UnsupportedOperationException(); } /** * long值 */ - public long getLongValue() { throw new UnsupportedOperationException(); } + public long LongValue() { throw new UnsupportedOperationException(); } /** * 字符串值 */ - public String getTextValue() { throw new UnsupportedOperationException(); } + public String TextValue() { throw new UnsupportedOperationException(); } /** * 布尔值 */ - public boolean getBooleanValue() { throw new UnsupportedOperationException(); } + public boolean BooleanValue() { throw new UnsupportedOperationException(); } /** * 数组值 */ - public List getArrayValue() { throw new UnsupportedOperationException(); } + public List ArrayValue() { throw new UnsupportedOperationException(); } /** * Json值 */ - JsonData getJsonValue() { throw new UnsupportedOperationException(); } + JsonData JsonValue() { throw new UnsupportedOperationException(); } /** * 时间值 */ - public MyDate getDateValue() { throw new UnsupportedOperationException(); } + public MyDate DateValue() { throw new UnsupportedOperationException(); } /** * 创建操作数 */ - public static Operand create(boolean obj) { + public static Operand Create(boolean obj) { return obj ? TRUE : FALSE; } @@ -186,42 +186,42 @@ public static Operand create(boolean obj) { /** * 创建操作数 */ - public static Operand create(short obj) { + public static Operand Create(short obj) { return new OperandInt(obj); } /** * 创建操作数 */ - public static Operand create(int obj) { + public static Operand Create(int obj) { return new OperandInt(obj); } /** * 创建操作数 */ - public static Operand create(long obj) { + public static Operand Create(long obj) { return new OperandBigDecimal(new BigDecimal(obj)); } /** * 创建操作数 */ - public static Operand create(float obj) { + public static Operand Create(float obj) { return new OperandBigDecimal(new BigDecimal(obj)); } /** * 创建操作数 */ - public static Operand create(double obj) { + public static Operand Create(double obj) { return new OperandBigDecimal(new BigDecimal(obj)); } /** * 创建操作数 */ - public static Operand create(BigDecimal obj) { + public static Operand Create(BigDecimal obj) { return new OperandBigDecimal(obj); } @@ -230,9 +230,9 @@ public static Operand create(BigDecimal obj) { /** * 创建操作数 */ - public static Operand create(String obj) { + public static Operand Create(String obj) { if (obj == null) { - return Operand.createNull(); + return Operand.CreateNull(); } return new OperandString(obj); } @@ -240,52 +240,52 @@ public static Operand create(String obj) { /** * 创建操作数 */ - public static Operand createJson(String txt) { + public static Operand CreateJson(String txt) { if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { try { JsonData json = JsonData.parse(txt); - return Operand.create(json); + return Operand.Create(json); } catch (Exception e) { } } - return Operand.error("Convert to json error!"); + return Operand.Error("Convert to json Error!"); } /** * 创建操作数 */ - public static Operand create(MyDate obj) { + public static Operand Create(MyDate obj) { return new OperandMyDate(obj); } /** * 创建操作数 */ - public static Operand create(long timestamp) { + public static Operand Create(long timestamp) { return new OperandMyDate(new MyDate(timestamp)); } /** * 创建操作数 */ - public static Operand create(JsonData obj) { + public static Operand Create(JsonData obj) { return new OperandJson(obj); } /** * 创建操作数 */ - public static Operand create(List obj) { + public static Operand Create(List obj) { return new OperandArray(obj); } /** * 创建操作数 */ - public static Operand create(Collection obj) { + public static Operand Create(Collection obj) { List array = new ArrayList<>(); for (String item : obj) { - array.add(create(item)); + array.add(Create(item)); } return new OperandArray(array); } @@ -293,10 +293,10 @@ public static Operand create(Collection obj) { /** * 创建操作数 */ - public static Operand create(Collection obj) { + public static Operand Create(Collection obj) { List array = new ArrayList<>(); for (Double item : obj) { - array.add(create(new BigDecimal(item.toString()))); + array.add(Create(new BigDecimal(item.toString()))); } return new OperandArray(array); } @@ -304,10 +304,10 @@ public static Operand create(Collection obj) { /** * 创建操作数 */ - public static Operand create(Collection obj) { + public static Operand Create(Collection obj) { List array = new ArrayList<>(); for (BigDecimal item : obj) { - array.add(create(item)); + array.add(Create(item)); } return new OperandArray(array); } @@ -315,10 +315,10 @@ public static Operand create(Collection obj) { /** * 创建操作数 */ - public static Operand create(Collection obj) { + public static Operand Create(Collection obj) { List array = new ArrayList<>(); for (Integer item : obj) { - array.add(create(item)); + array.add(Create(item)); } return new OperandArray(array); } @@ -326,10 +326,10 @@ public static Operand create(Collection obj) { /** * 创建操作数 */ - public static Operand create(Collection obj) { + public static Operand Create(Collection obj) { List array = new ArrayList<>(); for (Boolean item : obj) { - array.add(create(item)); + array.add(Create(item)); } return new OperandArray(array); } @@ -337,21 +337,21 @@ public static Operand create(Collection obj) { /** * 创建操作数 */ - public static Operand error(String msg) { + public static Operand Error(String msg) { return new OperandError(msg); } /** * 创建操作数 */ - public static Operand error(String msg, Object... args) { + public static Operand Error(String msg, Object... args) { return new OperandError(String.format(msg, args)); } /** * 创建操作数 */ - public static Operand createNull() { + public static Operand CreateNull() { return new OperandNull(); } @@ -362,78 +362,78 @@ public static Operand createNull() { /** * 转数值类型 */ - public Operand toNumber(String errorMessage) { - return error(errorMessage != null ? errorMessage : "Convert to number error!"); + public Operand ToNumber(String errorMessage) { + return Error(errorMessage != null ? errorMessage : "Convert to number Error!"); } /** * 转数值类型 */ - public Operand toNumber(String errorMessage, Object... args) { - return error(String.format(errorMessage, args)); + public Operand ToNumber(String errorMessage, Object... args) { + return Error(String.format(errorMessage, args)); } /** * 转bool类型 */ - public Operand toBoolean(String errorMessage) { - return error(errorMessage != null ? errorMessage : "Convert to bool error!"); + public Operand ToBoolean(String errorMessage) { + return Error(errorMessage != null ? errorMessage : "Convert to bool Error!"); } /** * 转bool类型 */ - public Operand toBoolean(String errorMessage, Object... args) { - return error(String.format(errorMessage, args)); + public Operand ToBoolean(String errorMessage, Object... args) { + return Error(String.format(errorMessage, args)); } /** * 转string类型 */ - public Operand toText(String errorMessage) { - return error(errorMessage != null ? errorMessage : "Convert to string error!"); + public Operand ToText(String errorMessage) { + return Error(errorMessage != null ? errorMessage : "Convert to string Error!"); } /** * 转string类型 */ - public Operand toText(String errorMessage, Object... args) { - return error(String.format(errorMessage, args)); + public Operand ToText(String errorMessage, Object... args) { + return Error(String.format(errorMessage, args)); } /** * 转MyDate类型 */ - public Operand toMyDate(String errorMessage) { - return error(errorMessage != null ? errorMessage : "Convert to date error!"); + public Operand ToMyDate(String errorMessage) { + return Error(errorMessage != null ? errorMessage : "Convert to date Error!"); } /** * 转MyDate类型 */ - public Operand toMyDate(String errorMessage, Object... args) { - return error(String.format(errorMessage, args)); + public Operand ToMyDate(String errorMessage, Object... args) { + return Error(String.format(errorMessage, args)); } /** * 转Array类型 */ - public Operand toArray(String errorMessage) { - return error(errorMessage != null ? errorMessage : "Convert to array error!"); + public Operand ToArray(String errorMessage) { + return Error(errorMessage != null ? errorMessage : "Convert to array Error!"); } /** * 转Array类型 */ - public Operand toArray(String errorMessage, Object... args) { - return error(String.format(errorMessage, args)); + public Operand ToArray(String errorMessage, Object... args) { + return Error(String.format(errorMessage, args)); } /** * 转Json类型 */ - public Operand toJson(String errorMessage) { - return error(errorMessage != null ? errorMessage : "Convert to json error!"); + public Operand ToJson(String errorMessage) { + return Error(errorMessage != null ? errorMessage : "Convert to json Error!"); } diff --git a/java/src/main/java/toolgood/algorithm/OperandImpl.java b/java/src/main/java/toolgood/algorithm/OperandImpl.java index c173fe927..343039356 100644 --- a/java/src/main/java/toolgood/algorithm/OperandImpl.java +++ b/java/src/main/java/toolgood/algorithm/OperandImpl.java @@ -17,55 +17,55 @@ public OperandInt(int obj) { } @Override - public boolean isNumber() { return true; } + public boolean IsNumber() { return true; } @Override - public boolean isNotNumber() { return false; } + public boolean IsNotNumber() { return false; } @Override - public OperandType getType() { return OperandType.NUMBER; } + public OperandType Type() { return OperandType.NUMBER; } @Override - public int getIntValue() { return value; } + public int IntValue() { return value; } @Override - public BigDecimal getNumberValue() { return BigDecimal.valueOf(value); } + public BigDecimal NumberValue() { return BigDecimal.valueOf(value); } @Override - public long getLongValue() { return value; } + public long LongValue() { return value; } @Override - public double getDoubleValue() { return value; } + public double DoubleValue() { return value; } @Override - public BigDecimal getBigDecimalValue() { return BigDecimal.valueOf(value); } + public BigDecimal BigDecimalValue() { return BigDecimal.valueOf(value); } @Override - public Operand toNumber(String errorMessage) { return this; } + public Operand ToNumber(String errorMessage) { return this; } @Override - public Operand toNumber(String errorMessage, Object... args) { return this; } + public Operand ToNumber(String errorMessage, Object... args) { return this; } @Override - public Operand toBoolean(String errorMessage) { return getIntValue() != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage) { return IntValue() != 0 ? TRUE : FALSE; } @Override - public Operand toBoolean(String errorMessage, Object... args) { return getIntValue() != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage, Object... args) { return IntValue() != 0 ? TRUE : FALSE; } @Override - public Operand toText(String errorMessage) { return create(Integer.toString(value)); } + public Operand ToText(String errorMessage) { return Create(Integer.toString(value)); } @Override - public Operand toText(String errorMessage, Object... args) { return create(Integer.toString(value)); } + public Operand ToText(String errorMessage, Object... args) { return Create(Integer.toString(value)); } @Override - public Operand toMyDate(String errorMessage) { return create(new MyDate(value)); } + public Operand ToMyDate(String errorMessage) { return Create(new MyDate(value)); } @Override - public Operand toMyDate(String errorMessage, Object... args) { return create(new MyDate(value)); } + public Operand ToMyDate(String errorMessage, Object... args) { return Create(new MyDate(value)); } @Override - public String toString() { return getNumberValue().toString(); } + public String toString() { return NumberValue().toString(); } } class OperandBigDecimal extends Operand { @@ -76,55 +76,55 @@ public OperandBigDecimal(BigDecimal obj) { } @Override - public boolean isNumber() { return true; } + public boolean IsNumber() { return true; } @Override - public boolean isNotNumber() { return false; } + public boolean IsNotNumber() { return false; } @Override - public OperandType getType() { return OperandType.NUMBER; } + public OperandType Type() { return OperandType.NUMBER; } @Override - public int getIntValue() { return value.intValue(); } + public int IntValue() { return value.intValue(); } @Override - public BigDecimal getNumberValue() { return value; } + public BigDecimal NumberValue() { return value; } @Override - public long getLongValue() { return value.longValue(); } + public long LongValue() { return value.longValue(); } @Override - public double getDoubleValue() { return value.doubleValue(); } + public double DoubleValue() { return value.doubleValue(); } @Override - public BigDecimal getBigDecimalValue() { return value; } + public BigDecimal BigDecimalValue() { return value; } @Override - public Operand toNumber(String errorMessage) { return this; } + public Operand ToNumber(String errorMessage) { return this; } @Override - public Operand toNumber(String errorMessage, Object... args) { return this; } + public Operand ToNumber(String errorMessage, Object... args) { return this; } @Override - public Operand toBoolean(String errorMessage) { return value.compareTo(BigDecimal.ZERO) != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage) { return value.compareTo(BigDecimal.ZERO) != 0 ? TRUE : FALSE; } @Override - public Operand toBoolean(String errorMessage, Object... args) { return value.compareTo(BigDecimal.ZERO) != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage, Object... args) { return value.compareTo(BigDecimal.ZERO) != 0 ? TRUE : FALSE; } @Override - public Operand toText(String errorMessage) { return create(value.toString()); } + public Operand ToText(String errorMessage) { return Create(value.toString()); } @Override - public Operand toText(String errorMessage, Object... args) { return create(value.toString()); } + public Operand ToText(String errorMessage, Object... args) { return Create(value.toString()); } @Override - public Operand toMyDate(String errorMessage) { return create(new MyDate(value.longValue())); } + public Operand ToMyDate(String errorMessage) { return Create(new MyDate(value.longValue())); } @Override - public Operand toMyDate(String errorMessage, Object... args) { return create(new MyDate(value.longValue())); } + public Operand ToMyDate(String errorMessage, Object... args) { return Create(new MyDate(value.longValue())); } @Override - public String toString() { return getNumberValue().toString(); } + public String toString() { return NumberValue().toString(); } } @@ -137,34 +137,34 @@ public OperandBoolean(boolean obj) { } @Override - public boolean isBoolean() { return true; } + public boolean IsBoolean() { return true; } @Override - public boolean isNotBoolean() { return false; } + public boolean IsNotBoolean() { return false; } @Override - public OperandType getType() { return OperandType.BOOLEAN; } + public OperandType Type() { return OperandType.BOOLEAN; } @Override - public boolean getBooleanValue() { return value; } + public boolean BooleanValue() { return value; } @Override - public Operand toNumber(String errorMessage) { return value ? ONE : ZERO; } + public Operand ToNumber(String errorMessage) { return value ? ONE : ZERO; } @Override - public Operand toNumber(String errorMessage, Object... args) { return value ? ONE : ZERO; } + public Operand ToNumber(String errorMessage, Object... args) { return value ? ONE : ZERO; } @Override - public Operand toBoolean(String errorMessage) { return this; } + public Operand ToBoolean(String errorMessage) { return this; } @Override - public Operand toBoolean(String errorMessage, Object... args) { return this; } + public Operand ToBoolean(String errorMessage, Object... args) { return this; } @Override - public Operand toText(String errorMessage) { return create(value ? "TRUE" : "FALSE"); } + public Operand ToText(String errorMessage) { return Create(value ? "TRUE" : "FALSE"); } @Override - public Operand toText(String errorMessage, Object... args) { return create(value ? "TRUE" : "FALSE"); } + public Operand ToText(String errorMessage, Object... args) { return Create(value ? "TRUE" : "FALSE"); } @Override public String toString() { return value ? "true" : "false"; } @@ -178,22 +178,22 @@ public OperandString(String obj) { } @Override - public boolean isText() { return true; } + public boolean IsText() { return true; } @Override - public boolean isNotText() { return false; } + public boolean IsNotText() { return false; } @Override - public OperandType getType() { return OperandType.TEXT; } + public OperandType Type() { return OperandType.TEXT; } @Override - public String getTextValue() { return value; } + public String TextValue() { return value; } @Override - public Operand toNumber(String errorMessage) { + public Operand ToNumber(String errorMessage) { try { BigDecimal bd = new BigDecimal(value); - return Operand.create(bd); + return Operand.Create(bd); } catch (NumberFormatException e) { if (errorMessage == null) { return error("Convert to number error!"); @@ -203,10 +203,10 @@ public Operand toNumber(String errorMessage) { } @Override - public Operand toNumber(String errorMessage, Object... args) { + public Operand ToNumber(String errorMessage, Object... args) { try { BigDecimal bd = new BigDecimal(value); - return Operand.create(bd); + return Operand.Create(bd); } catch (NumberFormatException e) { if (errorMessage == null) { return error("Convert to number error!"); @@ -216,13 +216,13 @@ public Operand toNumber(String errorMessage, Object... args) { } @Override - public Operand toText(String errorMessage) { return this; } + public Operand ToText(String errorMessage) { return this; } @Override - public Operand toText(String errorMessage, Object... args) { return this; } + public Operand ToText(String errorMessage, Object... args) { return this; } @Override - public Operand toBoolean(String errorMessage) { + public Operand ToBoolean(String errorMessage) { FunctionUtil.BooleanHolder boolHolder = new FunctionUtil.BooleanHolder(); if (FunctionUtil.tryParseBoolean(value, boolHolder)) { return boolHolder.value ? Operand.TRUE : Operand.FALSE; @@ -234,7 +234,7 @@ public Operand toBoolean(String errorMessage) { } @Override - public Operand toBoolean(String errorMessage, Object... args) { + public Operand ToBoolean(String errorMessage, Object... args) { FunctionUtil.BooleanHolder boolHolder = new FunctionUtil.BooleanHolder(); if (FunctionUtil.tryParseBoolean(value, boolHolder)) { return boolHolder.value ? Operand.TRUE : Operand.FALSE; @@ -246,16 +246,16 @@ public Operand toBoolean(String errorMessage, Object... args) { } @Override - public Operand toMyDate(String errorMessage) { + public Operand ToMyDate(String errorMessage) { try { // 尝试解析为时间戳 long timestamp = Long.parseLong(value); - return create(new MyDate(timestamp)); + return Create(new MyDate(timestamp)); } catch (NumberFormatException e) { // 尝试解析为日期字符串 try { MyDate date = MyDate.parse(value); - return create(date); + return Create(date); } catch (Exception ex) { if (errorMessage == null) { return error("Convert to date error!"); @@ -266,16 +266,16 @@ public Operand toMyDate(String errorMessage) { } @Override - public Operand toMyDate(String errorMessage, Object... args) { + public Operand ToMyDate(String errorMessage, Object... args) { try { // 尝试解析为时间戳 long timestamp = Long.parseLong(value); - return create(new MyDate(timestamp)); + return Create(new MyDate(timestamp)); } catch (NumberFormatException e) { // 尝试解析为日期字符串 try { MyDate date = MyDate.parse(value); - return create(date); + return Create(date); } catch (Exception ex) { if (errorMessage == null) { return error("Convert to date error!"); @@ -286,17 +286,17 @@ public Operand toMyDate(String errorMessage, Object... args) { } @Override - public Operand toArray(String errorMessage) { + public Operand ToArray(String errorMessage) { return error(errorMessage != null ? errorMessage : "Convert to array error!"); } @Override - public Operand toJson(String errorMessage) { + public Operand ToJson(String errorMessage) { String txt = value.trim(); if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { try { JsonData json = JsonData.parse(txt); - return Operand.create(json); + return Operand.Create(json); } catch (Exception e) { } } @@ -354,40 +354,40 @@ public OperandMyDate(MyDate obj) { } @Override - public boolean isDate() { return true; } + public boolean IsDate() { return true; } @Override - public boolean isNotDate() { return false; } + public boolean IsNotDate() { return false; } @Override - public OperandType getType() { return OperandType.DATE; } + public OperandType Type() { return OperandType.DATE; } @Override - public MyDate getDateValue() { return value; } + public MyDate DateValue() { return value; } @Override - public Operand toNumber(String errorMessage) { return create(value.toTimestamp()); } + public Operand ToNumber(String errorMessage) { return Create(value.toTimestamp()); } @Override - public Operand toNumber(String errorMessage, Object... args) { return create(value.toTimestamp()); } + public Operand ToNumber(String errorMessage, Object... args) { return Create(value.toTimestamp()); } @Override - public Operand toBoolean(String errorMessage) { return value.toTimestamp() != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage) { return value.toTimestamp() != 0 ? TRUE : FALSE; } @Override - public Operand toBoolean(String errorMessage, Object... args) { return value.toTimestamp() != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage, Object... args) { return value.toTimestamp() != 0 ? TRUE : FALSE; } @Override - public Operand toText(String errorMessage) { return create(value.toString()); } + public Operand ToText(String errorMessage) { return Create(value.toString()); } @Override - public Operand toText(String errorMessage, Object... args) { return create(value.toString()); } + public Operand ToText(String errorMessage, Object... args) { return Create(value.toString()); } @Override - public Operand toMyDate(String errorMessage) { return this; } + public Operand ToMyDate(String errorMessage) { return this; } @Override - public Operand toMyDate(String errorMessage, Object... args) { return this; } + public Operand ToMyDate(String errorMessage, Object... args) { return this; } @Override public String toString() { return '"' + value.toString() + '"'; } @@ -401,73 +401,73 @@ public OperandJson(JsonData obj) { } @Override - public boolean isJson() { return true; } + public boolean IsJson() { return true; } @Override - public boolean isNotJson() { return false; } + public boolean IsNotJson() { return false; } @Override - public OperandType getType() { return OperandType.JSON; } + public OperandType Type() { return OperandType.JSON; } @Override - JsonData getJsonValue() { return value; } + JsonData JsonValue() { return value; } @Override - public Operand toText(String errorMessage) { - return create(value.toString()); + public Operand ToText(String errorMessage) { + return Create(value.toString()); } @Override - public Operand toText(String errorMessage, Object... args) { - return create(value.toString()); + public Operand ToText(String errorMessage, Object... args) { + return Create(value.toString()); } @Override - public Operand toArray(String errorMessage) { + public Operand ToArray(String errorMessage) { if (value.isArray()) { List list = new ArrayList<>(); for (JsonData v : value.getArray()) { if (v.isString()) { - list.add(Operand.create(v.getString())); + list.add(Operand.Create(v.getString())); } else if (v.isBoolean()) { - list.add(Operand.create(v.getBoolean())); + list.add(Operand.Create(v.getBoolean())); } else if (v.isNumber()) { - list.add(Operand.create(new BigDecimal(v.getNumber().toString()))); + list.add(Operand.Create(new BigDecimal(v.getNumber().toString()))); } else if (v.isNull()) { - list.add(Operand.createNull()); + list.add(Operand.CreateNull()); } else { - list.add(Operand.create(v)); + list.add(Operand.Create(v)); } } - return Operand.create(list); + return Operand.Create(list); } return error(errorMessage != null ? errorMessage : "Convert to array error!"); } @Override - public Operand toArray(String errorMessage, Object... args) { + public Operand ToArray(String errorMessage, Object... args) { if (value.isArray()) { List list = new ArrayList<>(); for (JsonData v : value.getArray()) { if (v.isString()) { - list.add(Operand.create(v.getString())); + list.add(Operand.Create(v.getString())); } else if (v.isBoolean()) { - list.add(Operand.create(v.getBoolean())); + list.add(Operand.Create(v.getBoolean())); } else if (v.isNumber()) { - list.add(Operand.create(new BigDecimal(v.getNumber().toString()))); + list.add(Operand.Create(new BigDecimal(v.getNumber().toString()))); } else if (v.isNull()) { - list.add(Operand.createNull()); + list.add(Operand.CreateNull()); } else { - list.add(Operand.create(v)); + list.add(Operand.Create(v)); } } - return Operand.create(list); + return Operand.Create(list); } return error(String.format(errorMessage, args)); } @Override - public Operand toJson(String errorMessage) { + public Operand ToJson(String errorMessage) { return this; } @@ -485,39 +485,39 @@ public OperandArray(List obj) { } @Override - public boolean isArray() { return true; } + public boolean IsArray() { return true; } @Override - public boolean isNotArray() { return false; } + public boolean IsNotArray() { return false; } @Override - public OperandType getType() { return OperandType.ARRARY; } + public OperandType Type() { return OperandType.ARRARY; } @Override - public List getArrayValue() { return value; } + public List ArrayValue() { return value; } @Override - public Operand toText(String errorMessage) { - return create(this.toString()); + public Operand ToText(String errorMessage) { + return Create(this.toString()); } @Override - public Operand toText(String errorMessage, Object... args) { - return create(this.toString()); + public Operand ToText(String errorMessage, Object... args) { + return Create(this.toString()); } @Override - public Operand toArray(String errorMessage) { return this; } + public Operand ToArray(String errorMessage) { return this; } @Override - public Operand toArray(String errorMessage, Object... args) { return this; } + public Operand ToArray(String errorMessage, Object... args) { return this; } @Override - public Operand toJson(String errorMessage) { + public Operand ToJson(String errorMessage) { String txt = this.toString(); try { JsonData json = JsonData.parse(txt); - return Operand.create(json); + return Operand.Create(json); } catch (Exception e) { return error(errorMessage != null ? errorMessage : "Convert to json error!"); } @@ -546,54 +546,54 @@ public OperandError(String msg) { } @Override - public OperandType getType() { return OperandType.ERROR; } + public OperandType Type() { return OperandType.ERROR; } @Override - public boolean isError() { return true; } + public boolean IsError() { return true; } @Override - public String getErrorMsg() { return errorMsg; } + public String ErrorMsg() { return errorMsg; } @Override - public Operand toNumber(String errorMessage) { return this; } + public Operand ToNumber(String errorMessage) { return this; } @Override - public Operand toNumber(String errorMessage, Object... args) { return this; } + public Operand ToNumber(String errorMessage, Object... args) { return this; } @Override - public Operand toBoolean(String errorMessage) { return this; } + public Operand ToBoolean(String errorMessage) { return this; } @Override - public Operand toBoolean(String errorMessage, Object... args) { return this; } + public Operand ToBoolean(String errorMessage, Object... args) { return this; } @Override - public Operand toText(String errorMessage) { return this; } + public Operand ToText(String errorMessage) { return this; } @Override - public Operand toText(String errorMessage, Object... args) { return this; } + public Operand ToText(String errorMessage, Object... args) { return this; } @Override - public Operand toArray(String errorMessage) { return this; } + public Operand ToArray(String errorMessage) { return this; } @Override - public Operand toArray(String errorMessage, Object... args) { return this; } + public Operand ToArray(String errorMessage, Object... args) { return this; } @Override - public Operand toMyDate(String errorMessage) { return this; } + public Operand ToMyDate(String errorMessage) { return this; } @Override - public Operand toMyDate(String errorMessage, Object... args) { return this; } + public Operand ToMyDate(String errorMessage, Object... args) { return this; } } class OperandNull extends Operand { @Override - public boolean isNull() { return true; } + public boolean IsNull() { return true; } @Override - public boolean isNotNull() { return false; } + public boolean IsNotNull() { return false; } @Override - public OperandType getType() { return OperandType.NULL; } + public OperandType Type() { return OperandType.NULL; } @Override public String toString() { return "null"; } @@ -612,16 +612,16 @@ public OperandKeyValueList() { } @Override - public boolean isArrayJson() { return true; } + public boolean IsArrayJson() { return true; } @Override - public boolean isNotArrayJson() { return false; } + public boolean IsNotArrayJson() { return false; } @Override - public OperandType getType() { return OperandType.ARRARYJSON; } + public OperandType Type() { return OperandType.ARRARYJSON; } @Override - public List getArrayValue() { + public List ArrayValue() { List result = new ArrayList<>(); for (KeyValue kv : textList) { result.add(kv.value); @@ -630,31 +630,31 @@ public List getArrayValue() { } @Override - public Operand toText(String errorMessage) { - return create(this.toString()); + public Operand ToText(String errorMessage) { + return Create(this.toString()); } @Override - public Operand toText(String errorMessage, Object... args) { - return create(this.toString()); + public Operand ToText(String errorMessage, Object... args) { + return Create(this.toString()); } @Override - public Operand toArray(String errorMessage) { - return create(this.getArrayValue()); + public Operand ToArray(String errorMessage) { + return Create(this.getArrayValue()); } @Override - public Operand toArray(String errorMessage, Object... args) { - return create(this.getArrayValue()); + public Operand ToArray(String errorMessage, Object... args) { + return Create(this.getArrayValue()); } @Override - public Operand toJson(String errorMessage) { + public Operand ToJson(String errorMessage) { String txt = this.toString(); try { JsonData json = JsonData.parse(txt); - return Operand.create(json); + return Operand.Create(json); } catch (Exception e) { return error(errorMessage != null ? errorMessage : "Convert to json error!"); } @@ -725,15 +725,15 @@ public OperandKeyValue(KeyValue obj) { } @Override - public boolean isArrayJson() { return true; } + public boolean IsArrayJson() { return true; } @Override - public boolean isNotArrayJson() { return false; } + public boolean IsNotArrayJson() { return false; } @Override - public OperandType getType() { return OperandType.ARRARYJSON; } + public OperandType Type() { return OperandType.ARRARYJSON; } - public KeyValue getValue() { return value; } + public KeyValue Value() { return value; } } #endregion diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index 2163d6e35..1fd6e6cc6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -1,8 +1,8 @@ /** * Represents the base class for all function implementations that can be calculated by an algorithm engine. *

- * This abstract class defines a contract for functions that can be evaluated within the context - * of an algorithm engine. Derived classes must implement the {@link #evaluate} method to provide specific + * This abstract class defines a contract for functions that can be Evaluated within the context + * of an algorithm engine. Derived classes must implement the {@link #Evaluate} method to provide specific * function logic. */ package toolgood.algorithm.internals.functions; @@ -21,7 +21,7 @@ public abstract class FunctionBase { * @param tempParameter 临时参数,未找到返回null * @return */ - public abstract Operand evaluate(AlgorithmEngine work, Function tempParameter); + public abstract Operand Evaluate(AlgorithmEngine work, Function tempParameter); //region TryEvaluate @@ -35,7 +35,7 @@ public abstract class FunctionBase { */ public short tryEvaluate(AlgorithmEngine work, short def, Function tempParameter) { try { - Operand obj = this.evaluate(work, tempParameter); + Operand obj = this.Evaluate(work, tempParameter); if (!obj.isNumber()) { obj = obj.toNumber("It can't be converted to number!"); if (obj.isError()) { @@ -60,7 +60,7 @@ public short tryEvaluate(AlgorithmEngine work, short def, Function tempParameter) { try { - Operand obj = this.evaluate(work, tempParameter); + Operand obj = this.Evaluate(work, tempParameter); if (!obj.isNumber()) { obj = obj.toNumber("It can't be converted to number!"); if (obj.isError()) { @@ -85,7 +85,7 @@ public int tryEvaluate(AlgorithmEngine work, int def, Function tempParameter) { try { - Operand obj = this.evaluate(work, tempParameter); + Operand obj = this.Evaluate(work, tempParameter); if (!obj.isNumber()) { obj = obj.toNumber("It can't be converted to number!"); if (obj.isError()) { @@ -110,7 +110,7 @@ public long tryEvaluate(AlgorithmEngine work, long def, Function tempParameter) { try { - Operand obj = this.evaluate(work, tempParameter); + Operand obj = this.Evaluate(work, tempParameter); if (!obj.isNumber()) { obj = obj.toNumber("It can't be converted to number!"); if (obj.isError()) { @@ -135,7 +135,7 @@ public float tryEvaluate(AlgorithmEngine work, float def, Function tempParameter) { try { - Operand obj = this.evaluate(work, tempParameter); + Operand obj = this.Evaluate(work, tempParameter); if (!obj.isNumber()) { obj = obj.toNumber("It can't be converted to number!"); if (obj.isError()) { @@ -160,7 +160,7 @@ public double tryEvaluate(AlgorithmEngine work, double def, Function tempParameter) { try { - Operand obj = this.evaluate(work, tempParameter); + Operand obj = this.Evaluate(work, tempParameter); if (!obj.isText()) { obj = obj.toText("It can't be converted to string!"); if (obj.isError()) { @@ -185,7 +185,7 @@ public String tryEvaluate(AlgorithmEngine work, String def, Function tempParameter) { try { - Operand obj = this.evaluate(work, tempParameter); + Operand obj = this.Evaluate(work, tempParameter); if (!obj.isBoolean()) { obj = obj.toBoolean("It can't be converted to bool!"); if (obj.isError()) { @@ -211,7 +211,7 @@ public boolean tryEvaluate(AlgorithmEngine work, boolean def, Function tempParameter) { try { - Operand obj = this.evaluate(work, tempParameter); + Operand obj = this.Evaluate(work, tempParameter); if (!obj.isDate()) { obj = obj.toMyDate("It can't be converted to DateTime!"); if (obj.isError()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java index 525d0309f..aa8884ffa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java @@ -11,29 +11,29 @@ public Function_EQ(FunctionBase func1, FunctionBase func2) { } @Override - public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); if(args1.isError()) { return args1; } - Operand args2 = func2.evaluate(work, tempParameter); if(args2.isError()) { return args2; } + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if(args1.isError()) { return args1; } + Operand args2 = func2.Evaluate(work, tempParameter); if(args2.isError()) { return args2; } if(args1.getType() == args2.getType()) { if(args1.isNumber()) { - return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) == 0); + return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) == 0); } else if(args1.isText()) { - return Operand.create(args1.getTextValue().equals(args2.getTextValue())); + return Operand.Create(args1.getTextValue().equals(args2.getTextValue())); } else if(args1.isBoolean()) { - return Operand.create(args1.getBooleanValue() == args2.getBooleanValue()); + return Operand.Create(args1.getBooleanValue() == args2.getBooleanValue()); } else if(args1.isDate()) { args1 = args1.toNumber(null); args2 = args2.toNumber(null); - return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) == 0); + return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) == 0); } else if(args1.isJson()) { args1 = args1.toText(null); args2 = args2.toText(null); - return Operand.create(args1.getTextValue().equals(args2.getTextValue())); + return Operand.Create(args1.getTextValue().equals(args2.getTextValue())); } else if(args1.isNull()) { return Operand.TRUE; } else { - return Operand.error("Function '{0}' compare is error.", "=="); + return Operand.Error("Function '{0}' compare is error.", "=="); } } else if(args1.isNull() || args2.isNull()) { return Operand.FALSE; @@ -44,20 +44,20 @@ public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); if(args1.isError()) { return args1; } - Operand args2 = func2.evaluate(work, tempParameter); if(args2.isError()) { return args2; } + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if(args1.isError()) { return args1; } + Operand args2 = func2.Evaluate(work, tempParameter); if(args2.isError()) { return args2; } if(args1.getType() == args2.getType()) { if(args1.isNumber()) { - return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); + return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); } else if(args1.isText()) { int r = args1.getTextValue().compareTo(args2.getTextValue()); return r >= 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isDate() || args1.isBoolean()) { args1 = args1.toNumber(null); args2 = args2.toNumber(null); - return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); + return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); } else if(args1.isJson()) { args1 = args1.toText(null); args2 = args2.toText(null); @@ -33,7 +33,7 @@ public Operand evaluate(AlgorithmEngine work, java.util.function.Function="); + return Operand.Error("Function '{0}' compare is error.", ">="); } } else if(args1.isNull() || args2.isNull()) { return Operand.FALSE; @@ -51,15 +51,15 @@ public Operand evaluate(AlgorithmEngine work, java.util.function.Function= 0 ? Operand.TRUE : Operand.FALSE; } else { - return Operand.error("Function '{0}' compare is error.", ">="); + return Operand.Error("Function '{0}' compare is error.", ">="); } } else if(args1.isJson() || args2.isJson() || args1.isArray() || args2.isArray() || args1.isArrayJson() || args2.isArrayJson()) { - return Operand.error("Function '{0}' compare is error.", ">="); + return Operand.Error("Function '{0}' compare is error.", ">="); } if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", ">=", 1); if(args1.isError()) { return args1; } } if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", ">=", 2); if(args2.isError()) { return args2; } } - return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); + return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java index 492e00794..d999a58f9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java @@ -11,20 +11,20 @@ public Function_GT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); if(args1.isError()) { return args1; } - Operand args2 = func2.evaluate(work, tempParameter); if(args2.isError()) { return args2; } + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if(args1.isError()) { return args1; } + Operand args2 = func2.Evaluate(work, tempParameter); if(args2.isError()) { return args2; } if(args1.getType() == args2.getType()) { if(args1.isNumber()) { - return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); + return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); } else if(args1.isText()) { int r = args1.getTextValue().compareTo(args2.getTextValue()); return r > 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isDate() || args1.isBoolean()) { args1 = args1.toNumber(null); args2 = args2.toNumber(null); - return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); + return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); } else if(args1.isJson()) { args1 = args1.toText(null); args2 = args2.toText(null); @@ -33,7 +33,7 @@ public Operand evaluate(AlgorithmEngine work, java.util.function.Function"); + return Operand.Error("Function '{0}' compare is error.", ">"); } } else if(args1.isNull() || args2.isNull()) { return Operand.FALSE; @@ -51,15 +51,15 @@ public Operand evaluate(AlgorithmEngine work, java.util.function.Function 0 ? Operand.TRUE : Operand.FALSE; } else { - return Operand.error("Function '{0}' compare is error.", ">"); + return Operand.Error("Function '{0}' compare is error.", ">"); } } else if(args1.isJson() || args2.isJson() || args1.isArray() || args2.isArray() || args1.isArrayJson() || args2.isArrayJson()) { - return Operand.error("Function '{0}' compare is error.", ">"); + return Operand.Error("Function '{0}' compare is error.", ">"); } if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", ">", 1); if(args1.isError()) { return args1; } } if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", ">", 2); if(args2.isError()) { return args2; } } - return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); + return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java index b63bf2cd9..86558d1f5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java @@ -11,20 +11,20 @@ public Function_LE(FunctionBase func1, FunctionBase func2) { } @Override - public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); if(args1.isError()) { return args1; } - Operand args2 = func2.evaluate(work, tempParameter); if(args2.isError()) { return args2; } + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if(args1.isError()) { return args1; } + Operand args2 = func2.Evaluate(work, tempParameter); if(args2.isError()) { return args2; } if(args1.getType() == args2.getType()) { if(args1.isNumber()) { - return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) <= 0); + return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) <= 0); } else if(args1.isText()) { int r = args1.getTextValue().compareTo(args2.getTextValue()); return r <= 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isDate() || args1.isBoolean()) { args1 = args1.toNumber(null); args2 = args2.toNumber(null); - return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) <= 0); + return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) <= 0); } else if(args1.isJson()) { args1 = args1.toText(null); args2 = args2.toText(null); @@ -33,7 +33,7 @@ public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); if(args1.isError()) { return args1; } - Operand args2 = func2.evaluate(work, tempParameter); if(args2.isError()) { return args2; } + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if(args1.isError()) { return args1; } + Operand args2 = func2.Evaluate(work, tempParameter); if(args2.isError()) { return args2; } if(args1.getType() == args2.getType()) { if(args1.isNumber()) { - return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) != 0); + return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) != 0); } else if(args1.isText()) { - return Operand.create(!args1.getTextValue().equals(args2.getTextValue())); + return Operand.Create(!args1.getTextValue().equals(args2.getTextValue())); } else if(args1.isBoolean()) { - return Operand.create(args1.getBooleanValue() != args2.getBooleanValue()); + return Operand.Create(args1.getBooleanValue() != args2.getBooleanValue()); } else if(args1.isDate()) { args1 = args1.toNumber(null); args2 = args2.toNumber(null); - return Operand.create(args1.getNumberValue().compareTo(args2.getNumberValue()) != 0); + return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) != 0); } else if(args1.isJson()) { args1 = args1.toText(null); args2 = args2.toText(null); - return Operand.create(!args1.getTextValue().equals(args2.getTextValue())); + return Operand.Create(!args1.getTextValue().equals(args2.getTextValue())); } else if(args1.isNull()) { return Operand.FALSE; } else { - return Operand.error("Function '{0}' compare is error.", "!="); + return Operand.Error("Function '{0}' compare is error.", "!="); } } else if(args1.isNull() || args2.isNull()) { return Operand.TRUE; @@ -44,20 +44,20 @@ public Operand evaluate(AlgorithmEngine work, java.util.function.Function tempPara toolgood.algorithm.internals.MyDate date = args1.getDateValue(); int hours = args2.getIntValue(); toolgood.algorithm.internals.MyDate result = date.AddHours(hours); - return Operand.create(result); + return Operand.Create(result); } catch (Exception e) { // 捕获所有异常 } - return Operand.error("Function '{0}' is error!", "AddHours"); + return Operand.Error("Function '{0}' is error!", "AddHours"); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java index 8d9bb0080..f1a5110dd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java @@ -32,11 +32,11 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara toolgood.algorithm.internals.MyDate date = args1.getDateValue(); int minutes = args2.getIntValue(); toolgood.algorithm.internals.MyDate result = date.AddMinutes(minutes); - return Operand.create(result); + return Operand.Create(result); } catch (Exception e) { // 捕获所有异常 } - return Operand.error("Function '{0}' is error!", "AddMinutes"); + return Operand.Error("Function '{0}' is error!", "AddMinutes"); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java index ac3a5f23b..5431c2c8e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java @@ -32,11 +32,11 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara toolgood.algorithm.internals.MyDate date = args1.getDateValue(); int months = args2.getIntValue(); toolgood.algorithm.internals.MyDate result = date.AddMonths(months); - return Operand.create(result); + return Operand.Create(result); } catch (Exception e) { // 捕获所有异常 } - return Operand.error("Function '{0}' is error!", "AddMonths"); + return Operand.Error("Function '{0}' is error!", "AddMonths"); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java index 680de86e1..28e58556e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java @@ -32,11 +32,11 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara toolgood.algorithm.internals.MyDate date = args1.getDateValue(); int seconds = args2.getIntValue(); toolgood.algorithm.internals.MyDate result = date.AddSeconds(seconds); - return Operand.create(result); + return Operand.Create(result); } catch (Exception e) { // 捕获所有异常 } - return Operand.error("Function '{0}' is error!", "AddSeconds"); + return Operand.Error("Function '{0}' is error!", "AddSeconds"); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java index 981870f09..993a79fa6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java @@ -32,11 +32,11 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara toolgood.algorithm.internals.MyDate date = args1.getDateValue(); int years = args2.getIntValue(); toolgood.algorithm.internals.MyDate result = date.AddYears(years); - return Operand.create(result); + return Operand.Create(result); } catch (Exception e) { // 捕获所有异常 } - return Operand.error("Function '{0}' is error!", "AddYears"); + return Operand.Error("Function '{0}' is error!", "AddYears"); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java index 6ac882035..5fdf63c75 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java @@ -88,7 +88,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } d = new toolgood.algorithm.internals.MyDate(args1.getIntValue(), args2.getIntValue(), args3.getIntValue(), args4.getIntValue(), args5.getIntValue(), args6.getIntValue()); } - return Operand.create(d); + return Operand.Create(d); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java index 499a5a483..3f03ccbf9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java @@ -48,24 +48,24 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (startMyDate.Day <= endMyDate.Day) b = true; } if (b) { - return Operand.create(endMyDate.Year - startMyDate.Year); + return Operand.Create(endMyDate.Year - startMyDate.Year); } else { - return Operand.create(endMyDate.Year - startMyDate.Year - 1); + return Operand.Create(endMyDate.Year - startMyDate.Year - 1); } } else if (t.equals("m")) { // 计算月差 boolean b = false; if (startMyDate.Day <= endMyDate.Day) b = true; if (b) { - return Operand.create(endMyDate.Year * 12 + endMyDate.Month - startMyDate.Year * 12 - startMyDate.Month); + return Operand.Create(endMyDate.Year * 12 + endMyDate.Month - startMyDate.Year * 12 - startMyDate.Month); } else { - return Operand.create(endMyDate.Year * 12 + endMyDate.Month - startMyDate.Year * 12 - startMyDate.Month - 1); + return Operand.Create(endMyDate.Year * 12 + endMyDate.Month - startMyDate.Year * 12 - startMyDate.Month - 1); } } else if (t.equals("d")) { // 计算日差 long days = endMyDate.ToDateTime().getMillis() - startMyDate.ToDateTime().getMillis(); days = days / (1000 * 60 * 60 * 24); - return Operand.create((int) days); + return Operand.Create((int) days); } else if (t.equals("yd")) { // 计算年内日差 int startDayOfYear = startMyDate.DayOfYear(); @@ -76,7 +76,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara int days = startMyDate.ToDateTime().dayOfYear().withMaximumValue().getDayOfYear(); day = days + day; } - return Operand.create(day); + return Operand.Create(day); } else if (t.equals("md")) { // 计算月内日差 int mo = endMyDate.Day - startMyDate.Day; @@ -89,15 +89,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } mo += days; } - return Operand.create(mo); + return Operand.Create(mo); } else if (t.equals("ym")) { // 计算年内地差 int mo = endMyDate.Month - startMyDate.Month; if (endMyDate.Day < startMyDate.Day) mo--; if (mo < 0) mo += 12; - return Operand.create(mo); + return Operand.Create(mo); } - return Operand.error("Function '{0}' parameter {1} is error!", "DateDif", 3); + return Operand.Error("Function '{0}' parameter {1} is error!", "DateDif", 3); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java index 00758a43c..b9fdd1a47 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java @@ -39,7 +39,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (args.get(0).isText()) { toolgood.algorithm.internals.MyDate date = toolgood.algorithm.internals.MyDate.parse(args.get(0).getTextValue()); if (date != null) { - return Operand.create(date); + return Operand.Create(date); } } Operand args1 = args.get(0).toNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); @@ -49,11 +49,11 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (args1.getLongValue() <= 253402232399L) { // 9999-12-31 12:59:59 日时间 转 时间截 为 253402232399L // 这里需要实现类似 FunctionUtil.StartDateUtc.AddSeconds 的功能 // 暂时使用 MyDate 的构造函数来处理 - return Operand.create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / 86400.0)); + return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / 86400.0)); } // 注:时间截 253402232399 ms 转时间 为 1978-01-12 05:30:32 // 这里需要实现类似 FunctionUtil.StartDateUtc.AddMilliseconds 的功能 - return Operand.create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / (86400.0 * 1000.0))); + return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / (86400.0 * 1000.0))); } else if (type == 1) { Operand args1 = args.get(0).toText("Function '{0}' parameter {1} is error!", "DateValue", 1); if (args1.isError()) { @@ -61,20 +61,20 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } toolgood.algorithm.internals.MyDate date = toolgood.algorithm.internals.MyDate.parse(args1.getTextValue()); if (date != null) { - return Operand.create(date); + return Operand.Create(date); } } else if (type == 2) { return args.get(0).toNumber("Function '{0}' parameter is error!", "DateValue").toMyDate(); } else if (type == 3) { Operand args1 = args.get(0).toNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); // 这里需要实现类似 FunctionUtil.StartDateUtc.AddMilliseconds 的功能 - return Operand.create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / (86400.0 * 1000.0))); + return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / (86400.0 * 1000.0))); } else if (type == 4) { Operand args1 = args.get(0).toNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); // 这里需要实现类似 FunctionUtil.StartDateUtc.AddSeconds 的功能 - return Operand.create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / 86400.0)); + return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / 86400.0)); } - return Operand.error("Function '{0}' parameter is error!", "DateValue"); + return Operand.Error("Function '{0}' parameter is error!", "DateValue"); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java index 30975f575..3568031aa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java @@ -23,9 +23,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } toolgood.algorithm.internals.MyDate date = args1.getDateValue(); if (date.Day == null) { - return Operand.error("Function '{0}' is error!", "Day"); + return Operand.Error("Function '{0}' is error!", "Day"); } - return Operand.create(date.Day); + return Operand.Create(date.Day); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java index 21bb2b066..e373056b6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java @@ -95,7 +95,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } } - return Operand.create(days); + return Operand.Create(days); } private int getDaysInMonth(int year, int month) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java index 5b2a221a8..09231adb1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java @@ -32,11 +32,11 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara toolgood.algorithm.internals.MyDate date = args1.getDateValue(); int months = args2.getIntValue(); toolgood.algorithm.internals.MyDate result = date.AddMonths(months); - return Operand.create(result); + return Operand.Create(result); } catch (Exception e) { // 捕获所有异常 } - return Operand.error("Function '{0}' is error!", "EDate"); + return Operand.Error("Function '{0}' is error!", "EDate"); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java index b181ac9da..24ab35545 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java @@ -37,11 +37,11 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara toolgood.algorithm.internals.MyDate firstDayOfMonth = new toolgood.algorithm.internals.MyDate(tempDate.Year, tempDate.Month, 1, 0, 0, 0); // 减去一天,得到上个月的最后一天 toolgood.algorithm.internals.MyDate lastDayOfMonth = firstDayOfMonth.AddDays(-1); - return Operand.create(lastDayOfMonth); + return Operand.Create(lastDayOfMonth); } catch (Exception e) { // 捕获所有异常 } - return Operand.error("Function '{0}' is error!", "EoMonth"); + return Operand.Error("Function '{0}' is error!", "EoMonth"); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java index d8e3675b1..ebee6e3b5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java @@ -22,7 +22,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } toolgood.algorithm.internals.MyDate date = args1.getDateValue(); - return Operand.create(date.Hour); + return Operand.Create(date.Hour); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java index 640966e84..39a7cf848 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java @@ -22,7 +22,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } toolgood.algorithm.internals.MyDate date = args1.getDateValue(); - return Operand.create(date.Minute); + return Operand.Create(date.Minute); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java index 90aafbdef..6c4bd6bdc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java @@ -23,9 +23,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } toolgood.algorithm.internals.MyDate date = args1.getDateValue(); if (date.Month == null) { - return Operand.error("Function '{0}' is error!", "Month"); + return Operand.Error("Function '{0}' is error!", "Month"); } - return Operand.create(date.Month); + return Operand.Create(date.Month); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java index 630cd30a1..36af4454b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java @@ -58,7 +58,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } currentDate = currentDate.AddDays(1); } - return Operand.create(days); + return Operand.Create(days); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java index 624458069..ff89bc672 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java @@ -10,7 +10,7 @@ public class Function_NOW extends FunctionBase { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { toolgood.algorithm.internals.MyDate now = toolgood.algorithm.internals.MyDate.now(); - return Operand.create(now); + return Operand.Create(now); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java index 5f4c3dd55..eaa4598f3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java @@ -22,7 +22,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } toolgood.algorithm.internals.MyDate date = args1.getDateValue(); - return Operand.create(date.Second); + return Operand.Create(date.Second); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java index d1e12932a..ba08af1b0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java @@ -42,7 +42,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } else { d = new toolgood.algorithm.internals.MyDate(0, 0, 0, args1.getIntValue(), args2.getIntValue(), 0); } - return Operand.create(d); + return Operand.Create(d); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java index 77edb71f4..2d8c18f16 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java @@ -41,12 +41,12 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (type == 0) { // 返回毫秒时间戳 - return Operand.create(timestamp); + return Operand.Create(timestamp); } else if (type == 1) { // 返回秒时间戳 - return Operand.create((double) timestamp / 1000); + return Operand.Create((double) timestamp / 1000); } - return Operand.error("Function '{0}' parameter is error!", "TimeStamp"); + return Operand.Error("Function '{0}' parameter is error!", "TimeStamp"); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java index f81487ba6..ca0d1caa8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java @@ -28,9 +28,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara // 尝试解析时间字符串 toolgood.algorithm.internals.MyDate date = parseTimeString(timeString); if (date != null) { - return Operand.create(date); + return Operand.Create(date); } - return Operand.error("Function '{0}' parameter is error!", "TimeValue"); + return Operand.Error("Function '{0}' parameter is error!", "TimeValue"); } private toolgood.algorithm.internals.MyDate parseTimeString(String timeString) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java index a8ceb9942..8f9293859 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java @@ -12,7 +12,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara toolgood.algorithm.internals.MyDate now = toolgood.algorithm.internals.MyDate.now(); // 创建一个只包含日期部分的新 MyDate 对象 toolgood.algorithm.internals.MyDate today = new toolgood.algorithm.internals.MyDate(now.Year, now.Month, now.Day, 0, 0, 0); - return Operand.create(today); + return Operand.Create(today); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index 60d5eb86c..6b88ec92f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -39,19 +39,19 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (type == 1) { // 返回 1-7,其中 1 是星期日,7 是星期六 - return Operand.create(dayOfWeek); + return Operand.Create(dayOfWeek); } else if (type == 2) { // 返回 1-7,其中 1 是星期一,7 是星期日 if (dayOfWeek == 1) { - return Operand.create(7); + return Operand.Create(7); } - return Operand.create(dayOfWeek - 1); + return Operand.Create(dayOfWeek - 1); } else { // 返回 0-6,其中 0 是星期一,6 是星期日 if (dayOfWeek == 1) { - return Operand.create(6); + return Operand.Create(6); } - return Operand.create(dayOfWeek - 2); + return Operand.Create(dayOfWeek - 2); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index 29a4ea7bc..1ff33fd0c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -44,7 +44,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } double week = Math.ceil(days / 7.0); - return Operand.create((int) week); + return Operand.Create((int) week); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index b8981696b..a32094e0a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -60,7 +60,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } days--; } - return Operand.create(startMyDate); + return Operand.Create(startMyDate); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java new file mode 100644 index 000000000..3ef21dd26 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java @@ -0,0 +1,48 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.ArrayList; +import java.util.List; + +public class Function_AVEDEV extends Function_N { + public Function_AVEDEV(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "AveDev"); + } + if (list.size() == 0) { + return Operand.Zero(); + } + double avg = list.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); + double sum = 0; + for (double item : list) { + sum += Math.abs(item - avg); + } + return Operand.Create(sum / list.size()); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "AveDev"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java new file mode 100644 index 000000000..1979ab7dc --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java @@ -0,0 +1,44 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.ArrayList; +import java.util.List; + +public class Function_AVERAGE extends Function_N { + public Function_AVERAGE(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Average"); + } + if (list.size() == 0) { + return Operand.Zero(); + } + double avg = list.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); + return Operand.Create(avg); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Average"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java new file mode 100644 index 000000000..c703cbcf7 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java @@ -0,0 +1,82 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.ArrayList; +import java.util.List; + +public class Function_AVERAGEIF extends Function_3 { + public Function_AVERAGEIF(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsError()) { + return args2; + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args1, list); + if (!o) { + return Operand.Error("Function '{0}' parameter {1} is error!", "AverageIf", 1); + } + + List sumdbs; + if (func3 != null) { + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsError()) { + return args3; + } + sumdbs = new ArrayList<>(); + boolean o2 = FunctionUtil.F_base_GetList(args3, sumdbs); + if (!o2) { + return Operand.Error("Function '{0}' parameter {1} is error!", "AverageIf", 3); + } + } else { + sumdbs = list; + } + + double sum; + int count; + if (args2.IsNumber()) { + count = FunctionUtil.F_base_countif(list, args2.NumberValue()); + sum = count * args2.NumberValue(); + } else { + try { + double d = Double.parseDouble(args2.TextValue().trim()); + count = FunctionUtil.F_base_countif(list, d); + sum = FunctionUtil.F_base_sumif(list, d, sumdbs); + } catch (NumberFormatException e) { + String sunif = args2.TextValue().trim(); + Object[] m2 = FunctionUtil.sumifMatch(sunif); + if (m2 != null) { + String operator = (String) m2[0]; + double value = (double) m2[1]; + count = FunctionUtil.F_base_countif(list, operator, value); + sum = FunctionUtil.F_base_sumif(list, operator, value, sumdbs); + } else { + return Operand.Error("Function '{0}' parameter {1} is error!", "AverageIf", 2); + } + } + } + if (count == 0) { + return Operand.Error("Function '{0}' div 0 error!", "AverageIf"); + } + return Operand.Create(sum / count); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "AverageIf"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java new file mode 100644 index 000000000..259321d1a --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java @@ -0,0 +1,51 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_BETADIST extends Function_3 { + public Function_BETADIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 3); + if (args3.IsError()) { + return args3; + } + } + double x = args1.NumberValue(); + double alpha = args2.NumberValue(); + double beta = args3.NumberValue(); + + if (alpha < 0.0 || beta < 0.0) { + return Operand.Error("Function '{0}' parameter is error!", "BetaDist"); + } + return Operand.Create(ExcelFunctions.BetaDist(x, alpha, beta)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "BetaDist"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java new file mode 100644 index 000000000..49ed65101 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java @@ -0,0 +1,51 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_BETAINV extends Function_3 { + public Function_BETAINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 3); + if (args3.IsError()) { + return args3; + } + } + double p = args1.NumberValue(); + double alpha = args2.NumberValue(); + double beta = args3.NumberValue(); + + if (alpha < 0.0 || beta < 0.0 || p < 0.0 || p > 1.0) { + return Operand.Error("Function '{0}' parameter is error!", "BetaInv"); + } + return Operand.Create(ExcelFunctions.BetaInv(p, alpha, beta)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "BetaInv"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java new file mode 100644 index 000000000..fb5b0b839 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java @@ -0,0 +1,57 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_4; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_BINOMDIST extends Function_4 { + public Function_BINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { + super(func1, func2, func3, func4); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 3); + if (args3.IsError()) { + return args3; + } + } + Operand args4 = func4.Evaluate(work, tempParameter); + if (!args4.IsBoolean()) { + args4 = args4.ToBoolean("Function '{0}' parameter {1} is error!", "BinomDist", 4); + if (args4.IsError()) { + return args4; + } + } + + int n2 = args2.IntValue(); + double n3 = args3.NumberValue(); + if (!(n3 >= 0.0 && n3 <= 1.0 && n2 >= 0)) { + return Operand.Error("Function '{0}' parameter is error!", "BinomDist"); + } + return Operand.Create(ExcelFunctions.BinomDist(args1.IntValue(), n2, n3, args4.BooleanValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "BinomDist"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java new file mode 100644 index 000000000..6ee87bcb0 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java @@ -0,0 +1,40 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.ArrayList; +import java.util.List; + +public class Function_COUNT extends Function_N { + public Function_COUNT(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Count"); + } + return Operand.Create(list.size()); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Count"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java new file mode 100644 index 000000000..05092e73c --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java @@ -0,0 +1,63 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.ArrayList; +import java.util.List; + +public class Function_COUNTIF extends Function_2 { + public Function_COUNTIF(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (!args1.IsArray()) { + args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "CountIf", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsError()) { + return args2; + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args1, list); + if (!o) { + return Operand.Error("Function '{0}' parameter {1} is error!", "CountIf", 1); + } + + int count; + if (args2.IsNumber()) { + count = FunctionUtil.F_base_countif(list, args2.NumberValue()); + } else { + try { + double d = Double.parseDouble(args2.TextValue().trim()); + count = FunctionUtil.F_base_countif(list, d); + } catch (NumberFormatException e) { + String sunif = args2.TextValue().trim(); + Object[] m2 = FunctionUtil.sumifMatch(sunif); + if (m2 != null) { + String operator = (String) m2[0]; + double value = (double) m2[1]; + count = FunctionUtil.F_base_countif(list, operator, value); + } else { + return Operand.Error("Function '{0}' parameter {1} is error!", "CountIf", 2); + } + } + } + return Operand.Create(count); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "CountIf"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java new file mode 100644 index 000000000..d434d061b --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java @@ -0,0 +1,59 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.ArrayList; +import java.util.List; + +public class Function_COVAR extends Function_2 { + public Function_COVAR(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsError()) { + return args2; + } + + List list1 = new ArrayList<>(); + List list2 = new ArrayList<>(); + boolean o1 = FunctionUtil.F_base_GetList(args1, list1); + boolean o2 = FunctionUtil.F_base_GetList(args2, list2); + if (!o1) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Covar", 1); + } + if (!o2) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Covar", 2); + } + if (list1.size() != list2.size()) { + return Operand.Error("Function '{0}' parameter's count error!", "Covar"); + } + if (list1.size() == 0) { + return Operand.Error("Function '{0}' parameter's count error!", "Covar"); + } + + double avg1 = list1.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); + double avg2 = list2.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); + double sum = 0; + for (int i = 0; i < list1.size(); i++) { + sum += (list1.get(i) - avg1) * (list2.get(i) - avg2); + } + double val = sum / list1.size(); + return Operand.Create(val); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Covar"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java new file mode 100644 index 000000000..0f063ef72 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java @@ -0,0 +1,59 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; + +import java.util.ArrayList; +import java.util.List; + +public class Function_COVARIANCES extends Function_2 { + public Function_COVARIANCES(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsError()) { + return args2; + } + + List list1 = new ArrayList<>(); + List list2 = new ArrayList<>(); + boolean o1 = FunctionUtil.F_base_GetList(args1, list1); + boolean o2 = FunctionUtil.F_base_GetList(args2, list2); + if (!o1) { + return Operand.Error("Function '{0}' parameter {1} is error!", "CovarIanceS", 1); + } + if (!o2) { + return Operand.Error("Function '{0}' parameter {1} is error!", "CovarIanceS", 2); + } + if (list1.size() != list2.size()) { + return Operand.Error("Function '{0}' parameter's count error!", "CovarIanceS"); + } + if (list1.size() == 1) { + return Operand.Error("Function '{0}' parameter's count error!", "CovarIanceS"); + } + + double avg1 = list1.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); + double avg2 = list2.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); + double sum = 0; + for (int i = 0; i < list1.size(); i++) { + sum += (list1.get(i) - avg1) * (list2.get(i) - avg2); + } + double val = sum / (list1.size() - 1); + return Operand.Create(val); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "CovarIanceS"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java new file mode 100644 index 000000000..522760960 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java @@ -0,0 +1,35 @@ +package toolgood.algorithm.internals.functions.mathtransformation; + +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.RegexHelper; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_BIN2DEC extends Function_1 { + public Function_BIN2DEC(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "BIN2DEC"); + if (args1.IsError()) { + return args1; + } + } + + if (!RegexHelper.BinRegex.matcher(args1.TextValue()).matches()) { + return Operand.Error("Function '{0}' parameter is error!", "BIN2DEC"); + } + int num = Integer.parseInt(args1.TextValue(), 2); + return Operand.Create(num); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "BIN2DEC"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java new file mode 100644 index 000000000..164092f22 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java @@ -0,0 +1,48 @@ +package toolgood.algorithm.internals.functions.mathtransformation; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.RegexHelper; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_BIN2HEX extends Function_2 { + public Function_BIN2HEX(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "BIN2HEX", 1); + if (args1.IsError()) { + return args1; + } + } + + if (!RegexHelper.BinRegex.matcher(args1.TextValue()).matches()) { + return Operand.Error("Function '{0}' parameter {1} is error!", "BIN2HEX", 1); + } + String num = Integer.toHexString(Integer.parseInt(args1.TextValue(), 2)).toUpperCase(); + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BIN2HEX", 2); + if (args2.IsError()) { + return args2; + } + } + if (num.length() <= args2.IntValue()) { + return Operand.Create(num); + } + return Operand.Error("Function '{0}' parameter {1} is error!", "BIN2HEX", 2); + } + return Operand.Create(num); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "BIN2HEX"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java new file mode 100644 index 000000000..8234ba641 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java @@ -0,0 +1,48 @@ +package toolgood.algorithm.internals.functions.mathtransformation; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.RegexHelper; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_BIN2OCT extends Function_2 { + public Function_BIN2OCT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "BIN2OCT", 1); + if (args1.IsError()) { + return args1; + } + } + + if (!RegexHelper.BinRegex.matcher(args1.TextValue()).matches()) { + return Operand.Error("Function '{0}' parameter {1} is error!", "BIN2OCT", 1); + } + String num = Integer.toOctalString(Integer.parseInt(args1.TextValue(), 2)); + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BIN2OCT", 2); + if (args2.IsError()) { + return args2; + } + } + if (num.length() <= args2.IntValue()) { + return Operand.Create(num); + } + return Operand.Error("Function '{0}' parameter {1} is error!", "BIN2OCT", 2); + } + return Operand.Create(num); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "BIN2OCT"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java new file mode 100644 index 000000000..943299f37 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java @@ -0,0 +1,43 @@ +package toolgood.algorithm.internals.functions.mathtransformation; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_DEC2BIN extends Function_2 { + public Function_DEC2BIN(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2BIN", 1); + if (args1.IsError()) { + return args1; + } + } + String num = Integer.toBinaryString(args1.IntValue()); + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "DEC2BIN", 2); + if (args2.IsError()) { + return args2; + } + } + if (num.length() <= args2.IntValue()) { + return Operand.Create(num); + } + return Operand.Error("Function '{0}' parameter {1} is error!", "DEC2BIN", 2); + } + return Operand.Create(num); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "DEC2BIN"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java new file mode 100644 index 000000000..56d2e00c7 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java @@ -0,0 +1,43 @@ +package toolgood.algorithm.internals.functions.mathtransformation; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_DEC2HEX extends Function_2 { + public Function_DEC2HEX(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2HEX", 1); + if (args1.IsError()) { + return args1; + } + } + String num = Integer.toHexString(args1.IntValue()).toUpperCase(); + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "DEC2HEX", 2); + if (args2.IsError()) { + return args2; + } + } + if (num.length() <= args2.IntValue()) { + return Operand.Create(num); + } + return Operand.Error("Function '{0}' parameter {1} is error!", "DEC2HEX", 2); + } + return Operand.Create(num); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "DEC2HEX"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java new file mode 100644 index 000000000..b20d63de9 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java @@ -0,0 +1,43 @@ +package toolgood.algorithm.internals.functions.mathtransformation; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_DEC2OCT extends Function_2 { + public Function_DEC2OCT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2OCT", 1); + if (args1.IsError()) { + return args1; + } + } + String num = Integer.toOctalString(args1.IntValue()); + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "DEC2OCT", 2); + if (args2.IsError()) { + return args2; + } + } + if (num.length() <= args2.IntValue()) { + return Operand.Create(num); + } + return Operand.Error("Function '{0}' parameter {1} is error!", "DEC2OCT", 2); + } + return Operand.Create(num); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "DEC2OCT"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java new file mode 100644 index 000000000..74806f4ea --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java @@ -0,0 +1,48 @@ +package toolgood.algorithm.internals.functions.mathtransformation; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.RegexHelper; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_HEX2BIN extends Function_2 { + public Function_HEX2BIN(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HEX2BIN", 1); + if (args1.IsError()) { + return args1; + } + } + + if (!RegexHelper.HexRegex.matcher(args1.TextValue()).matches()) { + return Operand.Error("Function '{0}' parameter {1} is error!", "HEX2BIN", 1); + } + String num = Integer.toBinaryString(Integer.parseInt(args1.TextValue(), 16)); + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "HEX2BIN", 2); + if (args2.IsError()) { + return args2; + } + } + if (num.length() <= args2.IntValue()) { + return Operand.Create(num); + } + return Operand.Error("Function '{0}' parameter {1} is error!", "HEX2BIN", 2); + } + return Operand.Create(num); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "HEX2BIN"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java new file mode 100644 index 000000000..2a47549d0 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java @@ -0,0 +1,35 @@ +package toolgood.algorithm.internals.functions.mathtransformation; + +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.RegexHelper; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_HEX2DEC extends Function_1 { + public Function_HEX2DEC(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "HEX2DEC"); + if (args1.IsError()) { + return args1; + } + } + + if (!RegexHelper.HexRegex.matcher(args1.TextValue()).matches()) { + return Operand.Error("Function '{0}' parameter is error!", "HEX2DEC"); + } + int num = Integer.parseInt(args1.TextValue(), 16); + return Operand.Create(num); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "HEX2DEC"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java new file mode 100644 index 000000000..71c85e05c --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java @@ -0,0 +1,48 @@ +package toolgood.algorithm.internals.functions.mathtransformation; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.RegexHelper; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_HEX2OCT extends Function_2 { + public Function_HEX2OCT(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HEX2OCT", 1); + if (args1.IsError()) { + return args1; + } + } + + if (!RegexHelper.HexRegex.matcher(args1.TextValue()).matches()) { + return Operand.Error("Function '{0}' parameter {1} is error!", "HEX2OCT", 1); + } + String num = Integer.toOctalString(Integer.parseInt(args1.TextValue(), 16)); + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "HEX2OCT", 2); + if (args2.IsError()) { + return args2; + } + } + if (num.length() <= args2.IntValue()) { + return Operand.Create(num); + } + return Operand.Error("Function '{0}' parameter {1} is error!", "HEX2OCT", 2); + } + return Operand.Create(num); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "HEX2OCT"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java new file mode 100644 index 000000000..a5f47cc86 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java @@ -0,0 +1,48 @@ +package toolgood.algorithm.internals.functions.mathtransformation; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.RegexHelper; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_OCT2BIN extends Function_2 { + public Function_OCT2BIN(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "OCT2BIN", 1); + if (args1.IsError()) { + return args1; + } + } + + if (!RegexHelper.OctRegex.matcher(args1.TextValue()).matches()) { + return Operand.Error("Function '{0}' parameter {1} is error!", "OCT2BIN", 1); + } + String num = Integer.toBinaryString(Integer.parseInt(args1.TextValue(), 8)); + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "OCT2BIN", 2); + if (args2.IsError()) { + return args2; + } + } + if (num.length() <= args2.IntValue()) { + return Operand.Create(num); + } + return Operand.Error("Function '{0}' parameter {1} is error!", "OCT2BIN", 2); + } + return Operand.Create(num); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "OCT2BIN"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java new file mode 100644 index 000000000..d4bfd3616 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java @@ -0,0 +1,35 @@ +package toolgood.algorithm.internals.functions.mathtransformation; + +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.RegexHelper; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_OCT2DEC extends Function_1 { + public Function_OCT2DEC(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter is error!", "OCT2DEC"); + if (args1.IsError()) { + return args1; + } + } + + if (!RegexHelper.OctRegex.matcher(args1.TextValue()).matches()) { + return Operand.Error("Function '{0}' parameter is error!", "OCT2DEC"); + } + int num = Integer.parseInt(args1.TextValue(), 8); + return Operand.Create(num); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "OCT2DEC"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java new file mode 100644 index 000000000..7cd4db240 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java @@ -0,0 +1,48 @@ +package toolgood.algorithm.internals.functions.mathtransformation; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.RegexHelper; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; + +public class Function_OCT2HEX extends Function_2 { + public Function_OCT2HEX(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotText()) { + args1 = args1.ToText("Function '{0}' parameter {1} is error!", "OCT2HEX", 1); + if (args1.IsError()) { + return args1; + } + } + + if (!RegexHelper.OctRegex.matcher(args1.TextValue()).matches()) { + return Operand.Error("Function '{0}' parameter {1} is error!", "OCT2HEX", 1); + } + String num = Integer.toHexString(Integer.parseInt(args1.TextValue(), 8)).toUpperCase(); + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "OCT2HEX", 2); + if (args2.IsError()) { + return args2; + } + } + if (num.length() <= args2.IntValue()) { + return Operand.Create(num); + } + return Operand.Error("Function '{0}' parameter {1} is error!", "OCT2HEX", 2); + } + return Operand.Create(num); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "OCT2HEX"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java index 8dcc3786e..6a15da877 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java @@ -13,15 +13,15 @@ public Function_ACOS(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Acos"); if (args1.isError()) { return args1; } } - return Operand.create(Math.acos(args1.getDoubleValue())); + return Operand.Create(Math.acos(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java index 2aec80e96..ed84ca7d1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java @@ -13,15 +13,15 @@ public Function_ACOSH(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Acosh"); if (args1.isError()) { return args1; } } - return Operand.create(Math.acosh(args1.getDoubleValue())); + return Operand.Create(Math.acosh(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java index 35eb8b724..7c9127bb4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java @@ -13,15 +13,15 @@ public Function_ASIN(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Asin"); if (args1.isError()) { return args1; } } - return Operand.create(Math.asin(args1.getDoubleValue())); + return Operand.Create(Math.asin(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java index fb7f7733e..4d0031d61 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java @@ -13,15 +13,15 @@ public Function_ASINH(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Asinh"); if (args1.isError()) { return args1; } } - return Operand.create(Math.asinh(args1.getDoubleValue())); + return Operand.Create(Math.asinh(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java index 1f9053ca7..c4da5344e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java @@ -13,15 +13,15 @@ public Function_ATAN(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Atan"); if (args1.isError()) { return args1; } } - return Operand.create(Math.atan(args1.getDoubleValue())); + return Operand.Create(Math.atan(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java index ddf9fb653..af931ee35 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java @@ -13,22 +13,22 @@ public Function_ATAN2(FunctionBase func1, FunctionBase func2) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Atan2"); if (args1.isError()) { return args1; } } - Operand args2 = func2.evaluate(work, tempParameter); + Operand args2 = func2.Evaluate(work, tempParameter); if (!args2.isNumber()) { args2 = args2.toNumber("Function '{0}' parameter is error!", "Atan2"); if (args2.isError()) { return args2; } } - return Operand.create(Math.atan2(args1.getDoubleValue(), args2.getDoubleValue())); + return Operand.Create(Math.atan2(args1.getDoubleValue(), args2.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java index 54bdaaf62..99ab55e9e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java @@ -13,15 +13,15 @@ public Function_ATANH(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Atanh"); if (args1.isError()) { return args1; } } - return Operand.create(Math.atanh(args1.getDoubleValue())); + return Operand.Create(Math.atanh(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java index 86585cf8d..d5c625835 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java @@ -13,15 +13,15 @@ public Function_COS(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Cos"); if (args1.isError()) { return args1; } } - return Operand.create(Math.cos(args1.getDoubleValue())); + return Operand.Create(Math.cos(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java index cdf8bc4c7..92fd9fce9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java @@ -13,15 +13,15 @@ public Function_COSH(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Cosh"); if (args1.isError()) { return args1; } } - return Operand.create(Math.cosh(args1.getDoubleValue())); + return Operand.Create(Math.cosh(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java index 57f52d4ca..a45335f09 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java @@ -13,8 +13,8 @@ public Function_COT(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Cot"); if (args1.isError()) { @@ -24,9 +24,9 @@ public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Csc"); if (args1.isError()) { @@ -24,9 +24,9 @@ public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Degrees"); if (args1.isError()) { return args1; } } - return Operand.create(Math.toDegrees(args1.getDoubleValue())); + return Operand.Create(Math.toDegrees(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java index 7c9fc07b8..1820ed558 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java @@ -13,15 +13,15 @@ public Function_RADIANS(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Radians"); if (args1.isError()) { return args1; } } - return Operand.create(Math.toRadians(args1.getDoubleValue())); + return Operand.Create(Math.toRadians(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java index 505890900..6f3f6376e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java @@ -13,8 +13,8 @@ public Function_SEC(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Sec"); if (args1.isError()) { @@ -24,9 +24,9 @@ public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Sin"); if (args1.isError()) { return args1; } } - return Operand.create(Math.sin(args1.getDoubleValue())); + return Operand.Create(Math.sin(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java index 3c84f5567..b44211478 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java @@ -13,15 +13,15 @@ public Function_SINH(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Sinh"); if (args1.isError()) { return args1; } } - return Operand.create(Math.sinh(args1.getDoubleValue())); + return Operand.Create(Math.sinh(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java index 548ffddb1..b602ec6e1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java @@ -13,15 +13,15 @@ public Function_TAN(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Tan"); if (args1.isError()) { return args1; } } - return Operand.create(Math.tan(args1.getDoubleValue())); + return Operand.Create(Math.tan(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java index 4988fb652..bbe107e67 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java @@ -13,15 +13,15 @@ public Function_TANH(FunctionBase func1) { } @Override - public Operand evaluate(AlgorithmEngine work, Function tempParameter) { - Operand args1 = func1.evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.isNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Tanh"); if (args1.isError()) { return args1; } } - return Operand.create(Math.tanh(args1.getDoubleValue())); + return Operand.Create(Math.tanh(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java index 7a2cf7134..0f5be8a67 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java @@ -19,7 +19,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction /// Computes the probability mass (PMF) at k, i.e. P(X = k). /// - /// The location in the domain where we want to evaluate the + /// The location in the domain where we want to Evaluate the /// probability mass function. /// The success probability (p) in each trial. Range: 0 ≤ p ≤ /// 1. diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java index ef972f01a..4b16a75a2 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java @@ -6,7 +6,7 @@ public class Hypergeometric { ///

/// Computes the probability mass (PMF) at k, i.e. P(X = k). /// - /// The location in the domain where we want to evaluate the probability mass function. + /// The location in the domain where we want to Evaluate the probability mass function. /// The size of the population (N). /// The number successes within the population (K, M). /// The number of draws without replacement (n). diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java index 5052316c9..fa47c277a 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java @@ -6,7 +6,7 @@ public class NegativeBinomial { /// /// Computes the probability mass (PMF) at k, i.e. P(X = k). /// - /// The location in the domain where we want to evaluate the probability mass function. + /// The location in the domain where we want to Evaluate the probability mass function. /// The number of failures (r) until the experiment stopped. Range: r ≥ 0. /// The probability (p) of a trial resulting in success. Range: 0 ≤ p ≤ 1. /// the probability mass at location . @@ -18,7 +18,7 @@ public static double PMF(double r, double p, int k) /// /// Computes the log probability mass (lnPMF) at k, i.e. ln(P(X = k)). /// - /// The location in the domain where we want to evaluate the log probability mass function. + /// The location in the domain where we want to Evaluate the log probability mass function. /// The number of failures (r) until the experiment stopped. Range: r ≥ 0. /// The probability (p) of a trial resulting in success. Range: 0 ≤ p ≤ 1. /// the log probability mass at location . diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java index cdf64fed3..9c0cb72f2 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java @@ -6,7 +6,7 @@ public class Poisson { /// /// Computes the probability mass (PMF) at k, i.e. P(X = k). /// - /// The location in the domain where we want to evaluate the probability mass function. + /// The location in the domain where we want to Evaluate the probability mass function. /// The lambda (λ) parameter of the Poisson distribution. Range: λ > 0. /// the probability mass at location . public static double PMF(double lambda, int k) From eb895cda03b7043406c11da7d9178b1052845a31 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 07:26:34 +0800 Subject: [PATCH 14/98] fix --- .../main/java/toolgood/algorithm/Operand.java | 2 +- .../java/toolgood/algorithm/OperandImpl.java | 79 +++++++++---------- .../internals/functions/FunctionBase.java | 16 ++-- .../internals/functions/Function_1.java | 2 +- .../internals/functions/Function_2.java | 2 +- .../internals/functions/Function_3.java | 2 +- .../internals/functions/Function_4.java | 2 +- .../internals/functions/Function_N.java | 2 +- .../functions/csharp/Function_ENDSWITH.java | 2 +- .../functions/csharp/Function_GUID.java | 2 +- .../functions/csharp/Function_HAS.java | 2 +- .../functions/csharp/Function_HASVALUE.java | 2 +- .../functions/csharp/Function_INDEXOF.java | 2 +- .../functions/csharp/Function_ISREGEX.java | 2 +- .../functions/csharp/Function_JOIN.java | 2 +- .../csharp/Function_LASTINDEXOF.java | 2 +- .../csharp/Function_LOOKCEILING.java | 2 +- .../functions/csharp/Function_LOOKFLOOR.java | 2 +- .../functions/csharp/Function_REGEX.java | 2 +- .../csharp/Function_REGEXREPALCE.java | 2 +- .../functions/csharp/Function_REMOVEEND.java | 2 +- .../csharp/Function_REMOVESTART.java | 2 +- .../functions/csharp/Function_SPLIT.java | 2 +- .../functions/csharp/Function_STARTSWITH.java | 2 +- .../functions/csharp/Function_SUBSTRING.java | 2 +- .../functions/csharp/Function_TRIMEND.java | 2 +- .../functions/csharp/Function_TRIMSTART.java | 2 +- .../csharpsecurity/Function_HMACMD5.java | 2 +- .../csharpsecurity/Function_HMACSHA1.java | 2 +- .../csharpsecurity/Function_HMACSHA256.java | 2 +- .../csharpsecurity/Function_HMACSHA512.java | 2 +- .../csharpsecurity/Function_MD5.java | 2 +- .../csharpsecurity/Function_SHA1.java | 2 +- .../csharpsecurity/Function_SHA256.java | 2 +- .../csharpsecurity/Function_SHA512.java | 2 +- .../internals/functions/csharpweb/Base64.java | 4 +- .../csharpweb/Function_BASE64TOTEXT.java | 2 +- .../csharpweb/Function_BASE64URLTOTEXT.java | 2 +- .../csharpweb/Function_HTMLDECODE.java | 2 +- .../csharpweb/Function_HTMLENCODE.java | 2 +- .../csharpweb/Function_TEXTTOBASE64.java | 2 +- .../csharpweb/Function_TEXTTOBASE64URL.java | 2 +- .../csharpweb/Function_URLDECODE.java | 2 +- .../csharpweb/Function_URLENCODE.java | 2 +- .../functions/datetimes/Function_ADDDAYS.java | 2 +- .../datetimes/Function_ADDHOURS.java | 2 +- .../datetimes/Function_ADDMINUTES.java | 2 +- .../datetimes/Function_ADDMONTHS.java | 2 +- .../datetimes/Function_ADDSECONDS.java | 2 +- .../datetimes/Function_ADDYEARS.java | 2 +- .../functions/datetimes/Function_DATE.java | 2 +- .../functions/datetimes/Function_DATEDIF.java | 2 +- .../datetimes/Function_DATEVALUE.java | 2 +- .../functions/datetimes/Function_DAY.java | 2 +- .../functions/datetimes/Function_DAYS360.java | 2 +- .../functions/datetimes/Function_EDATE.java | 2 +- .../functions/datetimes/Function_EOMONTH.java | 2 +- .../functions/datetimes/Function_HOUR.java | 2 +- .../functions/datetimes/Function_MINUTE.java | 2 +- .../functions/datetimes/Function_MONTH.java | 2 +- .../datetimes/Function_NETWORKDAYS.java | 2 +- .../functions/datetimes/Function_NOW.java | 2 +- .../functions/datetimes/Function_SECOND.java | 2 +- .../functions/datetimes/Function_TIME.java | 2 +- .../datetimes/Function_TIMESTAMP.java | 2 +- .../datetimes/Function_TIMEVALUE.java | 2 +- .../functions/datetimes/Function_TODAY.java | 2 +- .../functions/datetimes/Function_WEEKDAY.java | 2 +- .../functions/datetimes/Function_WEEKNUM.java | 2 +- .../functions/datetimes/Function_WORKDAY.java | 2 +- .../functions/datetimes/Function_YEAR.java | 2 +- .../internals/functions/flow/Function_IF.java | 2 +- .../functions/flow/Function_IFERROR.java | 2 +- .../functions/flow/Function_ISERROR.java | 2 +- .../functions/flow/Function_ISEVEN.java | 2 +- .../functions/flow/Function_ISLOGICAL.java | 2 +- .../functions/flow/Function_ISNONTEXT.java | 2 +- .../functions/flow/Function_ISNULL.java | 2 +- .../flow/Function_ISNULLOREMPTY.java | 2 +- .../flow/Function_ISNULLORERROR.java | 2 +- .../flow/Function_ISNULLORWHITESPACE.java | 2 +- .../functions/flow/Function_ISNUMBER.java | 2 +- .../functions/flow/Function_ISODD.java | 2 +- .../functions/flow/Function_ISTEXT.java | 2 +- .../functions/flow/Function_NOT.java | 2 +- .../functions/mathbase/Function_ABS.java | 2 +- .../functions/mathbase/Function_CEILING.java | 2 +- .../functions/mathbase/Function_COMBIN.java | 2 +- .../functions/mathbase/Function_EVEN.java | 2 +- .../functions/mathbase/Function_EXP.java | 2 +- .../functions/mathbase/Function_FACT.java | 2 +- .../mathbase/Function_FACTDOUBLE.java | 2 +- .../functions/mathbase/Function_FIXED.java | 2 +- .../functions/mathbase/Function_FLOOR.java | 2 +- .../functions/mathbase/Function_GCD.java | 2 +- .../functions/mathbase/Function_LCM.java | 2 +- .../functions/mathbase/Function_LN.java | 2 +- .../functions/mathbase/Function_LOG.java | 2 +- .../functions/mathbase/Function_MROUND.java | 2 +- .../mathbase/Function_MULTINOMIAL.java | 2 +- .../functions/mathbase/Function_ODD.java | 2 +- .../functions/mathbase/Function_PERMUT.java | 2 +- .../functions/mathbase/Function_POWER.java | 2 +- .../functions/mathbase/Function_PRODUCT.java | 2 +- .../mathbase/Function_Percentage.java | 4 +- .../functions/mathbase/Function_QUOTIENT.java | 2 +- .../functions/mathbase/Function_RAND.java | 2 +- .../mathbase/Function_RANDBETWEEN.java | 2 +- .../functions/mathbase/Function_ROUND.java | 2 +- .../mathbase/Function_ROUNDDOWN.java | 2 +- .../functions/mathbase/Function_ROUNDUP.java | 2 +- .../functions/mathbase/Function_SIGN.java | 2 +- .../functions/mathbase/Function_SQRT.java | 2 +- .../functions/mathbase/Function_SQRTPI.java | 2 +- .../functions/mathbase/Function_TRUNC.java | 2 +- .../functions/mathsum/Function_AVEDEV.java | 2 +- .../functions/mathsum/Function_AVERAGE.java | 2 +- .../functions/mathsum/Function_AVERAGEIF.java | 2 +- .../functions/mathsum/Function_BETADIST.java | 2 +- .../functions/mathsum/Function_BETAINV.java | 2 +- .../functions/mathsum/Function_BINOMDIST.java | 2 +- .../functions/mathsum/Function_COUNT.java | 2 +- .../functions/mathsum/Function_COUNTIF.java | 2 +- .../functions/mathsum/Function_COVAR.java | 2 +- .../mathsum/Function_COVARIANCES.java | 2 +- .../functions/mathsum/Function_DEVSQ.java | 50 ++++++++++++ .../functions/mathsum/Function_EXPONDIST.java | 49 ++++++++++++ .../functions/mathsum/Function_FDIST.java | 51 ++++++++++++ .../functions/mathsum/Function_FINV.java | 51 ++++++++++++ .../functions/mathsum/Function_FISHER.java | 34 ++++++++ .../functions/mathsum/Function_FISHERINV.java | 31 ++++++++ .../functions/mathsum/Function_GAMMADIST.java | 58 ++++++++++++++ .../functions/mathsum/Function_GAMMAINV.java | 50 ++++++++++++ .../functions/mathsum/Function_GAMMALN.java | 30 +++++++ .../functions/mathsum/Function_GEOMEAN.java | 50 ++++++++++++ .../functions/mathsum/Function_HARMEAN.java | 54 +++++++++++++ .../mathsum/Function_HYPGEOMDIST.java | 58 ++++++++++++++ .../functions/mathsum/Function_LARGE.java | 52 ++++++++++++ .../functions/mathsum/Function_LOGINV.java | 49 ++++++++++++ .../mathsum/Function_LOGNORMDIST.java | 49 ++++++++++++ .../functions/mathsum/Function_MAX.java | 41 ++++++++++ .../functions/mathsum/Function_MEDIAN.java | 46 +++++++++++ .../functions/mathsum/Function_MIN.java | 41 ++++++++++ .../functions/mathsum/Function_MODE.java | 50 ++++++++++++ .../mathsum/Function_NEGBINOMDIST.java | 51 ++++++++++++ .../functions/mathsum/Function_NORMDIST.java | 56 +++++++++++++ .../functions/mathsum/Function_NORMINV.java | 47 +++++++++++ .../functions/mathsum/Function_NORMSDIST.java | 31 ++++++++ .../functions/mathsum/Function_NORMSINV.java | 31 ++++++++ .../mathtransformation/Function_BIN2DEC.java | 2 +- .../mathtransformation/Function_BIN2HEX.java | 2 +- .../mathtransformation/Function_BIN2OCT.java | 2 +- .../mathtransformation/Function_DEC2BIN.java | 2 +- .../mathtransformation/Function_DEC2HEX.java | 2 +- .../mathtransformation/Function_DEC2OCT.java | 2 +- .../mathtransformation/Function_HEX2BIN.java | 2 +- .../mathtransformation/Function_HEX2DEC.java | 2 +- .../mathtransformation/Function_HEX2OCT.java | 2 +- .../mathtransformation/Function_OCT2BIN.java | 2 +- .../mathtransformation/Function_OCT2DEC.java | 2 +- .../mathtransformation/Function_OCT2HEX.java | 2 +- .../mathtrigonometric/Function_ACOS.java | 2 +- .../mathtrigonometric/Function_ACOSH.java | 2 +- .../mathtrigonometric/Function_ASIN.java | 2 +- .../mathtrigonometric/Function_ASINH.java | 2 +- .../mathtrigonometric/Function_ATAN.java | 2 +- .../mathtrigonometric/Function_ATAN2.java | 2 +- .../mathtrigonometric/Function_ATANH.java | 2 +- .../mathtrigonometric/Function_COS.java | 2 +- .../mathtrigonometric/Function_COSH.java | 2 +- .../mathtrigonometric/Function_COT.java | 2 +- .../mathtrigonometric/Function_CSC.java | 2 +- .../mathtrigonometric/Function_DEGREES.java | 2 +- .../mathtrigonometric/Function_RADIANS.java | 2 +- .../mathtrigonometric/Function_SEC.java | 2 +- .../mathtrigonometric/Function_SIN.java | 2 +- .../mathtrigonometric/Function_SINH.java | 2 +- .../mathtrigonometric/Function_TAN.java | 2 +- .../mathtrigonometric/Function_TANH.java | 2 +- .../functions/operator/Function_AND.java | 6 +- .../functions/operator/Function_AND_N.java | 2 +- .../functions/operator/Function_Add.java | 6 +- .../functions/operator/Function_Connect.java | 6 +- .../functions/operator/Function_Div.java | 6 +- .../functions/operator/Function_Mod.java | 6 +- .../functions/operator/Function_Mul.java | 6 +- .../functions/operator/Function_OR.java | 6 +- .../functions/operator/Function_OR_N.java | 2 +- .../functions/operator/Function_Sub.java | 6 +- .../functions/string/Function_ASC.java | 2 +- .../functions/string/Function_CHAR.java | 2 +- .../functions/string/Function_CLEAN.java | 2 +- .../functions/string/Function_CODE.java | 2 +- .../string/Function_CONCATENATE.java | 2 +- .../functions/string/Function_EXACT.java | 2 +- .../functions/string/Function_FIND.java | 2 +- .../functions/string/Function_JIS.java | 2 +- .../functions/string/Function_LEFT.java | 2 +- .../functions/string/Function_LEN.java | 2 +- .../functions/string/Function_LOWER.java | 2 +- .../functions/string/Function_MID.java | 2 +- .../functions/string/Function_PROPER.java | 2 +- .../functions/string/Function_REPLACE.java | 2 +- .../functions/string/Function_REPT.java | 2 +- .../functions/string/Function_RIGHT.java | 2 +- .../functions/string/Function_RMB.java | 2 +- .../functions/string/Function_SEARCH.java | 2 +- .../functions/string/Function_SUBSTITUTE.java | 2 +- .../functions/string/Function_T.java | 2 +- .../functions/string/Function_TEXT.java | 2 +- .../functions/string/Function_TRIM.java | 4 +- .../functions/string/Function_UPPER.java | 4 +- .../functions/string/Function_VALUE.java | 2 +- .../functions/value/Function_Array.java | 2 +- .../functions/value/Function_ArrayJson.java | 4 +- .../value/Function_ArrayJsonItem.java | 4 +- .../functions/value/Function_DiyFunction.java | 2 +- .../functions/value/Function_ERROR.java | 2 +- .../value/Function_GetJsonValue.java | 6 +- .../functions/value/Function_JSON.java | 2 +- .../functions/value/Function_NUM.java | 2 +- .../functions/value/Function_PARAM.java | 2 +- .../functions/value/Function_PARAMETER.java | 4 +- .../functions/value/Function_Value.java | 2 +- 224 files changed, 1378 insertions(+), 273 deletions(-) create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java diff --git a/java/src/main/java/toolgood/algorithm/Operand.java b/java/src/main/java/toolgood/algorithm/Operand.java index beebffd6a..e00b736eb 100644 --- a/java/src/main/java/toolgood/algorithm/Operand.java +++ b/java/src/main/java/toolgood/algorithm/Operand.java @@ -135,7 +135,7 @@ public abstract class Operand { /** * BigDecimal值 */ - public BigDecimal BigDecimalValue() { throw new UnsupportedOperationException(); } + public Double DoubleValue() { throw new UnsupportedOperationException(); } /** * int值 diff --git a/java/src/main/java/toolgood/algorithm/OperandImpl.java b/java/src/main/java/toolgood/algorithm/OperandImpl.java index 343039356..c604b0965 100644 --- a/java/src/main/java/toolgood/algorithm/OperandImpl.java +++ b/java/src/main/java/toolgood/algorithm/OperandImpl.java @@ -6,7 +6,7 @@ import java.util.Locale; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.internals.JsonData; +import toolgood.algorithm.litJson.JsonData; import toolgood.algorithm.internals.functions.FunctionUtil; class OperandInt extends Operand { @@ -37,8 +37,6 @@ public OperandInt(int obj) { @Override public double DoubleValue() { return value; } - @Override - public BigDecimal BigDecimalValue() { return BigDecimal.valueOf(value); } @Override public Operand ToNumber(String errorMessage) { return this; } @@ -96,8 +94,6 @@ public OperandBigDecimal(BigDecimal obj) { @Override public double DoubleValue() { return value.doubleValue(); } - @Override - public BigDecimal BigDecimalValue() { return value; } @Override public Operand ToNumber(String errorMessage) { return this; } @@ -196,9 +192,9 @@ public Operand ToNumber(String errorMessage) { return Operand.Create(bd); } catch (NumberFormatException e) { if (errorMessage == null) { - return error("Convert to number error!"); + return Error("Convert to number error!"); } - return error(errorMessage); + return Error(errorMessage); } } @@ -209,9 +205,9 @@ public Operand ToNumber(String errorMessage, Object... args) { return Operand.Create(bd); } catch (NumberFormatException e) { if (errorMessage == null) { - return error("Convert to number error!"); + return Error("Convert to number error!"); } - return error(String.format(errorMessage, args)); + return Error(String.format(errorMessage, args)); } } @@ -228,9 +224,9 @@ public Operand ToBoolean(String errorMessage) { return boolHolder.value ? Operand.TRUE : Operand.FALSE; } if (errorMessage == null) { - return error("Convert to bool error!"); + return Error("Convert to bool error!"); } - return error(errorMessage); + return Error(errorMessage); } @Override @@ -240,9 +236,9 @@ public Operand ToBoolean(String errorMessage, Object... args) { return boolHolder.value ? Operand.TRUE : Operand.FALSE; } if (errorMessage == null) { - return error("Convert to bool error!"); + return Error("Convert to bool error!"); } - return error(String.format(errorMessage, args)); + return Error(String.format(errorMessage, args)); } @Override @@ -258,9 +254,9 @@ public Operand ToMyDate(String errorMessage) { return Create(date); } catch (Exception ex) { if (errorMessage == null) { - return error("Convert to date error!"); + return Error("Convert to date error!"); } - return error(errorMessage); + return Error(errorMessage); } } } @@ -278,16 +274,16 @@ public Operand ToMyDate(String errorMessage, Object... args) { return Create(date); } catch (Exception ex) { if (errorMessage == null) { - return error("Convert to date error!"); + return Error("Convert to date error!"); } - return error(String.format(errorMessage, args)); + return Error(String.format(errorMessage, args)); } } } @Override public Operand ToArray(String errorMessage) { - return error(errorMessage != null ? errorMessage : "Convert to array error!"); + return Error(errorMessage != null ? errorMessage : "Convert to array error!"); } @Override @@ -295,12 +291,12 @@ public Operand ToJson(String errorMessage) { String txt = value.trim(); if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { try { - JsonData json = JsonData.parse(txt); + JsonData json = JsonData.Parse(txt); return Operand.Create(json); } catch (Exception e) { } } - return error(errorMessage != null ? errorMessage : "Convert to json error!"); + return Error(errorMessage != null ? errorMessage : "Convert to json error!"); } @Override @@ -366,16 +362,16 @@ public OperandMyDate(MyDate obj) { public MyDate DateValue() { return value; } @Override - public Operand ToNumber(String errorMessage) { return Create(value.toTimestamp()); } + public Operand ToNumber(String errorMessage) { return Create(value.ToNumber()); } @Override - public Operand ToNumber(String errorMessage, Object... args) { return Create(value.toTimestamp()); } + public Operand ToNumber(String errorMessage, Object... args) { return Create(value.ToNumber()); } @Override - public Operand ToBoolean(String errorMessage) { return value.toTimestamp() != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage) { return value.ToNumber() != 0 ? TRUE : FALSE; } @Override - public Operand ToBoolean(String errorMessage, Object... args) { return value.toTimestamp() != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage, Object... args) { return value.ToNumber() != 0 ? TRUE : FALSE; } @Override public Operand ToText(String errorMessage) { return Create(value.toString()); } @@ -441,21 +437,21 @@ public Operand ToArray(String errorMessage) { } return Operand.Create(list); } - return error(errorMessage != null ? errorMessage : "Convert to array error!"); + return Error(errorMessage != null ? errorMessage : "Convert to array error!"); } @Override public Operand ToArray(String errorMessage, Object... args) { - if (value.isArray()) { + if (value.IsArray()) { List list = new ArrayList<>(); for (JsonData v : value.getArray()) { - if (v.isString()) { + if (v.IsString()) { list.add(Operand.Create(v.getString())); - } else if (v.isBoolean()) { + } else if (v.IsBoolean()) { list.add(Operand.Create(v.getBoolean())); - } else if (v.isNumber()) { + } else if (v.IsNumber()) { list.add(Operand.Create(new BigDecimal(v.getNumber().toString()))); - } else if (v.isNull()) { + } else if (v.IsNull()) { list.add(Operand.CreateNull()); } else { list.add(Operand.Create(v)); @@ -463,7 +459,7 @@ public Operand ToArray(String errorMessage, Object... args) { } return Operand.Create(list); } - return error(String.format(errorMessage, args)); + return Error(String.format(errorMessage, args)); } @Override @@ -516,10 +512,10 @@ public Operand ToText(String errorMessage, Object... args) { public Operand ToJson(String errorMessage) { String txt = this.toString(); try { - JsonData json = JsonData.parse(txt); + JsonData json = JsonData.Parse(txt); return Operand.Create(json); } catch (Exception e) { - return error(errorMessage != null ? errorMessage : "Convert to json error!"); + return Error(errorMessage != null ? errorMessage : "Convert to json error!"); } } @@ -641,22 +637,22 @@ public Operand ToText(String errorMessage, Object... args) { @Override public Operand ToArray(String errorMessage) { - return Create(this.getArrayValue()); + return Create(this.ArrayValue()); } @Override public Operand ToArray(String errorMessage, Object... args) { - return Create(this.getArrayValue()); + return Create(this.ArrayValue()); } @Override public Operand ToJson(String errorMessage) { String txt = this.toString(); try { - JsonData json = JsonData.parse(txt); + JsonData json = JsonData.Parse(txt); return Operand.Create(json); } catch (Exception e) { - return error(errorMessage != null ? errorMessage : "Convert to json error!"); + return Error(errorMessage != null ? errorMessage : "Convert to json error!"); } } @@ -676,7 +672,7 @@ public boolean tryGetValue(String key, Operand[] value) { public boolean containsKey(Operand value) { for (KeyValue item : textList) { - if (value.getTextValue().equals(item.key)) { + if (value.TextValue().equals(item.key)) { return true; } } @@ -686,11 +682,11 @@ public boolean containsKey(Operand value) { public boolean containsValue(Operand value) { for (KeyValue item : textList) { Operand op = item.value; - if (value.getType() != op.getType()) { + if (value.Type() != op.Type()) { continue; } - if (value.isText()) { - if (value.getTextValue().equals(op.getTextValue())) { + if (value.IsText()) { + if (value.TextValue().equals(op.TextValue())) { return true; } } @@ -736,4 +732,3 @@ public OperandKeyValue(KeyValue obj) { public KeyValue Value() { return value; } } -#endregion diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index 1fd6e6cc6..2d1f7eb0c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -33,7 +33,7 @@ public abstract class FunctionBase { * @param tempParameter * @return */ - public short tryEvaluate(AlgorithmEngine work, short def, Function tempParameter) { + public short TryEvaluate(AlgorithmEngine work, short def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.isNumber()) { @@ -58,7 +58,7 @@ public short tryEvaluate(AlgorithmEngine work, short def, Function tempParameter) { + public int TryEvaluate(AlgorithmEngine work, int def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.isNumber()) { @@ -83,7 +83,7 @@ public int tryEvaluate(AlgorithmEngine work, int def, Function tempParameter) { + public long TryEvaluate(AlgorithmEngine work, long def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.isNumber()) { @@ -108,7 +108,7 @@ public long tryEvaluate(AlgorithmEngine work, long def, Function tempParameter) { + public float TryEvaluate(AlgorithmEngine work, float def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.isNumber()) { @@ -133,7 +133,7 @@ public float tryEvaluate(AlgorithmEngine work, float def, Function tempParameter) { + public double TryEvaluate(AlgorithmEngine work, double def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.isNumber()) { @@ -158,7 +158,7 @@ public double tryEvaluate(AlgorithmEngine work, double def, Function tempParameter) { + public String TryEvaluate(AlgorithmEngine work, String def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.isText()) { @@ -183,7 +183,7 @@ public String tryEvaluate(AlgorithmEngine work, String def, Function tempParameter) { + public boolean TryEvaluate(AlgorithmEngine work, boolean def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.isBoolean()) { @@ -209,7 +209,7 @@ public boolean tryEvaluate(AlgorithmEngine work, boolean def, Function tempParameter) { + public MyDate TryEvaluate_MyDate(AlgorithmEngine work, MyDate def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.isDate()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java index b7692c15d..2c3a1dac2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java @@ -9,7 +9,7 @@ protected Function_1(FunctionBase func1) { this.func1 = func1; } - protected void addFunction(StringBuilder stringBuilder, String functionName) { + protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(functionName); stringBuilder.append('('); func1.toString(stringBuilder, false); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java index 7284cc8fe..57125db66 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java @@ -11,7 +11,7 @@ public Function_2(FunctionBase func1, FunctionBase func2) { this.func2 = func2; } - protected void addFunction(StringBuilder stringBuilder, String functionName) { + protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(functionName); stringBuilder.append('('); func1.toString(stringBuilder, false); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java index 75c8e0f0c..db966b524 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java @@ -13,7 +13,7 @@ protected Function_3(FunctionBase func1, FunctionBase func2, FunctionBase func3) this.func3 = func3; } - protected void addFunction(StringBuilder stringBuilder, String functionName) { + protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(functionName); stringBuilder.append('('); func1.toString(stringBuilder, false); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java index 559fa34e6..f20568e2e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java @@ -15,7 +15,7 @@ protected Function_4(FunctionBase func1, FunctionBase func2, FunctionBase func3, this.func4 = func4; } - protected void addFunction(StringBuilder stringBuilder, String functionName) { + protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(functionName); stringBuilder.append('('); func1.toString(stringBuilder, false); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java index 6f65f0957..c8d9308f2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java @@ -9,7 +9,7 @@ protected Function_N(FunctionBase[] funcs) { this.funcs = funcs; } - protected void addFunction(StringBuilder stringBuilder, String functionName) { + protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(functionName); stringBuilder.append('('); for (int i = 0; i < funcs.length; i++) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java index 8d7ec655e..fd46a0ff6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java @@ -47,7 +47,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "EndsWith"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java index 8841835d3..d48bb7ecc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java @@ -17,7 +17,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { stringBuilder.append("GUID()"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java index 202fd474f..420888dbb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java @@ -51,7 +51,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Has"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java index 9c67e6ccf..729ae5951 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java @@ -51,7 +51,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "HasValue"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java index 9fcc86baa..ef6c4442f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java @@ -68,7 +68,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "IndexOf"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java index c2228a8c8..caa5a8610 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java @@ -34,7 +34,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "IsRegex"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java index c516b4f4f..1d713a0cc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java @@ -62,7 +62,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Join"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java index ea28a5ad2..4007891ce 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java @@ -66,7 +66,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "LastIndexOf"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java index 5e29c64ec..413ed6312 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java @@ -59,7 +59,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "LookCeiling"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java index 2cac7f89f..f34e50152 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java @@ -58,7 +58,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "LookFloor"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java index a8154855a..799096f4d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java @@ -40,7 +40,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Regex"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java index a74ac7aa3..8eef98847 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java @@ -41,7 +41,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "RegexReplace"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java index 147aa2865..bab1162e2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java @@ -56,7 +56,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "RemoveEnd"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java index 2fea55cc2..18ea2c2fd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java @@ -56,7 +56,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "RemoveStart"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java index c27001d99..ff54a7de9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java @@ -33,7 +33,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Split"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java index 77ddce749..9341852aa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java @@ -47,7 +47,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "StartsWith"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java index d103864c3..abd5703cd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java @@ -56,7 +56,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Substring"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java index 8b2cbc102..e57b3b3c3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java @@ -69,7 +69,7 @@ private String trimEnd(String str, char[] trimChars) { } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "TrimEnd"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java index bf290b64a..38acbfaa2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java @@ -69,7 +69,7 @@ private String trimStart(String str, char[] trimChars) { } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "TrimStart"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java index 76746d15b..9365cfb2d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java @@ -56,7 +56,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "HmacMD5"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java index 652027d1a..6198fc1ad 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java @@ -56,7 +56,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "HmacSHA1"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java index 75a0a34a5..f524cd8d4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java @@ -56,7 +56,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "HmacSHA256"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java index 9cd9612b2..68a4d1b85 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java @@ -56,7 +56,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "HmacSHA512"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java index de0807cc9..cc8878f16 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java @@ -46,7 +46,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "MD5"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java index 98cd87fb7..755315372 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java @@ -46,7 +46,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "SHA1"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java index 1e83de4b0..a3a36bf60 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java @@ -46,7 +46,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "SHA256"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java index 6212dde5c..4af610f8e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java @@ -46,7 +46,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "SHA512"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java index 8c59a4696..5c74c27c5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java @@ -16,7 +16,7 @@ public class Base64 { private static final String base64 = "===========================================+=+=/0123456789=======ABCDEFGHIJKLMNOPQRSTUVWXYZ====/=abcdefghijklmnopqrstuvwxyz====="; public static String ToBase64String(byte[] input) { - return encoder.encodeToString(input); + return encoder.encodetoString(input); } public static byte[] FromBase64String(String base64Str) { @@ -32,7 +32,7 @@ public static byte[] FromBase64String(String base64Str) { * @return Input byte array converted to a base64ForUrl encoded string */ public static String ToBase64ForUrlString(byte[] input) { - return urlEncoder.encodeToString(input); + return urlEncoder.encodetoString(input); } /** diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java index f0b874cf8..188772fc6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java @@ -45,7 +45,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Base64ToText"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java index 0d88332f9..f4c6db402 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java @@ -45,7 +45,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Base64urlToText"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java index 1ba08caaf..cc368e1db 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java @@ -27,7 +27,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "HtmlDecode"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java index 0d7f60709..108e917bf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java @@ -27,7 +27,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "HtmlEncode"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java index ba10b93ff..45a1e8b16 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java @@ -45,7 +45,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "TextToBase64"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java index 025890861..14bb3e5d9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java @@ -45,7 +45,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "TextToBase64url"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java index 5e7950c09..29489987d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java @@ -32,7 +32,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "UrlDecode"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java index 784214b1b..34a01ee42 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java @@ -32,7 +32,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "UrlEncode"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java index 26cdd5fd2..fbd5aed3f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java @@ -40,7 +40,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "AddDays"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java index 73559ec7d..6c2c6ee26 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java @@ -40,7 +40,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "AddHours"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java index f1a5110dd..0bb483fa0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java @@ -40,7 +40,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "AddMinutes"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java index 5431c2c8e..48190537e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java @@ -40,7 +40,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "AddMonths"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java index 28e58556e..0cdb98459 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java @@ -40,7 +40,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "AddSeconds"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java index 993a79fa6..478ca5fdc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java @@ -40,7 +40,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "AddYears"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java index 5fdf63c75..5e8719573 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java @@ -92,7 +92,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Date"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java index 3f03ccbf9..7874ebc29 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java @@ -101,7 +101,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "DateDif"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java index b9fdd1a47..d682d5ab4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java @@ -78,7 +78,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "DateValue"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java index 3568031aa..34a9d7523 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java @@ -29,7 +29,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Day"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java index e373056b6..27e3270a9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java @@ -117,7 +117,7 @@ private int getDaysInMonth(int year, int month) { } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Days360"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java index 09231adb1..883c63447 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java @@ -40,7 +40,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "EDate"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java index 24ab35545..93a27f1ae 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java @@ -45,7 +45,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "EoMonth"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java index ebee6e3b5..687182f69 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java @@ -26,7 +26,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Hour"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java index 39a7cf848..7049906b3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java @@ -26,7 +26,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Minute"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java index 6c4bd6bdc..46ab878ac 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java @@ -29,7 +29,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Month"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java index 36af4454b..801862c83 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java @@ -62,7 +62,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "NetWorkdays"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java index ff89bc672..4606f124a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java @@ -14,7 +14,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { stringBuilder.append("Now()"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java index eaa4598f3..8c21f9d4f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java @@ -26,7 +26,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Second"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java index ba08af1b0..13714f980 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java @@ -46,7 +46,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Time"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java index 2d8c18f16..627290cdc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java @@ -50,7 +50,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "TimeStamp"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java index ca0d1caa8..cf34fb792 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java @@ -55,7 +55,7 @@ private toolgood.algorithm.internals.MyDate parseTimeString(String timeString) { } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "TimeValue"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java index 8f9293859..cc32d1849 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java @@ -16,7 +16,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { stringBuilder.append("Today()"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index 6b88ec92f..d1ea1700d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -56,7 +56,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "WeekDay"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index 1ff33fd0c..35608e370 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -48,7 +48,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "WeekNum"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index a32094e0a..4ae62e87d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -64,7 +64,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } @Override - public void ToString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Workday"); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java index 1118792a2..dab8860e4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java @@ -25,7 +25,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "DevSQ"); + } + if (list.size() == 0) { + return Operand.Error("Function '{0}' parameter is error!", "DevSQ"); + } + + double avg = list.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); + double sum = 0; + for (double value : list) { + double diff = value - avg; + sum += diff * diff; + } + return Operand.Create(sum); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "DevSQ"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java new file mode 100644 index 000000000..330f08019 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java @@ -0,0 +1,49 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_EXPONDIST extends Function_3 { + public Function_EXPONDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "ExponDist", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "ExponDist", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (!args3.IsBoolean()) { + args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "ExponDist", 3); + if (args3.IsError()) { + return args3; + } + } + + double n1 = args1.NumberValue(); + if (n1 < 0.0) { + return Operand.Error("Function '{0}' parameter is error!", "ExponDist"); + } + return Operand.Create(ExcelFunctions.ExponDist(n1, args2.NumberValue(), args3.BooleanValue())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "ExponDist"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java new file mode 100644 index 000000000..98c4f52e6 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java @@ -0,0 +1,51 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_FDIST extends Function_3 { + public Function_FDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 3); + if (args3.IsError()) { + return args3; + } + } + + double x = args1.NumberValue(); + int degreesFreedom1 = args2.IntValue(); + int degreesFreedom2 = args3.IntValue(); + if (degreesFreedom1 <= 0 || degreesFreedom2 <= 0) { + return Operand.Error("Function '{0}' parameter is error!", "FDist"); + } + return Operand.Create(ExcelFunctions.FDist(x, degreesFreedom1, degreesFreedom2)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "FDist"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java new file mode 100644 index 000000000..e4f5ab3f2 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java @@ -0,0 +1,51 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_FINV extends Function_3 { + public Function_FINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 3); + if (args3.IsError()) { + return args3; + } + } + + double p = args1.NumberValue(); + int degreesFreedom1 = args2.IntValue(); + int degreesFreedom2 = args3.IntValue(); + if (degreesFreedom1 <= 0 || degreesFreedom2 <= 0 || p < 0.0 || p > 1.0) { + return Operand.Error("Function '{0}' parameter is error!", "FInv"); + } + return Operand.Create(ExcelFunctions.FInv(p, degreesFreedom1, degreesFreedom2)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "FInv"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java new file mode 100644 index 000000000..c1221f07d --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java @@ -0,0 +1,34 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.AlgorithmEngine; + +public class Function_FISHER extends Function_1 { + public Function_FISHER(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Fisher"); + if (args1.IsError()) { + return args1; + } + } + double x = args1.DoubleValue(); + if (x >= 1 || x <= -1) { + return Operand.Error("Function '{0}' parameter is error!", "Fisher"); + } + double n = 0.5 * Math.log((1 + x) / (1 - x)); + return Operand.Create(n); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Fisher"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java new file mode 100644 index 000000000..f99173a67 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.AlgorithmEngine; + +public class Function_FISHERINV extends Function_1 { + public Function_FISHERINV(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "FisherInv"); + if (args1.IsError()) { + return args1; + } + } + double x = args1.DoubleValue(); + double n = (Math.exp(2 * x) - 1) / (Math.exp(2 * x) + 1); + return Operand.Create(n); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "FisherInv"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java new file mode 100644 index 000000000..ae7a9b7ee --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java @@ -0,0 +1,58 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_4; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_GAMMADIST extends Function_4 { + public Function_GAMMADIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { + super(func1, func2, func3, func4); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 3); + if (args3.IsError()) { + return args3; + } + } + Operand args4 = func4.Evaluate(work, tempParameter); + if (args4.IsNotBoolean()) { + args4 = args4.ToBoolean("Function '{0}' parameter {1} is error!", "GammaDist", 4); + if (args4.IsError()) { + return args4; + } + } + double x = args1.DoubleValue(); + double alpha = args2.DoubleValue(); + double beta = args3.DoubleValue(); + boolean cumulative = args4.BooleanValue(); + if (alpha < 0.0 || beta < 0.0) { + return Operand.Error("Function '{0}' parameter is error!", "GammaDist"); + } + return Operand.Create(ExcelFunctions.GammaDist(x, alpha, beta, cumulative)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "GammaDist"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java new file mode 100644 index 000000000..68affb3bb --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java @@ -0,0 +1,50 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_GAMMAINV extends Function_3 { + public Function_GAMMAINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 3); + if (args3.IsError()) { + return args3; + } + } + double probability = args1.DoubleValue(); + double alpha = args2.DoubleValue(); + double beta = args3.DoubleValue(); + if (alpha < 0.0 || beta < 0.0 || probability < 0 || probability > 1.0) { + return Operand.Error("Function '{0}' parameter is error!", "GammaInv"); + } + return Operand.Create(ExcelFunctions.GammaInv(probability, alpha, beta)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "GammaInv"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java new file mode 100644 index 000000000..e50bcc838 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java @@ -0,0 +1,30 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_GAMMALN extends Function_1 { + public Function_GAMMALN(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "GammaLn"); + if (args1.IsError()) { + return args1; + } + } + return Operand.Create(ExcelFunctions.GAMMALN(args1.DoubleValue())); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "GammaLn"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java new file mode 100644 index 000000000..0accf9d03 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java @@ -0,0 +1,50 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.List; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionUtil; + +public class Function_GEOMEAN extends Function_N { + public Function_GEOMEAN(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "GeoMean"); + } + if (list.isEmpty()) { + return Operand.Error("Function '{0}' parameter is error!", "GeoMean"); + } + double product = 1.0; + for (double num : list) { + if (num <= 0) { + return Operand.Error("Function '{0}' parameter is error!", "GeoMean"); + } + product *= num; + } + double geoMean = Math.pow(product, 1.0 / list.size()); + return Operand.Create(geoMean); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "GeoMean"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java new file mode 100644 index 000000000..2149f255a --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java @@ -0,0 +1,54 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.List; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionUtil; + +public class Function_HARMEAN extends Function_N { + public Function_HARMEAN(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + if (args.size() == 1) { + return args.get(0); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "HarMean"); + } + + double sum = 0; + for (double db : list) { + if (db == 0) { + return Operand.Error("Function '{0}' parameter is error!", "HarMean"); + } + sum += 1 / db; + } + if (sum == 0) { + return Operand.Error("Function '{0}' parameter is error!", "HarMean"); + } + return Operand.Create(list.size() / sum); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "HarMean"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java new file mode 100644 index 000000000..4601db116 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java @@ -0,0 +1,58 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_4; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_HYPGEOMDIST extends Function_4 { + public Function_HYPGEOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { + super(func1, func2, func3, func4); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 3); + if (args3.IsError()) { + return args3; + } + } + Operand args4 = func4.Evaluate(work, tempParameter); + if (args4.IsNotNumber()) { + args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 4); + if (args4.IsError()) { + return args4; + } + } + int k = args1.IntValue(); + int draws = args2.IntValue(); + int success = args3.IntValue(); + int population = args4.IntValue(); + if (!(population >= 0 && success >= 0 && draws >= 0 && success <= population && draws <= population)) { + return Operand.Error("Function '{0}' parameter is error!", "HypgeomDist"); + } + return Operand.Create(ExcelFunctions.HypgeomDist(k, draws, success, population)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "HypgeomDist"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java new file mode 100644 index 000000000..a43bba512 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java @@ -0,0 +1,52 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionUtil; + +public class Function_LARGE extends Function_2 { + public Function_LARGE(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotArray()) { + args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Large", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Large", 2); + if (args2.IsError()) { + return args2; + } + } + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args1, list); + if (!o) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Large", 1); + } + + Collections.sort(list, Comparator.reverseOrder()); + int k = args2.IntValue(); + if (k < 1 - work.ExcelIndex() || k > list.size() - work.ExcelIndex()) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Large", 2); + } + return Operand.Create(list.get(k - work.ExcelIndex())); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Large"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java new file mode 100644 index 000000000..9bb0b755d --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java @@ -0,0 +1,49 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_LOGINV extends Function_3 { + public Function_LOGINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 3); + if (args3.IsError()) { + return args3; + } + } + + double n3 = args3.DoubleValue(); + if (n3 < 0.0) { + return Operand.Error("Function '{0}' parameter is error!", "LogInv"); + } + return Operand.Create(ExcelFunctions.LogInv(args1.DoubleValue(), args2.DoubleValue(), n3)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "LogInv"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java new file mode 100644 index 000000000..fab7de806 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java @@ -0,0 +1,49 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_LOGNORMDIST extends Function_3 { + public Function_LOGNORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 3); + if (args3.IsError()) { + return args3; + } + } + + double n3 = args3.DoubleValue(); + if (n3 < 0.0) { + return Operand.Error("Function '{0}' parameter is error!", "LognormDist"); + } + return Operand.Create(ExcelFunctions.LognormDist(args1.DoubleValue(), args2.DoubleValue(), n3)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "LognormDist"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java new file mode 100644 index 000000000..ac5d10867 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java @@ -0,0 +1,41 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionUtil; + +public class Function_MAX extends Function_N { + public Function_MAX(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Max"); + } + + return Operand.Create(Collections.max(list)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Max"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java new file mode 100644 index 000000000..65f2db9f8 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionUtil; + +public class Function_MEDIAN extends Function_N { + public Function_MEDIAN(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Median"); + } + if (list.isEmpty()) { + return Operand.Error("Function '{0}' parameter is error!", "Median"); + } + + Collections.sort(list); + return Operand.Create(list.get(list.size() / 2)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Median"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java new file mode 100644 index 000000000..7d09ee902 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java @@ -0,0 +1,41 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionUtil; + +public class Function_MIN extends Function_N { + public Function_MIN(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Min"); + } + + return Operand.Create(Collections.min(list)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Min"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java new file mode 100644 index 000000000..9fa285805 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java @@ -0,0 +1,50 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionUtil; + +public class Function_MODE extends Function_N { + public Function_MODE(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Mode"); + } + + Map dict = new HashMap<>(); + for (double item : list) { + dict.put(item, dict.getOrDefault(item, 0) + 1); + } + + Map.Entry maxEntry = Collections.max(dict.entrySet(), Comparator.comparingInt(Map.Entry::getValue)); + return Operand.Create(maxEntry.getKey()); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Mode"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java new file mode 100644 index 000000000..0b872edc7 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java @@ -0,0 +1,51 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_NEGBINOMDIST extends Function_3 { + public Function_NEGBINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 3); + if (args3.IsError()) { + return args3; + } + } + int k = args1.IntValue(); + double r = args2.DoubleValue(); + double p = args3.DoubleValue(); + + if (!(r >= 0.0 && p >= 0.0 && p <= 1.0)) { + return Operand.Error("Function '{0}' parameter is error!", "NegbinomDist"); + } + return Operand.Create(ExcelFunctions.NegbinomDist(k, r, p)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "NegbinomDist"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java new file mode 100644 index 000000000..e25853981 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java @@ -0,0 +1,56 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_4; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_NORMDIST extends Function_4 { + public Function_NORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { + super(func1, func2, func3, func4); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 3); + if (args3.IsError()) { + return args3; + } + } + Operand args4 = func4.Evaluate(work, tempParameter); + if (args4.IsNotBoolean()) { + args4 = args4.ToBoolean("Function '{0}' parameter {1} is error!", "NormDist", 4); + if (args4.IsError()) { + return args4; + } + } + + double num = args1.DoubleValue(); + double avg = args2.DoubleValue(); + double STDEV = args3.DoubleValue(); + boolean b = args4.BooleanValue(); + return Operand.Create(ExcelFunctions.NormDist(num, avg, STDEV, b)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "NormDist"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java new file mode 100644 index 000000000..86ede7b1e --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java @@ -0,0 +1,47 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_NORMINV extends Function_3 { + public Function_NORMINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsNotNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 3); + if (args3.IsError()) { + return args3; + } + } + double p = args1.DoubleValue(); + double avg = args2.DoubleValue(); + double STDEV = args3.DoubleValue(); + return Operand.Create(ExcelFunctions.NormInv(p, avg, STDEV)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "NormInv"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java new file mode 100644 index 000000000..d1ec426e5 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_NORMSDIST extends Function_1 { + public Function_NORMSDIST(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "NormSDist"); + if (args1.IsError()) { + return args1; + } + } + double num = args1.DoubleValue(); + return Operand.Create(ExcelFunctions.NormSDist(num)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "NormSDist"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java new file mode 100644 index 000000000..51296ffdf --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_1; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_NORMSINV extends Function_1 { + public Function_NORMSINV(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "NormSInv"); + if (args1.IsError()) { + return args1; + } + } + double p = args1.DoubleValue(); + return Operand.Create(ExcelFunctions.NormSInv(p)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "NormSInv"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java index 522760960..221ba4099 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java @@ -30,6 +30,6 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function 0) { stringBuilder.append(", "); } - funcs[i].ToString(stringBuilder, false); + funcs[i].toString(stringBuilder, false); } stringBuilder.append('}'); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java index fed1ebc43..367ed4d64 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java @@ -22,9 +22,9 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction Date: Sun, 1 Feb 2026 07:34:58 +0800 Subject: [PATCH 15/98] fix --- .../java/toolgood/algorithm/OperandImpl.java | 2 +- .../internals/functions/FunctionBase.java | 34 +++++----- .../internals/functions/FunctionUtil.java | 24 +++---- .../functions/compare/Function_EQ.java | 14 ++--- .../functions/compare/Function_GE.java | 14 ++--- .../functions/compare/Function_GT.java | 14 ++--- .../functions/compare/Function_LE.java | 14 ++--- .../functions/compare/Function_LT.java | 14 ++--- .../functions/compare/Function_NE.java | 14 ++--- .../functions/datetimes/Function_ADDDAYS.java | 4 +- .../datetimes/Function_ADDHOURS.java | 4 +- .../datetimes/Function_ADDMINUTES.java | 4 +- .../datetimes/Function_ADDMONTHS.java | 4 +- .../datetimes/Function_ADDSECONDS.java | 4 +- .../datetimes/Function_ADDYEARS.java | 4 +- .../functions/datetimes/Function_DATE.java | 18 +++--- .../functions/datetimes/Function_DATEDIF.java | 6 +- .../datetimes/Function_DATEVALUE.java | 6 +- .../functions/datetimes/Function_DAY.java | 2 +- .../functions/datetimes/Function_DAYS360.java | 8 +-- .../functions/datetimes/Function_EDATE.java | 4 +- .../functions/datetimes/Function_EOMONTH.java | 4 +- .../functions/datetimes/Function_HOUR.java | 2 +- .../functions/datetimes/Function_MINUTE.java | 2 +- .../functions/datetimes/Function_MONTH.java | 2 +- .../datetimes/Function_NETWORKDAYS.java | 6 +- .../functions/datetimes/Function_SECOND.java | 2 +- .../functions/datetimes/Function_TIME.java | 6 +- .../datetimes/Function_TIMESTAMP.java | 6 +- .../datetimes/Function_TIMEVALUE.java | 2 +- .../functions/datetimes/Function_WEEKDAY.java | 4 +- .../functions/datetimes/Function_WEEKNUM.java | 4 +- .../functions/datetimes/Function_WORKDAY.java | 6 +- .../functions/flow/Function_ISERROR.java | 4 +- .../functions/flow/Function_ISNUMBER.java | 4 +- .../mathsum/Function_PERCENTILE.java | 47 ++++++++++++++ .../mathsum/Function_PERCENTRANK.java | 62 +++++++++++++++++++ .../functions/mathsum/Function_POISSON.java | 52 ++++++++++++++++ .../functions/mathsum/Function_QUARTILE.java | 53 ++++++++++++++++ .../functions/mathsum/Function_SMALL.java | 62 +++++++++++++++++++ .../functions/mathsum/Function_STDEV.java | 49 +++++++++++++++ .../mathtrigonometric/Function_ACOS.java | 4 +- .../mathtrigonometric/Function_ACOSH.java | 4 +- .../mathtrigonometric/Function_ASIN.java | 4 +- .../mathtrigonometric/Function_ASINH.java | 4 +- .../mathtrigonometric/Function_ATAN.java | 4 +- .../mathtrigonometric/Function_ATAN2.java | 8 +-- .../mathtrigonometric/Function_ATANH.java | 4 +- .../mathtrigonometric/Function_COS.java | 4 +- .../mathtrigonometric/Function_COSH.java | 4 +- .../mathtrigonometric/Function_COT.java | 4 +- .../mathtrigonometric/Function_CSC.java | 4 +- .../mathtrigonometric/Function_DEGREES.java | 4 +- .../mathtrigonometric/Function_RADIANS.java | 4 +- .../mathtrigonometric/Function_SEC.java | 4 +- .../mathtrigonometric/Function_SIN.java | 4 +- .../mathtrigonometric/Function_SINH.java | 4 +- .../mathtrigonometric/Function_TAN.java | 4 +- .../mathtrigonometric/Function_TANH.java | 4 +- .../functions/string/Function_TRIM.java | 2 +- .../functions/string/Function_UPPER.java | 2 +- .../functions/string/Function_VALUE.java | 4 +- .../internals/visitors/DiyNameVisitor.java | 4 +- .../internals/visitors/MathSplitVisitor.java | 4 +- .../toolgood/algorithm/math/mathLexer.java | 10 +-- .../toolgood/algorithm/math/mathParser.java | 48 +++++++------- .../toolgood/algorithm/math/mathVisitor.java | 8 +-- .../algorithm/Tests/AlgorithmEngineTest.java | 2 +- .../Tests/AlgorithmEngineTest_flow.java | 16 ++--- .../Tests/AlgorithmEngineTest_string.java | 2 +- 70 files changed, 547 insertions(+), 222 deletions(-) create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java diff --git a/java/src/main/java/toolgood/algorithm/OperandImpl.java b/java/src/main/java/toolgood/algorithm/OperandImpl.java index c604b0965..0ebf48666 100644 --- a/java/src/main/java/toolgood/algorithm/OperandImpl.java +++ b/java/src/main/java/toolgood/algorithm/OperandImpl.java @@ -427,7 +427,7 @@ public Operand ToArray(String errorMessage) { list.add(Operand.Create(v.getString())); } else if (v.isBoolean()) { list.add(Operand.Create(v.getBoolean())); - } else if (v.isNumber()) { + } else if (v.IsNumber()) { list.add(Operand.Create(new BigDecimal(v.getNumber().toString()))); } else if (v.isNull()) { list.add(Operand.CreateNull()); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index 2d1f7eb0c..7ea7afa65 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -10,8 +10,8 @@ import java.lang.StringBuilder; import java.util.function.Function; import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; public abstract class FunctionBase { /** @@ -36,14 +36,14 @@ public abstract class FunctionBase { public short TryEvaluate(AlgorithmEngine work, short def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); - if (!obj.isNumber()) { + if (!obj.IsNumber()) { obj = obj.toNumber("It can't be converted to number!"); - if (obj.isError()) { - work.setLastError(obj.getErrorMsg()); + if (obj.IsError()) { + work.setLastError(obj.ErrorMsg()); return def; } } - return (short) obj.getIntValue(); + return (short) obj.IntValue(); } catch (Exception ex) { work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); } @@ -61,9 +61,9 @@ public short TryEvaluate(AlgorithmEngine work, short def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); - if (!obj.isNumber()) { + if (!obj.IsNumber()) { obj = obj.toNumber("It can't be converted to number!"); - if (obj.isError()) { + if (obj.IsError()) { work.setLastError(obj.getErrorMsg()); return def; } @@ -86,9 +86,9 @@ public int TryEvaluate(AlgorithmEngine work, int def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); - if (!obj.isNumber()) { + if (!obj.IsNumber()) { obj = obj.toNumber("It can't be converted to number!"); - if (obj.isError()) { + if (obj.IsError()) { work.setLastError(obj.getErrorMsg()); return def; } @@ -111,9 +111,9 @@ public long TryEvaluate(AlgorithmEngine work, long def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); - if (!obj.isNumber()) { + if (!obj.IsNumber()) { obj = obj.toNumber("It can't be converted to number!"); - if (obj.isError()) { + if (obj.IsError()) { work.setLastError(obj.getErrorMsg()); return def; } @@ -136,9 +136,9 @@ public float TryEvaluate(AlgorithmEngine work, float def, Function tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); - if (!obj.isNumber()) { + if (!obj.IsNumber()) { obj = obj.toNumber("It can't be converted to number!"); - if (obj.isError()) { + if (obj.IsError()) { work.setLastError(obj.getErrorMsg()); return def; } @@ -163,7 +163,7 @@ public String TryEvaluate(AlgorithmEngine work, String def, Function args, List list) { for (Operand item : args) { - if (item.isNumber()) { + if (item.IsNumber()) { list.add(item.getDoubleValue()); } else if (item.isArray()) { boolean o = F_base_GetList(item.getArrayValue(), list); @@ -22,7 +22,7 @@ public static boolean F_base_GetList(List args, List list) { } } else if (item.isJson()) { Operand i = item.toArray(null); - if (i.isError()) { + if (i.IsError()) { return false; } boolean o = F_base_GetList(i.getArrayValue(), list); @@ -31,7 +31,7 @@ public static boolean F_base_GetList(List args, List list) { } } else { Operand o = item.toNumber(null); - if (o.isError()) { + if (o.IsError()) { return false; } list.add(o.getDoubleValue()); @@ -41,10 +41,10 @@ public static boolean F_base_GetList(List args, List list) { } public static boolean F_base_GetList(Operand args, List list) { - if (args.isError()) { + if (args.IsError()) { return false; } - if (args.isNumber()) { + if (args.IsNumber()) { list.add(args.getDoubleValue()); } else if (args.isArray()) { boolean o = F_base_GetList(args.getArrayValue(), list); @@ -53,7 +53,7 @@ public static boolean F_base_GetList(Operand args, List list) { } } else if (args.isJson()) { Operand i = args.toArray(null); - if (i.isError()) { + if (i.IsError()) { return false; } boolean o = F_base_GetList(i.getArrayValue(), list); @@ -62,7 +62,7 @@ public static boolean F_base_GetList(Operand args, List list) { } } else { Operand o = args.toNumber(null); - if (o.isError()) { + if (o.IsError()) { return false; } list.add(o.getDoubleValue()); @@ -79,7 +79,7 @@ public static boolean F_base_GetList(List args, List list) { } } else if (item.isJson()) { Operand i = item.toArray(null); - if (i.isError()) { + if (i.IsError()) { return false; } boolean o = F_base_GetList(i.getArrayValue(), list); @@ -88,7 +88,7 @@ public static boolean F_base_GetList(List args, List list) { } } else { Operand o = item.toText(null); - if (o.isError()) { + if (o.IsError()) { return false; } list.add(o.getTextValue()); @@ -98,7 +98,7 @@ public static boolean F_base_GetList(List args, List list) { } public static boolean F_base_GetList(Operand args, List list) { - if (args.isError()) { + if (args.IsError()) { return false; } if (args.isArray()) { @@ -108,7 +108,7 @@ public static boolean F_base_GetList(Operand args, List list) { } } else if (args.isJson()) { Operand i = args.toArray(null); - if (i.isError()) { + if (i.IsError()) { return false; } boolean o = F_base_GetList(i.getArrayValue(), list); @@ -117,7 +117,7 @@ public static boolean F_base_GetList(Operand args, List list) { } } else { Operand o = args.toText(null); - if (o.isError()) { + if (o.IsError()) { return false; } list.add(o.getTextValue()); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java index aa8884ffa..08b2f32bf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java @@ -12,11 +12,11 @@ public Function_EQ(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); if(args1.isError()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); if(args2.isError()) { return args2; } + Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } + Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } if(args1.getType() == args2.getType()) { - if(args1.isNumber()) { + if(args1.IsNumber()) { return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) == 0); } else if(args1.isText()) { return Operand.Create(args1.getTextValue().equals(args2.getTextValue())); @@ -40,12 +40,12 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); if(args1.isError()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); if(args2.isError()) { return args2; } + Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } + Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } if(args1.getType() == args2.getType()) { - if(args1.isNumber()) { + if(args1.IsNumber()) { return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); } else if(args1.isText()) { int r = args1.getTextValue().compareTo(args2.getTextValue()); @@ -40,13 +40,13 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function= 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.isDate() || args1.isNumber() || args1.isJson()) { + } else if(args1.isDate() || args1.IsNumber() || args1.isJson()) { args1 = args1.toText(null); int r = args1.getTextValue().compareTo(args2.getTextValue()); return r >= 0 ? Operand.TRUE : Operand.FALSE; @@ -56,8 +56,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function="); } - if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", ">=", 1); if(args1.isError()) { return args1; } } - if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", ">=", 2); if(args2.isError()) { return args2; } } + if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", ">=", 1); if(args1.IsError()) { return args1; } } + if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", ">=", 2); if(args2.IsError()) { return args2; } } return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java index d999a58f9..aab5652fd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java @@ -12,11 +12,11 @@ public Function_GT(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); if(args1.isError()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); if(args2.isError()) { return args2; } + Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } + Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } if(args1.getType() == args2.getType()) { - if(args1.isNumber()) { + if(args1.IsNumber()) { return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); } else if(args1.isText()) { int r = args1.getTextValue().compareTo(args2.getTextValue()); @@ -40,13 +40,13 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.isDate() || args1.isNumber() || args1.isJson()) { + } else if(args1.isDate() || args1.IsNumber() || args1.isJson()) { args1 = args1.toText(null); int r = args1.getTextValue().compareTo(args2.getTextValue()); return r > 0 ? Operand.TRUE : Operand.FALSE; @@ -56,8 +56,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function"); } - if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", ">", 1); if(args1.isError()) { return args1; } } - if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", ">", 2); if(args2.isError()) { return args2; } } + if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", ">", 1); if(args1.IsError()) { return args1; } } + if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", ">", 2); if(args2.IsError()) { return args2; } } return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java index 86558d1f5..e61ca543d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java @@ -12,11 +12,11 @@ public Function_LE(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); if(args1.isError()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); if(args2.isError()) { return args2; } + Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } + Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } if(args1.getType() == args2.getType()) { - if(args1.isNumber()) { + if(args1.IsNumber()) { return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) <= 0); } else if(args1.isText()) { int r = args1.getTextValue().compareTo(args2.getTextValue()); @@ -40,13 +40,13 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); if(args1.isError()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); if(args2.isError()) { return args2; } + Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } + Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } if(args1.getType() == args2.getType()) { - if(args1.isNumber()) { + if(args1.IsNumber()) { return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) != 0); } else if(args1.isText()) { return Operand.Create(!args1.getTextValue().equals(args2.getTextValue())); @@ -40,12 +40,12 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddHours", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddHours", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java index 0bb483fa0..c9157861f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java @@ -17,14 +17,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddMinutes", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddMinutes", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java index 48190537e..0a4d4fde5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java @@ -17,14 +17,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddMonths", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddMonths", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java index 0cdb98459..7c9eca22d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java @@ -17,14 +17,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddSeconds", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddSeconds", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java index 478ca5fdc..911257deb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java @@ -17,14 +17,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddYears", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddYears", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java index 5e8719573..c3ddb28e8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java @@ -17,21 +17,21 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = funcs[0].Evaluate(work, tempParameter); if (args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Date", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = funcs[1].Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Date", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } Operand args3 = funcs[2].Evaluate(work, tempParameter); if (args3.isNotNumber()) { args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "Date", 3); - if (args3.isError()) { + if (args3.IsError()) { return args3; } } @@ -43,7 +43,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args4 = funcs[3].Evaluate(work, tempParameter); if (args4.isNotNumber()) { args4 = args4.toNumber("Function '{0}' parameter {1} is error!", "Date", 4); - if (args4.isError()) { + if (args4.IsError()) { return args4; } } @@ -52,14 +52,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args4 = funcs[3].Evaluate(work, tempParameter); if (args4.isNotNumber()) { args4 = args4.toNumber("Function '{0}' parameter {1} is error!", "Date", 4); - if (args4.isError()) { + if (args4.IsError()) { return args4; } } Operand args5 = funcs[4].Evaluate(work, tempParameter); if (args5.isNotNumber()) { args5 = args5.toNumber("Function '{0}' parameter {1} is error!", "Date", 5); - if (args5.isError()) { + if (args5.IsError()) { return args5; } } @@ -68,21 +68,21 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args4 = funcs[3].Evaluate(work, tempParameter); if (args4.isNotNumber()) { args4 = args4.toNumber("Function '{0}' parameter {1} is error!", "Date", 4); - if (args4.isError()) { + if (args4.IsError()) { return args4; } } Operand args5 = funcs[4].Evaluate(work, tempParameter); if (args5.isNotNumber()) { args5 = args5.toNumber("Function '{0}' parameter {1} is error!", "Date", 5); - if (args5.isError()) { + if (args5.IsError()) { return args5; } } Operand args6 = funcs[5].Evaluate(work, tempParameter); if (args6.isNotNumber()) { args6 = args6.toNumber("Function '{0}' parameter {1} is error!", "Date", 6); - if (args6.isError()) { + if (args6.IsError()) { return args6; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java index 7874ebc29..6385aeb06 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java @@ -17,21 +17,21 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "DateDif", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotDate()) { args2 = args2.toMyDate("Function '{0}' parameter {1} is error!", "DateDif", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.isNotText()) { args3 = args3.toText("Function '{0}' parameter {1} is error!", "DateDif", 3); - if (args3.isError()) { + if (args3.IsError()) { return args3; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java index d682d5ab4..368498113 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java @@ -19,7 +19,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); - if (aa.isError()) { + if (aa.IsError()) { return aa; } args.add(aa); @@ -30,7 +30,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara int type = 0; if (args.size() == 2) { Operand args2 = args.get(1).toNumber("Function '{0}' parameter {1} is error!", "DateValue", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } type = args2.getIntValue(); @@ -56,7 +56,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / (86400.0 * 1000.0))); } else if (type == 1) { Operand args1 = args.get(0).toText("Function '{0}' parameter {1} is error!", "DateValue", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } toolgood.algorithm.internals.MyDate date = toolgood.algorithm.internals.MyDate.parse(args1.getTextValue()); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java index 34a9d7523..41631852e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java @@ -17,7 +17,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter is error!", "Day"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java index 27e3270a9..cc6d03eb2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java @@ -17,14 +17,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "Days360", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotDate()) { args2 = args2.toMyDate("Function '{0}' parameter {1} is error!", "Days360", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } @@ -37,11 +37,11 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args3 = func3.Evaluate(work, tempParameter); if (args3.isNotBoolean()) { args3 = args3.toBoolean("Function '{0}' parameter {1} is error!", "Days360", 3); - if (args3.isError()) { + if (args3.IsError()) { return args3; } } - if (args3.isError()) { + if (args3.IsError()) { return args3; } method = args3.getBooleanValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java index 883c63447..4dc3ba5bf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java @@ -17,14 +17,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "EDate", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "EDate", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java index 93a27f1ae..fef20906f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java @@ -17,14 +17,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "EoMonth", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "EoMonth", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java index 687182f69..a57d5c174 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java @@ -17,7 +17,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter is error!", "Hour"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java index 7049906b3..c31844b53 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java @@ -17,7 +17,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter is error!", "Minute"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java index 46ab878ac..6ea973e62 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java @@ -17,7 +17,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter is error!", "Month"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java index 801862c83..5f745f6cc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java @@ -18,14 +18,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = funcs[0].Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = funcs[1].Evaluate(work, tempParameter); if (args2.isNotDate()) { args2 = args2.toMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } @@ -38,7 +38,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand ar = funcs[i].Evaluate(work, tempParameter); if (ar.isNotDate()) { ar = ar.toMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", i + 1); - if (ar.isError()) { + if (ar.IsError()) { return ar; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java index 8c21f9d4f..26ae0ea91 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java @@ -17,7 +17,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter is error!", "Second"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java index 13714f980..8ae88d525 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java @@ -17,14 +17,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Time", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Time", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } @@ -34,7 +34,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args3 = func3.Evaluate(work, tempParameter); if (args3.isNotNumber()) { args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "Time", 3); - if (args3.isError()) { + if (args3.IsError()) { return args3; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java index 627290cdc..bdf432605 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java @@ -15,7 +15,7 @@ public Function_TIMESTAMP(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args0 = func1.Evaluate(work, tempParameter); - if (args0.isError()) { + if (args0.IsError()) { return args0; } @@ -24,14 +24,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "TimeStamp", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } type = args2.getIntValue(); } Operand dateOperand = args0.toMyDate("Function '{0}' parameter {1} is error!", "TimeStamp", 1); - if (dateOperand.isError()) { + if (dateOperand.IsError()) { return dateOperand; } toolgood.algorithm.internals.MyDate myDate = dateOperand.getDateValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java index cf34fb792..5bb566f31 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java @@ -19,7 +19,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotText()) { args1 = args1.toText("Function '{0}' parameter is error!", "TimeValue"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index d1ea1700d..eb85a0325 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -17,7 +17,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "WeekDay", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } @@ -27,7 +27,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "WeekDay", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index 35608e370..c9f3bdabc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -17,7 +17,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "WeekNum", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } @@ -34,7 +34,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "WeekNum", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index 4ae62e87d..38e612692 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -18,14 +18,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand args1 = funcs[0].Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "Workday", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = funcs[1].Evaluate(work, tempParameter); if (args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Workday", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } @@ -38,7 +38,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara Operand ar = funcs[i].Evaluate(work, tempParameter); if (ar.isNotDate()) { ar = ar.toMyDate("Function '{0}' parameter {1} is error!", "Workday", i + 1); - if (ar.isError()) { + if (ar.IsError()) { return ar; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java index e15487554..abd22d641 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java @@ -4,8 +4,8 @@ import toolgood.algorithm.Internals.AlgorithmEngine; import toolgood.algorithm.internals.FunctionBase; -public class Function_ISERROR extends Function_2 { - public Function_ISERROR(FunctionBase func1, FunctionBase func2) { +public class Function_IsError extends Function_2 { + public Function_IsError(FunctionBase func1, FunctionBase func2) { super(func1, func2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java index 0e71a4895..8b5aae082 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java @@ -4,8 +4,8 @@ import toolgood.algorithm.Internals.AlgorithmEngine; import toolgood.algorithm.internals.FunctionBase; -public class Function_ISNUMBER extends Function_1 { - public Function_ISNUMBER(FunctionBase func1) { +public class Function_IsNumber extends Function_1 { + public Function_IsNumber(FunctionBase func1) { super(func1); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java new file mode 100644 index 000000000..ff4ade9c2 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java @@ -0,0 +1,47 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.List; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.FunctionUtil; +import toolgood.algorithm.mathNet.ExcelFunctions; + +public class Function_PERCENTILE extends Function_2 { + public Function_PERCENTILE(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotArray()) { + args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Percentile", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Percentile", 2); + if (args2.IsError()) { + return args2; + } + } + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args1, list); + if (!o) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Percentile", 1); + } + double k = args2.DoubleValue(); + double[] array = list.stream().mapToDouble(Double::doubleValue).toArray(); + return Operand.Create(ExcelFunctions.Percentile(array, k)); + } + + @Override + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Percentile"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java new file mode 100644 index 000000000..9cdb33f93 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java @@ -0,0 +1,62 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.List; +import java.util.function.Function; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.OperandType; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.mathnet.ExcelFunctions; + +public class Function_PERCENTRANK extends Function_3 { + public Function_PERCENTRANK(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.getOperandType() != OperandType.Array) { + args1 = args1.toArray("Function '{0}' parameter {1} is error!", "PercentRank", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.getOperandType() != OperandType.Number) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "PercentRank", 2); + if (args2.IsError()) { + return args2; + } + } + + List list = new java.util.ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args1, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "PercentRank"); + } + + double k = args2.getDoubleValue(); + double[] array = list.stream().mapToDouble(Double::doubleValue).toArray(); + double v = ExcelFunctions.PercentRank(array, k); + int d = 3; + if (func3 != null) { + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.getOperandType() != OperandType.Number) { + args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "PercentRank", 3); + if (args3.IsError()) { + return args3; + } + } + d = args3.getIntValue(); + } + return Operand.Create(Math.round(v * Math.pow(10, d)) / Math.pow(10, d)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "PercentRank"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java new file mode 100644 index 000000000..f23d43847 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java @@ -0,0 +1,52 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.function.Function; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.OperandType; +import toolgood.algorithm.mathnet.ExcelFunctions; + +public class Function_POISSON extends Function_3 { + public Function_POISSON(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.getOperandType() != OperandType.Number) { + args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Poisson", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.getOperandType() != OperandType.Number) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Poisson", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.getOperandType() != OperandType.Boolean) { + args3 = args3.toBoolean("Function '{0}' parameter {1} is error!", "Poisson", 3); + if (args3.IsError()) { + return args3; + } + } + int k = args1.getIntValue(); + double lambda = args2.getDoubleValue(); + boolean state = args3.getBooleanValue(); + if (!(lambda > 0.0)) { + return Operand.Error("Function '{0}' parameter is error!", "Poisson"); + } + return Operand.Create(ExcelFunctions.Poisson(k, lambda, state)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Poisson"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java new file mode 100644 index 000000000..98a81a2e6 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java @@ -0,0 +1,53 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.List; +import java.util.function.Function; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.OperandType; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.mathnet.ExcelFunctions; + +public class Function_QUARTILE extends Function_2 { + public Function_QUARTILE(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.getOperandType() != OperandType.Array) { + args1 = args1.toArray("Function '{0}' parameter {1} is error!", "Quartile", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.getOperandType() != OperandType.Number) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Quartile", 2); + if (args2.isError()) { + return args2; + } + } + + List list = new java.util.ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args1, list); + if (!o) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Quartile", 1); + } + + int quant = args2.getIntValue(); + if (quant < 0 || quant > 4) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Quartile", 2); + } + double[] array = list.stream().mapToDouble(Double::doubleValue).toArray(); + return Operand.Create(ExcelFunctions.Quartile(array, quant)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Quartile"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java new file mode 100644 index 000000000..20df47c8a --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -0,0 +1,62 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.List; +import java.util.function.Function; +import java.util.stream.Collectors; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.OperandType; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_SMALL extends Function_2 { + public Function_SMALL(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.getOperandType() != OperandType.Array) { + args1 = args1.toArray("Function '{0}' parameter {1} is error!", "Small", 1); + if (args1.isError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.getOperandType() != OperandType.Number) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Small", 2); + if (args2.isError()) { + return args2; + } + } + + List list = new java.util.ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args1, list); + if (!o) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Small", 1); + } + + list = list.stream().sorted().collect(Collectors.toList()); + int k = args2.getIntValue(); + int excelIndex = 0; // 假设默认Excel索引为0 + try { + // 尝试获取ExcelIndex属性 + java.lang.reflect.Field field = work.getClass().getField("ExcelIndex"); + excelIndex = field.getInt(work); + } catch (Exception e) { + // 如果获取失败,使用默认值0 + } + + if (k < 1 - excelIndex || k > list.size() - excelIndex) { + return Operand.Error("Function '{0}' parameter {1} is error!", "Small", 2); + } + return Operand.Create(list.get(k - excelIndex)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Small"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java new file mode 100644 index 000000000..9dd68b493 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java @@ -0,0 +1,49 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_STDEV extends Function_N { + public Function_STDEV(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.isError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Stdev"); + } + if (list.size() == 0) { + return Operand.Error("Function '{0}' parameter is error!", "Stdev"); + } + + double avg = list.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); + double sum = 0; + for (int i = 0; i < list.size(); i++) { + sum += Math.pow(list.get(i) - avg, 2); + } + return Operand.Create(Math.sqrt(sum / (list.size() - 1))); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + addFunction(stringBuilder, "Stdev"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java index 22bda8a98..d8edb5e09 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java @@ -15,9 +15,9 @@ public Function_ACOS(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Acos"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java index 8409c9ee9..a56c1bc79 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java @@ -15,9 +15,9 @@ public Function_ACOSH(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Acosh"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java index 9803e15d6..552ef2f9f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java @@ -15,9 +15,9 @@ public Function_ASIN(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Asin"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java index 509d16753..048a47a07 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java @@ -15,9 +15,9 @@ public Function_ASINH(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Asinh"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java index f248a4c55..86291b719 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java @@ -15,9 +15,9 @@ public Function_ATAN(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Atan"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java index 154afd6e9..6c9122049 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java @@ -15,16 +15,16 @@ public Function_ATAN2(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Atan2"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (!args2.isNumber()) { + if (!args2.IsNumber()) { args2 = args2.toNumber("Function '{0}' parameter is error!", "Atan2"); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java index 974baa8dd..e76130dd2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java @@ -15,9 +15,9 @@ public Function_ATANH(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Atanh"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java index ac228bbea..2a17ca501 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java @@ -15,9 +15,9 @@ public Function_COS(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Cos"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java index eb4537e51..f40c0fbe2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java @@ -15,9 +15,9 @@ public Function_COSH(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Cosh"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java index 91bb78e33..abdc524fb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java @@ -15,9 +15,9 @@ public Function_COT(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Cot"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java index 5b554db6f..2898532b4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java @@ -15,9 +15,9 @@ public Function_CSC(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Csc"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java index 2cda520be..7d5017579 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java @@ -15,9 +15,9 @@ public Function_DEGREES(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Degrees"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java index 689391677..cf9fc921e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java @@ -15,9 +15,9 @@ public Function_RADIANS(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Radians"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java index fb342953d..3cbefa559 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java @@ -15,9 +15,9 @@ public Function_SEC(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Sec"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java index 46baaa10e..65e9a6f2e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java @@ -15,9 +15,9 @@ public Function_SIN(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Sin"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java index 9091a846b..b3b25783a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java @@ -15,9 +15,9 @@ public Function_SINH(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Sinh"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java index c2f3d6c96..64ef1b330 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java @@ -15,9 +15,9 @@ public Function_TAN(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Tan"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java index 2542ceb02..a67f76a8c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java @@ -15,9 +15,9 @@ public Function_TANH(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.isNumber()) { + if (!args1.IsNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Tanh"); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java index 59c4699ff..b88667aff 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java @@ -15,7 +15,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNumber()) { + if (args1.IsNumber()) { return args1; } if (args1.isBoolean()) { @@ -25,7 +25,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction'", "'>='", "'<'", "'<='", "'='", "'=='", "'==='", "'!=='", "'!='", "'<>'", "'&&'", "'||'", "'?'", "':'", "'{'", "'}'", - "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'ISNUMBER'", - "'ISTEXT'", "'ISERROR'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", + "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'IsNumber'", + "'ISTEXT'", "'IsError'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", @@ -153,7 +153,7 @@ private static String[] makeSymbolicNames() { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "SUB", "NUM", "STRING", "NULL", "ERROR", - "UNIT", "IF", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", "ISNONTEXT", + "UNIT", "IF", "IFERROR", "IsNumber", "ISTEXT", "IsError", "ISNONTEXT", "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", diff --git a/java/src/main/java/toolgood/algorithm/math/mathParser.java b/java/src/main/java/toolgood/algorithm/math/mathParser.java index cb0218c31..a5f03082e 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathParser.java +++ b/java/src/main/java/toolgood/algorithm/math/mathParser.java @@ -21,7 +21,7 @@ public class mathParser extends Parser { T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, SUB=29, NUM=30, STRING=31, NULL=32, - ERROR=33, UNIT=34, IF=35, IFERROR=36, ISNUMBER=37, ISTEXT=38, ISERROR=39, + ERROR=33, UNIT=34, IF=35, IFERROR=36, IsNumber=37, ISTEXT=38, IsError=39, ISNONTEXT=40, ISLOGICAL=41, ISEVEN=42, ISODD=43, ISNULL=44, ISNULLORERROR=45, AND=46, OR=47, NOT=48, TRUE=49, FALSE=50, E=51, PI=52, DEC2BIN=53, DEC2HEX=54, DEC2OCT=55, HEX2BIN=56, HEX2DEC=57, HEX2OCT=58, OCT2BIN=59, OCT2DEC=60, @@ -72,8 +72,8 @@ private static String[] makeLiteralNames() { null, "'.'", "'('", "')'", "','", "'['", "']'", "'!'", "'%'", "'*'", "'/'", "'+'", "'&'", "'>'", "'>='", "'<'", "'<='", "'='", "'=='", "'==='", "'!=='", "'!='", "'<>'", "'&&'", "'||'", "'?'", "':'", "'{'", "'}'", - "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'ISNUMBER'", - "'ISTEXT'", "'ISERROR'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", + "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'IsNumber'", + "'ISTEXT'", "'IsError'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", @@ -113,7 +113,7 @@ private static String[] makeSymbolicNames() { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "SUB", "NUM", "STRING", "NULL", "ERROR", - "UNIT", "IF", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", "ISNONTEXT", + "UNIT", "IF", "IFERROR", "IsNumber", "ISTEXT", "IsError", "ISNONTEXT", "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", @@ -839,18 +839,18 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class ISERROR_funContext extends ExprContext { - public TerminalNode ISERROR() { return getToken(mathParser.ISERROR, 0); } + public static class IsError_funContext extends ExprContext { + public TerminalNode IsError() { return getToken(mathParser.IsError, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public ISERROR_funContext(ExprContext ctx) { copyFrom(ctx); } + public IsError_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitISERROR_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitIsError_fun(this); else return visitor.visitChildren(this); } } @@ -2394,15 +2394,15 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class ISNUMBER_funContext extends ExprContext { - public TerminalNode ISNUMBER() { return getToken(mathParser.ISNUMBER, 0); } + public static class IsNumber_funContext extends ExprContext { + public TerminalNode IsNumber() { return getToken(mathParser.IsNumber, 0); } public ExprContext expr() { return getRuleContext(ExprContext.class,0); } - public ISNUMBER_funContext(ExprContext ctx) { copyFrom(ctx); } + public IsNumber_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitISNUMBER_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitIsNumber_fun(this); else return visitor.visitChildren(this); } } @@ -3785,11 +3785,11 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 5: { - _localctx = new ISNUMBER_funContext(_localctx); + _localctx = new IsNumber_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(45); - match(ISNUMBER); + match(IsNumber); setState(46); match(T__1); setState(47); @@ -3815,11 +3815,11 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 7: { - _localctx = new ISERROR_funContext(_localctx); + _localctx = new IsError_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(55); - match(ISERROR); + match(IsError); setState(56); match(T__1); setState(57); @@ -9004,14 +9004,14 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 8: { - _localctx = new ISNUMBER_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new IsNumber_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); setState(1836); if (!(precpred(_ctx, 336))) throw new FailedPredicateException(this, "precpred(_ctx, 336)"); setState(1837); match(T__0); setState(1838); - match(ISNUMBER); + match(IsNumber); setState(1839); match(T__1); setState(1840); @@ -9100,14 +9100,14 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 14: { - _localctx = new ISERROR_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new IsError_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); setState(1866); if (!(precpred(_ctx, 330))) throw new FailedPredicateException(this, "precpred(_ctx, 330)"); setState(1867); match(T__0); setState(1868); - match(ISERROR); + match(IsError); setState(1869); match(T__1); setState(1871); @@ -11447,9 +11447,9 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case UNIT: case IF: case IFERROR: - case ISNUMBER: + case IsNumber: case ISTEXT: - case ISERROR: + case IsError: case ISNONTEXT: case ISLOGICAL: case ISEVEN: @@ -11693,9 +11693,9 @@ public static class Parameter2Context extends ParserRuleContext { public TerminalNode E() { return getToken(mathParser.E, 0); } public TerminalNode IF() { return getToken(mathParser.IF, 0); } public TerminalNode IFERROR() { return getToken(mathParser.IFERROR, 0); } - public TerminalNode ISNUMBER() { return getToken(mathParser.ISNUMBER, 0); } + public TerminalNode IsNumber() { return getToken(mathParser.IsNumber, 0); } public TerminalNode ISTEXT() { return getToken(mathParser.ISTEXT, 0); } - public TerminalNode ISERROR() { return getToken(mathParser.ISERROR, 0); } + public TerminalNode IsError() { return getToken(mathParser.IsError, 0); } public TerminalNode ISNONTEXT() { return getToken(mathParser.ISNONTEXT, 0); } public TerminalNode ISLOGICAL() { return getToken(mathParser.ISLOGICAL, 0); } public TerminalNode ISEVEN() { return getToken(mathParser.ISEVEN, 0); } diff --git a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java index d107918d4..e1e9a1f4d 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java +++ b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java @@ -283,12 +283,12 @@ public interface mathVisitor extends ParseTreeVisitor { */ T visitWORKDAY_fun(mathParser.WORKDAY_funContext ctx); /** - * Visit a parse tree produced by the {@code ISERROR_fun} + * Visit a parse tree produced by the {@code IsError_fun} * labeled alternative in {@link mathParser#expr}. * @param ctx the parse tree * @return the visitor result */ - T visitISERROR_fun(mathParser.ISERROR_funContext ctx); + T visitIsError_fun(mathParser.IsError_funContext ctx); /** * Visit a parse tree produced by the {@code BIN2DEC_fun} * labeled alternative in {@link mathParser#expr}. @@ -1018,12 +1018,12 @@ public interface mathVisitor extends ParseTreeVisitor { */ T visitNORMSDIST_fun(mathParser.NORMSDIST_funContext ctx); /** - * Visit a parse tree produced by the {@code ISNUMBER_fun} + * Visit a parse tree produced by the {@code IsNumber_fun} * labeled alternative in {@link mathParser#expr}. * @param ctx the parse tree * @return the visitor result */ - T visitISNUMBER_fun(mathParser.ISNUMBER_funContext ctx); + T visitIsNumber_fun(mathParser.IsNumber_funContext ctx); /** * Visit a parse tree produced by the {@code LASTINDEXOF_fun} * labeled alternative in {@link mathParser#expr}. diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java index 9d6169e45..f4a04786f 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java @@ -157,7 +157,7 @@ public void base_test() { @Test public void base_test2() { AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("1+(3*2+2)/2 & '11' & '11:20'*9 & isnumber(22)*3", ""); + String t = engine.TryEvaluate("1+(3*2+2)/2 & '11' & '11:20'*9 & IsNumber(22)*3", ""); assertNotEquals(t, ""); } diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java index 1f87565cb..7864d48ec 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java @@ -39,13 +39,13 @@ public void iferror_test() } @Test - public void iserror_test() + public void IsError_test() { AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("iserror(1/0,1)", 0); + int t = engine.TryEvaluate("IsError(1/0,1)", 0); assertEquals(1, t); - t = engine.TryEvaluate("iserror(1-'rrr',1)", 0); + t = engine.TryEvaluate("IsError(1-'rrr',1)", 0); assertEquals(1, t); } @Test @@ -76,18 +76,18 @@ public void isnullorerror_test() @Test - public void ISNUMBER_test() + public void IsNumber_test() { AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("if(ISNUMBER(1),1,2)", 0); + int t = engine.TryEvaluate("if(IsNumber(1),1,2)", 0); assertEquals(1, t); - t = engine.TryEvaluate("if(ISNUMBER('e'),1,2)", 0); + t = engine.TryEvaluate("if(IsNumber('e'),1,2)", 0); assertEquals(2, t); - t = engine.TryEvaluate("if(ISNUMBER('11'),1,2)", 0); + t = engine.TryEvaluate("if(IsNumber('11'),1,2)", 0); assertEquals(2, t); - t = engine.TryEvaluate("if(ISNUMBER('2016-1-2'),1,2)", 0); + t = engine.TryEvaluate("if(IsNumber('2016-1-2'),1,2)", 0); assertEquals(2, t); } diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java index 24fd277ba..6f10745f5 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java @@ -85,7 +85,7 @@ public void FIXED_test() AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("FIXED(4567.89,1)", ""); assertEquals(t, "4,567.9"); - //t = engine.TryEvaluate(" FIXED(4567.89,-1)", "");//iserror + //t = engine.TryEvaluate(" FIXED(4567.89,-1)", "");//IsError //assertEquals(t, "4,570.0"); t = engine.TryEvaluate("FIXED(-4567.89, 1, TRUE())", ""); assertEquals(t, "-4567.9"); From 75c1e090ef0a54b3d07fb5c7cc5653a21288826d Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 07:43:39 +0800 Subject: [PATCH 16/98] fix --- .../algorithm/internals/functions/FunctionUtil.java | 2 +- .../internals/functions/compare/Function_EQ.java | 2 +- .../internals/functions/compare/Function_GE.java | 2 +- .../internals/functions/compare/Function_GT.java | 2 +- .../internals/functions/compare/Function_LE.java | 2 +- .../internals/functions/compare/Function_LT.java | 2 +- .../internals/functions/compare/Function_NE.java | 2 +- .../internals/functions/csharp/Function_ENDSWITH.java | 4 ++-- .../internals/functions/csharp/Function_GUID.java | 4 ++-- .../internals/functions/csharp/Function_HAS.java | 4 ++-- .../internals/functions/csharp/Function_HASVALUE.java | 4 ++-- .../internals/functions/csharp/Function_INDEXOF.java | 4 ++-- .../internals/functions/csharp/Function_ISREGEX.java | 4 ++-- .../internals/functions/csharp/Function_JOIN.java | 4 ++-- .../internals/functions/csharp/Function_LASTINDEXOF.java | 4 ++-- .../internals/functions/csharp/Function_LOOKCEILING.java | 4 ++-- .../internals/functions/csharp/Function_LOOKFLOOR.java | 4 ++-- .../internals/functions/csharp/Function_REGEX.java | 4 ++-- .../internals/functions/csharp/Function_REGEXREPALCE.java | 4 ++-- .../internals/functions/csharp/Function_REMOVEEND.java | 4 ++-- .../internals/functions/csharp/Function_REMOVESTART.java | 4 ++-- .../internals/functions/csharp/Function_SPLIT.java | 4 ++-- .../internals/functions/csharp/Function_STARTSWITH.java | 4 ++-- .../internals/functions/csharp/Function_SUBSTRING.java | 4 ++-- .../internals/functions/csharp/Function_TRIMEND.java | 4 ++-- .../internals/functions/csharp/Function_TRIMSTART.java | 4 ++-- .../functions/csharpsecurity/Function_HMACMD5.java | 4 ++-- .../functions/csharpsecurity/Function_HMACSHA1.java | 4 ++-- .../functions/csharpsecurity/Function_HMACSHA256.java | 4 ++-- .../functions/csharpsecurity/Function_HMACSHA512.java | 4 ++-- .../internals/functions/csharpsecurity/Function_MD5.java | 4 ++-- .../internals/functions/csharpsecurity/Function_SHA1.java | 4 ++-- .../functions/csharpsecurity/Function_SHA256.java | 4 ++-- .../functions/csharpsecurity/Function_SHA512.java | 4 ++-- .../functions/csharpweb/Function_BASE64TOTEXT.java | 4 ++-- .../functions/csharpweb/Function_BASE64URLTOTEXT.java | 4 ++-- .../functions/csharpweb/Function_HTMLDECODE.java | 6 +++--- .../functions/csharpweb/Function_HTMLENCODE.java | 6 +++--- .../functions/csharpweb/Function_TEXTTOBASE64.java | 4 ++-- .../functions/csharpweb/Function_TEXTTOBASE64URL.java | 4 ++-- .../internals/functions/csharpweb/Function_URLDECODE.java | 6 +++--- .../internals/functions/csharpweb/Function_URLENCODE.java | 6 +++--- .../internals/functions/datetimes/Function_ADDDAYS.java | 4 ++-- .../internals/functions/datetimes/Function_ADDHOURS.java | 4 ++-- .../functions/datetimes/Function_ADDMINUTES.java | 4 ++-- .../internals/functions/datetimes/Function_ADDMONTHS.java | 4 ++-- .../functions/datetimes/Function_ADDSECONDS.java | 4 ++-- .../internals/functions/datetimes/Function_ADDYEARS.java | 4 ++-- .../internals/functions/datetimes/Function_DATE.java | 4 ++-- .../internals/functions/datetimes/Function_DATEDIF.java | 4 ++-- .../internals/functions/datetimes/Function_DATEVALUE.java | 4 ++-- .../internals/functions/datetimes/Function_DAY.java | 6 +++--- .../internals/functions/datetimes/Function_DAYS360.java | 4 ++-- .../internals/functions/datetimes/Function_EDATE.java | 4 ++-- .../internals/functions/datetimes/Function_EOMONTH.java | 4 ++-- .../internals/functions/datetimes/Function_HOUR.java | 6 +++--- .../internals/functions/datetimes/Function_MINUTE.java | 6 +++--- .../internals/functions/datetimes/Function_MONTH.java | 6 +++--- .../functions/datetimes/Function_NETWORKDAYS.java | 4 ++-- .../internals/functions/datetimes/Function_NOW.java | 4 ++-- .../internals/functions/datetimes/Function_SECOND.java | 6 +++--- .../internals/functions/datetimes/Function_TIME.java | 4 ++-- .../internals/functions/datetimes/Function_TIMESTAMP.java | 4 ++-- .../internals/functions/datetimes/Function_TIMEVALUE.java | 6 +++--- .../internals/functions/datetimes/Function_TODAY.java | 4 ++-- .../internals/functions/datetimes/Function_WEEKDAY.java | 4 ++-- .../internals/functions/datetimes/Function_WEEKNUM.java | 4 ++-- .../internals/functions/datetimes/Function_WORKDAY.java | 4 ++-- .../internals/functions/datetimes/Function_YEAR.java | 6 +++--- .../algorithm/internals/functions/flow/Function_IF.java | 6 +++--- .../internals/functions/flow/Function_IFERROR.java | 6 +++--- .../internals/functions/flow/Function_ISERROR.java | 6 +++--- .../internals/functions/flow/Function_ISEVEN.java | 6 +++--- .../internals/functions/flow/Function_ISLOGICAL.java | 6 +++--- .../internals/functions/flow/Function_ISNONTEXT.java | 6 +++--- .../internals/functions/flow/Function_ISNULL.java | 6 +++--- .../internals/functions/flow/Function_ISNULLOREMPTY.java | 6 +++--- .../internals/functions/flow/Function_ISNULLORERROR.java | 6 +++--- .../functions/flow/Function_ISNULLORWHITESPACE.java | 6 +++--- .../internals/functions/flow/Function_ISNUMBER.java | 6 +++--- .../internals/functions/flow/Function_ISODD.java | 6 +++--- .../internals/functions/flow/Function_ISTEXT.java | 6 +++--- .../algorithm/internals/functions/flow/Function_NOT.java | 6 +++--- .../internals/functions/mathbase/Function_ABS.java | 6 +++--- .../internals/functions/mathbase/Function_CEILING.java | 6 +++--- .../internals/functions/mathbase/Function_COMBIN.java | 6 +++--- .../internals/functions/mathbase/Function_EVEN.java | 6 +++--- .../internals/functions/mathbase/Function_EXP.java | 6 +++--- .../internals/functions/mathbase/Function_FACT.java | 6 +++--- .../internals/functions/mathbase/Function_FACTDOUBLE.java | 6 +++--- .../internals/functions/mathbase/Function_FIXED.java | 6 +++--- .../internals/functions/mathbase/Function_FLOOR.java | 6 +++--- .../internals/functions/mathbase/Function_GCD.java | 6 +++--- .../internals/functions/mathbase/Function_LCM.java | 6 +++--- .../internals/functions/mathbase/Function_LN.java | 6 +++--- .../internals/functions/mathbase/Function_LOG.java | 6 +++--- .../internals/functions/mathbase/Function_MROUND.java | 6 +++--- .../functions/mathbase/Function_MULTINOMIAL.java | 6 +++--- .../internals/functions/mathbase/Function_ODD.java | 6 +++--- .../internals/functions/mathbase/Function_PERMUT.java | 6 +++--- .../internals/functions/mathbase/Function_POWER.java | 6 +++--- .../internals/functions/mathbase/Function_PRODUCT.java | 6 +++--- .../internals/functions/mathbase/Function_Percentage.java | 6 +++--- .../internals/functions/mathbase/Function_QUOTIENT.java | 6 +++--- .../internals/functions/mathbase/Function_RAND.java | 6 +++--- .../functions/mathbase/Function_RANDBETWEEN.java | 6 +++--- .../internals/functions/mathbase/Function_ROUND.java | 6 +++--- .../internals/functions/mathbase/Function_ROUNDDOWN.java | 6 +++--- .../internals/functions/mathbase/Function_ROUNDUP.java | 6 +++--- .../internals/functions/mathbase/Function_SIGN.java | 6 +++--- .../internals/functions/mathbase/Function_SQRT.java | 6 +++--- .../internals/functions/mathbase/Function_SQRTPI.java | 6 +++--- .../internals/functions/mathbase/Function_TRUNC.java | 6 +++--- .../internals/functions/mathsum/Function_FISHER.java | 8 ++++---- .../internals/functions/mathsum/Function_FISHERINV.java | 8 ++++---- .../internals/functions/mathsum/Function_GAMMADIST.java | 6 +++--- .../internals/functions/mathsum/Function_GAMMAINV.java | 6 +++--- .../internals/functions/mathsum/Function_GAMMALN.java | 8 ++++---- .../internals/functions/mathsum/Function_GEOMEAN.java | 6 +++--- .../internals/functions/mathsum/Function_HARMEAN.java | 6 +++--- .../internals/functions/mathsum/Function_HYPGEOMDIST.java | 6 +++--- .../internals/functions/mathsum/Function_LARGE.java | 6 +++--- .../internals/functions/mathsum/Function_LOGINV.java | 6 +++--- .../internals/functions/mathsum/Function_LOGNORMDIST.java | 6 +++--- .../internals/functions/mathsum/Function_MAX.java | 6 +++--- .../internals/functions/mathsum/Function_MEDIAN.java | 6 +++--- .../internals/functions/mathsum/Function_MIN.java | 6 +++--- .../internals/functions/mathsum/Function_MODE.java | 6 +++--- .../functions/mathsum/Function_NEGBINOMDIST.java | 6 +++--- .../internals/functions/mathsum/Function_NORMDIST.java | 6 +++--- .../internals/functions/mathsum/Function_NORMINV.java | 6 +++--- .../internals/functions/mathsum/Function_NORMSDIST.java | 8 ++++---- .../internals/functions/mathsum/Function_NORMSINV.java | 8 ++++---- .../internals/functions/mathsum/Function_PERCENTILE.java | 6 +++--- .../internals/functions/mathsum/Function_PERCENTRANK.java | 4 ++-- .../internals/functions/mathsum/Function_POISSON.java | 4 ++-- .../internals/functions/mathsum/Function_QUARTILE.java | 4 ++-- .../internals/functions/mathsum/Function_SMALL.java | 4 ++-- .../internals/functions/mathsum/Function_STDEV.java | 4 ++-- .../functions/mathtrigonometric/Function_ACOS.java | 4 ++-- .../functions/mathtrigonometric/Function_ACOSH.java | 4 ++-- .../functions/mathtrigonometric/Function_ASIN.java | 4 ++-- .../functions/mathtrigonometric/Function_ASINH.java | 4 ++-- .../functions/mathtrigonometric/Function_ATAN.java | 4 ++-- .../functions/mathtrigonometric/Function_ATAN2.java | 4 ++-- .../functions/mathtrigonometric/Function_ATANH.java | 4 ++-- .../functions/mathtrigonometric/Function_COS.java | 4 ++-- .../functions/mathtrigonometric/Function_COSH.java | 4 ++-- .../functions/mathtrigonometric/Function_COT.java | 4 ++-- .../functions/mathtrigonometric/Function_CSC.java | 4 ++-- .../functions/mathtrigonometric/Function_DEGREES.java | 4 ++-- .../functions/mathtrigonometric/Function_RADIANS.java | 4 ++-- .../functions/mathtrigonometric/Function_SEC.java | 4 ++-- .../functions/mathtrigonometric/Function_SIN.java | 4 ++-- .../functions/mathtrigonometric/Function_SINH.java | 4 ++-- .../functions/mathtrigonometric/Function_TAN.java | 4 ++-- .../functions/mathtrigonometric/Function_TANH.java | 4 ++-- .../internals/functions/operator/Function_AND.java | 6 +++--- .../internals/functions/operator/Function_AND_N.java | 6 +++--- .../internals/functions/operator/Function_Add.java | 6 +++--- .../internals/functions/operator/Function_Connect.java | 6 +++--- .../internals/functions/operator/Function_Div.java | 6 +++--- .../internals/functions/operator/Function_Mod.java | 6 +++--- .../internals/functions/operator/Function_Mul.java | 6 +++--- .../internals/functions/operator/Function_OR.java | 6 +++--- .../internals/functions/operator/Function_OR_N.java | 6 +++--- .../internals/functions/operator/Function_Sub.java | 6 +++--- .../internals/functions/string/Function_ASC.java | 6 +++--- .../internals/functions/string/Function_CHAR.java | 6 +++--- .../internals/functions/string/Function_CLEAN.java | 6 +++--- .../internals/functions/string/Function_CODE.java | 6 +++--- .../internals/functions/string/Function_CONCATENATE.java | 6 +++--- .../internals/functions/string/Function_EXACT.java | 6 +++--- .../internals/functions/string/Function_FIND.java | 6 +++--- .../internals/functions/string/Function_JIS.java | 6 +++--- .../internals/functions/string/Function_LEFT.java | 6 +++--- .../internals/functions/string/Function_LEN.java | 6 +++--- .../internals/functions/string/Function_LOWER.java | 6 +++--- .../internals/functions/string/Function_MID.java | 6 +++--- .../internals/functions/string/Function_PROPER.java | 6 +++--- .../internals/functions/string/Function_REPLACE.java | 6 +++--- .../internals/functions/string/Function_REPT.java | 6 +++--- .../internals/functions/string/Function_RIGHT.java | 6 +++--- .../internals/functions/string/Function_RMB.java | 6 +++--- .../internals/functions/string/Function_SEARCH.java | 6 +++--- .../internals/functions/string/Function_SUBSTITUTE.java | 6 +++--- .../algorithm/internals/functions/string/Function_T.java | 6 +++--- .../internals/functions/string/Function_TEXT.java | 6 +++--- .../internals/functions/string/Function_TRIM.java | 6 +++--- .../internals/functions/value/Function_Array.java | 6 +++--- .../internals/functions/value/Function_ArrayJson.java | 6 +++--- .../internals/functions/value/Function_ArrayJsonItem.java | 6 +++--- .../internals/functions/value/Function_DiyFunction.java | 6 +++--- .../internals/functions/value/Function_ERROR.java | 6 +++--- .../internals/functions/value/Function_GetJsonValue.java | 6 +++--- .../internals/functions/value/Function_JSON.java | 6 +++--- .../algorithm/internals/functions/value/Function_NUM.java | 6 +++--- .../internals/functions/value/Function_PARAM.java | 6 +++--- .../internals/functions/value/Function_PARAMETER.java | 6 +++--- .../internals/functions/value/Function_Value.java | 6 +++--- 200 files changed, 517 insertions(+), 517 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java index 901c993ab..0f617de09 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java @@ -5,7 +5,7 @@ import java.util.List; import java.util.Objects; import java.util.function.Predicate; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.Operand; import toolgood.algorithm.internals.Visitors.CharUtil; public class FunctionUtil { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java index 08b2f32bf..87b2a067b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.compare; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java index 0c52b823e..caef73c91 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.compare; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java index aab5652fd..cbb9554d5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.compare; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java index e61ca543d..863a2b7b1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.compare; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java index c4a59c2ed..0cafe3fec 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.compare; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java index c67509e8d..a0219af2a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.compare; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java index fd46a0ff6..27a315d8c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java index d48bb7ecc..778c7e188 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.UUID; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java index 420888dbb..689d5c1dc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java index 729ae5951..5af76fdb6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java index ef6c4442f..b816b3dfe 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_4; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java index caa5a8610..1d02d1168 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java index 1d713a0cc..b5170c2fc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_N; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.ArrayList; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java index 4007891ce..71d26bb90 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_4; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java index 413ed6312..614b18260 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.math.BigDecimal; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java index f34e50152..0f328d85b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.math.BigDecimal; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java index 799096f4d..30c9b037a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java index 8eef98847..fe2d3526e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java index bab1162e2..4c2b17ae5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java index 18ea2c2fd..07693bfdc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java index ff54a7de9..65bd1878a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java index 9341852aa..2f0f89749 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java index abd5703cd..90b6ccbc0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java index e57b3b3c3..3e370494c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java index 38acbfaa2..a2895bae9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharp; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java index 9365cfb2d..9e8503367 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpsecurity; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import javax.crypto.Mac; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java index 6198fc1ad..a35525464 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpsecurity; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import javax.crypto.Mac; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java index f524cd8d4..df26b19e0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpsecurity; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import javax.crypto.Mac; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java index 68a4d1b85..0613b4c87 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpsecurity; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import javax.crypto.Mac; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java index cc8878f16..72c0eb6a9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpsecurity; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.security.MessageDigest; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java index 755315372..63e7fd7a5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpsecurity; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.security.MessageDigest; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java index a3a36bf60..3d4e9b8af 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpsecurity; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.security.MessageDigest; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java index 4af610f8e..d5d1812f8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpsecurity; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.security.MessageDigest; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java index 188772fc6..08ce7c09c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpweb; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java index f4c6db402..7317568c8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpweb; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java index cc368e1db..804872593 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java index 108e917bf..a83b04c82 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java index 45a1e8b16..ce95bf583 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpweb; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java index 14bb3e5d9..09252fd79 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpweb; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java index 29489987d..747c4557e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java index 34a01ee42..ec679407e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java index 6c7d309fc..ee29ac6df 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java index db047d01b..6d8800291 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java index c9157861f..d7d2cf8e7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java index 0a4d4fde5..17dbc7065 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java index 7c9eca22d..59f65158e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java index 911257deb..b1d3e0c14 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java index c3ddb28e8..e9a3afe48 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_N; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java index 6385aeb06..7f3614fc0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java index 368498113..84f697800 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_N; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.ArrayList; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java index 41631852e..88c0e54b1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java index cc6d03eb2..e1f224c6a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java index 4dc3ba5bf..fb7f73f96 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java index fef20906f..2ccf9c1de 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java index a57d5c174..a8532aeab 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java index c31844b53..e0c562b4b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java index 6ea973e62..195b5685c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java index 5f745f6cc..252b8afff 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_N; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.HashSet; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java index 4606f124a..e872bdff5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java index 26ae0ea91..cc0bd9d91 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java index 8ae88d525..852cbc56b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java index bdf432605..f21a283ad 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java index 5bb566f31..07f566153 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java index cc32d1849..3e6c696a7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index eb85a0325..1318e96a7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index c9f3bdabc..8758fe362 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.function.Function; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index 38e612692..f325ce124 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.Function_N; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import java.util.HashSet; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java index dab8860e4..441da2d7f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_YEAR extends Function_1 { public Function_YEAR(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java index 03c96d3b2..50ea2fa83 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_IF extends Function_3 { public Function_IF(FunctionBase func1, FunctionBase func2, FunctionBase func3) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java index 63b7d6f93..7243b03cb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_IFERROR extends Function_3 { public Function_IFERROR(FunctionBase func1, FunctionBase func2, FunctionBase func3) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java index abd22d641..2150dc9ae 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_IsError extends Function_2 { public Function_IsError(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java index 13bb8d265..ab96cbdab 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ISEVEN extends Function_1 { public Function_ISEVEN(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java index e6bbf1adc..a7b39114d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ISLOGICAL extends Function_1 { public Function_ISLOGICAL(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java index f642a05ef..61e994bce 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ISNONTEXT extends Function_1 { public Function_ISNONTEXT(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java index 11185c517..5d0b87d82 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ISNULL extends Function_2 { public Function_ISNULL(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java index 4240fb3e4..079be8626 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ISNULLOREMPTY extends Function_1 { public Function_ISNULLOREMPTY(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java index ccf944326..2dd0de5b5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ISNULLORERROR extends Function_2 { public Function_ISNULLORERROR(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java index db549c4bc..eb18b220e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ISNULLORWHITESPACE extends Function_1 { public Function_ISNULLORWHITESPACE(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java index 8b5aae082..d45b424cb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_IsNumber extends Function_1 { public Function_IsNumber(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java index fa99a4278..ce2d8f410 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ISODD extends Function_1 { public Function_ISODD(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java index 053b4e1ef..f28ea068f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ISTEXT extends Function_1 { public Function_ISTEXT(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java index 98803a33c..a5b54fed2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_NOT extends Function_1 { public Function_NOT(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java index 0fb0c7efe..966b129fd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ABS extends Function_1 { public Function_ABS(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java index ba0514fc6..f162b2587 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_CEILING extends Function_2 { public Function_CEILING(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java index ddd575d55..89697a918 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_COMBIN extends Function_2 { public Function_COMBIN(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java index 9d9f712e4..3f8310998 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_EVEN extends Function_1 { public Function_EVEN(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java index f6b1121ac..e7ae527c0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_EXP extends Function_1 { public Function_EXP(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java index e2d82ed6e..5d745780e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_FACT extends Function_1 { public Function_FACT(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java index e04064807..98967503e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_FACTDOUBLE extends Function_1 { public Function_FACTDOUBLE(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java index 7140431b1..4db63b072 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; import java.text.DecimalFormat; public class Function_FIXED extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java index ed29cfa48..c37686988 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_FLOOR extends Function_2 { public Function_FLOOR(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java index d38db7dc3..82864deee 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; import java.util.ArrayList; import java.util.List; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java index 0bd1cd5f7..81d6868f5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; import java.util.ArrayList; import java.util.List; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java index e11b70981..24b87bc6a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_LN extends Function_1 { public Function_LN(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java index f032cc44a..4fa7e703d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_LOG extends Function_2 { public Function_LOG(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java index 6dd9b33be..801484212 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_MROUND extends Function_2 { public Function_MROUND(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java index f86408792..2d695d9c1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; import java.util.ArrayList; import java.util.List; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java index ee21e26f3..93ace8271 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ODD extends Function_1 { public Function_ODD(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java index f410f3b60..5956f7452 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_PERMUT extends Function_2 { public Function_PERMUT(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java index 873f38cca..df8580aa3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_POWER extends Function_2 { public Function_POWER(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java index f2a8d3611..2ca979ce0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; import java.util.ArrayList; import java.util.List; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java index 0900a74c1..e88c50011 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_Percentage extends Function_1 { public Function_Percentage(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java index c5339b320..8b8a0b1c6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_QUOTIENT extends Function_2 { public Function_QUOTIENT(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java index 1d7d588cd..4f4a74db2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; import java.util.Random; public class Function_RAND extends FunctionBase { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java index 88e44e61c..488e82b2b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; import java.util.Random; public class Function_RANDBETWEEN extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java index 2a5a10ee0..9843f02bc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ROUND extends Function_2 { public Function_ROUND(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java index d50947bcc..a68652730 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ROUNDDOWN extends Function_2 { public Function_ROUNDDOWN(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java index c325aac3a..a73e7dd0d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_ROUNDUP extends Function_2 { public Function_ROUNDUP(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java index 3e87b7b9b..4a625fc6b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Internals.Operand; -import toolgood.algorithm.Internals.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_SIGN extends Function_1 { public Function_SIGN(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java index 5dfb765e2..fcd4908af 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; public class Function_SQRT extends Function_1 { public Function_SQRT(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java index 368fde444..40b9f1dc6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; public class Function_SQRTPI extends Function_1 { public Function_SQRTPI(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java index 07f6e31c6..cfffb2cec 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; public class Function_TRUNC extends Function_1 { public Function_TRUNC(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java index c1221f07d..064714277 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.AlgorithmEngine; public class Function_FISHER extends Function_1 { public Function_FISHER(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java index f99173a67..e1999c0d7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.AlgorithmEngine; public class Function_FISHERINV extends Function_1 { public Function_FISHERINV(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java index ae7a9b7ee..a6b1c0652 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_4; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; public class Function_GAMMADIST extends Function_4 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java index 68affb3bb..9c0325858 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; public class Function_GAMMAINV extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java index e50bcc838..7510bd477 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; public class Function_GAMMALN extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java index 0accf9d03..3e719d2a7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java @@ -2,10 +2,10 @@ import java.util.ArrayList; import java.util.List; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_N; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; public class Function_GEOMEAN extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java index 2149f255a..bd157cb39 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java @@ -2,10 +2,10 @@ import java.util.ArrayList; import java.util.List; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_N; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; public class Function_HARMEAN extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java index 4601db116..15f5be309 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_4; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; public class Function_HYPGEOMDIST extends Function_4 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java index a43bba512..dce42a078 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java @@ -4,10 +4,10 @@ import java.util.Collections; import java.util.Comparator; import java.util.List; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; public class Function_LARGE extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java index 9bb0b755d..3e929cd69 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; public class Function_LOGINV extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java index fab7de806..b73db73f7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; public class Function_LOGNORMDIST extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java index ac5d10867..b7ba1577d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java @@ -3,10 +3,10 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_N; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; public class Function_MAX extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java index 65f2db9f8..d1c39d8e5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java @@ -3,10 +3,10 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_N; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; public class Function_MEDIAN extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java index 7d09ee902..3653452e4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java @@ -3,10 +3,10 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_N; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; public class Function_MIN extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java index 9fa285805..33adcd47d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java @@ -6,10 +6,10 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_N; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; public class Function_MODE extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java index 0b872edc7..e06dd1a68 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; public class Function_NEGBINOMDIST extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java index e25853981..efdbf63e8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_4; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; public class Function_NORMDIST extends Function_4 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java index 86ede7b1e..856b8cc2b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; public class Function_NORMINV extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java index d1ec426e5..41da3016e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; public class Function_NORMSDIST extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java index 51296ffdf..593f7b56d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Function_1; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; public class Function_NORMSINV extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java index ff4ade9c2..e44a58cda 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java @@ -2,10 +2,10 @@ import java.util.ArrayList; import java.util.List; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; import toolgood.algorithm.mathNet.ExcelFunctions; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java index 9cdb33f93..b876a2941 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java @@ -3,9 +3,9 @@ import java.util.List; import java.util.function.Function; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.Operand; import toolgood.algorithm.internals.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.mathnet.ExcelFunctions; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java index f23d43847..10b80540a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java @@ -2,9 +2,9 @@ import java.util.function.Function; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_3; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.Operand; import toolgood.algorithm.internals.OperandType; import toolgood.algorithm.mathnet.ExcelFunctions; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java index 98a81a2e6..a1b933dbf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java @@ -3,9 +3,9 @@ import java.util.List; import java.util.function.Function; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.Operand; import toolgood.algorithm.internals.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.mathnet.ExcelFunctions; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java index 20df47c8a..b1f81e20c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -4,9 +4,9 @@ import java.util.function.Function; import java.util.stream.Collectors; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_2; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.Operand; import toolgood.algorithm.internals.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java index 9dd68b493..e8fca1eac 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java @@ -4,9 +4,9 @@ import java.util.List; import java.util.function.Function; -import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.Function_N; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionUtil; public class Function_STDEV extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java index d8edb5e09..7450966f9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java index a56c1bc79..b0b8546a3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java index 552ef2f9f..f7edbc7fd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java index 048a47a07..0630dcdc4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java index 86291b719..28256dd28 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java index 6c9122049..97ba6552d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java index e76130dd2..aedf5ca6d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java index 2a17ca501..f6ed8a4a5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java index f40c0fbe2..095f27601 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java index abdc524fb..1e2e08282 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java index 2898532b4..36ebf00fc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java index 7d5017579..be38f878b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java index cf9fc921e..66bd99427 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java index 3cbefa559..fa586d7ff 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java index 65e9a6f2e..05d84ca15 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java index b3b25783a..2b61803b4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java index 64ef1b330..3a78c87d0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java index a67f76a8c..ffe50e0be 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java @@ -2,8 +2,8 @@ import java.lang.StringBuilder; import java.util.function.Function; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java index e5c11c619..8eafde366 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.operator; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; public class Function_AND extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java index 285010a0f..a8440c12a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.operator; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_N; public class Function_AND_N extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java index 1f2d09389..3b3f3f1c3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java @@ -4,9 +4,9 @@ import java.text.SimpleDateFormat; import java.util.Locale; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java index aa920cf76..a0523e115 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.operator; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; public class Function_Connect extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java index cc2edb01a..31cb70d2b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java @@ -4,9 +4,9 @@ import java.text.SimpleDateFormat; import java.util.Locale; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java index 901270e97..204132876 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java @@ -4,9 +4,9 @@ import java.text.SimpleDateFormat; import java.util.Locale; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java index ddcd6d64c..9d62946dc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java @@ -4,9 +4,9 @@ import java.text.SimpleDateFormat; import java.util.Locale; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java index 3c8307707..f3a352835 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.operator; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; public class Function_OR extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java index 8b9d520c3..d72e2b51c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.operator; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_N; public class Function_OR_N extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java index d011087c3..6093df1af 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java @@ -4,9 +4,9 @@ import java.text.SimpleDateFormat; import java.util.Locale; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java index 112770b00..4fce9fb26 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_ASC extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java index 0eb588b97..44750cb9f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_CHAR extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java index d7afa85e3..774d9e791 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_CLEAN extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java index 92bee4726..8a140c55b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_CODE extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java index 8a85b3fda..f5737c79b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_N; public class Function_CONCATENATE extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java index b60c54692..d1f5fb87c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; public class Function_EXACT extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java index e259e130e..e083eb6d9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_3; public class Function_FIND extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java index 386b463ab..15309bbd2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_JIS extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java index 04f5dc36d..60add27f9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; public class Function_LEFT extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java index 8c7ecfa29..c266680f6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_LEN extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java index 2dba39f1b..b78bf0f88 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_LOWER extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java index c41377290..80f9fc58b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_3; public class Function_MID extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java index 556baea22..e9af11751 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_PROPER extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java index d5432d183..1aa0f5dea 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_4; public class Function_REPLACE extends Function_4 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java index 75ddeed68..debe3a5f2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; public class Function_REPT extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java index e7b114a3a..d50b360c4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; public class Function_RIGHT extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java index 25c74a7f3..c82583f5f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java @@ -4,9 +4,9 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_RMB extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java index 92da8dd69..70b7082ac 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_3; public class Function_SEARCH extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java index 9f1e98b5f..aca5bbf4d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_4; public class Function_SUBSTITUTE extends Function_4 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java index c82336db7..915322099 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_T extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java index 8d6c180af..29daf3c54 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java @@ -4,9 +4,9 @@ import java.text.SimpleDateFormat; import java.util.Locale; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; public class Function_TEXT extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java index b88667aff..56bab5480 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_TRIM extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java index 4b980d831..3fbce7f43 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java @@ -3,9 +3,9 @@ import java.util.ArrayList; import java.util.List; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_N; public class Function_Array extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java index 855a67d30..c6401eeca 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_N; public class Function_ArrayJson extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java index 367ed4d64..29e3ba968 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_ArrayJsonItem extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java index 9f71d268a..b761921dd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java @@ -3,9 +3,9 @@ import java.util.ArrayList; import java.util.List; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_N; public class Function_DiyFunction extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java index 1d3f5b3ad..8f8262888 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_ERROR extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java index dd6b7d72e..6e4015171 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; public class Function_GetJsonValue extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java index 58c4a2d7a..4fb04db14 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; public class Function_JSON extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java index 546f68dc0..53e17ad95 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; public class Function_NUM extends FunctionBase { private final double d; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java index f4c899aad..51317ac09 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; public class Function_PARAM extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java index 9d508646c..fa64bbebd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; public class Function_PARAMETER extends FunctionBase { private final String name; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java index 93aef54b4..2a56aa6ef 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java @@ -1,8 +1,8 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.FunctionBase; -import toolgood.algorithm.internals.Operand; -import toolgood.algorithm.internals.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; public class Function_Value extends FunctionBase { private final Operand _value; From bb813eb93aea6ae47e0feeaecd486fdc6b96179d Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 08:21:54 +0800 Subject: [PATCH 17/98] fix --- .../algorithm/internals/CalculateTree.java | 64 +- .../algorithm/internals/ConditionTree.java | 64 +- .../functions/csharp/Function_JOIN.java | 2 +- .../functions/datetimes/Function_DATE.java | 2 +- .../datetimes/Function_DATEVALUE.java | 2 +- .../datetimes/Function_NETWORKDAYS.java | 2 +- .../functions/datetimes/Function_WORKDAY.java | 2 +- .../functions/mathsum/Function_GEOMEAN.java | 2 +- .../functions/mathsum/Function_HARMEAN.java | 2 +- .../functions/mathsum/Function_MAX.java | 2 +- .../functions/mathsum/Function_MEDIAN.java | 2 +- .../functions/mathsum/Function_MIN.java | 2 +- .../functions/mathsum/Function_MODE.java | 2 +- .../mathsum/Function_PERCENTRANK.java | 2 +- .../functions/mathsum/Function_POISSON.java | 2 +- .../functions/mathsum/Function_QUARTILE.java | 6 +- .../functions/mathsum/Function_SMALL.java | 6 +- .../functions/mathsum/Function_STDEV.java | 6 +- .../functions/mathsum/Function_STDEVP.java | 49 + .../functions/mathsum/Function_SUM.java | 42 + .../functions/mathsum/Function_SUMIF.java | 81 + .../functions/mathsum/Function_SUMSQ.java | 46 + .../functions/mathsum/Function_TDIST.java | 55 + .../functions/mathsum/Function_TINV.java | 47 + .../functions/mathsum/Function_VAR.java | 56 + .../functions/mathsum/Function_VARP.java | 57 + .../functions/mathsum/Function_WEIBULL.java | 63 + .../visitors/MathFunctionVisitor.java | 2181 +++++++++++++++++ .../internals/visitors/MathSplitVisitor.java | 26 +- 29 files changed, 2727 insertions(+), 148 deletions(-) create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java diff --git a/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java b/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java index cac917aa0..b13128306 100644 --- a/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java +++ b/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java @@ -11,80 +11,32 @@ public final class CalculateTree { /** * 子节点 */ - private List nodes; + public List Nodes; /** * 开始位置 */ - private int start; + public int Start; /** * 结束位置 */ - private int end; + public int End; /** * 类型 */ - private CalculateTreeType type; + public CalculateTreeType Type; /** * 条件 */ - private String conditionString; + public String ConditionString; /** * 出错信息 */ - private String errorMessage; + public String ErrorMessage; - CalculateTree() { - } - - public List getNodes() { - return nodes; - } - - void setNodes(List nodes) { - this.nodes = nodes; - } - - public int getStart() { - return start; - } - - void setStart(int start) { - this.start = start; - } - - public int getEnd() { - return end; - } - - void setEnd(int end) { - this.end = end; - } - - public CalculateTreeType getType() { - return type; - } - - void setType(CalculateTreeType type) { - this.type = type; - } - - public String getConditionString() { - return conditionString; - } - - void setConditionString(String conditionString) { - this.conditionString = conditionString; - } - - public String getErrorMessage() { - return errorMessage; - } - - void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } + + } diff --git a/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java b/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java index 04181df03..10d04663f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java +++ b/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java @@ -11,81 +11,31 @@ public final class ConditionTree { /** * 子节点 */ - private List nodes; - + public List Nodes; /** * 开始位置 */ - private int start; + public int Start; /** * 结束位置 */ - private int end; + public int End; /** * 类型 */ - private ConditionTreeType type; + public ConditionTreeType Type; /** * 条件 */ - private String conditionString; + public String ConditionString; /** * 出错信息 */ - private String errorMessage; - - ConditionTree() { - } - - public List getNodes() { - return nodes; - } - - void setNodes(List nodes) { - this.nodes = nodes; - } - - public int getStart() { - return start; - } - - void setStart(int start) { - this.start = start; - } - - public int getEnd() { - return end; - } - - void setEnd(int end) { - this.end = end; - } - - public ConditionTreeType getType() { - return type; - } - - void setType(ConditionTreeType type) { - this.type = type; - } - - public String getConditionString() { - return conditionString; - } - - void setConditionString(String conditionString) { - this.conditionString = conditionString; - } - - public String getErrorMessage() { - return errorMessage; - } + public String ErrorMessage; - void setErrorMessage(String errorMessage) { - this.errorMessage = errorMessage; - } + } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java index b5170c2fc..0bd2a2262 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java index e9a3afe48..c123b184a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java index 84f697800..bb621c532 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java index 252b8afff..d9ba5dfb1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index f325ce124..8cdd55395 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java index 3e719d2a7..b78f17f96 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java @@ -4,7 +4,7 @@ import java.util.List; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java index bd157cb39..3edcc3497 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java @@ -4,7 +4,7 @@ import java.util.List; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java index b7ba1577d..5911ed64c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java @@ -5,7 +5,7 @@ import java.util.List; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java index d1c39d8e5..cd0be5549 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java @@ -5,7 +5,7 @@ import java.util.List; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java index 3653452e4..87c778078 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java @@ -5,7 +5,7 @@ import java.util.List; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java index 33adcd47d..d5a7191d8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java @@ -8,7 +8,7 @@ import java.util.Map; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java index b876a2941..dcb3d65af 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java @@ -57,6 +57,6 @@ public Operand Evaluate(Object work, Function tempParam @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - addFunction(stringBuilder, "PercentRank"); + AddFunction(stringBuilder, "PercentRank"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java index 10b80540a..7d9ad9816 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java @@ -47,6 +47,6 @@ public Operand Evaluate(Object work, Function tempParam @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - addFunction(stringBuilder, "Poisson"); + AddFunction(stringBuilder, "Poisson"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java index a1b933dbf..d592ae22a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java @@ -20,14 +20,14 @@ public Operand Evaluate(Object work, Function tempParam Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Array) { args1 = args1.toArray("Function '{0}' parameter {1} is error!", "Quartile", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Quartile", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } @@ -48,6 +48,6 @@ public Operand Evaluate(Object work, Function tempParam @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - addFunction(stringBuilder, "Quartile"); + AddFunction(stringBuilder, "Quartile"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java index b1f81e20c..36b9765eb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -20,14 +20,14 @@ public Operand Evaluate(Object work, Function tempParam Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Array) { args1 = args1.toArray("Function '{0}' parameter {1} is error!", "Small", 1); - if (args1.isError()) { + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Small", 2); - if (args2.isError()) { + if (args2.IsError()) { return args2; } } @@ -57,6 +57,6 @@ public Operand Evaluate(Object work, Function tempParam @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - addFunction(stringBuilder, "Small"); + AddFunction(stringBuilder, "Small"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java index e8fca1eac..05a136707 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java @@ -5,7 +5,7 @@ import java.util.function.Function; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_N; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionUtil; @@ -19,7 +19,7 @@ public Operand Evaluate(Object work, Function tempParam List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); - if (aa.isError()) { + if (aa.IsError()) { return aa; } args.add(aa); @@ -44,6 +44,6 @@ public Operand Evaluate(Object work, Function tempParam @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - addFunction(stringBuilder, "Stdev"); + AddFunction(stringBuilder, "Stdev"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java new file mode 100644 index 000000000..f24be7124 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java @@ -0,0 +1,49 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_STDEVP extends Function_N { + public Function_STDEVP(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "StdevP"); + } + if (list.size() == 0) { + return Operand.Error("Function '{0}' parameter is error!", "StdevP"); + } + + double avg = list.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); + double sum = 0; + for (int i = 0; i < list.size(); i++) { + sum += Math.pow(list.get(i) - avg, 2); + } + return Operand.Create(Math.sqrt(sum / list.size())); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "StdevP"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java new file mode 100644 index 000000000..27b620f5d --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java @@ -0,0 +1,42 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_SUM extends Function_N { + public Function_SUM(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Sum"); + } + + double sum = list.stream().mapToDouble(Double::doubleValue).sum(); + return Operand.Create(sum); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Sum"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java new file mode 100644 index 000000000..19fb7efaa --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java @@ -0,0 +1,81 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.OperandType; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_SUMIF extends Function_3 { + public Function_SUMIF(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsError()) { + return args1; + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsError()) { + return args2; + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args1, list); + if (!o) { + return Operand.Error("Function '{0}' parameter {1} is error!", "SumIf", 1); + } + + List sumdbs; + if (func3 != null) { + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.IsError()) { + return args3; + } + sumdbs = new ArrayList<>(); + boolean o2 = FunctionUtil.F_base_GetList(args3, sumdbs); + if (!o2) { + return Operand.Error("Function '{0}' parameter {1} is error!", "SumIf", 3); + } + } else { + sumdbs = list; + } + + double sum = 0; + if (args2.getOperandType() == OperandType.Number) { + // 处理数字条件 + double value = args2.getDoubleValue(); + long count = FunctionUtil.F_base_countif(list, value); + sum = count * value; + } else { + // 处理文本条件 + String textValue = args2.getTextValue().trim(); + try { + // 尝试解析为数字 + double d = Double.parseDouble(textValue); + sum = FunctionUtil.F_base_sumif(list, d, sumdbs); + } catch (NumberFormatException e) { + // 处理通配符条件 + String sunif = textValue; + Object[] matchResult = FunctionUtil.sumifMatch(sunif); + if (matchResult != null) { + sum = FunctionUtil.F_base_sumif(list, matchResult[0], matchResult[1], sumdbs); + } else { + return Operand.Error("Function '{0}' parameter {1} is error!", "SumIf", 2); + } + } + } + return Operand.Create(sum); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "SumIf"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java new file mode 100644 index 000000000..d9c1c480b --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_SUMSQ extends Function_N { + public Function_SUMSQ(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + List args = new ArrayList<>(funcs.length); + for (int i = 0; i < funcs.length; i++) { + Operand aa = funcs[i].Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "SumSQ"); + } + + double d = 0; + for (int i = 0; i < list.size(); i++) { + double a = list.get(i); + d += a * a; + } + return Operand.Create(d); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "SumSQ"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java new file mode 100644 index 000000000..62e7984d1 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java @@ -0,0 +1,55 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.function.Function; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.OperandType; +import toolgood.algorithm.mathnet.ExcelFunctions; + +public class Function_TDIST extends Function_3 { + public Function_TDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.getOperandType() != OperandType.Number) { + args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "TDist", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.getOperandType() != OperandType.Number) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "TDist", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.getOperandType() != OperandType.Number) { + args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "TDist", 3); + if (args3.IsError()) { + return args3; + } + } + + double x = args1.getDoubleValue(); + int degreesFreedom = args2.getIntValue(); + int tails = args3.getIntValue(); + + if (degreesFreedom <= 0 || tails < 1 || tails > 2) { + return Operand.Error("Function '{0}' parameter is error!", "TDist"); + } + + return Operand.Create(ExcelFunctions.TDist(x, degreesFreedom, tails)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "TDist"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java new file mode 100644 index 000000000..e5b2fc6ac --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java @@ -0,0 +1,47 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.function.Function; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.OperandType; +import toolgood.algorithm.mathnet.ExcelFunctions; + +public class Function_TINV extends Function_2 { + public Function_TINV(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.getOperandType() != OperandType.Number) { + args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "TInv", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.getOperandType() != OperandType.Number) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "TInv", 2); + if (args2.IsError()) { + return args2; + } + } + + double p = args1.getDoubleValue(); + int degreesFreedom = args2.getIntValue(); + + if (degreesFreedom <= 0 || p < 0.0 || p > 1.0) { + return Operand.Error("Function '{0}' parameter is error!", "TInv"); + } + + return Operand.Create(ExcelFunctions.TInv(p, degreesFreedom)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "TInv"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java new file mode 100644 index 000000000..e8ba92e12 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java @@ -0,0 +1,56 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_VAR extends Function_N { + public Function_VAR(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + if (args.size() == 1) { + return Operand.Error("Function '{0}' parameter only one error!", "Var"); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "Var"); + } + if (list.size() <= 1) { + return Operand.Error("Function '{0}' parameter is error!", "Var"); + } + + double sum = 0; + double sum2 = 0; + for (int i = 0; i < list.size(); i++) { + sum += list.get(i) * list.get(i); + sum2 += list.get(i); + } + + double result = (list.size() * sum - sum2 * sum2) / list.size() / (list.size() - 1); + return Operand.Create(result); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Var"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java new file mode 100644 index 000000000..42d348bb0 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java @@ -0,0 +1,57 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionUtil; + +public class Function_VARP extends Function_N { + public Function_VARP(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + List args = new ArrayList<>(); + for (FunctionBase item : funcs) { + Operand aa = item.Evaluate(work, tempParameter); + if (aa.IsError()) { + return aa; + } + args.add(aa); + } + + if (args.size() == 1) { + return Operand.Error("Function '{0}' parameter only one error!", "VarP"); + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.F_base_GetList(args, list); + if (!o) { + return Operand.Error("Function '{0}' parameter is error!", "VarP"); + } + if (list.size() == 0) { + return Operand.Error("Function '{0}' parameter is error!", "VarP"); + } + if (list.size() == 1) { + return Operand.Zero(); + } + + double avg = list.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); + double sum = 0; + for (int i = 0; i < list.size(); i++) { + sum += Math.pow(avg - list.get(i), 2); + } + + return Operand.Create(sum / list.size()); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "VarP"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java new file mode 100644 index 000000000..7837550ab --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java @@ -0,0 +1,63 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.util.function.Function; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.Function_4; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.OperandType; +import toolgood.algorithm.mathnet.ExcelFunctions; + +public class Function_WEIBULL extends Function_4 { + public Function_WEIBULL(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { + super(func1, func2, func3, func4); + } + + @Override + public Operand Evaluate(Object work, Function tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.getOperandType() != OperandType.Number) { + args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Weibull", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.getOperandType() != OperandType.Number) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Weibull", 2); + if (args2.IsError()) { + return args2; + } + } + Operand args3 = func3.Evaluate(work, tempParameter); + if (args3.getOperandType() != OperandType.Number) { + args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "Weibull", 3); + if (args3.IsError()) { + return args3; + } + } + Operand args4 = func4.Evaluate(work, tempParameter); + if (args4.getOperandType() != OperandType.Boolean) { + args4 = args4.toBoolean("Function '{0}' parameter {1} is error!", "Weibull", 4); + if (args4.IsError()) { + return args4; + } + } + + double x = args1.getDoubleValue(); + double shape = args2.getDoubleValue(); + double scale = args3.getDoubleValue(); + boolean state = args4.getBooleanValue(); + + if (shape <= 0.0 || scale <= 0.0) { + return Operand.Error("Function '{0}' parameter is error!", "Weibull"); + } + + return Operand.Create(ExcelFunctions.Weibull(x, shape, scale, state)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Weibull"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java new file mode 100644 index 000000000..4ce96863b --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java @@ -0,0 +1,2181 @@ +package toolgood.algorithm.internals.visitors; + +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.operator.Function_Add; +import toolgood.algorithm.internals.functions.operator.Function_Div; +import toolgood.algorithm.internals.functions.operator.Function_Mod; +import toolgood.algorithm.internals.functions.operator.Function_Mul; +import toolgood.algorithm.internals.functions.operator.Function_Sub; +import toolgood.algorithm.internals.functions.compare.Function_EQ; +import toolgood.algorithm.internals.functions.compare.Function_GE; +import toolgood.algorithm.internals.functions.compare.Function_GT; +import toolgood.algorithm.internals.functions.compare.Function_LE; +import toolgood.algorithm.internals.functions.compare.Function_LT; +import toolgood.algorithm.internals.functions.compare.Function_NE; +import toolgood.algorithm.internals.functions.csharp.Function_ENDSWITH; +import toolgood.algorithm.internals.functions.csharp.Function_GUID; +import toolgood.algorithm.internals.functions.csharp.Function_HAS; +import toolgood.algorithm.internals.functions.csharp.Function_HASVALUE; +import toolgood.algorithm.internals.functions.csharp.Function_INDEXOF; +import toolgood.algorithm.internals.functions.csharp.Function_ISREGEX; +import toolgood.algorithm.internals.functions.csharp.Function_JOIN; +import toolgood.algorithm.internals.functions.csharp.Function_LASTINDEXOF; +import toolgood.algorithm.internals.functions.csharp.Function_LOOKCEILING; +import toolgood.algorithm.internals.functions.csharp.Function_LOOKFLOOR; +import toolgood.algorithm.internals.functions.csharp.Function_REGEX; +import toolgood.algorithm.internals.functions.csharp.Function_REGEXREPALCE; +import toolgood.algorithm.internals.functions.csharp.Function_REMOVEEND; +import toolgood.algorithm.internals.functions.csharp.Function_REMOVESTART; +import toolgood.algorithm.internals.functions.csharp.Function_SPLIT; +import toolgood.algorithm.internals.functions.csharp.Function_STARTSWITH; +import toolgood.algorithm.internals.functions.csharp.Function_SUBSTRING; +import toolgood.algorithm.internals.functions.csharp.Function_TRIMEND; +import toolgood.algorithm.internals.functions.csharp.Function_TRIMSTART; +import toolgood.algorithm.internals.functions.csharpsecurity.Function_HMACMD5; +import toolgood.algorithm.internals.functions.csharpsecurity.Function_HMACSHA1; +import toolgood.algorithm.internals.functions.csharpsecurity.Function_HMACSHA256; +import toolgood.algorithm.internals.functions.csharpsecurity.Function_HMACSHA512; +import toolgood.algorithm.internals.functions.csharpsecurity.Function_MD5; +import toolgood.algorithm.internals.functions.csharpsecurity.Function_SHA1; +import toolgood.algorithm.internals.functions.csharpsecurity.Function_SHA256; +import toolgood.algorithm.internals.functions.csharpsecurity.Function_SHA512; +import toolgood.algorithm.internals.functions.csharpweb.Function_BASE64TOTEXT; +import toolgood.algorithm.internals.functions.csharpweb.Function_BASE64URLTOTEXT; +import toolgood.algorithm.internals.functions.csharpweb.Function_HTMLDECODE; +import toolgood.algorithm.internals.functions.csharpweb.Function_HTMLENCODE; +import toolgood.algorithm.internals.functions.csharpweb.Function_TEXTTOBASE64; +import toolgood.algorithm.internals.functions.csharpweb.Function_TEXTTOBASE64URL; +import toolgood.algorithm.internals.functions.csharpweb.Function_URLDECODE; +import toolgood.algorithm.internals.functions.csharpweb.Function_URLENCODE; +import toolgood.algorithm.internals.functions.datetimes.Function_ADDDAYS; +import toolgood.algorithm.internals.functions.datetimes.Function_ADDHOURS; +import toolgood.algorithm.internals.functions.datetimes.Function_ADDMINUTES; +import toolgood.algorithm.internals.functions.datetimes.Function_ADDMONTHS; +import toolgood.algorithm.internals.functions.datetimes.Function_ADDSECONDS; +import toolgood.algorithm.internals.functions.datetimes.Function_ADDYEARS; +import toolgood.algorithm.internals.functions.datetimes.Function_DATE; +import toolgood.algorithm.internals.functions.datetimes.Function_DATEDIF; +import toolgood.algorithm.internals.functions.datetimes.Function_DATEVALUE; +import toolgood.algorithm.internals.functions.datetimes.Function_DAY; +import toolgood.algorithm.internals.functions.datetimes.Function_DAYS360; +import toolgood.algorithm.internals.functions.datetimes.Function_EDATE; +import toolgood.algorithm.internals.functions.datetimes.Function_EOMONTH; +import toolgood.algorithm.internals.functions.datetimes.Function_HOUR; +import toolgood.algorithm.internals.functions.datetimes.Function_MINUTE; +import toolgood.algorithm.internals.functions.datetimes.Function_MONTH; +import toolgood.algorithm.internals.functions.datetimes.Function_NETWORKDAYS; +import toolgood.algorithm.internals.functions.datetimes.Function_NOW; +import toolgood.algorithm.internals.functions.datetimes.Function_SECOND; +import toolgood.algorithm.internals.functions.datetimes.Function_TIME; +import toolgood.algorithm.internals.functions.datetimes.Function_TIMESTAMP; +import toolgood.algorithm.internals.functions.datetimes.Function_TIMEVALUE; +import toolgood.algorithm.internals.functions.datetimes.Function_TODAY; +import toolgood.algorithm.internals.functions.datetimes.Function_WEEKDAY; +import toolgood.algorithm.internals.functions.datetimes.Function_WEEKNUM; +import toolgood.algorithm.internals.functions.datetimes.Function_WORKDAY; +import toolgood.algorithm.internals.functions.datetimes.Function_YEAR; +import toolgood.algorithm.internals.functions.operator.Function_AND; +import toolgood.algorithm.internals.functions.operator.Function_AND_N; +import toolgood.algorithm.internals.functions.flow.Function_IF; +import toolgood.algorithm.internals.functions.flow.Function_IFERROR; +import toolgood.algorithm.internals.functions.flow.Function_ISEVEN; +import toolgood.algorithm.internals.functions.flow.Function_ISLOGICAL; +import toolgood.algorithm.internals.functions.flow.Function_ISNONTEXT; +import toolgood.algorithm.internals.functions.flow.Function_ISNULL; +import toolgood.algorithm.internals.functions.flow.Function_ISNULLOREMPTY; +import toolgood.algorithm.internals.functions.flow.Function_ISNULLORERROR; +import toolgood.algorithm.internals.functions.flow.Function_ISNULLORWHITESPACE; +import toolgood.algorithm.internals.functions.flow.Function_ISODD; +import toolgood.algorithm.internals.functions.flow.Function_ISTEXT; +import toolgood.algorithm.internals.functions.flow.Function_NOT; +import toolgood.algorithm.internals.functions.operator.Function_OR; +import toolgood.algorithm.internals.functions.operator.Function_OR_N; +import toolgood.algorithm.internals.functions.mathbase.*; +import toolgood.algorithm.internals.functions.mathsum.*; +import toolgood.algorithm.internals.functions.mathtransformation.*; +import toolgood.algorithm.internals.functions.mathtrigonometric.*; +import toolgood.algorithm.internals.functions.operator.Function_Connect; +import toolgood.algorithm.internals.functions.string.*; +import toolgood.algorithm.internals.functions.value.Function_Array; +import toolgood.algorithm.internals.functions.value.Function_ArrayJson; +import toolgood.algorithm.internals.functions.value.Function_DiyFunction; +import toolgood.algorithm.internals.functions.value.Function_ERROR; +import toolgood.algorithm.internals.functions.value.Function_GetJsonValue; +import toolgood.algorithm.internals.functions.value.Function_JSON; +import toolgood.algorithm.internals.functions.value.Function_NUM; +import toolgood.algorithm.internals.functions.value.Function_PARAM; +import toolgood.algorithm.internals.functions.value.Function_PARAMETER; +import toolgood.algorithm.internals.functions.value.Function_Value; +import toolgood.algorithm.math.mathParser; +import toolgood.algorithm.math.mathVisitor; + +public class MathFunctionVisitor extends AbstractParseTreeVisitor implements mathVisitor { +//#region base + + public FunctionBase visitProg(mathParser.ProgContext context) + { + return context.expr().accept(this); + } + + public FunctionBase visitMulDiv_fun(mathParser.MulDiv_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + String t = context.op.getText(); + if (CharUtil.Equals(t, '*')) { + return new Function_Mul(args1, args2); + } else if (CharUtil.Equals(t, '/')) { + return new Function_Div(args1, args2); + } + return new Function_Mod(args1, args2); + } + + public FunctionBase visitAddSub_fun(mathParser.AddSub_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + String t = context.op.getText(); + if (CharUtil.Equals(t, '&')) { + return new Function_Connect(args1, args2); + } else if (CharUtil.Equals(t, '+')) { + return new Function_Add(args1, args2); + } + return new Function_Sub(args1, args2); + } + + public FunctionBase visitJudge_fun(mathParser.Judge_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + + String type = context.op.getText(); + if (CharUtil.Equals(type, "=", "==", "===")) { + return new Function_EQ(args1, args2); + } else if (CharUtil.Equals(type, "<")) { + return new Function_LT(args1, args2); + } else if (CharUtil.Equals(type, "<=")) { + return new Function_LE(args1, args2); + } else if (CharUtil.Equals(type, ">")) { + return new Function_GT(args1, args2); + } else if (CharUtil.Equals(type, ">=")) { + return new Function_GE(args1, args2); + } + return new Function_NE(args1, args2); + } + + public FunctionBase visitAndOr_fun(mathParser.AndOr_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + String t = context.op.getText(); + if (CharUtil.Equals(t, "&&", "AND")) { + return new Function_AND(args1, args2); + } + return new Function_OR(args1, args2); + } + + //#endregion base + + //#region flow + + public FunctionBase visitIF_fun(mathParser.IF_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 3) { + FunctionBase args3 = exprs[2].accept(this); + return new Function_IF(args1, args2, args3); + } + return new Function_IF(args1, args2, null); + } + + public FunctionBase visitIFERROR_fun(mathParser.IFERROR_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_IFERROR(args1, args2, args3); + } + + public FunctionBase visitISNUMBER_fun(mathParser.ISNUMBER_funContext context) + { + FunctionBase args1 = this.visit(context.expr()); + return new Function_ISNUMBER(args1); + } + + public FunctionBase visitISTEXT_fun(mathParser.ISTEXT_funContext context) + { + FunctionBase args1 = this.visit(context.expr()); + return new Function_ISTEXT(args1); + } + + public FunctionBase visitIsError_fun(mathParser.IsError_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 2) { + FunctionBase args2 = exprs[1].accept(this); + return new Function_IsError(args1, args2); + } + return new Function_IsError(args1, null); + } + + public FunctionBase visitISNULL_fun(mathParser.ISNULL_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 2) { + FunctionBase args2 = exprs[1].accept(this); + return new Function_ISNULL(args1, args2); + } + return new Function_ISNULL(args1, null); + } + + public FunctionBase visitISNULLORERROR_fun(mathParser.ISNULLORERROR_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 2) { + FunctionBase args2 = exprs[1].accept(this); + return new Function_ISNULLORERROR(args1, args2); + } + return new Function_ISNULLORERROR(args1, null); + } + + public FunctionBase visitISEVEN_fun(mathParser.ISEVEN_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ISEVEN(args1); + } + + public FunctionBase visitISLOGICAL_fun(mathParser.ISLOGICAL_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ISLOGICAL(args1); + } + + public FunctionBase visitISODD_fun(mathParser.ISODD_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ISODD(args1); + } + + public FunctionBase visitISNONTEXT_fun(mathParser.ISNONTEXT_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ISNONTEXT(args1); + } + + public FunctionBase visitAND_fun(mathParser.AND_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_AND_N(args); + } + + public FunctionBase visitOR_fun(mathParser.OR_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_OR_N(args); + } + + public FunctionBase visitNOT_fun(mathParser.NOT_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_NOT(args1); + } + + public FunctionBase visitTRUE_fun(mathParser.TRUE_funContext context) + { + return new Function_Value(Operand.True); + } + + public FunctionBase visitFALSE_fun(mathParser.FALSE_funContext context) + { + return new Function_Value(Operand.False); + } + + //#endregion flow + + //#region math + + //#region base + + public FunctionBase visitE_fun(mathParser.E_funContext context) + { + return new Function_Value(Operand.Create(Math.E), "E"); + } + + public FunctionBase visitPI_fun(mathParser.PI_funContext context) + { + return new Function_Value(Operand.Create(Math.PI), "PI"); + } + + public FunctionBase visitABS_fun(mathParser.ABS_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ABS(args1); + } + + public FunctionBase visitQUOTIENT_fun(mathParser.QUOTIENT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_QUOTIENT(args1, args2); + } + + public FunctionBase visitMOD_fun(mathParser.MOD_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_Mod(args1, args2); + } + + public FunctionBase visitSIGN_fun(mathParser.SIGN_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_SIGN(args1); + } + + public FunctionBase visitSQRT_fun(mathParser.SQRT_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_SQRT(args1); + } + + public FunctionBase visitTRUNC_fun(mathParser.TRUNC_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_TRUNC(args1); + } + + public FunctionBase visitINT_fun(mathParser.INT_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_TRUNC(args1); + } + + public FunctionBase visitGCD_fun(mathParser.GCD_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_GCD(args); + } + + public FunctionBase visitLCM_fun(mathParser.LCM_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_LCM(args); + } + + public FunctionBase visitCOMBIN_fun(mathParser.COMBIN_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_COMBIN(args1, args2); + } + + public FunctionBase visitPERMUT_fun(mathParser.PERMUT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_PERMUT(args1, args2); + } + + public FunctionBase visitPercentage_fun(mathParser.Percentage_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_Percentage(args1); + } + + //#endregion base + + //#region trigonometric functions + + public FunctionBase visitDEGREES_fun(mathParser.DEGREES_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_DEGREES(args1); + } + + public FunctionBase visitRADIANS_fun(mathParser.RADIANS_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_RADIANS(args1); + } + + public FunctionBase visitCOS_fun(mathParser.COS_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_COS(args1); + } + + public FunctionBase visitCOSH_fun(mathParser.COSH_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_COSH(args1); + } + + public FunctionBase visitSIN_fun(mathParser.SIN_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_SIN(args1); + } + + public FunctionBase visitSINH_fun(mathParser.SINH_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_SINH(args1); + } + + public FunctionBase visitTAN_fun(mathParser.TAN_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_TAN(args1); + } + + public FunctionBase visitTANH_fun(mathParser.TANH_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_TANH(args1); + } + + public FunctionBase visitACOS_fun(mathParser.ACOS_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ACOS(args1); + } + + public FunctionBase visitACOSH_fun(mathParser.ACOSH_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ACOSH(args1); + } + + public FunctionBase visitASIN_fun(mathParser.ASIN_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ASIN(args1); + } + + public FunctionBase visitASINH_fun(mathParser.ASINH_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ASINH(args1); + } + + public FunctionBase visitATAN_fun(mathParser.ATAN_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ATAN(args1); + } + + public FunctionBase visitATANH_fun(mathParser.ATANH_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ATANH(args1); + } + + public FunctionBase visitATAN2_fun(mathParser.ATAN2_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_ATAN2(args1, args2); + } + + public FunctionBase visitFIXED_fun(mathParser.FIXED_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_FIXED(args1, null, null); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_FIXED(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_FIXED(args1, args2, args3); + } + + //#endregion trigonometric functions + + //#region transformation + + public FunctionBase visitBIN2OCT_fun(mathParser.BIN2OCT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_BIN2OCT(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_BIN2OCT(args1, args2); + } + + public FunctionBase visitBIN2DEC_fun(mathParser.BIN2DEC_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_BIN2DEC(args1); + } + + public FunctionBase visitBIN2HEX_fun(mathParser.BIN2HEX_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_BIN2HEX(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_BIN2HEX(args1, args2); + } + + public FunctionBase visitOCT2BIN_fun(mathParser.OCT2BIN_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_OCT2BIN(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_OCT2BIN(args1, args2); + } + + public FunctionBase visitOCT2DEC_fun(mathParser.OCT2DEC_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_OCT2DEC(args1); + } + + public FunctionBase visitOCT2HEX_fun(mathParser.OCT2HEX_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_OCT2HEX(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_OCT2HEX(args1, args2); + } + + public FunctionBase visitDEC2BIN_fun(mathParser.DEC2BIN_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_DEC2BIN(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_DEC2BIN(args1, args2); + } + + public FunctionBase visitDEC2OCT_fun(mathParser.DEC2OCT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_DEC2OCT(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_DEC2OCT(args1, args2); + } + + public FunctionBase visitDEC2HEX_fun(mathParser.DEC2HEX_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_DEC2HEX(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_DEC2HEX(args1, args2); + } + + public FunctionBase visitHEX2BIN_fun(mathParser.HEX2BIN_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_HEX2BIN(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_HEX2BIN(args1, args2); + } + + public FunctionBase visitHEX2OCT_fun(mathParser.HEX2OCT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_HEX2OCT(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_HEX2OCT(args1, args2); + } + + public FunctionBase visitHEX2DEC_fun(mathParser.HEX2DEC_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_HEX2DEC(args1); + } + + //#endregion transformation + + //#region rounding + + public FunctionBase visitROUND_fun(mathParser.ROUND_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) { + return new Function_ROUND(args1, null); + } + FunctionBase args2 = exprs[1].accept(this); + return new Function_ROUND(args1, args2); + } + + public FunctionBase visitROUNDDOWN_fun(mathParser.ROUNDDOWN_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_ROUNDDOWN(args1, args2); + } + + public FunctionBase visitROUNDUP_fun(mathParser.ROUNDUP_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_ROUNDUP(args1, args2); + } + + public FunctionBase visitCEILING_fun(mathParser.CEILING_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) + return new Function_CEILING(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_CEILING(args1, args2); + } + + public FunctionBase visitFLOOR_fun(mathParser.FLOOR_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) + return new Function_FLOOR(args1, null); + + FunctionBase args2 = exprs[1].accept(this); + return new Function_FLOOR(args1, args2); + } + + public FunctionBase visitEVEN_fun(mathParser.EVEN_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_EVEN(args1); + } + + public FunctionBase visitODD_fun(mathParser.ODD_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ODD(args1); + } + + public FunctionBase visitMROUND_fun(mathParser.MROUND_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_MROUND(args1, args2); + } + + //#endregion rounding + + //#region RAND + + public FunctionBase visitRAND_fun(mathParser.RAND_funContext context) + { + return new Function_RAND(); + } + + public FunctionBase visitRANDBETWEEN_fun(mathParser.RANDBETWEEN_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_RANDBETWEEN(args1, args2); + } + + //#endregion RAND + + //#region power logarithm factorial + + public FunctionBase visitCOVARIANCES_fun(mathParser.COVARIANCES_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_COVARIANCES(args1, args2); + } + + public FunctionBase visitCOVAR_fun(mathParser.COVAR_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_COVAR(args1, args2); + } + + public FunctionBase visitFACT_fun(mathParser.FACT_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_FACT(args1); + } + + public FunctionBase visitFACTDOUBLE_fun(mathParser.FACTDOUBLE_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_FACTDOUBLE(args1); + } + + public FunctionBase visitPOWER_fun(mathParser.POWER_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_POWER(args1, args2); + } + + public FunctionBase visitEXP_fun(mathParser.EXP_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_EXP(args1); + } + + public FunctionBase visitLN_fun(mathParser.LN_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_LN(args1); + } + + public FunctionBase visitLOG_fun(mathParser.LOG_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length > 1) { + FunctionBase args2 = exprs[1].accept(this); + return new Function_LOG(args1, args2); + } + return new Function_LOG(args1, null); + } + + public FunctionBase visitLOG10_fun(mathParser.LOG10_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_LOG(args1, null); + } + + public FunctionBase visitMULTINOMIAL_fun(mathParser.MULTINOMIAL_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_MULTINOMIAL(args); + } + + public FunctionBase visitPRODUCT_fun(mathParser.PRODUCT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_PRODUCT(args); + } + + public FunctionBase visitSQRTPI_fun(mathParser.SQRTPI_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_SQRTPI(args1); + } + + public FunctionBase visitSUMSQ_fun(mathParser.SUMSQ_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_SUMSQ(args); + } + + //#endregion + + //#endregion math + + //#region string + + public FunctionBase visitASC_fun(mathParser.ASC_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ASC(args1); + } + + public FunctionBase visitJIS_fun(mathParser.JIS_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_JIS(args1); + } + + public FunctionBase visitCHAR_fun(mathParser.CHAR_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_CHAR(args1); + } + + public FunctionBase visitCLEAN_fun(mathParser.CLEAN_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_CLEAN(args1); + } + + public FunctionBase visitCODE_fun(mathParser.CODE_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_CODE(args1); + } + + public FunctionBase visitCONCATENATE_fun(mathParser.CONCATENATE_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_CONCATENATE(args); + } + + public FunctionBase visitEXACT_fun(mathParser.EXACT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_EXACT(args1, args2); + } + + public FunctionBase visitFIND_fun(mathParser.FIND_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + + if (exprs.length == 2) { + return new Function_FIND(args1, args2, null); + } + FunctionBase count = exprs[2].accept(this); + return new Function_FIND(args1, args2, count); + } + + public FunctionBase visitLEFT_fun(mathParser.LEFT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) { + return new Function_LEFT(args1, null); + } + return new Function_LEFT(args1, exprs[1].accept(this)); + } + + public FunctionBase visitLEN_fun(mathParser.LEN_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_LEN(args1); + } + + public FunctionBase visitLOWER_fun(mathParser.LOWER_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_LOWER(args1); + } + + public FunctionBase visitMID_fun(mathParser.MID_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_MID(args1, args2, args3); + } + + public FunctionBase visitPROPER_fun(mathParser.PROPER_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_PROPER(args1); + } + + public FunctionBase visitREPLACE_fun(mathParser.REPLACE_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 3) { + FunctionBase args22 = exprs[1].accept(this); + FunctionBase args32 = exprs[2].accept(this); + return new Function_REPLACE(args1, args22, args32, null); + } + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + FunctionBase args4 = exprs[3].accept(this); + return new Function_REPLACE(args1, args2, args3, args4); + } + + public FunctionBase visitREPT_fun(mathParser.REPT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_REPT(args1, args2); + } + + public FunctionBase visitRIGHT_fun(mathParser.RIGHT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + + if (exprs.length == 1) { + return new Function_RIGHT(args1); + } + FunctionBase args2 = exprs[1].accept(this); + return new Function_RIGHT(args1, args2); + } + + public FunctionBase visitRMB_fun(mathParser.RMB_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_RMB(args1); + } + + public FunctionBase visitSEARCH_fun(mathParser.SEARCH_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + + if (exprs.length == 2) { + return new Function_SEARCH(args1, args2, null); + } + FunctionBase args3 = exprs[2].accept(this); + return new Function_SEARCH(args1, args2, args3); + } + + public FunctionBase visitSUBSTITUTE_fun(mathParser.SUBSTITUTE_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + if (exprs.length == 3) { + return new Function_SUBSTITUTE(args1, args2, args3, null); + } + FunctionBase args4 = exprs[3].accept(this); + return new Function_SUBSTITUTE(args1, args2, args3, args4); + } + + public FunctionBase visitT_fun(mathParser.T_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_T(args1); + } + + public FunctionBase visitTEXT_fun(mathParser.TEXT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_TEXT(args1, args2); + } + + public FunctionBase visitTRIM_fun(mathParser.TRIM_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_TRIM(args1); + } + + public FunctionBase visitUPPER_fun(mathParser.UPPER_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_UPPER(args1); + } + + public FunctionBase visitVALUE_fun(mathParser.VALUE_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_VALUE(args1); + } + + //#endregion string + + //#region MyDate time + + public FunctionBase visitDATEVALUE_fun(mathParser.DATEVALUE_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_DATEVALUE(args); + } + + public FunctionBase visitTIMESTAMP_fun(mathParser.TIMESTAMP_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_TIMESTAMP(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_TIMESTAMP(args1, args2); + } + + public FunctionBase visitTIMEVALUE_fun(mathParser.TIMEVALUE_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_TIMEVALUE(args1); + } + + public FunctionBase visitDATE_fun(mathParser.DATE_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_DATE(args); + } + + public FunctionBase visitTIME_fun(mathParser.TIME_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_TIME(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_TIME(args1, args2, args3); + } + + public FunctionBase visitNOW_fun(mathParser.NOW_funContext context) + { + return new Function_NOW(); + } + + public FunctionBase visitTODAY_fun(mathParser.TODAY_funContext context) + { + return new Function_TODAY(); + } + + public FunctionBase visitYEAR_fun(mathParser.YEAR_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_YEAR(args1); + } + + public FunctionBase visitMONTH_fun(mathParser.MONTH_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_MONTH(args1); + } + + public FunctionBase visitDAY_fun(mathParser.DAY_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_DAY(args1); + } + + public FunctionBase visitHOUR_fun(mathParser.HOUR_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_HOUR(args1); + } + + public FunctionBase visitMINUTE_fun(mathParser.MINUTE_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_MINUTE(args1); + } + + public FunctionBase visitSECOND_fun(mathParser.SECOND_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_SECOND(args1); + } + + public FunctionBase visitWEEKDAY_fun(mathParser.WEEKDAY_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_WEEKDAY(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_WEEKDAY(args1, args2); + } + + public FunctionBase visitDATEDIF_fun(mathParser.DATEDIF_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_DATEDIF(args1, args2, args3); + } + + public FunctionBase visitDAYS360_fun(mathParser.DAYS360_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 3) { + FunctionBase args3 = exprs[2].accept(this); + return new Function_DAYS360(args1, args2, args3); + } + return new Function_DAYS360(args1, args2, null); + } + + public FunctionBase visitEDATE_fun(mathParser.EDATE_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_EDATE(args1, args2); + } + + public FunctionBase visitEOMONTH_fun(mathParser.EOMONTH_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_EOMONTH(args1, args2); + } + + public FunctionBase visitNETWORKDAYS_fun(mathParser.NETWORKDAYS_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_NETWORKDAYS(args); + } + + public FunctionBase visitWORKDAY_fun(mathParser.WORKDAY_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_WORKDAY(args); + } + + public FunctionBase visitWEEKNUM_fun(mathParser.WEEKNUM_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_WEEKNUM(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_WEEKNUM(args1, args2); + } + + public FunctionBase visitADDMONTHS_fun(mathParser.ADDMONTHS_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_ADDMONTHS(args1, args2); + } + + public FunctionBase visitADDYEARS_fun(mathParser.ADDYEARS_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_ADDYEARS(args1, args2); + } + + public FunctionBase visitADDSECONDS_fun(mathParser.ADDSECONDS_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_ADDSECONDS(args1, args2); + } + + public FunctionBase visitADDMINUTES_fun(mathParser.ADDMINUTES_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_ADDMINUTES(args1, args2); + } + + public FunctionBase visitADDDAYS_fun(mathParser.ADDDAYS_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_ADDDAYS(args1, args2); + } + + public FunctionBase visitADDHOURS_fun(mathParser.ADDHOURS_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_ADDHOURS(args1, args2); + } + + //#endregion MyDate time + + //#region sum + + public FunctionBase visitMAX_fun(mathParser.MAX_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_MAX(args); + } + + public FunctionBase visitMEDIAN_fun(mathParser.MEDIAN_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_MEDIAN(args); + } + + public FunctionBase visitMIN_fun(mathParser.MIN_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_MIN(args); + } + + public FunctionBase visitQUARTILE_fun(mathParser.QUARTILE_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_QUARTILE(args1, args2); + } + + public FunctionBase visitMODE_fun(mathParser.MODE_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_MODE(args); + } + + public FunctionBase visitLARGE_fun(mathParser.LARGE_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_LARGE(args1, args2); + } + + public FunctionBase visitSMALL_fun(mathParser.SMALL_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_SMALL(args1, args2); + } + + public FunctionBase visitPERCENTILE_fun(mathParser.PERCENTILE_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_PERCENTILE(args1, args2); + } + + public FunctionBase visitPERCENTRANK_fun(mathParser.PERCENTRANK_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_PERCENTRANK(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_PERCENTRANK(args1, args2, args3); + } + + public FunctionBase visitAVERAGE_fun(mathParser.AVERAGE_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_AVERAGE(args); + } + + public FunctionBase visitAVERAGEIF_fun(mathParser.AVERAGEIF_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_AVERAGEIF(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_AVERAGEIF(args1, args2, args3); + } + + public FunctionBase visitGEOMEAN_fun(mathParser.GEOMEAN_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_GEOMEAN(args); + } + + public FunctionBase visitHARMEAN_fun(mathParser.HARMEAN_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_HARMEAN(args); + } + + public FunctionBase visitCOUNT_fun(mathParser.COUNT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_COUNT(args); + } + + public FunctionBase visitCOUNTIF_fun(mathParser.COUNTIF_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_COUNTIF(args1, args2); + } + + public FunctionBase visitSUM_fun(mathParser.SUM_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_SUM(args); + } + + public FunctionBase visitSUMIF_fun(mathParser.SUMIF_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_SUMIF(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_SUMIF(args1, args2, args3); + } + + public FunctionBase visitAVEDEV_fun(mathParser.AVEDEV_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_AVEDEV(args); + } + + public FunctionBase visitSTDEV_fun(mathParser.STDEV_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_STDEV(args); + } + + public FunctionBase visitSTDEVP_fun(mathParser.STDEVP_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_STDEVP(args); + } + + public FunctionBase visitDEVSQ_fun(mathParser.DEVSQ_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_DEVSQ(args); + } + + public FunctionBase visitVAR_fun(mathParser.VAR_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_VAR(args); + } + + public FunctionBase visitVARP_fun(mathParser.VARP_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_VARP(args); + } + + public FunctionBase visitNORMDIST_fun(mathParser.NORMDIST_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + FunctionBase args4 = exprs[3].accept(this); + return new Function_NORMDIST(args1, args2, args3, args4); + } + + public FunctionBase visitNORMINV_fun(mathParser.NORMINV_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_NORMINV(args1, args2, args3); + } + + public FunctionBase visitNORMSDIST_fun(mathParser.NORMSDIST_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_NORMSDIST(args1); + } + + public FunctionBase visitNORMSINV_fun(mathParser.NORMSINV_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_NORMSINV(args1); + } + + public FunctionBase visitBETADIST_fun(mathParser.BETADIST_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_BETADIST(args1, args2, args3); + } + + public FunctionBase visitBETAINV_fun(mathParser.BETAINV_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_BETAINV(args1, args2, args3); + } + + public FunctionBase visitBINOMDIST_fun(mathParser.BINOMDIST_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + FunctionBase args4 = exprs[3].accept(this); + return new Function_BINOMDIST(args1, args2, args3, args4); + } + + public FunctionBase visitEXPONDIST_fun(mathParser.EXPONDIST_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_EXPONDIST(args1, args2, args3); + } + + public FunctionBase visitFDIST_fun(mathParser.FDIST_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_FDIST(args1, args2, args3); + } + + public FunctionBase visitFINV_fun(mathParser.FINV_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_FINV(args1, args2, args3); + } + + public FunctionBase visitFISHER_fun(mathParser.FISHER_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_FISHER(args1); + } + + public FunctionBase visitFISHERINV_fun(mathParser.FISHERINV_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_FISHERINV(args1); + } + + public FunctionBase visitGAMMADIST_fun(mathParser.GAMMADIST_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + FunctionBase args4 = exprs[3].accept(this); + return new Function_GAMMADIST(args1, args2, args3, args4); + } + + public FunctionBase visitGAMMAINV_fun(mathParser.GAMMAINV_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_GAMMAINV(args1, args2, args3); + } + + public FunctionBase visitGAMMALN_fun(mathParser.GAMMALN_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_GAMMALN(args1); + } + + public FunctionBase visitHYPGEOMDIST_fun(mathParser.HYPGEOMDIST_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + FunctionBase args4 = exprs[3].accept(this); + return new Function_HYPGEOMDIST(args1, args2, args3, args4); + } + + public FunctionBase visitLOGINV_fun(mathParser.LOGINV_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_LOGINV(args1, args2, args3); + } + + public FunctionBase visitLOGNORMDIST_fun(mathParser.LOGNORMDIST_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_LOGNORMDIST(args1, args2, args3); + } + + public FunctionBase visitNEGBINOMDIST_fun(mathParser.NEGBINOMDIST_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_NEGBINOMDIST(args1, args2, args3); + } + + public FunctionBase visitPOISSON_fun(mathParser.POISSON_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_POISSON(args1, args2, args3); + } + + public FunctionBase visitTDIST_fun(mathParser.TDIST_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_TDIST(args1, args2, args3); + } + + public FunctionBase visitTINV_fun(mathParser.TINV_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_TINV(args1, args2); + } + + public FunctionBase visitWEIBULL_fun(mathParser.WEIBULL_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + FunctionBase args4 = exprs[3].accept(this); + return new Function_WEIBULL(args1, args2, args3, args4); + } + + //#endregion sum + + //#region csharp + + public FunctionBase visitURLENCODE_fun(mathParser.URLENCODE_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_URLENCODE(args1); + } + + public FunctionBase visitURLDECODE_fun(mathParser.URLDECODE_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_URLDECODE(args1); + } + + public FunctionBase visitHTMLENCODE_fun(mathParser.HTMLENCODE_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_HTMLENCODE(args1); + } + + public FunctionBase visitHTMLDECODE_fun(mathParser.HTMLDECODE_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_HTMLDECODE(args1); + } + + public FunctionBase visitBASE64TOTEXT_fun(mathParser.BASE64TOTEXT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_BASE64TOTEXT(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_BASE64TOTEXT(args1, args2); + } + + public FunctionBase visitBASE64URLTOTEXT_fun(mathParser.BASE64URLTOTEXT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_BASE64URLTOTEXT(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_BASE64URLTOTEXT(args1, args2); + } + + public FunctionBase visitTEXTTOBASE64_fun(mathParser.TEXTTOBASE64_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_TEXTTOBASE64(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_TEXTTOBASE64(args1, args2); + } + + public FunctionBase visitTEXTTOBASE64URL_fun(mathParser.TEXTTOBASE64URL_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_TEXTTOBASE64URL(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_TEXTTOBASE64URL(args1, args2); + } + + public FunctionBase visitREGEX_fun(mathParser.REGEX_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_REGEX(args1, args2); + } + + public FunctionBase visitREGEXREPALCE_fun(mathParser.REGEXREPALCE_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + FunctionBase args3 = exprs[2].accept(this); + return new Function_REGEXREPALCE(args1, args2, args3); + } + + public FunctionBase visitISREGEX_fun(mathParser.ISREGEX_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_ISREGEX(args1, args2); + } + + public FunctionBase visitGUID_fun(mathParser.GUID_funContext context) + { + return new Function_GUID(); + } + + public FunctionBase visitMD5_fun(mathParser.MD5_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_MD5(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_MD5(args1, args2); + } + + public FunctionBase visitSHA1_fun(mathParser.SHA1_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_SHA1(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_SHA1(args1, args2); + } + + public FunctionBase visitSHA256_fun(mathParser.SHA256_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_SHA256(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_SHA256(args1, args2); + } + + public FunctionBase visitSHA512_fun(mathParser.SHA512_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_SHA512(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_SHA512(args1, args2); + } + + public FunctionBase visitHMACMD5_fun(mathParser.HMACMD5_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_HMACMD5(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_HMACMD5(args1, args2, args3); + } + + public FunctionBase visitHMACSHA1_fun(mathParser.HMACSHA1_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_HMACSHA1(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_HMACSHA1(args1, args2, args3); + } + + public FunctionBase visitHMACSHA256_fun(mathParser.HMACSHA256_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_HMACSHA256(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_HMACSHA256(args1, args2, args3); + } + + public FunctionBase visitHMACSHA512_fun(mathParser.HMACSHA512_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_HMACSHA512(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_HMACSHA512(args1, args2, args3); + } + + public FunctionBase visitTRIMSTART_fun(mathParser.TRIMSTART_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_TRIMSTART(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_TRIMSTART(args1, args2); + } + + public FunctionBase visitTRIMEND_fun(mathParser.TRIMEND_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + if (exprs.length == 1) return new Function_TRIMEND(args1, null); + FunctionBase args2 = exprs[1].accept(this); + return new Function_TRIMEND(args1, args2); + } + + public FunctionBase visitINDEXOF_fun(mathParser.INDEXOF_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_INDEXOF(args1, args2, null, null); + FunctionBase args3 = exprs[2].accept(this); + if (exprs.length == 3) return new Function_INDEXOF(args1, args2, args3, null); + FunctionBase args4 = exprs[3].accept(this); + return new Function_INDEXOF(args1, args2, args3, args4); + } + + public FunctionBase visitLASTINDEXOF_fun(mathParser.LASTINDEXOF_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_LASTINDEXOF(args1, args2, null, null); + FunctionBase args3 = exprs[2].accept(this); + if (exprs.length == 3) return new Function_LASTINDEXOF(args1, args2, args3, null); + FunctionBase args4 = exprs[3].accept(this); + return new Function_LASTINDEXOF(args1, args2, args3, args4); + } + + public FunctionBase visitSPLIT_fun(mathParser.SPLIT_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_SPLIT(args1, args2); + } + + public FunctionBase visitJOIN_fun(mathParser.JOIN_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_JOIN(args); + } + + public FunctionBase visitSUBSTRING_fun(mathParser.SUBSTRING_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_SUBSTRING(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_SUBSTRING(args1, args2, args3); + } + + public FunctionBase visitSTARTSWITH_fun(mathParser.STARTSWITH_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_STARTSWITH(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_STARTSWITH(args1, args2, args3); + } + + public FunctionBase visitENDSWITH_fun(mathParser.ENDSWITH_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_ENDSWITH(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_ENDSWITH(args1, args2, args3); + } + + public FunctionBase visitISNULLOREMPTY_fun(mathParser.ISNULLOREMPTY_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ISNULLOREMPTY(args1); + } + + public FunctionBase visitISNULLORWHITESPACE_fun(mathParser.ISNULLORWHITESPACE_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ISNULLORWHITESPACE(args1); + } + + public FunctionBase visitREMOVESTART_fun(mathParser.REMOVESTART_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_REMOVESTART(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_REMOVESTART(args1, args2, args3); + } + + public FunctionBase visitREMOVEEND_fun(mathParser.REMOVEEND_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + if (exprs.length == 2) return new Function_REMOVEEND(args1, args2, null); + FunctionBase args3 = exprs[2].accept(this); + return new Function_REMOVEEND(args1, args2, args3); + } + + public FunctionBase visitJSON_fun(mathParser.JSON_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_JSON(args1); + } + + //#endregion csharp + + //#region LOOKFLOOR LOOKCEILING + public FunctionBase visitLOOKFLOOR_fun(mathParser.LOOKFLOOR_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_LOOKFLOOR(args1, args2); + } + + public FunctionBase visitLOOKCEILING_fun(mathParser.LOOKCEILING_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase args1 = exprs[0].accept(this); + FunctionBase args2 = exprs[1].accept(this); + return new Function_LOOKCEILING(args1, args2); + } + //#endregion + + //#region getValue + + public FunctionBase visitArray_fun(mathParser.Array_funContext context) + { + mathParser.ExprContext[] exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_Array(args); + } + + public FunctionBase visitBracket_fun(mathParser.Bracket_funContext context) + { + return context.expr().accept(this); + } + + public FunctionBase visitNUM_fun(mathParser.NUM_funContext context) + { + double d = Double.parseDouble(context.num().getText()); + if (context.unit() == null) { return new Function_Value(Operand.Create(d), context.num().getText()); } + String unit = context.unit().getText(); + return new Function_NUM(d, unit); + } + + public FunctionBase visitNum(mathParser.NumContext context) + { + double d = Double.parseDouble(context.getText()); + return new Function_Value(Operand.Create(d), context.getText()); + } + + public FunctionBase visitUnit(mathParser.UnitContext context) + { + return new Function_Value(Operand.Create(context.getText())); + } + + public FunctionBase visitSTRING_fun(mathParser.STRING_funContext context) + { + String opd = context.getText(); + StringBuilder sb = new StringBuilder(); + int index = 1; + while (index < opd.length() - 1) { + char c = opd.charAt(index++); + if (c == '\\') { + char c2 = opd.charAt(index++); + if (c2 == 'n') sb.append('\n'); + else if (c2 == 'r') sb.append('\r'); + else if (c2 == 't') sb.append('\t'); + else if (c2 == '0') sb.append('\0'); + else if (c2 == 'v') sb.append('\v'); + else if (c2 == 'a') sb.append('\a'); + else if (c2 == 'b') sb.append('\b'); + else if (c2 == 'f') sb.append('\f'); + else sb.append(opd.charAt(index++)); + } else { + sb.append(c); + } + } + return new Function_Value(Operand.Create(sb.toString())); + } + + public FunctionBase visitNULL_fun(mathParser.NULL_funContext context) + { + return new Function_Value(Operand.CreateNull(), "NULL"); + } + + public FunctionBase visitPARAMETER_fun(mathParser.PARAMETER_funContext context) + { + ITerminalNode node = context.PARAMETER(); + return new Function_PARAMETER(node.GetText()); + } + + public FunctionBase visitParameter2(mathParser.Parameter2Context context) + { + return new Function_Value(Operand.Create(context.children[0].GetText())); + } + + public FunctionBase visitGetJsonValue_fun(mathParser.GetJsonValue_funContext context) + { + var exprs = context.expr(); + var args1 = exprs[0].accept(this); + if (context.PARAMETER()!=null) { + var op = new Function_PARAMETER(context.PARAMETER().GetText()); + return new Function_GetJsonValue(args1, op); + } + if (context.parameter2() != null) { + var op = context.parameter2().accept(this); + return new Function_GetJsonValue(args1, op); + } + var op2 = exprs[1].accept(this); + return new Function_GetJsonValue(args1, op2); + } + + public FunctionBase visitDiyFunction_fun(mathParser.DiyFunction_funContext context) + { + var funName = context.PARAMETER().GetText(); + var exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.Length]; + for (int i = 0; i < exprs.Length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_DiyFunction(funName, args); + } + + public FunctionBase visitPARAM_fun(mathParser.PARAM_funContext context) + { + var exprs = context.expr(); + var args1 = exprs[0].accept(this); + if (exprs.Length == 1) { + return new Function_PARAM(args1, null); + } + var args2 = exprs[1].accept(this); + return new Function_PARAM(args1, args2); + } + + public FunctionBase visitHAS_fun(mathParser.HAS_funContext context) + { + var exprs = context.expr(); + var args1 = exprs[0].accept(this); + var args2 = exprs[1].accept(this); + return new Function_HAS(args1, args2); + } + + public FunctionBase visitHASVALUE_fun(mathParser.HASVALUE_funContext context) + { + var exprs = context.expr(); + var args1 = exprs[0].accept(this); + var args2 = exprs[1].accept(this); + return new Function_HASVALUE(args1, args2); + } + + public FunctionBase visitArrayJson_fun(mathParser.ArrayJson_funContext context) + { + var exprs = context.arrayJson(); + FunctionBase[] args = new FunctionBase[exprs.Length]; + for (int i = 0; i < exprs.Length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_ArrayJson(args); + } + + public FunctionBase visitArrayJson(mathParser.ArrayJsonContext context) + { + string keyName = null; + //KeyValue keyValue = new KeyValue(); + if (context.NUM() != null) { + if (int.TryParse(context.NUM().GetText(), out int key)) { + keyName = key.ToString(); + } else { + return new Function_Value(Operand.Error("Json key '" + context.NUM().GetText() + "' is error!")); + } + } + if (context.STRING() != null) { + var opd = context.STRING().GetText(); + var sb = new StringBuilder(opd.Length - 2); + int index = 1; + while (index < opd.Length - 1) { + var c = opd[index++]; + if (c == '\\') { + var c2 = opd[index++]; + if (c2 == 'n') sb.Append('\n'); + else if (c2 == 'r') sb.Append('\r'); + else if (c2 == 't') sb.Append('\t'); + else if (c2 == '0') sb.Append('\0'); + else if (c2 == 'v') sb.Append('\v'); + else if (c2 == 'a') sb.Append('\a'); + else if (c2 == 'b') sb.Append('\b'); + else if (c2 == 'f') sb.Append('\f'); + else sb.Append(opd[index++]); + } else { + sb.Append(c); + } + } + keyName = sb.ToString(); + } + if (context.parameter2() != null) { + keyName = context.parameter2().GetText(); + } + var f = context.expr().accept(this); + return new Function_ArrayJsonItem(keyName, f); + } + + public FunctionBase visitERROR_fun(mathParser.ERROR_funContext context) + { + if (context.expr() == null) { return new Function_Value(Operand.Error("")); } + var args1 = context.expr().accept(this); + return new Function_ERROR(args1); + } + + public FunctionBase visitVersion_fun(mathParser.Version_funContext context) + { + return new Function_Value(Operand.Version); + } + + + + //#endregion getValue + } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java index 0700ebd67..60ab82954 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java @@ -6,8 +6,11 @@ import toolgood.algorithm.math.mathParser; import toolgood.algorithm.math.mathParser.COVARIANCES_funContext; import toolgood.algorithm.math.mathParser.COVAR_funContext; +import toolgood.algorithm.math.mathParser.LOOKCEILING_funContext; +import toolgood.algorithm.math.mathParser.LOOKFLOOR_funContext; import toolgood.algorithm.math.mathParser.Version_funContext; import toolgood.algorithm.math.mathVisitor; +import toolgood.algorithm.internals.ConditionTree; import java.util.ArrayList; @@ -226,10 +229,6 @@ public ConditionTree visitJIS_fun(mathParser.JIS_funContext context) { return visit_fun(context); } - @Override - public ConditionTree visitCRC32_fun(mathParser.CRC32_funContext context) { - return visit_fun(context); - } @Override public ConditionTree visitLCM_fun(mathParser.LCM_funContext context) { @@ -1173,15 +1172,6 @@ public ConditionTree visitParameter2(mathParser.Parameter2Context context) { return visit_fun(context); } - @Override - public ConditionTree visitVLOOKUP_fun(mathParser.VLOOKUP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOOKUP_fun(mathParser.LOOKUP_funContext context) { - return visit_fun(context); - } @Override public ConditionTree visitNULL_fun(mathParser.NULL_funContext context) { @@ -1221,4 +1211,14 @@ public ConditionTree visitCOVAR_fun(COVAR_funContext context) { public ConditionTree visitVersion_fun(Version_funContext context) { return visit_fun(context); } + + @Override + public ConditionTree visitLOOKFLOOR_fun(LOOKFLOOR_funContext context) { + return visit_fun(context); + } + + @Override + public ConditionTree visitLOOKCEILING_fun(LOOKCEILING_funContext context) { + return visit_fun(context); +} } From 3b277ed34f35af1fc02dab5a2aad01d435d101c9 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 08:25:23 +0800 Subject: [PATCH 18/98] fix --- .../functions/csharp/Function_ENDSWITH.java | 2 +- .../functions/csharp/Function_HAS.java | 2 +- .../functions/csharp/Function_HASVALUE.java | 2 +- .../functions/csharp/Function_INDEXOF.java | 2 +- .../functions/csharp/Function_ISREGEX.java | 2 +- .../csharp/Function_LASTINDEXOF.java | 2 +- .../csharp/Function_LOOKCEILING.java | 2 +- .../functions/csharp/Function_LOOKFLOOR.java | 2 +- .../functions/csharp/Function_REGEX.java | 2 +- .../csharp/Function_REGEXREPALCE.java | 2 +- .../functions/csharp/Function_REMOVEEND.java | 2 +- .../csharp/Function_REMOVESTART.java | 2 +- .../functions/csharp/Function_SPLIT.java | 2 +- .../functions/csharp/Function_STARTSWITH.java | 2 +- .../functions/csharp/Function_SUBSTRING.java | 2 +- .../functions/csharp/Function_TRIMEND.java | 2 +- .../functions/csharp/Function_TRIMSTART.java | 2 +- .../csharpsecurity/Function_HMACMD5.java | 2 +- .../csharpsecurity/Function_HMACSHA1.java | 2 +- .../csharpsecurity/Function_HMACSHA256.java | 2 +- .../csharpsecurity/Function_HMACSHA512.java | 2 +- .../csharpsecurity/Function_MD5.java | 2 +- .../csharpsecurity/Function_SHA1.java | 2 +- .../csharpsecurity/Function_SHA256.java | 2 +- .../csharpsecurity/Function_SHA512.java | 2 +- .../csharpweb/Function_BASE64TOTEXT.java | 2 +- .../csharpweb/Function_BASE64URLTOTEXT.java | 2 +- .../csharpweb/Function_TEXTTOBASE64.java | 2 +- .../csharpweb/Function_TEXTTOBASE64URL.java | 2 +- .../functions/datetimes/Function_ADDDAYS.java | 2 +- .../datetimes/Function_ADDHOURS.java | 2 +- .../datetimes/Function_ADDMINUTES.java | 2 +- .../datetimes/Function_ADDMONTHS.java | 2 +- .../datetimes/Function_ADDSECONDS.java | 2 +- .../datetimes/Function_ADDYEARS.java | 2 +- .../functions/datetimes/Function_DATEDIF.java | 2 +- .../functions/datetimes/Function_DAYS360.java | 2 +- .../functions/datetimes/Function_EDATE.java | 2 +- .../functions/datetimes/Function_EOMONTH.java | 2 +- .../functions/datetimes/Function_TIME.java | 2 +- .../datetimes/Function_TIMESTAMP.java | 2 +- .../functions/datetimes/Function_WEEKDAY.java | 2 +- .../functions/datetimes/Function_WEEKNUM.java | 2 +- .../functions/mathsum/Function_BETADIST.java | 1 + .../functions/mathsum/Function_BETAINV.java | 1 + .../functions/mathsum/Function_BINOMDIST.java | 1 + .../functions/mathsum/Function_EXPONDIST.java | 1 + .../functions/mathsum/Function_FDIST.java | 1 + .../functions/mathsum/Function_FINV.java | 1 + .../functions/mathsum/Function_GAMMADIST.java | 3 +- .../functions/mathsum/Function_GAMMAINV.java | 3 +- .../functions/mathsum/Function_GAMMALN.java | 1 + .../mathsum/Function_HYPGEOMDIST.java | 3 +- .../functions/mathsum/Function_LARGE.java | 2 +- .../functions/mathsum/Function_LOGINV.java | 3 +- .../mathsum/Function_LOGNORMDIST.java | 3 +- .../mathsum/Function_NEGBINOMDIST.java | 3 +- .../functions/mathsum/Function_NORMDIST.java | 3 +- .../functions/mathsum/Function_NORMINV.java | 3 +- .../functions/mathsum/Function_NORMSDIST.java | 1 + .../functions/mathsum/Function_NORMSINV.java | 1 + .../mathsum/Function_PERCENTILE.java | 3 +- .../mathsum/Function_PERCENTRANK.java | 7 +- .../functions/mathsum/Function_POISSON.java | 7 +- .../functions/mathsum/Function_QUARTILE.java | 7 +- .../functions/mathsum/Function_SMALL.java | 4 +- .../functions/mathsum/Function_SUMIF.java | 4 +- .../functions/mathsum/Function_TDIST.java | 7 +- .../functions/mathsum/Function_TINV.java | 7 +- .../functions/mathsum/Function_WEIBULL.java | 7 +- .../visitors/MathFunctionVisitor.java | 1163 +++++++++-------- 71 files changed, 682 insertions(+), 655 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java index 27a315d8c..97c1d307b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java index 689d5c1dc..2757014be 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java index 5af76fdb6..6b9b2dc4b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java index b816b3dfe..5f28b93eb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_4; +import toolgood.algorithm.internals.functions.Function_4; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java index 1d02d1168..095fd8fcd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java index 71d26bb90..e0f469a44 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_4; +import toolgood.algorithm.internals.functions.Function_4; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java index 614b18260..3c44f7823 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java index 0f328d85b..503a6a849 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java index 30c9b037a..e6d690a81 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java index fe2d3526e..8275e7ddd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java index 4c2b17ae5..8230221b4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java index 07693bfdc..0cfd304ec 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java index 65bd1878a..496d1d2de 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java index 2f0f89749..5941b0b9c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java index 90b6ccbc0..b0f02af1f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java index 3e370494c..0d1d85089 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java index a2895bae9..5c3c7e4b3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java index 9e8503367..26079e3ad 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java index a35525464..ee631307d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java index df26b19e0..a02ecc9b4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java index 0613b4c87..7e8f600e4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java index 72c0eb6a9..0e34621ef 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java index 63e7fd7a5..f48ded300 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java index 3d4e9b8af..54458dc7d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java index d5d1812f8..fc93903b1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java index 08ce7c09c..c9e525aa2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java index 7317568c8..92b48cce9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java index ce95bf583..eba1cff0c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java index 09252fd79..ab4b8bcc1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java index ee29ac6df..e7dac97ed 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java index 6d8800291..b590dd850 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java index d7d2cf8e7..2fc1390c1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java index 17dbc7065..7447045a5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java index 59f65158e..0c50d1c71 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java index b1d3e0c14..f33b7a8ed 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java index 7f3614fc0..1f2cf311b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java index e1f224c6a..413d37364 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java index fb7f73f96..446f3a176 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java index 2ccf9c1de..e67317996 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java index 852cbc56b..e2f69434c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java index f21a283ad..ac6216b39 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index 1318e96a7..52fb545a0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index 8758fe362..6943995ee 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java index 2e863766c..6d5b0eece 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java @@ -6,6 +6,7 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_BETADIST extends Function_3 { public Function_BETADIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java index dbbfaf02d..9e03e4877 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java @@ -6,6 +6,7 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_BETAINV extends Function_3 { public Function_BETAINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java index b71bdbb41..7e58d7462 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java @@ -6,6 +6,7 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_BINOMDIST extends Function_4 { public Function_BINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { super(func1, func2, func3, func4); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java index 330f08019..db3b4d3f1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java @@ -6,6 +6,7 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_EXPONDIST extends Function_3 { public Function_EXPONDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java index 98c4f52e6..74dadc8b9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java @@ -6,6 +6,7 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_FDIST extends Function_3 { public Function_FDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java index e4f5ab3f2..4c4670503 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java @@ -6,6 +6,7 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_FINV extends Function_3 { public Function_FINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java index a6b1c0652..1bd321156 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java @@ -2,10 +2,11 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_4; +import toolgood.algorithm.internals.functions.Function_4; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_GAMMADIST extends Function_4 { public Function_GAMMADIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { super(func1, func2, func3, func4); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java index 9c0325858..bcdb99a02 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java @@ -2,10 +2,11 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_GAMMAINV extends Function_3 { public Function_GAMMAINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java index 7510bd477..927cbe18a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java @@ -6,6 +6,7 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_GAMMALN extends Function_1 { public Function_GAMMALN(FunctionBase func1) { super(func1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java index 15f5be309..c198298c9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java @@ -2,10 +2,11 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_4; +import toolgood.algorithm.internals.functions.Function_4; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_HYPGEOMDIST extends Function_4 { public Function_HYPGEOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { super(func1, func2, func3, func4); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java index dce42a078..4b63b3db8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java @@ -6,7 +6,7 @@ import java.util.List; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java index 3e929cd69..553b6da1c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java @@ -2,10 +2,11 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_LOGINV extends Function_3 { public Function_LOGINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java index b73db73f7..fdafa0c1e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java @@ -2,10 +2,11 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_LOGNORMDIST extends Function_3 { public Function_LOGNORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java index e06dd1a68..7787910b0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java @@ -2,10 +2,11 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_NEGBINOMDIST extends Function_3 { public Function_NEGBINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java index efdbf63e8..afadba345 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java @@ -2,10 +2,11 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_4; +import toolgood.algorithm.internals.functions.Function_4; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_NORMDIST extends Function_4 { public Function_NORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { super(func1, func2, func3, func4); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java index 856b8cc2b..7b99dd6bb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java @@ -2,10 +2,11 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_NORMINV extends Function_3 { public Function_NORMINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java index 41da3016e..1860eb290 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java @@ -6,6 +6,7 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_NORMSDIST extends Function_1 { public Function_NORMSDIST(FunctionBase func1) { super(func1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java index 593f7b56d..7dbd235f1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java @@ -6,6 +6,7 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_NORMSINV extends Function_1 { public Function_NORMSINV(FunctionBase func1) { super(func1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java index e44a58cda..d083b6721 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java @@ -4,11 +4,12 @@ import java.util.List; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.FunctionUtil; import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_PERCENTILE extends Function_2 { public Function_PERCENTILE(FunctionBase func1, FunctionBase func2) { super(func1, func2); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java index dcb3d65af..91730a5d6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java @@ -4,11 +4,12 @@ import java.util.function.Function; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.OperandType; +import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.mathnet.ExcelFunctions; +import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_PERCENTRANK extends Function_3 { public Function_PERCENTRANK(FunctionBase func1, FunctionBase func2, FunctionBase func3) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java index 7d9ad9816..2abb87269 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java @@ -3,10 +3,11 @@ import java.util.function.Function; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.OperandType; -import toolgood.algorithm.mathnet.ExcelFunctions; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_POISSON extends Function_3 { public Function_POISSON(FunctionBase func1, FunctionBase func2, FunctionBase func3) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java index d592ae22a..292a08b2d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java @@ -4,11 +4,12 @@ import java.util.function.Function; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.OperandType; +import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.mathnet.ExcelFunctions; +import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_QUARTILE extends Function_2 { public Function_QUARTILE(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java index 36b9765eb..bd52f36d4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -5,9 +5,9 @@ import java.util.stream.Collectors; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.OperandType; +import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; public class Function_SMALL extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java index 19fb7efaa..e215d9952 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java @@ -5,9 +5,9 @@ import java.util.function.Function; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.OperandType; +import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; public class Function_SUMIF extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java index 62e7984d1..1cd6110f8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java @@ -3,10 +3,11 @@ import java.util.function.Function; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_3; +import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.OperandType; -import toolgood.algorithm.mathnet.ExcelFunctions; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_TDIST extends Function_3 { public Function_TDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java index e5b2fc6ac..1731ee2e2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java @@ -3,10 +3,11 @@ import java.util.function.Function; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_2; +import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.OperandType; -import toolgood.algorithm.mathnet.ExcelFunctions; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_TINV extends Function_2 { public Function_TINV(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java index 7837550ab..fafa957f0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java @@ -3,10 +3,11 @@ import java.util.function.Function; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.Function_4; +import toolgood.algorithm.internals.functions.Function_4; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.OperandType; -import toolgood.algorithm.mathnet.ExcelFunctions; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.mathNet.ExcelFunctions; + public class Function_WEIBULL extends Function_4 { public Function_WEIBULL(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java index 4ce96863b..39416244c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java @@ -1,5 +1,7 @@ package toolgood.algorithm.internals.visitors; +import java.util.List; + import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; import toolgood.algorithm.Operand; @@ -111,6 +113,7 @@ import toolgood.algorithm.internals.functions.value.Function_PARAMETER; import toolgood.algorithm.internals.functions.value.Function_Value; import toolgood.algorithm.math.mathParser; +import toolgood.algorithm.math.mathParser.ExprContext; import toolgood.algorithm.math.mathVisitor; public class MathFunctionVisitor extends AbstractParseTreeVisitor implements mathVisitor { @@ -123,9 +126,9 @@ public FunctionBase visitProg(mathParser.ProgContext context) public FunctionBase visitMulDiv_fun(mathParser.MulDiv_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); String t = context.op.getText(); if (CharUtil.Equals(t, '*')) { return new Function_Mul(args1, args2); @@ -137,9 +140,9 @@ public FunctionBase visitMulDiv_fun(mathParser.MulDiv_funContext context) public FunctionBase visitAddSub_fun(mathParser.AddSub_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); String t = context.op.getText(); if (CharUtil.Equals(t, '&')) { return new Function_Connect(args1, args2); @@ -151,9 +154,9 @@ public FunctionBase visitAddSub_fun(mathParser.AddSub_funContext context) public FunctionBase visitJudge_fun(mathParser.Judge_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); String type = context.op.getText(); if (CharUtil.Equals(type, "=", "==", "===")) { @@ -172,9 +175,9 @@ public FunctionBase visitJudge_fun(mathParser.Judge_funContext context) public FunctionBase visitAndOr_fun(mathParser.AndOr_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); String t = context.op.getText(); if (CharUtil.Equals(t, "&&", "AND")) { return new Function_AND(args1, args2); @@ -188,11 +191,11 @@ public FunctionBase visitAndOr_fun(mathParser.AndOr_funContext context) public FunctionBase visitIF_fun(mathParser.IF_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 3) { - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 3) { + FunctionBase args3 = exprs.get(2).accept(this); return new Function_IF(args1, args2, args3); } return new Function_IF(args1, args2, null); @@ -200,10 +203,10 @@ public FunctionBase visitIF_fun(mathParser.IF_funContext context) public FunctionBase visitIFERROR_fun(mathParser.IFERROR_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_IFERROR(args1, args2, args3); } @@ -219,23 +222,23 @@ public FunctionBase visitISTEXT_fun(mathParser.ISTEXT_funContext context) return new Function_ISTEXT(args1); } - public FunctionBase visitIsError_fun(mathParser.IsError_funContext context) + public FunctionBase visitISERROR_fun(mathParser.ISERROR_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 2) { - FunctionBase args2 = exprs[1].accept(this); - return new Function_IsError(args1, args2); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 2) { + FunctionBase args2 = exprs.get(1).accept(this); + return new Function_ISERROR(args1, args2); } - return new Function_IsError(args1, null); + return new Function_ISERROR(args1, null); } public FunctionBase visitISNULL_fun(mathParser.ISNULL_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 2) { - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 2) { + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ISNULL(args1, args2); } return new Function_ISNULL(args1, null); @@ -243,10 +246,10 @@ public FunctionBase visitISNULL_fun(mathParser.ISNULL_funContext context) public FunctionBase visitISNULLORERROR_fun(mathParser.ISNULLORERROR_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 2) { - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 2) { + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ISNULLORERROR(args1, args2); } return new Function_ISNULLORERROR(args1, null); @@ -278,20 +281,20 @@ public FunctionBase visitISNONTEXT_fun(mathParser.ISNONTEXT_funContext context) public FunctionBase visitAND_fun(mathParser.AND_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_AND_N(args); } public FunctionBase visitOR_fun(mathParser.OR_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_OR_N(args); } @@ -336,17 +339,17 @@ public FunctionBase visitABS_fun(mathParser.ABS_funContext context) public FunctionBase visitQUOTIENT_fun(mathParser.QUOTIENT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_QUOTIENT(args1, args2); } public FunctionBase visitMOD_fun(mathParser.MOD_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_Mod(args1, args2); } @@ -376,37 +379,37 @@ public FunctionBase visitINT_fun(mathParser.INT_funContext context) public FunctionBase visitGCD_fun(mathParser.GCD_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_GCD(args); } public FunctionBase visitLCM_fun(mathParser.LCM_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_LCM(args); } public FunctionBase visitCOMBIN_fun(mathParser.COMBIN_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_COMBIN(args1, args2); } public FunctionBase visitPERMUT_fun(mathParser.PERMUT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_PERMUT(args1, args2); } @@ -506,20 +509,20 @@ public FunctionBase visitATANH_fun(mathParser.ATANH_funContext context) public FunctionBase visitATAN2_fun(mathParser.ATAN2_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ATAN2(args1, args2); } public FunctionBase visitFIXED_fun(mathParser.FIXED_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_FIXED(args1, null, null); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_FIXED(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_FIXED(args1, null, null); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_FIXED(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_FIXED(args1, args2, args3); } @@ -529,10 +532,10 @@ public FunctionBase visitFIXED_fun(mathParser.FIXED_funContext context) public FunctionBase visitBIN2OCT_fun(mathParser.BIN2OCT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_BIN2OCT(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_BIN2OCT(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_BIN2OCT(args1, args2); } @@ -544,19 +547,19 @@ public FunctionBase visitBIN2DEC_fun(mathParser.BIN2DEC_funContext context) public FunctionBase visitBIN2HEX_fun(mathParser.BIN2HEX_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_BIN2HEX(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_BIN2HEX(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_BIN2HEX(args1, args2); } public FunctionBase visitOCT2BIN_fun(mathParser.OCT2BIN_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_OCT2BIN(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_OCT2BIN(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_OCT2BIN(args1, args2); } @@ -568,55 +571,55 @@ public FunctionBase visitOCT2DEC_fun(mathParser.OCT2DEC_funContext context) public FunctionBase visitOCT2HEX_fun(mathParser.OCT2HEX_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_OCT2HEX(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_OCT2HEX(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_OCT2HEX(args1, args2); } public FunctionBase visitDEC2BIN_fun(mathParser.DEC2BIN_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_DEC2BIN(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_DEC2BIN(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_DEC2BIN(args1, args2); } public FunctionBase visitDEC2OCT_fun(mathParser.DEC2OCT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_DEC2OCT(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_DEC2OCT(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_DEC2OCT(args1, args2); } public FunctionBase visitDEC2HEX_fun(mathParser.DEC2HEX_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_DEC2HEX(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_DEC2HEX(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_DEC2HEX(args1, args2); } public FunctionBase visitHEX2BIN_fun(mathParser.HEX2BIN_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_HEX2BIN(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_HEX2BIN(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_HEX2BIN(args1, args2); } public FunctionBase visitHEX2OCT_fun(mathParser.HEX2OCT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_HEX2OCT(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_HEX2OCT(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_HEX2OCT(args1, args2); } @@ -632,49 +635,49 @@ public FunctionBase visitHEX2DEC_fun(mathParser.HEX2DEC_funContext context) public FunctionBase visitROUND_fun(mathParser.ROUND_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) { return new Function_ROUND(args1, null); } - FunctionBase args2 = exprs[1].accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ROUND(args1, args2); } public FunctionBase visitROUNDDOWN_fun(mathParser.ROUNDDOWN_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ROUNDDOWN(args1, args2); } public FunctionBase visitROUNDUP_fun(mathParser.ROUNDUP_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ROUNDUP(args1, args2); } public FunctionBase visitCEILING_fun(mathParser.CEILING_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_CEILING(args1, null); - FunctionBase args2 = exprs[1].accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_CEILING(args1, args2); } public FunctionBase visitFLOOR_fun(mathParser.FLOOR_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_FLOOR(args1, null); - FunctionBase args2 = exprs[1].accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_FLOOR(args1, args2); } @@ -692,9 +695,9 @@ public FunctionBase visitODD_fun(mathParser.ODD_funContext context) public FunctionBase visitMROUND_fun(mathParser.MROUND_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_MROUND(args1, args2); } @@ -709,9 +712,9 @@ public FunctionBase visitRAND_fun(mathParser.RAND_funContext context) public FunctionBase visitRANDBETWEEN_fun(mathParser.RANDBETWEEN_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_RANDBETWEEN(args1, args2); } @@ -721,17 +724,17 @@ public FunctionBase visitRANDBETWEEN_fun(mathParser.RANDBETWEEN_funContext conte public FunctionBase visitCOVARIANCES_fun(mathParser.COVARIANCES_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_COVARIANCES(args1, args2); } public FunctionBase visitCOVAR_fun(mathParser.COVAR_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_COVAR(args1, args2); } @@ -749,9 +752,9 @@ public FunctionBase visitFACTDOUBLE_fun(mathParser.FACTDOUBLE_funContext context public FunctionBase visitPOWER_fun(mathParser.POWER_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_POWER(args1, args2); } @@ -769,11 +772,11 @@ public FunctionBase visitLN_fun(mathParser.LN_funContext context) public FunctionBase visitLOG_fun(mathParser.LOG_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); + List exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length > 1) { - FunctionBase args2 = exprs[1].accept(this); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() > 1) { + FunctionBase args2 = exprs.get(1).accept(this); return new Function_LOG(args1, args2); } return new Function_LOG(args1, null); @@ -787,20 +790,20 @@ public FunctionBase visitLOG10_fun(mathParser.LOG10_funContext context) public FunctionBase visitMULTINOMIAL_fun(mathParser.MULTINOMIAL_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_MULTINOMIAL(args); } public FunctionBase visitPRODUCT_fun(mathParser.PRODUCT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_PRODUCT(args); } @@ -813,10 +816,10 @@ public FunctionBase visitSQRTPI_fun(mathParser.SQRTPI_funContext context) public FunctionBase visitSUMSQ_fun(mathParser.SUMSQ_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_SUMSQ(args); } @@ -859,43 +862,43 @@ public FunctionBase visitCODE_fun(mathParser.CODE_funContext context) public FunctionBase visitCONCATENATE_fun(mathParser.CONCATENATE_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_CONCATENATE(args); } public FunctionBase visitEXACT_fun(mathParser.EXACT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_EXACT(args1, args2); } public FunctionBase visitFIND_fun(mathParser.FIND_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.length == 2) { + if (exprs.size() == 2) { return new Function_FIND(args1, args2, null); } - FunctionBase count = exprs[2].accept(this); + FunctionBase count = exprs.get(2).accept(this); return new Function_FIND(args1, args2, count); } public FunctionBase visitLEFT_fun(mathParser.LEFT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) { return new Function_LEFT(args1, null); } - return new Function_LEFT(args1, exprs[1].accept(this)); + return new Function_LEFT(args1, exprs.get(1).accept(this)); } public FunctionBase visitLEN_fun(mathParser.LEN_funContext context) @@ -912,10 +915,10 @@ public FunctionBase visitLOWER_fun(mathParser.LOWER_funContext context) public FunctionBase visitMID_fun(mathParser.MID_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_MID(args1, args2, args3); } @@ -927,37 +930,37 @@ public FunctionBase visitPROPER_fun(mathParser.PROPER_funContext context) public FunctionBase visitREPLACE_fun(mathParser.REPLACE_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); + List exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 3) { - FunctionBase args22 = exprs[1].accept(this); - FunctionBase args32 = exprs[2].accept(this); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 3) { + FunctionBase args22 = exprs.get(1).accept(this); + FunctionBase args32 = exprs.get(2).accept(this); return new Function_REPLACE(args1, args22, args32, null); } - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); - FunctionBase args4 = exprs[3].accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); + FunctionBase args4 = exprs.get(3).accept(this); return new Function_REPLACE(args1, args2, args3, args4); } public FunctionBase visitREPT_fun(mathParser.REPT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_REPT(args1, args2); } public FunctionBase visitRIGHT_fun(mathParser.RIGHT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.length == 1) { + if (exprs.size() == 1) { return new Function_RIGHT(args1); } - FunctionBase args2 = exprs[1].accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_RIGHT(args1, args2); } @@ -969,27 +972,27 @@ public FunctionBase visitRMB_fun(mathParser.RMB_funContext context) public FunctionBase visitSEARCH_fun(mathParser.SEARCH_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.length == 2) { + if (exprs.size() == 2) { return new Function_SEARCH(args1, args2, null); } - FunctionBase args3 = exprs[2].accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_SEARCH(args1, args2, args3); } public FunctionBase visitSUBSTITUTE_fun(mathParser.SUBSTITUTE_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); - if (exprs.length == 3) { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); + if (exprs.size() == 3) { return new Function_SUBSTITUTE(args1, args2, args3, null); } - FunctionBase args4 = exprs[3].accept(this); + FunctionBase args4 = exprs.get(3).accept(this); return new Function_SUBSTITUTE(args1, args2, args3, args4); } @@ -1001,9 +1004,9 @@ public FunctionBase visitT_fun(mathParser.T_funContext context) public FunctionBase visitTEXT_fun(mathParser.TEXT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_TEXT(args1, args2); } @@ -1031,20 +1034,20 @@ public FunctionBase visitVALUE_fun(mathParser.VALUE_funContext context) public FunctionBase visitDATEVALUE_fun(mathParser.DATEVALUE_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_DATEVALUE(args); } public FunctionBase visitTIMESTAMP_fun(mathParser.TIMESTAMP_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_TIMESTAMP(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_TIMESTAMP(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_TIMESTAMP(args1, args2); } @@ -1056,21 +1059,21 @@ public FunctionBase visitTIMEVALUE_fun(mathParser.TIMEVALUE_funContext context) public FunctionBase visitDATE_fun(mathParser.DATE_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_DATE(args); } public FunctionBase visitTIME_fun(mathParser.TIME_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_TIME(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_TIME(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_TIME(args1, args2, args3); } @@ -1122,29 +1125,29 @@ public FunctionBase visitSECOND_fun(mathParser.SECOND_funContext context) public FunctionBase visitWEEKDAY_fun(mathParser.WEEKDAY_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_WEEKDAY(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_WEEKDAY(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_WEEKDAY(args1, args2); } public FunctionBase visitDATEDIF_fun(mathParser.DATEDIF_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_DATEDIF(args1, args2, args3); } public FunctionBase visitDAYS360_fun(mathParser.DAYS360_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 3) { - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 3) { + FunctionBase args3 = exprs.get(2).accept(this); return new Function_DAYS360(args1, args2, args3); } return new Function_DAYS360(args1, args2, null); @@ -1152,94 +1155,94 @@ public FunctionBase visitDAYS360_fun(mathParser.DAYS360_funContext context) public FunctionBase visitEDATE_fun(mathParser.EDATE_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_EDATE(args1, args2); } public FunctionBase visitEOMONTH_fun(mathParser.EOMONTH_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_EOMONTH(args1, args2); } public FunctionBase visitNETWORKDAYS_fun(mathParser.NETWORKDAYS_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_NETWORKDAYS(args); } public FunctionBase visitWORKDAY_fun(mathParser.WORKDAY_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_WORKDAY(args); } public FunctionBase visitWEEKNUM_fun(mathParser.WEEKNUM_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_WEEKNUM(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_WEEKNUM(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_WEEKNUM(args1, args2); } public FunctionBase visitADDMONTHS_fun(mathParser.ADDMONTHS_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ADDMONTHS(args1, args2); } public FunctionBase visitADDYEARS_fun(mathParser.ADDYEARS_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ADDYEARS(args1, args2); } public FunctionBase visitADDSECONDS_fun(mathParser.ADDSECONDS_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ADDSECONDS(args1, args2); } public FunctionBase visitADDMINUTES_fun(mathParser.ADDMINUTES_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ADDMINUTES(args1, args2); } public FunctionBase visitADDDAYS_fun(mathParser.ADDDAYS_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ADDDAYS(args1, args2); } public FunctionBase visitADDHOURS_fun(mathParser.ADDHOURS_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ADDHOURS(args1, args2); } @@ -1249,240 +1252,240 @@ public FunctionBase visitADDHOURS_fun(mathParser.ADDHOURS_funContext context) public FunctionBase visitMAX_fun(mathParser.MAX_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_MAX(args); } public FunctionBase visitMEDIAN_fun(mathParser.MEDIAN_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_MEDIAN(args); } public FunctionBase visitMIN_fun(mathParser.MIN_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_MIN(args); } public FunctionBase visitQUARTILE_fun(mathParser.QUARTILE_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_QUARTILE(args1, args2); } public FunctionBase visitMODE_fun(mathParser.MODE_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_MODE(args); } public FunctionBase visitLARGE_fun(mathParser.LARGE_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_LARGE(args1, args2); } public FunctionBase visitSMALL_fun(mathParser.SMALL_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_SMALL(args1, args2); } public FunctionBase visitPERCENTILE_fun(mathParser.PERCENTILE_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_PERCENTILE(args1, args2); } public FunctionBase visitPERCENTRANK_fun(mathParser.PERCENTRANK_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_PERCENTRANK(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_PERCENTRANK(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_PERCENTRANK(args1, args2, args3); } public FunctionBase visitAVERAGE_fun(mathParser.AVERAGE_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_AVERAGE(args); } public FunctionBase visitAVERAGEIF_fun(mathParser.AVERAGEIF_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_AVERAGEIF(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_AVERAGEIF(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_AVERAGEIF(args1, args2, args3); } public FunctionBase visitGEOMEAN_fun(mathParser.GEOMEAN_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_GEOMEAN(args); } public FunctionBase visitHARMEAN_fun(mathParser.HARMEAN_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_HARMEAN(args); } public FunctionBase visitCOUNT_fun(mathParser.COUNT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_COUNT(args); } public FunctionBase visitCOUNTIF_fun(mathParser.COUNTIF_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_COUNTIF(args1, args2); } public FunctionBase visitSUM_fun(mathParser.SUM_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_SUM(args); } public FunctionBase visitSUMIF_fun(mathParser.SUMIF_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_SUMIF(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_SUMIF(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_SUMIF(args1, args2, args3); } public FunctionBase visitAVEDEV_fun(mathParser.AVEDEV_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_AVEDEV(args); } public FunctionBase visitSTDEV_fun(mathParser.STDEV_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_STDEV(args); } public FunctionBase visitSTDEVP_fun(mathParser.STDEVP_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_STDEVP(args); } public FunctionBase visitDEVSQ_fun(mathParser.DEVSQ_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_DEVSQ(args); } public FunctionBase visitVAR_fun(mathParser.VAR_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_VAR(args); } public FunctionBase visitVARP_fun(mathParser.VARP_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_VARP(args); } public FunctionBase visitNORMDIST_fun(mathParser.NORMDIST_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); - FunctionBase args4 = exprs[3].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); + FunctionBase args4 = exprs.get(3).accept(this); return new Function_NORMDIST(args1, args2, args3, args4); } public FunctionBase visitNORMINV_fun(mathParser.NORMINV_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_NORMINV(args1, args2, args3); } @@ -1500,56 +1503,56 @@ public FunctionBase visitNORMSINV_fun(mathParser.NORMSINV_funContext context) public FunctionBase visitBETADIST_fun(mathParser.BETADIST_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_BETADIST(args1, args2, args3); } public FunctionBase visitBETAINV_fun(mathParser.BETAINV_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_BETAINV(args1, args2, args3); } public FunctionBase visitBINOMDIST_fun(mathParser.BINOMDIST_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); - FunctionBase args4 = exprs[3].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); + FunctionBase args4 = exprs.get(3).accept(this); return new Function_BINOMDIST(args1, args2, args3, args4); } public FunctionBase visitEXPONDIST_fun(mathParser.EXPONDIST_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_EXPONDIST(args1, args2, args3); } public FunctionBase visitFDIST_fun(mathParser.FDIST_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_FDIST(args1, args2, args3); } public FunctionBase visitFINV_fun(mathParser.FINV_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_FINV(args1, args2, args3); } @@ -1567,20 +1570,20 @@ public FunctionBase visitFISHERINV_fun(mathParser.FISHERINV_funContext context) public FunctionBase visitGAMMADIST_fun(mathParser.GAMMADIST_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); - FunctionBase args4 = exprs[3].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); + FunctionBase args4 = exprs.get(3).accept(this); return new Function_GAMMADIST(args1, args2, args3, args4); } public FunctionBase visitGAMMAINV_fun(mathParser.GAMMAINV_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_GAMMAINV(args1, args2, args3); } @@ -1592,74 +1595,74 @@ public FunctionBase visitGAMMALN_fun(mathParser.GAMMALN_funContext context) public FunctionBase visitHYPGEOMDIST_fun(mathParser.HYPGEOMDIST_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); - FunctionBase args4 = exprs[3].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); + FunctionBase args4 = exprs.get(3).accept(this); return new Function_HYPGEOMDIST(args1, args2, args3, args4); } public FunctionBase visitLOGINV_fun(mathParser.LOGINV_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_LOGINV(args1, args2, args3); } public FunctionBase visitLOGNORMDIST_fun(mathParser.LOGNORMDIST_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_LOGNORMDIST(args1, args2, args3); } public FunctionBase visitNEGBINOMDIST_fun(mathParser.NEGBINOMDIST_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_NEGBINOMDIST(args1, args2, args3); } public FunctionBase visitPOISSON_fun(mathParser.POISSON_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_POISSON(args1, args2, args3); } public FunctionBase visitTDIST_fun(mathParser.TDIST_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_TDIST(args1, args2, args3); } public FunctionBase visitTINV_fun(mathParser.TINV_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_TINV(args1, args2); } public FunctionBase visitWEIBULL_fun(mathParser.WEIBULL_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); - FunctionBase args4 = exprs[3].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); + FunctionBase args4 = exprs.get(3).accept(this); return new Function_WEIBULL(args1, args2, args3, args4); } @@ -1693,62 +1696,62 @@ public FunctionBase visitHTMLDECODE_fun(mathParser.HTMLDECODE_funContext context public FunctionBase visitBASE64TOTEXT_fun(mathParser.BASE64TOTEXT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_BASE64TOTEXT(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_BASE64TOTEXT(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_BASE64TOTEXT(args1, args2); } public FunctionBase visitBASE64URLTOTEXT_fun(mathParser.BASE64URLTOTEXT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_BASE64URLTOTEXT(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_BASE64URLTOTEXT(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_BASE64URLTOTEXT(args1, args2); } public FunctionBase visitTEXTTOBASE64_fun(mathParser.TEXTTOBASE64_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_TEXTTOBASE64(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_TEXTTOBASE64(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_TEXTTOBASE64(args1, args2); } public FunctionBase visitTEXTTOBASE64URL_fun(mathParser.TEXTTOBASE64URL_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_TEXTTOBASE64URL(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_TEXTTOBASE64URL(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_TEXTTOBASE64URL(args1, args2); } public FunctionBase visitREGEX_fun(mathParser.REGEX_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_REGEX(args1, args2); } public FunctionBase visitREGEXREPALCE_fun(mathParser.REGEXREPALCE_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_REGEXREPALCE(args1, args2, args3); } public FunctionBase visitISREGEX_fun(mathParser.ISREGEX_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_ISREGEX(args1, args2); } @@ -1759,167 +1762,167 @@ public FunctionBase visitGUID_fun(mathParser.GUID_funContext context) public FunctionBase visitMD5_fun(mathParser.MD5_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_MD5(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_MD5(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_MD5(args1, args2); } public FunctionBase visitSHA1_fun(mathParser.SHA1_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_SHA1(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_SHA1(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_SHA1(args1, args2); } public FunctionBase visitSHA256_fun(mathParser.SHA256_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_SHA256(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_SHA256(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_SHA256(args1, args2); } public FunctionBase visitSHA512_fun(mathParser.SHA512_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_SHA512(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_SHA512(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_SHA512(args1, args2); } public FunctionBase visitHMACMD5_fun(mathParser.HMACMD5_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_HMACMD5(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_HMACMD5(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_HMACMD5(args1, args2, args3); } public FunctionBase visitHMACSHA1_fun(mathParser.HMACSHA1_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_HMACSHA1(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_HMACSHA1(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_HMACSHA1(args1, args2, args3); } public FunctionBase visitHMACSHA256_fun(mathParser.HMACSHA256_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_HMACSHA256(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_HMACSHA256(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_HMACSHA256(args1, args2, args3); } public FunctionBase visitHMACSHA512_fun(mathParser.HMACSHA512_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_HMACSHA512(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_HMACSHA512(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_HMACSHA512(args1, args2, args3); } public FunctionBase visitTRIMSTART_fun(mathParser.TRIMSTART_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_TRIMSTART(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_TRIMSTART(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_TRIMSTART(args1, args2); } public FunctionBase visitTRIMEND_fun(mathParser.TRIMEND_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - if (exprs.length == 1) return new Function_TRIMEND(args1, null); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) return new Function_TRIMEND(args1, null); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_TRIMEND(args1, args2); } public FunctionBase visitINDEXOF_fun(mathParser.INDEXOF_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_INDEXOF(args1, args2, null, null); - FunctionBase args3 = exprs[2].accept(this); - if (exprs.length == 3) return new Function_INDEXOF(args1, args2, args3, null); - FunctionBase args4 = exprs[3].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_INDEXOF(args1, args2, null, null); + FunctionBase args3 = exprs.get(2).accept(this); + if (exprs.size() == 3) return new Function_INDEXOF(args1, args2, args3, null); + FunctionBase args4 = exprs.get(3).accept(this); return new Function_INDEXOF(args1, args2, args3, args4); } public FunctionBase visitLASTINDEXOF_fun(mathParser.LASTINDEXOF_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_LASTINDEXOF(args1, args2, null, null); - FunctionBase args3 = exprs[2].accept(this); - if (exprs.length == 3) return new Function_LASTINDEXOF(args1, args2, args3, null); - FunctionBase args4 = exprs[3].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_LASTINDEXOF(args1, args2, null, null); + FunctionBase args3 = exprs.get(2).accept(this); + if (exprs.size() == 3) return new Function_LASTINDEXOF(args1, args2, args3, null); + FunctionBase args4 = exprs.get(3).accept(this); return new Function_LASTINDEXOF(args1, args2, args3, args4); } public FunctionBase visitSPLIT_fun(mathParser.SPLIT_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_SPLIT(args1, args2); } public FunctionBase visitJOIN_fun(mathParser.JOIN_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_JOIN(args); } public FunctionBase visitSUBSTRING_fun(mathParser.SUBSTRING_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_SUBSTRING(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_SUBSTRING(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_SUBSTRING(args1, args2, args3); } public FunctionBase visitSTARTSWITH_fun(mathParser.STARTSWITH_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_STARTSWITH(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_STARTSWITH(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_STARTSWITH(args1, args2, args3); } public FunctionBase visitENDSWITH_fun(mathParser.ENDSWITH_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_ENDSWITH(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_ENDSWITH(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_ENDSWITH(args1, args2, args3); } @@ -1937,21 +1940,21 @@ public FunctionBase visitISNULLORWHITESPACE_fun(mathParser.ISNULLORWHITESPACE_fu public FunctionBase visitREMOVESTART_fun(mathParser.REMOVESTART_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_REMOVESTART(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_REMOVESTART(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_REMOVESTART(args1, args2, args3); } public FunctionBase visitREMOVEEND_fun(mathParser.REMOVEEND_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); - if (exprs.length == 2) return new Function_REMOVEEND(args1, args2, null); - FunctionBase args3 = exprs[2].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) return new Function_REMOVEEND(args1, args2, null); + FunctionBase args3 = exprs.get(2).accept(this); return new Function_REMOVEEND(args1, args2, args3); } @@ -1966,17 +1969,17 @@ public FunctionBase visitJSON_fun(mathParser.JSON_funContext context) //#region LOOKFLOOR LOOKCEILING public FunctionBase visitLOOKFLOOR_fun(mathParser.LOOKFLOOR_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_LOOKFLOOR(args1, args2); } public FunctionBase visitLOOKCEILING_fun(mathParser.LOOKCEILING_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase args1 = exprs[0].accept(this); - FunctionBase args2 = exprs[1].accept(this); + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); return new Function_LOOKCEILING(args1, args2); } //#endregion @@ -1985,10 +1988,10 @@ public FunctionBase visitLOOKCEILING_fun(mathParser.LOOKCEILING_funContext conte public FunctionBase visitArray_fun(mathParser.Array_funContext context) { - mathParser.ExprContext[] exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_Array(args); } @@ -2061,7 +2064,7 @@ public FunctionBase visitParameter2(mathParser.Parameter2Context context) public FunctionBase visitGetJsonValue_fun(mathParser.GetJsonValue_funContext context) { var exprs = context.expr(); - var args1 = exprs[0].accept(this); + var args1 = exprs.get(0).accept(this); if (context.PARAMETER()!=null) { var op = new Function_PARAMETER(context.PARAMETER().GetText()); return new Function_GetJsonValue(args1, op); @@ -2070,7 +2073,7 @@ public FunctionBase visitGetJsonValue_fun(mathParser.GetJsonValue_funContext con var op = context.parameter2().accept(this); return new Function_GetJsonValue(args1, op); } - var op2 = exprs[1].accept(this); + var op2 = exprs.get(1).accept(this); return new Function_GetJsonValue(args1, op2); } @@ -2078,9 +2081,9 @@ public FunctionBase visitDiyFunction_fun(mathParser.DiyFunction_funContext conte { var funName = context.PARAMETER().GetText(); var exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.Length]; - for (int i = 0; i < exprs.Length; i++) { - args[i] = exprs[i].accept(this); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_DiyFunction(funName, args); } @@ -2088,36 +2091,36 @@ public FunctionBase visitDiyFunction_fun(mathParser.DiyFunction_funContext conte public FunctionBase visitPARAM_fun(mathParser.PARAM_funContext context) { var exprs = context.expr(); - var args1 = exprs[0].accept(this); - if (exprs.Length == 1) { + var args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) { return new Function_PARAM(args1, null); } - var args2 = exprs[1].accept(this); + var args2 = exprs.get(1).accept(this); return new Function_PARAM(args1, args2); } public FunctionBase visitHAS_fun(mathParser.HAS_funContext context) { var exprs = context.expr(); - var args1 = exprs[0].accept(this); - var args2 = exprs[1].accept(this); + var args1 = exprs.get(0).accept(this); + var args2 = exprs.get(1).accept(this); return new Function_HAS(args1, args2); } public FunctionBase visitHASVALUE_fun(mathParser.HASVALUE_funContext context) { var exprs = context.expr(); - var args1 = exprs[0].accept(this); - var args2 = exprs[1].accept(this); + var args1 = exprs.get(0).accept(this); + var args2 = exprs.get(1).accept(this); return new Function_HASVALUE(args1, args2); } public FunctionBase visitArrayJson_fun(mathParser.ArrayJson_funContext context) { var exprs = context.arrayJson(); - FunctionBase[] args = new FunctionBase[exprs.Length]; - for (int i = 0; i < exprs.Length; i++) { - args[i] = exprs[i].accept(this); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_ArrayJson(args); } From 357155a272bb966bf8b90bf838765e14aa5f2c93 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 08:30:44 +0800 Subject: [PATCH 19/98] fix --- .../java/toolgood/algorithm/OperandImpl.java | 12 ++++--- .../toolgood/algorithm/internals/MyDate.java | 12 ++++--- .../internals/functions/FunctionBase.java | 25 ++++++++----- .../internals/functions/FunctionUtil.java | 22 +++++++----- .../functions/compare/Function_EQ.java | 20 ++++++----- .../functions/compare/Function_GE.java | 20 ++++++----- .../functions/compare/Function_GT.java | 20 ++++++----- .../functions/compare/Function_LE.java | 20 ++++++----- .../functions/compare/Function_LT.java | 20 ++++++----- .../functions/compare/Function_NE.java | 20 ++++++----- .../functions/csharp/Function_ENDSWITH.java | 8 ++--- .../functions/csharp/Function_HAS.java | 2 +- .../functions/csharp/Function_HASVALUE.java | 2 +- .../functions/csharp/Function_INDEXOF.java | 20 ++++++----- .../functions/csharp/Function_ISREGEX.java | 2 +- .../functions/csharp/Function_JOIN.java | 4 +-- .../csharp/Function_LASTINDEXOF.java | 20 ++++++----- .../csharp/Function_LOOKCEILING.java | 3 +- .../functions/csharp/Function_LOOKFLOOR.java | 3 +- .../functions/csharp/Function_REGEX.java | 4 +-- .../csharp/Function_REGEXREPALCE.java | 2 +- .../functions/csharp/Function_REMOVEEND.java | 4 +-- .../csharp/Function_REMOVESTART.java | 4 +-- .../functions/csharp/Function_SPLIT.java | 2 +- .../functions/csharp/Function_STARTSWITH.java | 8 ++--- .../functions/csharp/Function_SUBSTRING.java | 12 ++++--- .../functions/csharp/Function_TRIMEND.java | 6 ++-- .../functions/csharp/Function_TRIMSTART.java | 6 ++-- .../csharpsecurity/Function_HMACMD5.java | 6 ++-- .../csharpsecurity/Function_HMACSHA1.java | 6 ++-- .../csharpsecurity/Function_HMACSHA256.java | 6 ++-- .../csharpsecurity/Function_HMACSHA512.java | 6 ++-- .../csharpsecurity/Function_MD5.java | 4 +-- .../csharpsecurity/Function_SHA1.java | 4 +-- .../csharpsecurity/Function_SHA256.java | 4 +-- .../csharpsecurity/Function_SHA512.java | 4 +-- .../csharpweb/Function_BASE64TOTEXT.java | 4 +-- .../csharpweb/Function_BASE64URLTOTEXT.java | 4 +-- .../csharpweb/Function_HTMLDECODE.java | 2 +- .../csharpweb/Function_HTMLENCODE.java | 2 +- .../csharpweb/Function_TEXTTOBASE64.java | 4 +-- .../csharpweb/Function_TEXTTOBASE64URL.java | 4 +-- .../csharpweb/Function_URLDECODE.java | 2 +- .../csharpweb/Function_URLENCODE.java | 2 +- .../functions/datetimes/Function_ADDDAYS.java | 5 +-- .../datetimes/Function_ADDHOURS.java | 5 +-- .../datetimes/Function_ADDMINUTES.java | 5 +-- .../datetimes/Function_ADDMONTHS.java | 5 +-- .../datetimes/Function_ADDSECONDS.java | 5 +-- .../datetimes/Function_ADDYEARS.java | 5 +-- .../functions/datetimes/Function_DATE.java | 35 ++++++++++++------- .../functions/datetimes/Function_DATEDIF.java | 2 +- .../datetimes/Function_DATEVALUE.java | 21 ++++++----- .../functions/datetimes/Function_EDATE.java | 5 +-- .../functions/datetimes/Function_EOMONTH.java | 5 +-- .../functions/datetimes/Function_TIME.java | 13 ++++--- .../datetimes/Function_TIMESTAMP.java | 5 +-- .../datetimes/Function_TIMEVALUE.java | 2 +- .../functions/datetimes/Function_WEEKDAY.java | 5 +-- .../functions/datetimes/Function_WEEKNUM.java | 5 +-- .../functions/datetimes/Function_WORKDAY.java | 5 +-- .../functions/mathbase/Function_ABS.java | 3 +- .../functions/mathbase/Function_CEILING.java | 6 ++-- .../functions/mathbase/Function_COMBIN.java | 6 ++-- .../functions/mathbase/Function_EVEN.java | 3 +- .../functions/mathbase/Function_EXP.java | 3 +- .../functions/mathbase/Function_FACT.java | 3 +- .../mathbase/Function_FACTDOUBLE.java | 3 +- .../functions/mathbase/Function_FIXED.java | 6 ++-- .../functions/mathbase/Function_FLOOR.java | 6 ++-- .../functions/mathbase/Function_LN.java | 3 +- .../functions/mathbase/Function_LOG.java | 6 ++-- .../functions/mathbase/Function_MROUND.java | 6 ++-- .../functions/mathbase/Function_ODD.java | 3 +- .../functions/mathbase/Function_PERMUT.java | 6 ++-- .../functions/mathbase/Function_POWER.java | 6 ++-- .../mathbase/Function_Percentage.java | 3 +- .../functions/mathbase/Function_QUOTIENT.java | 6 ++-- .../mathbase/Function_RANDBETWEEN.java | 6 ++-- .../functions/mathbase/Function_ROUND.java | 6 ++-- .../mathbase/Function_ROUNDDOWN.java | 6 ++-- .../functions/mathbase/Function_ROUNDUP.java | 6 ++-- .../functions/mathbase/Function_SIGN.java | 3 +- .../functions/mathbase/Function_SQRT.java | 6 ++-- .../functions/mathbase/Function_SQRTPI.java | 6 ++-- .../functions/mathbase/Function_TRUNC.java | 5 +-- .../functions/mathsum/Function_BETADIST.java | 9 +++-- .../functions/mathsum/Function_BETAINV.java | 9 +++-- .../functions/mathsum/Function_BINOMDIST.java | 9 +++-- .../functions/mathsum/Function_EXPONDIST.java | 6 ++-- .../functions/mathsum/Function_FDIST.java | 9 +++-- .../functions/mathsum/Function_FINV.java | 9 +++-- .../functions/mathsum/Function_FISHER.java | 3 +- .../functions/mathsum/Function_FISHERINV.java | 3 +- .../functions/mathsum/Function_GAMMADIST.java | 9 +++-- .../functions/mathsum/Function_GAMMAINV.java | 9 +++-- .../functions/mathsum/Function_GAMMALN.java | 3 +- .../mathsum/Function_HYPGEOMDIST.java | 12 ++++--- .../functions/mathsum/Function_LARGE.java | 3 +- .../functions/mathsum/Function_LOGINV.java | 9 +++-- .../mathsum/Function_LOGNORMDIST.java | 9 +++-- .../mathsum/Function_NEGBINOMDIST.java | 9 +++-- .../functions/mathsum/Function_NORMDIST.java | 9 +++-- .../functions/mathsum/Function_NORMINV.java | 9 +++-- .../functions/mathsum/Function_NORMSDIST.java | 3 +- .../functions/mathsum/Function_NORMSINV.java | 3 +- .../mathsum/Function_PERCENTILE.java | 3 +- .../mathsum/Function_PERCENTRANK.java | 11 +++--- .../functions/mathsum/Function_POISSON.java | 11 +++--- .../functions/mathsum/Function_QUARTILE.java | 5 +-- .../functions/mathsum/Function_SMALL.java | 5 +-- .../functions/mathsum/Function_SUMIF.java | 5 +-- .../functions/mathsum/Function_TDIST.java | 16 +++++---- .../functions/mathsum/Function_TINV.java | 15 ++++---- .../functions/mathsum/Function_WEIBULL.java | 18 ++++++---- .../mathtransformation/Function_BIN2HEX.java | 3 +- .../mathtransformation/Function_BIN2OCT.java | 3 +- .../mathtransformation/Function_DEC2BIN.java | 6 ++-- .../mathtransformation/Function_DEC2HEX.java | 6 ++-- .../mathtransformation/Function_DEC2OCT.java | 6 ++-- .../mathtransformation/Function_HEX2BIN.java | 3 +- .../mathtransformation/Function_HEX2OCT.java | 3 +- .../mathtransformation/Function_OCT2BIN.java | 3 +- .../mathtransformation/Function_OCT2HEX.java | 3 +- .../mathtrigonometric/Function_ACOS.java | 6 ++-- .../mathtrigonometric/Function_ACOSH.java | 6 ++-- .../mathtrigonometric/Function_ASIN.java | 6 ++-- .../mathtrigonometric/Function_ASINH.java | 6 ++-- .../mathtrigonometric/Function_ATAN.java | 6 ++-- .../mathtrigonometric/Function_ATAN2.java | 10 ++++-- .../mathtrigonometric/Function_ATANH.java | 6 ++-- .../mathtrigonometric/Function_COS.java | 6 ++-- .../mathtrigonometric/Function_COSH.java | 6 ++-- .../mathtrigonometric/Function_COT.java | 6 ++-- .../mathtrigonometric/Function_CSC.java | 6 ++-- .../mathtrigonometric/Function_DEGREES.java | 6 ++-- .../mathtrigonometric/Function_RADIANS.java | 6 ++-- .../mathtrigonometric/Function_SEC.java | 6 ++-- .../mathtrigonometric/Function_SIN.java | 6 ++-- .../mathtrigonometric/Function_SINH.java | 6 ++-- .../mathtrigonometric/Function_TAN.java | 6 ++-- .../mathtrigonometric/Function_TANH.java | 6 ++-- .../functions/operator/Function_Add.java | 24 +++++++------ .../functions/operator/Function_Connect.java | 2 +- .../functions/operator/Function_Div.java | 18 +++++----- .../functions/operator/Function_Mod.java | 18 +++++----- .../functions/operator/Function_Mul.java | 24 +++++++------ .../functions/operator/Function_Sub.java | 24 +++++++------ .../functions/string/Function_ASC.java | 2 +- .../functions/string/Function_CHAR.java | 5 +-- .../functions/string/Function_CLEAN.java | 2 +- .../functions/string/Function_CODE.java | 4 +-- .../string/Function_CONCATENATE.java | 2 +- .../functions/string/Function_EXACT.java | 2 +- .../functions/string/Function_FIND.java | 7 ++-- .../functions/string/Function_JIS.java | 2 +- .../functions/string/Function_LEFT.java | 11 +++--- .../functions/string/Function_LEN.java | 2 +- .../functions/string/Function_LOWER.java | 2 +- .../functions/string/Function_MID.java | 16 +++++---- .../functions/string/Function_PROPER.java | 2 +- .../functions/string/Function_REPLACE.java | 18 +++++----- .../functions/string/Function_REPT.java | 7 ++-- .../functions/string/Function_RIGHT.java | 13 +++---- .../functions/string/Function_RMB.java | 3 +- .../functions/string/Function_SEARCH.java | 11 +++--- .../functions/string/Function_SUBSTITUTE.java | 13 +++---- .../functions/string/Function_TEXT.java | 6 ++-- .../functions/string/Function_TRIM.java | 2 +- .../functions/string/Function_UPPER.java | 2 +- .../functions/string/Function_VALUE.java | 2 +- .../functions/value/Function_ERROR.java | 2 +- .../value/Function_GetJsonValue.java | 18 +++++----- .../functions/value/Function_JSON.java | 2 +- .../functions/value/Function_PARAM.java | 4 +-- .../functions/value/Function_PARAMETER.java | 2 +- .../functions/value/Function_Value.java | 2 +- .../toolgood/algorithm/Tests/Cylinder.java | 3 +- 178 files changed, 778 insertions(+), 504 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/OperandImpl.java b/java/src/main/java/toolgood/algorithm/OperandImpl.java index 0ebf48666..657ed55d2 100644 --- a/java/src/main/java/toolgood/algorithm/OperandImpl.java +++ b/java/src/main/java/toolgood/algorithm/OperandImpl.java @@ -362,16 +362,20 @@ public OperandMyDate(MyDate obj) { public MyDate DateValue() { return value; } @Override - public Operand ToNumber(String errorMessage) { return Create(value.ToNumber()); } + public Operand ToNumber(String errorMessage) { return Create(value.ToNumber +()); } @Override - public Operand ToNumber(String errorMessage, Object... args) { return Create(value.ToNumber()); } + public Operand ToNumber(String errorMessage, Object... args) { return Create(value.ToNumber +()); } @Override - public Operand ToBoolean(String errorMessage) { return value.ToNumber() != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage) { return value.ToNumber +() != 0 ? TRUE : FALSE; } @Override - public Operand ToBoolean(String errorMessage, Object... args) { return value.ToNumber() != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage, Object... args) { return value.ToNumber +() != 0 ? TRUE : FALSE; } @Override public Operand ToText(String errorMessage) { return Create(value.toString()); } diff --git a/java/src/main/java/toolgood/algorithm/internals/MyDate.java b/java/src/main/java/toolgood/algorithm/internals/MyDate.java index 77a82c76d..a9ea59141 100644 --- a/java/src/main/java/toolgood/algorithm/internals/MyDate.java +++ b/java/src/main/java/toolgood/algorithm/internals/MyDate.java @@ -368,19 +368,23 @@ public MyDate SUB(MyDate num) { } public MyDate ADD(BigDecimal num) { - return new MyDate(this.ToNumber().add(num)); + return new MyDate(this.ToNumber +().add(num)); } public MyDate SUB(BigDecimal num) { - return new MyDate(this.ToNumber().subtract(num)); + return new MyDate(this.ToNumber +().subtract(num)); } public MyDate MUL(BigDecimal num) { - return new MyDate(this.ToNumber().multiply(num)); + return new MyDate(this.ToNumber +().multiply(num)); } public MyDate DIV(BigDecimal num) { - return new MyDate(this.ToNumber().divide(num, MathContext.DECIMAL32)); + return new MyDate(this.ToNumber +().divide(num, MathContext.DECIMAL32)); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index 7ea7afa65..70a49db8a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -37,7 +37,8 @@ public short TryEvaluate(AlgorithmEngine work, short def, Function args, List list) { for (Operand item : args) { if (item.IsNumber()) { - list.add(item.getDoubleValue()); + list.add(item.DoubleValue +()); } else if (item.isArray()) { boolean o = F_base_GetList(item.getArrayValue(), list); if (!o) { @@ -30,11 +31,13 @@ public static boolean F_base_GetList(List args, List list) { return false; } } else { - Operand o = item.toNumber(null); + Operand o = item.ToNumber +(null); if (o.IsError()) { return false; } - list.add(o.getDoubleValue()); + list.add(o.DoubleValue +()); } } return true; @@ -45,7 +48,8 @@ public static boolean F_base_GetList(Operand args, List list) { return false; } if (args.IsNumber()) { - list.add(args.getDoubleValue()); + list.add(args.DoubleValue +()); } else if (args.isArray()) { boolean o = F_base_GetList(args.getArrayValue(), list); if (!o) { @@ -61,11 +65,13 @@ public static boolean F_base_GetList(Operand args, List list) { return false; } } else { - Operand o = args.toNumber(null); + Operand o = args.ToNumber +(null); if (o.IsError()) { return false; } - list.add(o.getDoubleValue()); + list.add(o.DoubleValue +()); } return true; } @@ -91,7 +97,7 @@ public static boolean F_base_GetList(List args, List list) { if (o.IsError()) { return false; } - list.add(o.getTextValue()); + list.add(o.TextValue()); } } return true; @@ -120,7 +126,7 @@ public static boolean F_base_GetList(Operand args, List list) { if (o.IsError()) { return false; } - list.add(o.getTextValue()); + list.add(o.TextValue()); } return true; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java index 87b2a067b..15bcbd1ec 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java @@ -19,17 +19,19 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function= 0); } else if(args1.isText()) { - int r = args1.getTextValue().compareTo(args2.getTextValue()); + int r = args1.TextValue().compareTo(args2.TextValue()); return r >= 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isDate() || args1.isBoolean()) { - args1 = args1.toNumber(null); - args2 = args2.toNumber(null); + args1 = args1.ToNumber +(null); + args2 = args2.ToNumber +(null); return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); } else if(args1.isJson()) { args1 = args1.toText(null); args2 = args2.toText(null); - int r = args1.getTextValue().compareTo(args2.getTextValue()); + int r = args1.TextValue().compareTo(args2.TextValue()); return r >= 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isNull()) { return Operand.TRUE; @@ -44,11 +46,11 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function= 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isDate() || args1.IsNumber() || args1.isJson()) { args1 = args1.toText(null); - int r = args1.getTextValue().compareTo(args2.getTextValue()); + int r = args1.TextValue().compareTo(args2.TextValue()); return r >= 0 ? Operand.TRUE : Operand.FALSE; } else { return Operand.Error("Function '{0}' compare is error.", ">="); @@ -56,8 +58,10 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function="); } - if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", ">=", 1); if(args1.IsError()) { return args1; } } - if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", ">=", 2); if(args2.IsError()) { return args2; } } + if(args1.isNotNumber()) { args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", ">=", 1); if(args1.IsError()) { return args1; } } + if(args2.isNotNumber()) { args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", ">=", 2); if(args2.IsError()) { return args2; } } return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java index cbb9554d5..3ea732dee 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java @@ -19,16 +19,18 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function 0); } else if(args1.isText()) { - int r = args1.getTextValue().compareTo(args2.getTextValue()); + int r = args1.TextValue().compareTo(args2.TextValue()); return r > 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isDate() || args1.isBoolean()) { - args1 = args1.toNumber(null); - args2 = args2.toNumber(null); + args1 = args1.ToNumber +(null); + args2 = args2.ToNumber +(null); return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); } else if(args1.isJson()) { args1 = args1.toText(null); args2 = args2.toText(null); - int r = args1.getTextValue().compareTo(args2.getTextValue()); + int r = args1.TextValue().compareTo(args2.TextValue()); return r > 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isNull()) { return Operand.TRUE; @@ -44,11 +46,11 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isDate() || args1.IsNumber() || args1.isJson()) { args1 = args1.toText(null); - int r = args1.getTextValue().compareTo(args2.getTextValue()); + int r = args1.TextValue().compareTo(args2.TextValue()); return r > 0 ? Operand.TRUE : Operand.FALSE; } else { return Operand.Error("Function '{0}' compare is error.", ">"); @@ -56,8 +58,10 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function"); } - if(args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", ">", 1); if(args1.IsError()) { return args1; } } - if(args2.isNotNumber()) { args2 = args2.toNumber("Function '{0}' parameter {1} is error!", ">", 2); if(args2.IsError()) { return args2; } } + if(args1.isNotNumber()) { args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", ">", 1); if(args1.IsError()) { return args1; } } + if(args2.isNotNumber()) { args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", ">", 2); if(args2.IsError()) { return args2; } } return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java index 863a2b7b1..8d6830866 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java @@ -19,16 +19,18 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function= text.length()) { return Operand.Create(-1 + work.getExcelIndex()); } - return Operand.Create(text.substring(startIndex).indexOf(args2.getTextValue()) + startIndex + work.getExcelIndex()); + return Operand.Create(text.substring(startIndex).indexOf(args2.TextValue()) + startIndex + work.getExcelIndex()); } Operand args4 = func4.Evaluate(work, tempParameter); if (args4.IsNotNumber()) { - args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "IndexOf", 4); + args4 = args4.ToNumber +("Function '{0}' parameter {1} is error!", "IndexOf", 4); if (args4.IsError()) { return args4; } } - int startIndex = args3.getIntValue(); - int count = args4.getIntValue(); + int startIndex = args3.IntValue(); + int count = args4.IntValue(); if (startIndex >= text.length()) { return Operand.Create(-1 + work.getExcelIndex()); } int endIndex = Math.min(startIndex + count, text.length()); String substring = text.substring(startIndex, endIndex); - int result = substring.indexOf(args2.getTextValue()); + int result = substring.indexOf(args2.TextValue()); if (result == -1) { return Operand.Create(-1 + work.getExcelIndex()); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java index 095fd8fcd..acef623fa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java @@ -29,7 +29,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - boolean b = Pattern.matches(args2.getTextValue(), args1.getTextValue()); + boolean b = Pattern.matches(args2.TextValue(), args1.TextValue()); return Operand.Create(b); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java index 0bd2a2262..24602f931 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java @@ -43,7 +43,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } - return Operand.Create(String.join(args2.getTextValue(), list)); + return Operand.Create(String.join(args2.TextValue(), list)); } else { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Join", 1); if (args1.IsError()) { @@ -57,7 +57,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return Operand.Error("Function '{0}' parameter {1} is error!", "Join", i + 1); } } - return Operand.Create(String.join(args1.getTextValue(), list)); + return Operand.Create(String.join(args1.TextValue(), list)); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java index e0f469a44..41a2725bc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java @@ -28,40 +28,42 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - String text = args1.getTextValue(); + String text = args1.TextValue(); if (func3 == null) { - return Operand.Create(text.lastIndexOf(args2.getTextValue()) + work.getExcelIndex()); + return Operand.Create(text.lastIndexOf(args2.TextValue()) + work.getExcelIndex()); } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LastIndexOf", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "LastIndexOf", 3); if (args3.IsError()) { return args3; } } if (func4 == null) { - int endIndex = args3.getIntValue(); + int endIndex = args3.IntValue(); if (endIndex < 0) { return Operand.Create(-1 + work.getExcelIndex()); } endIndex = Math.min(endIndex, text.length()); - return Operand.Create(text.substring(0, endIndex).lastIndexOf(args2.getTextValue()) + work.getExcelIndex()); + return Operand.Create(text.substring(0, endIndex).lastIndexOf(args2.TextValue()) + work.getExcelIndex()); } Operand args4 = func4.Evaluate(work, tempParameter); if (args4.IsNotNumber()) { - args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "LastIndexOf", 4); + args4 = args4.ToNumber +("Function '{0}' parameter {1} is error!", "LastIndexOf", 4); if (args4.IsError()) { return args4; } } - int startIndex = args3.getIntValue(); - int count = args4.getIntValue(); + int startIndex = args3.IntValue(); + int count = args4.IntValue(); if (startIndex < 0) { return Operand.Create(-1 + work.getExcelIndex()); } int endIndex = Math.min(startIndex + count, text.length()); String substring = text.substring(0, endIndex); - int result = substring.lastIndexOf(args2.getTextValue()); + int result = substring.lastIndexOf(args2.TextValue()); return Operand.Create(result + work.getExcelIndex()); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java index 3c44f7823..fbbae2c6e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java @@ -21,7 +21,8 @@ public Function_LOOKCEILING(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LookCeiling", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "LookCeiling", 1); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java index 503a6a849..5be52ab5c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java @@ -20,7 +20,8 @@ public Function_LOOKFLOOR(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LookFloor", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "LookFloor", 1); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java index e6d690a81..38373e078 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java @@ -31,8 +31,8 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } - Pattern pattern = Pattern.compile(args2.getTextValue()); - Matcher matcher = pattern.matcher(args1.getTextValue()); + Pattern pattern = Pattern.compile(args2.TextValue()); + Matcher matcher = pattern.matcher(args1.TextValue()); if (!matcher.find()) { return Operand.Error("Function '{0}' is error!", "Regex"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java index 8275e7ddd..807bc83e3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java @@ -36,7 +36,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args3; } } - String result = Pattern.compile(args2.getTextValue()).matcher(args1.getTextValue()).replaceAll(args3.getTextValue()); + String result = Pattern.compile(args2.TextValue()).matcher(args1.TextValue()).replaceAll(args3.TextValue()); return Operand.Create(result); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java index 8230221b4..164d3983d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java @@ -41,8 +41,8 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara ignoreCase = true; } } - String text = args1.getTextValue(); - String suffix = args2.getTextValue(); + String text = args1.TextValue(); + String suffix = args2.TextValue(); boolean endsWith = false; if (ignoreCase) { endsWith = text.toLowerCase().endsWith(suffix.toLowerCase()); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java index 0cfd304ec..67437d787 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java @@ -41,8 +41,8 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara ignoreCase = true; } } - String text = args1.getTextValue(); - String prefix = args2.getTextValue(); + String text = args1.TextValue(); + String prefix = args2.TextValue(); boolean startsWith = false; if (ignoreCase) { startsWith = text.toLowerCase().startsWith(prefix.toLowerCase()); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java index 496d1d2de..23edf0d44 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java @@ -28,7 +28,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - String[] parts = args1.getTextValue().split(args2.getTextValue()); + String[] parts = args1.TextValue().split(args2.TextValue()); return Operand.Create(parts); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java index 5941b0b9c..be0bb8102 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java @@ -28,9 +28,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - String text = args1.getTextValue(); + String text = args1.TextValue(); if (func3 == null) { - return Operand.Create(text.startsWith(args2.getTextValue())); + return Operand.Create(text.startsWith(args2.TextValue())); } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotBoolean()) { @@ -40,9 +40,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } if (args3.getBooleanValue()) { - return Operand.Create(text.toLowerCase().startsWith(args2.getTextValue().toLowerCase())); + return Operand.Create(text.toLowerCase().startsWith(args2.TextValue().toLowerCase())); } else { - return Operand.Create(text.startsWith(args2.getTextValue())); + return Operand.Create(text.startsWith(args2.TextValue())); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java index b0f02af1f..09784acf1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java @@ -23,14 +23,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Substring", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "Substring", 2); if (args2.IsError()) { return args2; } } - String text = args1.getTextValue(); - int startIndex = args2.getIntValue() - work.getExcelIndex(); + String text = args1.TextValue(); + int startIndex = args2.IntValue() - work.getExcelIndex(); if (startIndex < 0) { startIndex = 0; } @@ -42,12 +43,13 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Substring", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "Substring", 3); if (args3.IsError()) { return args3; } } - int length = args3.getIntValue(); + int length = args3.IntValue(); int endIndex = startIndex + length; if (endIndex > text.length()) { endIndex = text.length(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java index 0d1d85089..9387e6bab 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java @@ -22,7 +22,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } if (func2 == null) { - return Operand.Create(trimEnd(args1.getTextValue())); + return Operand.Create(trimEnd(args1.TextValue())); } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotText()) { @@ -31,8 +31,8 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - char[] trimChars = args2.getTextValue().toCharArray(); - return Operand.Create(trimEnd(args1.getTextValue(), trimChars)); + char[] trimChars = args2.TextValue().toCharArray(); + return Operand.Create(trimEnd(args1.TextValue(), trimChars)); } private String trimEnd(String str) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java index 5c3c7e4b3..49da42774 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java @@ -22,7 +22,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } if (func2 == null) { - return Operand.Create(trimStart(args1.getTextValue())); + return Operand.Create(trimStart(args1.TextValue())); } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotText()) { @@ -31,8 +31,8 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - char[] trimChars = args2.getTextValue().toCharArray(); - return Operand.Create(trimStart(args1.getTextValue(), trimChars)); + char[] trimChars = args2.TextValue().toCharArray(); + return Operand.Create(trimStart(args1.TextValue(), trimChars)); } private String trimStart(String str) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java index 26079e3ad..3d85b69e3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java @@ -44,10 +44,10 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args3; } } - charset = java.nio.charset.Charset.forName(args3.getTextValue()); + charset = java.nio.charset.Charset.forName(args3.TextValue()); } - byte[] buffer = args1.getTextValue().getBytes(charset); - String secret = args2.getTextValue(); + byte[] buffer = args1.TextValue().getBytes(charset); + String secret = args2.TextValue(); String t = getHmacMd5String(buffer, secret); return Operand.Create(t); } catch (Exception ex) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java index ee631307d..23c5c6b98 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java @@ -44,10 +44,10 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args3; } } - charset = java.nio.charset.Charset.forName(args3.getTextValue()); + charset = java.nio.charset.Charset.forName(args3.TextValue()); } - byte[] buffer = args1.getTextValue().getBytes(charset); - String secret = args2.getTextValue(); + byte[] buffer = args1.TextValue().getBytes(charset); + String secret = args2.TextValue(); String t = getHmacSha1String(buffer, secret); return Operand.Create(t); } catch (Exception ex) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java index a02ecc9b4..f0ac93ba9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java @@ -44,10 +44,10 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args3; } } - charset = java.nio.charset.Charset.forName(args3.getTextValue()); + charset = java.nio.charset.Charset.forName(args3.TextValue()); } - byte[] buffer = args1.getTextValue().getBytes(charset); - String secret = args2.getTextValue(); + byte[] buffer = args1.TextValue().getBytes(charset); + String secret = args2.TextValue(); String t = getHmacSha256String(buffer, secret); return Operand.Create(t); } catch (Exception ex) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java index 7e8f600e4..1e841918e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java @@ -44,10 +44,10 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args3; } } - charset = java.nio.charset.Charset.forName(args3.getTextValue()); + charset = java.nio.charset.Charset.forName(args3.TextValue()); } - byte[] buffer = args1.getTextValue().getBytes(charset); - String secret = args2.getTextValue(); + byte[] buffer = args1.TextValue().getBytes(charset); + String secret = args2.TextValue(); String t = getHmacSha512String(buffer, secret); return Operand.Create(t); } catch (Exception ex) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java index 0e34621ef..1afc7751a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java @@ -35,9 +35,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - charset = java.nio.charset.Charset.forName(args2.getTextValue()); + charset = java.nio.charset.Charset.forName(args2.TextValue()); } - byte[] buffer = args1.getTextValue().getBytes(charset); + byte[] buffer = args1.TextValue().getBytes(charset); String t = getMd5String(buffer); return Operand.Create(t); } catch (Exception ex) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java index f48ded300..2590c615c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java @@ -35,9 +35,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - charset = java.nio.charset.Charset.forName(args2.getTextValue()); + charset = java.nio.charset.Charset.forName(args2.TextValue()); } - byte[] buffer = args1.getTextValue().getBytes(charset); + byte[] buffer = args1.TextValue().getBytes(charset); String t = getSha1String(buffer); return Operand.Create(t); } catch (Exception ex) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java index 54458dc7d..9381f8123 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java @@ -35,9 +35,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - charset = java.nio.charset.Charset.forName(args2.getTextValue()); + charset = java.nio.charset.Charset.forName(args2.TextValue()); } - byte[] buffer = args1.getTextValue().getBytes(charset); + byte[] buffer = args1.TextValue().getBytes(charset); String t = getSha256String(buffer); return Operand.Create(t); } catch (Exception ex) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java index fc93903b1..024c2c3ef 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java @@ -35,9 +35,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - charset = java.nio.charset.Charset.forName(args2.getTextValue()); + charset = java.nio.charset.Charset.forName(args2.TextValue()); } - byte[] buffer = args1.getTextValue().getBytes(charset); + byte[] buffer = args1.TextValue().getBytes(charset); String t = getSha512String(buffer); return Operand.Create(t); } catch (Exception ex) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java index c9e525aa2..bdcf81ae5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java @@ -33,9 +33,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - charset = java.nio.charset.Charset.forName(args2.getTextValue()); + charset = java.nio.charset.Charset.forName(args2.TextValue()); } - byte[] bytes = Base64.FromBase64String(args1.getTextValue()); + byte[] bytes = Base64.FromBase64String(args1.TextValue()); String t = new String(bytes, charset); return Operand.Create(t); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java index 92b48cce9..b948edd00 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java @@ -33,9 +33,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - charset = java.nio.charset.Charset.forName(args2.getTextValue()); + charset = java.nio.charset.Charset.forName(args2.TextValue()); } - byte[] bytes = Base64.FromBase64ForUrlString(args1.getTextValue()); + byte[] bytes = Base64.FromBase64ForUrlString(args1.TextValue()); String t = new String(bytes, charset); return Operand.Create(t); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java index 804872593..b1799169d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java @@ -21,7 +21,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args1; } } - String s = args1.getTextValue(); + String s = args1.TextValue(); String r = HtmlDecode(s); return Operand.Create(r); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java index a83b04c82..44966e6a5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java @@ -21,7 +21,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args1; } } - String s = args1.getTextValue(); + String s = args1.TextValue(); String r = HtmlEncode(s); return Operand.Create(r); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java index eba1cff0c..b14e8dfed 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java @@ -33,9 +33,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - charset = java.nio.charset.Charset.forName(args2.getTextValue()); + charset = java.nio.charset.Charset.forName(args2.TextValue()); } - byte[] bytes = args1.getTextValue().getBytes(charset); + byte[] bytes = args1.TextValue().getBytes(charset); String t = Base64.ToBase64String(bytes); return Operand.Create(t); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java index ab4b8bcc1..857564756 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java @@ -33,9 +33,9 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return args2; } } - charset = java.nio.charset.Charset.forName(args2.getTextValue()); + charset = java.nio.charset.Charset.forName(args2.TextValue()); } - byte[] bytes = args1.getTextValue().getBytes(charset); + byte[] bytes = args1.TextValue().getBytes(charset); String t = Base64.ToBase64ForUrlString(bytes); return Operand.Create(t); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java index 747c4557e..cf6faedf1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java @@ -22,7 +22,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } try { - String s = args1.getTextValue(); + String s = args1.TextValue(); String r = java.net.URLDecoder.decode(s, "UTF-8"); return Operand.Create(r); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java index ec679407e..40eb6a3c1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java @@ -22,7 +22,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } try { - String s = args1.getTextValue(); + String s = args1.TextValue(); String r = java.net.URLEncoder.encode(s, "UTF-8"); return Operand.Create(r); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java index e7dac97ed..b2ae00b10 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java @@ -23,14 +23,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddDays", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "AddDays", 2); if (args2.IsError()) { return args2; } } try { toolgood.algorithm.internals.MyDate date = args1.getDateValue(); - int days = args2.getIntValue(); + int days = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddDays(days); return Operand.Create(result); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java index b590dd850..3faf3d2d2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java @@ -23,14 +23,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddHours", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "AddHours", 2); if (args2.IsError()) { return args2; } } try { toolgood.algorithm.internals.MyDate date = args1.getDateValue(); - int hours = args2.getIntValue(); + int hours = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddHours(hours); return Operand.Create(result); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java index 2fc1390c1..623e62661 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java @@ -23,14 +23,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddMinutes", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "AddMinutes", 2); if (args2.IsError()) { return args2; } } try { toolgood.algorithm.internals.MyDate date = args1.getDateValue(); - int minutes = args2.getIntValue(); + int minutes = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddMinutes(minutes); return Operand.Create(result); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java index 7447045a5..8c11e6962 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java @@ -23,14 +23,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddMonths", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "AddMonths", 2); if (args2.IsError()) { return args2; } } try { toolgood.algorithm.internals.MyDate date = args1.getDateValue(); - int months = args2.getIntValue(); + int months = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddMonths(months); return Operand.Create(result); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java index 0c50d1c71..129ab522c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java @@ -23,14 +23,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddSeconds", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "AddSeconds", 2); if (args2.IsError()) { return args2; } } try { toolgood.algorithm.internals.MyDate date = args1.getDateValue(); - int seconds = args2.getIntValue(); + int seconds = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddSeconds(seconds); return Operand.Create(result); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java index f33b7a8ed..de83b42c4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java @@ -23,14 +23,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "AddYears", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "AddYears", 2); if (args2.IsError()) { return args2; } } try { toolgood.algorithm.internals.MyDate date = args1.getDateValue(); - int years = args2.getIntValue(); + int years = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddYears(years); return Operand.Create(result); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java index c123b184a..572f1eb17 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java @@ -16,21 +16,24 @@ public Function_DATE(FunctionBase[] funcs) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = funcs[0].Evaluate(work, tempParameter); if (args1.isNotNumber()) { - args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Date", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "Date", 1); if (args1.IsError()) { return args1; } } Operand args2 = funcs[1].Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Date", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "Date", 2); if (args2.IsError()) { return args2; } } Operand args3 = funcs[2].Evaluate(work, tempParameter); if (args3.isNotNumber()) { - args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "Date", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "Date", 3); if (args3.IsError()) { return args3; } @@ -38,55 +41,61 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara toolgood.algorithm.internals.MyDate d; if (funcs.length == 3) { - d = new toolgood.algorithm.internals.MyDate(args1.getIntValue(), args2.getIntValue(), args3.getIntValue(), 0, 0, 0); + d = new toolgood.algorithm.internals.MyDate(args1.IntValue(), args2.IntValue(), args3.IntValue(), 0, 0, 0); } else if (funcs.length == 4) { Operand args4 = funcs[3].Evaluate(work, tempParameter); if (args4.isNotNumber()) { - args4 = args4.toNumber("Function '{0}' parameter {1} is error!", "Date", 4); + args4 = args4.ToNumber +("Function '{0}' parameter {1} is error!", "Date", 4); if (args4.IsError()) { return args4; } } - d = new toolgood.algorithm.internals.MyDate(args1.getIntValue(), args2.getIntValue(), args3.getIntValue(), args4.getIntValue(), 0, 0); + d = new toolgood.algorithm.internals.MyDate(args1.IntValue(), args2.IntValue(), args3.IntValue(), args4.IntValue(), 0, 0); } else if (funcs.length == 5) { Operand args4 = funcs[3].Evaluate(work, tempParameter); if (args4.isNotNumber()) { - args4 = args4.toNumber("Function '{0}' parameter {1} is error!", "Date", 4); + args4 = args4.ToNumber +("Function '{0}' parameter {1} is error!", "Date", 4); if (args4.IsError()) { return args4; } } Operand args5 = funcs[4].Evaluate(work, tempParameter); if (args5.isNotNumber()) { - args5 = args5.toNumber("Function '{0}' parameter {1} is error!", "Date", 5); + args5 = args5.ToNumber +("Function '{0}' parameter {1} is error!", "Date", 5); if (args5.IsError()) { return args5; } } - d = new toolgood.algorithm.internals.MyDate(args1.getIntValue(), args2.getIntValue(), args3.getIntValue(), args4.getIntValue(), args5.getIntValue(), 0); + d = new toolgood.algorithm.internals.MyDate(args1.IntValue(), args2.IntValue(), args3.IntValue(), args4.IntValue(), args5.IntValue(), 0); } else { Operand args4 = funcs[3].Evaluate(work, tempParameter); if (args4.isNotNumber()) { - args4 = args4.toNumber("Function '{0}' parameter {1} is error!", "Date", 4); + args4 = args4.ToNumber +("Function '{0}' parameter {1} is error!", "Date", 4); if (args4.IsError()) { return args4; } } Operand args5 = funcs[4].Evaluate(work, tempParameter); if (args5.isNotNumber()) { - args5 = args5.toNumber("Function '{0}' parameter {1} is error!", "Date", 5); + args5 = args5.ToNumber +("Function '{0}' parameter {1} is error!", "Date", 5); if (args5.IsError()) { return args5; } } Operand args6 = funcs[5].Evaluate(work, tempParameter); if (args6.isNotNumber()) { - args6 = args6.toNumber("Function '{0}' parameter {1} is error!", "Date", 6); + args6 = args6.ToNumber +("Function '{0}' parameter {1} is error!", "Date", 6); if (args6.IsError()) { return args6; } } - d = new toolgood.algorithm.internals.MyDate(args1.getIntValue(), args2.getIntValue(), args3.getIntValue(), args4.getIntValue(), args5.getIntValue(), args6.getIntValue()); + d = new toolgood.algorithm.internals.MyDate(args1.IntValue(), args2.IntValue(), args3.IntValue(), args4.IntValue(), args5.IntValue(), args6.IntValue()); } return Operand.Create(d); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java index 1f2cf311b..b12302d30 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java @@ -37,7 +37,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } toolgood.algorithm.internals.MyDate startMyDate = args1.getDateValue(); toolgood.algorithm.internals.MyDate endMyDate = args2.getDateValue(); - String t = args3.getTextValue().toLowerCase(); + String t = args3.TextValue().toLowerCase(); if (t.equals("y")) { // 计算年差 diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java index bb621c532..0a12ad9d3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java @@ -29,20 +29,22 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } int type = 0; if (args.size() == 2) { - Operand args2 = args.get(1).toNumber("Function '{0}' parameter {1} is error!", "DateValue", 2); + Operand args2 = args.get(1).ToNumber +("Function '{0}' parameter {1} is error!", "DateValue", 2); if (args2.IsError()) { return args2; } - type = args2.getIntValue(); + type = args2.IntValue(); } if (type == 0) { if (args.get(0).isText()) { - toolgood.algorithm.internals.MyDate date = toolgood.algorithm.internals.MyDate.parse(args.get(0).getTextValue()); + toolgood.algorithm.internals.MyDate date = toolgood.algorithm.internals.MyDate.parse(args.get(0).TextValue()); if (date != null) { return Operand.Create(date); } } - Operand args1 = args.get(0).toNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); + Operand args1 = args.get(0).ToNumber +("Function '{0}' parameter {1} is error!", "DateValue", 1); if (args1.getLongValue() <= 2958465L) { // 9999-12-31 日时间在excel的数字为 2958465 return args1.toMyDate(); } @@ -59,18 +61,21 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (args1.IsError()) { return args1; } - toolgood.algorithm.internals.MyDate date = toolgood.algorithm.internals.MyDate.parse(args1.getTextValue()); + toolgood.algorithm.internals.MyDate date = toolgood.algorithm.internals.MyDate.parse(args1.TextValue()); if (date != null) { return Operand.Create(date); } } else if (type == 2) { - return args.get(0).toNumber("Function '{0}' parameter is error!", "DateValue").toMyDate(); + return args.get(0).ToNumber +("Function '{0}' parameter is error!", "DateValue").toMyDate(); } else if (type == 3) { - Operand args1 = args.get(0).toNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); + Operand args1 = args.get(0).ToNumber +("Function '{0}' parameter {1} is error!", "DateValue", 1); // 这里需要实现类似 FunctionUtil.StartDateUtc.AddMilliseconds 的功能 return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / (86400.0 * 1000.0))); } else if (type == 4) { - Operand args1 = args.get(0).toNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); + Operand args1 = args.get(0).ToNumber +("Function '{0}' parameter {1} is error!", "DateValue", 1); // 这里需要实现类似 FunctionUtil.StartDateUtc.AddSeconds 的功能 return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / 86400.0)); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java index 446f3a176..a49fc51eb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java @@ -23,14 +23,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "EDate", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "EDate", 2); if (args2.IsError()) { return args2; } } try { toolgood.algorithm.internals.MyDate date = args1.getDateValue(); - int months = args2.getIntValue(); + int months = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddMonths(months); return Operand.Create(result); } catch (Exception e) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java index e67317996..142de2633 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java @@ -23,14 +23,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "EoMonth", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "EoMonth", 2); if (args2.IsError()) { return args2; } } try { toolgood.algorithm.internals.MyDate date = args1.getDateValue(); - int months = args2.getIntValue(); + int months = args2.IntValue(); // 添加指定的月份数(加上1) toolgood.algorithm.internals.MyDate tempDate = date.AddMonths(months + 1); // 创建一个新的日期,设置为该月的第一天 diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java index e2f69434c..774973f17 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java @@ -16,14 +16,16 @@ public Function_TIME(FunctionBase func1, FunctionBase func2, FunctionBase func3) public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotNumber()) { - args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Time", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "Time", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Time", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "Time", 2); if (args2.IsError()) { return args2; } @@ -33,14 +35,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (func3 != null) { Operand args3 = func3.Evaluate(work, tempParameter); if (args3.isNotNumber()) { - args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "Time", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "Time", 3); if (args3.IsError()) { return args3; } } - d = new toolgood.algorithm.internals.MyDate(0, 0, 0, args1.getIntValue(), args2.getIntValue(), args3.getIntValue()); + d = new toolgood.algorithm.internals.MyDate(0, 0, 0, args1.IntValue(), args2.IntValue(), args3.IntValue()); } else { - d = new toolgood.algorithm.internals.MyDate(0, 0, 0, args1.getIntValue(), args2.getIntValue(), 0); + d = new toolgood.algorithm.internals.MyDate(0, 0, 0, args1.IntValue(), args2.IntValue(), 0); } return Operand.Create(d); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java index ac6216b39..8c2566337 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java @@ -23,12 +23,13 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (func2 != null) { Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "TimeStamp", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "TimeStamp", 2); if (args2.IsError()) { return args2; } } - type = args2.getIntValue(); + type = args2.IntValue(); } Operand dateOperand = args0.toMyDate("Function '{0}' parameter {1} is error!", "TimeStamp", 1); if (dateOperand.IsError()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java index 07f566153..54d89ab4d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java @@ -24,7 +24,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } - String timeString = args1.getTextValue(); + String timeString = args1.TextValue(); // 尝试解析时间字符串 toolgood.algorithm.internals.MyDate date = parseTimeString(timeString); if (date != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index 52fb545a0..6b11487ef 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -26,12 +26,13 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (func2 != null) { Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "WeekDay", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "WeekDay", 2); if (args2.IsError()) { return args2; } } - type = args2.getIntValue(); + type = args2.IntValue(); } toolgood.algorithm.internals.MyDate date = args1.getDateValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index 6943995ee..8eab7734e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -33,12 +33,13 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (func2 != null) { Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "WeekNum", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "WeekNum", 2); if (args2.IsError()) { return args2; } } - if (args2.getIntValue() == 2) { + if (args2.IntValue() == 2) { days--; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index 8cdd55395..0b907b4c7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -24,14 +24,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = funcs[1].Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Workday", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "Workday", 2); if (args2.IsError()) { return args2; } } toolgood.algorithm.internals.MyDate startMyDate = args1.getDateValue(); - int days = args2.getIntValue(); + int days = args2.IntValue(); HashSet holidaySet = new HashSet<>(); for (int i = 2; i < funcs.length; i++) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java index 966b129fd..d5824106a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java @@ -13,7 +13,8 @@ public Function_ABS(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Abs"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Abs"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java index f162b2587..b75e6abbf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java @@ -13,7 +13,8 @@ public Function_CEILING(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Ceiling", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "Ceiling", 1); if (args1.IsError()) { return args1; } @@ -25,7 +26,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Combin", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "Combin", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Combin", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "Combin", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java index 3f8310998..3aa360c57 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java @@ -13,7 +13,8 @@ public Function_EVEN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Even"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Even"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java index e7ae527c0..259514955 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java @@ -13,7 +13,8 @@ public Function_EXP(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Exp"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Exp"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java index 5d745780e..ce7f46236 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java @@ -13,7 +13,8 @@ public Function_FACT(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Fact"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Fact"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java index 98967503e..21a3819f0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java @@ -13,7 +13,8 @@ public Function_FACTDOUBLE(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "FactDouble"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "FactDouble"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java index 4db63b072..695d35f5a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java @@ -16,7 +16,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Floor", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "Floor", 1); if (args1.IsError()) { return args1; } @@ -24,7 +25,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Ln"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Ln"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java index 4fa7e703d..adcebc6e3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java @@ -13,7 +13,8 @@ public Function_LOG(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Log", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "Log", 1); if (args1.IsError()) { return args1; } @@ -21,7 +22,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "MRound", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "MRound", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "MRound", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "MRound", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java index 93ace8271..e0eef4c56 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java @@ -13,7 +13,8 @@ public Function_ODD(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Odd"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Odd"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java index 5956f7452..5b8105511 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java @@ -13,14 +13,16 @@ public Function_PERMUT(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Permut", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "Permut", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Permut", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "Permut", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java index df8580aa3..a7bdd32b0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java @@ -13,14 +13,16 @@ public Function_POWER(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Power", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "Power", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Power", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "Power", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java index e88c50011..f8591439b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java @@ -13,7 +13,8 @@ public Function_Percentage(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Percentage"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Percentage"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java index 8b8a0b1c6..acedb103d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java @@ -13,14 +13,16 @@ public Function_QUOTIENT(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Quotient", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "Quotient", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Quotient", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "Quotient", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java index 488e82b2b..e52066037 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java @@ -14,14 +14,16 @@ public Function_RANDBETWEEN(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RandBetween", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "RandBetween", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "RandBetween", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "RandBetween", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java index 9843f02bc..50953833e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java @@ -13,7 +13,8 @@ public Function_ROUND(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Round", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "Round", 1); if (args1.IsError()) { return args1; } @@ -24,7 +25,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RoundDown", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "RoundDown", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "RoundDown", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "RoundDown", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java index a73e7dd0d..8a764080d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java @@ -13,14 +13,16 @@ public Function_ROUNDUP(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RoundUp", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "RoundUp", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "RoundUp", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "RoundUp", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java index 4a625fc6b..406d97cba 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java @@ -13,7 +13,8 @@ public Function_SIGN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sign"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Sign"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java index fcd4908af..f932345e5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java @@ -13,7 +13,8 @@ public Function_SQRT(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sqrt"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Sqrt"); if (args1.IsError()) { return args1; } @@ -21,7 +22,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "SqrtPI"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "SqrtPI"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.sqrt(args1.getDoubleValue() * Math.PI)); + return Operand.Create(Math.sqrt(args1.DoubleValue +() * Math.PI)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java index cfffb2cec..181394762 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java @@ -13,12 +13,13 @@ public Function_TRUNC(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Trunc"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Trunc"); if (args1.IsError()) { return args1; } } - return Operand.Create((int) args1.getIntValue()); + return Operand.Create((int) args1.IntValue()); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java index 6d5b0eece..8015618d2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java @@ -16,21 +16,24 @@ public Function_BETADIST(FunctionBase func1, FunctionBase func2, FunctionBase fu public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "BetaDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "BetaDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "BetaDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java index 9e03e4877..e81b2bdaa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java @@ -16,21 +16,24 @@ public Function_BETAINV(FunctionBase func1, FunctionBase func2, FunctionBase fun public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "BetaInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "BetaInv", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "BetaInv", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java index 7e58d7462..87afc0657 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java @@ -16,21 +16,24 @@ public Function_BINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase f public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "BinomDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "BinomDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "BinomDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java index db3b4d3f1..93428a990 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java @@ -16,14 +16,16 @@ public Function_EXPONDIST(FunctionBase func1, FunctionBase func2, FunctionBase f public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "ExponDist", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "ExponDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "ExponDist", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "ExponDist", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java index 74dadc8b9..8fefd4f3a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java @@ -16,21 +16,24 @@ public Function_FDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3 public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "FDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "FDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "FDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java index 4c4670503..74581417f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java @@ -16,21 +16,24 @@ public Function_FINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "FInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "FInv", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "FInv", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java index 064714277..5260b16df 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java @@ -14,7 +14,8 @@ public Function_FISHER(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Fisher"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Fisher"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java index e1999c0d7..b4cda0819 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java @@ -14,7 +14,8 @@ public Function_FISHERINV(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "FisherInv"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "FisherInv"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java index 1bd321156..9ff5da354 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java @@ -16,21 +16,24 @@ public Function_GAMMADIST(FunctionBase func1, FunctionBase func2, FunctionBase f public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "GammaDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "GammaDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "GammaDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java index bcdb99a02..26f4f141e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java @@ -16,21 +16,24 @@ public Function_GAMMAINV(FunctionBase func1, FunctionBase func2, FunctionBase fu public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "GammaInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "GammaInv", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "GammaInv", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java index 927cbe18a..12fdf1158 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java @@ -16,7 +16,8 @@ public Function_GAMMALN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "GammaLn"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "GammaLn"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java index c198298c9..aeed00755 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java @@ -16,28 +16,32 @@ public Function_HYPGEOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "HypgeomDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "HypgeomDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "HypgeomDist", 3); if (args3.IsError()) { return args3; } } Operand args4 = func4.Evaluate(work, tempParameter); if (args4.IsNotNumber()) { - args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 4); + args4 = args4.ToNumber +("Function '{0}' parameter {1} is error!", "HypgeomDist", 4); if (args4.IsError()) { return args4; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java index 4b63b3db8..2975da87c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java @@ -26,7 +26,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "LogInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "LogInv", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "LogInv", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java index fdafa0c1e..43574c32c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java @@ -16,21 +16,24 @@ public Function_LOGNORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "LognormDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "LognormDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "LognormDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java index 7787910b0..938c35e52 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java @@ -16,21 +16,24 @@ public Function_NEGBINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBas public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "NegbinomDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "NegbinomDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "NegbinomDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java index afadba345..cfde09694 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java @@ -16,21 +16,24 @@ public Function_NORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase fu public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "NormDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "NormDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "NormDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java index 7b99dd6bb..e93f8307e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java @@ -16,21 +16,24 @@ public Function_NORMINV(FunctionBase func1, FunctionBase func2, FunctionBase fun public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "NormInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "NormInv", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "NormInv", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java index 1860eb290..73bde599a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java @@ -16,7 +16,8 @@ public Function_NORMSDIST(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "NormSDist"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "NormSDist"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java index 7dbd235f1..5b80118d4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java @@ -16,7 +16,8 @@ public Function_NORMSINV(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "NormSInv"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "NormSInv"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java index d083b6721..77acdf64e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java @@ -26,7 +26,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParam } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "PercentRank", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "PercentRank", 2); if (args2.IsError()) { return args2; } @@ -39,19 +40,21 @@ public Operand Evaluate(Object work, Function tempParam return Operand.Error("Function '{0}' parameter is error!", "PercentRank"); } - double k = args2.getDoubleValue(); + double k = args2.DoubleValue +(); double[] array = list.stream().mapToDouble(Double::doubleValue).toArray(); double v = ExcelFunctions.PercentRank(array, k); int d = 3; if (func3 != null) { Operand args3 = func3.Evaluate(work, tempParameter); if (args3.getOperandType() != OperandType.Number) { - args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "PercentRank", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "PercentRank", 3); if (args3.IsError()) { return args3; } } - d = args3.getIntValue(); + d = args3.IntValue(); } return Operand.Create(Math.round(v * Math.pow(10, d)) / Math.pow(10, d)); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java index 2abb87269..57707884f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java @@ -18,14 +18,16 @@ public Function_POISSON(FunctionBase func1, FunctionBase func2, FunctionBase fun public Operand Evaluate(Object work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Number) { - args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Poisson", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "Poisson", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Poisson", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "Poisson", 2); if (args2.IsError()) { return args2; } @@ -37,8 +39,9 @@ public Operand Evaluate(Object work, Function tempParam return args3; } } - int k = args1.getIntValue(); - double lambda = args2.getDoubleValue(); + int k = args1.IntValue(); + double lambda = args2.DoubleValue +(); boolean state = args3.getBooleanValue(); if (!(lambda > 0.0)) { return Operand.Error("Function '{0}' parameter is error!", "Poisson"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java index 292a08b2d..a752a2774 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java @@ -27,7 +27,8 @@ public Operand Evaluate(Object work, Function tempParam } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Quartile", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "Quartile", 2); if (args2.IsError()) { return args2; } @@ -39,7 +40,7 @@ public Operand Evaluate(Object work, Function tempParam return Operand.Error("Function '{0}' parameter {1} is error!", "Quartile", 1); } - int quant = args2.getIntValue(); + int quant = args2.IntValue(); if (quant < 0 || quant > 4) { return Operand.Error("Function '{0}' parameter {1} is error!", "Quartile", 2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java index bd52f36d4..0d3988b55 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -26,7 +26,8 @@ public Operand Evaluate(Object work, Function tempParam } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Small", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "Small", 2); if (args2.IsError()) { return args2; } @@ -39,7 +40,7 @@ public Operand Evaluate(Object work, Function tempParam } list = list.stream().sorted().collect(Collectors.toList()); - int k = args2.getIntValue(); + int k = args2.IntValue(); int excelIndex = 0; // 假设默认Excel索引为0 try { // 尝试获取ExcelIndex属性 diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java index e215d9952..a054811c8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java @@ -50,12 +50,13 @@ public Operand Evaluate(Object work, Function tempParam double sum = 0; if (args2.getOperandType() == OperandType.Number) { // 处理数字条件 - double value = args2.getDoubleValue(); + double value = args2.DoubleValue +(); long count = FunctionUtil.F_base_countif(list, value); sum = count * value; } else { // 处理文本条件 - String textValue = args2.getTextValue().trim(); + String textValue = args2.TextValue().trim(); try { // 尝试解析为数字 double d = Double.parseDouble(textValue); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java index 1cd6110f8..c1a658390 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java @@ -18,29 +18,33 @@ public Function_TDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3 public Operand Evaluate(Object work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Number) { - args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "TDist", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "TDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "TDist", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "TDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.getOperandType() != OperandType.Number) { - args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "TDist", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "TDist", 3); if (args3.IsError()) { return args3; } } - double x = args1.getDoubleValue(); - int degreesFreedom = args2.getIntValue(); - int tails = args3.getIntValue(); + double x = args1.DoubleValue +(); + int degreesFreedom = args2.IntValue(); + int tails = args3.IntValue(); if (degreesFreedom <= 0 || tails < 1 || tails > 2) { return Operand.Error("Function '{0}' parameter is error!", "TDist"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java index 1731ee2e2..6f28d65ce 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java @@ -17,22 +17,25 @@ public Function_TINV(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(Object work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.getOperandType() != OperandType.Number) { - args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "TInv", 1); + if (args1.Type() != OperandType.Number) { + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "TInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.getOperandType() != OperandType.Number) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "TInv", 2); + if (args2.Type() != OperandType.Number) { + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "TInv", 2); if (args2.IsError()) { return args2; } } - double p = args1.getDoubleValue(); - int degreesFreedom = args2.getIntValue(); + double p = args1.DoubleValue +(); + int degreesFreedom = args2.IntValue(); if (degreesFreedom <= 0 || p < 0.0 || p > 1.0) { return Operand.Error("Function '{0}' parameter is error!", "TInv"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java index fafa957f0..01587aea0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java @@ -18,21 +18,24 @@ public Function_WEIBULL(FunctionBase func1, FunctionBase func2, FunctionBase fun public Operand Evaluate(Object work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Number) { - args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Weibull", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "Weibull", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Weibull", 2); + args2 = args2.ToNumber +("Function '{0}' parameter {1} is error!", "Weibull", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.getOperandType() != OperandType.Number) { - args3 = args3.toNumber("Function '{0}' parameter {1} is error!", "Weibull", 3); + args3 = args3.ToNumber +("Function '{0}' parameter {1} is error!", "Weibull", 3); if (args3.IsError()) { return args3; } @@ -45,9 +48,12 @@ public Operand Evaluate(Object work, Function tempParam } } - double x = args1.getDoubleValue(); - double shape = args2.getDoubleValue(); - double scale = args3.getDoubleValue(); + double x = args1.DoubleValue +(); + double shape = args2.DoubleValue +(); + double scale = args3.DoubleValue +(); boolean state = args4.getBooleanValue(); if (shape <= 0.0 || scale <= 0.0) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java index 815aeab27..d771196a8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java @@ -28,7 +28,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2BIN", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "DEC2BIN", 1); if (args1.IsError()) { return args1; } @@ -23,7 +24,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2HEX", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "DEC2HEX", 1); if (args1.IsError()) { return args1; } @@ -23,7 +24,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2OCT", 1); + args1 = args1.ToNumber +("Function '{0}' parameter {1} is error!", "DEC2OCT", 1); if (args1.IsError()) { return args1; } @@ -23,7 +24,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Acos"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Acos"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.acos(args1.getDoubleValue())); + return Operand.Create(Math.acos(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java index b0b8546a3..315066c83 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java @@ -16,12 +16,14 @@ public Function_ACOSH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Acosh"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Acosh"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.acosh(args1.getDoubleValue())); + return Operand.Create(Math.acosh(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java index f7edbc7fd..505f78191 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java @@ -16,12 +16,14 @@ public Function_ASIN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Asin"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Asin"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.asin(args1.getDoubleValue())); + return Operand.Create(Math.asin(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java index 0630dcdc4..d8df2bfc2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java @@ -16,12 +16,14 @@ public Function_ASINH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Asinh"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Asinh"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.asinh(args1.getDoubleValue())); + return Operand.Create(Math.asinh(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java index 28256dd28..e6ad706b8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java @@ -16,12 +16,14 @@ public Function_ATAN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Atan"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Atan"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.atan(args1.getDoubleValue())); + return Operand.Create(Math.atan(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java index 97ba6552d..14135fba8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java @@ -16,19 +16,23 @@ public Function_ATAN2(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Atan2"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Atan2"); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (!args2.IsNumber()) { - args2 = args2.toNumber("Function '{0}' parameter is error!", "Atan2"); + args2 = args2.ToNumber +("Function '{0}' parameter is error!", "Atan2"); if (args2.IsError()) { return args2; } } - return Operand.Create(Math.atan2(args1.getDoubleValue(), args2.getDoubleValue())); + return Operand.Create(Math.atan2(args1.DoubleValue +(), args2.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java index aedf5ca6d..d8c647a29 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java @@ -16,12 +16,14 @@ public Function_ATANH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Atanh"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Atanh"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.atanh(args1.getDoubleValue())); + return Operand.Create(Math.atanh(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java index f6ed8a4a5..1ea2a31bd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java @@ -16,12 +16,14 @@ public Function_COS(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Cos"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Cos"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.cos(args1.getDoubleValue())); + return Operand.Create(Math.cos(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java index 095f27601..75ecc0706 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java @@ -16,12 +16,14 @@ public Function_COSH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Cosh"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Cosh"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.cosh(args1.getDoubleValue())); + return Operand.Create(Math.cosh(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java index 1e2e08282..ecbc80d6f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java @@ -16,12 +16,14 @@ public Function_COT(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Cot"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Cot"); if (args1.IsError()) { return args1; } } - double value = args1.getDoubleValue(); + double value = args1.DoubleValue +(); double tanValue = Math.tan(value); if (tanValue == 0) { return Operand.Create(Double.POSITIVE_INFINITY); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java index 36ebf00fc..0cb1c129d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java @@ -16,12 +16,14 @@ public Function_CSC(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Csc"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Csc"); if (args1.IsError()) { return args1; } } - double value = args1.getDoubleValue(); + double value = args1.DoubleValue +(); double sinValue = Math.sin(value); if (sinValue == 0) { return Operand.Create(Double.POSITIVE_INFINITY); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java index be38f878b..aae166696 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java @@ -16,12 +16,14 @@ public Function_DEGREES(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Degrees"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Degrees"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.toDegrees(args1.getDoubleValue())); + return Operand.Create(Math.toDegrees(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java index 66bd99427..6b526dfb9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java @@ -16,12 +16,14 @@ public Function_RADIANS(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Radians"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Radians"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.toRadians(args1.getDoubleValue())); + return Operand.Create(Math.toRadians(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java index fa586d7ff..a4bc2904c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java @@ -16,12 +16,14 @@ public Function_SEC(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Sec"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Sec"); if (args1.IsError()) { return args1; } } - double value = args1.getDoubleValue(); + double value = args1.DoubleValue +(); double cosValue = Math.cos(value); if (cosValue == 0) { return Operand.Create(Double.POSITIVE_INFINITY); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java index 05d84ca15..631778952 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java @@ -16,12 +16,14 @@ public Function_SIN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Sin"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Sin"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.sin(args1.getDoubleValue())); + return Operand.Create(Math.sin(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java index 2b61803b4..4f1393a65 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java @@ -16,12 +16,14 @@ public Function_SINH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Sinh"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Sinh"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.sinh(args1.getDoubleValue())); + return Operand.Create(Math.sinh(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java index 3a78c87d0..120289d7d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java @@ -16,12 +16,14 @@ public Function_TAN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Tan"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Tan"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.tan(args1.getDoubleValue())); + return Operand.Create(Math.tan(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java index ffe50e0be..4928457c6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java @@ -16,12 +16,14 @@ public Function_TANH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Tanh"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Tanh"); if (args1.IsError()) { return args1; } } - return Operand.Create(Math.tanh(args1.getDoubleValue())); + return Operand.Create(Math.tanh(args1.DoubleValue +())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java index 3b3f3f1c3..26beea8b3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java @@ -44,16 +44,16 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Char"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "Char"); if (args1.IsError()) { return args1; } } - char c = (char) args1.getIntValue(); + char c = (char) args1.IntValue(); return Operand.Create(String.valueOf(c)); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java index 774d9e791..5b92bd709 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java @@ -19,7 +19,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction= args1.getTextValue().length()) { + if (start >= args1.TextValue().length()) { return Operand.Create(""); } - return Operand.Create(args1.getTextValue().substring(start, end)); + return Operand.Create(args1.TextValue().substring(start, end)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java index e9af11751..b1af5d0b8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java @@ -20,7 +20,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "RMB"); + args1 = args1.ToNumber +("Function '{0}' parameter is error!", "RMB"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java index 70b7082ac..1f1614e8f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java @@ -28,21 +28,22 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction= args2.getTextValue().length()) { + int startIndex = args3.IntValue(); + if (startIndex >= args2.TextValue().length()) { return Operand.Create(0); } - int p2 = args2.getTextValue().substring(startIndex).toLowerCase().indexOf(args1.getTextValue().toLowerCase()) + startIndex + work.getExcelIndex(); + int p2 = args2.TextValue().substring(startIndex).toLowerCase().indexOf(args1.TextValue().toLowerCase()) + startIndex + work.getExcelIndex(); return Operand.Create(p2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java index aca5bbf4d..ee8ec4f7f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java @@ -34,19 +34,20 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction operands) { if (operands.size() == 1) { - int r =(int) operands.get(0).ToNumber(null).NumberValue().intValue(); + int r =(int) operands.get(0).ToNumber +(null).NumberValue().intValue(); return Operand.Create(r * r * Math.PI); } } From cbd4bd26cfb9e8b67127cda249e9b601887bd5a1 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 08:35:05 +0800 Subject: [PATCH 20/98] fix --- .../toolgood/algorithm/AlgorithmEngine.java | 272 ++++ .../java/toolgood/algorithm/OperandImpl.java | 12 +- .../toolgood/algorithm/internals/MyDate.java | 12 +- .../internals/functions/FunctionBase.java | 15 +- .../internals/functions/FunctionUtil.java | 6 +- .../functions/compare/Function_EQ.java | 12 +- .../functions/compare/Function_GE.java | 12 +- .../functions/compare/Function_GT.java | 12 +- .../functions/compare/Function_LE.java | 12 +- .../functions/compare/Function_LT.java | 12 +- .../functions/compare/Function_NE.java | 12 +- .../functions/csharp/Function_INDEXOF.java | 6 +- .../csharp/Function_LASTINDEXOF.java | 6 +- .../csharp/Function_LOOKCEILING.java | 3 +- .../functions/csharp/Function_LOOKFLOOR.java | 3 +- .../functions/csharp/Function_SUBSTRING.java | 6 +- .../functions/datetimes/Function_ADDDAYS.java | 3 +- .../datetimes/Function_ADDHOURS.java | 3 +- .../datetimes/Function_ADDMINUTES.java | 3 +- .../datetimes/Function_ADDMONTHS.java | 3 +- .../datetimes/Function_ADDSECONDS.java | 3 +- .../datetimes/Function_ADDYEARS.java | 3 +- .../functions/datetimes/Function_DATE.java | 27 +- .../datetimes/Function_DATEVALUE.java | 15 +- .../functions/datetimes/Function_EDATE.java | 3 +- .../functions/datetimes/Function_EOMONTH.java | 3 +- .../functions/datetimes/Function_TIME.java | 9 +- .../datetimes/Function_TIMESTAMP.java | 3 +- .../functions/datetimes/Function_WEEKDAY.java | 3 +- .../functions/datetimes/Function_WEEKNUM.java | 3 +- .../functions/datetimes/Function_WORKDAY.java | 3 +- .../functions/mathbase/Function_ABS.java | 3 +- .../functions/mathbase/Function_CEILING.java | 6 +- .../functions/mathbase/Function_COMBIN.java | 6 +- .../functions/mathbase/Function_EVEN.java | 3 +- .../functions/mathbase/Function_EXP.java | 3 +- .../functions/mathbase/Function_FACT.java | 3 +- .../mathbase/Function_FACTDOUBLE.java | 3 +- .../functions/mathbase/Function_FIXED.java | 6 +- .../functions/mathbase/Function_FLOOR.java | 6 +- .../functions/mathbase/Function_LN.java | 3 +- .../functions/mathbase/Function_LOG.java | 6 +- .../functions/mathbase/Function_MROUND.java | 6 +- .../functions/mathbase/Function_ODD.java | 3 +- .../functions/mathbase/Function_PERMUT.java | 6 +- .../functions/mathbase/Function_POWER.java | 6 +- .../mathbase/Function_Percentage.java | 3 +- .../functions/mathbase/Function_QUOTIENT.java | 6 +- .../mathbase/Function_RANDBETWEEN.java | 6 +- .../functions/mathbase/Function_ROUND.java | 6 +- .../mathbase/Function_ROUNDDOWN.java | 6 +- .../functions/mathbase/Function_ROUNDUP.java | 6 +- .../functions/mathbase/Function_SIGN.java | 3 +- .../functions/mathbase/Function_SQRT.java | 3 +- .../functions/mathbase/Function_SQRTPI.java | 3 +- .../functions/mathbase/Function_TRUNC.java | 3 +- .../functions/mathsum/Function_BETADIST.java | 9 +- .../functions/mathsum/Function_BETAINV.java | 9 +- .../functions/mathsum/Function_BINOMDIST.java | 9 +- .../functions/mathsum/Function_EXPONDIST.java | 6 +- .../functions/mathsum/Function_FDIST.java | 9 +- .../functions/mathsum/Function_FINV.java | 9 +- .../functions/mathsum/Function_FISHER.java | 3 +- .../functions/mathsum/Function_FISHERINV.java | 3 +- .../functions/mathsum/Function_GAMMADIST.java | 9 +- .../functions/mathsum/Function_GAMMAINV.java | 9 +- .../functions/mathsum/Function_GAMMALN.java | 3 +- .../mathsum/Function_HYPGEOMDIST.java | 12 +- .../functions/mathsum/Function_LARGE.java | 3 +- .../functions/mathsum/Function_LOGINV.java | 9 +- .../mathsum/Function_LOGNORMDIST.java | 9 +- .../mathsum/Function_NEGBINOMDIST.java | 9 +- .../functions/mathsum/Function_NORMDIST.java | 9 +- .../functions/mathsum/Function_NORMINV.java | 9 +- .../functions/mathsum/Function_NORMSDIST.java | 3 +- .../functions/mathsum/Function_NORMSINV.java | 3 +- .../mathsum/Function_PERCENTILE.java | 3 +- .../mathsum/Function_PERCENTRANK.java | 6 +- .../functions/mathsum/Function_POISSON.java | 6 +- .../functions/mathsum/Function_QUARTILE.java | 3 +- .../functions/mathsum/Function_SMALL.java | 3 +- .../functions/mathsum/Function_TDIST.java | 9 +- .../functions/mathsum/Function_TINV.java | 6 +- .../functions/mathsum/Function_WEIBULL.java | 9 +- .../mathtransformation/Function_BIN2HEX.java | 3 +- .../mathtransformation/Function_BIN2OCT.java | 3 +- .../mathtransformation/Function_DEC2BIN.java | 6 +- .../mathtransformation/Function_DEC2HEX.java | 6 +- .../mathtransformation/Function_DEC2OCT.java | 6 +- .../mathtransformation/Function_HEX2BIN.java | 3 +- .../mathtransformation/Function_HEX2OCT.java | 3 +- .../mathtransformation/Function_OCT2BIN.java | 3 +- .../mathtransformation/Function_OCT2HEX.java | 3 +- .../mathtrigonometric/Function_ACOS.java | 3 +- .../mathtrigonometric/Function_ACOSH.java | 3 +- .../mathtrigonometric/Function_ASIN.java | 3 +- .../mathtrigonometric/Function_ASINH.java | 3 +- .../mathtrigonometric/Function_ATAN.java | 3 +- .../mathtrigonometric/Function_ATAN2.java | 6 +- .../mathtrigonometric/Function_ATANH.java | 3 +- .../mathtrigonometric/Function_COS.java | 3 +- .../mathtrigonometric/Function_COSH.java | 3 +- .../mathtrigonometric/Function_COT.java | 3 +- .../mathtrigonometric/Function_CSC.java | 3 +- .../mathtrigonometric/Function_DEGREES.java | 3 +- .../mathtrigonometric/Function_RADIANS.java | 3 +- .../mathtrigonometric/Function_SEC.java | 3 +- .../mathtrigonometric/Function_SIN.java | 3 +- .../mathtrigonometric/Function_SINH.java | 3 +- .../mathtrigonometric/Function_TAN.java | 3 +- .../mathtrigonometric/Function_TANH.java | 3 +- .../functions/operator/Function_Add.java | 12 +- .../functions/operator/Function_Div.java | 6 +- .../functions/operator/Function_Mod.java | 6 +- .../functions/operator/Function_Mul.java | 12 +- .../functions/operator/Function_Sub.java | 12 +- .../functions/string/Function_CHAR.java | 3 +- .../functions/string/Function_FIND.java | 3 +- .../functions/string/Function_LEFT.java | 3 +- .../functions/string/Function_MID.java | 6 +- .../functions/string/Function_REPLACE.java | 6 +- .../functions/string/Function_REPT.java | 3 +- .../functions/string/Function_RIGHT.java | 3 +- .../functions/string/Function_RMB.java | 3 +- .../functions/string/Function_SEARCH.java | 3 +- .../functions/string/Function_SUBSTITUTE.java | 3 +- .../value/Function_GetJsonValue.java | 6 +- .../visitors/AntlrErrorTextWriter.java | 30 + .../internals/visitors/DiyNameVisitor.java | 30 +- .../internals/visitors/MathSplitVisitor2.java | 1238 +++++++++++++++++ .../toolgood/algorithm/Tests/Cylinder.java | 3 +- 131 files changed, 1789 insertions(+), 498 deletions(-) create mode 100644 java/src/main/java/toolgood/algorithm/AlgorithmEngine.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorTextWriter.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java new file mode 100644 index 000000000..28476a082 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java @@ -0,0 +1,272 @@ +package toolgood.algorithm; + +import java.util.List; + +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; + +import toolgood.algorithm.enums.AreaUnitType; +import toolgood.algorithm.enums.DistanceUnitType; +import toolgood.algorithm.enums.MassUnitType; +import toolgood.algorithm.enums.VolumeUnitType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.visitors.AntlrErrorTextWriter; +import toolgood.algorithm.math.mathLexer; +import toolgood.algorithm.math.mathParser; +import toolgood.algorithm.internals.visitors.MathFunctionVisitor; + +public class AlgorithmEngine { + private int ExcelIndex = 1; + + /** + * 使用 本地时间, 影响 时间截转化 + */ + public boolean UseLocalTime = true; + + /** + * 长度单位 + */ + public DistanceUnitType DistanceUnit = DistanceUnitType.M; + + /** + * 面积单位 + */ + public AreaUnitType AreaUnit = AreaUnitType.M2; + + /** + * 体积单位 + */ + public VolumeUnitType VolumeUnit = VolumeUnitType.M3; + + /** + * 重量单位 + */ + public MassUnitType MassUnit = MassUnitType.KG; + + /** + * 最后一个错误 + */ + public String LastError; + + /** + * 使用EXCEL索引 + */ + public void setUseExcelIndex(boolean value) { + ExcelIndex = value ? 1 : 0; + } + + /** + * 自定义参数 请重写此方法 + */ + public Operand getParameter(String parameter) { + return Operand.Error("Parameter [" + parameter + "] is missing."); + } + + /** + * 自定义函数 请重写此方法 + */ + public Operand executeDiyFunction(String parameter, List args) { + return Operand.Error("DiyFunction [" + parameter + "] is missing."); + } + + /** + * 编译公式,默认 + */ + public FunctionBase Parse(String exp) throws Exception { + LastError = null; + if (exp == null || exp.trim().isEmpty()) { + LastError = "Parameter exp invalid !"; + throw new Exception(LastError); + } + AntlrErrorTextWriter antlrErrorTextWriter = new AntlrErrorTextWriter(); + var stream = CharStreams.fromString(exp); + var lexer = new mathLexer(stream); + var tokens = new CommonTokenStream(lexer); + var parser = new mathParser(tokens); + + var context = parser.prog(); + if (antlrErrorTextWriter.IsError()) { + LastError = antlrErrorTextWriter.getErrorMsg(); + throw new Exception(LastError); + } + var visitor = new MathFunctionVisitor(); + return visitor.visit(context); + } + + /** + * 执行函数 + */ + public Operand Evaluate(FunctionBase function) { + return function.Evaluate(this); + } + + /** + * 执行函数,如果异常,返回默认值 + */ + public short TryEvaluate(String exp, short def) { + try { + var function = Parse(exp); + var obj = function.Evaluate(this); + if (obj.IsNotNumber()) { + obj = obj.ToNumber("It can't be converted to number!"); + if (obj.IsError()) { + LastError = obj.ErrorMsg; + return def; + } + } + return (short) obj.IntValue; + } catch (Exception ex) { + LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + */ + public int TryEvaluate(String exp, int def) { + try { + var function = Parse(exp); + var obj = function.Evaluate(this); + if (obj.IsNotNumber()) { + obj = obj.ToNumber("It can't be converted to number!"); + if (obj.IsError()) { + LastError = obj.ErrorMsg; + return def; + } + } + return obj.IntValue; + } catch (Exception ex) { + LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + */ + public long TryEvaluate(String exp, long def) { + try { + var function = Parse(exp); + var obj = function.Evaluate(this); + if (obj.IsNotNumber()) { + obj = obj.ToNumber("It can't be converted to number!"); + if (obj.IsError()) { + LastError = obj.ErrorMsg; + return def; + } + } + return obj.LongValue; + } catch (Exception ex) { + LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + */ + public float TryEvaluate(String exp, float def) { + try { + var function = Parse(exp); + var obj = function.Evaluate(this); + if (obj.IsNotNumber()) { + obj = obj.ToNumber("It can't be converted to number!"); + if (obj.IsError()) { + LastError = obj.ErrorMsg; + return def; + } + } + return (float) obj.DoubleValue; + } catch (Exception ex) { + LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + */ + public double TryEvaluate(String exp, double def) { + try { + var function = Parse(exp); + var obj = function.Evaluate(this); + if (obj.IsNotNumber()) { + obj = obj.ToNumber("It can't be converted to number!"); + if (obj.IsError()) { + LastError = obj.ErrorMsg; + return def; + } + } + return obj.DoubleValue; + } catch (Exception ex) { + LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + */ + public String TryEvaluate(String exp, String def) { + try { + var function = Parse(exp); + var obj = function.Evaluate(this); + if (obj.IsNotText()) { + obj = obj.ToText("It can't be converted to string!"); + if (obj.IsError()) { + LastError = obj.ErrorMsg; + return def; + } + } + return obj.TextValue; + } catch (Exception ex) { + LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + */ + public boolean TryEvaluate(String exp, boolean def) { + try { + var function = Parse(exp); + var obj = function.Evaluate(this); + if (obj.IsNotBoolean()) { + obj = obj.ToBoolean("It can't be converted to bool!"); + if (obj.IsError()) { + LastError = obj.ErrorMsg; + return def; + } + } + return obj.BooleanValue; + } catch (Exception ex) { + LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + } + return def; + } + + /** + * 执行函数,如果异常,返回默认值 + */ + public MyDate TryEvaluate_MyDate(String exp, MyDate def) { + try { + var function = Parse(exp); + var obj = function.Evaluate(this); + if (obj.IsNotDate()) { + obj = obj.ToMyDate("It can't be converted to DateTime!"); + if (obj.IsError()) { + LastError = obj.ErrorMsg; + return def; + } + } + return obj.DateValue; + } catch (Exception ex) { + LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + } + return def; + } +} diff --git a/java/src/main/java/toolgood/algorithm/OperandImpl.java b/java/src/main/java/toolgood/algorithm/OperandImpl.java index 657ed55d2..0ebf48666 100644 --- a/java/src/main/java/toolgood/algorithm/OperandImpl.java +++ b/java/src/main/java/toolgood/algorithm/OperandImpl.java @@ -362,20 +362,16 @@ public OperandMyDate(MyDate obj) { public MyDate DateValue() { return value; } @Override - public Operand ToNumber(String errorMessage) { return Create(value.ToNumber -()); } + public Operand ToNumber(String errorMessage) { return Create(value.ToNumber()); } @Override - public Operand ToNumber(String errorMessage, Object... args) { return Create(value.ToNumber -()); } + public Operand ToNumber(String errorMessage, Object... args) { return Create(value.ToNumber()); } @Override - public Operand ToBoolean(String errorMessage) { return value.ToNumber -() != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage) { return value.ToNumber() != 0 ? TRUE : FALSE; } @Override - public Operand ToBoolean(String errorMessage, Object... args) { return value.ToNumber -() != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage, Object... args) { return value.ToNumber() != 0 ? TRUE : FALSE; } @Override public Operand ToText(String errorMessage) { return Create(value.toString()); } diff --git a/java/src/main/java/toolgood/algorithm/internals/MyDate.java b/java/src/main/java/toolgood/algorithm/internals/MyDate.java index a9ea59141..77a82c76d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/MyDate.java +++ b/java/src/main/java/toolgood/algorithm/internals/MyDate.java @@ -368,23 +368,19 @@ public MyDate SUB(MyDate num) { } public MyDate ADD(BigDecimal num) { - return new MyDate(this.ToNumber -().add(num)); + return new MyDate(this.ToNumber().add(num)); } public MyDate SUB(BigDecimal num) { - return new MyDate(this.ToNumber -().subtract(num)); + return new MyDate(this.ToNumber().subtract(num)); } public MyDate MUL(BigDecimal num) { - return new MyDate(this.ToNumber -().multiply(num)); + return new MyDate(this.ToNumber().multiply(num)); } public MyDate DIV(BigDecimal num) { - return new MyDate(this.ToNumber -().divide(num, MathContext.DECIMAL32)); + return new MyDate(this.ToNumber().divide(num, MathContext.DECIMAL32)); } } \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index 70a49db8a..9e57c7bce 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -37,8 +37,7 @@ public short TryEvaluate(AlgorithmEngine work, short def, Function args, List list) { return false; } } else { - Operand o = item.ToNumber -(null); + Operand o = item.ToNumber(null); if (o.IsError()) { return false; } @@ -65,8 +64,7 @@ public static boolean F_base_GetList(Operand args, List list) { return false; } } else { - Operand o = args.ToNumber -(null); + Operand o = args.ToNumber(null); if (o.IsError()) { return false; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java index 15bcbd1ec..8a00bd3d3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java @@ -23,10 +23,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function= 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isDate() || args1.isBoolean()) { - args1 = args1.ToNumber -(null); - args2 = args2.ToNumber -(null); + args1 = args1.ToNumber(null); + args2 = args2.ToNumber(null); return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); } else if(args1.isJson()) { args1 = args1.toText(null); @@ -58,10 +56,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function="); } - if(args1.isNotNumber()) { args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", ">=", 1); if(args1.IsError()) { return args1; } } - if(args2.isNotNumber()) { args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", ">=", 2); if(args2.IsError()) { return args2; } } + if(args1.isNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", ">=", 1); if(args1.IsError()) { return args1; } } + if(args2.isNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", ">=", 2); if(args2.IsError()) { return args2; } } return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java index 3ea732dee..4fb91b89c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java @@ -22,10 +22,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isDate() || args1.isBoolean()) { - args1 = args1.ToNumber -(null); - args2 = args2.ToNumber -(null); + args1 = args1.ToNumber(null); + args2 = args2.ToNumber(null); return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); } else if(args1.isJson()) { args1 = args1.toText(null); @@ -58,10 +56,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function"); } - if(args1.isNotNumber()) { args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", ">", 1); if(args1.IsError()) { return args1; } } - if(args2.isNotNumber()) { args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", ">", 2); if(args2.IsError()) { return args2; } } + if(args1.isNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", ">", 1); if(args1.IsError()) { return args1; } } + if(args2.isNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", ">", 2); if(args2.IsError()) { return args2; } } return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java index 8d6830866..fd9b36e76 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java @@ -22,10 +22,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempPara } Operand args4 = func4.Evaluate(work, tempParameter); if (args4.IsNotNumber()) { - args4 = args4.ToNumber -("Function '{0}' parameter {1} is error!", "IndexOf", 4); + args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "IndexOf", 4); if (args4.IsError()) { return args4; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java index 41a2725bc..c22500020 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java @@ -34,8 +34,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "LastIndexOf", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LastIndexOf", 3); if (args3.IsError()) { return args3; } @@ -50,8 +49,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args4 = func4.Evaluate(work, tempParameter); if (args4.IsNotNumber()) { - args4 = args4.ToNumber -("Function '{0}' parameter {1} is error!", "LastIndexOf", 4); + args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "LastIndexOf", 4); if (args4.IsError()) { return args4; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java index fbbae2c6e..3c44f7823 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java @@ -21,8 +21,7 @@ public Function_LOOKCEILING(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "LookCeiling", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LookCeiling", 1); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java index 5be52ab5c..503a6a849 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java @@ -20,8 +20,7 @@ public Function_LOOKFLOOR(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "LookFloor", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LookFloor", 1); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java index 09784acf1..15d878d36 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java @@ -23,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "Substring", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Substring", 2); if (args2.IsError()) { return args2; } @@ -43,8 +42,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "Substring", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Substring", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java index b2ae00b10..30d7bcef2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java @@ -23,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "AddDays", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "AddDays", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java index 3faf3d2d2..01053e250 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java @@ -23,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "AddHours", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "AddHours", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java index 623e62661..afb237d2d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java @@ -23,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "AddMinutes", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "AddMinutes", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java index 8c11e6962..db2f642d9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java @@ -23,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "AddMonths", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "AddMonths", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java index 129ab522c..7dcb3505c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java @@ -23,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "AddSeconds", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "AddSeconds", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java index de83b42c4..0a1772102 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java @@ -23,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "AddYears", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "AddYears", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java index 572f1eb17..d87581bbb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java @@ -16,24 +16,21 @@ public Function_DATE(FunctionBase[] funcs) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = funcs[0].Evaluate(work, tempParameter); if (args1.isNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "Date", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Date", 1); if (args1.IsError()) { return args1; } } Operand args2 = funcs[1].Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "Date", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Date", 2); if (args2.IsError()) { return args2; } } Operand args3 = funcs[2].Evaluate(work, tempParameter); if (args3.isNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "Date", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Date", 3); if (args3.IsError()) { return args3; } @@ -45,8 +42,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } else if (funcs.length == 4) { Operand args4 = funcs[3].Evaluate(work, tempParameter); if (args4.isNotNumber()) { - args4 = args4.ToNumber -("Function '{0}' parameter {1} is error!", "Date", 4); + args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "Date", 4); if (args4.IsError()) { return args4; } @@ -55,16 +51,14 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } else if (funcs.length == 5) { Operand args4 = funcs[3].Evaluate(work, tempParameter); if (args4.isNotNumber()) { - args4 = args4.ToNumber -("Function '{0}' parameter {1} is error!", "Date", 4); + args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "Date", 4); if (args4.IsError()) { return args4; } } Operand args5 = funcs[4].Evaluate(work, tempParameter); if (args5.isNotNumber()) { - args5 = args5.ToNumber -("Function '{0}' parameter {1} is error!", "Date", 5); + args5 = args5.ToNumber("Function '{0}' parameter {1} is error!", "Date", 5); if (args5.IsError()) { return args5; } @@ -73,24 +67,21 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } else { Operand args4 = funcs[3].Evaluate(work, tempParameter); if (args4.isNotNumber()) { - args4 = args4.ToNumber -("Function '{0}' parameter {1} is error!", "Date", 4); + args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "Date", 4); if (args4.IsError()) { return args4; } } Operand args5 = funcs[4].Evaluate(work, tempParameter); if (args5.isNotNumber()) { - args5 = args5.ToNumber -("Function '{0}' parameter {1} is error!", "Date", 5); + args5 = args5.ToNumber("Function '{0}' parameter {1} is error!", "Date", 5); if (args5.IsError()) { return args5; } } Operand args6 = funcs[5].Evaluate(work, tempParameter); if (args6.isNotNumber()) { - args6 = args6.ToNumber -("Function '{0}' parameter {1} is error!", "Date", 6); + args6 = args6.ToNumber("Function '{0}' parameter {1} is error!", "Date", 6); if (args6.IsError()) { return args6; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java index 0a12ad9d3..d7c63d060 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java @@ -29,8 +29,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } int type = 0; if (args.size() == 2) { - Operand args2 = args.get(1).ToNumber -("Function '{0}' parameter {1} is error!", "DateValue", 2); + Operand args2 = args.get(1).ToNumber("Function '{0}' parameter {1} is error!", "DateValue", 2); if (args2.IsError()) { return args2; } @@ -43,8 +42,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return Operand.Create(date); } } - Operand args1 = args.get(0).ToNumber -("Function '{0}' parameter {1} is error!", "DateValue", 1); + Operand args1 = args.get(0).ToNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); if (args1.getLongValue() <= 2958465L) { // 9999-12-31 日时间在excel的数字为 2958465 return args1.toMyDate(); } @@ -66,16 +64,13 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return Operand.Create(date); } } else if (type == 2) { - return args.get(0).ToNumber -("Function '{0}' parameter is error!", "DateValue").toMyDate(); + return args.get(0).ToNumber("Function '{0}' parameter is error!", "DateValue").toMyDate(); } else if (type == 3) { - Operand args1 = args.get(0).ToNumber -("Function '{0}' parameter {1} is error!", "DateValue", 1); + Operand args1 = args.get(0).ToNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); // 这里需要实现类似 FunctionUtil.StartDateUtc.AddMilliseconds 的功能 return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / (86400.0 * 1000.0))); } else if (type == 4) { - Operand args1 = args.get(0).ToNumber -("Function '{0}' parameter {1} is error!", "DateValue", 1); + Operand args1 = args.get(0).ToNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); // 这里需要实现类似 FunctionUtil.StartDateUtc.AddSeconds 的功能 return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / 86400.0)); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java index a49fc51eb..2f9007508 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java @@ -23,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "EDate", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "EDate", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java index 142de2633..e35b676c8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java @@ -23,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "EoMonth", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "EoMonth", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java index 774973f17..a30038dae 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java @@ -16,16 +16,14 @@ public Function_TIME(FunctionBase func1, FunctionBase func2, FunctionBase func3) public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "Time", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Time", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "Time", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Time", 2); if (args2.IsError()) { return args2; } @@ -35,8 +33,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (func3 != null) { Operand args3 = func3.Evaluate(work, tempParameter); if (args3.isNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "Time", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Time", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java index 8c2566337..cc187785e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java @@ -23,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (func2 != null) { Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "TimeStamp", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "TimeStamp", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index 6b11487ef..24b36184a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -26,8 +26,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (func2 != null) { Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "WeekDay", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "WeekDay", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index 8eab7734e..8fd7d8391 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -33,8 +33,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (func2 != null) { Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "WeekNum", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "WeekNum", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index 0b907b4c7..28fab91c3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -24,8 +24,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } Operand args2 = funcs[1].Evaluate(work, tempParameter); if (args2.isNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "Workday", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Workday", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java index d5824106a..966b129fd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java @@ -13,8 +13,7 @@ public Function_ABS(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Abs"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Abs"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java index b75e6abbf..f162b2587 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java @@ -13,8 +13,7 @@ public Function_CEILING(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "Ceiling", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Ceiling", 1); if (args1.IsError()) { return args1; } @@ -26,8 +25,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "Combin", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Combin", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "Combin", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Combin", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java index 3aa360c57..3f8310998 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java @@ -13,8 +13,7 @@ public Function_EVEN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Even"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Even"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java index 259514955..e7ae527c0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java @@ -13,8 +13,7 @@ public Function_EXP(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Exp"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Exp"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java index ce7f46236..5d745780e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java @@ -13,8 +13,7 @@ public Function_FACT(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Fact"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Fact"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java index 21a3819f0..98967503e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java @@ -13,8 +13,7 @@ public Function_FACTDOUBLE(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "FactDouble"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "FactDouble"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java index 695d35f5a..4db63b072 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java @@ -16,8 +16,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "Floor", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Floor", 1); if (args1.IsError()) { return args1; } @@ -25,8 +24,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Ln"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Ln"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java index adcebc6e3..4fa7e703d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java @@ -13,8 +13,7 @@ public Function_LOG(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "Log", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Log", 1); if (args1.IsError()) { return args1; } @@ -22,8 +21,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "MRound", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "MRound", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "MRound", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "MRound", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java index e0eef4c56..93ace8271 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java @@ -13,8 +13,7 @@ public Function_ODD(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Odd"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Odd"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java index 5b8105511..5956f7452 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java @@ -13,16 +13,14 @@ public Function_PERMUT(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "Permut", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Permut", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "Permut", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Permut", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java index a7bdd32b0..df8580aa3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java @@ -13,16 +13,14 @@ public Function_POWER(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "Power", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Power", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "Power", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Power", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java index f8591439b..e88c50011 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java @@ -13,8 +13,7 @@ public Function_Percentage(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Percentage"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Percentage"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java index acedb103d..8b8a0b1c6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java @@ -13,16 +13,14 @@ public Function_QUOTIENT(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "Quotient", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Quotient", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "Quotient", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Quotient", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java index e52066037..488e82b2b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java @@ -14,16 +14,14 @@ public Function_RANDBETWEEN(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "RandBetween", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RandBetween", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "RandBetween", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "RandBetween", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java index 50953833e..9843f02bc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java @@ -13,8 +13,7 @@ public Function_ROUND(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "Round", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Round", 1); if (args1.IsError()) { return args1; } @@ -25,8 +24,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "RoundDown", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RoundDown", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "RoundDown", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "RoundDown", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java index 8a764080d..a73e7dd0d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java @@ -13,16 +13,14 @@ public Function_ROUNDUP(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "RoundUp", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RoundUp", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "RoundUp", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "RoundUp", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java index 406d97cba..4a625fc6b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java @@ -13,8 +13,7 @@ public Function_SIGN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Sign"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sign"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java index f932345e5..ff10e3b5e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java @@ -13,8 +13,7 @@ public Function_SQRT(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Sqrt"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sqrt"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java index 471ec4dfa..fa66546c8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java @@ -13,8 +13,7 @@ public Function_SQRTPI(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "SqrtPI"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "SqrtPI"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java index 181394762..07c55f32c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java @@ -13,8 +13,7 @@ public Function_TRUNC(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Trunc"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Trunc"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java index 8015618d2..6d5b0eece 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java @@ -16,24 +16,21 @@ public Function_BETADIST(FunctionBase func1, FunctionBase func2, FunctionBase fu public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "BetaDist", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "BetaDist", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "BetaDist", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java index e81b2bdaa..9e03e4877 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java @@ -16,24 +16,21 @@ public Function_BETAINV(FunctionBase func1, FunctionBase func2, FunctionBase fun public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "BetaInv", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "BetaInv", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "BetaInv", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java index 87afc0657..7e58d7462 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java @@ -16,24 +16,21 @@ public Function_BINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase f public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "BinomDist", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "BinomDist", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "BinomDist", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java index 93428a990..db3b4d3f1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java @@ -16,16 +16,14 @@ public Function_EXPONDIST(FunctionBase func1, FunctionBase func2, FunctionBase f public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "ExponDist", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "ExponDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "ExponDist", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "ExponDist", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java index 8fefd4f3a..74dadc8b9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java @@ -16,24 +16,21 @@ public Function_FDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3 public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "FDist", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "FDist", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "FDist", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java index 74581417f..4c4670503 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java @@ -16,24 +16,21 @@ public Function_FINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "FInv", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "FInv", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "FInv", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java index 5260b16df..064714277 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java @@ -14,8 +14,7 @@ public Function_FISHER(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Fisher"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Fisher"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java index b4cda0819..e1999c0d7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java @@ -14,8 +14,7 @@ public Function_FISHERINV(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "FisherInv"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "FisherInv"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java index 9ff5da354..1bd321156 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java @@ -16,24 +16,21 @@ public Function_GAMMADIST(FunctionBase func1, FunctionBase func2, FunctionBase f public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "GammaDist", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "GammaDist", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "GammaDist", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java index 26f4f141e..bcdb99a02 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java @@ -16,24 +16,21 @@ public Function_GAMMAINV(FunctionBase func1, FunctionBase func2, FunctionBase fu public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "GammaInv", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "GammaInv", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "GammaInv", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java index 12fdf1158..927cbe18a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java @@ -16,8 +16,7 @@ public Function_GAMMALN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "GammaLn"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "GammaLn"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java index aeed00755..c198298c9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java @@ -16,32 +16,28 @@ public Function_HYPGEOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "HypgeomDist", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "HypgeomDist", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "HypgeomDist", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 3); if (args3.IsError()) { return args3; } } Operand args4 = func4.Evaluate(work, tempParameter); if (args4.IsNotNumber()) { - args4 = args4.ToNumber -("Function '{0}' parameter {1} is error!", "HypgeomDist", 4); + args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 4); if (args4.IsError()) { return args4; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java index 2975da87c..4b63b3db8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java @@ -26,8 +26,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "LogInv", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "LogInv", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "LogInv", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java index 43574c32c..fdafa0c1e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java @@ -16,24 +16,21 @@ public Function_LOGNORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "LognormDist", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "LognormDist", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "LognormDist", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java index 938c35e52..7787910b0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java @@ -16,24 +16,21 @@ public Function_NEGBINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBas public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "NegbinomDist", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "NegbinomDist", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "NegbinomDist", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java index cfde09694..afadba345 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java @@ -16,24 +16,21 @@ public Function_NORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase fu public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "NormDist", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "NormDist", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "NormDist", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java index e93f8307e..7b99dd6bb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java @@ -16,24 +16,21 @@ public Function_NORMINV(FunctionBase func1, FunctionBase func2, FunctionBase fun public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "NormInv", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.IsNotNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "NormInv", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.IsNotNumber()) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "NormInv", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java index 73bde599a..1860eb290 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java @@ -16,8 +16,7 @@ public Function_NORMSDIST(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "NormSDist"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "NormSDist"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java index 5b80118d4..7dbd235f1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java @@ -16,8 +16,7 @@ public Function_NORMSINV(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "NormSInv"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "NormSInv"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java index 77acdf64e..d083b6721 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java @@ -26,8 +26,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParam } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "PercentRank", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "PercentRank", 2); if (args2.IsError()) { return args2; } @@ -48,8 +47,7 @@ public Operand Evaluate(Object work, Function tempParam if (func3 != null) { Operand args3 = func3.Evaluate(work, tempParameter); if (args3.getOperandType() != OperandType.Number) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "PercentRank", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "PercentRank", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java index 57707884f..7ce674d5a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java @@ -18,16 +18,14 @@ public Function_POISSON(FunctionBase func1, FunctionBase func2, FunctionBase fun public Operand Evaluate(Object work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Number) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "Poisson", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Poisson", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "Poisson", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Poisson", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java index a752a2774..1c06022be 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java @@ -27,8 +27,7 @@ public Operand Evaluate(Object work, Function tempParam } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "Quartile", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Quartile", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java index 0d3988b55..9d4b66ab0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -26,8 +26,7 @@ public Operand Evaluate(Object work, Function tempParam } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "Small", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Small", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java index c1a658390..a5910e53f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java @@ -18,24 +18,21 @@ public Function_TDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3 public Operand Evaluate(Object work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Number) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "TDist", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "TDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "TDist", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "TDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.getOperandType() != OperandType.Number) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "TDist", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "TDist", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java index 6f28d65ce..daa8e777d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java @@ -18,16 +18,14 @@ public Function_TINV(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(Object work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.Type() != OperandType.Number) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "TInv", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "TInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.Type() != OperandType.Number) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "TInv", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "TInv", 2); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java index 01587aea0..244065872 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java @@ -18,24 +18,21 @@ public Function_WEIBULL(FunctionBase func1, FunctionBase func2, FunctionBase fun public Operand Evaluate(Object work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Number) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "Weibull", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Weibull", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.getOperandType() != OperandType.Number) { - args2 = args2.ToNumber -("Function '{0}' parameter {1} is error!", "Weibull", 2); + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Weibull", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.getOperandType() != OperandType.Number) { - args3 = args3.ToNumber -("Function '{0}' parameter {1} is error!", "Weibull", 3); + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Weibull", 3); if (args3.IsError()) { return args3; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java index d771196a8..815aeab27 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java @@ -28,8 +28,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "DEC2BIN", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2BIN", 1); if (args1.IsError()) { return args1; } @@ -24,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "DEC2HEX", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2HEX", 1); if (args1.IsError()) { return args1; } @@ -24,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter {1} is error!", "DEC2OCT", 1); + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2OCT", 1); if (args1.IsError()) { return args1; } @@ -24,8 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Acos"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Acos"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java index 315066c83..de18afbca 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java @@ -16,8 +16,7 @@ public Function_ACOSH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Acosh"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Acosh"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java index 505f78191..1edc5291f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java @@ -16,8 +16,7 @@ public Function_ASIN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Asin"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Asin"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java index d8df2bfc2..622df0f06 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java @@ -16,8 +16,7 @@ public Function_ASINH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Asinh"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Asinh"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java index e6ad706b8..6a569bb15 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java @@ -16,8 +16,7 @@ public Function_ATAN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Atan"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Atan"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java index 14135fba8..ee3d62667 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java @@ -16,16 +16,14 @@ public Function_ATAN2(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Atan2"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Atan2"); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (!args2.IsNumber()) { - args2 = args2.ToNumber -("Function '{0}' parameter is error!", "Atan2"); + args2 = args2.ToNumber("Function '{0}' parameter is error!", "Atan2"); if (args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java index d8c647a29..70935c438 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java @@ -16,8 +16,7 @@ public Function_ATANH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Atanh"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Atanh"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java index 1ea2a31bd..83e186927 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java @@ -16,8 +16,7 @@ public Function_COS(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Cos"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Cos"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java index 75ecc0706..8fab2c0c6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java @@ -16,8 +16,7 @@ public Function_COSH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Cosh"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Cosh"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java index ecbc80d6f..c2174435a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java @@ -16,8 +16,7 @@ public Function_COT(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Cot"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Cot"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java index 0cb1c129d..6fe1c5dc6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java @@ -16,8 +16,7 @@ public Function_CSC(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Csc"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Csc"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java index aae166696..3f430093c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java @@ -16,8 +16,7 @@ public Function_DEGREES(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Degrees"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Degrees"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java index 6b526dfb9..be51b63a2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java @@ -16,8 +16,7 @@ public Function_RADIANS(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Radians"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Radians"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java index a4bc2904c..03829a2e6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java @@ -16,8 +16,7 @@ public Function_SEC(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Sec"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sec"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java index 631778952..c487660cd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java @@ -16,8 +16,7 @@ public Function_SIN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Sin"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sin"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java index 4f1393a65..076f89f25 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java @@ -16,8 +16,7 @@ public Function_SINH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Sinh"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sinh"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java index 120289d7d..fe6f739fa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java @@ -16,8 +16,7 @@ public Function_TAN(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Tan"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Tan"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java index 4928457c6..20035db79 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java @@ -16,8 +16,7 @@ public Function_TANH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Tanh"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Tanh"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java index 26beea8b3..b40098145 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java @@ -85,8 +85,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "Char"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Char"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java index b76a8c007..1c9dacfcf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java @@ -32,8 +32,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber -("Function '{0}' parameter is error!", "RMB"); + args1 = args1.ToNumber("Function '{0}' parameter is error!", "RMB"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java index 1f1614e8f..15f9ae1f3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java @@ -33,8 +33,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction implements mathVisitor { @@ -264,12 +264,6 @@ public Object visitJIS_fun(JIS_funContext context) { return visitChildren(context); } - @Override - public Object visitCRC32_fun(CRC32_funContext context) { - - return visitChildren(context); - } - @Override public Object visitLCM_fun(LCM_funContext context) { @@ -1387,18 +1381,6 @@ public Object visitArrayJson(ArrayJsonContext ctx) { return visitChildren(ctx); } - @Override - public Object visitVLOOKUP_fun(VLOOKUP_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLOOKUP_fun(LOOKUP_funContext context) { - - return visitChildren(context); - } - @Override public Object visitNULL_fun(NULL_funContext context) { @@ -1434,5 +1416,13 @@ public Object visitCOVAR_fun(COVAR_funContext context) { public Object visitVersion_fun(Version_funContext context) { return visitChildren(context); } + @Override + public Object visitLOOKFLOOR_fun(LOOKFLOOR_funContext context) { + return visitChildren(context); + } + @Override + public Object visitLOOKCEILING_fun(LOOKCEILING_funContext context) { + return visitChildren(context); + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java new file mode 100644 index 000000000..622dcbf4f --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java @@ -0,0 +1,1238 @@ +package toolgood.algorithm.internals.visitors; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; +import toolgood.algorithm.enums.CalculateTreeType; +import toolgood.algorithm.math.mathParser; +import toolgood.algorithm.math.mathVisitor; +import toolgood.algorithm.internals.CalculateTree; + +import java.util.ArrayList; +import java.util.List; + +public class MathSplitVisitor2 extends AbstractParseTreeVisitor implements mathVisitor { + @Override + public CalculateTree visitProg(mathParser.ProgContext context) { + return visit(context.expr()); + } + + @Override + public CalculateTree visitBracket_fun(mathParser.Bracket_funContext context) { + return visit(context.expr()); + } + + @Override + public CalculateTree visitMulDiv_fun(mathParser.MulDiv_funContext context) { + CalculateTree tree = new CalculateTree(); + tree.Nodes = new ArrayList<>(); + List exprs = context.expr(); + String t = context.op.getText(); + if (CharUtil.Equals(t, "*")) { + tree.Type = CalculateTreeType.Mul; + } else if (CharUtil.Equals(t, "/")) { + tree.Type = CalculateTreeType.Div; + } else { + tree.Type = CalculateTreeType.Mod; + } + tree.Nodes.add(this.visit(exprs.get(0))); + tree.Nodes.add(this.visit(exprs.get(1))); + tree.Start = context.start.getStartIndex(); + tree.End = context.stop.getStopIndex(); + tree.ConditionString = context.getText(); + return tree; + } + + @Override + public CalculateTree visitAddSub_fun(mathParser.AddSub_funContext context) { + CalculateTree tree = new CalculateTree(); + tree.Nodes = new ArrayList<>(); + List exprs = context.expr(); + String t = context.op.getText(); + if (CharUtil.Equals(t, "+")) { + tree.Type = CalculateTreeType.Add; + } else if (CharUtil.Equals(t, "-")) { + tree.Type = CalculateTreeType.Sub; + } else { + tree.Type = CalculateTreeType.Connect; + } + tree.Nodes.add(this.visit(exprs.get(0))); + tree.Nodes.add(this.visit(exprs.get(1))); + tree.Start = context.start.getStartIndex(); + tree.End = context.stop.getStopIndex(); + tree.ConditionString = context.getText(); + return tree; + } + + public CalculateTree visit_fun(ParserRuleContext context) { + CalculateTree tree = new CalculateTree(); + tree.Start = context.start.getStartIndex(); + tree.End = context.stop.getStopIndex(); + tree.ConditionString = context.getText(); + return tree; + } + + @Override + public CalculateTree visitABS_fun(mathParser.ABS_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitACOSH_fun(mathParser.ACOSH_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitACOS_fun(mathParser.ACOS_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitADDDAYS_fun(mathParser.ADDDAYS_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitADDHOURS_fun(mathParser.ADDHOURS_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitADDMINUTES_fun(mathParser.ADDMINUTES_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitADDMONTHS_fun(mathParser.ADDMONTHS_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitADDSECONDS_fun(mathParser.ADDSECONDS_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitADDYEARS_fun(mathParser.ADDYEARS_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitAndOr_fun(mathParser.AndOr_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitAND_fun(mathParser.AND_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitArrayJson(mathParser.ArrayJsonContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitArrayJson_fun(mathParser.ArrayJson_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitArray_fun(mathParser.Array_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitASC_fun(mathParser.ASC_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitASINH_fun(mathParser.ASINH_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitASIN_fun(mathParser.ASIN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitATAN2_fun(mathParser.ATAN2_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitATANH_fun(mathParser.ATANH_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitATAN_fun(mathParser.ATAN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitAVEDEV_fun(mathParser.AVEDEV_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitAVERAGEIF_fun(mathParser.AVERAGEIF_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitAVERAGE_fun(mathParser.AVERAGE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitBASE64TOTEXT_fun(mathParser.BASE64TOTEXT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitBASE64URLTOTEXT_fun(mathParser.BASE64URLTOTEXT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitBETADIST_fun(mathParser.BETADIST_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitBETAINV_fun(mathParser.BETAINV_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitBIN2DEC_fun(mathParser.BIN2DEC_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitBIN2HEX_fun(mathParser.BIN2HEX_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitBIN2OCT_fun(mathParser.BIN2OCT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitBINOMDIST_fun(mathParser.BINOMDIST_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitCEILING_fun(mathParser.CEILING_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitCHAR_fun(mathParser.CHAR_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitCLEAN_fun(mathParser.CLEAN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitCODE_fun(mathParser.CODE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitCOMBIN_fun(mathParser.COMBIN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitCONCATENATE_fun(mathParser.CONCATENATE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitCOSH_fun(mathParser.COSH_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitCOS_fun(mathParser.COS_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitCOUNTIF_fun(mathParser.COUNTIF_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitCOUNT_fun(mathParser.COUNT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitCOVARIANCES_fun(mathParser.COVARIANCES_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitCOVAR_fun(mathParser.COVAR_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitDATEDIF_fun(mathParser.DATEDIF_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitDATEVALUE_fun(mathParser.DATEVALUE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitDATE_fun(mathParser.DATE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitDAYS360_fun(mathParser.DAYS360_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitDAY_fun(mathParser.DAY_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitDEC2BIN_fun(mathParser.DEC2BIN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitDEC2HEX_fun(mathParser.DEC2HEX_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitDEC2OCT_fun(mathParser.DEC2OCT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitDEGREES_fun(mathParser.DEGREES_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitDEVSQ_fun(mathParser.DEVSQ_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitDiyFunction_fun(mathParser.DiyFunction_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitEDATE_fun(mathParser.EDATE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitENDSWITH_fun(mathParser.ENDSWITH_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitEOMONTH_fun(mathParser.EOMONTH_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitERROR_fun(mathParser.ERROR_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitEVEN_fun(mathParser.EVEN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitEXACT_fun(mathParser.EXACT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitEXPONDIST_fun(mathParser.EXPONDIST_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitEXP_fun(mathParser.EXP_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitE_fun(mathParser.E_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitFACTDOUBLE_fun(mathParser.FACTDOUBLE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitFACT_fun(mathParser.FACT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitFALSE_fun(mathParser.FALSE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitFDIST_fun(mathParser.FDIST_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitFIND_fun(mathParser.FIND_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitFINV_fun(mathParser.FINV_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitFISHERINV_fun(mathParser.FISHERINV_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitFISHER_fun(mathParser.FISHER_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitFIXED_fun(mathParser.FIXED_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitFLOOR_fun(mathParser.FLOOR_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitGAMMADIST_fun(mathParser.GAMMADIST_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitGAMMAINV_fun(mathParser.GAMMAINV_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitGAMMALN_fun(mathParser.GAMMALN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitGCD_fun(mathParser.GCD_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitGEOMEAN_fun(mathParser.GEOMEAN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitGetJsonValue_fun(mathParser.GetJsonValue_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitGUID_fun(mathParser.GUID_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHARMEAN_fun(mathParser.HARMEAN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHASVALUE_fun(mathParser.HASVALUE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHAS_fun(mathParser.HAS_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHEX2BIN_fun(mathParser.HEX2BIN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHEX2DEC_fun(mathParser.HEX2DEC_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHEX2OCT_fun(mathParser.HEX2OCT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHMACMD5_fun(mathParser.HMACMD5_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHMACSHA1_fun(mathParser.HMACSHA1_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHMACSHA256_fun(mathParser.HMACSHA256_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHMACSHA512_fun(mathParser.HMACSHA512_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHOUR_fun(mathParser.HOUR_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHTMLDECODE_fun(mathParser.HTMLDECODE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHTMLENCODE_fun(mathParser.HTMLENCODE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitHYPGEOMDIST_fun(mathParser.HYPGEOMDIST_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitIFERROR_fun(mathParser.IFERROR_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitIF_fun(mathParser.IF_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitINDEXOF_fun(mathParser.INDEXOF_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitINT_fun(mathParser.INT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitIsError_fun(mathParser.IsError_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitISEVEN_fun(mathParser.ISEVEN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitISLOGICAL_fun(mathParser.ISLOGICAL_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitISNONTEXT_fun(mathParser.ISNONTEXT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitISNULLOREMPTY_fun(mathParser.ISNULLOREMPTY_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitISNULLORERROR_fun(mathParser.ISNULLORERROR_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitISNULLORWHITESPACE_fun(mathParser.ISNULLORWHITESPACE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitISNULL_fun(mathParser.ISNULL_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitIsNumber_fun(mathParser.IsNumber_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitISODD_fun(mathParser.ISODD_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitISREGEX_fun(mathParser.ISREGEX_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitISTEXT_fun(mathParser.ISTEXT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitJIS_fun(mathParser.JIS_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitJOIN_fun(mathParser.JOIN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitJSON_fun(mathParser.JSON_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitJudge_fun(mathParser.Judge_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLARGE_fun(mathParser.LARGE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLASTINDEXOF_fun(mathParser.LASTINDEXOF_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLCM_fun(mathParser.LCM_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLEFT_fun(mathParser.LEFT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLEN_fun(mathParser.LEN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLN_fun(mathParser.LN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLOG10_fun(mathParser.LOG10_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLOGINV_fun(mathParser.LOGINV_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLOGNORMDIST_fun(mathParser.LOGNORMDIST_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLOG_fun(mathParser.LOG_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLOWER_fun(mathParser.LOWER_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitMAX_fun(mathParser.MAX_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitMD5_fun(mathParser.MD5_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitMEDIAN_fun(mathParser.MEDIAN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitMID_fun(mathParser.MID_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitMINUTE_fun(mathParser.MINUTE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitMIN_fun(mathParser.MIN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitMODE_fun(mathParser.MODE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitMOD_fun(mathParser.MOD_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitMONTH_fun(mathParser.MONTH_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitMROUND_fun(mathParser.MROUND_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitMULTINOMIAL_fun(mathParser.MULTINOMIAL_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitNEGBINOMDIST_fun(mathParser.NEGBINOMDIST_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitNETWORKDAYS_fun(mathParser.NETWORKDAYS_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitNORMDIST_fun(mathParser.NORMDIST_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitNORMINV_fun(mathParser.NORMINV_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitNORMSDIST_fun(mathParser.NORMSDIST_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitNORMSINV_fun(mathParser.NORMSINV_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitNOT_fun(mathParser.NOT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitNOW_fun(mathParser.NOW_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitNULL_fun(mathParser.NULL_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitNum(mathParser.NumContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitNUM_fun(mathParser.NUM_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitOCT2BIN_fun(mathParser.OCT2BIN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitOCT2DEC_fun(mathParser.OCT2DEC_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitOCT2HEX_fun(mathParser.OCT2HEX_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitODD_fun(mathParser.ODD_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitOR_fun(mathParser.OR_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitParameter2(mathParser.Parameter2Context context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitPARAMETER_fun(mathParser.PARAMETER_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitPARAM_fun(mathParser.PARAM_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitPercentage_fun(mathParser.Percentage_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitPERCENTILE_fun(mathParser.PERCENTILE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitPERCENTRANK_fun(mathParser.PERCENTRANK_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitPERMUT_fun(mathParser.PERMUT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitPI_fun(mathParser.PI_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitPOISSON_fun(mathParser.POISSON_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitPOWER_fun(mathParser.POWER_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitPRODUCT_fun(mathParser.PRODUCT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitPROPER_fun(mathParser.PROPER_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitQUARTILE_fun(mathParser.QUARTILE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitQUOTIENT_fun(mathParser.QUOTIENT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitRADIANS_fun(mathParser.RADIANS_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitRANDBETWEEN_fun(mathParser.RANDBETWEEN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitRAND_fun(mathParser.RAND_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitREGEXREPALCE_fun(mathParser.REGEXREPALCE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitREGEX_fun(mathParser.REGEX_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitREMOVEEND_fun(mathParser.REMOVEEND_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitREMOVESTART_fun(mathParser.REMOVESTART_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitREPLACE_fun(mathParser.REPLACE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitREPT_fun(mathParser.REPT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitRIGHT_fun(mathParser.RIGHT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitRMB_fun(mathParser.RMB_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitROUNDDOWN_fun(mathParser.ROUNDDOWN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitROUNDUP_fun(mathParser.ROUNDUP_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitROUND_fun(mathParser.ROUND_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSEARCH_fun(mathParser.SEARCH_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSECOND_fun(mathParser.SECOND_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSHA1_fun(mathParser.SHA1_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSHA256_fun(mathParser.SHA256_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSHA512_fun(mathParser.SHA512_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSIGN_fun(mathParser.SIGN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSINH_fun(mathParser.SINH_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSIN_fun(mathParser.SIN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSMALL_fun(mathParser.SMALL_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSPLIT_fun(mathParser.SPLIT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSQRTPI_fun(mathParser.SQRTPI_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSQRT_fun(mathParser.SQRT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSTARTSWITH_fun(mathParser.STARTSWITH_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSTDEVP_fun(mathParser.STDEVP_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSTDEV_fun(mathParser.STDEV_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSTRING_fun(mathParser.STRING_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSUBSTITUTE_fun(mathParser.SUBSTITUTE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSUBSTRING_fun(mathParser.SUBSTRING_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSUMIF_fun(mathParser.SUMIF_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSUMSQ_fun(mathParser.SUMSQ_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitSUM_fun(mathParser.SUM_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTANH_fun(mathParser.TANH_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTAN_fun(mathParser.TAN_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTDIST_fun(mathParser.TDIST_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTEXTTOBASE64URL_fun(mathParser.TEXTTOBASE64URL_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTEXTTOBASE64_fun(mathParser.TEXTTOBASE64_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTEXT_fun(mathParser.TEXT_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTIMESTAMP_fun(mathParser.TIMESTAMP_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTIMEVALUE_fun(mathParser.TIMEVALUE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTIME_fun(mathParser.TIME_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTINV_fun(mathParser.TINV_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTODAY_fun(mathParser.TODAY_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTRIMEND_fun(mathParser.TRIMEND_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTRIMSTART_fun(mathParser.TRIMSTART_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTRIM_fun(mathParser.TRIM_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTRUE_fun(mathParser.TRUE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitTRUNC_fun(mathParser.TRUNC_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitT_fun(mathParser.T_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitUnit(mathParser.UnitContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitUPPER_fun(mathParser.UPPER_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitURLDECODE_fun(mathParser.URLDECODE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitURLENCODE_fun(mathParser.URLENCODE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitVALUE_fun(mathParser.VALUE_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitVARP_fun(mathParser.VARP_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitVAR_fun(mathParser.VAR_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitVersion_fun(mathParser.Version_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitWEEKDAY_fun(mathParser.WEEKDAY_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitWEEKNUM_fun(mathParser.WEEKNUM_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitWEIBULL_fun(mathParser.WEIBULL_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitWORKDAY_fun(mathParser.WORKDAY_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitYEAR_fun(mathParser.YEAR_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLOOKFLOOR_fun(mathParser.LOOKFLOOR_funContext context) { + return visit_fun(context); + } + + @Override + public CalculateTree visitLOOKCEILING_fun(mathParser.LOOKCEILING_funContext context) { + return visit_fun(context); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java b/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java index 7d2abcae6..be2f9a4d2 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java +++ b/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java @@ -38,8 +38,7 @@ protected Operand ExecuteDiyFunction(String funcName, List operands) { if (operands.size() == 1) { - int r =(int) operands.get(0).ToNumber -(null).NumberValue().intValue(); + int r =(int) operands.get(0).ToNumber(null).NumberValue().intValue(); return Operand.Create(r * r * Math.PI); } } From 886f66ce98a3391dfe53d3d01f677725e336da08 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 09:03:04 +0800 Subject: [PATCH 21/98] fix --- .../toolgood/algorithm/AlgorithmEngine.java | 52 +++++++++----- .../java/toolgood/algorithm/OperandImpl.java | 16 +++-- .../algorithm/internals/DiyNameInfo.java | 53 +++----------- .../internals/functions/FunctionBase.java | 69 ++++++++++--------- .../internals/functions/FunctionUtil.java | 66 +++++++++--------- .../internals/functions/Function_1.java | 2 +- .../internals/functions/Function_2.java | 2 +- .../internals/functions/Function_3.java | 2 +- .../internals/functions/Function_4.java | 2 +- .../internals/functions/Function_N.java | 2 +- .../functions/compare/Function_EQ.java | 30 ++++---- .../functions/compare/Function_GE.java | 26 +++---- .../functions/compare/Function_GT.java | 26 +++---- .../functions/compare/Function_LE.java | 26 +++---- .../functions/compare/Function_LT.java | 26 +++---- .../functions/compare/Function_NE.java | 30 ++++---- .../functions/csharp/Function_ENDSWITH.java | 2 +- .../functions/csharp/Function_HAS.java | 2 +- .../functions/csharp/Function_HASVALUE.java | 2 +- .../functions/csharp/Function_REMOVEEND.java | 2 +- .../csharp/Function_REMOVESTART.java | 2 +- .../functions/csharp/Function_STARTSWITH.java | 2 +- .../functions/datetimes/Function_ADDDAYS.java | 4 +- .../datetimes/Function_ADDHOURS.java | 4 +- .../datetimes/Function_ADDMINUTES.java | 4 +- .../datetimes/Function_ADDMONTHS.java | 4 +- .../datetimes/Function_ADDSECONDS.java | 4 +- .../datetimes/Function_ADDYEARS.java | 4 +- .../functions/datetimes/Function_DATEDIF.java | 10 +-- .../datetimes/Function_DATEVALUE.java | 22 +++--- .../functions/datetimes/Function_DAY.java | 4 +- .../functions/datetimes/Function_DAYS360.java | 12 ++-- .../functions/datetimes/Function_EDATE.java | 4 +- .../functions/datetimes/Function_EOMONTH.java | 4 +- .../functions/datetimes/Function_HOUR.java | 4 +- .../functions/datetimes/Function_MINUTE.java | 4 +- .../functions/datetimes/Function_MONTH.java | 4 +- .../datetimes/Function_NETWORKDAYS.java | 12 ++-- .../functions/datetimes/Function_SECOND.java | 4 +- .../datetimes/Function_TIMESTAMP.java | 4 +- .../datetimes/Function_TIMEVALUE.java | 2 +- .../functions/datetimes/Function_WEEKDAY.java | 4 +- .../functions/datetimes/Function_WEEKNUM.java | 4 +- .../functions/datetimes/Function_WORKDAY.java | 8 +-- .../functions/datetimes/Function_YEAR.java | 2 +- .../internals/functions/flow/Function_IF.java | 2 +- .../functions/flow/Function_IFERROR.java | 2 +- .../functions/flow/Function_ISERROR.java | 2 +- .../functions/flow/Function_ISEVEN.java | 2 +- .../functions/flow/Function_ISLOGICAL.java | 2 +- .../functions/flow/Function_ISNONTEXT.java | 2 +- .../functions/flow/Function_ISNULL.java | 2 +- .../flow/Function_ISNULLOREMPTY.java | 2 +- .../flow/Function_ISNULLORERROR.java | 2 +- .../flow/Function_ISNULLORWHITESPACE.java | 2 +- .../functions/flow/Function_ISNUMBER.java | 2 +- .../functions/flow/Function_ISODD.java | 2 +- .../functions/flow/Function_ISTEXT.java | 6 +- .../functions/flow/Function_NOT.java | 2 +- .../functions/mathbase/Function_ABS.java | 13 ++-- .../functions/mathbase/Function_CEILING.java | 29 ++++---- .../functions/mathbase/Function_COMBIN.java | 25 +++---- .../functions/mathbase/Function_EVEN.java | 2 +- .../functions/mathbase/Function_EXP.java | 2 +- .../functions/mathbase/Function_FACT.java | 2 +- .../mathbase/Function_FACTDOUBLE.java | 2 +- .../functions/mathbase/Function_FIXED.java | 2 +- .../functions/mathbase/Function_FLOOR.java | 29 ++++---- .../functions/mathbase/Function_GCD.java | 2 +- .../functions/mathbase/Function_LCM.java | 2 +- .../functions/mathbase/Function_LN.java | 3 +- .../functions/mathbase/Function_LOG.java | 3 +- .../functions/mathbase/Function_MROUND.java | 2 +- .../mathbase/Function_MULTINOMIAL.java | 4 +- .../functions/mathbase/Function_ODD.java | 2 +- .../functions/mathbase/Function_PERMUT.java | 2 +- .../functions/mathbase/Function_POWER.java | 2 +- .../functions/mathbase/Function_PRODUCT.java | 2 +- .../mathbase/Function_Percentage.java | 2 +- .../functions/mathbase/Function_QUOTIENT.java | 2 +- .../functions/mathbase/Function_RAND.java | 2 +- .../mathbase/Function_RANDBETWEEN.java | 2 +- .../functions/mathbase/Function_ROUND.java | 2 +- .../mathbase/Function_ROUNDDOWN.java | 2 +- .../functions/mathbase/Function_ROUNDUP.java | 2 +- .../functions/mathbase/Function_SIGN.java | 2 +- .../functions/mathbase/Function_SQRT.java | 16 ++--- .../functions/mathbase/Function_SQRTPI.java | 2 +- .../functions/mathbase/Function_TRUNC.java | 2 +- .../functions/mathsum/Function_AVEDEV.java | 2 +- .../functions/mathsum/Function_AVERAGE.java | 2 +- .../functions/mathsum/Function_AVERAGEIF.java | 2 +- .../functions/mathsum/Function_BETADIST.java | 2 +- .../functions/mathsum/Function_BETAINV.java | 2 +- .../functions/mathsum/Function_BINOMDIST.java | 2 +- .../functions/mathsum/Function_COUNT.java | 2 +- .../functions/mathsum/Function_COUNTIF.java | 2 +- .../functions/mathsum/Function_COVAR.java | 2 +- .../mathsum/Function_COVARIANCES.java | 2 +- .../functions/mathsum/Function_DEVSQ.java | 2 +- .../functions/mathsum/Function_EXPONDIST.java | 2 +- .../functions/mathsum/Function_FDIST.java | 2 +- .../functions/mathsum/Function_FINV.java | 2 +- .../functions/mathsum/Function_FISHER.java | 2 +- .../functions/mathsum/Function_FISHERINV.java | 2 +- .../functions/mathsum/Function_GAMMADIST.java | 2 +- .../functions/mathsum/Function_GAMMAINV.java | 2 +- .../functions/mathsum/Function_GAMMALN.java | 2 +- .../functions/mathsum/Function_GEOMEAN.java | 2 +- .../functions/mathsum/Function_HARMEAN.java | 2 +- .../mathsum/Function_HYPGEOMDIST.java | 2 +- .../functions/mathsum/Function_LARGE.java | 2 +- .../functions/mathsum/Function_LOGINV.java | 2 +- .../mathsum/Function_LOGNORMDIST.java | 2 +- .../functions/mathsum/Function_MAX.java | 2 +- .../functions/mathsum/Function_MEDIAN.java | 2 +- .../functions/mathsum/Function_MIN.java | 2 +- .../functions/mathsum/Function_MODE.java | 2 +- .../mathsum/Function_NEGBINOMDIST.java | 2 +- .../functions/mathsum/Function_NORMDIST.java | 2 +- .../functions/mathsum/Function_NORMINV.java | 2 +- .../functions/mathsum/Function_NORMSDIST.java | 2 +- .../functions/mathsum/Function_NORMSINV.java | 2 +- .../mathsum/Function_PERCENTILE.java | 4 +- .../mathsum/Function_PERCENTRANK.java | 4 +- .../functions/mathsum/Function_POISSON.java | 4 +- .../functions/mathsum/Function_QUARTILE.java | 4 +- .../functions/mathsum/Function_SMALL.java | 2 +- .../functions/mathsum/Function_WEIBULL.java | 4 +- .../mathtransformation/Function_BIN2DEC.java | 2 +- .../mathtransformation/Function_BIN2HEX.java | 2 +- .../mathtransformation/Function_BIN2OCT.java | 2 +- .../mathtransformation/Function_DEC2BIN.java | 2 +- .../mathtransformation/Function_DEC2HEX.java | 2 +- .../mathtransformation/Function_DEC2OCT.java | 2 +- .../mathtransformation/Function_HEX2BIN.java | 2 +- .../mathtransformation/Function_HEX2DEC.java | 2 +- .../mathtransformation/Function_HEX2OCT.java | 2 +- .../mathtransformation/Function_OCT2BIN.java | 2 +- .../mathtransformation/Function_OCT2DEC.java | 2 +- .../mathtransformation/Function_OCT2HEX.java | 2 +- .../mathtrigonometric/Function_ACOS.java | 2 +- .../mathtrigonometric/Function_ACOSH.java | 2 +- .../mathtrigonometric/Function_ASIN.java | 2 +- .../mathtrigonometric/Function_ASINH.java | 2 +- .../mathtrigonometric/Function_ATAN.java | 2 +- .../mathtrigonometric/Function_ATAN2.java | 2 +- .../mathtrigonometric/Function_ATANH.java | 2 +- .../mathtrigonometric/Function_COS.java | 2 +- .../mathtrigonometric/Function_COSH.java | 2 +- .../mathtrigonometric/Function_COT.java | 2 +- .../mathtrigonometric/Function_CSC.java | 2 +- .../mathtrigonometric/Function_DEGREES.java | 2 +- .../mathtrigonometric/Function_RADIANS.java | 2 +- .../mathtrigonometric/Function_SEC.java | 2 +- .../mathtrigonometric/Function_SIN.java | 2 +- .../mathtrigonometric/Function_SINH.java | 2 +- .../mathtrigonometric/Function_TAN.java | 2 +- .../mathtrigonometric/Function_TANH.java | 2 +- .../functions/operator/Function_AND.java | 4 +- .../functions/operator/Function_AND_N.java | 4 +- .../functions/operator/Function_Add.java | 8 +-- .../functions/operator/Function_Connect.java | 2 +- .../functions/operator/Function_Div.java | 4 +- .../functions/operator/Function_Mod.java | 2 +- .../functions/operator/Function_Mul.java | 6 +- .../functions/operator/Function_OR.java | 4 +- .../functions/operator/Function_OR_N.java | 4 +- .../functions/operator/Function_Sub.java | 8 +-- .../functions/string/Function_ASC.java | 2 +- .../functions/string/Function_CHAR.java | 2 +- .../functions/string/Function_CLEAN.java | 2 +- .../functions/string/Function_CODE.java | 2 +- .../string/Function_CONCATENATE.java | 2 +- .../functions/string/Function_EXACT.java | 2 +- .../functions/string/Function_FIND.java | 2 +- .../functions/string/Function_JIS.java | 2 +- .../functions/string/Function_LEFT.java | 2 +- .../functions/string/Function_LEN.java | 2 +- .../functions/string/Function_LOWER.java | 2 +- .../functions/string/Function_MID.java | 2 +- .../functions/string/Function_PROPER.java | 2 +- .../functions/string/Function_REPLACE.java | 2 +- .../functions/string/Function_REPT.java | 2 +- .../functions/string/Function_RIGHT.java | 2 +- .../functions/string/Function_RMB.java | 2 +- .../functions/string/Function_SEARCH.java | 2 +- .../functions/string/Function_SUBSTITUTE.java | 2 +- .../functions/string/Function_T.java | 2 +- .../functions/string/Function_TEXT.java | 6 +- .../functions/string/Function_TRIM.java | 4 +- .../functions/string/Function_UPPER.java | 4 +- .../functions/string/Function_VALUE.java | 8 +-- .../functions/value/Function_Array.java | 2 +- .../functions/value/Function_ArrayJson.java | 2 +- .../value/Function_ArrayJsonItem.java | 2 +- .../functions/value/Function_DiyFunction.java | 2 +- .../functions/value/Function_ERROR.java | 2 +- .../value/Function_GetJsonValue.java | 20 +++--- .../functions/value/Function_JSON.java | 2 +- .../functions/value/Function_NUM.java | 2 +- .../functions/value/Function_PARAM.java | 2 +- .../functions/value/Function_PARAMETER.java | 2 +- .../functions/value/Function_Value.java | 6 +- .../internals/visitors/AntlrCharStream.java | 2 +- .../visitors/AntlrErrorTextWriter.java | 2 +- .../internals/visitors/CharUtil.java | 2 +- .../internals/visitors/DiyNameVisitor.java | 44 ++++++------ .../visitors/MathFunctionVisitor.java | 6 +- .../internals/visitors/MathSplitVisitor.java | 4 +- .../internals/visitors/MathSplitVisitor2.java | 57 +++++++-------- .../toolgood/algorithm/math/mathLexer.java | 8 +-- .../toolgood/algorithm/math/mathParser.java | 26 +++---- .../toolgood/algorithm/math/mathVisitor.java | 4 +- .../Tests/AlgorithmEngineTest_flow.java | 10 +-- 215 files changed, 619 insertions(+), 620 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java index 28476a082..6425c6446 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java @@ -10,7 +10,7 @@ import toolgood.algorithm.enums.MassUnitType; import toolgood.algorithm.enums.VolumeUnitType; import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.internals.Operand; +import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.visitors.AntlrErrorTextWriter; import toolgood.algorithm.math.mathLexer; @@ -48,7 +48,21 @@ public class AlgorithmEngine { /** * 最后一个错误 */ - public String LastError; + private String LastError; + + /** + * 获取最后一个错误 + */ + public String getLastError() { + return LastError; + } + + /** + * 设置最后一个错误 + */ + public void SetLastError(String error) { + LastError = error; + } /** * 使用EXCEL索引 @@ -88,7 +102,7 @@ public FunctionBase Parse(String exp) throws Exception { var context = parser.prog(); if (antlrErrorTextWriter.IsError()) { - LastError = antlrErrorTextWriter.getErrorMsg(); + LastError = antlrErrorTextWriter.ErrorMsg(); throw new Exception(LastError); } var visitor = new MathFunctionVisitor(); @@ -112,13 +126,13 @@ public short TryEvaluate(String exp, short def) { if (obj.IsNotNumber()) { obj = obj.ToNumber("It can't be converted to number!"); if (obj.IsError()) { - LastError = obj.ErrorMsg; + SetLastError(obj.ErrorMsg); return def; } } return (short) obj.IntValue; } catch (Exception ex) { - LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); } return def; } @@ -133,13 +147,13 @@ public int TryEvaluate(String exp, int def) { if (obj.IsNotNumber()) { obj = obj.ToNumber("It can't be converted to number!"); if (obj.IsError()) { - LastError = obj.ErrorMsg; + SetLastError(obj.ErrorMsg); return def; } } return obj.IntValue; } catch (Exception ex) { - LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); } return def; } @@ -154,13 +168,13 @@ public long TryEvaluate(String exp, long def) { if (obj.IsNotNumber()) { obj = obj.ToNumber("It can't be converted to number!"); if (obj.IsError()) { - LastError = obj.ErrorMsg; + SetLastError(obj.ErrorMsg); return def; } } return obj.LongValue; } catch (Exception ex) { - LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); } return def; } @@ -175,13 +189,13 @@ public float TryEvaluate(String exp, float def) { if (obj.IsNotNumber()) { obj = obj.ToNumber("It can't be converted to number!"); if (obj.IsError()) { - LastError = obj.ErrorMsg; + SetLastError(obj.ErrorMsg); return def; } } return (float) obj.DoubleValue; } catch (Exception ex) { - LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); } return def; } @@ -196,13 +210,13 @@ public double TryEvaluate(String exp, double def) { if (obj.IsNotNumber()) { obj = obj.ToNumber("It can't be converted to number!"); if (obj.IsError()) { - LastError = obj.ErrorMsg; + SetLastError(obj.ErrorMsg); return def; } } return obj.DoubleValue; } catch (Exception ex) { - LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); } return def; } @@ -217,13 +231,13 @@ public String TryEvaluate(String exp, String def) { if (obj.IsNotText()) { obj = obj.ToText("It can't be converted to string!"); if (obj.IsError()) { - LastError = obj.ErrorMsg; + SetLastError(obj.ErrorMsg); return def; } } return obj.TextValue; } catch (Exception ex) { - LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); } return def; } @@ -238,13 +252,13 @@ public boolean TryEvaluate(String exp, boolean def) { if (obj.IsNotBoolean()) { obj = obj.ToBoolean("It can't be converted to bool!"); if (obj.IsError()) { - LastError = obj.ErrorMsg; + SetLastError(obj.ErrorMsg); return def; } } return obj.BooleanValue; } catch (Exception ex) { - LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); } return def; } @@ -259,13 +273,13 @@ public MyDate TryEvaluate_MyDate(String exp, MyDate def) { if (obj.IsNotDate()) { obj = obj.ToMyDate("It can't be converted to DateTime!"); if (obj.IsError()) { - LastError = obj.ErrorMsg; + SetLastError(obj.ErrorMsg); return def; } } return obj.DateValue; } catch (Exception ex) { - LastError = ex.getMessage() + "\r\n" + ex.getStackTrace(); + SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); } return def; } diff --git a/java/src/main/java/toolgood/algorithm/OperandImpl.java b/java/src/main/java/toolgood/algorithm/OperandImpl.java index 0ebf48666..674af09dc 100644 --- a/java/src/main/java/toolgood/algorithm/OperandImpl.java +++ b/java/src/main/java/toolgood/algorithm/OperandImpl.java @@ -362,16 +362,20 @@ public OperandMyDate(MyDate obj) { public MyDate DateValue() { return value; } @Override - public Operand ToNumber(String errorMessage) { return Create(value.ToNumber()); } + public Operand ToNumber(String errorMessage) { return Create(value.ToNumber +()); } @Override - public Operand ToNumber(String errorMessage, Object... args) { return Create(value.ToNumber()); } + public Operand ToNumber(String errorMessage, Object... args) { return Create(value.ToNumber +()); } @Override - public Operand ToBoolean(String errorMessage) { return value.ToNumber() != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage) { return value.ToNumber +() != 0 ? TRUE : FALSE; } @Override - public Operand ToBoolean(String errorMessage, Object... args) { return value.ToNumber() != 0 ? TRUE : FALSE; } + public Operand ToBoolean(String errorMessage, Object... args) { return value.ToNumber +() != 0 ? TRUE : FALSE; } @Override public Operand ToText(String errorMessage) { return Create(value.toString()); } @@ -420,12 +424,12 @@ public Operand ToText(String errorMessage, Object... args) { @Override public Operand ToArray(String errorMessage) { - if (value.isArray()) { + if (value.IsArray()) { List list = new ArrayList<>(); for (JsonData v : value.getArray()) { if (v.isString()) { list.add(Operand.Create(v.getString())); - } else if (v.isBoolean()) { + } else if (v.IsBoolean()) { list.add(Operand.Create(v.getBoolean())); } else if (v.IsNumber()) { list.add(Operand.Create(new BigDecimal(v.getNumber().toString()))); diff --git a/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java b/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java index 02d4ee120..d43782dfd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java +++ b/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java @@ -10,28 +10,21 @@ public final class DiyNameInfo { /** * 自定义 参数 */ - private final List parameters; + public final List Parameters; /** * 自定义方法 */ - private final List functions; + public final List Functions; /** * 自定义类型 */ - DiyNameInfo() { - parameters = new ArrayList<>(); - functions = new ArrayList<>(); - } - - public List getParameters() { - return parameters; - } - - public List getFunctions() { - return functions; + public DiyNameInfo() { + Parameters = new ArrayList<>(); + Functions = new ArrayList<>(); } + /** * 关键字信息 @@ -40,43 +33,19 @@ public class KeyInfo { /** * 名称 */ - private String name; + public String Name; /** * 开始位置 */ - private int start; + public int Start; /** * 结束位置 */ - private int end; - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public int getStart() { - return start; - } - - public void setStart(int start) { - this.start = start; - } - - public int getEnd() { - return end; - } - - public void setEnd(int end) { - this.end = end; - } - + public int End; + @Override public String toString() { - return name; + return Name; } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index 9e57c7bce..2ad4e7e8f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -8,6 +8,7 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; +import java.util.function.BiFunction; import java.util.function.Function; import toolgood.algorithm.internals.MyDate; import toolgood.algorithm.Operand; @@ -21,7 +22,7 @@ public abstract class FunctionBase { * @param tempParameter 临时参数,未找到返回null * @return */ - public abstract Operand Evaluate(AlgorithmEngine work, Function tempParameter); + public abstract Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter); //region TryEvaluate @@ -33,19 +34,19 @@ public abstract class FunctionBase { * @param tempParameter * @return */ - public short TryEvaluate(AlgorithmEngine work, short def, Function tempParameter) { + public short TryEvaluate(AlgorithmEngine work, short def, BiFunction tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.IsNumber()) { obj = obj.ToNumber("It can't be converted to number!"); if (obj.IsError()) { - work.setLastError(obj.ErrorMsg()); + work.SetLastError(obj.ErrorMsg()); return def; } } return (short) obj.IntValue(); } catch (Exception ex) { - work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + work.SetLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); } return def; } @@ -58,19 +59,19 @@ public short TryEvaluate(AlgorithmEngine work, short def, Function tempParameter) { + public int TryEvaluate(AlgorithmEngine work, int def, BiFunction tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.IsNumber()) { obj = obj.ToNumber("It can't be converted to number!"); if (obj.IsError()) { - work.setLastError(obj.getErrorMsg()); + work.SetLastError(obj.ErrorMsg()); return def; } } return obj.IntValue(); } catch (Exception ex) { - work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + work.SetLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); } return def; } @@ -83,19 +84,19 @@ public int TryEvaluate(AlgorithmEngine work, int def, Function tempParameter) { + public long TryEvaluate(AlgorithmEngine work, long def, BiFunction tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.IsNumber()) { obj = obj.ToNumber("It can't be converted to number!"); if (obj.IsError()) { - work.setLastError(obj.getErrorMsg()); + work.SetLastError(obj.ErrorMsg()); return def; } } - return obj.getLongValue(); + return obj.LongValue(); } catch (Exception ex) { - work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + work.SetLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); } return def; } @@ -108,20 +109,20 @@ public long TryEvaluate(AlgorithmEngine work, long def, Function tempParameter) { + public float TryEvaluate(AlgorithmEngine work, float def, BiFunction tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.IsNumber()) { obj = obj.ToNumber("It can't be converted to number!"); if (obj.IsError()) { - work.setLastError(obj.getErrorMsg()); + work.SetLastError(obj.ErrorMsg()); return def; } } return (float) obj.DoubleValue (); } catch (Exception ex) { - work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + work.SetLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); } return def; } @@ -134,20 +135,20 @@ public float TryEvaluate(AlgorithmEngine work, float def, Function tempParameter) { + public double TryEvaluate(AlgorithmEngine work, double def, BiFunction tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); if (!obj.IsNumber()) { obj = obj.ToNumber("It can't be converted to number!"); if (obj.IsError()) { - work.setLastError(obj.getErrorMsg()); + work.SetLastError(obj.ErrorMsg()); return def; } } return obj.DoubleValue (); } catch (Exception ex) { - work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + work.SetLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); } return def; } @@ -160,19 +161,19 @@ public double TryEvaluate(AlgorithmEngine work, double def, Function tempParameter) { + public String TryEvaluate(AlgorithmEngine work, String def, BiFunction tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); - if (!obj.isText()) { - obj = obj.toText("It can't be converted to string!"); + if (!obj.IsText()) { + obj = obj.ToText("It can't be converted to string!"); if (obj.IsError()) { - work.setLastError(obj.getErrorMsg()); + work.SetLastError(obj.ErrorMsg()); return def; } } return obj.TextValue(); } catch (Exception ex) { - work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + work.SetLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); } return def; } @@ -185,19 +186,19 @@ public String TryEvaluate(AlgorithmEngine work, String def, Function tempParameter) { + public boolean TryEvaluate(AlgorithmEngine work, boolean def, BiFunction tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); - if (!obj.isBoolean()) { - obj = obj.toBoolean("It can't be converted to bool!"); + if (!obj.IsBoolean()) { + obj = obj.ToBoolean("It can't be converted to bool!"); if (obj.IsError()) { - work.setLastError(obj.getErrorMsg()); + work.SetLastError(obj.ErrorMsg()); return def; } } - return obj.getBooleanValue(); + return obj.BooleanValue(); } catch (Exception ex) { - work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + work.SetLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); } return def; } @@ -211,19 +212,19 @@ public boolean TryEvaluate(AlgorithmEngine work, boolean def, Function tempParameter) { + public MyDate TryEvaluate_MyDate(AlgorithmEngine work, MyDate def, BiFunction tempParameter) { try { Operand obj = this.Evaluate(work, tempParameter); - if (!obj.isDate()) { - obj = obj.toMyDate("It can't be converted to DateTime!"); + if (!obj.IsDate()) { + obj = obj.ToMyDate("It can't be converted to DateTime!"); if (obj.IsError()) { - work.setLastError(obj.getErrorMsg()); + work.SetLastError(obj.ErrorMsg()); return def; } } - return obj.getDateValue(); + return obj.DateValue(); } catch (Exception ex) { - work.setLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); + work.SetLastError(ex.getMessage() + "\r\n" + getStackTrace(ex)); } return def; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java index 281f73bad..410388bb0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java @@ -1,32 +1,32 @@ package toolgood.algorithm.internals.functions; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Objects; import java.util.function.Predicate; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.Visitors.CharUtil; +import toolgood.algorithm.internals.visitors.CharUtil; public class FunctionUtil { public static final long START_DATE_UTC = 0; // 1970-01-01 00:00:00 UTC in milliseconds - public static boolean F_base_GetList(List args, List list) { + public static boolean F_base_GetList_BigDecimal(List args, List list) { for (Operand item : args) { if (item.IsNumber()) { - list.add(item.DoubleValue -()); - } else if (item.isArray()) { - boolean o = F_base_GetList(item.getArrayValue(), list); + list.add(item.NumberValue()); + } else if (item.IsArray()) { + boolean o = F_base_GetList(item.ArrayValue(), list); if (!o) { return false; } - } else if (item.isJson()) { - Operand i = item.toArray(null); + } else if (item.IsJson()) { + Operand i = item.ToArray(null); if (i.IsError()) { return false; } - boolean o = F_base_GetList(i.getArrayValue(), list); + boolean o = F_base_GetList(i.ArrayValue(), list); if (!o) { return false; } @@ -42,24 +42,24 @@ public static boolean F_base_GetList(List args, List list) { return true; } - public static boolean F_base_GetList(Operand args, List list) { + public static boolean F_base_GetList_Double(Operand args, List list) { if (args.IsError()) { return false; } if (args.IsNumber()) { list.add(args.DoubleValue ()); - } else if (args.isArray()) { - boolean o = F_base_GetList(args.getArrayValue(), list); + } else if (args.IsArray()) { + boolean o = F_base_GetList(args.ArrayValue(), list); if (!o) { return false; } - } else if (args.isJson()) { - Operand i = args.toArray(null); + } else if (args.IsJson()) { + Operand i = args.ToArray(null); if (i.IsError()) { return false; } - boolean o = F_base_GetList(i.getArrayValue(), list); + boolean o = F_base_GetList(i.ArrayValue(), list); if (!o) { return false; } @@ -76,22 +76,22 @@ public static boolean F_base_GetList(Operand args, List list) { public static boolean F_base_GetList(List args, List list) { for (Operand item : args) { - if (item.isArray()) { - boolean o = F_base_GetList(item.getArrayValue(), list); + if (item.IsArray()) { + boolean o = F_base_GetList(item.ArrayValue(), list); if (!o) { return false; } - } else if (item.isJson()) { - Operand i = item.toArray(null); + } else if (item.IsJson()) { + Operand i = item.ToArray(null); if (i.IsError()) { return false; } - boolean o = F_base_GetList(i.getArrayValue(), list); + boolean o = F_base_GetList(i.ArrayValue(), list); if (!o) { return false; } } else { - Operand o = item.toText(null); + Operand o = item.ToText(null); if (o.IsError()) { return false; } @@ -101,26 +101,26 @@ public static boolean F_base_GetList(List args, List list) { return true; } - public static boolean F_base_GetList(Operand args, List list) { + public static boolean F_base_GetList_String(Operand args, List list) { if (args.IsError()) { return false; } - if (args.isArray()) { - boolean o = F_base_GetList(args.getArrayValue(), list); + if (args.IsArray()) { + boolean o = F_base_GetList(args.ArrayValue(), list); if (!o) { return false; } - } else if (args.isJson()) { - Operand i = args.toArray(null); + } else if (args.IsJson()) { + Operand i = args.ToArray(null); if (i.IsError()) { return false; } - boolean o = F_base_GetList(i.getArrayValue(), list); + boolean o = F_base_GetList(i.ArrayValue(), list); if (!o) { return false; } } else { - Operand o = args.toText(null); + Operand o = args.ToText(null); if (o.IsError()) { return false; } @@ -171,15 +171,15 @@ public static double F_base_sumif(List dbs, String s, double d, List")) { + } else if (CharUtil.Equals(ss, ">")) { return a > b; - } else if (CharUtil.equals(ss, ">=")) { + } else if (CharUtil.Equals(ss, ">=")) { return a >= b; - } else if (CharUtil.equals(ss, "=") || CharUtil.equals(ss, "==") || CharUtil.equals(ss, "===")) { + } else if (CharUtil.Equals(ss, "=") || CharUtil.Equals(ss, "==") || CharUtil.Equals(ss, "===")) { return a == b; } return a != b; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java index 2c3a1dac2..c2718e9c6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java @@ -2,7 +2,7 @@ import java.lang.StringBuilder; -abstract class Function_1 extends FunctionBase { +public abstract class Function_1 extends FunctionBase { protected FunctionBase func1; protected Function_1(FunctionBase func1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java index 57125db66..4b96a42ed 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java @@ -2,7 +2,7 @@ import java.lang.StringBuilder; -abstract class Function_2 extends FunctionBase { +public abstract class Function_2 extends FunctionBase { protected FunctionBase func1; protected FunctionBase func2; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java index db966b524..41cfd9d65 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java @@ -2,7 +2,7 @@ import java.lang.StringBuilder; -abstract class Function_3 extends FunctionBase { +public abstract class Function_3 extends FunctionBase { protected FunctionBase func1; protected FunctionBase func2; protected FunctionBase func3; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java index f20568e2e..de0b04344 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java @@ -2,7 +2,7 @@ import java.lang.StringBuilder; -abstract class Function_4 extends FunctionBase { +public abstract class Function_4 extends FunctionBase { protected FunctionBase func1; protected FunctionBase func2; protected FunctionBase func3; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java index c8d9308f2..a5bc40226 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java @@ -2,7 +2,7 @@ import java.lang.StringBuilder; -abstract class Function_N extends FunctionBase { +public abstract class Function_N extends FunctionBase { protected FunctionBase[] funcs; protected Function_N(FunctionBase[] funcs) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java index 8a00bd3d3..5e19a72e7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java @@ -18,17 +18,17 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function= 0); - } else if(args1.isText()) { + } else if(args1.IsText()) { int r = args1.TextValue().compareTo(args2.TextValue()); return r >= 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.isDate() || args1.isBoolean()) { + } else if(args1.IsDate() || args1.IsBoolean()) { args1 = args1.ToNumber(null); args2 = args2.ToNumber(null); return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); - } else if(args1.isJson()) { - args1 = args1.toText(null); - args2 = args2.toText(null); + } else if(args1.IsJson()) { + args1 = args1.ToText(null); + args2 = args2.ToText(null); int r = args1.TextValue().compareTo(args2.TextValue()); return r >= 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isNull()) { @@ -37,23 +37,23 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function= 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.isDate() || args1.IsNumber() || args1.isJson()) { - args1 = args1.toText(null); + } else if(args1.IsDate() || args1.IsNumber() || args1.IsJson()) { + args1 = args1.ToText(null); int r = args1.TextValue().compareTo(args2.TextValue()); return r >= 0 ? Operand.TRUE : Operand.FALSE; } else { return Operand.Error("Function '{0}' compare is error.", ">="); } - } else if(args1.isJson() || args2.isJson() || args1.isArray() || args2.isArray() || args1.isArrayJson() || args2.isArrayJson()) { + } else if(args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.isArrayJson() || args2.isArrayJson()) { return Operand.Error("Function '{0}' compare is error.", ">="); } if(args1.isNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", ">=", 1); if(args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java index 4fb91b89c..ebbf00b4f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java @@ -18,16 +18,16 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function 0); - } else if(args1.isText()) { + } else if(args1.IsText()) { int r = args1.TextValue().compareTo(args2.TextValue()); return r > 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.isDate() || args1.isBoolean()) { + } else if(args1.IsDate() || args1.IsBoolean()) { args1 = args1.ToNumber(null); args2 = args2.ToNumber(null); return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); - } else if(args1.isJson()) { - args1 = args1.toText(null); - args2 = args2.toText(null); + } else if(args1.IsJson()) { + args1 = args1.ToText(null); + args2 = args2.ToText(null); int r = args1.TextValue().compareTo(args2.TextValue()); return r > 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.isNull()) { @@ -37,23 +37,23 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.isDate() || args1.IsNumber() || args1.isJson()) { - args1 = args1.toText(null); + } else if(args1.IsDate() || args1.IsNumber() || args1.IsJson()) { + args1 = args1.ToText(null); int r = args1.TextValue().compareTo(args2.TextValue()); return r > 0 ? Operand.TRUE : Operand.FALSE; } else { return Operand.Error("Function '{0}' compare is error.", ">"); } - } else if(args1.isJson() || args2.isJson() || args1.isArray() || args2.isArray() || args1.isArrayJson() || args2.isArrayJson()) { + } else if(args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.isArrayJson() || args2.isArrayJson()) { return Operand.Error("Function '{0}' compare is error.", ">"); } if(args1.isNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", ">", 1); if(args1.IsError()) { return args1; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java index fd9b36e76..dbecdc5fb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java @@ -18,16 +18,16 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempPara } } try { - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); int days = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddDays(days); return Operand.Create(result); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java index 01053e250..2f983ba50 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java @@ -16,7 +16,7 @@ public Function_ADDHOURS(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddHours", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddHours", 1); if (args1.IsError()) { return args1; } @@ -29,7 +29,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } try { - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); int hours = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddHours(hours); return Operand.Create(result); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java index afb237d2d..eb2af42e6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java @@ -16,7 +16,7 @@ public Function_ADDMINUTES(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddMinutes", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddMinutes", 1); if (args1.IsError()) { return args1; } @@ -29,7 +29,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } try { - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); int minutes = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddMinutes(minutes); return Operand.Create(result); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java index db2f642d9..92398f335 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java @@ -16,7 +16,7 @@ public Function_ADDMONTHS(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddMonths", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddMonths", 1); if (args1.IsError()) { return args1; } @@ -29,7 +29,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } try { - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); int months = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddMonths(months); return Operand.Create(result); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java index 7dcb3505c..e939627a1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java @@ -16,7 +16,7 @@ public Function_ADDSECONDS(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddSeconds", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddSeconds", 1); if (args1.IsError()) { return args1; } @@ -29,7 +29,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } try { - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); int seconds = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddSeconds(seconds); return Operand.Create(result); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java index 0a1772102..00d5d0846 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java @@ -16,7 +16,7 @@ public Function_ADDYEARS(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "AddYears", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddYears", 1); if (args1.IsError()) { return args1; } @@ -29,7 +29,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } try { - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); int years = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddYears(years); return Operand.Create(result); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java index b12302d30..0927366ab 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java @@ -16,27 +16,27 @@ public Function_DATEDIF(FunctionBase func1, FunctionBase func2, FunctionBase fun public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "DateDif", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "DateDif", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotDate()) { - args2 = args2.toMyDate("Function '{0}' parameter {1} is error!", "DateDif", 2); + args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "DateDif", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.isNotText()) { - args3 = args3.toText("Function '{0}' parameter {1} is error!", "DateDif", 3); + args3 = args3.ToText("Function '{0}' parameter {1} is error!", "DateDif", 3); if (args3.IsError()) { return args3; } } - toolgood.algorithm.internals.MyDate startMyDate = args1.getDateValue(); - toolgood.algorithm.internals.MyDate endMyDate = args2.getDateValue(); + toolgood.algorithm.internals.MyDate startMyDate = args1.DateValue(); + toolgood.algorithm.internals.MyDate endMyDate = args2.DateValue(); String t = args3.TextValue().toLowerCase(); if (t.equals("y")) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java index d7c63d060..082c9a05e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java @@ -24,7 +24,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } args.add(aa); } - if (args.get(0).isDate()) { + if (args.get(0).IsDate()) { return args.get(0); } int type = 0; @@ -36,26 +36,26 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara type = args2.IntValue(); } if (type == 0) { - if (args.get(0).isText()) { + if (args.get(0).IsText()) { toolgood.algorithm.internals.MyDate date = toolgood.algorithm.internals.MyDate.parse(args.get(0).TextValue()); if (date != null) { return Operand.Create(date); } } Operand args1 = args.get(0).ToNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); - if (args1.getLongValue() <= 2958465L) { // 9999-12-31 日时间在excel的数字为 2958465 - return args1.toMyDate(); + if (args1.LongValue() <= 2958465L) { // 9999-12-31 日时间在excel的数字为 2958465 + return args1.ToMyDate(); } - if (args1.getLongValue() <= 253402232399L) { // 9999-12-31 12:59:59 日时间 转 时间截 为 253402232399L + if (args1.LongValue() <= 253402232399L) { // 9999-12-31 12:59:59 日时间 转 时间截 为 253402232399L // 这里需要实现类似 FunctionUtil.StartDateUtc.AddSeconds 的功能 // 暂时使用 MyDate 的构造函数来处理 - return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / 86400.0)); + return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.LongValue() / 86400.0)); } // 注:时间截 253402232399 ms 转时间 为 1978-01-12 05:30:32 // 这里需要实现类似 FunctionUtil.StartDateUtc.AddMilliseconds 的功能 - return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / (86400.0 * 1000.0))); + return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.LongValue() / (86400.0 * 1000.0))); } else if (type == 1) { - Operand args1 = args.get(0).toText("Function '{0}' parameter {1} is error!", "DateValue", 1); + Operand args1 = args.get(0).ToText("Function '{0}' parameter {1} is error!", "DateValue", 1); if (args1.IsError()) { return args1; } @@ -64,15 +64,15 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara return Operand.Create(date); } } else if (type == 2) { - return args.get(0).ToNumber("Function '{0}' parameter is error!", "DateValue").toMyDate(); + return args.get(0).ToNumber("Function '{0}' parameter is error!", "DateValue").ToMyDate(); } else if (type == 3) { Operand args1 = args.get(0).ToNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); // 这里需要实现类似 FunctionUtil.StartDateUtc.AddMilliseconds 的功能 - return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / (86400.0 * 1000.0))); + return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.LongValue() / (86400.0 * 1000.0))); } else if (type == 4) { Operand args1 = args.get(0).ToNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); // 这里需要实现类似 FunctionUtil.StartDateUtc.AddSeconds 的功能 - return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.getLongValue() / 86400.0)); + return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.LongValue() / 86400.0)); } return Operand.Error("Function '{0}' parameter is error!", "DateValue"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java index 88c0e54b1..fec8eb7f6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java @@ -16,12 +16,12 @@ public Function_DAY(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter is error!", "Day"); + args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Day"); if (args1.IsError()) { return args1; } } - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); if (date.Day == null) { return Operand.Error("Function '{0}' is error!", "Day"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java index 413d37364..3df83d388 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java @@ -16,27 +16,27 @@ public Function_DAYS360(FunctionBase func1, FunctionBase func2, FunctionBase fun public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "Days360", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "Days360", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); if (args2.isNotDate()) { - args2 = args2.toMyDate("Function '{0}' parameter {1} is error!", "Days360", 2); + args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "Days360", 2); if (args2.IsError()) { return args2; } } - toolgood.algorithm.internals.MyDate startMyDate = args1.getDateValue(); - toolgood.algorithm.internals.MyDate endMyDate = args2.getDateValue(); + toolgood.algorithm.internals.MyDate startMyDate = args1.DateValue(); + toolgood.algorithm.internals.MyDate endMyDate = args2.DateValue(); boolean method = false; if (func3 != null) { Operand args3 = func3.Evaluate(work, tempParameter); if (args3.isNotBoolean()) { - args3 = args3.toBoolean("Function '{0}' parameter {1} is error!", "Days360", 3); + args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "Days360", 3); if (args3.IsError()) { return args3; } @@ -44,7 +44,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara if (args3.IsError()) { return args3; } - method = args3.getBooleanValue(); + method = args3.BooleanValue(); } int days = endMyDate.Year * 360 + (endMyDate.Month - 1) * 30 - startMyDate.Year * 360 - (startMyDate.Month - 1) * 30; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java index 2f9007508..6b599ea33 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java @@ -16,7 +16,7 @@ public Function_EDATE(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "EDate", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "EDate", 1); if (args1.IsError()) { return args1; } @@ -29,7 +29,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } try { - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); int months = args2.IntValue(); toolgood.algorithm.internals.MyDate result = date.AddMonths(months); return Operand.Create(result); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java index e35b676c8..cc1f2d0d5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java @@ -16,7 +16,7 @@ public Function_EOMONTH(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "EoMonth", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "EoMonth", 1); if (args1.IsError()) { return args1; } @@ -29,7 +29,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } try { - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); int months = args2.IntValue(); // 添加指定的月份数(加上1) toolgood.algorithm.internals.MyDate tempDate = date.AddMonths(months + 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java index a8532aeab..d54daaf90 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java @@ -16,12 +16,12 @@ public Function_HOUR(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter is error!", "Hour"); + args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Hour"); if (args1.IsError()) { return args1; } } - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); return Operand.Create(date.Hour); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java index e0c562b4b..1f41e8be1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java @@ -16,12 +16,12 @@ public Function_MINUTE(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter is error!", "Minute"); + args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Minute"); if (args1.IsError()) { return args1; } } - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); return Operand.Create(date.Minute); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java index 195b5685c..ded604be3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java @@ -16,12 +16,12 @@ public Function_MONTH(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter is error!", "Month"); + args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Month"); if (args1.IsError()) { return args1; } } - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); if (date.Month == null) { return Operand.Error("Function '{0}' is error!", "Month"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java index d9ba5dfb1..3a52645eb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java @@ -17,32 +17,32 @@ public Function_NETWORKDAYS(FunctionBase[] funcs) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = funcs[0].Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 1); if (args1.IsError()) { return args1; } } Operand args2 = funcs[1].Evaluate(work, tempParameter); if (args2.isNotDate()) { - args2 = args2.toMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 2); + args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 2); if (args2.IsError()) { return args2; } } - toolgood.algorithm.internals.MyDate startMyDate = args1.getDateValue(); - toolgood.algorithm.internals.MyDate endMyDate = args2.getDateValue(); + toolgood.algorithm.internals.MyDate startMyDate = args1.DateValue(); + toolgood.algorithm.internals.MyDate endMyDate = args2.DateValue(); HashSet list = new HashSet<>(); for (int i = 2; i < funcs.length; i++) { Operand ar = funcs[i].Evaluate(work, tempParameter); if (ar.isNotDate()) { - ar = ar.toMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", i + 1); + ar = ar.ToMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", i + 1); if (ar.IsError()) { return ar; } } - toolgood.algorithm.internals.MyDate holiday = ar.getDateValue(); + toolgood.algorithm.internals.MyDate holiday = ar.DateValue(); list.add(holiday.Year + "-" + holiday.Month + "-" + holiday.Day); } int days = 0; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java index cc0bd9d91..3c269fd51 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java @@ -16,12 +16,12 @@ public Function_SECOND(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter is error!", "Second"); + args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Second"); if (args1.IsError()) { return args1; } } - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); return Operand.Create(date.Second); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java index cc187785e..6b01d23cd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java @@ -30,11 +30,11 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } type = args2.IntValue(); } - Operand dateOperand = args0.toMyDate("Function '{0}' parameter {1} is error!", "TimeStamp", 1); + Operand dateOperand = args0.ToMyDate("Function '{0}' parameter {1} is error!", "TimeStamp", 1); if (dateOperand.IsError()) { return dateOperand; } - toolgood.algorithm.internals.MyDate myDate = dateOperand.getDateValue(); + toolgood.algorithm.internals.MyDate myDate = dateOperand.DateValue(); // 计算时间戳 long timestamp = myDate.ToDateTime().getMillis(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java index 54d89ab4d..af4c20788 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java @@ -18,7 +18,7 @@ public Function_TIMEVALUE(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotText()) { - args1 = args1.toText("Function '{0}' parameter is error!", "TimeValue"); + args1 = args1.ToText("Function '{0}' parameter is error!", "TimeValue"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index 24b36184a..81e7c6970 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -16,7 +16,7 @@ public Function_WEEKDAY(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "WeekDay", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "WeekDay", 1); if (args1.IsError()) { return args1; } @@ -34,7 +34,7 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara type = args2.IntValue(); } - toolgood.algorithm.internals.MyDate date = args1.getDateValue(); + toolgood.algorithm.internals.MyDate date = args1.DateValue(); int dayOfWeek = date.DayOfWeek(); // 1-7,其中 1 是星期日,7 是星期六 if (type == 1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index 8fd7d8391..9bc918f24 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -16,12 +16,12 @@ public Function_WEEKNUM(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "WeekNum", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "WeekNum", 1); if (args1.IsError()) { return args1; } } - toolgood.algorithm.internals.MyDate startMyDate = args1.getDateValue(); + toolgood.algorithm.internals.MyDate startMyDate = args1.DateValue(); int dayOfYear = startMyDate.DayOfYear(); // 计算当年第一天是星期几(1-7,1 是星期日) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index 28fab91c3..8b83136d5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -17,7 +17,7 @@ public Function_WORKDAY(FunctionBase[] funcs) { public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { Operand args1 = funcs[0].Evaluate(work, tempParameter); if (args1.isNotDate()) { - args1 = args1.toMyDate("Function '{0}' parameter {1} is error!", "Workday", 1); + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "Workday", 1); if (args1.IsError()) { return args1; } @@ -30,19 +30,19 @@ public Operand Evaluate(AlgorithmEngine work, Function tempPara } } - toolgood.algorithm.internals.MyDate startMyDate = args1.getDateValue(); + toolgood.algorithm.internals.MyDate startMyDate = args1.DateValue(); int days = args2.IntValue(); HashSet holidaySet = new HashSet<>(); for (int i = 2; i < funcs.length; i++) { Operand ar = funcs[i].Evaluate(work, tempParameter); if (ar.isNotDate()) { - ar = ar.toMyDate("Function '{0}' parameter {1} is error!", "Workday", i + 1); + ar = ar.ToMyDate("Function '{0}' parameter {1} is error!", "Workday", i + 1); if (ar.IsError()) { return ar; } } - toolgood.algorithm.internals.MyDate holiday = ar.getDateValue(); + toolgood.algorithm.internals.MyDate holiday = ar.DateValue(); holidaySet.add(holiday.Year + "-" + holiday.Month + "-" + holiday.Day); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java index 441da2d7f..77f2176b2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java @@ -10,7 +10,7 @@ public Function_YEAR(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Year"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java index 50ea2fa83..e3a5b06aa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java @@ -10,7 +10,7 @@ public Function_IF(FunctionBase func1, FunctionBase func2, FunctionBase func3) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotBoolean()) { args1 = args1.ToBoolean("Function '{0}' parameter {1} is error!", "If", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java index 7243b03cb..fcfa75046 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java @@ -10,7 +10,7 @@ public Function_IFERROR(FunctionBase func1, FunctionBase func2, FunctionBase fun } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return func2.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java index 2150dc9ae..b46f5a09a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java @@ -10,7 +10,7 @@ public Function_IsError(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (func2 != null) { if (args1.IsError()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java index ab96cbdab..9d3ecce75 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java @@ -10,7 +10,7 @@ public Function_ISEVEN(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNumber()) { if (args1.IntValue() % 2 == 0) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java index a7b39114d..6e4470c32 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java @@ -10,7 +10,7 @@ public Function_ISLOGICAL(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsBoolean()) { return Operand.True(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java index 61e994bce..091c640d2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java @@ -10,7 +10,7 @@ public Function_ISNONTEXT(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { return Operand.True(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java index 5d0b87d82..f10bdd3d9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java @@ -10,7 +10,7 @@ public Function_ISNULL(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (func2 != null) { if (args1.IsNull()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java index 079be8626..af444f236 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java @@ -10,7 +10,7 @@ public Function_ISNULLOREMPTY(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNull()) { return Operand.True(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java index 2dd0de5b5..02526f9a9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java @@ -10,7 +10,7 @@ public Function_ISNULLORERROR(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (func2 != null) { if (args1.IsNull() || args1.IsError()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java index eb18b220e..3e5541d0f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java @@ -10,7 +10,7 @@ public Function_ISNULLORWHITESPACE(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNull()) { return Operand.True(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java index d45b424cb..b995f1c1f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java @@ -10,7 +10,7 @@ public Function_IsNumber(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNumber()) { return Operand.True(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java index ce2d8f410..41d780069 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java @@ -10,7 +10,7 @@ public Function_ISODD(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNumber()) { if (args1.IntValue() % 2 == 1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java index f28ea068f..078d02820 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java @@ -4,13 +4,13 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; -public class Function_ISTEXT extends Function_1 { - public Function_ISTEXT(FunctionBase func1) { +public class Function_IsText extends Function_1 { + public Function_IsText(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsText()) { return Operand.True(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java index a5b54fed2..ea9fe1b8d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java @@ -10,7 +10,7 @@ public Function_NOT(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotBoolean()) { args1 = args1.ToBoolean("Function '{0}' parameter is error!", "Not"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java index 966b129fd..a64328cb1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java @@ -1,5 +1,6 @@ package toolgood.algorithm.internals.functions.mathbase; +import java.lang.StringBuilder; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; @@ -10,19 +11,19 @@ public Function_ABS(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Abs"); - if (args1.IsError()) { + if (args1.isNotNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Abs"); + if (args1.isError()) { return args1; } } - return Operand.Create(Math.abs(args1.NumberValue())); + return Operand.create(Math.abs(args1.getNumberValue())); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Abs"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java index f162b2587..69238a186 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java @@ -1,5 +1,6 @@ package toolgood.algorithm.internals.functions.mathbase; +import java.lang.StringBuilder; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; @@ -10,41 +11,41 @@ public Function_CEILING(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Ceiling", 1); - if (args1.IsError()) { + if (args1.isNotNumber()) { + args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Ceiling", 1); + if (args1.isError()) { return args1; } } if (func2 == null) { - return Operand.Create(Math.ceil(args1.NumberValue())); + return Operand.create(Math.ceil(args1.getNumberValue())); } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Ceiling", 2); - if (args2.IsError()) { + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Ceiling", 2); + if (args2.isError()) { return args2; } } - double b = args2.NumberValue(); + double b = args2.getNumberValue(); if (b == 0) { - return Operand.Create(0); + return Operand.create(0); } if (b < 0) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Ceiling", 2); + return Operand.error("Function '{0}' parameter {1} is error!", "Ceiling", 2); } - double a = args1.NumberValue(); + double a = args1.getNumberValue(); double d = Math.ceil(a / b) * b; - return Operand.Create(d); + return Operand.create(d); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Ceiling"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java index 89697a918..3d7b40a71 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java @@ -1,5 +1,6 @@ package toolgood.algorithm.internals.functions.mathbase; +import java.lang.StringBuilder; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; @@ -10,26 +11,26 @@ public Function_COMBIN(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Combin", 1); - if (args1.IsError()) { + if (args1.isNotNumber()) { + args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Combin", 1); + if (args1.isError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Combin", 2); - if (args2.IsError()) { + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Combin", 2); + if (args2.isError()) { return args2; } } - int total = args1.IntValue(); - int count = args2.IntValue(); + int total = args1.getIntValue(); + int count = args2.getIntValue(); if (total < 0 || count < 0 || total < count) { - return Operand.Error("Function '{0}' parameter is error!", "Combin"); + return Operand.error("Function '{0}' parameter is error!", "Combin"); } double sum = 1; double sum2 = 1; @@ -37,11 +38,11 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Even"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java index e7ae527c0..5403e012b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java @@ -10,7 +10,7 @@ public Function_EXP(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Exp"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java index 5d745780e..52cf6dd8a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java @@ -10,7 +10,7 @@ public Function_FACT(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Fact"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java index 98967503e..cc814e362 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java @@ -10,7 +10,7 @@ public Function_FACTDOUBLE(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "FactDouble"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java index 4db63b072..d4a6680ea 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java @@ -11,7 +11,7 @@ public Function_FIXED(FunctionBase func1, FunctionBase func2, FunctionBase func3 } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { int num = 2; if (func2 != null) { Operand args2 = func2.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java index c37686988..eb4c73eb2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java @@ -1,5 +1,6 @@ package toolgood.algorithm.internals.functions.mathbase; +import java.lang.StringBuilder; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; @@ -10,40 +11,40 @@ public Function_FLOOR(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Floor", 1); - if (args1.IsError()) { + if (args1.isNotNumber()) { + args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Floor", 1); + if (args1.isError()) { return args1; } } if (func2 == null) { - return Operand.Create(Math.floor(args1.NumberValue())); + return Operand.create(Math.floor(args1.getNumberValue())); } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Floor", 2); - if (args2.IsError()) { + if (args2.isNotNumber()) { + args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Floor", 2); + if (args2.isError()) { return args2; } } - double b = args2.NumberValue(); + double b = args2.getNumberValue(); if (b >= 1) { - return Operand.Create(args1.IntValue()); + return Operand.create(args1.getIntValue()); } if (b <= 0) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Floor", 2); + return Operand.error("Function '{0}' parameter {1} is error!", "Floor", 2); } - double a = args1.NumberValue(); + double a = args1.getNumberValue(); double d = Math.floor(a / b) * b; - return Operand.Create(d); + return Operand.create(d); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Floor"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java index 82864deee..652be7bfe 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java @@ -12,7 +12,7 @@ public Function_GCD(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(funcs.length); for (int i = 0; i < funcs.length; i++) { Operand aa = funcs[i].Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java index 81d6868f5..53301d598 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java @@ -12,7 +12,7 @@ public Function_LCM(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(funcs.length); for (int i = 0; i < funcs.length; i++) { Operand aa = funcs[i].Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java index 24b87bc6a..31a991394 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java @@ -3,6 +3,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; public class Function_LN extends Function_1 { public Function_LN(FunctionBase func1) { @@ -10,7 +11,7 @@ public Function_LN(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Ln"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java index 4fa7e703d..5328ef5b1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java @@ -3,6 +3,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; public class Function_LOG extends Function_2 { public Function_LOG(FunctionBase func1, FunctionBase func2) { @@ -10,7 +11,7 @@ public Function_LOG(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Log", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java index 801484212..29863944c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java @@ -10,7 +10,7 @@ public Function_MROUND(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "MRound", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java index 2d695d9c1..8666c577b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java @@ -3,6 +3,8 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; + import java.util.ArrayList; import java.util.List; @@ -12,7 +14,7 @@ public Function_MULTINOMIAL(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java index 93ace8271..6c65f93f6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java @@ -10,7 +10,7 @@ public Function_ODD(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Odd"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java index 5956f7452..56cc42a59 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java @@ -10,7 +10,7 @@ public Function_PERMUT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Permut", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java index df8580aa3..aa07b40fc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java @@ -10,7 +10,7 @@ public Function_POWER(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Power", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java index 2ca979ce0..dc6e130c7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java @@ -12,7 +12,7 @@ public Function_PRODUCT(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(funcs.length); for (int i = 0; i < funcs.length; i++) { Operand aa = funcs[i].Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java index e88c50011..0f54cdb14 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java @@ -10,7 +10,7 @@ public Function_Percentage(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Percentage"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java index 8b8a0b1c6..9f5de0463 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java @@ -10,7 +10,7 @@ public Function_QUOTIENT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Quotient", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java index 4f4a74db2..d798f7cce 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java @@ -10,7 +10,7 @@ public Function_RAND() { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Random rand = new Random(); return Operand.Create(rand.nextDouble()); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java index 488e82b2b..1ca65639c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java @@ -11,7 +11,7 @@ public Function_RANDBETWEEN(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RandBetween", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java index 9843f02bc..d997d3406 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java @@ -10,7 +10,7 @@ public Function_ROUND(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Round", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java index a68652730..49f684ab8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java @@ -10,7 +10,7 @@ public Function_ROUNDDOWN(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RoundDown", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java index a73e7dd0d..d9bbda277 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java @@ -10,7 +10,7 @@ public Function_ROUNDUP(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RoundUp", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java index 4a625fc6b..61c10cd92 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java @@ -10,7 +10,7 @@ public Function_SIGN(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sign"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java index ff10e3b5e..7954e4eb5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java @@ -1,8 +1,9 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.internals.functions.FunctionBase; +import java.lang.StringBuilder; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; public class Function_SQRT extends Function_1 { public Function_SQRT(FunctionBase func1) { @@ -10,19 +11,18 @@ public Function_SQRT(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sqrt"); - if (args1.IsError()) { + if (args1.isNotNumber()) { + args1 = args1.toNumber("Function '{0}' parameter is error!", "Sqrt"); + if (args1.isError()) { return args1; } } if (args1.getNumberValue() < 0) { - return Operand.Error("Function '{0}' parameter is error!", "Sqrt"); + return Operand.error("Function '{0}' parameter is error!", "Sqrt"); } - return Operand.Create(Math.sqrt(args1.DoubleValue -())); + return Operand.create(Math.sqrt(args1.getDoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java index fa66546c8..e63826005 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java @@ -10,7 +10,7 @@ public Function_SQRTPI(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "SqrtPI"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java index 07c55f32c..b84f5f4ee 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java @@ -10,7 +10,7 @@ public Function_TRUNC(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Trunc"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java index 65edb1edf..36bfabffa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java @@ -15,7 +15,7 @@ public Function_AVEDEV(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java index 968871973..74dc94eba 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java @@ -15,7 +15,7 @@ public Function_AVERAGE(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java index bd4780e94..d004e4efa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java @@ -15,7 +15,7 @@ public Function_AVERAGEIF(FunctionBase func1, FunctionBase func2, FunctionBase f } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java index 6d5b0eece..676744c11 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java @@ -13,7 +13,7 @@ public Function_BETADIST(FunctionBase func1, FunctionBase func2, FunctionBase fu } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java index 9e03e4877..4dca92657 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java @@ -13,7 +13,7 @@ public Function_BETAINV(FunctionBase func1, FunctionBase func2, FunctionBase fun } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java index 7e58d7462..c3527a05f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java @@ -13,7 +13,7 @@ public Function_BINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase f } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java index 046b29f3b..a00886e23 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java @@ -15,7 +15,7 @@ public Function_COUNT(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java index 6b1dc78d7..15a6ecf6d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java @@ -15,7 +15,7 @@ public Function_COUNTIF(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsArray()) { args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "CountIf", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java index 88d4ce800..363ae3480 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java @@ -15,7 +15,7 @@ public Function_COVAR(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java index cf12d591d..170294d45 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java @@ -15,7 +15,7 @@ public Function_COVARIANCES(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java index 094dbe453..927840fc8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java @@ -15,7 +15,7 @@ public Function_DEVSQ(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java index db3b4d3f1..136ec5db1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java @@ -13,7 +13,7 @@ public Function_EXPONDIST(FunctionBase func1, FunctionBase func2, FunctionBase f } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "ExponDist", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java index 74dadc8b9..3f52aa974 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java @@ -13,7 +13,7 @@ public Function_FDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3 } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java index 4c4670503..5e06c0083 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java @@ -13,7 +13,7 @@ public Function_FINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java index 064714277..0a5d63877 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java @@ -11,7 +11,7 @@ public Function_FISHER(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Fisher"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java index e1999c0d7..a870f4344 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java @@ -11,7 +11,7 @@ public Function_FISHERINV(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "FisherInv"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java index 1bd321156..ee50e6c42 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java @@ -13,7 +13,7 @@ public Function_GAMMADIST(FunctionBase func1, FunctionBase func2, FunctionBase f } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java index bcdb99a02..ab740fcea 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java @@ -13,7 +13,7 @@ public Function_GAMMAINV(FunctionBase func1, FunctionBase func2, FunctionBase fu } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java index 927cbe18a..4755330af 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java @@ -13,7 +13,7 @@ public Function_GAMMALN(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "GammaLn"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java index b78f17f96..aace9c96e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java @@ -14,7 +14,7 @@ public Function_GEOMEAN(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java index 3edcc3497..20787c54f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java @@ -14,7 +14,7 @@ public Function_HARMEAN(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java index c198298c9..436d993b9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java @@ -13,7 +13,7 @@ public Function_HYPGEOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java index 4b63b3db8..7a5527e54 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java @@ -16,7 +16,7 @@ public Function_LARGE(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotArray()) { args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Large", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java index 553b6da1c..567d20033 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java @@ -13,7 +13,7 @@ public Function_LOGINV(FunctionBase func1, FunctionBase func2, FunctionBase func } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java index fdafa0c1e..ce4cb2452 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java @@ -13,7 +13,7 @@ public Function_LOGNORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java index 5911ed64c..10e973a1b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java @@ -15,7 +15,7 @@ public Function_MAX(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java index cd0be5549..afe79e72f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java @@ -15,7 +15,7 @@ public Function_MEDIAN(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java index 87c778078..36b97ad75 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java @@ -15,7 +15,7 @@ public Function_MIN(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java index d5a7191d8..add5ce1c8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java @@ -18,7 +18,7 @@ public Function_MODE(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java index 7787910b0..777f5023b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java @@ -13,7 +13,7 @@ public Function_NEGBINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBas } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java index afadba345..a8836ad0b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java @@ -13,7 +13,7 @@ public Function_NORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase fu } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java index 7b99dd6bb..e05081061 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java @@ -13,7 +13,7 @@ public Function_NORMINV(FunctionBase func1, FunctionBase func2, FunctionBase fun } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java index 1860eb290..a87066715 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java @@ -13,7 +13,7 @@ public Function_NORMSDIST(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "NormSDist"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java index 7dbd235f1..8843abbf9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java @@ -13,7 +13,7 @@ public Function_NORMSINV(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "NormSInv"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java index d083b6721..56af98cfa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java @@ -16,7 +16,7 @@ public Function_PERCENTILE(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotArray()) { args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Percentile", 1); @@ -37,7 +37,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Array) { - args1 = args1.toArray("Function '{0}' parameter {1} is error!", "PercentRank", 1); + args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "PercentRank", 1); if (args1.IsError()) { return args1; } @@ -41,7 +41,7 @@ public Operand Evaluate(Object work, Function tempParam double k = args2.DoubleValue (); - double[] array = list.stream().mapToDouble(Double::doubleValue).toArray(); + double[] array = list.stream().mapToDouble(Double::doubleValue).ToArray(); double v = ExcelFunctions.PercentRank(array, k); int d = 3; if (func3 != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java index 7ce674d5a..9b192ef59 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java @@ -32,7 +32,7 @@ public Operand Evaluate(Object work, Function tempParam } Operand args3 = func3.Evaluate(work, tempParameter); if (args3.getOperandType() != OperandType.Boolean) { - args3 = args3.toBoolean("Function '{0}' parameter {1} is error!", "Poisson", 3); + args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "Poisson", 3); if (args3.IsError()) { return args3; } @@ -40,7 +40,7 @@ public Operand Evaluate(Object work, Function tempParam int k = args1.IntValue(); double lambda = args2.DoubleValue (); - boolean state = args3.getBooleanValue(); + boolean state = args3.BooleanValue(); if (!(lambda > 0.0)) { return Operand.Error("Function '{0}' parameter is error!", "Poisson"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java index 1c06022be..86be25039 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java @@ -20,7 +20,7 @@ public Function_QUARTILE(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(Object work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Array) { - args1 = args1.toArray("Function '{0}' parameter {1} is error!", "Quartile", 1); + args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Quartile", 1); if (args1.IsError()) { return args1; } @@ -43,7 +43,7 @@ public Operand Evaluate(Object work, Function tempParam if (quant < 0 || quant > 4) { return Operand.Error("Function '{0}' parameter {1} is error!", "Quartile", 2); } - double[] array = list.stream().mapToDouble(Double::doubleValue).toArray(); + double[] array = list.stream().mapToDouble(Double::doubleValue).ToArray(); return Operand.Create(ExcelFunctions.Quartile(array, quant)); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java index 9d4b66ab0..49dde99f7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -19,7 +19,7 @@ public Function_SMALL(FunctionBase func1, FunctionBase func2) { public Operand Evaluate(Object work, Function tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Array) { - args1 = args1.toArray("Function '{0}' parameter {1} is error!", "Small", 1); + args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Small", 1); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java index 244065872..a53b3b6b3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java @@ -39,7 +39,7 @@ public Operand Evaluate(Object work, Function tempParam } Operand args4 = func4.Evaluate(work, tempParameter); if (args4.getOperandType() != OperandType.Boolean) { - args4 = args4.toBoolean("Function '{0}' parameter {1} is error!", "Weibull", 4); + args4 = args4.ToBoolean("Function '{0}' parameter {1} is error!", "Weibull", 4); if (args4.IsError()) { return args4; } @@ -51,7 +51,7 @@ public Operand Evaluate(Object work, Function tempParam (); double scale = args3.DoubleValue (); - boolean state = args4.getBooleanValue(); + boolean state = args4.BooleanValue(); if (shape <= 0.0 || scale <= 0.0) { return Operand.Error("Function '{0}' parameter is error!", "Weibull"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java index 221ba4099..b420a0d49 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java @@ -12,7 +12,7 @@ public Function_BIN2DEC(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "BIN2DEC"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java index 815aeab27..f6b9f28e4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java @@ -12,7 +12,7 @@ public Function_BIN2HEX(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "BIN2HEX", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java index dab6be6ab..53c4db3b5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java @@ -12,7 +12,7 @@ public Function_BIN2OCT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "BIN2OCT", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java index 4cf9f2341..983725ef1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java @@ -11,7 +11,7 @@ public Function_DEC2BIN(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2BIN", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java index 2ed89c893..17763ff6f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java @@ -11,7 +11,7 @@ public Function_DEC2HEX(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2HEX", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java index 5bca98c53..a003233e0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java @@ -11,7 +11,7 @@ public Function_DEC2OCT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2OCT", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java index 8849ca20a..9a5dc46f2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java @@ -12,7 +12,7 @@ public Function_HEX2BIN(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HEX2BIN", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java index 843e61fe3..ca4712989 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java @@ -12,7 +12,7 @@ public Function_HEX2DEC(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "HEX2DEC"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java index 86f74259f..902443885 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java @@ -12,7 +12,7 @@ public Function_HEX2OCT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HEX2OCT", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java index 938c036fe..2ad373a3f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java @@ -12,7 +12,7 @@ public Function_OCT2BIN(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "OCT2BIN", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java index a34df95a9..46247a635 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java @@ -12,7 +12,7 @@ public Function_OCT2DEC(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "OCT2DEC"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java index 39cdd3e15..e6f13bacb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java @@ -12,7 +12,7 @@ public Function_OCT2HEX(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "OCT2HEX", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java index 53acf6e69..9a00c7426 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java @@ -13,7 +13,7 @@ public Function_ACOS(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Acos"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java index de18afbca..ce9cf4453 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java @@ -13,7 +13,7 @@ public Function_ACOSH(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Acosh"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java index 1edc5291f..7a28d66b8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java @@ -13,7 +13,7 @@ public Function_ASIN(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Asin"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java index 622df0f06..df5bdf173 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java @@ -13,7 +13,7 @@ public Function_ASINH(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Asinh"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java index 6a569bb15..2f453bc5d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java @@ -13,7 +13,7 @@ public Function_ATAN(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Atan"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java index ee3d62667..5b67550db 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java @@ -13,7 +13,7 @@ public Function_ATAN2(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Atan2"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java index 70935c438..82ebdc667 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java @@ -13,7 +13,7 @@ public Function_ATANH(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Atanh"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java index 83e186927..4531817c5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java @@ -13,7 +13,7 @@ public Function_COS(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Cos"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java index 8fab2c0c6..f95560c7f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java @@ -13,7 +13,7 @@ public Function_COSH(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Cosh"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java index c2174435a..9f4c77a87 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java @@ -13,7 +13,7 @@ public Function_COT(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Cot"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java index 6fe1c5dc6..8df34c4b2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java @@ -13,7 +13,7 @@ public Function_CSC(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Csc"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java index 3f430093c..b0a6b9010 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java @@ -13,7 +13,7 @@ public Function_DEGREES(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Degrees"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java index be51b63a2..599b67edd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java @@ -13,7 +13,7 @@ public Function_RADIANS(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Radians"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java index 03829a2e6..284374e56 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java @@ -13,7 +13,7 @@ public Function_SEC(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sec"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java index c487660cd..2b58c06cc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java @@ -13,7 +13,7 @@ public Function_SIN(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sin"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java index 076f89f25..b5357a81b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java @@ -13,7 +13,7 @@ public Function_SINH(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sinh"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java index fe6f739fa..d2dc1552c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java @@ -13,7 +13,7 @@ public Function_TAN(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Tan"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java index 20035db79..8c88789e8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java @@ -13,7 +13,7 @@ public Function_TANH(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (!args1.IsNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Tanh"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java index 8eafde366..f5c75e91e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java @@ -11,7 +11,7 @@ public Function_AND(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { // 程序 && and || or 与 excel的 AND(x,y) OR(x,y) 有区别 // 在excel内 AND(x,y) OR(x,y) 先报错, // 在程序中,&& and 有true 直接返回true 就不会检测下一个会不会报错 @@ -23,7 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { int index = 1; boolean b = true; for (FunctionBase item : funcs) { @@ -22,7 +22,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; @@ -82,7 +82,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java index 9370afe6c..25c22c841 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java @@ -16,7 +16,7 @@ public Function_Div(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; @@ -94,7 +94,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java index 0244e73bc..0de750283 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java @@ -16,7 +16,7 @@ public Function_Mul(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; @@ -93,7 +93,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { // 程序 && and || or 与 excel的 AND(x,y) OR(x,y) 有区别 // 在excel内 AND(x,y) OR(x,y) 先报错, // 在程序中,&& and 有true 直接返回true 就不会检测下一个会不会报错 @@ -23,7 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { int index = 1; boolean b = false; for (FunctionBase item : funcs) { @@ -22,7 +22,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; @@ -79,7 +79,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "ASC"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java index ba03ae40f..68d149a19 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java @@ -11,7 +11,7 @@ public Function_CHAR(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Char"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java index 5b92bd709..0679a9aeb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java @@ -11,7 +11,7 @@ public Function_CLEAN(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "Clean"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java index fc643b0be..ad37bc3c6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java @@ -11,7 +11,7 @@ public Function_CODE(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "CODE"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java index dc5850e3d..fe62c3cea 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java @@ -11,7 +11,7 @@ public Function_CONCATENATE(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { if (funcs.length == 0) { return Operand.Create(""); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java index d3e410004..0315b50cb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java @@ -11,7 +11,7 @@ public Function_EXACT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "EXACT", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java index 1c9dacfcf..3eb517d0f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java @@ -11,7 +11,7 @@ public Function_FIND(FunctionBase func1, FunctionBase func2, FunctionBase func3) } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Find", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java index 996436b08..45e9b2e34 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java @@ -11,7 +11,7 @@ public Function_JIS(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "JIS"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java index 9e55d08f3..357483248 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java @@ -11,7 +11,7 @@ public Function_LEFT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Left", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java index 8d86338c4..f07546298 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java @@ -11,7 +11,7 @@ public Function_LEN(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "Len"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java index 202d95626..8fade3a10 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java @@ -11,7 +11,7 @@ public Function_LOWER(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "Lower"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java index 37c2aec1a..29da302e0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java @@ -11,7 +11,7 @@ public Function_MID(FunctionBase func1, FunctionBase func2, FunctionBase func3) } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Mid", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java index b1af5d0b8..7e8184ef1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java @@ -11,7 +11,7 @@ public Function_PROPER(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "Proper"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java index 93dba95d1..792cdd5e0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java @@ -11,7 +11,7 @@ public Function_REPLACE(FunctionBase func1, FunctionBase func2, FunctionBase fun } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Replace", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java index e868c6b7e..ac8f0c883 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java @@ -11,7 +11,7 @@ public Function_REPT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Rept", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java index 83c0217af..f8cc89d5c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java @@ -15,7 +15,7 @@ public Function_RIGHT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Right", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java index c82583f5f..b06910fe4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java @@ -15,7 +15,7 @@ public Function_RMB(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "RMB"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java index 15f9ae1f3..05763330d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java @@ -11,7 +11,7 @@ public Function_SEARCH(FunctionBase func1, FunctionBase func2, FunctionBase func } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Search", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java index 3490157b8..a2a53092e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java @@ -11,7 +11,7 @@ public Function_SUBSTITUTE(FunctionBase func1, FunctionBase func2, FunctionBase } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Substitute", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java index 915322099..fa30d551d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java @@ -11,7 +11,7 @@ public Function_T(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsText()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java index 87176b367..fc8e8018c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java @@ -15,7 +15,7 @@ public Function_TEXT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; @@ -31,7 +31,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotText()) { - args1 = args1.toText("Function '{0}' parameter is error!", "Trim"); + args1 = args1.ToText("Function '{0}' parameter is error!", "Trim"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java index 9e9a3955d..306f129dc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java @@ -11,10 +11,10 @@ public Function_UPPER(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotText()) { - args1 = args1.toText("Function '{0}' parameter is error!", "Upper"); + args1 = args1.ToText("Function '{0}' parameter is error!", "Upper"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java index bd1a6f3e0..92116eea9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java @@ -15,16 +15,16 @@ public Function_VALUE(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNumber()) { return args1; } - if (args1.isBoolean()) { - return args1.getBooleanValue() ? Operand.ONE : Operand.ZERO; + if (args1.IsBoolean()) { + return args1.BooleanValue() ? Operand.ONE : Operand.ZERO; } if (args1.isNotText()) { - args1 = args1.toText("Function '{0}' parameter is error!", "Value"); + args1 = args1.ToText("Function '{0}' parameter is error!", "Value"); if (args1.IsError()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java index 3fbce7f43..1086ff05e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java @@ -14,7 +14,7 @@ public Function_Array(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java index c6401eeca..781e46d75 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java @@ -11,7 +11,7 @@ public Function_ArrayJson(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { OperandKeyValueList result = new OperandKeyValueList(); for (FunctionBase item : funcs) { Operand o = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java index 29e3ba968..90ad8ccf1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java @@ -14,7 +14,7 @@ public Function_ArrayJsonItem(String key, FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { KeyValue keyValue = new KeyValue(); keyValue.setKey(key); keyValue.setValue(func1.Evaluate(work, tempParameter)); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java index b761921dd..294e99c4e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java @@ -17,7 +17,7 @@ public Function_DiyFunction(String name, FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java index 1bd831283..2682bc28a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java @@ -11,7 +11,7 @@ public Function_ERROR(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Error", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java index d50a0ceaf..71bfdb73a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java @@ -11,7 +11,7 @@ public Function_GetJsonValue(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand obj = func1.Evaluate(work, tempParameter); if (obj.IsError()) { return obj; @@ -27,8 +27,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java index 53e17ad95..a97e3f9ea 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java @@ -14,7 +14,7 @@ public Function_NUM(double func1, String func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { var dict = NumberUnitTypeHelper.GetUnitTypedict(); var d2 = NumberUnitTypeHelper.TransformationUnit(d, dict.get(unit), work.getDistanceUnit(), work.getAreaUnit(), work.getVolumeUnit(), work.getMassUnit()); return Operand.Create(d2); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java index 84527c373..5ef7f48cd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java @@ -11,7 +11,7 @@ public Function_PARAM(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Param", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java index bd0c0c1f3..480c91758 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java @@ -19,7 +19,7 @@ public Function_PARAMETER(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { String txt = name; if (txt == null || txt.isEmpty()) { Operand args1 = func1.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java index a73988389..7c0000d21 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java @@ -19,7 +19,7 @@ public Function_Value(Operand value, String showName) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { return _value; } @@ -46,10 +46,10 @@ public void toString(StringBuilder stringBuilder, boolean addBrackets) { stringBuilder.append('"'); } else if (_value.IsDate()) { stringBuilder.append('"'); - stringBuilder.append(_value.getDateValue().toString()); + stringBuilder.append(_value.DateValue().toString()); stringBuilder.append('"'); } else if (_value.IsBoolean()) { - stringBuilder.append(_value.getBooleanValue() ? "true" : "false"); + stringBuilder.append(_value.BooleanValue() ? "true" : "false"); } else { stringBuilder.append(_value.toString()); } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java index ed9464452..844ab097a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals; +package toolgood.algorithm.internals.visitors; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.misc.Interval; diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorTextWriter.java b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorTextWriter.java index 3bce68fc1..f8dd216da 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorTextWriter.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorTextWriter.java @@ -15,7 +15,7 @@ public void setError(boolean error) { isError = error; } - public String getErrorMsg() { + public String ErrorMsg() { return errorMsg; } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java b/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java index ed7337567..fb0da7bed 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals; +package toolgood.algorithm.internals.visitors; import java.util.ArrayList; import java.util.List; diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java index 51ec6b8e4..c0d2b1f0c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java @@ -14,28 +14,34 @@ public class DiyNameVisitor extends AbstractParseTreeVisitor implements public Object visitPARAMETER_fun(PARAMETER_funContext context) { TerminalNode node = context.PARAMETER(); if (node != null) { - diy.Parameters.add(node.getText()); + DiyNameInfo.KeyInfo keyInfo = diy.new KeyInfo(); + keyInfo.Name = node.getText(); + keyInfo.Start = node.getSymbol().getStartIndex(); + keyInfo.End = node.getSymbol().getStopIndex(); + diy.Parameters.add(keyInfo); } - node = context.PARAMETER2(); + return visitChildren(context); + } + @Override + public Object visitGetJsonValue_fun(GetJsonValue_funContext context) { + TerminalNode node = context.PARAMETER(); if (node != null) { - String str = node.getText(); - if (str.startsWith("@")) { - diy.Parameters.add(str.substring(1)); - } else if ((str.startsWith("【") && str.endsWith("】")) - || (str.startsWith("[") && str.endsWith("]")) - || (str.startsWith("#") && str.endsWith("#"))) { - diy.Parameters.add(str.substring(1, str.length() - 1)); - - } else { - diy.Parameters.add(str); - } - return null; + DiyNameInfo.KeyInfo keyInfo = diy.new KeyInfo(); + keyInfo.Name = node.getText(); + keyInfo.Start = node.getSymbol().getStartIndex(); + keyInfo.End = node.getSymbol().getStopIndex(); + diy.Parameters.add(keyInfo); } return visitChildren(context); } @Override public Object visitDiyFunction_fun(DiyFunction_funContext context) { - diy.Functions.add(context.PARAMETER().getText()); + TerminalNode node = context.PARAMETER(); + DiyNameInfo.KeyInfo keyInfo = diy.new KeyInfo(); + keyInfo.Name = node.getText(); + keyInfo.Start = node.getSymbol().getStartIndex(); + keyInfo.End = node.getSymbol().getStopIndex(); + diy.Functions.add(keyInfo); return visitChildren(context); } @@ -397,7 +403,7 @@ public Object visitLOG10_fun(LOG10_funContext context) { } @Override - public Object visitISTEXT_fun(ISTEXT_funContext context) { + public Object visitIsText_fun(IsText_funContext context) { return visitChildren(context); } @@ -450,12 +456,6 @@ public Object visitFIXED_fun(FIXED_funContext context) { return visitChildren(context); } - @Override - public Object visitGetJsonValue_fun(GetJsonValue_funContext context) { - - return visitChildren(context); - } - @Override public Object visitTINV_fun(TINV_funContext context) { diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java index 39416244c..f4477f55c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java @@ -92,7 +92,7 @@ import toolgood.algorithm.internals.functions.flow.Function_ISNULLORERROR; import toolgood.algorithm.internals.functions.flow.Function_ISNULLORWHITESPACE; import toolgood.algorithm.internals.functions.flow.Function_ISODD; -import toolgood.algorithm.internals.functions.flow.Function_ISTEXT; +import toolgood.algorithm.internals.functions.flow.Function_IsText; import toolgood.algorithm.internals.functions.flow.Function_NOT; import toolgood.algorithm.internals.functions.operator.Function_OR; import toolgood.algorithm.internals.functions.operator.Function_OR_N; @@ -216,10 +216,10 @@ public FunctionBase visitISNUMBER_fun(mathParser.ISNUMBER_funContext context) return new Function_ISNUMBER(args1); } - public FunctionBase visitISTEXT_fun(mathParser.ISTEXT_funContext context) + public FunctionBase visitIsText_fun(mathParser.IsText_funContext context) { FunctionBase args1 = this.visit(context.expr()); - return new Function_ISTEXT(args1); + return new Function_IsText(args1); } public FunctionBase visitISERROR_fun(mathParser.ISERROR_funContext context) diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java index 60ab82954..34057d46a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals; +package toolgood.algorithm.internals.visitors; import org.antlr.v4.runtime.ParserRuleContext; import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; @@ -341,7 +341,7 @@ public ConditionTree visitLOG10_fun(mathParser.LOG10_funContext context) { } @Override - public ConditionTree visitISTEXT_fun(mathParser.ISTEXT_funContext context) { + public ConditionTree visitIsText_fun(mathParser.IsText_funContext context) { return visit_fun(context); } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java index 622dcbf4f..658aac880 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java @@ -1,43 +1,46 @@ package toolgood.algorithm.internals.visitors; -import org.antlr.v4.runtime.ParserRuleContext; +import java.util.ArrayList; +import java.util.List; + import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; +import org.antlr.v4.runtime.tree.ParseTree; +import org.antlr.v4.runtime.tree.TerminalNode; + import toolgood.algorithm.enums.CalculateTreeType; +import toolgood.algorithm.internals.CalculateTree; import toolgood.algorithm.math.mathParser; import toolgood.algorithm.math.mathVisitor; -import toolgood.algorithm.internals.CalculateTree; - -import java.util.ArrayList; -import java.util.List; public class MathSplitVisitor2 extends AbstractParseTreeVisitor implements mathVisitor { + @Override public CalculateTree visitProg(mathParser.ProgContext context) { - return visit(context.expr()); + return context.expr().accept(this); } @Override public CalculateTree visitBracket_fun(mathParser.Bracket_funContext context) { - return visit(context.expr()); + return context.expr().accept(this); } @Override public CalculateTree visitMulDiv_fun(mathParser.MulDiv_funContext context) { CalculateTree tree = new CalculateTree(); tree.Nodes = new ArrayList<>(); - List exprs = context.expr(); + List exprs = context.expr(); String t = context.op.getText(); - if (CharUtil.Equals(t, "*")) { + if (t.equals("*")) { tree.Type = CalculateTreeType.Mul; - } else if (CharUtil.Equals(t, "/")) { + } else if (t.equals("/")) { tree.Type = CalculateTreeType.Div; } else { tree.Type = CalculateTreeType.Mod; } - tree.Nodes.add(this.visit(exprs.get(0))); - tree.Nodes.add(this.visit(exprs.get(1))); - tree.Start = context.start.getStartIndex(); - tree.End = context.stop.getStopIndex(); + tree.Nodes.add(exprs.get(0).accept(this)); + tree.Nodes.add(exprs.get(1).accept(this)); + tree.Start = context.getStart().getStartIndex(); + tree.End = context.getStop().getStopIndex(); tree.ConditionString = context.getText(); return tree; } @@ -46,27 +49,27 @@ public CalculateTree visitMulDiv_fun(mathParser.MulDiv_funContext context) { public CalculateTree visitAddSub_fun(mathParser.AddSub_funContext context) { CalculateTree tree = new CalculateTree(); tree.Nodes = new ArrayList<>(); - List exprs = context.expr(); + List exprs = context.expr(); String t = context.op.getText(); - if (CharUtil.Equals(t, "+")) { + if (t.equals("+")) { tree.Type = CalculateTreeType.Add; - } else if (CharUtil.Equals(t, "-")) { + } else if (t.equals("-")) { tree.Type = CalculateTreeType.Sub; } else { tree.Type = CalculateTreeType.Connect; } - tree.Nodes.add(this.visit(exprs.get(0))); - tree.Nodes.add(this.visit(exprs.get(1))); - tree.Start = context.start.getStartIndex(); - tree.End = context.stop.getStopIndex(); + tree.Nodes.add(exprs.get(0).accept(this)); + tree.Nodes.add(exprs.get(1).accept(this)); + tree.Start = context.getStart().getStartIndex(); + tree.End = context.getStop().getStopIndex(); tree.ConditionString = context.getText(); return tree; } - public CalculateTree visit_fun(ParserRuleContext context) { + private CalculateTree visit_fun(org.antlr.v4.runtime.ParserRuleContext context) { CalculateTree tree = new CalculateTree(); - tree.Start = context.start.getStartIndex(); - tree.End = context.stop.getStopIndex(); + tree.Start = context.getStart().getStartIndex(); + tree.End = context.getStop().getStopIndex(); tree.ConditionString = context.getText(); return tree; } @@ -562,7 +565,7 @@ public CalculateTree visitINT_fun(mathParser.INT_funContext context) { } @Override - public CalculateTree visitIsError_fun(mathParser.IsError_funContext context) { + public CalculateTree visitISERROR_fun(mathParser.ISERROR_funContext context) { return visit_fun(context); } @@ -602,7 +605,7 @@ public CalculateTree visitISNULL_fun(mathParser.ISNULL_funContext context) { } @Override - public CalculateTree visitIsNumber_fun(mathParser.IsNumber_funContext context) { + public CalculateTree visitISNUMBER_fun(mathParser.ISNUMBER_funContext context) { return visit_fun(context); } @@ -617,7 +620,7 @@ public CalculateTree visitISREGEX_fun(mathParser.ISREGEX_funContext context) { } @Override - public CalculateTree visitISTEXT_fun(mathParser.ISTEXT_funContext context) { + public CalculateTree visitIsText_fun(mathParser.IsText_funContext context) { return visit_fun(context); } diff --git a/java/src/main/java/toolgood/algorithm/math/mathLexer.java b/java/src/main/java/toolgood/algorithm/math/mathLexer.java index 8712b939c..e61b36093 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathLexer.java +++ b/java/src/main/java/toolgood/algorithm/math/mathLexer.java @@ -21,7 +21,7 @@ public class mathLexer extends Lexer { T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, SUB=29, NUM=30, STRING=31, NULL=32, - ERROR=33, UNIT=34, IF=35, IFERROR=36, IsNumber=37, ISTEXT=38, IsError=39, + ERROR=33, UNIT=34, IF=35, IFERROR=36, IsNumber=37, IsText=38, IsError=39, ISNONTEXT=40, ISLOGICAL=41, ISEVEN=42, ISODD=43, ISNULL=44, ISNULLORERROR=45, AND=46, OR=47, NOT=48, TRUE=49, FALSE=50, E=51, PI=52, DEC2BIN=53, DEC2HEX=54, DEC2OCT=55, HEX2BIN=56, HEX2DEC=57, HEX2OCT=58, OCT2BIN=59, OCT2DEC=60, @@ -71,7 +71,7 @@ private static String[] makeRuleNames() { "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "SUB", "NUM", "STRING", "NULL", "ERROR", "UNIT", - "IF", "IFERROR", "IsNumber", "ISTEXT", "IsError", "ISNONTEXT", "ISLOGICAL", + "IF", "IFERROR", "IsNumber", "IsText", "IsError", "ISNONTEXT", "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", "BIN2HEX", @@ -113,7 +113,7 @@ private static String[] makeLiteralNames() { "'/'", "'+'", "'&'", "'>'", "'>='", "'<'", "'<='", "'='", "'=='", "'==='", "'!=='", "'!='", "'<>'", "'&&'", "'||'", "'?'", "':'", "'{'", "'}'", "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'IsNumber'", - "'ISTEXT'", "'IsError'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", + "'IsText'", "'IsError'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", @@ -153,7 +153,7 @@ private static String[] makeSymbolicNames() { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "SUB", "NUM", "STRING", "NULL", "ERROR", - "UNIT", "IF", "IFERROR", "IsNumber", "ISTEXT", "IsError", "ISNONTEXT", + "UNIT", "IF", "IFERROR", "IsNumber", "IsText", "IsError", "ISNONTEXT", "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", diff --git a/java/src/main/java/toolgood/algorithm/math/mathParser.java b/java/src/main/java/toolgood/algorithm/math/mathParser.java index a5f03082e..cb18afc2d 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathParser.java +++ b/java/src/main/java/toolgood/algorithm/math/mathParser.java @@ -21,7 +21,7 @@ public class mathParser extends Parser { T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, SUB=29, NUM=30, STRING=31, NULL=32, - ERROR=33, UNIT=34, IF=35, IFERROR=36, IsNumber=37, ISTEXT=38, IsError=39, + ERROR=33, UNIT=34, IF=35, IFERROR=36, IsNumber=37, IsText=38, IsError=39, ISNONTEXT=40, ISLOGICAL=41, ISEVEN=42, ISODD=43, ISNULL=44, ISNULLORERROR=45, AND=46, OR=47, NOT=48, TRUE=49, FALSE=50, E=51, PI=52, DEC2BIN=53, DEC2HEX=54, DEC2OCT=55, HEX2BIN=56, HEX2DEC=57, HEX2OCT=58, OCT2BIN=59, OCT2DEC=60, @@ -73,7 +73,7 @@ private static String[] makeLiteralNames() { "'/'", "'+'", "'&'", "'>'", "'>='", "'<'", "'<='", "'='", "'=='", "'==='", "'!=='", "'!='", "'<>'", "'&&'", "'||'", "'?'", "':'", "'{'", "'}'", "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'IsNumber'", - "'ISTEXT'", "'IsError'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", + "'IsText'", "'IsError'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", @@ -113,7 +113,7 @@ private static String[] makeSymbolicNames() { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "SUB", "NUM", "STRING", "NULL", "ERROR", - "UNIT", "IF", "IFERROR", "IsNumber", "ISTEXT", "IsError", "ISNONTEXT", + "UNIT", "IF", "IFERROR", "IsNumber", "IsText", "IsError", "ISNONTEXT", "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", @@ -1197,15 +1197,15 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class ISTEXT_funContext extends ExprContext { - public TerminalNode ISTEXT() { return getToken(mathParser.ISTEXT, 0); } + public static class IsText_funContext extends ExprContext { + public TerminalNode IsText() { return getToken(mathParser.IsText, 0); } public ExprContext expr() { return getRuleContext(ExprContext.class,0); } - public ISTEXT_funContext(ExprContext ctx) { copyFrom(ctx); } + public IsText_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitISTEXT_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitIsText_fun(this); else return visitor.visitChildren(this); } } @@ -3800,11 +3800,11 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 6: { - _localctx = new ISTEXT_funContext(_localctx); + _localctx = new IsText_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(50); - match(ISTEXT); + match(IsText); setState(51); match(T__1); setState(52); @@ -9020,14 +9020,14 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 9: { - _localctx = new ISTEXT_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new IsText_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); setState(1841); if (!(precpred(_ctx, 335))) throw new FailedPredicateException(this, "precpred(_ctx, 335)"); setState(1842); match(T__0); setState(1843); - match(ISTEXT); + match(IsText); setState(1844); match(T__1); setState(1845); @@ -11448,7 +11448,7 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case IF: case IFERROR: case IsNumber: - case ISTEXT: + case IsText: case IsError: case ISNONTEXT: case ISLOGICAL: @@ -11694,7 +11694,7 @@ public static class Parameter2Context extends ParserRuleContext { public TerminalNode IF() { return getToken(mathParser.IF, 0); } public TerminalNode IFERROR() { return getToken(mathParser.IFERROR, 0); } public TerminalNode IsNumber() { return getToken(mathParser.IsNumber, 0); } - public TerminalNode ISTEXT() { return getToken(mathParser.ISTEXT, 0); } + public TerminalNode IsText() { return getToken(mathParser.IsText, 0); } public TerminalNode IsError() { return getToken(mathParser.IsError, 0); } public TerminalNode ISNONTEXT() { return getToken(mathParser.ISNONTEXT, 0); } public TerminalNode ISLOGICAL() { return getToken(mathParser.ISLOGICAL, 0); } diff --git a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java index e1e9a1f4d..0232c7db7 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java +++ b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java @@ -458,12 +458,12 @@ public interface mathVisitor extends ParseTreeVisitor { */ T visitLOG10_fun(mathParser.LOG10_funContext ctx); /** - * Visit a parse tree produced by the {@code ISTEXT_fun} + * Visit a parse tree produced by the {@code IsText_fun} * labeled alternative in {@link mathParser#expr}. * @param ctx the parse tree * @return the visitor result */ - T visitISTEXT_fun(mathParser.ISTEXT_funContext ctx); + T visitIsText_fun(mathParser.IsText_funContext ctx); /** * Visit a parse tree produced by the {@code NEGBINOMDIST_fun} * labeled alternative in {@link mathParser#expr}. diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java index 7864d48ec..fe2d6ee3f 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java @@ -92,18 +92,18 @@ public void IsNumber_test() } @Test - public void ISTEXT_test() + public void IsText_test() { AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("if(ISTEXT(1),1,2)", 0); + int t = engine.TryEvaluate("if(IsText(1),1,2)", 0); assertEquals(2, t); - t = engine.TryEvaluate("if(ISTEXT('e'),1,2)", 0); + t = engine.TryEvaluate("if(IsText('e'),1,2)", 0); assertEquals(1, t); - t = engine.TryEvaluate("if(ISTEXT('11'),1,2)", 0); + t = engine.TryEvaluate("if(IsText('11'),1,2)", 0); assertEquals(1, t); - t = engine.TryEvaluate("if(ISTEXT('2016-1-2'),1,2)", 0); + t = engine.TryEvaluate("if(IsText('2016-1-2'),1,2)", 0); assertEquals(1, t); } From 4dd0b6c8dfd49d89ffa451e805e590297e1ebdbd Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 09:05:28 +0800 Subject: [PATCH 22/98] fix --- .../toolgood/algorithm/math/mathLexer.java | 10 +-- .../toolgood/algorithm/math/mathParser.java | 68 +++++++++---------- .../toolgood/algorithm/math/mathVisitor.java | 12 ++-- 3 files changed, 45 insertions(+), 45 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/math/mathLexer.java b/java/src/main/java/toolgood/algorithm/math/mathLexer.java index e61b36093..dfaec60c2 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathLexer.java +++ b/java/src/main/java/toolgood/algorithm/math/mathLexer.java @@ -21,7 +21,7 @@ public class mathLexer extends Lexer { T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, SUB=29, NUM=30, STRING=31, NULL=32, - ERROR=33, UNIT=34, IF=35, IFERROR=36, IsNumber=37, IsText=38, IsError=39, + ERROR=33, UNIT=34, IF=35, IFERROR=36, ISNUMBER=37, ISTEXT=38, ISERROR=39, ISNONTEXT=40, ISLOGICAL=41, ISEVEN=42, ISODD=43, ISNULL=44, ISNULLORERROR=45, AND=46, OR=47, NOT=48, TRUE=49, FALSE=50, E=51, PI=52, DEC2BIN=53, DEC2HEX=54, DEC2OCT=55, HEX2BIN=56, HEX2DEC=57, HEX2OCT=58, OCT2BIN=59, OCT2DEC=60, @@ -71,7 +71,7 @@ private static String[] makeRuleNames() { "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "SUB", "NUM", "STRING", "NULL", "ERROR", "UNIT", - "IF", "IFERROR", "IsNumber", "IsText", "IsError", "ISNONTEXT", "ISLOGICAL", + "IF", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", "ISNONTEXT", "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", "BIN2HEX", @@ -112,8 +112,8 @@ private static String[] makeLiteralNames() { null, "'.'", "'('", "')'", "','", "'['", "']'", "'!'", "'%'", "'*'", "'/'", "'+'", "'&'", "'>'", "'>='", "'<'", "'<='", "'='", "'=='", "'==='", "'!=='", "'!='", "'<>'", "'&&'", "'||'", "'?'", "':'", "'{'", "'}'", - "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'IsNumber'", - "'IsText'", "'IsError'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", + "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'ISNUMBER'", + "'ISTEXT'", "'ISERROR'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", @@ -153,7 +153,7 @@ private static String[] makeSymbolicNames() { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "SUB", "NUM", "STRING", "NULL", "ERROR", - "UNIT", "IF", "IFERROR", "IsNumber", "IsText", "IsError", "ISNONTEXT", + "UNIT", "IF", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", "ISNONTEXT", "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", diff --git a/java/src/main/java/toolgood/algorithm/math/mathParser.java b/java/src/main/java/toolgood/algorithm/math/mathParser.java index cb18afc2d..cb0218c31 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathParser.java +++ b/java/src/main/java/toolgood/algorithm/math/mathParser.java @@ -21,7 +21,7 @@ public class mathParser extends Parser { T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, SUB=29, NUM=30, STRING=31, NULL=32, - ERROR=33, UNIT=34, IF=35, IFERROR=36, IsNumber=37, IsText=38, IsError=39, + ERROR=33, UNIT=34, IF=35, IFERROR=36, ISNUMBER=37, ISTEXT=38, ISERROR=39, ISNONTEXT=40, ISLOGICAL=41, ISEVEN=42, ISODD=43, ISNULL=44, ISNULLORERROR=45, AND=46, OR=47, NOT=48, TRUE=49, FALSE=50, E=51, PI=52, DEC2BIN=53, DEC2HEX=54, DEC2OCT=55, HEX2BIN=56, HEX2DEC=57, HEX2OCT=58, OCT2BIN=59, OCT2DEC=60, @@ -72,8 +72,8 @@ private static String[] makeLiteralNames() { null, "'.'", "'('", "')'", "','", "'['", "']'", "'!'", "'%'", "'*'", "'/'", "'+'", "'&'", "'>'", "'>='", "'<'", "'<='", "'='", "'=='", "'==='", "'!=='", "'!='", "'<>'", "'&&'", "'||'", "'?'", "':'", "'{'", "'}'", - "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'IsNumber'", - "'IsText'", "'IsError'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", + "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'ISNUMBER'", + "'ISTEXT'", "'ISERROR'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", @@ -113,7 +113,7 @@ private static String[] makeSymbolicNames() { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "SUB", "NUM", "STRING", "NULL", "ERROR", - "UNIT", "IF", "IFERROR", "IsNumber", "IsText", "IsError", "ISNONTEXT", + "UNIT", "IF", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", "ISNONTEXT", "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", @@ -839,18 +839,18 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class IsError_funContext extends ExprContext { - public TerminalNode IsError() { return getToken(mathParser.IsError, 0); } + public static class ISERROR_funContext extends ExprContext { + public TerminalNode ISERROR() { return getToken(mathParser.ISERROR, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public IsError_funContext(ExprContext ctx) { copyFrom(ctx); } + public ISERROR_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitIsError_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitISERROR_fun(this); else return visitor.visitChildren(this); } } @@ -1197,15 +1197,15 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class IsText_funContext extends ExprContext { - public TerminalNode IsText() { return getToken(mathParser.IsText, 0); } + public static class ISTEXT_funContext extends ExprContext { + public TerminalNode ISTEXT() { return getToken(mathParser.ISTEXT, 0); } public ExprContext expr() { return getRuleContext(ExprContext.class,0); } - public IsText_funContext(ExprContext ctx) { copyFrom(ctx); } + public ISTEXT_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitIsText_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitISTEXT_fun(this); else return visitor.visitChildren(this); } } @@ -2394,15 +2394,15 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class IsNumber_funContext extends ExprContext { - public TerminalNode IsNumber() { return getToken(mathParser.IsNumber, 0); } + public static class ISNUMBER_funContext extends ExprContext { + public TerminalNode ISNUMBER() { return getToken(mathParser.ISNUMBER, 0); } public ExprContext expr() { return getRuleContext(ExprContext.class,0); } - public IsNumber_funContext(ExprContext ctx) { copyFrom(ctx); } + public ISNUMBER_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitIsNumber_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitISNUMBER_fun(this); else return visitor.visitChildren(this); } } @@ -3785,11 +3785,11 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 5: { - _localctx = new IsNumber_funContext(_localctx); + _localctx = new ISNUMBER_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(45); - match(IsNumber); + match(ISNUMBER); setState(46); match(T__1); setState(47); @@ -3800,11 +3800,11 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 6: { - _localctx = new IsText_funContext(_localctx); + _localctx = new ISTEXT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(50); - match(IsText); + match(ISTEXT); setState(51); match(T__1); setState(52); @@ -3815,11 +3815,11 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 7: { - _localctx = new IsError_funContext(_localctx); + _localctx = new ISERROR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; setState(55); - match(IsError); + match(ISERROR); setState(56); match(T__1); setState(57); @@ -9004,14 +9004,14 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 8: { - _localctx = new IsNumber_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new ISNUMBER_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); setState(1836); if (!(precpred(_ctx, 336))) throw new FailedPredicateException(this, "precpred(_ctx, 336)"); setState(1837); match(T__0); setState(1838); - match(IsNumber); + match(ISNUMBER); setState(1839); match(T__1); setState(1840); @@ -9020,14 +9020,14 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 9: { - _localctx = new IsText_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new ISTEXT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); setState(1841); if (!(precpred(_ctx, 335))) throw new FailedPredicateException(this, "precpred(_ctx, 335)"); setState(1842); match(T__0); setState(1843); - match(IsText); + match(ISTEXT); setState(1844); match(T__1); setState(1845); @@ -9100,14 +9100,14 @@ private ExprContext expr(int _p) throws RecognitionException { break; case 14: { - _localctx = new IsError_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new ISERROR_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); setState(1866); if (!(precpred(_ctx, 330))) throw new FailedPredicateException(this, "precpred(_ctx, 330)"); setState(1867); match(T__0); setState(1868); - match(IsError); + match(ISERROR); setState(1869); match(T__1); setState(1871); @@ -11447,9 +11447,9 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case UNIT: case IF: case IFERROR: - case IsNumber: - case IsText: - case IsError: + case ISNUMBER: + case ISTEXT: + case ISERROR: case ISNONTEXT: case ISLOGICAL: case ISEVEN: @@ -11693,9 +11693,9 @@ public static class Parameter2Context extends ParserRuleContext { public TerminalNode E() { return getToken(mathParser.E, 0); } public TerminalNode IF() { return getToken(mathParser.IF, 0); } public TerminalNode IFERROR() { return getToken(mathParser.IFERROR, 0); } - public TerminalNode IsNumber() { return getToken(mathParser.IsNumber, 0); } - public TerminalNode IsText() { return getToken(mathParser.IsText, 0); } - public TerminalNode IsError() { return getToken(mathParser.IsError, 0); } + public TerminalNode ISNUMBER() { return getToken(mathParser.ISNUMBER, 0); } + public TerminalNode ISTEXT() { return getToken(mathParser.ISTEXT, 0); } + public TerminalNode ISERROR() { return getToken(mathParser.ISERROR, 0); } public TerminalNode ISNONTEXT() { return getToken(mathParser.ISNONTEXT, 0); } public TerminalNode ISLOGICAL() { return getToken(mathParser.ISLOGICAL, 0); } public TerminalNode ISEVEN() { return getToken(mathParser.ISEVEN, 0); } diff --git a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java index 0232c7db7..d107918d4 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java +++ b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java @@ -283,12 +283,12 @@ public interface mathVisitor extends ParseTreeVisitor { */ T visitWORKDAY_fun(mathParser.WORKDAY_funContext ctx); /** - * Visit a parse tree produced by the {@code IsError_fun} + * Visit a parse tree produced by the {@code ISERROR_fun} * labeled alternative in {@link mathParser#expr}. * @param ctx the parse tree * @return the visitor result */ - T visitIsError_fun(mathParser.IsError_funContext ctx); + T visitISERROR_fun(mathParser.ISERROR_funContext ctx); /** * Visit a parse tree produced by the {@code BIN2DEC_fun} * labeled alternative in {@link mathParser#expr}. @@ -458,12 +458,12 @@ public interface mathVisitor extends ParseTreeVisitor { */ T visitLOG10_fun(mathParser.LOG10_funContext ctx); /** - * Visit a parse tree produced by the {@code IsText_fun} + * Visit a parse tree produced by the {@code ISTEXT_fun} * labeled alternative in {@link mathParser#expr}. * @param ctx the parse tree * @return the visitor result */ - T visitIsText_fun(mathParser.IsText_funContext ctx); + T visitISTEXT_fun(mathParser.ISTEXT_funContext ctx); /** * Visit a parse tree produced by the {@code NEGBINOMDIST_fun} * labeled alternative in {@link mathParser#expr}. @@ -1018,12 +1018,12 @@ public interface mathVisitor extends ParseTreeVisitor { */ T visitNORMSDIST_fun(mathParser.NORMSDIST_funContext ctx); /** - * Visit a parse tree produced by the {@code IsNumber_fun} + * Visit a parse tree produced by the {@code ISNUMBER_fun} * labeled alternative in {@link mathParser#expr}. * @param ctx the parse tree * @return the visitor result */ - T visitIsNumber_fun(mathParser.IsNumber_funContext ctx); + T visitISNUMBER_fun(mathParser.ISNUMBER_funContext ctx); /** * Visit a parse tree produced by the {@code LASTINDEXOF_fun} * labeled alternative in {@link mathParser#expr}. From 551a0d5810fd7d0abeba19306a68738040d518d9 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 09:17:25 +0800 Subject: [PATCH 23/98] fix --- .../algorithm/internals/visitors/MathSplitVisitor2.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java index 658aac880..5775887f3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java @@ -10,6 +10,8 @@ import toolgood.algorithm.enums.CalculateTreeType; import toolgood.algorithm.internals.CalculateTree; import toolgood.algorithm.math.mathParser; +import toolgood.algorithm.math.mathParser.IsError_funContext; +import toolgood.algorithm.math.mathParser.IsNumber_funContext; import toolgood.algorithm.math.mathVisitor; public class MathSplitVisitor2 extends AbstractParseTreeVisitor implements mathVisitor { @@ -1238,4 +1240,6 @@ public CalculateTree visitLOOKFLOOR_fun(mathParser.LOOKFLOOR_funContext context) public CalculateTree visitLOOKCEILING_fun(mathParser.LOOKCEILING_funContext context) { return visit_fun(context); } + + } From 063ca804df7a3850a6f5df829459794d9e950704 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 09:30:07 +0800 Subject: [PATCH 24/98] fix --- .../java/toolgood/algorithm/OperandImpl.java | 4 +- .../functions/mathbase/Function_ABS.java | 2 +- .../functions/mathbase/Function_CEILING.java | 2 +- .../functions/mathbase/Function_COMBIN.java | 2 +- .../functions/mathbase/Function_FLOOR.java | 2 +- .../functions/mathbase/Function_SQRT.java | 2 +- .../functions/mathbase/Function_SQRTPI.java | 2 +- .../functions/mathbase/Function_TRUNC.java | 2 +- .../functions/operator/Function_AND.java | 2 +- .../functions/operator/Function_AND_N.java | 2 +- .../functions/operator/Function_Add.java | 2 +- .../functions/operator/Function_Connect.java | 2 +- .../functions/operator/Function_Div.java | 2 +- .../functions/operator/Function_Mod.java | 2 +- .../functions/operator/Function_Mul.java | 2 +- .../functions/operator/Function_OR.java | 2 +- .../functions/operator/Function_OR_N.java | 2 +- .../functions/operator/Function_Sub.java | 2 +- .../functions/string/Function_ASC.java | 2 +- .../functions/string/Function_CHAR.java | 2 +- .../functions/string/Function_CLEAN.java | 6 +-- .../functions/string/Function_CODE.java | 2 +- .../string/Function_CONCATENATE.java | 2 +- .../functions/string/Function_EXACT.java | 2 +- .../functions/string/Function_FIND.java | 2 +- .../functions/string/Function_JIS.java | 2 +- .../functions/string/Function_LEFT.java | 2 +- .../functions/string/Function_LEN.java | 2 +- .../functions/string/Function_LOWER.java | 2 +- .../functions/string/Function_MID.java | 2 +- .../functions/string/Function_PROPER.java | 2 +- .../functions/string/Function_REPLACE.java | 2 +- .../functions/string/Function_REPT.java | 2 +- .../functions/string/Function_RIGHT.java | 2 +- .../functions/string/Function_RMB.java | 4 +- .../functions/string/Function_SEARCH.java | 2 +- .../functions/string/Function_SUBSTITUTE.java | 2 +- .../functions/string/Function_T.java | 2 +- .../functions/string/Function_TEXT.java | 2 +- .../functions/string/Function_TRIM.java | 2 +- .../functions/string/Function_UPPER.java | 2 +- .../functions/string/Function_VALUE.java | 2 +- .../functions/value/Function_Array.java | 2 +- .../functions/value/Function_ArrayJson.java | 2 +- .../value/Function_ArrayJsonItem.java | 2 +- .../functions/value/Function_DiyFunction.java | 2 +- .../functions/value/Function_ERROR.java | 2 +- .../value/Function_GetJsonValue.java | 2 +- .../functions/value/Function_JSON.java | 2 +- .../functions/value/Function_NUM.java | 2 +- .../functions/value/Function_PARAM.java | 2 +- .../functions/value/Function_PARAMETER.java | 2 +- .../functions/value/Function_Value.java | 2 +- .../visitors/MathFunctionVisitor.java | 43 ++++++++++--------- 54 files changed, 79 insertions(+), 78 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/OperandImpl.java b/java/src/main/java/toolgood/algorithm/OperandImpl.java index 674af09dc..50d31ce33 100644 --- a/java/src/main/java/toolgood/algorithm/OperandImpl.java +++ b/java/src/main/java/toolgood/algorithm/OperandImpl.java @@ -320,10 +320,10 @@ public String toString() { case '\0': sb.append("\\0"); break; - case '\v': + case '\u000b': sb.append("\\v"); break; - case '\a': + case '\u0007': sb.append("\\a"); break; case '\b': diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java index a64328cb1..09dd0c3aa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java @@ -11,7 +11,7 @@ public Function_ABS(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Abs"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java index 69238a186..bfedabfce 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java @@ -11,7 +11,7 @@ public Function_CEILING(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Ceiling", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java index 3d7b40a71..bf4abc90d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java @@ -11,7 +11,7 @@ public Function_COMBIN(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Combin", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java index eb4c73eb2..1ce98ddb6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java @@ -11,7 +11,7 @@ public Function_FLOOR(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Floor", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java index 7954e4eb5..1d8c89afb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java @@ -11,7 +11,7 @@ public Function_SQRT(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotNumber()) { args1 = args1.toNumber("Function '{0}' parameter is error!", "Sqrt"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java index e63826005..fa66546c8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java @@ -10,7 +10,7 @@ public Function_SQRTPI(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "SqrtPI"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java index b84f5f4ee..07c55f32c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java @@ -10,7 +10,7 @@ public Function_TRUNC(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Trunc"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java index f5c75e91e..11af2b435 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java @@ -11,7 +11,7 @@ public Function_AND(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { // 程序 && and || or 与 excel的 AND(x,y) OR(x,y) 有区别 // 在excel内 AND(x,y) OR(x,y) 先报错, // 在程序中,&& and 有true 直接返回true 就不会检测下一个会不会报错 diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java index 9f9534382..c062e4967 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java @@ -11,7 +11,7 @@ public Function_AND_N(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { int index = 1; boolean b = true; for (FunctionBase item : funcs) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java index f437981fb..effcac716 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java @@ -16,7 +16,7 @@ public Function_Add(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java index 0fbc4ee0c..f5f9e9607 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java @@ -11,7 +11,7 @@ public Function_Connect(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java index 25c22c841..056f4dbdb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java @@ -16,7 +16,7 @@ public Function_Div(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java index 69387715c..7f2e2c701 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java @@ -16,7 +16,7 @@ public Function_Mod(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java index 0de750283..10cedc510 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java @@ -16,7 +16,7 @@ public Function_Mul(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java index 7a382dda2..873927e43 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java @@ -11,7 +11,7 @@ public Function_OR(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { // 程序 && and || or 与 excel的 AND(x,y) OR(x,y) 有区别 // 在excel内 AND(x,y) OR(x,y) 先报错, // 在程序中,&& and 有true 直接返回true 就不会检测下一个会不会报错 diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java index 28fbb8df0..e51a79207 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java @@ -11,7 +11,7 @@ public Function_OR_N(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { int index = 1; boolean b = false; for (FunctionBase item : funcs) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java index 65b724f33..09ea31b61 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java @@ -16,7 +16,7 @@ public Function_Sub(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java index a614c1625..77647c09d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java @@ -11,7 +11,7 @@ public Function_ASC(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "ASC"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java index 68d149a19..ba03ae40f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java @@ -11,7 +11,7 @@ public Function_CHAR(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "Char"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java index 0679a9aeb..54f67401b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java @@ -11,7 +11,7 @@ public Function_CLEAN(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "Clean"); @@ -23,7 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "CODE"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java index fe62c3cea..dc5850e3d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java @@ -11,7 +11,7 @@ public Function_CONCATENATE(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { if (funcs.length == 0) { return Operand.Create(""); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java index 0315b50cb..d3e410004 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java @@ -11,7 +11,7 @@ public Function_EXACT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "EXACT", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java index 3eb517d0f..1c9dacfcf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java @@ -11,7 +11,7 @@ public Function_FIND(FunctionBase func1, FunctionBase func2, FunctionBase func3) } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Find", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java index 45e9b2e34..996436b08 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java @@ -11,7 +11,7 @@ public Function_JIS(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "JIS"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java index 357483248..9e55d08f3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java @@ -11,7 +11,7 @@ public Function_LEFT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Left", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java index f07546298..8d86338c4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java @@ -11,7 +11,7 @@ public Function_LEN(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "Len"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java index 8fade3a10..202d95626 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java @@ -11,7 +11,7 @@ public Function_LOWER(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "Lower"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java index 29da302e0..37c2aec1a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java @@ -11,7 +11,7 @@ public Function_MID(FunctionBase func1, FunctionBase func2, FunctionBase func3) } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Mid", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java index 7e8184ef1..b1af5d0b8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java @@ -11,7 +11,7 @@ public Function_PROPER(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "Proper"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java index 792cdd5e0..93dba95d1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java @@ -11,7 +11,7 @@ public Function_REPLACE(FunctionBase func1, FunctionBase func2, FunctionBase fun } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Replace", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java index ac8f0c883..e868c6b7e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java @@ -11,7 +11,7 @@ public Function_REPT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Rept", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java index f8cc89d5c..83c0217af 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java @@ -15,7 +15,7 @@ public Function_RIGHT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Right", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java index b06910fe4..6d181fcd2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java @@ -15,7 +15,7 @@ public Function_RMB(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter is error!", "RMB"); @@ -26,7 +26,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction0)[0A-E]*((?=[1-9])|(?<-z>(?=[F-L\.]|$))))|((?[F-L])(?0)[0A-L]*((?=[1-9])|(?<-z>(?=[\.]|$))))"); + private static String F_base_ToChineseRMB(double x) { String s = String.format(Locale.US, "%#.2f", x); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java index 05763330d..15f9ae1f3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java @@ -11,7 +11,7 @@ public Function_SEARCH(FunctionBase func1, FunctionBase func2, FunctionBase func } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Search", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java index a2a53092e..3490157b8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java @@ -11,7 +11,7 @@ public Function_SUBSTITUTE(FunctionBase func1, FunctionBase func2, FunctionBase } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Substitute", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java index fa30d551d..915322099 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java @@ -11,7 +11,7 @@ public Function_T(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsText()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java index fc8e8018c..3d42d3238 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java @@ -15,7 +15,7 @@ public Function_TEXT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java index 773144d73..d4da3f64e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java @@ -11,7 +11,7 @@ public Function_TRIM(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "Trim"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java index 306f129dc..d23180679 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java @@ -11,7 +11,7 @@ public Function_UPPER(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "Upper"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java index 92116eea9..7ca97d222 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java @@ -15,7 +15,7 @@ public Function_VALUE(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNumber()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java index 1086ff05e..3fbce7f43 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java @@ -14,7 +14,7 @@ public Function_Array(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java index 781e46d75..c6401eeca 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java @@ -11,7 +11,7 @@ public Function_ArrayJson(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { OperandKeyValueList result = new OperandKeyValueList(); for (FunctionBase item : funcs) { Operand o = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java index 90ad8ccf1..29e3ba968 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java @@ -14,7 +14,7 @@ public Function_ArrayJsonItem(String key, FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { KeyValue keyValue = new KeyValue(); keyValue.setKey(key); keyValue.setValue(func1.Evaluate(work, tempParameter)); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java index 294e99c4e..b761921dd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java @@ -17,7 +17,7 @@ public Function_DiyFunction(String name, FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java index 2682bc28a..1bd831283 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java @@ -11,7 +11,7 @@ public Function_ERROR(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Error", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java index 71bfdb73a..9b7ec2f2e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java @@ -11,7 +11,7 @@ public Function_GetJsonValue(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand obj = func1.Evaluate(work, tempParameter); if (obj.IsError()) { return obj; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java index 31d491d8e..46a399655 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java @@ -11,7 +11,7 @@ public Function_JSON(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java index a97e3f9ea..53e17ad95 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java @@ -14,7 +14,7 @@ public Function_NUM(double func1, String func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { var dict = NumberUnitTypeHelper.GetUnitTypedict(); var d2 = NumberUnitTypeHelper.TransformationUnit(d, dict.get(unit), work.getDistanceUnit(), work.getAreaUnit(), work.getVolumeUnit(), work.getMassUnit()); return Operand.Create(d2); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java index 5ef7f48cd..84527c373 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java @@ -11,7 +11,7 @@ public Function_PARAM(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Param", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java index 480c91758..bd0c0c1f3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java @@ -19,7 +19,7 @@ public Function_PARAMETER(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { String txt = name; if (txt == null || txt.isEmpty()) { Operand args1 = func1.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java index 7c0000d21..eb3fbfc0f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java @@ -19,7 +19,7 @@ public Function_Value(Operand value, String showName) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiBiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { return _value; } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java index f4477f55c..36edc3cfd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java @@ -2033,8 +2033,8 @@ public FunctionBase visitSTRING_fun(mathParser.STRING_funContext context) else if (c2 == 'r') sb.append('\r'); else if (c2 == 't') sb.append('\t'); else if (c2 == '0') sb.append('\0'); - else if (c2 == 'v') sb.append('\v'); - else if (c2 == 'a') sb.append('\a'); + else if (c2 == 'v') sb.append('\u000b'); + else if (c2 == 'a') sb.append('\u0007'); else if (c2 == 'b') sb.append('\b'); else if (c2 == 'f') sb.append('\f'); else sb.append(opd.charAt(index++)); @@ -2127,37 +2127,38 @@ public FunctionBase visitArrayJson_fun(mathParser.ArrayJson_funContext context) public FunctionBase visitArrayJson(mathParser.ArrayJsonContext context) { - string keyName = null; + String keyName = null; //KeyValue keyValue = new KeyValue(); if (context.NUM() != null) { - if (int.TryParse(context.NUM().GetText(), out int key)) { + try { + int key = Integer.parseInt(context.NUM().GetText()); keyName = key.ToString(); - } else { + } catch (NumberFormatException e) { return new Function_Value(Operand.Error("Json key '" + context.NUM().GetText() + "' is error!")); } } if (context.STRING() != null) { - var opd = context.STRING().GetText(); - var sb = new StringBuilder(opd.Length - 2); + String opd = context.STRING().GetText(); + StringBuilder sb = new StringBuilder(opd.length() - 2); int index = 1; - while (index < opd.Length - 1) { - var c = opd[index++]; + while (index < opd.length() - 1) { + char c = opd.charAt(index++); if (c == '\\') { - var c2 = opd[index++]; - if (c2 == 'n') sb.Append('\n'); - else if (c2 == 'r') sb.Append('\r'); - else if (c2 == 't') sb.Append('\t'); - else if (c2 == '0') sb.Append('\0'); - else if (c2 == 'v') sb.Append('\v'); - else if (c2 == 'a') sb.Append('\a'); - else if (c2 == 'b') sb.Append('\b'); - else if (c2 == 'f') sb.Append('\f'); - else sb.Append(opd[index++]); + char c2 = opd.charAt(index++); + if (c2 == 'n') sb.append('\n'); + else if (c2 == 'r') sb.append('\r'); + else if (c2 == 't') sb.append('\t'); + else if (c2 == '0') sb.append('\0'); + else if (c2 == 'v') sb.append('\u000b'); + else if (c2 == 'a') sb.append('\u0007'); + else if (c2 == 'b') sb.append('\b'); + else if (c2 == 'f') sb.append('\f'); + else sb.append(opd.charAt(index++)); } else { - sb.Append(c); + sb.append(c); } } - keyName = sb.ToString(); + keyName = sb.toString(); } if (context.parameter2() != null) { keyName = context.parameter2().GetText(); From a3458763808a9c9baa11995f5e7aa43308d5c727 Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 09:39:04 +0800 Subject: [PATCH 25/98] fix --- .../functions/csharp/Function_ENDSWITH.java | 2 +- .../functions/csharp/Function_GUID.java | 2 +- .../functions/csharp/Function_HAS.java | 2 +- .../functions/csharp/Function_HASVALUE.java | 2 +- .../functions/csharp/Function_INDEXOF.java | 2 +- .../functions/csharp/Function_ISREGEX.java | 2 +- .../functions/csharp/Function_JOIN.java | 2 +- .../csharp/Function_LASTINDEXOF.java | 2 +- .../csharp/Function_LOOKCEILING.java | 2 +- .../functions/csharp/Function_LOOKFLOOR.java | 2 +- .../functions/csharp/Function_REGEX.java | 2 +- .../csharp/Function_REGEXREPALCE.java | 2 +- .../functions/csharp/Function_REMOVEEND.java | 2 +- .../csharp/Function_REMOVESTART.java | 2 +- .../functions/csharp/Function_SPLIT.java | 2 +- .../functions/csharp/Function_STARTSWITH.java | 2 +- .../functions/csharp/Function_SUBSTRING.java | 2 +- .../functions/csharp/Function_TRIMEND.java | 2 +- .../functions/csharp/Function_TRIMSTART.java | 2 +- .../csharpsecurity/Function_HMACMD5.java | 2 +- .../csharpsecurity/Function_HMACSHA1.java | 2 +- .../csharpsecurity/Function_HMACSHA256.java | 2 +- .../csharpsecurity/Function_HMACSHA512.java | 2 +- .../csharpsecurity/Function_MD5.java | 2 +- .../csharpsecurity/Function_SHA1.java | 2 +- .../csharpsecurity/Function_SHA256.java | 2 +- .../csharpsecurity/Function_SHA512.java | 2 +- .../csharpweb/Function_BASE64TOTEXT.java | 2 +- .../csharpweb/Function_BASE64URLTOTEXT.java | 2 +- .../csharpweb/Function_HTMLDECODE.java | 2 +- .../csharpweb/Function_HTMLENCODE.java | 2 +- .../csharpweb/Function_TEXTTOBASE64.java | 2 +- .../csharpweb/Function_TEXTTOBASE64URL.java | 2 +- .../csharpweb/Function_URLDECODE.java | 2 +- .../csharpweb/Function_URLENCODE.java | 2 +- .../functions/datetimes/Function_ADDDAYS.java | 2 +- .../datetimes/Function_ADDHOURS.java | 2 +- .../datetimes/Function_ADDMINUTES.java | 2 +- .../datetimes/Function_ADDMONTHS.java | 2 +- .../datetimes/Function_ADDSECONDS.java | 2 +- .../datetimes/Function_ADDYEARS.java | 2 +- .../functions/datetimes/Function_DATE.java | 2 +- .../functions/datetimes/Function_DATEDIF.java | 2 +- .../datetimes/Function_DATEVALUE.java | 2 +- .../functions/datetimes/Function_DAY.java | 2 +- .../functions/datetimes/Function_DAYS360.java | 2 +- .../functions/datetimes/Function_EDATE.java | 2 +- .../functions/datetimes/Function_EOMONTH.java | 2 +- .../functions/datetimes/Function_HOUR.java | 2 +- .../functions/datetimes/Function_MINUTE.java | 2 +- .../functions/datetimes/Function_MONTH.java | 2 +- .../datetimes/Function_NETWORKDAYS.java | 2 +- .../functions/datetimes/Function_NOW.java | 2 +- .../functions/datetimes/Function_SECOND.java | 2 +- .../functions/datetimes/Function_TIME.java | 2 +- .../datetimes/Function_TIMESTAMP.java | 2 +- .../datetimes/Function_TIMEVALUE.java | 2 +- .../functions/datetimes/Function_TODAY.java | 2 +- .../functions/datetimes/Function_WEEKDAY.java | 2 +- .../functions/datetimes/Function_WEEKNUM.java | 2 +- .../functions/datetimes/Function_WORKDAY.java | 2 +- .../functions/mathbase/Function_ABS.java | 12 +++++----- .../functions/mathbase/Function_COMBIN.java | 24 +++++++++---------- .../functions/mathbase/Function_EVEN.java | 1 + .../functions/mathbase/Function_EXP.java | 1 + .../mathbase/Function_FACTDOUBLE.java | 1 + .../functions/mathbase/Function_FIXED.java | 2 ++ .../functions/mathbase/Function_GCD.java | 2 ++ .../functions/mathbase/Function_PERMUT.java | 1 + .../functions/mathbase/Function_PRODUCT.java | 2 ++ 70 files changed, 89 insertions(+), 79 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java index 2dfafe364..660ccaed4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java @@ -13,7 +13,7 @@ public Function_ENDSWITH(FunctionBase func1, FunctionBase func2, FunctionBase fu } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "EndsWith", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java index 778c7e188..a3f16ade9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java @@ -12,7 +12,7 @@ public Function_GUID() { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { return Operand.Create(UUID.randomUUID().toString()); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java index baa03726c..2e358c893 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java @@ -13,7 +13,7 @@ public Function_HAS(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java index ef31066df..a9ea2092b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java @@ -13,7 +13,7 @@ public Function_HASVALUE(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java index c57d487e8..5abfcf792 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java @@ -13,7 +13,7 @@ public Function_INDEXOF(FunctionBase func1, FunctionBase func2, FunctionBase fun } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IndexOf", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java index acef623fa..5645436d3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java @@ -14,7 +14,7 @@ public Function_ISREGEX(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IsRegex", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java index 24602f931..fd4be34d3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java @@ -15,7 +15,7 @@ public Function_JOIN(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java index c22500020..f045d8cd9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java @@ -13,7 +13,7 @@ public Function_LASTINDEXOF(FunctionBase func1, FunctionBase func2, FunctionBase } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "LastIndexOf", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java index 3c44f7823..57488bae3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java @@ -18,7 +18,7 @@ public Function_LOOKCEILING(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LookCeiling", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java index 503a6a849..24882d9c5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java @@ -17,7 +17,7 @@ public Function_LOOKFLOOR(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LookFloor", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java index 38373e078..0247d5dc6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java @@ -15,7 +15,7 @@ public Function_REGEX(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Regex", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java index 807bc83e3..8eddb8c27 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java @@ -14,7 +14,7 @@ public Function_REGEXREPALCE(FunctionBase func1, FunctionBase func2, FunctionBas } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "RegexReplace", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java index d05e7a3b9..1a41a1031 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java @@ -13,7 +13,7 @@ public Function_REMOVEEND(FunctionBase func1, FunctionBase func2, FunctionBase f } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "RemoveEnd", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java index 7cee48934..4057e3999 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java @@ -13,7 +13,7 @@ public Function_REMOVESTART(FunctionBase func1, FunctionBase func2, FunctionBase } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "RemoveStart", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java index 23edf0d44..d4f15f9ff 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java @@ -13,7 +13,7 @@ public Function_SPLIT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Split", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java index 05d99056e..da0ab5362 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java @@ -13,7 +13,7 @@ public Function_STARTSWITH(FunctionBase func1, FunctionBase func2, FunctionBase } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "StartsWith", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java index 15d878d36..7ad9ed122 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java @@ -13,7 +13,7 @@ public Function_SUBSTRING(FunctionBase func1, FunctionBase func2, FunctionBase f } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Substring", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java index 9387e6bab..39f6285c4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java @@ -13,7 +13,7 @@ public Function_TRIMEND(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TrimEnd", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java index 49da42774..3ffb6aaf8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java @@ -13,7 +13,7 @@ public Function_TRIMSTART(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TrimStart", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java index 3d85b69e3..b2a83aa29 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java @@ -17,7 +17,7 @@ public Function_HMACMD5(FunctionBase func1, FunctionBase func2, FunctionBase fun } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HmacMD5", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java index 23c5c6b98..8eac96f26 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java @@ -17,7 +17,7 @@ public Function_HMACSHA1(FunctionBase func1, FunctionBase func2, FunctionBase fu } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HmacSHA1", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java index f0ac93ba9..aff1f910c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java @@ -17,7 +17,7 @@ public Function_HMACSHA256(FunctionBase func1, FunctionBase func2, FunctionBase } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HmacSHA256", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java index 1e841918e..8eca26c44 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java @@ -17,7 +17,7 @@ public Function_HMACSHA512(FunctionBase func1, FunctionBase func2, FunctionBase } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HmacSHA512", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java index 1afc7751a..c02e4bd9d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java @@ -15,7 +15,7 @@ public Function_MD5(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "MD5", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java index 2590c615c..9df8d58ce 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java @@ -15,7 +15,7 @@ public Function_SHA1(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "SHA1", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java index 9381f8123..bd162c646 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java @@ -15,7 +15,7 @@ public Function_SHA256(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "SHA256", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java index 024c2c3ef..3acaf64e0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java @@ -15,7 +15,7 @@ public Function_SHA512(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "SHA512", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java index bdcf81ae5..b8f3873fa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java @@ -13,7 +13,7 @@ public Function_BASE64TOTEXT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Base64ToText", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java index b948edd00..817e81636 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java @@ -13,7 +13,7 @@ public Function_BASE64URLTOTEXT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Base64urlToText", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java index b1799169d..dad0a28e5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java @@ -13,7 +13,7 @@ public Function_HTMLDECODE(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "HtmlDecode"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java index 44966e6a5..965255e6b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java @@ -13,7 +13,7 @@ public Function_HTMLENCODE(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "HtmlEncode"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java index b14e8dfed..3a98fd86a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java @@ -13,7 +13,7 @@ public Function_TEXTTOBASE64(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TextToBase64", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java index 857564756..5c2b0b82f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java @@ -13,7 +13,7 @@ public Function_TEXTTOBASE64URL(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TextToBase64url", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java index cf6faedf1..0748369ed 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java @@ -13,7 +13,7 @@ public Function_URLDECODE(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "UrlDecode"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java index 40eb6a3c1..d662b1d45 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java @@ -13,7 +13,7 @@ public Function_URLENCODE(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "UrlEncode"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java index daf257c05..65b38755c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java @@ -13,7 +13,7 @@ public Function_ADDDAYS(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddDays", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java index 2f983ba50..033f1d596 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java @@ -13,7 +13,7 @@ public Function_ADDHOURS(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddHours", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java index eb2af42e6..abbb83579 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java @@ -13,7 +13,7 @@ public Function_ADDMINUTES(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddMinutes", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java index 92398f335..45366f8f5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java @@ -13,7 +13,7 @@ public Function_ADDMONTHS(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddMonths", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java index e939627a1..8484a043f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java @@ -13,7 +13,7 @@ public Function_ADDSECONDS(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddSeconds", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java index 00d5d0846..93e5aeb25 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java @@ -13,7 +13,7 @@ public Function_ADDYEARS(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddYears", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java index d87581bbb..4f4bd00c0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java @@ -13,7 +13,7 @@ public Function_DATE(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = funcs[0].Evaluate(work, tempParameter); if (args1.isNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Date", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java index 0927366ab..c122efc6a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java @@ -13,7 +13,7 @@ public Function_DATEDIF(FunctionBase func1, FunctionBase func2, FunctionBase fun } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "DateDif", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java index 082c9a05e..eef5ca600 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java @@ -15,7 +15,7 @@ public Function_DATEVALUE(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java index fec8eb7f6..b7590716f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java @@ -13,7 +13,7 @@ public Function_DAY(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Day"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java index 3df83d388..f7550f370 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java @@ -13,7 +13,7 @@ public Function_DAYS360(FunctionBase func1, FunctionBase func2, FunctionBase fun } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "Days360", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java index 6b599ea33..4f67ba458 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java @@ -13,7 +13,7 @@ public Function_EDATE(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "EDate", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java index cc1f2d0d5..d2027ac09 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java @@ -13,7 +13,7 @@ public Function_EOMONTH(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "EoMonth", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java index d54daaf90..efb8bfc2a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java @@ -13,7 +13,7 @@ public Function_HOUR(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Hour"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java index 1f41e8be1..cac5c588b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java @@ -13,7 +13,7 @@ public Function_MINUTE(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Minute"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java index ded604be3..607598e3c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java @@ -13,7 +13,7 @@ public Function_MONTH(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Month"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java index 3a52645eb..1d2fd34f5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java @@ -14,7 +14,7 @@ public Function_NETWORKDAYS(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = funcs[0].Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java index e872bdff5..42dfc796e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java @@ -8,7 +8,7 @@ public class Function_NOW extends FunctionBase { @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { toolgood.algorithm.internals.MyDate now = toolgood.algorithm.internals.MyDate.now(); return Operand.Create(now); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java index 3c269fd51..bfc2ad082 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java @@ -13,7 +13,7 @@ public Function_SECOND(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Second"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java index a30038dae..43be20b02 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java @@ -13,7 +13,7 @@ public Function_TIME(FunctionBase func1, FunctionBase func2, FunctionBase func3) } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Time", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java index 6b01d23cd..f9317d447 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java @@ -13,7 +13,7 @@ public Function_TIMESTAMP(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args0 = func1.Evaluate(work, tempParameter); if (args0.IsError()) { return args0; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java index af4c20788..a08154aea 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java @@ -15,7 +15,7 @@ public Function_TIMEVALUE(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "TimeValue"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java index 3e6c696a7..1b05a382d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java @@ -8,7 +8,7 @@ public class Function_TODAY extends FunctionBase { @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { toolgood.algorithm.internals.MyDate now = toolgood.algorithm.internals.MyDate.now(); // 创建一个只包含日期部分的新 MyDate 对象 toolgood.algorithm.internals.MyDate today = new toolgood.algorithm.internals.MyDate(now.Year, now.Month, now.Day, 0, 0, 0); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index 81e7c6970..b10a103f6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -13,7 +13,7 @@ public Function_WEEKDAY(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "WeekDay", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index 9bc918f24..a6f439bb9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -13,7 +13,7 @@ public Function_WEEKNUM(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "WeekNum", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index 8b83136d5..5d8cc27d2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -14,7 +14,7 @@ public Function_WORKDAY(FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = funcs[0].Evaluate(work, tempParameter); if (args1.isNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "Workday", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java index 09dd0c3aa..8ed46e7ca 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathbase; -import java.lang.StringBuilder; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; public class Function_ABS extends Function_1 { public Function_ABS(FunctionBase func1) { @@ -13,17 +13,17 @@ public Function_ABS(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Abs"); - if (args1.isError()) { + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Abs"); + if (args1.IsError()) { return args1; } } - return Operand.create(Math.abs(args1.getNumberValue())); + return Operand.Create(Math.abs(args1.NumberValue())); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { + public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, "Abs"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java index bf4abc90d..d492ab527 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java @@ -1,9 +1,9 @@ package toolgood.algorithm.internals.functions.mathbase; -import java.lang.StringBuilder; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; public class Function_COMBIN extends Function_2 { public Function_COMBIN(FunctionBase func1, FunctionBase func2) { @@ -13,24 +13,24 @@ public Function_COMBIN(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotNumber()) { - args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Combin", 1); - if (args1.isError()) { + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Combin", 1); + if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Combin", 2); - if (args2.isError()) { + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Combin", 2); + if (args2.IsError()) { return args2; } } - int total = args1.getIntValue(); - int count = args2.getIntValue(); + int total = args1.IntValue(); + int count = args2.IntValue(); if (total < 0 || count < 0 || total < count) { - return Operand.error("Function '{0}' parameter is error!", "Combin"); + return Operand.Error("Function '{0}' parameter is error!", "Combin"); } double sum = 1; double sum2 = 1; @@ -38,11 +38,11 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction Date: Sun, 1 Feb 2026 09:43:41 +0800 Subject: [PATCH 26/98] fix --- .../java/toolgood/algorithm/AlgorithmEngine.java | 2 +- .../internals/functions/FunctionBase.java | 2 +- .../internals/functions/compare/Function_EQ.java | 2 +- .../internals/functions/compare/Function_GE.java | 2 +- .../internals/functions/compare/Function_GT.java | 2 +- .../internals/functions/compare/Function_LE.java | 2 +- .../internals/functions/compare/Function_LT.java | 2 +- .../internals/functions/compare/Function_NE.java | 2 +- .../functions/csharp/Function_ENDSWITH.java | 2 +- .../internals/functions/csharp/Function_GUID.java | 2 +- .../internals/functions/csharp/Function_HAS.java | 2 +- .../functions/csharp/Function_HASVALUE.java | 2 +- .../functions/csharp/Function_INDEXOF.java | 14 +++++++------- .../functions/csharp/Function_ISREGEX.java | 1 - .../internals/functions/csharp/Function_JOIN.java | 2 +- .../functions/csharp/Function_LASTINDEXOF.java | 12 ++++++------ .../functions/csharp/Function_LOOKCEILING.java | 2 +- .../functions/csharp/Function_LOOKFLOOR.java | 2 +- .../internals/functions/csharp/Function_REGEX.java | 2 +- .../functions/csharp/Function_REGEXREPALCE.java | 2 +- .../functions/csharp/Function_REMOVEEND.java | 2 +- .../functions/csharp/Function_REMOVESTART.java | 2 +- .../internals/functions/csharp/Function_SPLIT.java | 2 +- .../functions/csharp/Function_STARTSWITH.java | 2 +- .../functions/csharp/Function_SUBSTRING.java | 4 ++-- .../functions/csharp/Function_TRIMEND.java | 1 - .../functions/csharp/Function_TRIMSTART.java | 2 +- .../functions/csharpsecurity/Function_HMACMD5.java | 2 +- .../csharpsecurity/Function_HMACSHA1.java | 2 +- .../csharpsecurity/Function_HMACSHA256.java | 2 +- .../csharpsecurity/Function_HMACSHA512.java | 2 +- .../functions/csharpsecurity/Function_MD5.java | 2 +- .../functions/csharpsecurity/Function_SHA1.java | 2 +- .../functions/csharpsecurity/Function_SHA256.java | 2 +- .../functions/csharpsecurity/Function_SHA512.java | 2 +- .../functions/csharpweb/Function_BASE64TOTEXT.java | 2 +- .../csharpweb/Function_BASE64URLTOTEXT.java | 2 +- .../functions/csharpweb/Function_HTMLDECODE.java | 2 +- .../functions/csharpweb/Function_HTMLENCODE.java | 2 +- .../functions/csharpweb/Function_TEXTTOBASE64.java | 2 +- .../csharpweb/Function_TEXTTOBASE64URL.java | 2 +- .../functions/csharpweb/Function_URLDECODE.java | 2 +- .../functions/csharpweb/Function_URLENCODE.java | 2 +- .../functions/datetimes/Function_ADDDAYS.java | 2 +- .../functions/datetimes/Function_ADDHOURS.java | 2 +- .../functions/datetimes/Function_ADDMINUTES.java | 2 +- .../functions/datetimes/Function_ADDMONTHS.java | 2 +- .../functions/datetimes/Function_ADDSECONDS.java | 2 +- .../functions/datetimes/Function_ADDYEARS.java | 2 +- .../functions/datetimes/Function_DATE.java | 2 +- .../functions/datetimes/Function_DATEDIF.java | 4 ++-- .../functions/datetimes/Function_DATEVALUE.java | 2 +- .../functions/datetimes/Function_DAY.java | 2 +- .../functions/datetimes/Function_DAYS360.java | 2 +- .../functions/datetimes/Function_EDATE.java | 2 +- .../functions/datetimes/Function_EOMONTH.java | 2 +- .../functions/datetimes/Function_HOUR.java | 2 +- .../functions/datetimes/Function_MINUTE.java | 2 +- .../functions/datetimes/Function_MONTH.java | 2 +- .../functions/datetimes/Function_NETWORKDAYS.java | 2 +- .../functions/datetimes/Function_NOW.java | 2 +- .../functions/datetimes/Function_SECOND.java | 2 +- .../functions/datetimes/Function_TIME.java | 2 +- .../functions/datetimes/Function_TIMESTAMP.java | 2 +- .../functions/datetimes/Function_TIMEVALUE.java | 4 ++-- .../functions/datetimes/Function_TODAY.java | 2 +- .../functions/datetimes/Function_WEEKDAY.java | 2 +- .../functions/datetimes/Function_WEEKNUM.java | 2 +- .../functions/datetimes/Function_WORKDAY.java | 2 +- .../functions/mathsum/Function_LARGE.java | 4 ++-- .../functions/mathsum/Function_PERCENTRANK.java | 2 +- .../functions/mathsum/Function_POISSON.java | 2 +- .../functions/mathsum/Function_QUARTILE.java | 2 +- .../functions/mathsum/Function_SMALL.java | 2 +- .../functions/mathsum/Function_STDEV.java | 2 +- .../functions/mathsum/Function_STDEVP.java | 2 +- .../internals/functions/mathsum/Function_SUM.java | 2 +- .../functions/mathsum/Function_SUMIF.java | 2 +- .../functions/mathsum/Function_SUMSQ.java | 2 +- .../functions/mathsum/Function_TDIST.java | 2 +- .../internals/functions/mathsum/Function_TINV.java | 2 +- .../internals/functions/mathsum/Function_VAR.java | 2 +- .../internals/functions/mathsum/Function_VARP.java | 2 +- .../functions/mathsum/Function_WEIBULL.java | 2 +- .../functions/mathtrigonometric/Function_ACOS.java | 2 +- .../mathtrigonometric/Function_ACOSH.java | 2 +- .../functions/mathtrigonometric/Function_ASIN.java | 2 +- .../mathtrigonometric/Function_ASINH.java | 2 +- .../functions/mathtrigonometric/Function_ATAN.java | 2 +- .../mathtrigonometric/Function_ATAN2.java | 2 +- .../mathtrigonometric/Function_ATANH.java | 2 +- .../functions/mathtrigonometric/Function_COS.java | 2 +- .../functions/mathtrigonometric/Function_COSH.java | 2 +- .../functions/mathtrigonometric/Function_COT.java | 2 +- .../functions/mathtrigonometric/Function_CSC.java | 2 +- .../mathtrigonometric/Function_DEGREES.java | 2 +- .../mathtrigonometric/Function_RADIANS.java | 2 +- .../functions/mathtrigonometric/Function_SEC.java | 2 +- .../functions/mathtrigonometric/Function_SIN.java | 2 +- .../functions/mathtrigonometric/Function_SINH.java | 2 +- .../functions/mathtrigonometric/Function_TAN.java | 2 +- .../functions/mathtrigonometric/Function_TANH.java | 2 +- .../internals/functions/string/Function_FIND.java | 4 ++-- .../internals/functions/string/Function_MID.java | 2 +- .../functions/string/Function_REPLACE.java | 2 +- .../internals/functions/string/Function_RMB.java | 2 +- .../functions/string/Function_SEARCH.java | 4 ++-- .../internals/functions/string/Function_TRIM.java | 2 +- .../internals/functions/string/Function_UPPER.java | 4 ++-- .../internals/functions/string/Function_VALUE.java | 4 ++-- .../functions/value/Function_GetJsonValue.java | 4 ++-- .../java/toolgood/algorithm/litJson/Lexer.java | 2 +- .../algorithm/mathNet/Distributions/Beta.java | 2 +- .../mathNet/Distributions/FisherSnedecor.java | 2 +- .../algorithm/mathNet/Distributions/StudentT.java | 2 +- .../algorithm/mathNet/RootFinding/Brent.java | 2 +- 116 files changed, 134 insertions(+), 136 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java index 6425c6446..5f3dcf3fc 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java @@ -18,7 +18,7 @@ import toolgood.algorithm.internals.visitors.MathFunctionVisitor; public class AlgorithmEngine { - private int ExcelIndex = 1; + public int ExcelIndex = 1; /** * 使用 本地时间, 影响 时间截转化 diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index 2ad4e7e8f..b86542255 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -9,7 +9,7 @@ import java.lang.StringBuilder; import java.util.function.BiFunction; -import java.util.function.Function; + import toolgood.algorithm.internals.MyDate; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java index 5e19a72e7..80b061073 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java @@ -11,7 +11,7 @@ public Function_EQ(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java index 03c2ca6b8..235f0a861 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java @@ -11,7 +11,7 @@ public Function_GE(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java index ebbf00b4f..447314b6d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java @@ -11,7 +11,7 @@ public Function_GT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java index dbecdc5fb..19d654f67 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java @@ -11,7 +11,7 @@ public Function_LE(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java index 270f7fb14..3e3a9df28 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java @@ -11,7 +11,7 @@ public Function_LT(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java index c2b1ce48b..de3571206 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java @@ -11,7 +11,7 @@ public Function_NE(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java index 660ccaed4..0273d5600 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java @@ -5,7 +5,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import java.util.function.Function; + public class Function_ENDSWITH extends Function_3 { public Function_ENDSWITH(FunctionBase func1, FunctionBase func2, FunctionBase func3) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java index a3f16ade9..8bea2706f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java @@ -5,7 +5,7 @@ import toolgood.algorithm.AlgorithmEngine; import java.util.UUID; -import java.util.function.Function; + public class Function_GUID extends FunctionBase { public Function_GUID() { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java index 2e358c893..0101a1c86 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java @@ -5,7 +5,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import java.util.function.Function; + public class Function_HAS extends Function_2 { public Function_HAS(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java index a9ea2092b..d6b821dd9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java @@ -5,7 +5,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import java.util.function.Function; + public class Function_HASVALUE extends Function_2 { public Function_HASVALUE(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java index 5abfcf792..3f566b287 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java @@ -5,7 +5,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import java.util.function.Function; + public class Function_INDEXOF extends Function_4 { public Function_INDEXOF(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { @@ -30,7 +30,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction= text.length()) { - return Operand.Create(-1 + work.getExcelIndex()); + return Operand.Create(-1 + work.ExcelIndex); } - return Operand.Create(text.substring(startIndex).indexOf(args2.TextValue()) + startIndex + work.getExcelIndex()); + return Operand.Create(text.substring(startIndex).indexOf(args2.TextValue()) + startIndex + work.ExcelIndex); } Operand args4 = func4.Evaluate(work, tempParameter); if (args4.IsNotNumber()) { @@ -56,15 +56,15 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction= text.length()) { - return Operand.Create(-1 + work.getExcelIndex()); + return Operand.Create(-1 + work.ExcelIndex); } int endIndex = Math.min(startIndex + count, text.length()); String substring = text.substring(startIndex, endIndex); int result = substring.indexOf(args2.TextValue()); if (result == -1) { - return Operand.Create(-1 + work.getExcelIndex()); + return Operand.Create(-1 + work.ExcelIndex); } - return Operand.Create(result + startIndex + work.getExcelIndex()); + return Operand.Create(result + startIndex + work.ExcelIndex); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java index 5645436d3..ee170a9c7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java @@ -5,7 +5,6 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import java.util.function.Function; import java.util.regex.Pattern; public class Function_ISREGEX extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java index fd4be34d3..e2e304c79 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java @@ -7,7 +7,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.function.Function; + public class Function_JOIN extends Function_N { public Function_JOIN(FunctionBase[] funcs) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java index f045d8cd9..4f21be1be 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java @@ -5,7 +5,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import java.util.function.Function; + public class Function_LASTINDEXOF extends Function_4 { public Function_LASTINDEXOF(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { @@ -30,7 +30,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotText()) { + if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "TimeValue"); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java index 1b05a382d..b4956c527 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java @@ -4,7 +4,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import java.util.function.Function; + public class Function_TODAY extends FunctionBase { @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index b10a103f6..577b0ca21 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -5,7 +5,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import java.util.function.Function; + public class Function_WEEKDAY extends Function_2 { public Function_WEEKDAY(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index a6f439bb9..951252cc4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -5,7 +5,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import java.util.function.Function; + public class Function_WEEKNUM extends Function_2 { public Function_WEEKNUM(FunctionBase func1, FunctionBase func2) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index 5d8cc27d2..9f9a43737 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -6,7 +6,7 @@ import toolgood.algorithm.AlgorithmEngine; import java.util.HashSet; -import java.util.function.Function; + public class Function_WORKDAY extends Function_N { public Function_WORKDAY(FunctionBase[] funcs) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java index 7a5527e54..c78d00169 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java @@ -39,10 +39,10 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction list.size() - work.ExcelIndex()) { + if (k < 1 - work.ExcelIndex || k > list.size() - work.ExcelIndex) { return Operand.Error("Function '{0}' parameter {1} is error!", "Large", 2); } - return Operand.Create(list.get(k - work.ExcelIndex())); + return Operand.Create(list.get(k - work.ExcelIndex)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java index 27a9b23e9..5bcc117c3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathsum; import java.util.List; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java index 9b192ef59..cfe3141d0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.mathsum; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java index 86be25039..e2d27c0bd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathsum; import java.util.List; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java index 49dde99f7..1a56825c4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathsum; import java.util.List; -import java.util.function.Function; + import java.util.stream.Collectors; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java index 05a136707..4ed427712 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java @@ -2,7 +2,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java index f24be7124..0d0440d5c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java @@ -2,7 +2,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java index 27b620f5d..1028f00d7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java @@ -2,7 +2,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java index a054811c8..c8843e92f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java @@ -2,7 +2,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java index d9c1c480b..0287a1aeb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java @@ -2,7 +2,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java index a5910e53f..21c9e5bfa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.mathsum; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java index daa8e777d..4a419e338 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.mathsum; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java index e8ba92e12..b79578c6c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java @@ -2,7 +2,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java index 42d348bb0..26a1235e6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java @@ -2,7 +2,7 @@ import java.util.ArrayList; import java.util.List; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java index a53b3b6b3..9108ac28b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.mathsum; -import java.util.function.Function; + import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_4; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java index 9a00c7426..0ef39166a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java index ce9cf4453..28510e309 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java index 7a28d66b8..83f97dd9c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java index df5bdf173..cbb12a532 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java index 2f453bc5d..78de77caa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java index 5b67550db..f18ddac41 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java index 82ebdc667..ba8e80d37 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java index 4531817c5..90e230e0a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java index f95560c7f..cd735988f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java index 9f4c77a87..d12081feb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java index 8df34c4b2..c1616878b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java index b0a6b9010..8f5caf667 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java index 599b67edd..d2fc09244 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java index 284374e56..90064304e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java index 2b58c06cc..000b7c2ac 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java index b5357a81b..b1f9f72f0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java index d2dc1552c..969f15f87 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java index 8c88789e8..e379abfc1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; -import java.util.function.Function; + import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java index 1c9dacfcf..e47624c53 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java @@ -27,7 +27,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction= args2.TextValue().length()) { return Operand.Create(0); } - int p2 = args2.TextValue().substring(startIndex).toLowerCase().indexOf(args1.TextValue().toLowerCase()) + startIndex + work.getExcelIndex(); + int p2 = args2.TextValue().substring(startIndex).toLowerCase().indexOf(args1.TextValue().toLowerCase()) + startIndex + work.ExcelIndex; return Operand.Create(p2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java index d4da3f64e..753850d36 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java @@ -13,7 +13,7 @@ public Function_TRIM(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotText()) { + if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "Trim"); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java index d23180679..395a85e8d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; @@ -13,7 +13,7 @@ public Function_UPPER(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotText()) { + if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter is error!", "Upper"); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java index 7ca97d222..155655a4a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java @@ -1,6 +1,6 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_1; @@ -23,7 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction Date: Sun, 1 Feb 2026 10:09:54 +0800 Subject: [PATCH 27/98] fix --- .../java/toolgood/algorithm/OperandImpl.java | 2 +- .../algorithm/internals/RegexHelper.java | 28 +++++------ .../internals/functions/FunctionBase.java | 6 +-- .../internals/functions/FunctionUtil.java | 9 ++-- .../functions/compare/Function_EQ.java | 18 +++---- .../functions/compare/Function_GE.java | 18 +++---- .../functions/compare/Function_GT.java | 18 +++---- .../functions/compare/Function_LE.java | 18 +++---- .../functions/compare/Function_LT.java | 18 +++---- .../functions/compare/Function_NE.java | 18 +++---- .../csharp/Function_LOOKCEILING.java | 2 +- .../functions/csharp/Function_LOOKFLOOR.java | 2 +- .../internals/functions/csharpweb/Base64.java | 49 ------------------- .../functions/datetimes/Function_ADDDAYS.java | 2 +- .../datetimes/Function_ADDHOURS.java | 2 +- .../datetimes/Function_ADDMINUTES.java | 2 +- .../datetimes/Function_ADDMONTHS.java | 2 +- .../datetimes/Function_ADDSECONDS.java | 2 +- .../datetimes/Function_ADDYEARS.java | 2 +- .../functions/datetimes/Function_DATE.java | 18 +++---- .../functions/datetimes/Function_EDATE.java | 2 +- .../functions/datetimes/Function_EOMONTH.java | 2 +- .../functions/datetimes/Function_TIME.java | 6 +-- .../datetimes/Function_TIMESTAMP.java | 2 +- .../functions/datetimes/Function_WEEKDAY.java | 2 +- .../functions/datetimes/Function_WEEKNUM.java | 2 +- .../functions/datetimes/Function_WORKDAY.java | 2 +- .../functions/mathbase/Function_CEILING.java | 24 ++++----- .../functions/mathbase/Function_EVEN.java | 4 +- .../functions/mathbase/Function_FACT.java | 1 + .../functions/mathbase/Function_FIXED.java | 2 +- .../functions/mathbase/Function_FLOOR.java | 25 +++++----- .../functions/mathbase/Function_GCD.java | 1 + .../functions/mathbase/Function_LCM.java | 3 ++ .../functions/mathbase/Function_MROUND.java | 5 +- .../mathbase/Function_MULTINOMIAL.java | 1 + .../functions/mathbase/Function_ODD.java | 3 +- .../functions/mathbase/Function_POWER.java | 1 + .../functions/mathbase/Function_PRODUCT.java | 1 + .../mathbase/Function_Percentage.java | 3 +- .../functions/mathbase/Function_QUOTIENT.java | 5 +- .../mathbase/Function_RANDBETWEEN.java | 4 +- .../functions/mathbase/Function_ROUND.java | 5 +- .../mathbase/Function_ROUNDDOWN.java | 5 +- .../functions/mathbase/Function_ROUNDUP.java | 5 +- .../functions/mathbase/Function_SIGN.java | 3 +- .../functions/mathbase/Function_SQRT.java | 13 ++--- .../functions/mathbase/Function_SQRTPI.java | 3 +- .../functions/mathbase/Function_TRUNC.java | 1 + .../functions/mathsum/Function_AVEDEV.java | 2 +- .../functions/mathsum/Function_AVERAGE.java | 2 +- .../functions/mathsum/Function_AVERAGEIF.java | 10 ++-- .../functions/mathsum/Function_BETADIST.java | 6 +-- .../functions/mathsum/Function_BETAINV.java | 8 +-- .../mathsum/Function_PERCENTILE.java | 2 +- .../mathsum/Function_PERCENTRANK.java | 5 +- .../functions/mathsum/Function_POISSON.java | 5 +- .../functions/mathsum/Function_QUARTILE.java | 3 +- .../functions/mathsum/Function_SMALL.java | 3 +- .../functions/mathsum/Function_STDEV.java | 2 +- .../functions/mathsum/Function_STDEVP.java | 3 +- .../functions/mathsum/Function_SUM.java | 3 +- .../functions/mathsum/Function_SUMIF.java | 6 +-- .../functions/mathsum/Function_SUMSQ.java | 3 +- .../functions/mathsum/Function_TDIST.java | 5 +- .../functions/mathsum/Function_TINV.java | 5 +- .../functions/mathsum/Function_VAR.java | 3 +- .../functions/mathsum/Function_VARP.java | 3 +- .../functions/mathsum/Function_WEIBULL.java | 12 ++--- .../mathtrigonometric/Function_ACOS.java | 4 +- .../mathtrigonometric/Function_ACOSH.java | 4 +- .../mathtrigonometric/Function_ASIN.java | 4 +- .../mathtrigonometric/Function_ASINH.java | 4 +- .../mathtrigonometric/Function_ATAN.java | 4 +- .../mathtrigonometric/Function_ATAN2.java | 5 +- .../mathtrigonometric/Function_ATANH.java | 4 +- .../mathtrigonometric/Function_COS.java | 4 +- .../mathtrigonometric/Function_COSH.java | 4 +- .../mathtrigonometric/Function_COT.java | 4 +- .../mathtrigonometric/Function_CSC.java | 4 +- .../mathtrigonometric/Function_DEGREES.java | 4 +- .../mathtrigonometric/Function_RADIANS.java | 4 +- .../mathtrigonometric/Function_SEC.java | 4 +- .../mathtrigonometric/Function_SIN.java | 4 +- .../mathtrigonometric/Function_SINH.java | 4 +- .../mathtrigonometric/Function_TAN.java | 4 +- .../mathtrigonometric/Function_TANH.java | 4 +- .../functions/operator/Function_AND_N.java | 2 +- .../functions/operator/Function_Add.java | 25 +++++----- .../functions/operator/Function_Div.java | 18 +++---- .../functions/operator/Function_Mod.java | 12 ++--- .../functions/operator/Function_Mul.java | 28 +++++------ .../functions/operator/Function_OR.java | 8 +-- .../functions/operator/Function_OR_N.java | 2 +- .../functions/operator/Function_Sub.java | 18 +++---- .../functions/string/Function_TEXT.java | 2 +- .../value/Function_GetJsonValue.java | 10 ++-- .../visitors/AntlrErrorTextWriter.java | 8 +-- .../internals/visitors/MathSplitVisitor2.java | 2 - .../toolgood/algorithm/math/mathLexer.java | 8 +-- .../toolgood/algorithm/math/mathParser.java | 16 +++--- 101 files changed, 331 insertions(+), 364 deletions(-) delete mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java diff --git a/java/src/main/java/toolgood/algorithm/OperandImpl.java b/java/src/main/java/toolgood/algorithm/OperandImpl.java index 50d31ce33..e0d2574b7 100644 --- a/java/src/main/java/toolgood/algorithm/OperandImpl.java +++ b/java/src/main/java/toolgood/algorithm/OperandImpl.java @@ -433,7 +433,7 @@ public Operand ToArray(String errorMessage) { list.add(Operand.Create(v.getBoolean())); } else if (v.IsNumber()) { list.add(Operand.Create(new BigDecimal(v.getNumber().toString()))); - } else if (v.isNull()) { + } else if (v.IsNull()) { list.add(Operand.CreateNull()); } else { list.add(Operand.Create(v)); diff --git a/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java b/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java index 460bcf0f2..d0fa556ef 100644 --- a/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java +++ b/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java @@ -5,69 +5,69 @@ import java.util.regex.Pattern; -class RegexHelper { +public class RegexHelper { /** * 十六进制正则表达式 */ - static final Pattern HexRegex = Pattern.compile("^[0-9A-Fa-f]+$"); + public static final Pattern HexRegex = Pattern.compile("^[0-9A-Fa-f]+$"); /** * 八进制正则表达式 */ - static final Pattern OctRegex = Pattern.compile("^[0-7]+$"); + public static final Pattern OctRegex = Pattern.compile("^[0-7]+$"); /** * 二进制正则表达式 */ - static final Pattern BinRegex = Pattern.compile("^[01]+$"); + public static final Pattern BinRegex = Pattern.compile("^[01]+$"); /** * 日期时间正则表达式 (yyyy-MM-dd HH:mm:ss) */ - static final Pattern dateTimeRegex = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$"); + public static final Pattern dateTimeRegex = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$"); /** * 日期时间正则表达式 (yyyy/MM/dd HH:mm:ss) */ - static final Pattern dateTimeRegex2 = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$"); + public static final Pattern dateTimeRegex2 = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$"); /** * 日期时间正则表达式 (yyyy-MM-dd HH:mm) */ - static final Pattern dateTimeRegex3 = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)$"); + public static final Pattern dateTimeRegex3 = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)$"); /** * 日期时间正则表达式 (yyyy/MM/dd HH:mm) */ - static final Pattern dateTimeRegex4 = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)$"); + public static final Pattern dateTimeRegex4 = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)$"); /** * 日期正则表达式 (yyyy-MM-dd) */ - static final Pattern dateRegex = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)$"); + public static final Pattern dateRegex = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)$"); /** * 日期正则表达式 (yyyy-MM-dd) */ - static final Pattern dateRegex2 = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)$"); + public static final Pattern dateRegex2 = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)$"); /** * 天时间正则表达式 (dd HH:mm:ss) */ - static final Pattern dayTimeRegex = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$"); + public static final Pattern dayTimeRegex = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$"); /** * 天时间正则表达式 (dd HH:mm) */ - static final Pattern dayTimeRegex2 = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d)$"); + public static final Pattern dayTimeRegex2 = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d)$"); /** * 时间正则表达式 (HH:mm:ss) */ - static final Pattern timeRegex = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$"); + public static final Pattern timeRegex = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$"); /** * 时间正则表达式 (HH:mm) */ - static final Pattern timeRegex2 = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d)$"); + public static final Pattern timeRegex2 = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d)$"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index b86542255..cf7c8bbb1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -119,8 +119,7 @@ public float TryEvaluate(AlgorithmEngine work, float def, BiFunction args, List list) { return false; } if (args.IsNumber()) { - list.add(args.DoubleValue -()); + list.add(args.DoubleValue()); } else if (args.IsArray()) { boolean o = F_base_GetList(args.ArrayValue(), list); if (!o) { @@ -68,8 +66,7 @@ public static boolean F_base_GetList_Double(Operand args, List list) { if (o.IsError()) { return false; } - list.add(o.DoubleValue -()); + list.add(o.DoubleValue()); } return true; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java index 80b061073..5f90b30f6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java @@ -15,9 +15,9 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction= 0); + return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) >= 0); } else if(args1.IsText()) { int r = args1.TextValue().compareTo(args2.TextValue()); return r >= 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.IsDate() || args1.IsBoolean()) { args1 = args1.ToNumber(null); args2 = args2.ToNumber(null); - return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); + return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) >= 0); } else if(args1.IsJson()) { args1 = args1.ToText(null); args2 = args2.ToText(null); int r = args1.TextValue().compareTo(args2.TextValue()); return r >= 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.isNull()) { + } else if(args1.IsNull()) { return Operand.TRUE; } else { return Operand.Error("Function '{0}' compare is error.", ">="); } - } else if(args1.isNull() || args2.isNull()) { + } else if(args1.IsNull() || args2.IsNull()) { return Operand.FALSE; } else if(args2.IsText()) { if(args1.IsBoolean()) { @@ -53,13 +53,13 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction="); } - } else if(args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.isArrayJson() || args2.isArrayJson()) { + } else if(args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { return Operand.Error("Function '{0}' compare is error.", ">="); } - if(args1.isNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", ">=", 1); if(args1.IsError()) { return args1; } } - if(args2.isNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", ">=", 2); if(args2.IsError()) { return args2; } } + if(args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", ">=", 1); if(args1.IsError()) { return args1; } } + if(args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", ">=", 2); if(args2.IsError()) { return args2; } } - return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) >= 0); + return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) >= 0); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java index 447314b6d..128355e23 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java @@ -15,27 +15,27 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction 0); + return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) > 0); } else if(args1.IsText()) { int r = args1.TextValue().compareTo(args2.TextValue()); return r > 0 ? Operand.TRUE : Operand.FALSE; } else if(args1.IsDate() || args1.IsBoolean()) { args1 = args1.ToNumber(null); args2 = args2.ToNumber(null); - return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); + return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) > 0); } else if(args1.IsJson()) { args1 = args1.ToText(null); args2 = args2.ToText(null); int r = args1.TextValue().compareTo(args2.TextValue()); return r > 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.isNull()) { + } else if(args1.IsNull()) { return Operand.TRUE; } else { return Operand.Error("Function '{0}' compare is error.", ">"); } - } else if(args1.isNull() || args2.isNull()) { + } else if(args1.IsNull() || args2.IsNull()) { return Operand.FALSE; } else if(args2.IsText()) { if(args1.IsBoolean()) { @@ -53,13 +53,13 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction"); } - } else if(args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.isArrayJson() || args2.isArrayJson()) { + } else if(args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { return Operand.Error("Function '{0}' compare is error.", ">"); } - if(args1.isNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", ">", 1); if(args1.IsError()) { return args1; } } - if(args2.isNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", ">", 2); if(args2.IsError()) { return args2; } } + if(args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", ">", 1); if(args1.IsError()) { return args1; } } + if(args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", ">", 2); if(args2.IsError()) { return args2; } } - return Operand.Create(args1.getNumberValue().compareTo(args2.getNumberValue()) > 0); + return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) > 0); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java index 19d654f67..3baa690c6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java @@ -15,27 +15,27 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = funcs[0].Evaluate(work, tempParameter); - if (args1.isNotNumber()) { + if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Date", 1); if (args1.IsError()) { return args1; } } Operand args2 = funcs[1].Evaluate(work, tempParameter); - if (args2.isNotNumber()) { + if (args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Date", 2); if (args2.IsError()) { return args2; } } Operand args3 = funcs[2].Evaluate(work, tempParameter); - if (args3.isNotNumber()) { + if (args3.IsNotNumber()) { args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Date", 3); if (args3.IsError()) { return args3; @@ -41,7 +41,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotNumber()) { + if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Time", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.isNotNumber()) { + if (args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Time", 2); if (args2.IsError()) { return args2; @@ -32,7 +32,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotNumber()) { - args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Ceiling", 1); - if (args1.isError()) { + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Ceiling", 1); + if (args1.IsError()) { return args1; } } if (func2 == null) { - return Operand.create(Math.ceil(args1.getNumberValue())); + return Operand.Create(Math.ceil(args1.NumberValue())); } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Ceiling", 2); - if (args2.isError()) { + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Ceiling", 2); + if (args2.IsError()) { return args2; } } - double b = args2.getNumberValue(); + double b = args2.NumberValue(); if (b == 0) { - return Operand.create(0); + return Operand.Create(0); } if (b < 0) { - return Operand.error("Function '{0}' parameter {1} is error!", "Ceiling", 2); + return Operand.Error("Function '{0}' parameter {1} is error!", "Ceiling", 2); } - double a = args1.getNumberValue(); + double a = args1.NumberValue(); double d = Math.ceil(a / b) * b; - return Operand.create(d); + return Operand.Create(d); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java index 169dff9b5..1768f9da7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java @@ -1,6 +1,8 @@ package toolgood.algorithm.internals.functions.mathbase; import toolgood.algorithm.Operand; + + import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; @@ -19,7 +21,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotNumber()) { - args1 = args1.toNumber("Function '{0}' parameter {1} is error!", "Floor", 1); - if (args1.isError()) { + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Floor", 1); + if (args1.IsError()) { return args1; } } if (func2 == null) { - return Operand.create(Math.floor(args1.getNumberValue())); + return Operand.Create(Math.floor(args1.DoubleValue())); } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.isNotNumber()) { - args2 = args2.toNumber("Function '{0}' parameter {1} is error!", "Floor", 2); - if (args2.isError()) { + if (args2.IsNotNumber()) { + args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Floor", 2); + if (args2.IsError()) { return args2; } } - double b = args2.getNumberValue(); + double b = args2.DoubleValue(); if (b >= 1) { - return Operand.create(args1.getIntValue()); + return Operand.Create(args1.IntValue()); } if (b <= 0) { - return Operand.error("Function '{0}' parameter {1} is error!", "Floor", 2); + return Operand.Error("Function '{0}' parameter {1} is error!", "Floor", 2); } - double a = args1.getNumberValue(); + double a = args1.DoubleValue(); double d = Math.floor(a / b) * b; - return Operand.create(d); + return Operand.Create(d); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java index ec121c0df..a1a941a77 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java @@ -3,6 +3,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_N; import java.util.ArrayList; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java index 53301d598..306047b00 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java @@ -3,6 +3,9 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; + import java.util.ArrayList; import java.util.List; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java index 29863944c..a3ff328c1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java @@ -3,6 +3,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; public class Function_MROUND extends Function_2 { public Function_MROUND(FunctionBase func1, FunctionBase func2) { @@ -25,12 +26,12 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction 0) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java index 61c10cd92..9ea84705b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java @@ -3,6 +3,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; public class Function_SIGN extends Function_1 { public Function_SIGN(FunctionBase func1) { @@ -18,7 +19,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotNumber()) { - args1 = args1.toNumber("Function '{0}' parameter is error!", "Sqrt"); - if (args1.isError()) { + if (args1.IsNotNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sqrt"); + if (args1.IsError()) { return args1; } } - if (args1.getNumberValue() < 0) { - return Operand.error("Function '{0}' parameter is error!", "Sqrt"); + if (args1.DoubleValue() < 0) { + return Operand.Error("Function '{0}' parameter is error!", "Sqrt"); } - return Operand.create(Math.sqrt(args1.getDoubleValue())); + return Operand.Create(Math.sqrt(args1.DoubleValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java index fa66546c8..99fe1a964 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java @@ -18,8 +18,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction m2 = FunctionUtil.sumifMatch(sunif); if (m2 != null) { - String operator = (String) m2[0]; - double value = (double) m2[1]; + String operator = m2.getFirst(); + double value = m2.getSecond(); count = FunctionUtil.F_base_countif(list, operator, value); sum = FunctionUtil.F_base_sumif(list, operator, value, sumdbs); } else { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java index 676744c11..b26b2a75b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java @@ -35,9 +35,9 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 1); @@ -35,9 +35,9 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction 1.0) { return Operand.Error("Function '{0}' parameter is error!", "BetaInv"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java index 56af98cfa..b16759a47 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java @@ -6,7 +6,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionUtil; +import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.mathNet.ExcelFunctions; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java index 5bcc117c3..e2f80e8c4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java @@ -17,7 +17,7 @@ public Function_PERCENTRANK(FunctionBase func1, FunctionBase func2, FunctionBase } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Array) { args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "PercentRank", 1); @@ -39,8 +39,7 @@ public Operand Evaluate(Object work, Function tempParam return Operand.Error("Function '{0}' parameter is error!", "PercentRank"); } - double k = args2.DoubleValue -(); + double k = args2.DoubleValue(); double[] array = list.stream().mapToDouble(Double::doubleValue).ToArray(); double v = ExcelFunctions.PercentRank(array, k); int d = 3; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java index cfe3141d0..6909c1f96 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java @@ -15,7 +15,7 @@ public Function_POISSON(FunctionBase func1, FunctionBase func2, FunctionBase fun } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Number) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Poisson", 1); @@ -38,8 +38,7 @@ public Operand Evaluate(Object work, Function tempParam } } int k = args1.IntValue(); - double lambda = args2.DoubleValue -(); + double lambda = args2.DoubleValue(); boolean state = args3.BooleanValue(); if (!(lambda > 0.0)) { return Operand.Error("Function '{0}' parameter is error!", "Poisson"); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java index e2d27c0bd..15a5d0314 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java @@ -5,6 +5,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; @@ -17,7 +18,7 @@ public Function_QUARTILE(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Array) { args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Quartile", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java index 1a56825c4..999950316 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -6,6 +6,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; @@ -16,7 +17,7 @@ public Function_SMALL(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Array) { args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Small", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java index 4ed427712..3d73b4163 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java @@ -15,7 +15,7 @@ public Function_STDEV(FunctionBase[] funcs) { } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java index 0d0440d5c..ee4ce67c8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java @@ -6,6 +6,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionUtil; @@ -15,7 +16,7 @@ public Function_STDEVP(FunctionBase[] funcs) { } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java index 1028f00d7..0cb08867a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java @@ -6,6 +6,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionUtil; @@ -15,7 +16,7 @@ public Function_SUM(FunctionBase[] funcs) { } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java index c8843e92f..3bbd2b45d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java @@ -6,6 +6,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; @@ -16,7 +17,7 @@ public Function_SUMIF(FunctionBase func1, FunctionBase func2, FunctionBase func3 } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsError()) { return args1; @@ -50,8 +51,7 @@ public Operand Evaluate(Object work, Function tempParam double sum = 0; if (args2.getOperandType() == OperandType.Number) { // 处理数字条件 - double value = args2.DoubleValue -(); + double value = args2.DoubleValue(); long count = FunctionUtil.F_base_countif(list, value); sum = count * value; } else { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java index 0287a1aeb..1cd22b94c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java @@ -6,6 +6,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionUtil; @@ -15,7 +16,7 @@ public Function_SUMSQ(FunctionBase[] funcs) { } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(funcs.length); for (int i = 0; i < funcs.length; i++) { Operand aa = funcs[i].Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java index 21c9e5bfa..b29443239 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java @@ -15,7 +15,7 @@ public Function_TDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3 } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Number) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "TDist", 1); @@ -38,8 +38,7 @@ public Operand Evaluate(Object work, Function tempParam } } - double x = args1.DoubleValue -(); + double x = args1.DoubleValue(); int degreesFreedom = args2.IntValue(); int tails = args3.IntValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java index 4a419e338..360f5b735 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java @@ -15,7 +15,7 @@ public Function_TINV(FunctionBase func1, FunctionBase func2) { } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.Type() != OperandType.Number) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "TInv", 1); @@ -31,8 +31,7 @@ public Operand Evaluate(Object work, Function tempParam } } - double p = args1.DoubleValue -(); + double p = args1.DoubleValue(); int degreesFreedom = args2.IntValue(); if (degreesFreedom <= 0 || p < 0.0 || p > 1.0) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java index b79578c6c..a33de0b67 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java @@ -6,6 +6,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionUtil; @@ -15,7 +16,7 @@ public Function_VAR(FunctionBase[] funcs) { } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java index 26a1235e6..759ae02e0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java @@ -6,6 +6,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionUtil; @@ -15,7 +16,7 @@ public Function_VARP(FunctionBase[] funcs) { } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(); for (FunctionBase item : funcs) { Operand aa = item.Evaluate(work, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java index 9108ac28b..3748a5ffb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java @@ -4,6 +4,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_4; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.mathNet.ExcelFunctions; @@ -15,7 +16,7 @@ public Function_WEIBULL(FunctionBase func1, FunctionBase func2, FunctionBase fun } @Override - public Operand Evaluate(Object work, Function tempParameter) { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.getOperandType() != OperandType.Number) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Weibull", 1); @@ -45,12 +46,9 @@ public Operand Evaluate(Object work, Function tempParam } } - double x = args1.DoubleValue -(); - double shape = args2.DoubleValue -(); - double scale = args3.DoubleValue -(); + double x = args1.DoubleValue(); + double shape = args2.DoubleValue(); + double scale = args3.DoubleValue(); boolean state = args4.BooleanValue(); if (shape <= 0.0 || scale <= 0.0) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java index 0ef39166a..347740f6a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java @@ -1,6 +1,7 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; import java.lang.StringBuilder; +import java.util.function.BiFunction; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; @@ -21,8 +22,7 @@ public Operand Evaluate(AlgorithmEngine work, BiFunction implements mathVisitor { diff --git a/java/src/main/java/toolgood/algorithm/math/mathLexer.java b/java/src/main/java/toolgood/algorithm/math/mathLexer.java index dfaec60c2..5a29f9e6b 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathLexer.java +++ b/java/src/main/java/toolgood/algorithm/math/mathLexer.java @@ -22,7 +22,7 @@ public class mathLexer extends Lexer { T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, SUB=29, NUM=30, STRING=31, NULL=32, ERROR=33, UNIT=34, IF=35, IFERROR=36, ISNUMBER=37, ISTEXT=38, ISERROR=39, - ISNONTEXT=40, ISLOGICAL=41, ISEVEN=42, ISODD=43, ISNULL=44, ISNULLORERROR=45, + ISNONTEXT=40, ISLOGICAL=41, ISEVEN=42, ISODD=43, IsNull=44, ISNULLORERROR=45, AND=46, OR=47, NOT=48, TRUE=49, FALSE=50, E=51, PI=52, DEC2BIN=53, DEC2HEX=54, DEC2OCT=55, HEX2BIN=56, HEX2DEC=57, HEX2OCT=58, OCT2BIN=59, OCT2DEC=60, OCT2HEX=61, BIN2OCT=62, BIN2DEC=63, BIN2HEX=64, ABS=65, QUOTIENT=66, MOD=67, @@ -72,7 +72,7 @@ private static String[] makeRuleNames() { "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "SUB", "NUM", "STRING", "NULL", "ERROR", "UNIT", "IF", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", "ISNONTEXT", "ISLOGICAL", - "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", + "ISEVEN", "ISODD", "IsNull", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", "BIN2HEX", "ABS", "QUOTIENT", "MOD", "SIGN", "SQRT", "TRUNC", "INT", "GCD", "LCM", @@ -114,7 +114,7 @@ private static String[] makeLiteralNames() { "'!=='", "'!='", "'<>'", "'&&'", "'||'", "'?'", "':'", "'{'", "'}'", "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'ISNUMBER'", "'ISTEXT'", "'ISERROR'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", - "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, + "'IsNull'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", "'BIN2HEX'", "'ABS'", "'QUOTIENT'", "'MOD'", "'SIGN'", "'SQRT'", "'TRUNC'", @@ -154,7 +154,7 @@ private static String[] makeSymbolicNames() { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "SUB", "NUM", "STRING", "NULL", "ERROR", "UNIT", "IF", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", "ISNONTEXT", - "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", "AND", "OR", + "ISLOGICAL", "ISEVEN", "ISODD", "IsNull", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", "BIN2HEX", "ABS", "QUOTIENT", "MOD", "SIGN", "SQRT", "TRUNC", "INT", diff --git a/java/src/main/java/toolgood/algorithm/math/mathParser.java b/java/src/main/java/toolgood/algorithm/math/mathParser.java index cb0218c31..e1fdd07ee 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathParser.java +++ b/java/src/main/java/toolgood/algorithm/math/mathParser.java @@ -22,7 +22,7 @@ public class mathParser extends Parser { T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, SUB=29, NUM=30, STRING=31, NULL=32, ERROR=33, UNIT=34, IF=35, IFERROR=36, ISNUMBER=37, ISTEXT=38, ISERROR=39, - ISNONTEXT=40, ISLOGICAL=41, ISEVEN=42, ISODD=43, ISNULL=44, ISNULLORERROR=45, + ISNONTEXT=40, ISLOGICAL=41, ISEVEN=42, ISODD=43, IsNull=44, ISNULLORERROR=45, AND=46, OR=47, NOT=48, TRUE=49, FALSE=50, E=51, PI=52, DEC2BIN=53, DEC2HEX=54, DEC2OCT=55, HEX2BIN=56, HEX2DEC=57, HEX2OCT=58, OCT2BIN=59, OCT2DEC=60, OCT2HEX=61, BIN2OCT=62, BIN2DEC=63, BIN2HEX=64, ABS=65, QUOTIENT=66, MOD=67, @@ -74,7 +74,7 @@ private static String[] makeLiteralNames() { "'!=='", "'!='", "'<>'", "'&&'", "'||'", "'?'", "':'", "'{'", "'}'", "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'ISNUMBER'", "'ISTEXT'", "'ISERROR'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", - "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, + "'IsNull'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", "'BIN2HEX'", "'ABS'", "'QUOTIENT'", "'MOD'", "'SIGN'", "'SQRT'", "'TRUNC'", @@ -114,7 +114,7 @@ private static String[] makeSymbolicNames() { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "SUB", "NUM", "STRING", "NULL", "ERROR", "UNIT", "IF", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", "ISNONTEXT", - "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", "AND", "OR", + "ISLOGICAL", "ISEVEN", "ISODD", "IsNull", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", "BIN2HEX", "ABS", "QUOTIENT", "MOD", "SIGN", "SQRT", "TRUNC", "INT", @@ -3349,7 +3349,7 @@ public T accept(ParseTreeVisitor visitor) { } @SuppressWarnings("CheckReturnValue") public static class ISNULL_funContext extends ExprContext { - public TerminalNode ISNULL() { return getToken(mathParser.ISNULL, 0); } + public TerminalNode IsNull() { return getToken(mathParser.IsNull, 0); } public List expr() { return getRuleContexts(ExprContext.class); } @@ -3937,7 +3937,7 @@ private ExprContext expr(int _p) throws RecognitionException { _ctx = _localctx; _prevctx = _localctx; setState(95); - match(ISNULL); + match(IsNull); setState(96); match(T__1); setState(97); @@ -9133,7 +9133,7 @@ private ExprContext expr(int _p) throws RecognitionException { setState(1875); match(T__0); setState(1876); - match(ISNULL); + match(IsNull); setState(1877); match(T__1); setState(1879); @@ -11454,7 +11454,7 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case ISLOGICAL: case ISEVEN: case ISODD: - case ISNULL: + case IsNull: case ISNULLORERROR: case AND: case OR: @@ -11700,7 +11700,7 @@ public static class Parameter2Context extends ParserRuleContext { public TerminalNode ISLOGICAL() { return getToken(mathParser.ISLOGICAL, 0); } public TerminalNode ISEVEN() { return getToken(mathParser.ISEVEN, 0); } public TerminalNode ISODD() { return getToken(mathParser.ISODD, 0); } - public TerminalNode ISNULL() { return getToken(mathParser.ISNULL, 0); } + public TerminalNode IsNull() { return getToken(mathParser.IsNull, 0); } public TerminalNode ISNULLORERROR() { return getToken(mathParser.ISNULLORERROR, 0); } public TerminalNode AND() { return getToken(mathParser.AND, 0); } public TerminalNode OR() { return getToken(mathParser.OR, 0); } From 5ca4bf9c5418d16d2672936ab985fa27dfb7c87d Mon Sep 17 00:00:00 2001 From: LinZhijun Date: Sun, 1 Feb 2026 10:37:13 +0800 Subject: [PATCH 28/98] fix --- .../main/java/toolgood/algorithm/Operand.java | 11 +- .../functions/csharp/Function_HAS.java | 8 +- .../functions/csharp/Function_HASVALUE.java | 12 +- .../functions/csharp/Function_JOIN.java | 5 +- .../csharp/Function_LOOKCEILING.java | 3 +- .../functions/csharp/Function_LOOKFLOOR.java | 3 +- .../internals/functions/csharpweb/Base64.java | 243 ++++++++++++++++++ .../functions/datetimes/Function_ADDDAYS.java | 2 +- .../datetimes/Function_ADDHOURS.java | 2 +- .../datetimes/Function_ADDMINUTES.java | 2 +- .../datetimes/Function_ADDMONTHS.java | 2 +- .../datetimes/Function_ADDSECONDS.java | 2 +- .../datetimes/Function_ADDYEARS.java | 2 +- .../functions/datetimes/Function_DATEDIF.java | 4 +- .../datetimes/Function_DATEVALUE.java | 4 +- .../functions/datetimes/Function_DAY.java | 4 +- .../functions/datetimes/Function_DAYS360.java | 11 +- .../functions/datetimes/Function_EDATE.java | 2 +- .../functions/datetimes/Function_EOMONTH.java | 2 +- .../functions/datetimes/Function_HOUR.java | 2 +- .../functions/datetimes/Function_MINUTE.java | 2 +- .../functions/datetimes/Function_MONTH.java | 4 +- .../datetimes/Function_NETWORKDAYS.java | 6 +- .../functions/datetimes/Function_SECOND.java | 2 +- .../functions/datetimes/Function_WEEKDAY.java | 2 +- .../functions/datetimes/Function_WEEKNUM.java | 2 +- .../functions/datetimes/Function_WORKDAY.java | 4 +- .../functions/datetimes/Function_YEAR.java | 5 +- .../internals/functions/flow/Function_IF.java | 2 +- .../functions/flow/Function_ISERROR.java | 9 +- .../functions/flow/Function_ISEVEN.java | 4 +- .../functions/flow/Function_ISLOGICAL.java | 4 +- .../functions/flow/Function_ISNONTEXT.java | 4 +- .../functions/flow/Function_ISNULL.java | 6 +- .../flow/Function_ISNULLOREMPTY.java | 2 +- .../flow/Function_ISNULLORERROR.java | 6 +- .../flow/Function_ISNULLORWHITESPACE.java | 2 +- .../functions/flow/Function_ISNUMBER.java | 9 +- .../functions/flow/Function_ISODD.java | 4 +- .../functions/flow/Function_ISTEXT.java | 9 +- .../functions/flow/Function_NOT.java | 2 +- .../functions/mathbase/Function_ABS.java | 5 +- .../functions/mathsum/Function_BETAINV.java | 8 +- .../functions/mathsum/Function_COUNTIF.java | 6 +- .../functions/mathsum/Function_FINV.java | 8 +- .../functions/mathsum/Function_GEOMEAN.java | 2 +- .../functions/mathsum/Function_HARMEAN.java | 2 +- .../functions/mathsum/Function_LARGE.java | 4 +- .../functions/mathsum/Function_MAX.java | 4 +- .../functions/mathsum/Function_MEDIAN.java | 4 +- .../functions/mathsum/Function_MODE.java | 6 +- .../mathsum/Function_PERCENTRANK.java | 9 +- .../functions/mathsum/Function_POISSON.java | 7 +- .../functions/mathsum/Function_QUARTILE.java | 6 +- .../functions/mathsum/Function_SMALL.java | 6 +- .../functions/mathsum/Function_SUMIF.java | 7 +- .../functions/mathsum/Function_TDIST.java | 7 +- .../functions/mathsum/Function_TINV.java | 12 +- .../functions/mathsum/Function_WEIBULL.java | 12 +- .../functions/string/Function_TEXT.java | 7 +- .../value/Function_GetJsonValue.java | 2 +- .../visitors/MathFunctionVisitor.java | 43 ++-- .../algorithm/litJson/JsonReader.java | 2 +- .../toolgood/algorithm/litJson/Lexer.java | 2 +- .../Tests/AlgorithmEngineTest_flow.java | 4 +- 65 files changed, 434 insertions(+), 157 deletions(-) create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java diff --git a/java/src/main/java/toolgood/algorithm/Operand.java b/java/src/main/java/toolgood/algorithm/Operand.java index e00b736eb..e9943664a 100644 --- a/java/src/main/java/toolgood/algorithm/Operand.java +++ b/java/src/main/java/toolgood/algorithm/Operand.java @@ -5,6 +5,7 @@ import java.math.BigDecimal; import java.util.List; +import java.util.ArrayList; import java.util.Collection; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.MyDate; @@ -282,7 +283,7 @@ public static Operand Create(List obj) { /** * 创建操作数 */ - public static Operand Create(Collection obj) { + public static Operand Create(String[] obj) { List array = new ArrayList<>(); for (String item : obj) { array.add(Create(item)); @@ -293,7 +294,7 @@ public static Operand Create(Collection obj) { /** * 创建操作数 */ - public static Operand Create(Collection obj) { + public static Operand Create(Double[] obj) { List array = new ArrayList<>(); for (Double item : obj) { array.add(Create(new BigDecimal(item.toString()))); @@ -304,7 +305,7 @@ public static Operand Create(Collection obj) { /** * 创建操作数 */ - public static Operand Create(Collection obj) { + public static Operand Create(BigDecimal[] obj) { List array = new ArrayList<>(); for (BigDecimal item : obj) { array.add(Create(item)); @@ -315,7 +316,7 @@ public static Operand Create(Collection obj) { /** * 创建操作数 */ - public static Operand Create(Collection obj) { + public static Operand Create(Integer[] obj) { List array = new ArrayList<>(); for (Integer item : obj) { array.add(Create(item)); @@ -326,7 +327,7 @@ public static Operand Create(Collection obj) { /** * 创建操作数 */ - public static Operand Create(Collection obj) { + public static Operand Create(Boolean[] obj) { List array = new ArrayList<>(); for (Boolean item : obj) { array.add(Create(item)); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java index 0101a1c86..9a79f41f4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java @@ -29,11 +29,11 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction list = new ArrayList<>(); - boolean o = toolgood.algorithm.internals.FunctionUtil.F_base_GetList(args1, list); + boolean o = FunctionUtil.F_base_GetList(args1, list); if (!o) { return Operand.Error("Function '{0}' parameter {1} is error!", "Join", 1); } @@ -52,7 +53,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction list = new ArrayList<>(); for (int i = 1; i < args.size(); i++) { - boolean o = toolgood.algorithm.internals.FunctionUtil.F_base_GetList(args.get(i), list); + boolean o = FunctionUtil.F_base_GetList(args.get(i), list); if (!o) { return Operand.Error("Function '{0}' parameter {1} is error!", "Join", i + 1); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java index 61ba12e4b..2d28eec1f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java @@ -2,6 +2,7 @@ import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; @@ -35,7 +36,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction list = new ArrayList<>(); - toolgood.algorithm.internals.FunctionUtil.F_base_GetList(args2, list); + FunctionUtil.F_base_GetList(args2, list); if (list.isEmpty()) { return Operand.Error("Function '{0}' parameter {1} is error!", "LookCeiling", 2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java index 8a7dde3cb..c43e30dad 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java @@ -2,6 +2,7 @@ import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; @@ -34,7 +35,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction list = new ArrayList<>(); - toolgood.algorithm.internals.FunctionUtil.F_base_GetList(args2, list); + FunctionUtil.F_base_GetList(args2, list); if (list.isEmpty()) { return Operand.Error("Function '{0}' parameter {1} is error!", "LookFloor", 2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java new file mode 100644 index 000000000..ccf5dcff6 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java @@ -0,0 +1,243 @@ +package toolgood.algorithm.internals.functions.csharpweb; + +import java.util.regex.Pattern; + +public class Base64 { + public static String ToBase64String(final byte[] input) { + return Base64Util.encode(input); + } + + public static byte[] FromBase64String(final String base64) { + return Base64Util.decode(base64); + } + + public static String ToBase64ForUrlString(final byte[] input) { + String t = Pattern.compile("=*$").matcher(ToBase64String(input)).replaceAll(""); + t = Pattern.compile("\\+").matcher(t).replaceAll("-"); + t = Pattern.compile("/").matcher(t).replaceAll("_"); + return t; + } + + public static byte[] FromBase64ForUrlString(final String base64ForUrlInput) { + final String base64 = "===========================================+=+=/0123456789=======ABCDEFGHIJKLMNOPQRSTUVWXYZ====/=abcdefghijklmnopqrstuvwxyz====="; + final StringBuilder sb = new StringBuilder(); + for (int i = 0; i < base64ForUrlInput.length(); i++) { + final char c = base64ForUrlInput.charAt(i); + if ((int) c >= 128) + continue; + final char k = base64.charAt(c);// [c]; + if (k == '=') + continue; + sb.append(k); + } + final int len = sb.length(); + final int padChars = (len % 4) == 0 ? 0 : (4 - (len % 4)); + for (int i = 0; i < padChars; i++) { + sb.append('='); + } + return FromBase64String(sb.toString()); + } + public static class Base64Util { + private static final int BASELENGTH = 128; + private static final int LOOKUPLENGTH = 64; + private static final int TWENTYFOURBITGROUP = 24; + private static final int EIGHTBIT = 8; + private static final int SIXTEENBIT = 16; + private static final int FOURBYTE = 4; + private static final int SIGN = -128; + private static char PAD = '='; + private static byte[] base64Alphabet = new byte[BASELENGTH]; + private static char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; + static { + for (int i = 0; i < BASELENGTH; ++i) { + base64Alphabet[i] = -1; + } + for (int i = 'Z'; i >= 'A'; i--) { + base64Alphabet[i] = (byte) (i - 'A'); + } + for (int i = 'z'; i >= 'a'; i--) { + base64Alphabet[i] = (byte) (i - 'a' + 26); + } + for (int i = '9'; i >= '0'; i--) { + base64Alphabet[i] = (byte) (i - '0' + 52); + } + base64Alphabet['+'] = 62; + base64Alphabet['/'] = 63; + for (int i = 0; i <= 25; i++) { + lookUpBase64Alphabet[i] = (char) ('A' + i); + } + for (int i = 26, j = 0; i <= 51; i++, j++) { + lookUpBase64Alphabet[i] = (char) ('a' + j); + } + for (int i = 52, j = 0; i <= 61; i++, j++) { + lookUpBase64Alphabet[i] = (char) ('0' + j); + } + lookUpBase64Alphabet[62] = (char) '+'; + lookUpBase64Alphabet[63] = (char) '/'; + } + + private static boolean isWhiteSpace(char octect) { + return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); + } + + private static boolean isPad(char octect) { + return (octect == PAD); + } + + private static boolean isData(char octect) { + return (octect < BASELENGTH && base64Alphabet[octect] != -1); + } + + public static String encode(byte[] binaryData) { + if (binaryData == null) { + return null; + } + int lengthDataBits = binaryData.length * EIGHTBIT; + if (lengthDataBits == 0) { + return ""; + } + int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; + int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; + int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets; + char encodedData[] = null; + encodedData = new char[numberQuartet * 4]; + byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; + int encodedIndex = 0; + int dataIndex = 0; + for (int i = 0; i < numberTriplets; i++) { + b1 = binaryData[dataIndex++]; + b2 = binaryData[dataIndex++]; + b3 = binaryData[dataIndex++]; + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f]; + } + // form integral number of 6-bit groups + if (fewerThan24bits == EIGHTBIT) { + b1 = binaryData[dataIndex]; + k = (byte) (b1 & 0x03); + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4]; + encodedData[encodedIndex++] = PAD; + encodedData[encodedIndex++] = PAD; + } else if (fewerThan24bits == SIXTEENBIT) { + b1 = binaryData[dataIndex]; + b2 = binaryData[dataIndex + 1]; + l = (byte) (b2 & 0x0f); + k = (byte) (b1 & 0x03); + byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); + byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); + encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; + encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2]; + encodedData[encodedIndex++] = PAD; + } + return new String(encodedData); + } + + public static byte[] decode(String encoded) { + if (encoded == null) { + return null; + } + char[] base64Data = encoded.toCharArray(); + // remove white spaces + int len = removeWhiteSpace(base64Data); + if (len % FOURBYTE != 0) { + return null;// should be divisible by four + } + int numberQuadruple = (len / FOURBYTE); + if (numberQuadruple == 0) { + return new byte[0]; + } + byte decodedData[] = null; + byte b1 = 0, b2 = 0, b3 = 0, b4 = 0; + char d1 = 0, d2 = 0, d3 = 0, d4 = 0; + int i = 0; + int encodedIndex = 0; + int dataIndex = 0; + decodedData = new byte[(numberQuadruple) * 3]; + for (; i < numberQuadruple - 1; i++) { + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])) + || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++]))) { + return null; + } // if found "no data" just return null + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + } + if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))) { + return null;// if found "no data" just return null + } + b1 = base64Alphabet[d1]; + b2 = base64Alphabet[d2]; + d3 = base64Data[dataIndex++]; + d4 = base64Data[dataIndex++]; + if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters + if (isPad(d3) && isPad(d4)) { + if ((b2 & 0xf) != 0)// last 4 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 1]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); + return tmp; + } else if (!isPad(d3) && isPad(d4)) { + b3 = base64Alphabet[d3]; + if ((b3 & 0x3) != 0)// last 2 bits should be zero + { + return null; + } + byte[] tmp = new byte[i * 3 + 2]; + System.arraycopy(decodedData, 0, tmp, 0, i * 3); + tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + return tmp; + } else { + return null; + } + } else { // No PAD e.g 3cQl + b3 = base64Alphabet[d3]; + b4 = base64Alphabet[d4]; + decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); + decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); + decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); + } + return decodedData; + } + + /** + * remove WhiteSpace from MIME containing encoded Base64Util data. + * + * @param data the byte array of base64 data (with WS) + * @return the new length + */ + private static int removeWhiteSpace(char[] data) { + if (data == null) { + return 0; + } + // count characters that's not whitespace + int newSize = 0; + int len = data.length; + for (int i = 0; i < len; i++) { + if (!isWhiteSpace(data[i])) { + data[newSize++] = data[i]; + } + } + return newSize; + } + } + + +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java index 84d9773bf..f489960dc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java @@ -15,7 +15,7 @@ public Function_ADDDAYS(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddDays", 1); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java index 10a5103c2..d520858f9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java @@ -15,7 +15,7 @@ public Function_ADDHOURS(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddHours", 1); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java index 1d781dea2..c2f8dc28c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java @@ -15,7 +15,7 @@ public Function_ADDMINUTES(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddMinutes", 1); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java index a92b3abd3..eb7a57ff7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java @@ -15,7 +15,7 @@ public Function_ADDMONTHS(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddMonths", 1); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java index 7cceb87b8..417c56d26 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java @@ -15,7 +15,7 @@ public Function_ADDSECONDS(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddSeconds", 1); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java index d45977347..b4ba10bcd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java @@ -15,7 +15,7 @@ public Function_ADDYEARS(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddYears", 1); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java index a61248003..838c32c7a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java @@ -15,14 +15,14 @@ public Function_DATEDIF(FunctionBase func1, FunctionBase func2, FunctionBase fun @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "DateDif", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.isNotDate()) { + if (args2.IsNotDate()) { args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "DateDif", 2); if (args2.IsError()) { return args2; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java index 37c222340..94fd70843 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java @@ -44,7 +44,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Day"); if (args1.IsError()) { return args1; @@ -25,7 +25,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "Days360", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.isNotDate()) { + if (args2.IsNotDate()) { args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "Days360", 2); if (args2.IsError()) { return args2; } } - toolgood.algorithm.internals.MyDate startMyDate = args1.DateValue(); - toolgood.algorithm.internals.MyDate endMyDate = args2.DateValue(); + MyDate startMyDate = args1.DateValue(); + MyDate endMyDate = args2.DateValue(); boolean method = false; if (func3 != null) { Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.isNotBoolean()) { + if (args3.IsNotBoolean()) { args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "Days360", 3); if (args3.IsError()) { return args3; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java index 44f7224be..01a04374f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java @@ -15,7 +15,7 @@ public Function_EDATE(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "EDate", 1); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java index f489d0996..fc61e93a0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java @@ -15,7 +15,7 @@ public Function_EOMONTH(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "EoMonth", 1); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java index b5903b740..109c519a8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java @@ -15,7 +15,7 @@ public Function_HOUR(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Hour"); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java index 50ccbcd37..fcdb181ea 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java @@ -15,7 +15,7 @@ public Function_MINUTE(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Minute"); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java index 123f838df..52cff3674 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java @@ -15,7 +15,7 @@ public Function_MONTH(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Month"); if (args1.IsError()) { return args1; @@ -25,7 +25,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = funcs[0].Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 1); if (args1.IsError()) { return args1; } } Operand args2 = funcs[1].Evaluate(work, tempParameter); - if (args2.isNotDate()) { + if (args2.IsNotDate()) { args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 2); if (args2.IsError()) { return args2; @@ -36,7 +36,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction list = new HashSet<>(); for (int i = 2; i < funcs.length; i++) { Operand ar = funcs[i].Evaluate(work, tempParameter); - if (ar.isNotDate()) { + if (ar.IsNotDate()) { ar = ar.ToMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", i + 1); if (ar.IsError()) { return ar; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java index 7a4c8a3ec..3ac10988c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java @@ -15,7 +15,7 @@ public Function_SECOND(FunctionBase func1) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Second"); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index 810b44594..ecd438c05 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -15,7 +15,7 @@ public Function_WEEKDAY(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "WeekDay", 1); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index a334a55da..950c9de1b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -15,7 +15,7 @@ public Function_WEEKNUM(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "WeekNum", 1); if (args1.IsError()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index 09a91304e..81327a489 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -16,7 +16,7 @@ public Function_WORKDAY(FunctionBase[] funcs) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = funcs[0].Evaluate(work, tempParameter); - if (args1.isNotDate()) { + if (args1.IsNotDate()) { args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "Workday", 1); if (args1.IsError()) { return args1; @@ -36,7 +36,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsBoolean()) { - return Operand.True(); + return Operand.TRUE; } - return Operand.False(); + return Operand.FALSE; } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java index 091c640d2..e7b6b25ba 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java @@ -13,9 +13,9 @@ public Function_ISNONTEXT(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotText()) { - return Operand.True(); + return Operand.TRUE; } - return Operand.False(); + return Operand.FALSE; } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java index f10bdd3d9..bd82ab257 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java @@ -22,12 +22,12 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNull()) { - return Operand.True(); + return Operand.TRUE; } if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IsNullOrEmpty", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java index 02526f9a9..af0cf24ee 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java @@ -22,12 +22,12 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNull()) { - return Operand.True(); + return Operand.TRUE; } if (args1.IsNotText()) { args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IsNullOrWhiteSpace", 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java index b995f1c1f..b0bf9fed0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java @@ -3,9 +3,10 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; -public class Function_IsNumber extends Function_1 { - public Function_IsNumber(FunctionBase func1) { +public class Function_ISNUMBER extends Function_1 { + public Function_ISNUMBER(FunctionBase func1) { super(func1); } @@ -13,9 +14,9 @@ public Function_IsNumber(FunctionBase func1) { public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNumber()) { - return Operand.True(); + return Operand.TRUE; } - return Operand.False(); + return Operand.FALSE; } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java index 41d780069..2009d7828 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java @@ -14,10 +14,10 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsText()) { - return Operand.True(); + return Operand.TRUE; } - return Operand.False(); + return Operand.FALSE; } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java index ea9fe1b8d..51ae1437c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java @@ -18,7 +18,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction=0) { + return args1; + } + return Operand.Create(-args1.DoubleValue()); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java index 8b12d70eb..cb8dfad98 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java @@ -13,7 +13,7 @@ public Function_BETAINV(FunctionBase func1, FunctionBase func2, FunctionBase fun } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) throws Exception { + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 1); @@ -42,7 +42,11 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction 1.0) { return Operand.Error("Function '{0}' parameter is error!", "BetaInv"); } - return Operand.Create(ExcelFunctions.BetaInv(p, alpha, beta)); + try { + return Operand.Create(ExcelFunctions.BetaInv(p, alpha, beta)); + } catch (Exception e) { + return Operand.Error("Function '{0}' parameter is error!", "BetaInv"); + } } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java index 15a6ecf6d..9feda9fc4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java @@ -43,10 +43,10 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction m2 = FunctionUtil.sumifMatch(sunif); if (m2 != null) { - String operator = (String) m2[0]; - double value = (double) m2[1]; + String operator = m2.getFirst(); + double value = m2.getSecond(); count = FunctionUtil.F_base_countif(list, operator, value); } else { return Operand.Error("Function '{0}' parameter {1} is error!", "CountIf", 2); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java index 5e06c0083..e279d441a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java @@ -36,13 +36,17 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction 1.0) { return Operand.Error("Function '{0}' parameter is error!", "FInv"); } - return Operand.Create(ExcelFunctions.FInv(p, degreesFreedom1, degreesFreedom2)); + try { + return Operand.Create(ExcelFunctions.FInv(p, degreesFreedom1, degreesFreedom2)); + } catch (Exception e) { + return Operand.Error("Function '{0}' parameter is error!", "FInv"); + } } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java index aace9c96e..704879ea6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java @@ -4,9 +4,9 @@ import java.util.List; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionUtil; public class Function_GEOMEAN extends Function_N { public Function_GEOMEAN(FunctionBase[] funcs) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java index 20787c54f..d5aea440f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java @@ -4,9 +4,9 @@ import java.util.List; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionUtil; public class Function_HARMEAN extends Function_N { public Function_HARMEAN(FunctionBase[] funcs) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java index c78d00169..d2f809e97 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java @@ -6,9 +6,9 @@ import java.util.List; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionUtil; public class Function_LARGE extends Function_2 { public Function_LARGE(FunctionBase func1, FunctionBase func2) { @@ -42,7 +42,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction list.size() - work.ExcelIndex) { return Operand.Error("Function '{0}' parameter {1} is error!", "Large", 2); } - return Operand.Create(list.get(k - work.ExcelIndex)); + return Operand.Create((double)list.get(k - work.ExcelIndex)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java index 10e973a1b..22088c8cf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java @@ -7,7 +7,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.FunctionUtil; +import toolgood.algorithm.internals.functions.FunctionUtil; public class Function_MAX extends Function_N { public Function_MAX(FunctionBase[] funcs) { @@ -31,7 +31,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction maxEntry = Collections.max(dict.entrySet(), Comparator.comparingInt(Map.Entry::getValue)); - return Operand.Create(maxEntry.getKey()); + return Operand.Create((double)maxEntry.getKey()); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java index e2f80e8c4..381b4463b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java @@ -5,6 +5,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; @@ -19,14 +20,14 @@ public Function_PERCENTRANK(FunctionBase func1, FunctionBase func2, FunctionBase @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.getOperandType() != OperandType.Array) { + if (args1.IsNotArray()) { args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "PercentRank", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.getOperandType() != OperandType.Number) { + if (args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "PercentRank", 2); if (args2.IsError()) { return args2; @@ -40,12 +41,12 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.getOperandType() != OperandType.Number) { + if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Poisson", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.getOperandType() != OperandType.Number) { + if (args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Poisson", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.getOperandType() != OperandType.Boolean) { + if (args3.IsNotBoolean()) { args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "Poisson", 3); if (args3.IsError()) { return args3; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java index 15a5d0314..cc3f3100f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java @@ -20,14 +20,14 @@ public Function_QUARTILE(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.getOperandType() != OperandType.Array) { + if (args1.IsNotArray()) { args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Quartile", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.getOperandType() != OperandType.Number) { + if (args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Quartile", 2); if (args2.IsError()) { return args2; @@ -44,7 +44,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction 4) { return Operand.Error("Function '{0}' parameter {1} is error!", "Quartile", 2); } - double[] array = list.stream().mapToDouble(Double::doubleValue).ToArray(); + double[] array = list.stream().mapToDouble(Double::doubleValue).toArray(); return Operand.Create(ExcelFunctions.Quartile(array, quant)); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java index 999950316..6f2fd296d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -19,14 +19,14 @@ public Function_SMALL(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.getOperandType() != OperandType.Array) { + if (args1.IsNotArray()) { args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Small", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.getOperandType() != OperandType.Number) { + if (args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Small", 2); if (args2.IsError()) { return args2; @@ -53,7 +53,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction list.size() - excelIndex) { return Operand.Error("Function '{0}' parameter {1} is error!", "Small", 2); } - return Operand.Create(list.get(k - excelIndex)); + return Operand.Create((double)list.get(k - excelIndex)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java index 3bbd2b45d..27d3227e7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java @@ -10,6 +10,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.FunctionUtil.Pair; public class Function_SUMIF extends Function_3 { public Function_SUMIF(FunctionBase func1, FunctionBase func2, FunctionBase func3) { @@ -49,7 +50,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction matchResult = FunctionUtil.sumifMatch(sunif); if (matchResult != null) { - sum = FunctionUtil.F_base_sumif(list, matchResult[0], matchResult[1], sumdbs); + sum = FunctionUtil.F_base_sumif(list, matchResult.getFirst(), matchResult.getSecond(), sumdbs); } else { return Operand.Error("Function '{0}' parameter {1} is error!", "SumIf", 2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java index b29443239..89b6f14c0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java @@ -4,6 +4,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.mathNet.ExcelFunctions; @@ -17,21 +18,21 @@ public Function_TDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3 @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.getOperandType() != OperandType.Number) { + if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "TDist", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.getOperandType() != OperandType.Number) { + if (args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "TDist", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.getOperandType() != OperandType.Number) { + if (args3.IsNotNumber()) { args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "TDist", 3); if (args3.IsError()) { return args3; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java index 360f5b735..2cf338c5b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java @@ -4,6 +4,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.mathNet.ExcelFunctions; @@ -17,14 +18,14 @@ public Function_TINV(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.Type() != OperandType.Number) { + if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "TInv", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.Type() != OperandType.Number) { + if (args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "TInv", 2); if (args2.IsError()) { return args2; @@ -37,8 +38,11 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction 1.0) { return Operand.Error("Function '{0}' parameter is error!", "TInv"); } - - return Operand.Create(ExcelFunctions.TInv(p, degreesFreedom)); + try { + return Operand.Create(ExcelFunctions.TInv(p, degreesFreedom)); + } catch (Exception e) { + return Operand.Error("Function '{0}' parameter is error!", "TInv"); + } } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java index 3748a5ffb..6fcc1b777 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java @@ -4,10 +4,10 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_4; +import toolgood.algorithm.mathNet.ExcelFunctions; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.mathNet.ExcelFunctions; public class Function_WEIBULL extends Function_4 { @@ -18,28 +18,28 @@ public Function_WEIBULL(FunctionBase func1, FunctionBase func2, FunctionBase fun @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.getOperandType() != OperandType.Number) { + if (args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Weibull", 1); if (args1.IsError()) { return args1; } } Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.getOperandType() != OperandType.Number) { + if (args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Weibull", 2); if (args2.IsError()) { return args2; } } Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.getOperandType() != OperandType.Number) { + if (args3.IsNotNumber()) { args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Weibull", 3); if (args3.IsError()) { return args3; } } Operand args4 = func4.Evaluate(work, tempParameter); - if (args4.getOperandType() != OperandType.Boolean) { + if (args4.IsNotBoolean()) { args4 = args4.ToBoolean("Function '{0}' parameter {1} is error!", "Weibull", 4); if (args4.IsError()) { return args4; @@ -55,7 +55,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction Date: Sun, 1 Feb 2026 10:40:38 +0800 Subject: [PATCH 29/98] fix --- .../algorithm/internals/functions/csharp/Function_HAS.java | 2 +- .../algorithm/internals/functions/flow/Function_IF.java | 1 + .../internals/functions/flow/Function_IFERROR.java | 1 + .../internals/functions/flow/Function_ISEVEN.java | 1 + .../internals/functions/flow/Function_ISLOGICAL.java | 1 + .../internals/functions/flow/Function_ISNONTEXT.java | 1 + .../internals/functions/flow/Function_ISNULL.java | 1 + .../internals/functions/flow/Function_ISNULLOREMPTY.java | 1 + .../internals/functions/flow/Function_ISNULLORERROR.java | 1 + .../functions/flow/Function_ISNULLORWHITESPACE.java | 1 + .../algorithm/internals/functions/flow/Function_ISODD.java | 1 + .../algorithm/internals/functions/flow/Function_NOT.java | 1 + .../internals/functions/mathbase/Function_CEILING.java | 7 ++++--- .../internals/functions/mathbase/Function_SQRTPI.java | 1 + .../internals/functions/mathsum/Function_BINOMDIST.java | 2 +- .../internals/functions/mathsum/Function_EXPONDIST.java | 4 ++-- .../internals/functions/mathsum/Function_FDIST.java | 2 +- .../internals/functions/mathsum/Function_MIN.java | 6 ++++-- .../internals/functions/mathsum/Function_PERCENTILE.java | 2 +- .../internals/functions/mathsum/Function_STDEV.java | 1 + .../internals/functions/mathsum/Function_TDIST.java | 6 +++++- .../internals/functions/mathsum/Function_VARP.java | 2 +- 22 files changed, 33 insertions(+), 13 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java index 9a79f41f4..6e5a32186 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java @@ -35,7 +35,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction= 0.0 && n3 <= 1.0 && n2 >= 0)) { return Operand.Error("Function '{0}' parameter is error!", "BinomDist"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java index 136ec5db1..ac9800347 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java @@ -36,11 +36,11 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction Date: Sun, 1 Feb 2026 10:44:22 +0800 Subject: [PATCH 30/98] fix --- .../toolgood/algorithm/AlgorithmEngine.java | 12 +-- .../main/java/toolgood/algorithm/Operand.java | 2 +- .../internals/functions/FunctionUtil.java | 2 +- .../functions/mathbase/Function_LCM.java | 2 +- .../visitors/MathFunctionVisitor.java | 81 ++++++++++--------- 5 files changed, 50 insertions(+), 49 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java index 5f3dcf3fc..ded0591d7 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java @@ -95,17 +95,17 @@ public FunctionBase Parse(String exp) throws Exception { throw new Exception(LastError); } AntlrErrorTextWriter antlrErrorTextWriter = new AntlrErrorTextWriter(); - var stream = CharStreams.fromString(exp); - var lexer = new mathLexer(stream); - var tokens = new CommonTokenStream(lexer); - var parser = new mathParser(tokens); + org.antlr.v4.runtime.CharStream stream = org.antlr.v4.runtime.CharStreams.fromString(exp); + mathLexer lexer = new mathLexer(stream); + org.antlr.v4.runtime.CommonTokenStream tokens = new org.antlr.v4.runtime.CommonTokenStream(lexer); + mathParser parser = new mathParser(tokens); - var context = parser.prog(); + mathParser.ProgContext context = parser.prog(); if (antlrErrorTextWriter.IsError()) { LastError = antlrErrorTextWriter.ErrorMsg(); throw new Exception(LastError); } - var visitor = new MathFunctionVisitor(); + MathFunctionVisitor visitor = new MathFunctionVisitor(); return visitor.visit(context); } diff --git a/java/src/main/java/toolgood/algorithm/Operand.java b/java/src/main/java/toolgood/algorithm/Operand.java index e9943664a..c82c2f6f5 100644 --- a/java/src/main/java/toolgood/algorithm/Operand.java +++ b/java/src/main/java/toolgood/algorithm/Operand.java @@ -9,7 +9,7 @@ import java.util.Collection; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.internals.JsonData; +import toolgood.algorithm.litJson.JsonData; public abstract class Operand { /** diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java index c913b0b90..1901254b3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java @@ -202,7 +202,7 @@ public static int F_base_gcd(int a, int b) { return F_base_gcd(b, a % b); } - public static int F_base_lgm(List list) { + public static int F_base_lcm(List list) { List sortedList = new ArrayList<>(list); Collections.sort(sortedList); sortedList.removeIf(d -> d <= 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java index 306047b00..5e2470aee 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java @@ -31,7 +31,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction Date: Mon, 16 Mar 2026 10:58:04 +0800 Subject: [PATCH 31/98] fix --- .../main/java/toolgood/algorithm/Operand.java | 10 + .../java/toolgood/algorithm/OperandImpl.java | 19 + .../toolgood/algorithm/enums/OperandType.java | 5 + .../algorithm/internals/DiyNameKeyInfo.java | 26 + .../algorithm/internals/ParameterType.java | 28 + .../internals/functions/FunctionBase.java | 117 + .../internals/functions/Function_0.java | 26 + .../internals/functions/Function_1.java | 53 +- .../internals/functions/Function_2.java | 81 + .../internals/functions/Function_3.java | 113 +- .../internals/functions/Function_4.java | 61 +- .../internals/functions/Function_5.java | 92 + .../internals/functions/Function_6.java | 96 + .../internals/functions/Function_N.java | 14 + .../internals/functions/NoneEngine.java | 31 + .../algorithm/math/mathBaseVisitor.java | 2030 +++ .../toolgood/algorithm/math/mathLexer.java | 3786 ++-- .../toolgood/algorithm/math/mathParser.java | 14244 +++++++++------- .../toolgood/algorithm/math/mathVisitor.java | 375 +- 19 files changed, 12982 insertions(+), 8225 deletions(-) create mode 100644 java/src/main/java/toolgood/algorithm/internals/DiyNameKeyInfo.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/ParameterType.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/Function_0.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/Function_5.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/Function_6.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/NoneEngine.java create mode 100644 java/src/main/java/toolgood/algorithm/math/mathBaseVisitor.java diff --git a/java/src/main/java/toolgood/algorithm/Operand.java b/java/src/main/java/toolgood/algorithm/Operand.java index c82c2f6f5..b99e92bcb 100644 --- a/java/src/main/java/toolgood/algorithm/Operand.java +++ b/java/src/main/java/toolgood/algorithm/Operand.java @@ -37,6 +37,16 @@ public abstract class Operand { */ public static final Operand ZERO = Operand.Create(new BigDecimal("0")); + /** + * Null + */ + public static final Operand NULL_OPERAND = new OperandNull(); + + /** + * None(用于参数类型推断,NoneEngine 返回此值) + */ + public static final Operand None = new OperandNone(); + /** * 是否为空值 diff --git a/java/src/main/java/toolgood/algorithm/OperandImpl.java b/java/src/main/java/toolgood/algorithm/OperandImpl.java index e0d2574b7..4efadf31b 100644 --- a/java/src/main/java/toolgood/algorithm/OperandImpl.java +++ b/java/src/main/java/toolgood/algorithm/OperandImpl.java @@ -736,3 +736,22 @@ public OperandKeyValue(KeyValue obj) { public KeyValue Value() { return value; } } +/** + * NONE 类型操作数,用于参数类型推断(NoneEngine 返回此值) + */ +class OperandNone extends Operand { + + @Override + public OperandType Type() { return OperandType.NONE; } + + @Override + public boolean IsError() { return true; } + + @Override + public String ErrorMsg() { return "NONE"; } + + @Override + public String toString() { return "NONE"; } +} + + diff --git a/java/src/main/java/toolgood/algorithm/enums/OperandType.java b/java/src/main/java/toolgood/algorithm/enums/OperandType.java index e679781ee..d2db1f3de 100644 --- a/java/src/main/java/toolgood/algorithm/enums/OperandType.java +++ b/java/src/main/java/toolgood/algorithm/enums/OperandType.java @@ -4,6 +4,11 @@ package toolgood.algorithm.enums; public enum OperandType { + /** + * NONE(用于参数类型推断) + */ + NONE, + /** * NULL */ diff --git a/java/src/main/java/toolgood/algorithm/internals/DiyNameKeyInfo.java b/java/src/main/java/toolgood/algorithm/internals/DiyNameKeyInfo.java new file mode 100644 index 000000000..6fff2b0ca --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/DiyNameKeyInfo.java @@ -0,0 +1,26 @@ +package toolgood.algorithm.internals; + +/** + * 关键字信息 + */ +public class DiyNameKeyInfo { + /** + * 名称 + */ + public String Name; + + /** + * 开始位置 + */ + public int Start; + + /** + * 结束位置 + */ + public int End; + + @Override + public String toString() { + return Name; + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/ParameterType.java b/java/src/main/java/toolgood/algorithm/internals/ParameterType.java new file mode 100644 index 000000000..970e40710 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/ParameterType.java @@ -0,0 +1,28 @@ +package toolgood.algorithm.internals; + +import toolgood.algorithm.enums.OperandType; + +/** + * 参数类型类 + */ +public class ParameterType { + /** + * 参数名称 + */ + public String Name; + + /** + * 参数类型 + */ + public OperandType Type; + + /** + * 操作符,可为空 + */ + public String Operator; + + /** + * 操作值,可为空 + */ + public String Value; +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index cf7c8bbb1..f09db0688 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -8,13 +8,24 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; +import java.util.ArrayList; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; public abstract class FunctionBase { + /** + * 获取函数名称,默认返回类名(子类可覆盖) + */ + public String Name() { + return getClass().getSimpleName(); + } + /** * 进行计算 * @@ -24,6 +35,112 @@ public abstract class FunctionBase { */ public abstract Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter); + /** + * 进行计算(无临时参数) + */ + public Operand Evaluate(AlgorithmEngine work) { + return Evaluate(work, null); + } + + /** + * 获取结果类型(默认返回 NONE,子类可覆盖) + */ + public OperandType GetResultType() { + return OperandType.NONE; + } + + // region GetParameterTypes + + /** + * 获取参数类型列表 + */ + public List GetParameterTypes(AlgorithmEngine engine) { + NoneEngine noneEngine = new NoneEngine(engine); + List result = new ArrayList<>(); + GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); + return result; + } + + /** + * 内部方法,获取参数类型(默认空实现,子类可覆盖) + */ + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + } + + // endregion GetParameterTypes + + // region ConvertToXxx helpers + + /** + * 转换为文本类型 + */ + protected Operand ConvertToText(Operand arg, int paramIndex) { + return arg.ToText("Function '%s' parameter %d is error!", Name(), paramIndex); + } + + /** + * 转换为布尔类型 + */ + protected Operand ConvertToBoolean(Operand arg, int paramIndex) { + return arg.ToBoolean("Function '%s' parameter %d is error!", Name(), paramIndex); + } + + /** + * 转换为数字类型 + */ + protected Operand ConvertToNumber(Operand arg, int paramIndex) { + return arg.ToNumber("Function '%s' parameter %d is error!", Name(), paramIndex); + } + + /** + * 转换为数组类型 + */ + protected Operand ConvertToArray(Operand arg, int paramIndex) { + return arg.ToArray("Function '%s' parameter %d is error!", Name(), paramIndex); + } + + /** + * 转换为日期类型 + */ + protected Operand ConvertToDate(Operand arg, int paramIndex) { + return arg.ToMyDate("Function '%s' parameter %d is error!", Name(), paramIndex); + } + + // endregion + + // region Error helpers + + /** + * 参数错误 + */ + protected Operand ParameterError(int paramIndex) { + return Operand.Error("Function '%s' parameter %d is error!", Name(), paramIndex); + } + + /** + * 函数错误 + */ + protected Operand FunctionError() { + return Operand.Error("Function '%s' parameter is error!", Name()); + } + + /** + * 比较错误 + */ + protected Operand CompareError() { + return Operand.Error("Function '%s' compare is error.", Name()); + } + + /** + * 除零错误 + */ + protected Operand Div0Error() { + return Operand.Error("Function '%s' Div 0 error!", Name()); + } + + // endregion + //region TryEvaluate /** diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_0.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_0.java new file mode 100644 index 000000000..ecb75d17c --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_0.java @@ -0,0 +1,26 @@ +package toolgood.algorithm.internals.functions; + +import java.util.List; + +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; + +/** + * 零参函数抽象基类 + */ +public abstract class Function_0 extends FunctionBase { + + protected Function_0() { + } + + @Override + public OperandType GetResultType() { + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + // 零参函数,无参数类型 + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java index c2718e9c6..afc89696f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java @@ -1,6 +1,13 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; public abstract class Function_1 extends FunctionBase { protected FunctionBase func1; @@ -8,11 +15,55 @@ public abstract class Function_1 extends FunctionBase { protected Function_1(FunctionBase func1) { this.func1 = func1; } - + protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(functionName); stringBuilder.append('('); func1.toString(stringBuilder, false); stringBuilder.append(')'); } + + @Override + public OperandType GetResultType() { + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + } + + // region Get_1 helpers + + protected Operand GetText_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsText()) return args1; + return ConvertToText(args1, 1); + } + + protected Operand GetNumber_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsNumber()) return args1; + return ConvertToNumber(args1, 1); + } + + protected Operand GetDate_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsDate()) return args1; + return ConvertToDate(args1, 1); + } + + protected Operand GetBoolean_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsBoolean()) return args1; + return ConvertToBoolean(args1, 1); + } + + protected Operand GetArray_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsArray()) return args1; + return ConvertToArray(args1, 1); + } + + // endregion } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java index 4b96a42ed..a1d9a166b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java @@ -1,6 +1,13 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; public abstract class Function_2 extends FunctionBase { protected FunctionBase func1; @@ -21,4 +28,78 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { } stringBuilder.append(')'); } + + @Override + public OperandType GetResultType() { + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + } + + // region Get_1/2 helpers + + protected Operand GetText_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsText()) return args1; + return ConvertToText(args1, 1); + } + + protected Operand GetNumber_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsNumber()) return args1; + return ConvertToNumber(args1, 1); + } + + protected Operand GetDate_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsDate()) return args1; + return ConvertToDate(args1, 1); + } + + protected Operand GetBoolean_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsBoolean()) return args1; + return ConvertToBoolean(args1, 1); + } + + protected Operand GetArray_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsArray()) return args1; + return ConvertToArray(args1, 1); + } + + protected Operand GetText_2(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsText()) return args2; + return ConvertToText(args2, 2); + } + + protected Operand GetNumber_2(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsNumber()) return args2; + return ConvertToNumber(args2, 2); + } + + protected Operand GetDate_2(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsDate()) return args2; + return ConvertToDate(args2, 2); + } + + protected Operand GetBoolean_2(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsBoolean()) return args2; + return ConvertToBoolean(args2, 2); + } + + protected Operand GetArray_2(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsArray()) return args2; + return ConvertToArray(args2, 2); + } + + // endregion } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java index 41cfd9d65..15d995a50 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java @@ -1,6 +1,13 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; public abstract class Function_3 extends FunctionBase { protected FunctionBase func1; @@ -12,7 +19,7 @@ protected Function_3(FunctionBase func1, FunctionBase func2, FunctionBase func3) this.func2 = func2; this.func3 = func3; } - + protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(functionName); stringBuilder.append('('); @@ -27,4 +34,108 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { } stringBuilder.append(')'); } + + @Override + public OperandType GetResultType() { + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + } + + // region Get_1/2/3 helpers + + protected Operand GetText_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsText()) return args1; + return ConvertToText(args1, 1); + } + + protected Operand GetNumber_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsNumber()) return args1; + return ConvertToNumber(args1, 1); + } + + protected Operand GetDate_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsDate()) return args1; + return ConvertToDate(args1, 1); + } + + protected Operand GetBoolean_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsBoolean()) return args1; + return ConvertToBoolean(args1, 1); + } + + protected Operand GetArray_1(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsArray()) return args1; + return ConvertToArray(args1, 1); + } + + protected Operand GetText_2(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsText()) return args2; + return ConvertToText(args2, 2); + } + + protected Operand GetNumber_2(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsNumber()) return args2; + return ConvertToNumber(args2, 2); + } + + protected Operand GetDate_2(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsDate()) return args2; + return ConvertToDate(args2, 2); + } + + protected Operand GetBoolean_2(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsBoolean()) return args2; + return ConvertToBoolean(args2, 2); + } + + protected Operand GetArray_2(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsArray()) return args2; + return ConvertToArray(args2, 2); + } + + protected Operand GetText_3(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args3 = func3.Evaluate(engine, tempParameter); + if (args3.IsText()) return args3; + return ConvertToText(args3, 3); + } + + protected Operand GetNumber_3(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args3 = func3.Evaluate(engine, tempParameter); + if (args3.IsNumber()) return args3; + return ConvertToNumber(args3, 3); + } + + protected Operand GetDate_3(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args3 = func3.Evaluate(engine, tempParameter); + if (args3.IsDate()) return args3; + return ConvertToDate(args3, 3); + } + + protected Operand GetBoolean_3(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args3 = func3.Evaluate(engine, tempParameter); + if (args3.IsBoolean()) return args3; + return ConvertToBoolean(args3, 3); + } + + protected Operand GetArray_3(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args3 = func3.Evaluate(engine, tempParameter); + if (args3.IsArray()) return args3; + return ConvertToArray(args3, 3); + } + + // endregion } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java index de0b04344..efd18304d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java @@ -1,6 +1,13 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; public abstract class Function_4 extends FunctionBase { protected FunctionBase func1; @@ -14,7 +21,15 @@ protected Function_4(FunctionBase func1, FunctionBase func2, FunctionBase func3, this.func3 = func3; this.func4 = func4; } - + + /** FunctionBase[] 数组构造器,供 Function_5/6 调用 */ + protected Function_4(FunctionBase[] funcs) { + if (funcs.length >= 1) this.func1 = funcs[0]; + if (funcs.length >= 2) this.func2 = funcs[1]; + if (funcs.length >= 3) this.func3 = funcs[2]; + if (funcs.length >= 4) this.func4 = funcs[3]; + } + protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(functionName); stringBuilder.append('('); @@ -33,4 +48,48 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { } stringBuilder.append(')'); } + + @Override + public OperandType GetResultType() { + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + } + + // region Get_4 helpers + + protected Operand GetText_4(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args4 = func4.Evaluate(engine, tempParameter); + if (args4.IsText()) return args4; + return ConvertToText(args4, 4); + } + + protected Operand GetNumber_4(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args4 = func4.Evaluate(engine, tempParameter); + if (args4.IsNumber()) return args4; + return ConvertToNumber(args4, 4); + } + + protected Operand GetDate_4(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args4 = func4.Evaluate(engine, tempParameter); + if (args4.IsDate()) return args4; + return ConvertToDate(args4, 4); + } + + protected Operand GetBoolean_4(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args4 = func4.Evaluate(engine, tempParameter); + if (args4.IsBoolean()) return args4; + return ConvertToBoolean(args4, 4); + } + + protected Operand GetArray_4(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args4 = func4.Evaluate(engine, tempParameter); + if (args4.IsArray()) return args4; + return ConvertToArray(args4, 4); + } + + // endregion } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_5.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_5.java new file mode 100644 index 000000000..aa4332781 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_5.java @@ -0,0 +1,92 @@ +package toolgood.algorithm.internals.functions; + +import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; + +/** + * 5参函数抽象基类,继承 Function_4 + */ +public abstract class Function_5 extends Function_4 { + protected FunctionBase func5; + + protected Function_5(FunctionBase[] funcs) { + super(funcs); + if (funcs.length >= 5) { + this.func5 = funcs[4]; + } + } + + @Override + protected void AddFunction(StringBuilder stringBuilder, String functionName) { + stringBuilder.append(functionName); + stringBuilder.append('('); + func1.toString(stringBuilder, false); + if (func2 != null) { + stringBuilder.append(", "); + func2.toString(stringBuilder, false); + if (func3 != null) { + stringBuilder.append(", "); + func3.toString(stringBuilder, false); + if (func4 != null) { + stringBuilder.append(", "); + func4.toString(stringBuilder, false); + if (func5 != null) { + stringBuilder.append(", "); + func5.toString(stringBuilder, false); + } + } + } + } + stringBuilder.append(')'); + } + + @Override + public OperandType GetResultType() { + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + } + + // region Get_5 helpers + + protected Operand GetText_5(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args5 = func5.Evaluate(engine, tempParameter); + if (args5.IsText()) return args5; + return ConvertToText(args5, 5); + } + + protected Operand GetNumber_5(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args5 = func5.Evaluate(engine, tempParameter); + if (args5.IsNumber()) return args5; + return ConvertToNumber(args5, 5); + } + + protected Operand GetDate_5(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args5 = func5.Evaluate(engine, tempParameter); + if (args5.IsDate()) return args5; + return ConvertToDate(args5, 5); + } + + protected Operand GetBoolean_5(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args5 = func5.Evaluate(engine, tempParameter); + if (args5.IsBoolean()) return args5; + return ConvertToBoolean(args5, 5); + } + + protected Operand GetArray_5(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args5 = func5.Evaluate(engine, tempParameter); + if (args5.IsArray()) return args5; + return ConvertToArray(args5, 5); + } + + // endregion +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_6.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_6.java new file mode 100644 index 000000000..dfb0d8c4c --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_6.java @@ -0,0 +1,96 @@ +package toolgood.algorithm.internals.functions; + +import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; + +/** + * 6参函数抽象基类,继承 Function_5 + */ +public abstract class Function_6 extends Function_5 { + protected FunctionBase func6; + + protected Function_6(FunctionBase[] funcs) { + super(funcs); + if (funcs.length >= 6) { + this.func6 = funcs[5]; + } + } + + @Override + protected void AddFunction(StringBuilder stringBuilder, String functionName) { + stringBuilder.append(functionName); + stringBuilder.append('('); + func1.toString(stringBuilder, false); + if (func2 != null) { + stringBuilder.append(", "); + func2.toString(stringBuilder, false); + if (func3 != null) { + stringBuilder.append(", "); + func3.toString(stringBuilder, false); + if (func4 != null) { + stringBuilder.append(", "); + func4.toString(stringBuilder, false); + if (func5 != null) { + stringBuilder.append(", "); + func5.toString(stringBuilder, false); + if (func6 != null) { + stringBuilder.append(", "); + func6.toString(stringBuilder, false); + } + } + } + } + } + stringBuilder.append(')'); + } + + @Override + public OperandType GetResultType() { + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + } + + // region Get_6 helpers + + protected Operand GetText_6(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args6 = func6.Evaluate(engine, tempParameter); + if (args6.IsText()) return args6; + return ConvertToText(args6, 6); + } + + protected Operand GetNumber_6(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args6 = func6.Evaluate(engine, tempParameter); + if (args6.IsNumber()) return args6; + return ConvertToNumber(args6, 6); + } + + protected Operand GetDate_6(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args6 = func6.Evaluate(engine, tempParameter); + if (args6.IsDate()) return args6; + return ConvertToDate(args6, 6); + } + + protected Operand GetBoolean_6(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args6 = func6.Evaluate(engine, tempParameter); + if (args6.IsBoolean()) return args6; + return ConvertToBoolean(args6, 6); + } + + protected Operand GetArray_6(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args6 = func6.Evaluate(engine, tempParameter); + if (args6.IsArray()) return args6; + return ConvertToArray(args6, 6); + } + + // endregion +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java index a5bc40226..0b8779c5a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java @@ -1,6 +1,10 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; +import java.util.List; + +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; public abstract class Function_N extends FunctionBase { protected FunctionBase[] funcs; @@ -20,4 +24,14 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { } stringBuilder.append(')'); } + + @Override + public OperandType GetResultType() { + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/NoneEngine.java b/java/src/main/java/toolgood/algorithm/internals/functions/NoneEngine.java new file mode 100644 index 000000000..f86993bdd --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/NoneEngine.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions; + +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; + +/** + * 参数类型推断引擎:getParameter 返回 Operand.None,executeDiyFunction 返回 Operand.None + */ +public class NoneEngine extends AlgorithmEngine { + + public NoneEngine(AlgorithmEngine engine) { + this.AreaUnit = engine.AreaUnit; + this.DistanceUnit = engine.DistanceUnit; + this.SetLastError(engine.getLastError()); + this.MassUnit = engine.MassUnit; + this.UseLocalTime = engine.UseLocalTime; + this.ExcelIndex = engine.ExcelIndex; + } + + @Override + public Operand getParameter(String parameter) { + return Operand.None; + } + + @Override + public Operand executeDiyFunction(String parameter, List args) { + return Operand.None; + } +} diff --git a/java/src/main/java/toolgood/algorithm/math/mathBaseVisitor.java b/java/src/main/java/toolgood/algorithm/math/mathBaseVisitor.java new file mode 100644 index 000000000..7dbe62f09 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/math/mathBaseVisitor.java @@ -0,0 +1,2030 @@ +// Generated from math.g4 by ANTLR 4.13.2 +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link mathVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +@SuppressWarnings("CheckReturnValue") +public class mathBaseVisitor extends AbstractParseTreeVisitor implements mathVisitor { + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitProg(mathParser.ProgContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCEILING_fun(mathParser.CEILING_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFACT_fun(mathParser.FACT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNPV_fun(mathParser.NPV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLOOKFLOOR_fun(mathParser.LOOKFLOOR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHASVALUE_fun(mathParser.HASVALUE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAddSub_fun(mathParser.AddSub_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAVERAGEIF_fun(mathParser.AVERAGEIF_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPARAM_fun(mathParser.PARAM_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitISNULLORERROR_fun(mathParser.ISNULLORERROR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRIGHT_fun(mathParser.RIGHT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBESSELI_fun(mathParser.BESSELI_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCSCH_fun(mathParser.CSCH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOCT2BIN_fun(mathParser.OCT2BIN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitQUARTILE_fun(mathParser.QUARTILE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUNICODE_fun(mathParser.UNICODE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFINV_fun(mathParser.FINV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSEC_fun(mathParser.SEC_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSYD_fun(mathParser.SYD_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNOT_fun(mathParser.NOT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDAYS360_fun(mathParser.DAYS360_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitACOTH_fun(mathParser.ACOTH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLOOKCEILING_fun(mathParser.LOOKCEILING_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitWEEKNUM_fun(mathParser.WEEKNUM_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPOISSON_fun(mathParser.POISSON_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitISREGEX_fun(mathParser.ISREGEX_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCOVARIANCES_fun(mathParser.COVARIANCES_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPERCENTILE_fun(mathParser.PERCENTILE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRATE_fun(mathParser.RATE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDiyFunction_fun(mathParser.DiyFunction_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSHA256_fun(mathParser.SHA256_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHAS_fun(mathParser.HAS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHYPGEOMDIST_fun(mathParser.HYPGEOMDIST_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPERMUT_fun(mathParser.PERMUT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTRIMSTART_fun(mathParser.TRIMSTART_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRMB_fun(mathParser.RMB_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDEC2HEX_fun(mathParser.DEC2HEX_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSLOPE_fun(mathParser.SLOPE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCLEAN_fun(mathParser.CLEAN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLOWER_fun(mathParser.LOWER_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOR_fun(mathParser.OR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitADDMONTHS_fun(mathParser.ADDMONTHS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNORMSINV_fun(mathParser.NORMSINV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLEFT_fun(mathParser.LEFT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitISEVEN_fun(mathParser.ISEVEN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLOGINV_fun(mathParser.LOGINV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPPMT_fun(mathParser.PPMT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitWORKDAY_fun(mathParser.WORKDAY_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitISERROR_fun(mathParser.ISERROR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBIN2DEC_fun(mathParser.BIN2DEC_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitJIS_fun(mathParser.JIS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLCM_fun(mathParser.LCM_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBESSELJ_fun(mathParser.BESSELJ_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHARMEAN_fun(mathParser.HARMEAN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNORMINV_fun(mathParser.NORMINV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGAMMAINV_fun(mathParser.GAMMAINV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSQRT_fun(mathParser.SQRT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDEGREES_fun(mathParser.DEGREES_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMROUND_fun(mathParser.MROUND_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDATEDIF_fun(mathParser.DATEDIF_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTRIMEND_fun(mathParser.TRIMEND_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitISLOGICAL_fun(mathParser.ISLOGICAL_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitINT_fun(mathParser.INT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDDB_fun(mathParser.DDB_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSUMIF_fun(mathParser.SUMIF_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHEX2OCT_fun(mathParser.HEX2OCT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPI_fun(mathParser.PI_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitYEAR_fun(mathParser.YEAR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSQRTPI_fun(mathParser.SQRTPI_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCONCATENATE_fun(mathParser.CONCATENATE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCOUNT_fun(mathParser.COUNT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFALSE_fun(mathParser.FALSE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHTMLENCODE_fun(mathParser.HTMLENCODE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBASE64URLTOTEXT_fun(mathParser.BASE64URLTOTEXT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLOG10_fun(mathParser.LOG10_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitXIRR_fun(mathParser.XIRR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitISTEXT_fun(mathParser.ISTEXT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNEGBINOMDIST_fun(mathParser.NEGBINOMDIST_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNETWORKDAYS_fun(mathParser.NETWORKDAYS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFACTDOUBLE_fun(mathParser.FACTDOUBLE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTIMEVALUE_fun(mathParser.TIMEVALUE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAVEDEV_fun(mathParser.AVEDEV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGUID_fun(mathParser.GUID_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPV_fun(mathParser.PV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitJSON_fun(mathParser.JSON_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFIXED_fun(mathParser.FIXED_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGetJsonValue_fun(mathParser.GetJsonValue_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTINV_fun(mathParser.TINV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEDATE_fun(mathParser.EDATE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGEOMEAN_fun(mathParser.GEOMEAN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVAR_fun(mathParser.VAR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSIGN_fun(mathParser.SIGN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEOMONTH_fun(mathParser.EOMONTH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFLOOR_fun(mathParser.FLOOR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHOUR_fun(mathParser.HOUR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLEN_fun(mathParser.LEN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitACOS_fun(mathParser.ACOS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitISNULLORWHITESPACE_fun(mathParser.ISNULLORWHITESPACE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNUM_fun(mathParser.NUM_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCOSH_fun(mathParser.COSH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCORREL_fun(mathParser.CORREL_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGESTEP_fun(mathParser.GESTEP_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitXNPV_fun(mathParser.XNPV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitQUOTIENT_fun(mathParser.QUOTIENT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFORECAST_fun(mathParser.FORECAST_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBESSELY_fun(mathParser.BESSELY_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOCT2DEC_fun(mathParser.OCT2DEC_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSEARCH_fun(mathParser.SEARCH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIRR_fun(mathParser.IRR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitACOT_fun(mathParser.ACOT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitROUNDUP_fun(mathParser.ROUNDUP_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCOMBIN_fun(mathParser.COMBIN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCODE_fun(mathParser.CODE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCSC_fun(mathParser.CSC_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitASINH_fun(mathParser.ASINH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCOTH_fun(mathParser.COTH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSIN_fun(mathParser.SIN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSUBSTRING_fun(mathParser.SUBSTRING_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRANDBETWEEN_fun(mathParser.RANDBETWEEN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAVERAGE_fun(mathParser.AVERAGE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLOG_fun(mathParser.LOG_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHMACSHA512_fun(mathParser.HMACSHA512_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAndOr_fun(mathParser.AndOr_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSTDEVP_fun(mathParser.STDEVP_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitADDYEARS_fun(mathParser.ADDYEARS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitADDSECONDS_fun(mathParser.ADDSECONDS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitArray_fun(mathParser.Array_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitROUND_fun(mathParser.ROUND_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEXP_fun(mathParser.EXP_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCOUNTIF_fun(mathParser.COUNTIF_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVARP_fun(mathParser.VARP_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitREMOVEEND_fun(mathParser.REMOVEEND_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDATE_fun(mathParser.DATE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPARAMETER_fun(mathParser.PARAMETER_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBESSELK_fun(mathParser.BESSELK_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSPLIT_fun(mathParser.SPLIT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitREGEXREPLACE_fun(mathParser.REGEXREPLACE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCOVAR_fun(mathParser.COVAR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitURLDECODE_fun(mathParser.URLDECODE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLARGE_fun(mathParser.LARGE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSUMXMY2_fun(mathParser.SUMXMY2_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSERIESSUM_fun(mathParser.SERIESSUM_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTIMESTAMP_fun(mathParser.TIMESTAMP_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRANK_fun(mathParser.RANK_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPMT_fun(mathParser.PMT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitROMAN_fun(mathParser.ROMAN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDELTA_fun(mathParser.DELTA_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVALUE_fun(mathParser.VALUE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDAY_fun(mathParser.DAY_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitWEIBULL_fun(mathParser.WEIBULL_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPEARSON_fun(mathParser.PEARSON_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHMACSHA256_fun(mathParser.HMACSHA256_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBINOMDIST_fun(mathParser.BINOMDIST_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitJudge_fun(mathParser.Judge_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDEVSQ_fun(mathParser.DEVSQ_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitERFC_fun(mathParser.ERFC_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMODE_fun(mathParser.MODE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBETAINV_fun(mathParser.BETAINV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMAX_fun(mathParser.MAX_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMINUTE_fun(mathParser.MINUTE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTAN_fun(mathParser.TAN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIFERROR_fun(mathParser.IFERROR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFDIST_fun(mathParser.FDIST_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitINDEXOF_fun(mathParser.INDEXOF_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUPPER_fun(mathParser.UPPER_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHTMLDECODE_fun(mathParser.HTMLDECODE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEXPONDIST_fun(mathParser.EXPONDIST_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDEC2BIN_fun(mathParser.DEC2BIN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHEX2DEC_fun(mathParser.HEX2DEC_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSMALL_fun(mathParser.SMALL_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIFS_fun(mathParser.IFS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitODD_fun(mathParser.ODD_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTEXTTOBASE64_fun(mathParser.TEXTTOBASE64_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSUMPRODUCT_fun(mathParser.SUMPRODUCT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMID_fun(mathParser.MID_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPERCENTRANK_fun(mathParser.PERCENTRANK_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSTDEV_fun(mathParser.STDEV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNORMSDIST_fun(mathParser.NORMSDIST_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitISNUMBER_fun(mathParser.ISNUMBER_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLASTINDEXOF_fun(mathParser.LASTINDEXOF_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMOD_fun(mathParser.MOD_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCHAR_fun(mathParser.CHAR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitREGEX_fun(mathParser.REGEX_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTEXTTOBASE64URL_fun(mathParser.TEXTTOBASE64URL_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMD5_fun(mathParser.MD5_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitREPLACE_fun(mathParser.REPLACE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitACOSH_fun(mathParser.ACOSH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitISODD_fun(mathParser.ISODD_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMIRR_fun(mathParser.MIRR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitASC_fun(mathParser.ASC_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCOS_fun(mathParser.COS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLN_fun(mathParser.LN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSTRING_fun(mathParser.STRING_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHMACMD5_fun(mathParser.HMACMD5_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPRODUCT_fun(mathParser.PRODUCT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEXACT_fun(mathParser.EXACT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitADDMINUTES_fun(mathParser.ADDMINUTES_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSUMSQ_fun(mathParser.SUMSQ_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSUM_fun(mathParser.SUM_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSECOND_fun(mathParser.SECOND_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDAYS_fun(mathParser.DAYS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGAMMADIST_fun(mathParser.GAMMADIST_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOCT2HEX_fun(mathParser.OCT2HEX_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTODAY_fun(mathParser.TODAY_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitERROR_fun(mathParser.ERROR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitATAN_fun(mathParser.ATAN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitERF_fun(mathParser.ERF_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSUMX2PY2_fun(mathParser.SUMX2PY2_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitE_fun(mathParser.E_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTRIM_fun(mathParser.TRIM_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRADIANS_fun(mathParser.RADIANS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGAMMALN_fun(mathParser.GAMMALN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTEXT_fun(mathParser.TEXT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFISHER_fun(mathParser.FISHER_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAND_fun(mathParser.AND_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitArrayJson_fun(mathParser.ArrayJson_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBIN2HEX_fun(mathParser.BIN2HEX_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMULTINOMIAL_fun(mathParser.MULTINOMIAL_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMONTH_fun(mathParser.MONTH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitURLENCODE_fun(mathParser.URLENCODE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNORMDIST_fun(mathParser.NORMDIST_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIPMT_fun(mathParser.IPMT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHMACSHA1_fun(mathParser.HMACSHA1_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitENDSWITH_fun(mathParser.ENDSWITH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBracket_fun(mathParser.Bracket_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSLN_fun(mathParser.SLN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBETADIST_fun(mathParser.BETADIST_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitATANH_fun(mathParser.ATANH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNOW_fun(mathParser.NOW_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMEDIAN_fun(mathParser.MEDIAN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPOWER_fun(mathParser.POWER_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDEC2OCT_fun(mathParser.DEC2OCT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPROPER_fun(mathParser.PROPER_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTRUNC_fun(mathParser.TRUNC_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitGCD_fun(mathParser.GCD_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTANH_fun(mathParser.TANH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitHEX2BIN_fun(mathParser.HEX2BIN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSINH_fun(mathParser.SINH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSHA512_fun(mathParser.SHA512_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMIN_fun(mathParser.MIN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitADDDAYS_fun(mathParser.ADDDAYS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSWITCH_fun(mathParser.SWITCH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitISNONTEXT_fun(mathParser.ISNONTEXT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitABS_fun(mathParser.ABS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitROUNDDOWN_fun(mathParser.ROUNDDOWN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitIF_fun(mathParser.IF_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitJOIN_fun(mathParser.JOIN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFIND_fun(mathParser.FIND_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSUBSTITUTE_fun(mathParser.SUBSTITUTE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitPercentage_fun(mathParser.Percentage_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitREPT_fun(mathParser.REPT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitISNULL_fun(mathParser.ISNULL_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFV_fun(mathParser.FV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitASIN_fun(mathParser.ASIN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSUMX2MY2_fun(mathParser.SUMX2MY2_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitMulDiv_fun(mathParser.MulDiv_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNPER_fun(mathParser.NPER_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitREMOVESTART_fun(mathParser.REMOVESTART_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitXOR_fun(mathParser.XOR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitT_fun(mathParser.T_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitWEEKDAY_fun(mathParser.WEEKDAY_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBIN2OCT_fun(mathParser.BIN2OCT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNULL_fun(mathParser.NULL_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitBASE64TOTEXT_fun(mathParser.BASE64TOTEXT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTDIST_fun(mathParser.TDIST_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDATEVALUE_fun(mathParser.DATEVALUE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSTARTSWITH_fun(mathParser.STARTSWITH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEVEN_fun(mathParser.EVEN_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitLOGNORMDIST_fun(mathParser.LOGNORMDIST_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDB_fun(mathParser.DB_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitISNULLOREMPTY_fun(mathParser.ISNULLOREMPTY_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTRUE_fun(mathParser.TRUE_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitINTERCEPT_fun(mathParser.INTERCEPT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFISHERINV_fun(mathParser.FISHERINV_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSHA1_fun(mathParser.SHA1_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTIME_fun(mathParser.TIME_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitARABIC_fun(mathParser.ARABIC_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitATAN2_fun(mathParser.ATAN2_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSECH_fun(mathParser.SECH_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitCOT_fun(mathParser.COT_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUNICHAR_fun(mathParser.UNICHAR_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitADDHOURS_fun(mathParser.ADDHOURS_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVersion_fun(mathParser.Version_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitYEARFRAC_fun(mathParser.YEARFRAC_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitRAND_fun(mathParser.RAND_funContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNum(mathParser.NumContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitArrayJson(mathParser.ArrayJsonContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitParameter2(mathParser.Parameter2Context ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/math/mathLexer.java b/java/src/main/java/toolgood/algorithm/math/mathLexer.java index 5a29f9e6b..8507890b2 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathLexer.java +++ b/java/src/main/java/toolgood/algorithm/math/mathLexer.java @@ -1,5 +1,4 @@ // Generated from math.g4 by ANTLR 4.13.2 -package toolgood.algorithm.math; import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.Token; @@ -21,42 +20,50 @@ public class mathLexer extends Lexer { T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, SUB=29, NUM=30, STRING=31, NULL=32, - ERROR=33, UNIT=34, IF=35, IFERROR=36, ISNUMBER=37, ISTEXT=38, ISERROR=39, - ISNONTEXT=40, ISLOGICAL=41, ISEVEN=42, ISODD=43, IsNull=44, ISNULLORERROR=45, - AND=46, OR=47, NOT=48, TRUE=49, FALSE=50, E=51, PI=52, DEC2BIN=53, DEC2HEX=54, - DEC2OCT=55, HEX2BIN=56, HEX2DEC=57, HEX2OCT=58, OCT2BIN=59, OCT2DEC=60, - OCT2HEX=61, BIN2OCT=62, BIN2DEC=63, BIN2HEX=64, ABS=65, QUOTIENT=66, MOD=67, - SIGN=68, SQRT=69, TRUNC=70, INT=71, GCD=72, LCM=73, COMBIN=74, PERMUT=75, - DEGREES=76, RADIANS=77, COS=78, COSH=79, SIN=80, SINH=81, TAN=82, TANH=83, - ACOS=84, ACOSH=85, ASIN=86, ASINH=87, ATAN=88, ATANH=89, ATAN2=90, ROUND=91, - ROUNDDOWN=92, ROUNDUP=93, CEILING=94, FLOOR=95, EVEN=96, ODD=97, MROUND=98, - RAND=99, RANDBETWEEN=100, FACT=101, FACTDOUBLE=102, POWER=103, EXP=104, - LN=105, LOG=106, LOG10=107, MULTINOMIAL=108, PRODUCT=109, SQRTPI=110, - SUMSQ=111, ASC=112, JIS=113, CHAR=114, CLEAN=115, CODE=116, CONCATENATE=117, - EXACT=118, FIND=119, FIXED=120, LEFT=121, LEN=122, LOWER=123, MID=124, - PROPER=125, REPLACE=126, REPT=127, RIGHT=128, RMB=129, SEARCH=130, SUBSTITUTE=131, - T=132, TEXT=133, TRIM=134, UPPER=135, VALUE=136, DATEVALUE=137, TIMEVALUE=138, - DATE=139, TIME=140, NOW=141, TODAY=142, YEAR=143, MONTH=144, DAY=145, - HOUR=146, MINUTE=147, SECOND=148, WEEKDAY=149, DATEDIF=150, DAYS360=151, - EDATE=152, EOMONTH=153, NETWORKDAYS=154, WORKDAY=155, WEEKNUM=156, MAX=157, - MEDIAN=158, MIN=159, QUARTILE=160, MODE=161, LARGE=162, SMALL=163, PERCENTILE=164, - PERCENTRANK=165, AVERAGE=166, AVERAGEIF=167, GEOMEAN=168, HARMEAN=169, - COUNT=170, COUNTIF=171, SUM=172, SUMIF=173, AVEDEV=174, STDEV=175, STDEVP=176, - COVAR=177, COVARIANCES=178, DEVSQ=179, VAR=180, VARP=181, NORMDIST=182, - NORMINV=183, NORMSDIST=184, NORMSINV=185, BETADIST=186, BETAINV=187, BINOMDIST=188, - EXPONDIST=189, FDIST=190, FINV=191, FISHER=192, FISHERINV=193, GAMMADIST=194, - GAMMAINV=195, GAMMALN=196, HYPGEOMDIST=197, LOGINV=198, LOGNORMDIST=199, - NEGBINOMDIST=200, POISSON=201, TDIST=202, TINV=203, WEIBULL=204, URLENCODE=205, - URLDECODE=206, HTMLENCODE=207, HTMLDECODE=208, BASE64TOTEXT=209, BASE64URLTOTEXT=210, - TEXTTOBASE64=211, TEXTTOBASE64URL=212, REGEX=213, REGEXREPALCE=214, ISREGEX=215, - GUID=216, MD5=217, SHA1=218, SHA256=219, SHA512=220, HMACMD5=221, HMACSHA1=222, - HMACSHA256=223, HMACSHA512=224, TRIMSTART=225, TRIMEND=226, INDEXOF=227, - LASTINDEXOF=228, SPLIT=229, JOIN=230, SUBSTRING=231, STARTSWITH=232, ENDSWITH=233, - ISNULLOREMPTY=234, ISNULLORWHITESPACE=235, REMOVESTART=236, REMOVEEND=237, - JSON=238, LOOKCEILING=239, LOOKFLOOR=240, ARRAY=241, ALGORITHMVERSION=242, - ADDYEARS=243, ADDMONTHS=244, ADDDAYS=245, ADDHOURS=246, ADDMINUTES=247, - ADDSECONDS=248, TIMESTAMP=249, HAS=250, HASVALUE=251, PARAM=252, PARAMETER=253, - WS=254, COMMENT=255, LINE_COMMENT=256; + ERROR=33, UNIT=34, IF=35, IFS=36, SWITCH=37, IFERROR=38, ISNUMBER=39, + ISTEXT=40, ISERROR=41, ISNONTEXT=42, ISLOGICAL=43, ISEVEN=44, ISODD=45, + ISNULL=46, ISNULLORERROR=47, AND=48, OR=49, XOR=50, NOT=51, TRUE=52, FALSE=53, + E=54, PI=55, DEC2BIN=56, DEC2HEX=57, DEC2OCT=58, HEX2BIN=59, HEX2DEC=60, + HEX2OCT=61, OCT2BIN=62, OCT2DEC=63, OCT2HEX=64, BIN2OCT=65, BIN2DEC=66, + BIN2HEX=67, ABS=68, QUOTIENT=69, MOD=70, SIGN=71, SQRT=72, TRUNC=73, INT=74, + GCD=75, LCM=76, COMBIN=77, PERMUT=78, DEGREES=79, RADIANS=80, COS=81, + COSH=82, SIN=83, SINH=84, TAN=85, TANH=86, COT=87, COTH=88, CSC=89, CSCH=90, + SEC=91, SECH=92, ACOS=93, ACOSH=94, ASIN=95, ASINH=96, ATAN=97, ATANH=98, + ACOT=99, ACOTH=100, ATAN2=101, ROUND=102, ROUNDDOWN=103, ROUNDUP=104, + CEILING=105, FLOOR=106, EVEN=107, ODD=108, MROUND=109, RAND=110, RANDBETWEEN=111, + FACT=112, FACTDOUBLE=113, POWER=114, EXP=115, LN=116, LOG=117, LOG10=118, + MULTINOMIAL=119, PRODUCT=120, SQRTPI=121, ERF=122, ERFC=123, BESSELI=124, + BESSELJ=125, BESSELK=126, BESSELY=127, DELTA=128, GESTEP=129, SUMSQ=130, + SUMPRODUCT=131, SUMX2MY2=132, SUMX2PY2=133, SUMXMY2=134, ARABIC=135, ROMAN=136, + SERIESSUM=137, RANK=138, FORECAST=139, INTERCEPT=140, SLOPE=141, CORREL=142, + PEARSON=143, YEARFRAC=144, ASC=145, JIS=146, CHAR=147, CLEAN=148, CODE=149, + UNICHAR=150, UNICODE=151, CONCATENATE=152, EXACT=153, FIND=154, FIXED=155, + LEFT=156, LEN=157, LOWER=158, MID=159, PROPER=160, REPLACE=161, REPT=162, + RIGHT=163, RMB=164, SEARCH=165, SUBSTITUTE=166, T=167, TEXT=168, TRIM=169, + UPPER=170, VALUE=171, DATEVALUE=172, TIMEVALUE=173, DATE=174, TIME=175, + NOW=176, TODAY=177, YEAR=178, MONTH=179, DAY=180, HOUR=181, MINUTE=182, + SECOND=183, WEEKDAY=184, DATEDIF=185, DAYS=186, DAYS360=187, EDATE=188, + EOMONTH=189, NETWORKDAYS=190, WORKDAY=191, WEEKNUM=192, MAX=193, MEDIAN=194, + MIN=195, QUARTILE=196, MODE=197, LARGE=198, SMALL=199, PERCENTILE=200, + PERCENTRANK=201, AVERAGE=202, AVERAGEIF=203, GEOMEAN=204, HARMEAN=205, + COUNT=206, COUNTIF=207, SUM=208, SUMIF=209, AVEDEV=210, STDEV=211, STDEVP=212, + COVAR=213, COVARIANCES=214, DEVSQ=215, VAR=216, VARP=217, NORMDIST=218, + NORMINV=219, NORMSDIST=220, NORMSINV=221, BETADIST=222, BETAINV=223, BINOMDIST=224, + EXPONDIST=225, FDIST=226, FINV=227, FISHER=228, FISHERINV=229, GAMMADIST=230, + GAMMAINV=231, GAMMALN=232, HYPGEOMDIST=233, LOGINV=234, LOGNORMDIST=235, + NEGBINOMDIST=236, POISSON=237, TDIST=238, TINV=239, WEIBULL=240, PMT=241, + PPMT=242, IPMT=243, PV=244, FV=245, NPER=246, RATE=247, NPV=248, XNPV=249, + IRR=250, MIRR=251, XIRR=252, SLN=253, DB=254, DDB=255, SYD=256, URLENCODE=257, + URLDECODE=258, HTMLENCODE=259, HTMLDECODE=260, BASE64TOTEXT=261, BASE64URLTOTEXT=262, + TEXTTOBASE64=263, TEXTTOBASE64URL=264, REGEX=265, REGEXREPLACE=266, ISREGEX=267, + GUID=268, MD5=269, SHA1=270, SHA256=271, SHA512=272, HMACMD5=273, HMACSHA1=274, + HMACSHA256=275, HMACSHA512=276, TRIMSTART=277, TRIMEND=278, INDEXOF=279, + LASTINDEXOF=280, SPLIT=281, JOIN=282, SUBSTRING=283, STARTSWITH=284, ENDSWITH=285, + ISNULLOREMPTY=286, ISNULLORWHITESPACE=287, REMOVESTART=288, REMOVEEND=289, + JSON=290, LOOKCEILING=291, LOOKFLOOR=292, ARRAY=293, ALGORITHMVERSION=294, + ADDYEARS=295, ADDMONTHS=296, ADDDAYS=297, ADDHOURS=298, ADDMINUTES=299, + ADDSECONDS=300, TIMESTAMP=301, HAS=302, HASVALUE=303, PARAM=304, PARAMETER=305, + WS=306, COMMENT=307, LINE_COMMENT=308; public static String[] channelNames = { "DEFAULT_TOKEN_CHANNEL", "HIDDEN" }; @@ -71,21 +78,26 @@ private static String[] makeRuleNames() { "T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16", "T__17", "T__18", "T__19", "T__20", "T__21", "T__22", "T__23", "T__24", "T__25", "T__26", "T__27", "SUB", "NUM", "STRING", "NULL", "ERROR", "UNIT", - "IF", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", "ISNONTEXT", "ISLOGICAL", - "ISEVEN", "ISODD", "IsNull", "ISNULLORERROR", "AND", "OR", "NOT", "TRUE", - "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", "HEX2DEC", - "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", "BIN2HEX", - "ABS", "QUOTIENT", "MOD", "SIGN", "SQRT", "TRUNC", "INT", "GCD", "LCM", - "COMBIN", "PERMUT", "DEGREES", "RADIANS", "COS", "COSH", "SIN", "SINH", - "TAN", "TANH", "ACOS", "ACOSH", "ASIN", "ASINH", "ATAN", "ATANH", "ATAN2", - "ROUND", "ROUNDDOWN", "ROUNDUP", "CEILING", "FLOOR", "EVEN", "ODD", "MROUND", - "RAND", "RANDBETWEEN", "FACT", "FACTDOUBLE", "POWER", "EXP", "LN", "LOG", - "LOG10", "MULTINOMIAL", "PRODUCT", "SQRTPI", "SUMSQ", "ASC", "JIS", "CHAR", - "CLEAN", "CODE", "CONCATENATE", "EXACT", "FIND", "FIXED", "LEFT", "LEN", - "LOWER", "MID", "PROPER", "REPLACE", "REPT", "RIGHT", "RMB", "SEARCH", - "SUBSTITUTE", "T", "TEXT", "TRIM", "UPPER", "VALUE", "DATEVALUE", "TIMEVALUE", - "DATE", "TIME", "NOW", "TODAY", "YEAR", "MONTH", "DAY", "HOUR", "MINUTE", - "SECOND", "WEEKDAY", "DATEDIF", "DAYS360", "EDATE", "EOMONTH", "NETWORKDAYS", + "IF", "IFS", "SWITCH", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", "ISNONTEXT", + "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", "AND", "OR", + "XOR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", + "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", + "BIN2DEC", "BIN2HEX", "ABS", "QUOTIENT", "MOD", "SIGN", "SQRT", "TRUNC", + "INT", "GCD", "LCM", "COMBIN", "PERMUT", "DEGREES", "RADIANS", "COS", + "COSH", "SIN", "SINH", "TAN", "TANH", "COT", "COTH", "CSC", "CSCH", "SEC", + "SECH", "ACOS", "ACOSH", "ASIN", "ASINH", "ATAN", "ATANH", "ACOT", "ACOTH", + "ATAN2", "ROUND", "ROUNDDOWN", "ROUNDUP", "CEILING", "FLOOR", "EVEN", + "ODD", "MROUND", "RAND", "RANDBETWEEN", "FACT", "FACTDOUBLE", "POWER", + "EXP", "LN", "LOG", "LOG10", "MULTINOMIAL", "PRODUCT", "SQRTPI", "ERF", + "ERFC", "BESSELI", "BESSELJ", "BESSELK", "BESSELY", "DELTA", "GESTEP", + "SUMSQ", "SUMPRODUCT", "SUMX2MY2", "SUMX2PY2", "SUMXMY2", "ARABIC", "ROMAN", + "SERIESSUM", "RANK", "FORECAST", "INTERCEPT", "SLOPE", "CORREL", "PEARSON", + "YEARFRAC", "ASC", "JIS", "CHAR", "CLEAN", "CODE", "UNICHAR", "UNICODE", + "CONCATENATE", "EXACT", "FIND", "FIXED", "LEFT", "LEN", "LOWER", "MID", + "PROPER", "REPLACE", "REPT", "RIGHT", "RMB", "SEARCH", "SUBSTITUTE", + "T", "TEXT", "TRIM", "UPPER", "VALUE", "DATEVALUE", "TIMEVALUE", "DATE", + "TIME", "NOW", "TODAY", "YEAR", "MONTH", "DAY", "HOUR", "MINUTE", "SECOND", + "WEEKDAY", "DATEDIF", "DAYS", "DAYS360", "EDATE", "EOMONTH", "NETWORKDAYS", "WORKDAY", "WEEKNUM", "MAX", "MEDIAN", "MIN", "QUARTILE", "MODE", "LARGE", "SMALL", "PERCENTILE", "PERCENTRANK", "AVERAGE", "AVERAGEIF", "GEOMEAN", "HARMEAN", "COUNT", "COUNTIF", "SUM", "SUMIF", "AVEDEV", "STDEV", "STDEVP", @@ -93,16 +105,17 @@ private static String[] makeRuleNames() { "NORMSDIST", "NORMSINV", "BETADIST", "BETAINV", "BINOMDIST", "EXPONDIST", "FDIST", "FINV", "FISHER", "FISHERINV", "GAMMADIST", "GAMMAINV", "GAMMALN", "HYPGEOMDIST", "LOGINV", "LOGNORMDIST", "NEGBINOMDIST", "POISSON", "TDIST", - "TINV", "WEIBULL", "URLENCODE", "URLDECODE", "HTMLENCODE", "HTMLDECODE", - "BASE64TOTEXT", "BASE64URLTOTEXT", "TEXTTOBASE64", "TEXTTOBASE64URL", - "REGEX", "REGEXREPALCE", "ISREGEX", "GUID", "MD5", "SHA1", "SHA256", - "SHA512", "HMACMD5", "HMACSHA1", "HMACSHA256", "HMACSHA512", "TRIMSTART", - "TRIMEND", "INDEXOF", "LASTINDEXOF", "SPLIT", "JOIN", "SUBSTRING", "STARTSWITH", - "ENDSWITH", "ISNULLOREMPTY", "ISNULLORWHITESPACE", "REMOVESTART", "REMOVEEND", - "JSON", "LOOKCEILING", "LOOKFLOOR", "ARRAY", "ALGORITHMVERSION", "ADDYEARS", - "ADDMONTHS", "ADDDAYS", "ADDHOURS", "ADDMINUTES", "ADDSECONDS", "TIMESTAMP", - "HAS", "HASVALUE", "PARAM", "PARAMETER", "FullWidthLetter", "WS", "COMMENT", - "LINE_COMMENT" + "TINV", "WEIBULL", "PMT", "PPMT", "IPMT", "PV", "FV", "NPER", "RATE", + "NPV", "XNPV", "IRR", "MIRR", "XIRR", "SLN", "DB", "DDB", "SYD", "URLENCODE", + "URLDECODE", "HTMLENCODE", "HTMLDECODE", "BASE64TOTEXT", "BASE64URLTOTEXT", + "TEXTTOBASE64", "TEXTTOBASE64URL", "REGEX", "REGEXREPLACE", "ISREGEX", + "GUID", "MD5", "SHA1", "SHA256", "SHA512", "HMACMD5", "HMACSHA1", "HMACSHA256", + "HMACSHA512", "TRIMSTART", "TRIMEND", "INDEXOF", "LASTINDEXOF", "SPLIT", + "JOIN", "SUBSTRING", "STARTSWITH", "ENDSWITH", "ISNULLOREMPTY", "ISNULLORWHITESPACE", + "REMOVESTART", "REMOVEEND", "JSON", "LOOKCEILING", "LOOKFLOOR", "ARRAY", + "ALGORITHMVERSION", "ADDYEARS", "ADDMONTHS", "ADDDAYS", "ADDHOURS", "ADDMINUTES", + "ADDSECONDS", "TIMESTAMP", "HAS", "HASVALUE", "PARAM", "PARAMETER", "FullWidthLetter", + "WS", "COMMENT", "LINE_COMMENT" }; } public static final String[] ruleNames = makeRuleNames(); @@ -112,33 +125,41 @@ private static String[] makeLiteralNames() { null, "'.'", "'('", "')'", "','", "'['", "']'", "'!'", "'%'", "'*'", "'/'", "'+'", "'&'", "'>'", "'>='", "'<'", "'<='", "'='", "'=='", "'==='", "'!=='", "'!='", "'<>'", "'&&'", "'||'", "'?'", "':'", "'{'", "'}'", - "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'ISNUMBER'", - "'ISTEXT'", "'ISERROR'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", - "'IsNull'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, - "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", - "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", - "'BIN2HEX'", "'ABS'", "'QUOTIENT'", "'MOD'", "'SIGN'", "'SQRT'", "'TRUNC'", - "'INT'", "'GCD'", "'LCM'", "'COMBIN'", "'PERMUT'", "'DEGREES'", "'RADIANS'", - "'COS'", "'COSH'", "'SIN'", "'SINH'", "'TAN'", "'TANH'", "'ACOS'", "'ACOSH'", - "'ASIN'", "'ASINH'", "'ATAN'", "'ATANH'", "'ATAN2'", "'ROUND'", "'ROUNDDOWN'", - "'ROUNDUP'", "'CEILING'", "'FLOOR'", "'EVEN'", "'ODD'", "'MROUND'", "'RAND'", - "'RANDBETWEEN'", "'FACT'", "'FACTDOUBLE'", "'POWER'", "'EXP'", "'LN'", - "'LOG'", "'LOG10'", "'MULTINOMIAL'", "'PRODUCT'", "'SQRTPI'", "'SUMSQ'", - "'ASC'", null, "'CHAR'", "'CLEAN'", "'CODE'", "'CONCATENATE'", "'EXACT'", - "'FIND'", "'FIXED'", "'LEFT'", "'LEN'", null, "'MID'", "'PROPER'", "'REPLACE'", - "'REPT'", "'RIGHT'", "'RMB'", "'SEARCH'", "'SUBSTITUTE'", "'T'", "'TEXT'", - "'TRIM'", null, "'VALUE'", "'DATEVALUE'", "'TIMEVALUE'", "'DATE'", "'TIME'", - "'NOW'", "'TODAY'", "'YEAR'", "'MONTH'", "'DAY'", "'HOUR'", "'MINUTE'", - "'SECOND'", "'WEEKDAY'", "'DATEDIF'", "'DAYS360'", "'EDATE'", "'EOMONTH'", + "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFS'", "'SWITCH'", + "'IFERROR'", "'ISNUMBER'", "'ISTEXT'", "'ISERROR'", "'ISNONTEXT'", "'ISLOGICAL'", + "'ISEVEN'", "'ISODD'", "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", + "'XOR'", "'NOT'", null, null, "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", + "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", + "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", "'BIN2HEX'", "'ABS'", "'QUOTIENT'", + "'MOD'", "'SIGN'", "'SQRT'", "'TRUNC'", "'INT'", "'GCD'", "'LCM'", "'COMBIN'", + "'PERMUT'", "'DEGREES'", "'RADIANS'", "'COS'", "'COSH'", "'SIN'", "'SINH'", + "'TAN'", "'TANH'", "'COT'", "'COTH'", "'CSC'", "'CSCH'", "'SEC'", "'SECH'", + "'ACOS'", "'ACOSH'", "'ASIN'", "'ASINH'", "'ATAN'", "'ATANH'", "'ACOT'", + "'ACOTH'", "'ATAN2'", "'ROUND'", "'ROUNDDOWN'", "'ROUNDUP'", "'CEILING'", + "'FLOOR'", "'EVEN'", "'ODD'", "'MROUND'", "'RAND'", "'RANDBETWEEN'", + "'FACT'", "'FACTDOUBLE'", "'POWER'", "'EXP'", "'LN'", "'LOG'", "'LOG10'", + "'MULTINOMIAL'", "'PRODUCT'", "'SQRTPI'", "'ERF'", "'ERFC'", "'BESSELI'", + "'BESSELJ'", "'BESSELK'", "'BESSELY'", "'DELTA'", "'GESTEP'", "'SUMSQ'", + "'SUMPRODUCT'", "'SUMX2MY2'", "'SUMX2PY2'", "'SUMXMY2'", "'ARABIC'", + "'ROMAN'", "'SERIESSUM'", "'RANK'", "'FORECAST'", "'INTERCEPT'", "'SLOPE'", + "'CORREL'", "'PEARSON'", "'YEARFRAC'", "'ASC'", null, "'CHAR'", "'CLEAN'", + "'CODE'", "'UNICHAR'", "'UNICODE'", null, "'EXACT'", "'FIND'", "'FIXED'", + "'LEFT'", "'LEN'", null, "'MID'", "'PROPER'", "'REPLACE'", "'REPT'", + "'RIGHT'", "'RMB'", "'SEARCH'", "'SUBSTITUTE'", "'T'", "'TEXT'", "'TRIM'", + null, "'VALUE'", "'DATEVALUE'", "'TIMEVALUE'", "'DATE'", "'TIME'", "'NOW'", + "'TODAY'", "'YEAR'", "'MONTH'", "'DAY'", "'HOUR'", "'MINUTE'", "'SECOND'", + "'WEEKDAY'", "'DATEDIF'", "'DAYS'", "'DAYS360'", "'EDATE'", "'EOMONTH'", "'NETWORKDAYS'", "'WORKDAY'", "'WEEKNUM'", "'MAX'", "'MEDIAN'", "'MIN'", "'QUARTILE'", "'MODE'", "'LARGE'", "'SMALL'", null, null, "'AVERAGE'", "'AVERAGEIF'", "'GEOMEAN'", "'HARMEAN'", "'COUNT'", "'COUNTIF'", "'SUM'", "'SUMIF'", "'AVEDEV'", null, null, null, "'COVARIANCE.S'", "'DEVSQ'", null, null, null, null, null, null, null, null, null, null, null, null, "'FISHER'", "'FISHERINV'", null, null, null, null, null, null, null, - null, null, null, "'WEIBULL'", "'URLENCODE'", "'URLDECODE'", "'HTMLENCODE'", + null, null, null, "'WEIBULL'", "'PMT'", "'PPMT'", "'IPMT'", "'PV'", "'FV'", + "'NPER'", "'RATE'", "'NPV'", "'XNPV'", "'IRR'", "'MIRR'", "'XIRR'", "'SLN'", + "'DB'", "'DDB'", "'SYD'", "'URLENCODE'", "'URLDECODE'", "'HTMLENCODE'", "'HTMLDECODE'", "'BASE64TOTEXT'", "'BASE64URLTOTEXT'", "'TEXTTOBASE64'", - "'TEXTTOBASE64URL'", "'REGEX'", "'REGEXREPALCE'", null, "'GUID'", "'MD5'", + "'TEXTTOBASE64URL'", "'REGEX'", "'REGEXREPLACE'", null, "'GUID'", "'MD5'", "'SHA1'", "'SHA256'", "'SHA512'", "'HMACMD5'", "'HMACSHA1'", "'HMACSHA256'", "'HMACSHA512'", null, null, "'INDEXOF'", "'LASTINDEXOF'", "'SPLIT'", "'JOIN'", "'SUBSTRING'", "'STARTSWITH'", "'ENDSWITH'", "'ISNULLOREMPTY'", @@ -153,38 +174,44 @@ private static String[] makeSymbolicNames() { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "SUB", "NUM", "STRING", "NULL", "ERROR", - "UNIT", "IF", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", "ISNONTEXT", - "ISLOGICAL", "ISEVEN", "ISODD", "IsNull", "ISNULLORERROR", "AND", "OR", - "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", - "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", - "BIN2HEX", "ABS", "QUOTIENT", "MOD", "SIGN", "SQRT", "TRUNC", "INT", - "GCD", "LCM", "COMBIN", "PERMUT", "DEGREES", "RADIANS", "COS", "COSH", - "SIN", "SINH", "TAN", "TANH", "ACOS", "ACOSH", "ASIN", "ASINH", "ATAN", - "ATANH", "ATAN2", "ROUND", "ROUNDDOWN", "ROUNDUP", "CEILING", "FLOOR", + "UNIT", "IF", "IFS", "SWITCH", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", + "ISNONTEXT", "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", + "AND", "OR", "XOR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", + "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", + "BIN2OCT", "BIN2DEC", "BIN2HEX", "ABS", "QUOTIENT", "MOD", "SIGN", "SQRT", + "TRUNC", "INT", "GCD", "LCM", "COMBIN", "PERMUT", "DEGREES", "RADIANS", + "COS", "COSH", "SIN", "SINH", "TAN", "TANH", "COT", "COTH", "CSC", "CSCH", + "SEC", "SECH", "ACOS", "ACOSH", "ASIN", "ASINH", "ATAN", "ATANH", "ACOT", + "ACOTH", "ATAN2", "ROUND", "ROUNDDOWN", "ROUNDUP", "CEILING", "FLOOR", "EVEN", "ODD", "MROUND", "RAND", "RANDBETWEEN", "FACT", "FACTDOUBLE", "POWER", "EXP", "LN", "LOG", "LOG10", "MULTINOMIAL", "PRODUCT", "SQRTPI", - "SUMSQ", "ASC", "JIS", "CHAR", "CLEAN", "CODE", "CONCATENATE", "EXACT", - "FIND", "FIXED", "LEFT", "LEN", "LOWER", "MID", "PROPER", "REPLACE", - "REPT", "RIGHT", "RMB", "SEARCH", "SUBSTITUTE", "T", "TEXT", "TRIM", - "UPPER", "VALUE", "DATEVALUE", "TIMEVALUE", "DATE", "TIME", "NOW", "TODAY", - "YEAR", "MONTH", "DAY", "HOUR", "MINUTE", "SECOND", "WEEKDAY", "DATEDIF", - "DAYS360", "EDATE", "EOMONTH", "NETWORKDAYS", "WORKDAY", "WEEKNUM", "MAX", - "MEDIAN", "MIN", "QUARTILE", "MODE", "LARGE", "SMALL", "PERCENTILE", - "PERCENTRANK", "AVERAGE", "AVERAGEIF", "GEOMEAN", "HARMEAN", "COUNT", - "COUNTIF", "SUM", "SUMIF", "AVEDEV", "STDEV", "STDEVP", "COVAR", "COVARIANCES", - "DEVSQ", "VAR", "VARP", "NORMDIST", "NORMINV", "NORMSDIST", "NORMSINV", - "BETADIST", "BETAINV", "BINOMDIST", "EXPONDIST", "FDIST", "FINV", "FISHER", - "FISHERINV", "GAMMADIST", "GAMMAINV", "GAMMALN", "HYPGEOMDIST", "LOGINV", - "LOGNORMDIST", "NEGBINOMDIST", "POISSON", "TDIST", "TINV", "WEIBULL", - "URLENCODE", "URLDECODE", "HTMLENCODE", "HTMLDECODE", "BASE64TOTEXT", - "BASE64URLTOTEXT", "TEXTTOBASE64", "TEXTTOBASE64URL", "REGEX", "REGEXREPALCE", - "ISREGEX", "GUID", "MD5", "SHA1", "SHA256", "SHA512", "HMACMD5", "HMACSHA1", - "HMACSHA256", "HMACSHA512", "TRIMSTART", "TRIMEND", "INDEXOF", "LASTINDEXOF", - "SPLIT", "JOIN", "SUBSTRING", "STARTSWITH", "ENDSWITH", "ISNULLOREMPTY", - "ISNULLORWHITESPACE", "REMOVESTART", "REMOVEEND", "JSON", "LOOKCEILING", - "LOOKFLOOR", "ARRAY", "ALGORITHMVERSION", "ADDYEARS", "ADDMONTHS", "ADDDAYS", - "ADDHOURS", "ADDMINUTES", "ADDSECONDS", "TIMESTAMP", "HAS", "HASVALUE", - "PARAM", "PARAMETER", "WS", "COMMENT", "LINE_COMMENT" + "ERF", "ERFC", "BESSELI", "BESSELJ", "BESSELK", "BESSELY", "DELTA", "GESTEP", + "SUMSQ", "SUMPRODUCT", "SUMX2MY2", "SUMX2PY2", "SUMXMY2", "ARABIC", "ROMAN", + "SERIESSUM", "RANK", "FORECAST", "INTERCEPT", "SLOPE", "CORREL", "PEARSON", + "YEARFRAC", "ASC", "JIS", "CHAR", "CLEAN", "CODE", "UNICHAR", "UNICODE", + "CONCATENATE", "EXACT", "FIND", "FIXED", "LEFT", "LEN", "LOWER", "MID", + "PROPER", "REPLACE", "REPT", "RIGHT", "RMB", "SEARCH", "SUBSTITUTE", + "T", "TEXT", "TRIM", "UPPER", "VALUE", "DATEVALUE", "TIMEVALUE", "DATE", + "TIME", "NOW", "TODAY", "YEAR", "MONTH", "DAY", "HOUR", "MINUTE", "SECOND", + "WEEKDAY", "DATEDIF", "DAYS", "DAYS360", "EDATE", "EOMONTH", "NETWORKDAYS", + "WORKDAY", "WEEKNUM", "MAX", "MEDIAN", "MIN", "QUARTILE", "MODE", "LARGE", + "SMALL", "PERCENTILE", "PERCENTRANK", "AVERAGE", "AVERAGEIF", "GEOMEAN", + "HARMEAN", "COUNT", "COUNTIF", "SUM", "SUMIF", "AVEDEV", "STDEV", "STDEVP", + "COVAR", "COVARIANCES", "DEVSQ", "VAR", "VARP", "NORMDIST", "NORMINV", + "NORMSDIST", "NORMSINV", "BETADIST", "BETAINV", "BINOMDIST", "EXPONDIST", + "FDIST", "FINV", "FISHER", "FISHERINV", "GAMMADIST", "GAMMAINV", "GAMMALN", + "HYPGEOMDIST", "LOGINV", "LOGNORMDIST", "NEGBINOMDIST", "POISSON", "TDIST", + "TINV", "WEIBULL", "PMT", "PPMT", "IPMT", "PV", "FV", "NPER", "RATE", + "NPV", "XNPV", "IRR", "MIRR", "XIRR", "SLN", "DB", "DDB", "SYD", "URLENCODE", + "URLDECODE", "HTMLENCODE", "HTMLDECODE", "BASE64TOTEXT", "BASE64URLTOTEXT", + "TEXTTOBASE64", "TEXTTOBASE64URL", "REGEX", "REGEXREPLACE", "ISREGEX", + "GUID", "MD5", "SHA1", "SHA256", "SHA512", "HMACMD5", "HMACSHA1", "HMACSHA256", + "HMACSHA512", "TRIMSTART", "TRIMEND", "INDEXOF", "LASTINDEXOF", "SPLIT", + "JOIN", "SUBSTRING", "STARTSWITH", "ENDSWITH", "ISNULLOREMPTY", "ISNULLORWHITESPACE", + "REMOVESTART", "REMOVEEND", "JSON", "LOOKCEILING", "LOOKFLOOR", "ARRAY", + "ALGORITHMVERSION", "ADDYEARS", "ADDMONTHS", "ADDDAYS", "ADDHOURS", "ADDMINUTES", + "ADDSECONDS", "TIMESTAMP", "HAS", "HASVALUE", "PARAM", "PARAMETER", "WS", + "COMMENT", "LINE_COMMENT" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -246,7 +273,7 @@ public mathLexer(CharStream input) { public ATN getATN() { return _ATN; } private static final String _serializedATNSegment0 = - "\u0004\u0000\u0100\u0af8\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002"+ + "\u0004\u0000\u0134\u0c9d\u0006\uffff\uffff\u0002\u0000\u0007\u0000\u0002"+ "\u0001\u0007\u0001\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002"+ "\u0004\u0007\u0004\u0002\u0005\u0007\u0005\u0002\u0006\u0007\u0006\u0002"+ "\u0007\u0007\u0007\u0002\b\u0007\b\u0002\t\u0007\t\u0002\n\u0007\n\u0002"+ @@ -319,1687 +346,1958 @@ public mathLexer(CharStream input) { "\u0002\u00f8\u0007\u00f8\u0002\u00f9\u0007\u00f9\u0002\u00fa\u0007\u00fa"+ "\u0002\u00fb\u0007\u00fb\u0002\u00fc\u0007\u00fc\u0002\u00fd\u0007\u00fd"+ "\u0002\u00fe\u0007\u00fe\u0002\u00ff\u0007\u00ff\u0002\u0100\u0007\u0100"+ - "\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002"+ - "\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0005\u0001\u0005"+ - "\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007\u0001\b\u0001\b\u0001"+ - "\t\u0001\t\u0001\n\u0001\n\u0001\u000b\u0001\u000b\u0001\f\u0001\f\u0001"+ - "\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001\u000f\u0001\u000f\u0001"+ - "\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001\u0011\u0001\u0011\u0001"+ - "\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0013\u0001\u0013\u0001"+ - "\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001\u0014\u0001\u0015\u0001"+ - "\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001\u0016\u0001\u0017\u0001"+ - "\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001\u0019\u0001\u0019\u0001"+ - "\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001\u001c\u0001\u001c\u0001"+ - "\u001d\u0001\u001d\u0001\u001d\u0004\u001d\u024c\b\u001d\u000b\u001d\f"+ - "\u001d\u024d\u0003\u001d\u0250\b\u001d\u0001\u001d\u0001\u001d\u0005\u001d"+ - "\u0254\b\u001d\n\u001d\f\u001d\u0257\t\u001d\u0001\u001d\u0001\u001d\u0004"+ - "\u001d\u025b\b\u001d\u000b\u001d\f\u001d\u025c\u0003\u001d\u025f\b\u001d"+ - "\u0001\u001d\u0001\u001d\u0001\u001d\u0004\u001d\u0264\b\u001d\u000b\u001d"+ - "\f\u001d\u0265\u0003\u001d\u0268\b\u001d\u0001\u001d\u0001\u001d\u0005"+ - "\u001d\u026c\b\u001d\n\u001d\f\u001d\u026f\t\u001d\u0001\u001d\u0001\u001d"+ - "\u0004\u001d\u0273\b\u001d\u000b\u001d\f\u001d\u0274\u0003\u001d\u0277"+ - "\b\u001d\u0003\u001d\u0279\b\u001d\u0001\u001d\u0001\u001d\u0003\u001d"+ - "\u027d\b\u001d\u0001\u001d\u0001\u001d\u0003\u001d\u0281\b\u001d\u0003"+ - "\u001d\u0283\b\u001d\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005"+ - "\u001e\u0289\b\u001e\n\u001e\f\u001e\u028c\t\u001e\u0001\u001e\u0001\u001e"+ - "\u0001\u001e\u0001\u001e\u0001\u001e\u0005\u001e\u0293\b\u001e\n\u001e"+ - "\f\u001e\u0296\t\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e"+ - "\u0001\u001e\u0005\u001e\u029d\b\u001e\n\u001e\f\u001e\u02a0\t\u001e\u0001"+ - "\u001e\u0003\u001e\u02a3\b\u001e\u0001\u001f\u0001\u001f\u0001\u001f\u0001"+ - "\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001 \u0001 \u0001 \u0001!\u0001"+ - "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ + "\u0002\u0101\u0007\u0101\u0002\u0102\u0007\u0102\u0002\u0103\u0007\u0103"+ + "\u0002\u0104\u0007\u0104\u0002\u0105\u0007\u0105\u0002\u0106\u0007\u0106"+ + "\u0002\u0107\u0007\u0107\u0002\u0108\u0007\u0108\u0002\u0109\u0007\u0109"+ + "\u0002\u010a\u0007\u010a\u0002\u010b\u0007\u010b\u0002\u010c\u0007\u010c"+ + "\u0002\u010d\u0007\u010d\u0002\u010e\u0007\u010e\u0002\u010f\u0007\u010f"+ + "\u0002\u0110\u0007\u0110\u0002\u0111\u0007\u0111\u0002\u0112\u0007\u0112"+ + "\u0002\u0113\u0007\u0113\u0002\u0114\u0007\u0114\u0002\u0115\u0007\u0115"+ + "\u0002\u0116\u0007\u0116\u0002\u0117\u0007\u0117\u0002\u0118\u0007\u0118"+ + "\u0002\u0119\u0007\u0119\u0002\u011a\u0007\u011a\u0002\u011b\u0007\u011b"+ + "\u0002\u011c\u0007\u011c\u0002\u011d\u0007\u011d\u0002\u011e\u0007\u011e"+ + "\u0002\u011f\u0007\u011f\u0002\u0120\u0007\u0120\u0002\u0121\u0007\u0121"+ + "\u0002\u0122\u0007\u0122\u0002\u0123\u0007\u0123\u0002\u0124\u0007\u0124"+ + "\u0002\u0125\u0007\u0125\u0002\u0126\u0007\u0126\u0002\u0127\u0007\u0127"+ + "\u0002\u0128\u0007\u0128\u0002\u0129\u0007\u0129\u0002\u012a\u0007\u012a"+ + "\u0002\u012b\u0007\u012b\u0002\u012c\u0007\u012c\u0002\u012d\u0007\u012d"+ + "\u0002\u012e\u0007\u012e\u0002\u012f\u0007\u012f\u0002\u0130\u0007\u0130"+ + "\u0002\u0131\u0007\u0131\u0002\u0132\u0007\u0132\u0002\u0133\u0007\u0133"+ + "\u0002\u0134\u0007\u0134\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001"+ + "\u0001\u0002\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004"+ + "\u0001\u0005\u0001\u0005\u0001\u0006\u0001\u0006\u0001\u0007\u0001\u0007"+ + "\u0001\b\u0001\b\u0001\t\u0001\t\u0001\n\u0001\n\u0001\u000b\u0001\u000b"+ + "\u0001\f\u0001\f\u0001\r\u0001\r\u0001\r\u0001\u000e\u0001\u000e\u0001"+ + "\u000f\u0001\u000f\u0001\u000f\u0001\u0010\u0001\u0010\u0001\u0011\u0001"+ + "\u0011\u0001\u0011\u0001\u0012\u0001\u0012\u0001\u0012\u0001\u0012\u0001"+ + "\u0013\u0001\u0013\u0001\u0013\u0001\u0013\u0001\u0014\u0001\u0014\u0001"+ + "\u0014\u0001\u0015\u0001\u0015\u0001\u0015\u0001\u0016\u0001\u0016\u0001"+ + "\u0016\u0001\u0017\u0001\u0017\u0001\u0017\u0001\u0018\u0001\u0018\u0001"+ + "\u0019\u0001\u0019\u0001\u001a\u0001\u001a\u0001\u001b\u0001\u001b\u0001"+ + "\u001c\u0001\u001c\u0001\u001d\u0001\u001d\u0001\u001d\u0004\u001d\u02b4"+ + "\b\u001d\u000b\u001d\f\u001d\u02b5\u0003\u001d\u02b8\b\u001d\u0001\u001d"+ + "\u0001\u001d\u0005\u001d\u02bc\b\u001d\n\u001d\f\u001d\u02bf\t\u001d\u0001"+ + "\u001d\u0001\u001d\u0004\u001d\u02c3\b\u001d\u000b\u001d\f\u001d\u02c4"+ + "\u0003\u001d\u02c7\b\u001d\u0001\u001d\u0001\u001d\u0001\u001d\u0004\u001d"+ + "\u02cc\b\u001d\u000b\u001d\f\u001d\u02cd\u0003\u001d\u02d0\b\u001d\u0001"+ + "\u001d\u0001\u001d\u0005\u001d\u02d4\b\u001d\n\u001d\f\u001d\u02d7\t\u001d"+ + "\u0001\u001d\u0001\u001d\u0004\u001d\u02db\b\u001d\u000b\u001d\f\u001d"+ + "\u02dc\u0003\u001d\u02df\b\u001d\u0003\u001d\u02e1\b\u001d\u0001\u001d"+ + "\u0001\u001d\u0003\u001d\u02e5\b\u001d\u0001\u001d\u0001\u001d\u0003\u001d"+ + "\u02e9\b\u001d\u0003\u001d\u02eb\b\u001d\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0001\u001e\u0005\u001e\u02f1\b\u001e\n\u001e\f\u001e\u02f4\t\u001e"+ + "\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0001\u001e\u0005\u001e"+ + "\u02fb\b\u001e\n\u001e\f\u001e\u02fe\t\u001e\u0001\u001e\u0001\u001e\u0001"+ + "\u001e\u0001\u001e\u0001\u001e\u0005\u001e\u0305\b\u001e\n\u001e\f\u001e"+ + "\u0308\t\u001e\u0001\u001e\u0003\u001e\u030b\b\u001e\u0001\u001f\u0001"+ + "\u001f\u0001\u001f\u0001\u001f\u0001\u001f\u0001 \u0001 \u0001 \u0001"+ + " \u0001 \u0001 \u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001!\u0001"+ - "!\u0001!\u0003!\u02db\b!\u0001\"\u0001\"\u0001\"\u0001#\u0001#\u0001#"+ - "\u0001#\u0001#\u0001#\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001"+ - "$\u0001$\u0001$\u0001$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001"+ - "%\u0001%\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001"+ - "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001"+ - "\'\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001(\u0001"+ - "(\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001"+ - "*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+ - "+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001"+ - ",\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001-\u0001-\u0001.\u0001"+ - ".\u0001.\u0001/\u0001/\u0001/\u0001/\u00010\u00010\u00010\u00010\u0001"+ - "0\u00010\u00010\u00030\u0348\b0\u00011\u00011\u00011\u00011\u00011\u0001"+ - "1\u00011\u00031\u0351\b1\u00012\u00012\u00013\u00013\u00013\u00014\u0001"+ - "4\u00014\u00014\u00014\u00014\u00014\u00014\u00015\u00015\u00015\u0001"+ - "5\u00015\u00015\u00015\u00015\u00016\u00016\u00016\u00016\u00016\u0001"+ - "6\u00016\u00016\u00017\u00017\u00017\u00017\u00017\u00017\u00017\u0001"+ - "7\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00018\u00019\u0001"+ - "9\u00019\u00019\u00019\u00019\u00019\u00019\u0001:\u0001:\u0001:\u0001"+ - ":\u0001:\u0001:\u0001:\u0001:\u0001;\u0001;\u0001;\u0001;\u0001;\u0001"+ - ";\u0001;\u0001;\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001<\u0001"+ - "<\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001=\u0001>\u0001"+ - ">\u0001>\u0001>\u0001>\u0001>\u0001>\u0001>\u0001?\u0001?\u0001?\u0001"+ - "?\u0001?\u0001?\u0001?\u0001?\u0001@\u0001@\u0001@\u0001@\u0001A\u0001"+ - "A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001"+ - "B\u0001B\u0001C\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001D\u0001"+ - "D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001E\u0001E\u0001F\u0001F\u0001"+ - "F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001H\u0001H\u0001H\u0001H\u0001"+ - "I\u0001I\u0001I\u0001I\u0001I\u0001I\u0001I\u0001J\u0001J\u0001J\u0001"+ - "J\u0001J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001K\u0001K\u0001"+ - "K\u0001K\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001L\u0001"+ - "M\u0001M\u0001M\u0001M\u0001N\u0001N\u0001N\u0001N\u0001N\u0001O\u0001"+ - "O\u0001O\u0001O\u0001P\u0001P\u0001P\u0001P\u0001P\u0001Q\u0001Q\u0001"+ - "Q\u0001Q\u0001R\u0001R\u0001R\u0001R\u0001R\u0001S\u0001S\u0001S\u0001"+ - "S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001T\u0001T\u0001U\u0001U\u0001"+ - "U\u0001U\u0001U\u0001V\u0001V\u0001V\u0001V\u0001V\u0001V\u0001W\u0001"+ - "W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001X\u0001X\u0001"+ - "Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001"+ - "Z\u0001Z\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001[\u0001"+ - "[\u0001[\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001"+ - "\\\u0001]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001]\u0001^\u0001"+ - "^\u0001^\u0001^\u0001^\u0001^\u0001_\u0001_\u0001_\u0001_\u0001_\u0001"+ - "`\u0001`\u0001`\u0001`\u0001a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001"+ - "a\u0001b\u0001b\u0001b\u0001b\u0001b\u0001c\u0001c\u0001c\u0001c\u0001"+ - "c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001d\u0001d\u0001"+ - "d\u0001d\u0001d\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001"+ - "e\u0001e\u0001e\u0001e\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001"+ - "g\u0001g\u0001g\u0001g\u0001h\u0001h\u0001h\u0001i\u0001i\u0001i\u0001"+ - "i\u0001j\u0001j\u0001j\u0001j\u0001j\u0001j\u0001k\u0001k\u0001k\u0001"+ - "k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001k\u0001l\u0001"+ + "!\u0001!\u0001!\u0001!\u0001!\u0001!\u0003!\u0343\b!\u0001\"\u0001\"\u0001"+ + "\"\u0001#\u0001#\u0001#\u0001#\u0001$\u0001$\u0001$\u0001$\u0001$\u0001"+ + "$\u0001$\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001%\u0001"+ + "&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001&\u0001\'\u0001"+ + "\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001\'\u0001(\u0001(\u0001(\u0001"+ + "(\u0001(\u0001(\u0001(\u0001(\u0001)\u0001)\u0001)\u0001)\u0001)\u0001"+ + ")\u0001)\u0001)\u0001)\u0001)\u0001*\u0001*\u0001*\u0001*\u0001*\u0001"+ + "*\u0001*\u0001*\u0001*\u0001*\u0001+\u0001+\u0001+\u0001+\u0001+\u0001"+ + "+\u0001+\u0001,\u0001,\u0001,\u0001,\u0001,\u0001,\u0001-\u0001-\u0001"+ + "-\u0001-\u0001-\u0001-\u0001-\u0001.\u0001.\u0001.\u0001.\u0001.\u0001"+ + ".\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001.\u0001/\u0001"+ + "/\u0001/\u0001/\u00010\u00010\u00010\u00011\u00011\u00011\u00011\u0001"+ + "2\u00012\u00012\u00012\u00013\u00013\u00013\u00013\u00013\u00013\u0001"+ + "3\u00033\u03bf\b3\u00014\u00014\u00014\u00014\u00014\u00014\u00014\u0003"+ + "4\u03c8\b4\u00015\u00015\u00016\u00016\u00016\u00017\u00017\u00017\u0001"+ + "7\u00017\u00017\u00017\u00017\u00018\u00018\u00018\u00018\u00018\u0001"+ + "8\u00018\u00018\u00019\u00019\u00019\u00019\u00019\u00019\u00019\u0001"+ + "9\u0001:\u0001:\u0001:\u0001:\u0001:\u0001:\u0001:\u0001:\u0001;\u0001"+ + ";\u0001;\u0001;\u0001;\u0001;\u0001;\u0001;\u0001<\u0001<\u0001<\u0001"+ + "<\u0001<\u0001<\u0001<\u0001<\u0001=\u0001=\u0001=\u0001=\u0001=\u0001"+ + "=\u0001=\u0001=\u0001>\u0001>\u0001>\u0001>\u0001>\u0001>\u0001>\u0001"+ + ">\u0001?\u0001?\u0001?\u0001?\u0001?\u0001?\u0001?\u0001?\u0001@\u0001"+ + "@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001@\u0001A\u0001A\u0001A\u0001"+ + "A\u0001A\u0001A\u0001A\u0001A\u0001B\u0001B\u0001B\u0001B\u0001B\u0001"+ + "B\u0001B\u0001B\u0001C\u0001C\u0001C\u0001C\u0001D\u0001D\u0001D\u0001"+ + "D\u0001D\u0001D\u0001D\u0001D\u0001D\u0001E\u0001E\u0001E\u0001E\u0001"+ + "F\u0001F\u0001F\u0001F\u0001F\u0001G\u0001G\u0001G\u0001G\u0001G\u0001"+ + "H\u0001H\u0001H\u0001H\u0001H\u0001H\u0001I\u0001I\u0001I\u0001I\u0001"+ + "J\u0001J\u0001J\u0001J\u0001K\u0001K\u0001K\u0001K\u0001L\u0001L\u0001"+ + "L\u0001L\u0001L\u0001L\u0001L\u0001M\u0001M\u0001M\u0001M\u0001M\u0001"+ + "M\u0001M\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001N\u0001"+ + "O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001O\u0001P\u0001P\u0001"+ + "P\u0001P\u0001Q\u0001Q\u0001Q\u0001Q\u0001Q\u0001R\u0001R\u0001R\u0001"+ + "R\u0001S\u0001S\u0001S\u0001S\u0001S\u0001T\u0001T\u0001T\u0001T\u0001"+ + "U\u0001U\u0001U\u0001U\u0001U\u0001V\u0001V\u0001V\u0001V\u0001W\u0001"+ + "W\u0001W\u0001W\u0001W\u0001X\u0001X\u0001X\u0001X\u0001Y\u0001Y\u0001"+ + "Y\u0001Y\u0001Y\u0001Z\u0001Z\u0001Z\u0001Z\u0001[\u0001[\u0001[\u0001"+ + "[\u0001[\u0001\\\u0001\\\u0001\\\u0001\\\u0001\\\u0001]\u0001]\u0001]"+ + "\u0001]\u0001]\u0001]\u0001^\u0001^\u0001^\u0001^\u0001^\u0001_\u0001"+ + "_\u0001_\u0001_\u0001_\u0001_\u0001`\u0001`\u0001`\u0001`\u0001`\u0001"+ + "a\u0001a\u0001a\u0001a\u0001a\u0001a\u0001b\u0001b\u0001b\u0001b\u0001"+ + "b\u0001c\u0001c\u0001c\u0001c\u0001c\u0001c\u0001d\u0001d\u0001d\u0001"+ + "d\u0001d\u0001d\u0001e\u0001e\u0001e\u0001e\u0001e\u0001e\u0001f\u0001"+ + "f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001f\u0001g\u0001"+ + "g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001g\u0001h\u0001h\u0001h\u0001"+ + "h\u0001h\u0001h\u0001h\u0001h\u0001i\u0001i\u0001i\u0001i\u0001i\u0001"+ + "i\u0001j\u0001j\u0001j\u0001j\u0001j\u0001k\u0001k\u0001k\u0001k\u0001"+ "l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001l\u0001m\u0001m\u0001m\u0001"+ - "m\u0001m\u0001m\u0001m\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001"+ - "o\u0001o\u0001o\u0001o\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ - "p\u0001p\u0001p\u0001p\u0001p\u0003p\u04e3\bp\u0001q\u0001q\u0001q\u0001"+ - "q\u0001q\u0001r\u0001r\u0001r\u0001r\u0001r\u0001r\u0001s\u0001s\u0001"+ - "s\u0001s\u0001s\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001t\u0001"+ - "t\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001u\u0001u\u0001u\u0001"+ - "u\u0001v\u0001v\u0001v\u0001v\u0001v\u0001w\u0001w\u0001w\u0001w\u0001"+ - "w\u0001w\u0001x\u0001x\u0001x\u0001x\u0001x\u0001y\u0001y\u0001y\u0001"+ - "y\u0001z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001z\u0001"+ - "z\u0001z\u0001z\u0003z\u0527\bz\u0001{\u0001{\u0001{\u0001{\u0001|\u0001"+ - "|\u0001|\u0001|\u0001|\u0001|\u0001|\u0001}\u0001}\u0001}\u0001}\u0001"+ - "}\u0001}\u0001}\u0001}\u0001~\u0001~\u0001~\u0001~\u0001~\u0001\u007f"+ - "\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u0080"+ - "\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0081"+ - "\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0082\u0001\u0082"+ + "m\u0001m\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001n\u0001"+ + "n\u0001n\u0001n\u0001n\u0001o\u0001o\u0001o\u0001o\u0001o\u0001p\u0001"+ + "p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001p\u0001"+ + "q\u0001q\u0001q\u0001q\u0001q\u0001q\u0001r\u0001r\u0001r\u0001r\u0001"+ + "s\u0001s\u0001s\u0001t\u0001t\u0001t\u0001t\u0001u\u0001u\u0001u\u0001"+ + "u\u0001u\u0001u\u0001v\u0001v\u0001v\u0001v\u0001v\u0001v\u0001v\u0001"+ + "v\u0001v\u0001v\u0001v\u0001v\u0001w\u0001w\u0001w\u0001w\u0001w\u0001"+ + "w\u0001w\u0001w\u0001x\u0001x\u0001x\u0001x\u0001x\u0001x\u0001x\u0001"+ + "y\u0001y\u0001y\u0001y\u0001z\u0001z\u0001z\u0001z\u0001z\u0001{\u0001"+ + "{\u0001{\u0001{\u0001{\u0001{\u0001{\u0001{\u0001|\u0001|\u0001|\u0001"+ + "|\u0001|\u0001|\u0001|\u0001|\u0001}\u0001}\u0001}\u0001}\u0001}\u0001"+ + "}\u0001}\u0001}\u0001~\u0001~\u0001~\u0001~\u0001~\u0001~\u0001~\u0001"+ + "~\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f\u0001\u007f"+ + "\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080\u0001\u0080"+ + "\u0001\u0080\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081\u0001\u0081"+ + "\u0001\u0081\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082"+ "\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0082"+ - "\u0001\u0082\u0001\u0082\u0001\u0082\u0001\u0083\u0001\u0083\u0001\u0084"+ - "\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0085\u0001\u0085"+ - "\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0086\u0001\u0086\u0001\u0086"+ - "\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086"+ - "\u0001\u0086\u0001\u0086\u0001\u0086\u0003\u0086\u0575\b\u0086\u0001\u0087"+ - "\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0088"+ + "\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0083"+ + "\u0001\u0083\u0001\u0083\u0001\u0083\u0001\u0084\u0001\u0084\u0001\u0084"+ + "\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084\u0001\u0084"+ + "\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0085\u0001\u0085"+ + "\u0001\u0085\u0001\u0085\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0086"+ + "\u0001\u0086\u0001\u0086\u0001\u0086\u0001\u0087\u0001\u0087\u0001\u0087"+ + "\u0001\u0087\u0001\u0087\u0001\u0087\u0001\u0088\u0001\u0088\u0001\u0088"+ "\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0088"+ - "\u0001\u0088\u0001\u0088\u0001\u0088\u0001\u0089\u0001\u0089\u0001\u0089"+ - "\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089"+ - "\u0001\u0089\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a"+ - "\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008c"+ - "\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008d\u0001\u008d\u0001\u008d"+ - "\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008e\u0001\u008e\u0001\u008e"+ - "\u0001\u008e\u0001\u008e\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f"+ - "\u0001\u008f\u0001\u008f\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090"+ - "\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0092"+ - "\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092"+ - "\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0093"+ - "\u0001\u0093\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0094"+ - "\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0095\u0001\u0095\u0001\u0095"+ - "\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0096"+ + "\u0001\u0088\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089\u0001\u0089"+ + "\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008a"+ + "\u0001\u008a\u0001\u008a\u0001\u008a\u0001\u008b\u0001\u008b\u0001\u008b"+ + "\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b\u0001\u008b"+ + "\u0001\u008b\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c\u0001\u008c"+ + "\u0001\u008c\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d\u0001\u008d"+ + "\u0001\u008d\u0001\u008d\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e"+ + "\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008e\u0001\u008f\u0001\u008f"+ + "\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f\u0001\u008f"+ + "\u0001\u008f\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0090\u0001\u0091"+ + "\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091"+ + "\u0001\u0091\u0001\u0091\u0001\u0091\u0001\u0091\u0003\u0091\u0628\b\u0091"+ + "\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0092\u0001\u0093"+ + "\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0093\u0001\u0094"+ + "\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0094\u0001\u0095\u0001\u0095"+ + "\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0095\u0001\u0095"+ "\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096\u0001\u0096"+ - "\u0001\u0096\u0001\u0097\u0001\u0097\u0001\u0097\u0001\u0097\u0001\u0097"+ - "\u0001\u0097\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0098"+ + "\u0001\u0096\u0001\u0096\u0001\u0097\u0001\u0097\u0001\u0097\u0001\u0097"+ + "\u0001\u0097\u0001\u0097\u0001\u0097\u0001\u0097\u0001\u0097\u0001\u0097"+ + "\u0001\u0097\u0001\u0097\u0001\u0097\u0001\u0097\u0001\u0097\u0001\u0097"+ + "\u0001\u0097\u0003\u0097\u065b\b\u0097\u0001\u0098\u0001\u0098\u0001\u0098"+ "\u0001\u0098\u0001\u0098\u0001\u0098\u0001\u0099\u0001\u0099\u0001\u0099"+ - "\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u0099"+ - "\u0001\u0099\u0001\u0099\u0001\u0099\u0001\u009a\u0001\u009a\u0001\u009a"+ - "\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009b"+ - "\u0001\u009b\u0001\u009b\u0001\u009b\u0001\u009b\u0001\u009b\u0001\u009b"+ + "\u0001\u0099\u0001\u0099\u0001\u009a\u0001\u009a\u0001\u009a\u0001\u009a"+ + "\u0001\u009a\u0001\u009a\u0001\u009b\u0001\u009b\u0001\u009b\u0001\u009b"+ "\u0001\u009b\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009c\u0001\u009d"+ "\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d"+ - "\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009f\u0001\u009f"+ + "\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0001\u009d\u0003\u009d"+ + "\u0683\b\u009d\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009e\u0001\u009f"+ "\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u009f\u0001\u009f"+ - "\u0001\u009f\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0"+ - "\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1"+ - "\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ - "\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ - "\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ - "\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ - "\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3"+ - "\u0003\u00a3\u064a\b\u00a3\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4"+ + "\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0\u0001\u00a0"+ + "\u0001\u00a0\u0001\u00a0\u0001\u00a1\u0001\u00a1\u0001\u00a1\u0001\u00a1"+ + "\u0001\u00a1\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2\u0001\u00a2"+ + "\u0001\u00a2\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a3\u0001\u00a4"+ "\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4"+ - "\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4"+ - "\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4"+ - "\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0001\u00a4\u0003\u00a4\u0666\b\u00a4"+ "\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a5"+ - "\u0001\u00a5\u0001\u00a5\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6"+ - "\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6\u0001\u00a6"+ - "\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7"+ - "\u0001\u00a7\u0001\u00a7\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8"+ - "\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a9\u0001\u00a9"+ - "\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00aa\u0001\u00aa"+ - "\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa"+ - "\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ac\u0001\u00ac"+ - "\u0001\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ad\u0001\u00ad"+ - "\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ad\u0001\u00ae"+ - "\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae"+ - "\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0003\u00ae"+ - "\u06b5\b\u00ae\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af"+ - "\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af"+ - "\u0001\u00af\u0001\u00af\u0003\u00af\u06c4\b\u00af\u0001\u00b0\u0001\u00b0"+ - "\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0"+ - "\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0"+ - "\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0003\u00b0\u06d7\b\u00b0\u0001\u00b1"+ - "\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1"+ - "\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1"+ - "\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b2"+ - "\u0001\u00b3\u0001\u00b3\u0001\u00b3\u0001\u00b3\u0001\u00b3\u0001\u00b3"+ - "\u0001\u00b3\u0001\u00b3\u0003\u00b3\u06f4\b\u00b3\u0001\u00b4\u0001\u00b4"+ - "\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4"+ - "\u0001\u00b4\u0003\u00b4\u06ff\b\u00b4\u0001\u00b5\u0001\u00b5\u0001\u00b5"+ - "\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5"+ - "\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5"+ - "\u0001\u00b5\u0001\u00b5\u0003\u00b5\u0712\b\u00b5\u0001\u00b6\u0001\u00b6"+ - "\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6"+ - "\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6"+ - "\u0001\u00b6\u0003\u00b6\u0723\b\u00b6\u0001\u00b7\u0001\u00b7\u0001\u00b7"+ - "\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7"+ - "\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7"+ - "\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0003\u00b7"+ - "\u0739\b\u00b7\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8"+ + "\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a5\u0001\u00a6"+ + "\u0001\u00a6\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7\u0001\u00a7"+ + "\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a8\u0001\u00a9"+ + "\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00a9"+ + "\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0001\u00a9\u0003\u00a9"+ + "\u06d1\b\u00a9\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa\u0001\u00aa"+ + "\u0001\u00aa\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab"+ + "\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ab\u0001\u00ac"+ + "\u0001\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ac"+ + "\u0001\u00ac\u0001\u00ac\u0001\u00ac\u0001\u00ad\u0001\u00ad\u0001\u00ad"+ + "\u0001\u00ad\u0001\u00ad\u0001\u00ae\u0001\u00ae\u0001\u00ae\u0001\u00ae"+ + "\u0001\u00ae\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00af\u0001\u00b0"+ + "\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b0\u0001\u00b1"+ + "\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b1\u0001\u00b2\u0001\u00b2"+ + "\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b2\u0001\u00b3\u0001\u00b3"+ + "\u0001\u00b3\u0001\u00b3\u0001\u00b4\u0001\u00b4\u0001\u00b4\u0001\u00b4"+ + "\u0001\u00b4\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5\u0001\u00b5"+ + "\u0001\u00b5\u0001\u00b5\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b6"+ + "\u0001\u00b6\u0001\u00b6\u0001\u00b6\u0001\u00b7\u0001\u00b7\u0001\u00b7"+ + "\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b7\u0001\u00b8"+ "\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8"+ - "\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8\u0001\u00b8"+ - "\u0001\u00b8\u0003\u00b8\u074d\b\u00b8\u0001\u00b9\u0001\u00b9\u0001\u00b9"+ - "\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9"+ - "\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9"+ - "\u0001\u00b9\u0001\u00b9\u0003\u00b9\u0760\b\u00b9\u0001\u00ba\u0001\u00ba"+ - "\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba"+ + "\u0001\u00b8\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9\u0001\u00b9"+ "\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba\u0001\u00ba"+ - "\u0001\u00ba\u0003\u00ba\u0771\b\u00ba\u0001\u00bb\u0001\u00bb\u0001\u00bb"+ - "\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb"+ - "\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb"+ - "\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0003\u00bb\u0786\b\u00bb"+ - "\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc"+ - "\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc"+ - "\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc"+ - "\u0001\u00bc\u0003\u00bc\u079b\b\u00bc\u0001\u00bd\u0001\u00bd\u0001\u00bd"+ + "\u0001\u00ba\u0001\u00ba\u0001\u00bb\u0001\u00bb\u0001\u00bb\u0001\u00bb"+ + "\u0001\u00bb\u0001\u00bb\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc"+ + "\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bc\u0001\u00bd\u0001\u00bd"+ "\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd"+ - "\u0001\u00bd\u0001\u00bd\u0003\u00bd\u07a8\b\u00bd\u0001\u00be\u0001\u00be"+ + "\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00bd\u0001\u00be\u0001\u00be"+ "\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00be\u0001\u00be"+ - "\u0001\u00be\u0003\u00be\u07b3\b\u00be\u0001\u00bf\u0001\u00bf\u0001\u00bf"+ - "\u0001\u00bf\u0001\u00bf\u0001\u00bf\u0001\u00bf\u0001\u00c0\u0001\u00c0"+ - "\u0001\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c0"+ - "\u0001\u00c0\u0001\u00c0\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1"+ + "\u0001\u00bf\u0001\u00bf\u0001\u00bf\u0001\u00bf\u0001\u00bf\u0001\u00bf"+ + "\u0001\u00bf\u0001\u00bf\u0001\u00c0\u0001\u00c0\u0001\u00c0\u0001\u00c0"+ "\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1"+ - "\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0001\u00c1"+ - "\u0001\u00c1\u0001\u00c1\u0001\u00c1\u0003\u00c1\u07d9\b\u00c1\u0001\u00c2"+ - "\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2"+ - "\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2"+ - "\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0003\u00c2\u07ec\b\u00c2"+ - "\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3"+ - "\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3"+ + "\u0001\u00c1\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c2\u0001\u00c3"+ "\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3"+ - "\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0001\u00c3\u0003\u00c3\u0804\b\u00c3"+ - "\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4"+ - "\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4"+ - "\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4"+ - "\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0003\u00c4"+ - "\u081d\b\u00c4\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5"+ - "\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5"+ - "\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5"+ - "\u0003\u00c5\u0830\b\u00c5\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6"+ - "\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6"+ - "\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6"+ - "\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6"+ - "\u0001\u00c6\u0003\u00c6\u0849\b\u00c6\u0001\u00c7\u0001\u00c7\u0001\u00c7"+ + "\u0001\u00c3\u0001\u00c3\u0001\u00c4\u0001\u00c4\u0001\u00c4\u0001\u00c4"+ + "\u0001\u00c4\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5\u0001\u00c5"+ + "\u0001\u00c5\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6\u0001\u00c6"+ + "\u0001\u00c6\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7"+ "\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7"+ "\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7"+ "\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7"+ - "\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0001\u00c7\u0003\u00c7\u0864\b\u00c7"+ + "\u0001\u00c7\u0003\u00c7\u07ab\b\u00c7\u0001\u00c8\u0001\u00c8\u0001\u00c8"+ "\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8"+ "\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8"+ "\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8"+ - "\u0001\u00c8\u0003\u00c8\u0879\b\u00c8\u0001\u00c9\u0001\u00c9\u0001\u00c9"+ - "\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9"+ - "\u0001\u00c9\u0001\u00c9\u0003\u00c9\u0886\b\u00c9\u0001\u00ca\u0001\u00ca"+ + "\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0001\u00c8\u0003\u00c8"+ + "\u07c7\b\u00c8\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00c9"+ + "\u0001\u00c9\u0001\u00c9\u0001\u00c9\u0001\u00ca\u0001\u00ca\u0001\u00ca"+ "\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00ca\u0001\u00ca"+ - "\u0001\u00ca\u0003\u00ca\u0891\b\u00ca\u0001\u00cb\u0001\u00cb\u0001\u00cb"+ - "\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cc"+ - "\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc"+ - "\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cd\u0001\u00cd\u0001\u00cd"+ - "\u0001\u00cd\u0001\u00cd\u0001\u00cd\u0001\u00cd\u0001\u00cd\u0001\u00cd"+ - "\u0001\u00cd\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce"+ + "\u0001\u00ca\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cb"+ + "\u0001\u00cb\u0001\u00cb\u0001\u00cb\u0001\u00cc\u0001\u00cc\u0001\u00cc"+ + "\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cc\u0001\u00cd"+ + "\u0001\u00cd\u0001\u00cd\u0001\u00cd\u0001\u00cd\u0001\u00cd\u0001\u00ce"+ "\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce\u0001\u00ce"+ - "\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf"+ - "\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00d0"+ - "\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0"+ - "\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0"+ + "\u0001\u00ce\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00cf\u0001\u00d0"+ + "\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d0\u0001\u00d1"+ "\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1"+ - "\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1"+ - "\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d1\u0001\u00d2\u0001\u00d2"+ "\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2"+ - "\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d3"+ - "\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3"+ + "\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2\u0001\u00d2"+ + "\u0003\u00d2\u0816\b\u00d2\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3"+ "\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d3"+ - "\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0001\u00d4\u0001\u00d4\u0001\u00d4"+ - "\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d5\u0001\u00d5\u0001\u00d5"+ + "\u0001\u00d3\u0001\u00d3\u0001\u00d3\u0003\u00d3\u0825\b\u00d3\u0001\u00d4"+ + "\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d4"+ + "\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d4"+ + "\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0001\u00d4\u0003\u00d4\u0838\b\u00d4"+ + "\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5"+ "\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5"+ - "\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d5\u0001\u00d6\u0001\u00d6"+ - "\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6"+ - "\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6"+ - "\u0003\u00d6\u0920\b\u00d6\u0001\u00d7\u0001\u00d7\u0001\u00d7\u0001\u00d7"+ - "\u0001\u00d7\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001\u00d9"+ - "\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00da\u0001\u00da"+ - "\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00db"+ + "\u0001\u00d5\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6\u0001\u00d6"+ + "\u0001\u00d6\u0001\u00d7\u0001\u00d7\u0001\u00d7\u0001\u00d7\u0001\u00d7"+ + "\u0001\u00d7\u0001\u00d7\u0001\u00d7\u0003\u00d7\u0855\b\u00d7\u0001\u00d8"+ + "\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001\u00d8\u0001\u00d8"+ + "\u0001\u00d8\u0001\u00d8\u0003\u00d8\u0860\b\u00d8\u0001\u00d9\u0001\u00d9"+ + "\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00d9"+ + "\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0001\u00d9"+ + "\u0001\u00d9\u0001\u00d9\u0001\u00d9\u0003\u00d9\u0873\b\u00d9\u0001\u00da"+ + "\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da"+ + "\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da\u0001\u00da"+ + "\u0001\u00da\u0001\u00da\u0003\u00da\u0884\b\u00da\u0001\u00db\u0001\u00db"+ "\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db"+ + "\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db"+ + "\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db\u0001\u00db"+ + "\u0003\u00db\u089a\b\u00db\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc"+ + "\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc"+ "\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc\u0001\u00dc"+ - "\u0001\u00dc\u0001\u00dc\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd"+ - "\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00de"+ + "\u0001\u00dc\u0001\u00dc\u0003\u00dc\u08ae\b\u00dc\u0001\u00dd\u0001\u00dd"+ + "\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd"+ + "\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0001\u00dd"+ + "\u0001\u00dd\u0001\u00dd\u0001\u00dd\u0003\u00dd\u08c1\b\u00dd\u0001\u00de"+ "\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de"+ - "\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00df\u0001\u00df"+ + "\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de\u0001\u00de"+ + "\u0001\u00de\u0001\u00de\u0003\u00de\u08d2\b\u00de\u0001\u00df\u0001\u00df"+ + "\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df"+ "\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df"+ - "\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00e0\u0001\u00e0\u0001\u00e0"+ + "\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0001\u00df\u0003\u00df"+ + "\u08e7\b\u00df\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0"+ "\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0"+ - "\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0003\u00e0"+ - "\u0973\b\u00e0\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1"+ + "\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0\u0001\u00e0"+ + "\u0001\u00e0\u0001\u00e0\u0003\u00e0\u08fc\b\u00e0\u0001\u00e1\u0001\u00e1"+ "\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0001\u00e1"+ - "\u0001\u00e1\u0003\u00e1\u0981\b\u00e1\u0001\u00e2\u0001\u00e2\u0001\u00e2"+ - "\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e3"+ - "\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3"+ + "\u0001\u00e1\u0001\u00e1\u0001\u00e1\u0003\u00e1\u0909\b\u00e1\u0001\u00e2"+ + "\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2\u0001\u00e2"+ + "\u0001\u00e2\u0001\u00e2\u0003\u00e2\u0914\b\u00e2\u0001\u00e3\u0001\u00e3"+ "\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e3\u0001\u00e4"+ - "\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e5"+ - "\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e6\u0001\u00e6"+ + "\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e4"+ + "\u0001\u00e4\u0001\u00e4\u0001\u00e4\u0001\u00e5\u0001\u00e5\u0001\u00e5"+ + "\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5"+ + "\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5"+ + "\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0001\u00e5\u0003\u00e5\u093a\b\u00e5"+ + "\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6"+ "\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6"+ - "\u0001\u00e6\u0001\u00e6\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7"+ + "\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0001\u00e6\u0003\u00e6"+ + "\u094d\b\u00e6\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7"+ "\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7"+ - "\u0001\u00e7\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8"+ - "\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e9\u0001\u00e9"+ + "\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7"+ + "\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0001\u00e7\u0003\u00e7"+ + "\u0965\b\u00e7\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8"+ + "\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8"+ + "\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8"+ + "\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8\u0001\u00e8"+ + "\u0003\u00e8\u097e\b\u00e8\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9"+ "\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9"+ "\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9\u0001\u00e9"+ + "\u0001\u00e9\u0003\u00e9\u0991\b\u00e9\u0001\u00ea\u0001\u00ea\u0001\u00ea"+ "\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea"+ "\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea"+ "\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea\u0001\u00ea"+ - "\u0001\u00ea\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb"+ + "\u0001\u00ea\u0001\u00ea\u0003\u00ea\u09aa\b\u00ea\u0001\u00eb\u0001\u00eb"+ + "\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb"+ + "\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb"+ "\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb"+ - "\u0001\u00eb\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec"+ - "\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ed"+ - "\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ee\u0001\u00ee"+ + "\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0001\u00eb\u0003\u00eb"+ + "\u09c5\b\u00eb\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec"+ + "\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec"+ + "\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec\u0001\u00ec"+ + "\u0001\u00ec\u0001\u00ec\u0003\u00ec\u09da\b\u00ec\u0001\u00ed\u0001\u00ed"+ + "\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0001\u00ed"+ + "\u0001\u00ed\u0001\u00ed\u0001\u00ed\u0003\u00ed\u09e7\b\u00ed\u0001\u00ee"+ "\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee"+ - "\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ee\u0001\u00ef\u0001\u00ef"+ + "\u0001\u00ee\u0001\u00ee\u0003\u00ee\u09f2\b\u00ee\u0001\u00ef\u0001\u00ef"+ "\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef\u0001\u00ef"+ - "\u0001\u00ef\u0001\u00ef\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f0"+ - "\u0001\u00f0\u0001\u00f0\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1"+ - "\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1"+ - "\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1"+ - "\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1"+ - "\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f1"+ - "\u0001\u00f1\u0003\u00f1\u0a35\b\u00f1\u0001\u00f2\u0001\u00f2\u0001\u00f2"+ - "\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2\u0001\u00f2"+ - "\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3"+ - "\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f4\u0001\u00f4"+ - "\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4\u0001\u00f4"+ - "\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f5"+ - "\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f6\u0001\u00f6\u0001\u00f6"+ - "\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6"+ - "\u0001\u00f6\u0001\u00f6\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7"+ - "\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7"+ - "\u0001\u00f7\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8"+ - "\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f9"+ - "\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9"+ - "\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9"+ - "\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9"+ - "\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0001\u00f9"+ - "\u0001\u00f9\u0001\u00f9\u0001\u00f9\u0003\u00f9\u0a97\b\u00f9\u0001\u00fa"+ - "\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa"+ - "\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa"+ - "\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa"+ - "\u0001\u00fa\u0001\u00fa\u0003\u00fa\u0aae\b\u00fa\u0001\u00fb\u0001\u00fb"+ - "\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb"+ - "\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb"+ - "\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb"+ - "\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb"+ - "\u0003\u00fb\u0aca\b\u00fb\u0001\u00fc\u0001\u00fc\u0003\u00fc\u0ace\b"+ - "\u00fc\u0001\u00fc\u0001\u00fc\u0005\u00fc\u0ad2\b\u00fc\n\u00fc\f\u00fc"+ - "\u0ad5\t\u00fc\u0001\u00fd\u0001\u00fd\u0001\u00fe\u0004\u00fe\u0ada\b"+ - "\u00fe\u000b\u00fe\f\u00fe\u0adb\u0001\u00fe\u0001\u00fe\u0001\u00ff\u0001"+ - "\u00ff\u0001\u00ff\u0001\u00ff\u0005\u00ff\u0ae4\b\u00ff\n\u00ff\f\u00ff"+ - "\u0ae7\t\u00ff\u0001\u00ff\u0001\u00ff\u0001\u00ff\u0001\u00ff\u0001\u00ff"+ - "\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100\u0005\u0100\u0af2\b\u0100"+ - "\n\u0100\f\u0100\u0af5\t\u0100\u0001\u0100\u0001\u0100\u0001\u0ae5\u0000"+ - "\u0101\u0001\u0001\u0003\u0002\u0005\u0003\u0007\u0004\t\u0005\u000b\u0006"+ - "\r\u0007\u000f\b\u0011\t\u0013\n\u0015\u000b\u0017\f\u0019\r\u001b\u000e"+ - "\u001d\u000f\u001f\u0010!\u0011#\u0012%\u0013\'\u0014)\u0015+\u0016-\u0017"+ - "/\u00181\u00193\u001a5\u001b7\u001c9\u001d;\u001e=\u001f? A!C\"E#G$I%"+ - "K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6m7o8q9s:u;w}?\u007f@\u0081A\u0083"+ - "B\u0085C\u0087D\u0089E\u008bF\u008dG\u008fH\u0091I\u0093J\u0095K\u0097"+ - "L\u0099M\u009bN\u009dO\u009fP\u00a1Q\u00a3R\u00a5S\u00a7T\u00a9U\u00ab"+ - "V\u00adW\u00afX\u00b1Y\u00b3Z\u00b5[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf"+ - "`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3"+ - "j\u00d5k\u00d7l\u00d9m\u00dbn\u00ddo\u00dfp\u00e1q\u00e3r\u00e5s\u00e7"+ - "t\u00e9u\u00ebv\u00edw\u00efx\u00f1y\u00f3z\u00f5{\u00f7|\u00f9}\u00fb"+ - "~\u00fd\u007f\u00ff\u0080\u0101\u0081\u0103\u0082\u0105\u0083\u0107\u0084"+ - "\u0109\u0085\u010b\u0086\u010d\u0087\u010f\u0088\u0111\u0089\u0113\u008a"+ - "\u0115\u008b\u0117\u008c\u0119\u008d\u011b\u008e\u011d\u008f\u011f\u0090"+ - "\u0121\u0091\u0123\u0092\u0125\u0093\u0127\u0094\u0129\u0095\u012b\u0096"+ - "\u012d\u0097\u012f\u0098\u0131\u0099\u0133\u009a\u0135\u009b\u0137\u009c"+ - "\u0139\u009d\u013b\u009e\u013d\u009f\u013f\u00a0\u0141\u00a1\u0143\u00a2"+ - "\u0145\u00a3\u0147\u00a4\u0149\u00a5\u014b\u00a6\u014d\u00a7\u014f\u00a8"+ - "\u0151\u00a9\u0153\u00aa\u0155\u00ab\u0157\u00ac\u0159\u00ad\u015b\u00ae"+ - "\u015d\u00af\u015f\u00b0\u0161\u00b1\u0163\u00b2\u0165\u00b3\u0167\u00b4"+ - "\u0169\u00b5\u016b\u00b6\u016d\u00b7\u016f\u00b8\u0171\u00b9\u0173\u00ba"+ - "\u0175\u00bb\u0177\u00bc\u0179\u00bd\u017b\u00be\u017d\u00bf\u017f\u00c0"+ - "\u0181\u00c1\u0183\u00c2\u0185\u00c3\u0187\u00c4\u0189\u00c5\u018b\u00c6"+ - "\u018d\u00c7\u018f\u00c8\u0191\u00c9\u0193\u00ca\u0195\u00cb\u0197\u00cc"+ - "\u0199\u00cd\u019b\u00ce\u019d\u00cf\u019f\u00d0\u01a1\u00d1\u01a3\u00d2"+ - "\u01a5\u00d3\u01a7\u00d4\u01a9\u00d5\u01ab\u00d6\u01ad\u00d7\u01af\u00d8"+ - "\u01b1\u00d9\u01b3\u00da\u01b5\u00db\u01b7\u00dc\u01b9\u00dd\u01bb\u00de"+ - "\u01bd\u00df\u01bf\u00e0\u01c1\u00e1\u01c3\u00e2\u01c5\u00e3\u01c7\u00e4"+ - "\u01c9\u00e5\u01cb\u00e6\u01cd\u00e7\u01cf\u00e8\u01d1\u00e9\u01d3\u00ea"+ - "\u01d5\u00eb\u01d7\u00ec\u01d9\u00ed\u01db\u00ee\u01dd\u00ef\u01df\u00f0"+ - "\u01e1\u00f1\u01e3\u00f2\u01e5\u00f3\u01e7\u00f4\u01e9\u00f5\u01eb\u00f6"+ - "\u01ed\u00f7\u01ef\u00f8\u01f1\u00f9\u01f3\u00fa\u01f5\u00fb\u01f7\u00fc"+ - "\u01f9\u00fd\u01fb\u0000\u01fd\u00fe\u01ff\u00ff\u0201\u0100\u0001\u0000"+ - "\u000b\u0001\u000009\u0001\u000019\u0002\u0000++--\u0001\u0000\'\'\u0001"+ - "\u0000\"\"\u0001\u0000``\u0002\u0000AZ__\u0003\u000009AZ__\n\u0000\u00c0"+ - "\u00d6\u00d8\u00f6\u00f8\u1fff\u2c00\u2fff\u3040\u318f\u3300\u337f\u3400"+ - "\u3fff\u4e00\u8000\ud7ff\u8000\uf900\u8000\ufaff\u8000\uff00\u8000\ufff0"+ - "\u0003\u0000\t\n\f\r \u0002\u0000\n\n\r\r\u0b4f\u0000\u0001\u0001\u0000"+ - "\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005\u0001\u0000"+ - "\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001\u0000\u0000"+ - "\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000\u0000\u0000"+ - "\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000\u0000\u0000"+ - "\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000\u0000\u0000"+ - "\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000\u0000\u0000"+ - "\u0000\u001b\u0001\u0000\u0000\u0000\u0000\u001d\u0001\u0000\u0000\u0000"+ - "\u0000\u001f\u0001\u0000\u0000\u0000\u0000!\u0001\u0000\u0000\u0000\u0000"+ - "#\u0001\u0000\u0000\u0000\u0000%\u0001\u0000\u0000\u0000\u0000\'\u0001"+ - "\u0000\u0000\u0000\u0000)\u0001\u0000\u0000\u0000\u0000+\u0001\u0000\u0000"+ - "\u0000\u0000-\u0001\u0000\u0000\u0000\u0000/\u0001\u0000\u0000\u0000\u0000"+ - "1\u0001\u0000\u0000\u0000\u00003\u0001\u0000\u0000\u0000\u00005\u0001"+ - "\u0000\u0000\u0000\u00007\u0001\u0000\u0000\u0000\u00009\u0001\u0000\u0000"+ - "\u0000\u0000;\u0001\u0000\u0000\u0000\u0000=\u0001\u0000\u0000\u0000\u0000"+ - "?\u0001\u0000\u0000\u0000\u0000A\u0001\u0000\u0000\u0000\u0000C\u0001"+ - "\u0000\u0000\u0000\u0000E\u0001\u0000\u0000\u0000\u0000G\u0001\u0000\u0000"+ - "\u0000\u0000I\u0001\u0000\u0000\u0000\u0000K\u0001\u0000\u0000\u0000\u0000"+ - "M\u0001\u0000\u0000\u0000\u0000O\u0001\u0000\u0000\u0000\u0000Q\u0001"+ - "\u0000\u0000\u0000\u0000S\u0001\u0000\u0000\u0000\u0000U\u0001\u0000\u0000"+ - "\u0000\u0000W\u0001\u0000\u0000\u0000\u0000Y\u0001\u0000\u0000\u0000\u0000"+ - "[\u0001\u0000\u0000\u0000\u0000]\u0001\u0000\u0000\u0000\u0000_\u0001"+ - "\u0000\u0000\u0000\u0000a\u0001\u0000\u0000\u0000\u0000c\u0001\u0000\u0000"+ - "\u0000\u0000e\u0001\u0000\u0000\u0000\u0000g\u0001\u0000\u0000\u0000\u0000"+ - "i\u0001\u0000\u0000\u0000\u0000k\u0001\u0000\u0000\u0000\u0000m\u0001"+ - "\u0000\u0000\u0000\u0000o\u0001\u0000\u0000\u0000\u0000q\u0001\u0000\u0000"+ - "\u0000\u0000s\u0001\u0000\u0000\u0000\u0000u\u0001\u0000\u0000\u0000\u0000"+ - "w\u0001\u0000\u0000\u0000\u0000y\u0001\u0000\u0000\u0000\u0000{\u0001"+ - "\u0000\u0000\u0000\u0000}\u0001\u0000\u0000\u0000\u0000\u007f\u0001\u0000"+ - "\u0000\u0000\u0000\u0081\u0001\u0000\u0000\u0000\u0000\u0083\u0001\u0000"+ - "\u0000\u0000\u0000\u0085\u0001\u0000\u0000\u0000\u0000\u0087\u0001\u0000"+ - "\u0000\u0000\u0000\u0089\u0001\u0000\u0000\u0000\u0000\u008b\u0001\u0000"+ - "\u0000\u0000\u0000\u008d\u0001\u0000\u0000\u0000\u0000\u008f\u0001\u0000"+ - "\u0000\u0000\u0000\u0091\u0001\u0000\u0000\u0000\u0000\u0093\u0001\u0000"+ - "\u0000\u0000\u0000\u0095\u0001\u0000\u0000\u0000\u0000\u0097\u0001\u0000"+ - "\u0000\u0000\u0000\u0099\u0001\u0000\u0000\u0000\u0000\u009b\u0001\u0000"+ - "\u0000\u0000\u0000\u009d\u0001\u0000\u0000\u0000\u0000\u009f\u0001\u0000"+ - "\u0000\u0000\u0000\u00a1\u0001\u0000\u0000\u0000\u0000\u00a3\u0001\u0000"+ - "\u0000\u0000\u0000\u00a5\u0001\u0000\u0000\u0000\u0000\u00a7\u0001\u0000"+ - "\u0000\u0000\u0000\u00a9\u0001\u0000\u0000\u0000\u0000\u00ab\u0001\u0000"+ - "\u0000\u0000\u0000\u00ad\u0001\u0000\u0000\u0000\u0000\u00af\u0001\u0000"+ - "\u0000\u0000\u0000\u00b1\u0001\u0000\u0000\u0000\u0000\u00b3\u0001\u0000"+ - "\u0000\u0000\u0000\u00b5\u0001\u0000\u0000\u0000\u0000\u00b7\u0001\u0000"+ - "\u0000\u0000\u0000\u00b9\u0001\u0000\u0000\u0000\u0000\u00bb\u0001\u0000"+ - "\u0000\u0000\u0000\u00bd\u0001\u0000\u0000\u0000\u0000\u00bf\u0001\u0000"+ - "\u0000\u0000\u0000\u00c1\u0001\u0000\u0000\u0000\u0000\u00c3\u0001\u0000"+ - "\u0000\u0000\u0000\u00c5\u0001\u0000\u0000\u0000\u0000\u00c7\u0001\u0000"+ - "\u0000\u0000\u0000\u00c9\u0001\u0000\u0000\u0000\u0000\u00cb\u0001\u0000"+ - "\u0000\u0000\u0000\u00cd\u0001\u0000\u0000\u0000\u0000\u00cf\u0001\u0000"+ - "\u0000\u0000\u0000\u00d1\u0001\u0000\u0000\u0000\u0000\u00d3\u0001\u0000"+ - "\u0000\u0000\u0000\u00d5\u0001\u0000\u0000\u0000\u0000\u00d7\u0001\u0000"+ - "\u0000\u0000\u0000\u00d9\u0001\u0000\u0000\u0000\u0000\u00db\u0001\u0000"+ - "\u0000\u0000\u0000\u00dd\u0001\u0000\u0000\u0000\u0000\u00df\u0001\u0000"+ - "\u0000\u0000\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001\u0000"+ - "\u0000\u0000\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001\u0000"+ - "\u0000\u0000\u0000\u00e9\u0001\u0000\u0000\u0000\u0000\u00eb\u0001\u0000"+ - "\u0000\u0000\u0000\u00ed\u0001\u0000\u0000\u0000\u0000\u00ef\u0001\u0000"+ - "\u0000\u0000\u0000\u00f1\u0001\u0000\u0000\u0000\u0000\u00f3\u0001\u0000"+ - "\u0000\u0000\u0000\u00f5\u0001\u0000\u0000\u0000\u0000\u00f7\u0001\u0000"+ - "\u0000\u0000\u0000\u00f9\u0001\u0000\u0000\u0000\u0000\u00fb\u0001\u0000"+ - "\u0000\u0000\u0000\u00fd\u0001\u0000\u0000\u0000\u0000\u00ff\u0001\u0000"+ - "\u0000\u0000\u0000\u0101\u0001\u0000\u0000\u0000\u0000\u0103\u0001\u0000"+ - "\u0000\u0000\u0000\u0105\u0001\u0000\u0000\u0000\u0000\u0107\u0001\u0000"+ - "\u0000\u0000\u0000\u0109\u0001\u0000\u0000\u0000\u0000\u010b\u0001\u0000"+ - "\u0000\u0000\u0000\u010d\u0001\u0000\u0000\u0000\u0000\u010f\u0001\u0000"+ - "\u0000\u0000\u0000\u0111\u0001\u0000\u0000\u0000\u0000\u0113\u0001\u0000"+ - "\u0000\u0000\u0000\u0115\u0001\u0000\u0000\u0000\u0000\u0117\u0001\u0000"+ - "\u0000\u0000\u0000\u0119\u0001\u0000\u0000\u0000\u0000\u011b\u0001\u0000"+ - "\u0000\u0000\u0000\u011d\u0001\u0000\u0000\u0000\u0000\u011f\u0001\u0000"+ - "\u0000\u0000\u0000\u0121\u0001\u0000\u0000\u0000\u0000\u0123\u0001\u0000"+ - "\u0000\u0000\u0000\u0125\u0001\u0000\u0000\u0000\u0000\u0127\u0001\u0000"+ - "\u0000\u0000\u0000\u0129\u0001\u0000\u0000\u0000\u0000\u012b\u0001\u0000"+ - "\u0000\u0000\u0000\u012d\u0001\u0000\u0000\u0000\u0000\u012f\u0001\u0000"+ - "\u0000\u0000\u0000\u0131\u0001\u0000\u0000\u0000\u0000\u0133\u0001\u0000"+ - "\u0000\u0000\u0000\u0135\u0001\u0000\u0000\u0000\u0000\u0137\u0001\u0000"+ - "\u0000\u0000\u0000\u0139\u0001\u0000\u0000\u0000\u0000\u013b\u0001\u0000"+ - "\u0000\u0000\u0000\u013d\u0001\u0000\u0000\u0000\u0000\u013f\u0001\u0000"+ - "\u0000\u0000\u0000\u0141\u0001\u0000\u0000\u0000\u0000\u0143\u0001\u0000"+ - "\u0000\u0000\u0000\u0145\u0001\u0000\u0000\u0000\u0000\u0147\u0001\u0000"+ - "\u0000\u0000\u0000\u0149\u0001\u0000\u0000\u0000\u0000\u014b\u0001\u0000"+ - "\u0000\u0000\u0000\u014d\u0001\u0000\u0000\u0000\u0000\u014f\u0001\u0000"+ - "\u0000\u0000\u0000\u0151\u0001\u0000\u0000\u0000\u0000\u0153\u0001\u0000"+ - "\u0000\u0000\u0000\u0155\u0001\u0000\u0000\u0000\u0000\u0157\u0001\u0000"+ - "\u0000\u0000\u0000\u0159\u0001\u0000\u0000\u0000\u0000\u015b\u0001\u0000"+ - "\u0000\u0000\u0000\u015d\u0001\u0000\u0000\u0000\u0000\u015f\u0001\u0000"+ - "\u0000\u0000\u0000\u0161\u0001\u0000\u0000\u0000\u0000\u0163\u0001\u0000"+ - "\u0000\u0000\u0000\u0165\u0001\u0000\u0000\u0000\u0000\u0167\u0001\u0000"+ - "\u0000\u0000\u0000\u0169\u0001\u0000\u0000\u0000\u0000\u016b\u0001\u0000"+ - "\u0000\u0000\u0000\u016d\u0001\u0000\u0000\u0000\u0000\u016f\u0001\u0000"+ - "\u0000\u0000\u0000\u0171\u0001\u0000\u0000\u0000\u0000\u0173\u0001\u0000"+ - "\u0000\u0000\u0000\u0175\u0001\u0000\u0000\u0000\u0000\u0177\u0001\u0000"+ - "\u0000\u0000\u0000\u0179\u0001\u0000\u0000\u0000\u0000\u017b\u0001\u0000"+ - "\u0000\u0000\u0000\u017d\u0001\u0000\u0000\u0000\u0000\u017f\u0001\u0000"+ - "\u0000\u0000\u0000\u0181\u0001\u0000\u0000\u0000\u0000\u0183\u0001\u0000"+ - "\u0000\u0000\u0000\u0185\u0001\u0000\u0000\u0000\u0000\u0187\u0001\u0000"+ - "\u0000\u0000\u0000\u0189\u0001\u0000\u0000\u0000\u0000\u018b\u0001\u0000"+ - "\u0000\u0000\u0000\u018d\u0001\u0000\u0000\u0000\u0000\u018f\u0001\u0000"+ - "\u0000\u0000\u0000\u0191\u0001\u0000\u0000\u0000\u0000\u0193\u0001\u0000"+ - "\u0000\u0000\u0000\u0195\u0001\u0000\u0000\u0000\u0000\u0197\u0001\u0000"+ - "\u0000\u0000\u0000\u0199\u0001\u0000\u0000\u0000\u0000\u019b\u0001\u0000"+ - "\u0000\u0000\u0000\u019d\u0001\u0000\u0000\u0000\u0000\u019f\u0001\u0000"+ - "\u0000\u0000\u0000\u01a1\u0001\u0000\u0000\u0000\u0000\u01a3\u0001\u0000"+ - "\u0000\u0000\u0000\u01a5\u0001\u0000\u0000\u0000\u0000\u01a7\u0001\u0000"+ - "\u0000\u0000\u0000\u01a9\u0001\u0000\u0000\u0000\u0000\u01ab\u0001\u0000"+ - "\u0000\u0000\u0000\u01ad\u0001\u0000\u0000\u0000\u0000\u01af\u0001\u0000"+ - "\u0000\u0000\u0000\u01b1\u0001\u0000\u0000\u0000\u0000\u01b3\u0001\u0000"+ - "\u0000\u0000\u0000\u01b5\u0001\u0000\u0000\u0000\u0000\u01b7\u0001\u0000"+ - "\u0000\u0000\u0000\u01b9\u0001\u0000\u0000\u0000\u0000\u01bb\u0001\u0000"+ - "\u0000\u0000\u0000\u01bd\u0001\u0000\u0000\u0000\u0000\u01bf\u0001\u0000"+ - "\u0000\u0000\u0000\u01c1\u0001\u0000\u0000\u0000\u0000\u01c3\u0001\u0000"+ - "\u0000\u0000\u0000\u01c5\u0001\u0000\u0000\u0000\u0000\u01c7\u0001\u0000"+ - "\u0000\u0000\u0000\u01c9\u0001\u0000\u0000\u0000\u0000\u01cb\u0001\u0000"+ - "\u0000\u0000\u0000\u01cd\u0001\u0000\u0000\u0000\u0000\u01cf\u0001\u0000"+ - "\u0000\u0000\u0000\u01d1\u0001\u0000\u0000\u0000\u0000\u01d3\u0001\u0000"+ - "\u0000\u0000\u0000\u01d5\u0001\u0000\u0000\u0000\u0000\u01d7\u0001\u0000"+ - "\u0000\u0000\u0000\u01d9\u0001\u0000\u0000\u0000\u0000\u01db\u0001\u0000"+ - "\u0000\u0000\u0000\u01dd\u0001\u0000\u0000\u0000\u0000\u01df\u0001\u0000"+ - "\u0000\u0000\u0000\u01e1\u0001\u0000\u0000\u0000\u0000\u01e3\u0001\u0000"+ - "\u0000\u0000\u0000\u01e5\u0001\u0000\u0000\u0000\u0000\u01e7\u0001\u0000"+ - "\u0000\u0000\u0000\u01e9\u0001\u0000\u0000\u0000\u0000\u01eb\u0001\u0000"+ - "\u0000\u0000\u0000\u01ed\u0001\u0000\u0000\u0000\u0000\u01ef\u0001\u0000"+ - "\u0000\u0000\u0000\u01f1\u0001\u0000\u0000\u0000\u0000\u01f3\u0001\u0000"+ - "\u0000\u0000\u0000\u01f5\u0001\u0000\u0000\u0000\u0000\u01f7\u0001\u0000"+ - "\u0000\u0000\u0000\u01f9\u0001\u0000\u0000\u0000\u0000\u01fd\u0001\u0000"+ - "\u0000\u0000\u0000\u01ff\u0001\u0000\u0000\u0000\u0000\u0201\u0001\u0000"+ - "\u0000\u0000\u0001\u0203\u0001\u0000\u0000\u0000\u0003\u0205\u0001\u0000"+ - "\u0000\u0000\u0005\u0207\u0001\u0000\u0000\u0000\u0007\u0209\u0001\u0000"+ - "\u0000\u0000\t\u020b\u0001\u0000\u0000\u0000\u000b\u020d\u0001\u0000\u0000"+ - "\u0000\r\u020f\u0001\u0000\u0000\u0000\u000f\u0211\u0001\u0000\u0000\u0000"+ - "\u0011\u0213\u0001\u0000\u0000\u0000\u0013\u0215\u0001\u0000\u0000\u0000"+ - "\u0015\u0217\u0001\u0000\u0000\u0000\u0017\u0219\u0001\u0000\u0000\u0000"+ - "\u0019\u021b\u0001\u0000\u0000\u0000\u001b\u021d\u0001\u0000\u0000\u0000"+ - "\u001d\u0220\u0001\u0000\u0000\u0000\u001f\u0222\u0001\u0000\u0000\u0000"+ - "!\u0225\u0001\u0000\u0000\u0000#\u0227\u0001\u0000\u0000\u0000%\u022a"+ - "\u0001\u0000\u0000\u0000\'\u022e\u0001\u0000\u0000\u0000)\u0232\u0001"+ - "\u0000\u0000\u0000+\u0235\u0001\u0000\u0000\u0000-\u0238\u0001\u0000\u0000"+ - "\u0000/\u023b\u0001\u0000\u0000\u00001\u023e\u0001\u0000\u0000\u00003"+ - "\u0240\u0001\u0000\u0000\u00005\u0242\u0001\u0000\u0000\u00007\u0244\u0001"+ - "\u0000\u0000\u00009\u0246\u0001\u0000\u0000\u0000;\u0282\u0001\u0000\u0000"+ - "\u0000=\u02a2\u0001\u0000\u0000\u0000?\u02a4\u0001\u0000\u0000\u0000A"+ - "\u02a9\u0001\u0000\u0000\u0000C\u02da\u0001\u0000\u0000\u0000E\u02dc\u0001"+ - "\u0000\u0000\u0000G\u02df\u0001\u0000\u0000\u0000I\u02e7\u0001\u0000\u0000"+ - "\u0000K\u02f0\u0001\u0000\u0000\u0000M\u02f7\u0001\u0000\u0000\u0000O"+ - "\u02ff\u0001\u0000\u0000\u0000Q\u0309\u0001\u0000\u0000\u0000S\u0313\u0001"+ - "\u0000\u0000\u0000U\u031a\u0001\u0000\u0000\u0000W\u0320\u0001\u0000\u0000"+ - "\u0000Y\u0327\u0001\u0000\u0000\u0000[\u0335\u0001\u0000\u0000\u0000]"+ - "\u0339\u0001\u0000\u0000\u0000_\u033c\u0001\u0000\u0000\u0000a\u0347\u0001"+ - "\u0000\u0000\u0000c\u0350\u0001\u0000\u0000\u0000e\u0352\u0001\u0000\u0000"+ - "\u0000g\u0354\u0001\u0000\u0000\u0000i\u0357\u0001\u0000\u0000\u0000k"+ - "\u035f\u0001\u0000\u0000\u0000m\u0367\u0001\u0000\u0000\u0000o\u036f\u0001"+ - "\u0000\u0000\u0000q\u0377\u0001\u0000\u0000\u0000s\u037f\u0001\u0000\u0000"+ - "\u0000u\u0387\u0001\u0000\u0000\u0000w\u038f\u0001\u0000\u0000\u0000y"+ - "\u0397\u0001\u0000\u0000\u0000{\u039f\u0001\u0000\u0000\u0000}\u03a7\u0001"+ - "\u0000\u0000\u0000\u007f\u03af\u0001\u0000\u0000\u0000\u0081\u03b7\u0001"+ - "\u0000\u0000\u0000\u0083\u03bb\u0001\u0000\u0000\u0000\u0085\u03c4\u0001"+ - "\u0000\u0000\u0000\u0087\u03c8\u0001\u0000\u0000\u0000\u0089\u03cd\u0001"+ - "\u0000\u0000\u0000\u008b\u03d2\u0001\u0000\u0000\u0000\u008d\u03d8\u0001"+ - "\u0000\u0000\u0000\u008f\u03dc\u0001\u0000\u0000\u0000\u0091\u03e0\u0001"+ - "\u0000\u0000\u0000\u0093\u03e4\u0001\u0000\u0000\u0000\u0095\u03eb\u0001"+ - "\u0000\u0000\u0000\u0097\u03f2\u0001\u0000\u0000\u0000\u0099\u03fa\u0001"+ - "\u0000\u0000\u0000\u009b\u0402\u0001\u0000\u0000\u0000\u009d\u0406\u0001"+ - "\u0000\u0000\u0000\u009f\u040b\u0001\u0000\u0000\u0000\u00a1\u040f\u0001"+ - "\u0000\u0000\u0000\u00a3\u0414\u0001\u0000\u0000\u0000\u00a5\u0418\u0001"+ - "\u0000\u0000\u0000\u00a7\u041d\u0001\u0000\u0000\u0000\u00a9\u0422\u0001"+ - "\u0000\u0000\u0000\u00ab\u0428\u0001\u0000\u0000\u0000\u00ad\u042d\u0001"+ - "\u0000\u0000\u0000\u00af\u0433\u0001\u0000\u0000\u0000\u00b1\u0438\u0001"+ - "\u0000\u0000\u0000\u00b3\u043e\u0001\u0000\u0000\u0000\u00b5\u0444\u0001"+ - "\u0000\u0000\u0000\u00b7\u044a\u0001\u0000\u0000\u0000\u00b9\u0454\u0001"+ - "\u0000\u0000\u0000\u00bb\u045c\u0001\u0000\u0000\u0000\u00bd\u0464\u0001"+ - "\u0000\u0000\u0000\u00bf\u046a\u0001\u0000\u0000\u0000\u00c1\u046f\u0001"+ - "\u0000\u0000\u0000\u00c3\u0473\u0001\u0000\u0000\u0000\u00c5\u047a\u0001"+ - "\u0000\u0000\u0000\u00c7\u047f\u0001\u0000\u0000\u0000\u00c9\u048b\u0001"+ - "\u0000\u0000\u0000\u00cb\u0490\u0001\u0000\u0000\u0000\u00cd\u049b\u0001"+ - "\u0000\u0000\u0000\u00cf\u04a1\u0001\u0000\u0000\u0000\u00d1\u04a5\u0001"+ - "\u0000\u0000\u0000\u00d3\u04a8\u0001\u0000\u0000\u0000\u00d5\u04ac\u0001"+ - "\u0000\u0000\u0000\u00d7\u04b2\u0001\u0000\u0000\u0000\u00d9\u04be\u0001"+ - "\u0000\u0000\u0000\u00db\u04c6\u0001\u0000\u0000\u0000\u00dd\u04cd\u0001"+ - "\u0000\u0000\u0000\u00df\u04d3\u0001\u0000\u0000\u0000\u00e1\u04e2\u0001"+ - "\u0000\u0000\u0000\u00e3\u04e4\u0001\u0000\u0000\u0000\u00e5\u04e9\u0001"+ - "\u0000\u0000\u0000\u00e7\u04ef\u0001\u0000\u0000\u0000\u00e9\u04f4\u0001"+ - "\u0000\u0000\u0000\u00eb\u0500\u0001\u0000\u0000\u0000\u00ed\u0506\u0001"+ - "\u0000\u0000\u0000\u00ef\u050b\u0001\u0000\u0000\u0000\u00f1\u0511\u0001"+ - "\u0000\u0000\u0000\u00f3\u0516\u0001\u0000\u0000\u0000\u00f5\u0526\u0001"+ - "\u0000\u0000\u0000\u00f7\u0528\u0001\u0000\u0000\u0000\u00f9\u052c\u0001"+ - "\u0000\u0000\u0000\u00fb\u0533\u0001\u0000\u0000\u0000\u00fd\u053b\u0001"+ - "\u0000\u0000\u0000\u00ff\u0540\u0001\u0000\u0000\u0000\u0101\u0546\u0001"+ - "\u0000\u0000\u0000\u0103\u054a\u0001\u0000\u0000\u0000\u0105\u0551\u0001"+ - "\u0000\u0000\u0000\u0107\u055c\u0001\u0000\u0000\u0000\u0109\u055e\u0001"+ - "\u0000\u0000\u0000\u010b\u0563\u0001\u0000\u0000\u0000\u010d\u0574\u0001"+ - "\u0000\u0000\u0000\u010f\u0576\u0001\u0000\u0000\u0000\u0111\u057c\u0001"+ - "\u0000\u0000\u0000\u0113\u0586\u0001\u0000\u0000\u0000\u0115\u0590\u0001"+ - "\u0000\u0000\u0000\u0117\u0595\u0001\u0000\u0000\u0000\u0119\u059a\u0001"+ - "\u0000\u0000\u0000\u011b\u059e\u0001\u0000\u0000\u0000\u011d\u05a4\u0001"+ - "\u0000\u0000\u0000\u011f\u05a9\u0001\u0000\u0000\u0000\u0121\u05af\u0001"+ - "\u0000\u0000\u0000\u0123\u05b3\u0001\u0000\u0000\u0000\u0125\u05b8\u0001"+ - "\u0000\u0000\u0000\u0127\u05bf\u0001\u0000\u0000\u0000\u0129\u05c6\u0001"+ - "\u0000\u0000\u0000\u012b\u05ce\u0001\u0000\u0000\u0000\u012d\u05d6\u0001"+ - "\u0000\u0000\u0000\u012f\u05de\u0001\u0000\u0000\u0000\u0131\u05e4\u0001"+ - "\u0000\u0000\u0000\u0133\u05ec\u0001\u0000\u0000\u0000\u0135\u05f8\u0001"+ - "\u0000\u0000\u0000\u0137\u0600\u0001\u0000\u0000\u0000\u0139\u0608\u0001"+ - "\u0000\u0000\u0000\u013b\u060c\u0001\u0000\u0000\u0000\u013d\u0613\u0001"+ - "\u0000\u0000\u0000\u013f\u0617\u0001\u0000\u0000\u0000\u0141\u0620\u0001"+ - "\u0000\u0000\u0000\u0143\u0625\u0001\u0000\u0000\u0000\u0145\u062b\u0001"+ - "\u0000\u0000\u0000\u0147\u0649\u0001\u0000\u0000\u0000\u0149\u0665\u0001"+ - "\u0000\u0000\u0000\u014b\u0667\u0001\u0000\u0000\u0000\u014d\u066f\u0001"+ - "\u0000\u0000\u0000\u014f\u0679\u0001\u0000\u0000\u0000\u0151\u0681\u0001"+ - "\u0000\u0000\u0000\u0153\u0689\u0001\u0000\u0000\u0000\u0155\u068f\u0001"+ - "\u0000\u0000\u0000\u0157\u0697\u0001\u0000\u0000\u0000\u0159\u069b\u0001"+ - "\u0000\u0000\u0000\u015b\u06a1\u0001\u0000\u0000\u0000\u015d\u06b4\u0001"+ - "\u0000\u0000\u0000\u015f\u06c3\u0001\u0000\u0000\u0000\u0161\u06d6\u0001"+ - "\u0000\u0000\u0000\u0163\u06d8\u0001\u0000\u0000\u0000\u0165\u06e5\u0001"+ - "\u0000\u0000\u0000\u0167\u06f3\u0001\u0000\u0000\u0000\u0169\u06fe\u0001"+ - "\u0000\u0000\u0000\u016b\u0711\u0001\u0000\u0000\u0000\u016d\u0722\u0001"+ - "\u0000\u0000\u0000\u016f\u0738\u0001\u0000\u0000\u0000\u0171\u074c\u0001"+ - "\u0000\u0000\u0000\u0173\u075f\u0001\u0000\u0000\u0000\u0175\u0770\u0001"+ - "\u0000\u0000\u0000\u0177\u0785\u0001\u0000\u0000\u0000\u0179\u079a\u0001"+ - "\u0000\u0000\u0000\u017b\u07a7\u0001\u0000\u0000\u0000\u017d\u07b2\u0001"+ - "\u0000\u0000\u0000\u017f\u07b4\u0001\u0000\u0000\u0000\u0181\u07bb\u0001"+ - "\u0000\u0000\u0000\u0183\u07d8\u0001\u0000\u0000\u0000\u0185\u07eb\u0001"+ - "\u0000\u0000\u0000\u0187\u0803\u0001\u0000\u0000\u0000\u0189\u081c\u0001"+ - "\u0000\u0000\u0000\u018b\u082f\u0001\u0000\u0000\u0000\u018d\u0848\u0001"+ - "\u0000\u0000\u0000\u018f\u0863\u0001\u0000\u0000\u0000\u0191\u0878\u0001"+ - "\u0000\u0000\u0000\u0193\u0885\u0001\u0000\u0000\u0000\u0195\u0890\u0001"+ - "\u0000\u0000\u0000\u0197\u0892\u0001\u0000\u0000\u0000\u0199\u089a\u0001"+ - "\u0000\u0000\u0000\u019b\u08a4\u0001\u0000\u0000\u0000\u019d\u08ae\u0001"+ - "\u0000\u0000\u0000\u019f\u08b9\u0001\u0000\u0000\u0000\u01a1\u08c4\u0001"+ - "\u0000\u0000\u0000\u01a3\u08d1\u0001\u0000\u0000\u0000\u01a5\u08e1\u0001"+ - "\u0000\u0000\u0000\u01a7\u08ee\u0001\u0000\u0000\u0000\u01a9\u08fe\u0001"+ - "\u0000\u0000\u0000\u01ab\u0904\u0001\u0000\u0000\u0000\u01ad\u091f\u0001"+ - "\u0000\u0000\u0000\u01af\u0921\u0001\u0000\u0000\u0000\u01b1\u0926\u0001"+ - "\u0000\u0000\u0000\u01b3\u092a\u0001\u0000\u0000\u0000\u01b5\u092f\u0001"+ - "\u0000\u0000\u0000\u01b7\u0936\u0001\u0000\u0000\u0000\u01b9\u093d\u0001"+ - "\u0000\u0000\u0000\u01bb\u0945\u0001\u0000\u0000\u0000\u01bd\u094e\u0001"+ - "\u0000\u0000\u0000\u01bf\u0959\u0001\u0000\u0000\u0000\u01c1\u0972\u0001"+ - "\u0000\u0000\u0000\u01c3\u0980\u0001\u0000\u0000\u0000\u01c5\u0982\u0001"+ - "\u0000\u0000\u0000\u01c7\u098a\u0001\u0000\u0000\u0000\u01c9\u0996\u0001"+ - "\u0000\u0000\u0000\u01cb\u099c\u0001\u0000\u0000\u0000\u01cd\u09a1\u0001"+ - "\u0000\u0000\u0000\u01cf\u09ab\u0001\u0000\u0000\u0000\u01d1\u09b6\u0001"+ - "\u0000\u0000\u0000\u01d3\u09bf\u0001\u0000\u0000\u0000\u01d5\u09cd\u0001"+ - "\u0000\u0000\u0000\u01d7\u09e0\u0001\u0000\u0000\u0000\u01d9\u09ec\u0001"+ - "\u0000\u0000\u0000\u01db\u09f6\u0001\u0000\u0000\u0000\u01dd\u09fb\u0001"+ - "\u0000\u0000\u0000\u01df\u0a07\u0001\u0000\u0000\u0000\u01e1\u0a11\u0001"+ - "\u0000\u0000\u0000\u01e3\u0a34\u0001\u0000\u0000\u0000\u01e5\u0a36\u0001"+ - "\u0000\u0000\u0000\u01e7\u0a3f\u0001\u0000\u0000\u0000\u01e9\u0a49\u0001"+ - "\u0000\u0000\u0000\u01eb\u0a51\u0001\u0000\u0000\u0000\u01ed\u0a5a\u0001"+ - "\u0000\u0000\u0000\u01ef\u0a65\u0001\u0000\u0000\u0000\u01f1\u0a70\u0001"+ - "\u0000\u0000\u0000\u01f3\u0a96\u0001\u0000\u0000\u0000\u01f5\u0aad\u0001"+ - "\u0000\u0000\u0000\u01f7\u0ac9\u0001\u0000\u0000\u0000\u01f9\u0acd\u0001"+ - "\u0000\u0000\u0000\u01fb\u0ad6\u0001\u0000\u0000\u0000\u01fd\u0ad9\u0001"+ - "\u0000\u0000\u0000\u01ff\u0adf\u0001\u0000\u0000\u0000\u0201\u0aed\u0001"+ - "\u0000\u0000\u0000\u0203\u0204\u0005.\u0000\u0000\u0204\u0002\u0001\u0000"+ - "\u0000\u0000\u0205\u0206\u0005(\u0000\u0000\u0206\u0004\u0001\u0000\u0000"+ - "\u0000\u0207\u0208\u0005)\u0000\u0000\u0208\u0006\u0001\u0000\u0000\u0000"+ - "\u0209\u020a\u0005,\u0000\u0000\u020a\b\u0001\u0000\u0000\u0000\u020b"+ - "\u020c\u0005[\u0000\u0000\u020c\n\u0001\u0000\u0000\u0000\u020d\u020e"+ - "\u0005]\u0000\u0000\u020e\f\u0001\u0000\u0000\u0000\u020f\u0210\u0005"+ - "!\u0000\u0000\u0210\u000e\u0001\u0000\u0000\u0000\u0211\u0212\u0005%\u0000"+ - "\u0000\u0212\u0010\u0001\u0000\u0000\u0000\u0213\u0214\u0005*\u0000\u0000"+ - "\u0214\u0012\u0001\u0000\u0000\u0000\u0215\u0216\u0005/\u0000\u0000\u0216"+ - "\u0014\u0001\u0000\u0000\u0000\u0217\u0218\u0005+\u0000\u0000\u0218\u0016"+ - "\u0001\u0000\u0000\u0000\u0219\u021a\u0005&\u0000\u0000\u021a\u0018\u0001"+ - "\u0000\u0000\u0000\u021b\u021c\u0005>\u0000\u0000\u021c\u001a\u0001\u0000"+ - "\u0000\u0000\u021d\u021e\u0005>\u0000\u0000\u021e\u021f\u0005=\u0000\u0000"+ - "\u021f\u001c\u0001\u0000\u0000\u0000\u0220\u0221\u0005<\u0000\u0000\u0221"+ - "\u001e\u0001\u0000\u0000\u0000\u0222\u0223\u0005<\u0000\u0000\u0223\u0224"+ - "\u0005=\u0000\u0000\u0224 \u0001\u0000\u0000\u0000\u0225\u0226\u0005="+ - "\u0000\u0000\u0226\"\u0001\u0000\u0000\u0000\u0227\u0228\u0005=\u0000"+ - "\u0000\u0228\u0229\u0005=\u0000\u0000\u0229$\u0001\u0000\u0000\u0000\u022a"+ - "\u022b\u0005=\u0000\u0000\u022b\u022c\u0005=\u0000\u0000\u022c\u022d\u0005"+ - "=\u0000\u0000\u022d&\u0001\u0000\u0000\u0000\u022e\u022f\u0005!\u0000"+ - "\u0000\u022f\u0230\u0005=\u0000\u0000\u0230\u0231\u0005=\u0000\u0000\u0231"+ - "(\u0001\u0000\u0000\u0000\u0232\u0233\u0005!\u0000\u0000\u0233\u0234\u0005"+ - "=\u0000\u0000\u0234*\u0001\u0000\u0000\u0000\u0235\u0236\u0005<\u0000"+ - "\u0000\u0236\u0237\u0005>\u0000\u0000\u0237,\u0001\u0000\u0000\u0000\u0238"+ - "\u0239\u0005&\u0000\u0000\u0239\u023a\u0005&\u0000\u0000\u023a.\u0001"+ - "\u0000\u0000\u0000\u023b\u023c\u0005|\u0000\u0000\u023c\u023d\u0005|\u0000"+ - "\u0000\u023d0\u0001\u0000\u0000\u0000\u023e\u023f\u0005?\u0000\u0000\u023f"+ - "2\u0001\u0000\u0000\u0000\u0240\u0241\u0005:\u0000\u0000\u02414\u0001"+ - "\u0000\u0000\u0000\u0242\u0243\u0005{\u0000\u0000\u02436\u0001\u0000\u0000"+ - "\u0000\u0244\u0245\u0005}\u0000\u0000\u02458\u0001\u0000\u0000\u0000\u0246"+ - "\u0247\u0005-\u0000\u0000\u0247:\u0001\u0000\u0000\u0000\u0248\u024f\u0005"+ - "0\u0000\u0000\u0249\u024b\u0005.\u0000\u0000\u024a\u024c\u0007\u0000\u0000"+ - "\u0000\u024b\u024a\u0001\u0000\u0000\u0000\u024c\u024d\u0001\u0000\u0000"+ - "\u0000\u024d\u024b\u0001\u0000\u0000\u0000\u024d\u024e\u0001\u0000\u0000"+ - "\u0000\u024e\u0250\u0001\u0000\u0000\u0000\u024f\u0249\u0001\u0000\u0000"+ - "\u0000\u024f\u0250\u0001\u0000\u0000\u0000\u0250\u0283\u0001\u0000\u0000"+ - "\u0000\u0251\u0255\u0007\u0001\u0000\u0000\u0252\u0254\u0007\u0000\u0000"+ - "\u0000\u0253\u0252\u0001\u0000\u0000\u0000\u0254\u0257\u0001\u0000\u0000"+ - "\u0000\u0255\u0253\u0001\u0000\u0000\u0000\u0255\u0256\u0001\u0000\u0000"+ - "\u0000\u0256\u025e\u0001\u0000\u0000\u0000\u0257\u0255\u0001\u0000\u0000"+ - "\u0000\u0258\u025a\u0005.\u0000\u0000\u0259\u025b\u0007\u0000\u0000\u0000"+ - "\u025a\u0259\u0001\u0000\u0000\u0000\u025b\u025c\u0001\u0000\u0000\u0000"+ - "\u025c\u025a\u0001\u0000\u0000\u0000\u025c\u025d\u0001\u0000\u0000\u0000"+ - "\u025d\u025f\u0001\u0000\u0000\u0000\u025e\u0258\u0001\u0000\u0000\u0000"+ - "\u025e\u025f\u0001\u0000\u0000\u0000\u025f\u0283\u0001\u0000\u0000\u0000"+ - "\u0260\u0267\u00050\u0000\u0000\u0261\u0263\u0005.\u0000\u0000\u0262\u0264"+ - "\u0007\u0000\u0000\u0000\u0263\u0262\u0001\u0000\u0000\u0000\u0264\u0265"+ - "\u0001\u0000\u0000\u0000\u0265\u0263\u0001\u0000\u0000\u0000\u0265\u0266"+ - "\u0001\u0000\u0000\u0000\u0266\u0268\u0001\u0000\u0000\u0000\u0267\u0261"+ - "\u0001\u0000\u0000\u0000\u0267\u0268\u0001\u0000\u0000\u0000\u0268\u0279"+ - "\u0001\u0000\u0000\u0000\u0269\u026d\u0007\u0001\u0000\u0000\u026a\u026c"+ - "\u0007\u0000\u0000\u0000\u026b\u026a\u0001\u0000\u0000\u0000\u026c\u026f"+ - "\u0001\u0000\u0000\u0000\u026d\u026b\u0001\u0000\u0000\u0000\u026d\u026e"+ - "\u0001\u0000\u0000\u0000\u026e\u0276\u0001\u0000\u0000\u0000\u026f\u026d"+ - "\u0001\u0000\u0000\u0000\u0270\u0272\u0005.\u0000\u0000\u0271\u0273\u0007"+ - "\u0000\u0000\u0000\u0272\u0271\u0001\u0000\u0000\u0000\u0273\u0274\u0001"+ - "\u0000\u0000\u0000\u0274\u0272\u0001\u0000\u0000\u0000\u0274\u0275\u0001"+ - "\u0000\u0000\u0000\u0275\u0277\u0001\u0000\u0000\u0000\u0276\u0270\u0001"+ - "\u0000\u0000\u0000\u0276\u0277\u0001\u0000\u0000\u0000\u0277\u0279\u0001"+ - "\u0000\u0000\u0000\u0278\u0260\u0001\u0000\u0000\u0000\u0278\u0269\u0001"+ - "\u0000\u0000\u0000\u0279\u027a\u0001\u0000\u0000\u0000\u027a\u027c\u0005"+ - "E\u0000\u0000\u027b\u027d\u0007\u0002\u0000\u0000\u027c\u027b\u0001\u0000"+ - "\u0000\u0000\u027c\u027d\u0001\u0000\u0000\u0000\u027d\u027e\u0001\u0000"+ - "\u0000\u0000\u027e\u0280\u0007\u0000\u0000\u0000\u027f\u0281\u0007\u0000"+ - "\u0000\u0000\u0280\u027f\u0001\u0000\u0000\u0000\u0280\u0281\u0001\u0000"+ - "\u0000\u0000\u0281\u0283\u0001\u0000\u0000\u0000\u0282\u0248\u0001\u0000"+ - "\u0000\u0000\u0282\u0251\u0001\u0000\u0000\u0000\u0282\u0278\u0001\u0000"+ - "\u0000\u0000\u0283<\u0001\u0000\u0000\u0000\u0284\u028a\u0005\'\u0000"+ - "\u0000\u0285\u0289\b\u0003\u0000\u0000\u0286\u0287\u0005\\\u0000\u0000"+ - "\u0287\u0289\u0005\'\u0000\u0000\u0288\u0285\u0001\u0000\u0000\u0000\u0288"+ - "\u0286\u0001\u0000\u0000\u0000\u0289\u028c\u0001\u0000\u0000\u0000\u028a"+ - "\u0288\u0001\u0000\u0000\u0000\u028a\u028b\u0001\u0000\u0000\u0000\u028b"+ - "\u028d\u0001\u0000\u0000\u0000\u028c\u028a\u0001\u0000\u0000\u0000\u028d"+ - "\u02a3\u0005\'\u0000\u0000\u028e\u0294\u0005\"\u0000\u0000\u028f\u0293"+ - "\b\u0004\u0000\u0000\u0290\u0291\u0005\\\u0000\u0000\u0291\u0293\u0005"+ - "\"\u0000\u0000\u0292\u028f\u0001\u0000\u0000\u0000\u0292\u0290\u0001\u0000"+ - "\u0000\u0000\u0293\u0296\u0001\u0000\u0000\u0000\u0294\u0292\u0001\u0000"+ - "\u0000\u0000\u0294\u0295\u0001\u0000\u0000\u0000\u0295\u0297\u0001\u0000"+ - "\u0000\u0000\u0296\u0294\u0001\u0000\u0000\u0000\u0297\u02a3\u0005\"\u0000"+ - "\u0000\u0298\u029e\u0005`\u0000\u0000\u0299\u029d\b\u0005\u0000\u0000"+ - "\u029a\u029b\u0005\\\u0000\u0000\u029b\u029d\u0005`\u0000\u0000\u029c"+ - "\u0299\u0001\u0000\u0000\u0000\u029c\u029a\u0001\u0000\u0000\u0000\u029d"+ - "\u02a0\u0001\u0000\u0000\u0000\u029e\u029c\u0001\u0000\u0000\u0000\u029e"+ - "\u029f\u0001\u0000\u0000\u0000\u029f\u02a1\u0001\u0000\u0000\u0000\u02a0"+ - "\u029e\u0001\u0000\u0000\u0000\u02a1\u02a3\u0005`\u0000\u0000\u02a2\u0284"+ - "\u0001\u0000\u0000\u0000\u02a2\u028e\u0001\u0000\u0000\u0000\u02a2\u0298"+ - "\u0001\u0000\u0000\u0000\u02a3>\u0001\u0000\u0000\u0000\u02a4\u02a5\u0005"+ - "N\u0000\u0000\u02a5\u02a6\u0005U\u0000\u0000\u02a6\u02a7\u0005L\u0000"+ - "\u0000\u02a7\u02a8\u0005L\u0000\u0000\u02a8@\u0001\u0000\u0000\u0000\u02a9"+ - "\u02aa\u0005E\u0000\u0000\u02aa\u02ab\u0005R\u0000\u0000\u02ab\u02ac\u0005"+ - "R\u0000\u0000\u02ac\u02ad\u0005O\u0000\u0000\u02ad\u02ae\u0005R\u0000"+ - "\u0000\u02aeB\u0001\u0000\u0000\u0000\u02af\u02db\u0005M\u0000\u0000\u02b0"+ - "\u02b1\u0005K\u0000\u0000\u02b1\u02db\u0005M\u0000\u0000\u02b2\u02b3\u0005"+ - "D\u0000\u0000\u02b3\u02db\u0005M\u0000\u0000\u02b4\u02b5\u0005C\u0000"+ - "\u0000\u02b5\u02db\u0005M\u0000\u0000\u02b6\u02b7\u0005M\u0000\u0000\u02b7"+ - "\u02db\u0005M\u0000\u0000\u02b8\u02b9\u0005M\u0000\u0000\u02b9\u02db\u0005"+ - "2\u0000\u0000\u02ba\u02bb\u0005K\u0000\u0000\u02bb\u02bc\u0005M\u0000"+ - "\u0000\u02bc\u02db\u00052\u0000\u0000\u02bd\u02be\u0005D\u0000\u0000\u02be"+ - "\u02bf\u0005M\u0000\u0000\u02bf\u02db\u00052\u0000\u0000\u02c0\u02c1\u0005"+ - "C\u0000\u0000\u02c1\u02c2\u0005M\u0000\u0000\u02c2\u02db\u00052\u0000"+ - "\u0000\u02c3\u02c4\u0005M\u0000\u0000\u02c4\u02c5\u0005M\u0000\u0000\u02c5"+ - "\u02db\u00052\u0000\u0000\u02c6\u02c7\u0005M\u0000\u0000\u02c7\u02db\u0005"+ - "3\u0000\u0000\u02c8\u02c9\u0005K\u0000\u0000\u02c9\u02ca\u0005M\u0000"+ - "\u0000\u02ca\u02db\u00053\u0000\u0000\u02cb\u02cc\u0005D\u0000\u0000\u02cc"+ - "\u02cd\u0005M\u0000\u0000\u02cd\u02db\u00053\u0000\u0000\u02ce\u02cf\u0005"+ - "C\u0000\u0000\u02cf\u02d0\u0005M\u0000\u0000\u02d0\u02db\u00053\u0000"+ - "\u0000\u02d1\u02d2\u0005M\u0000\u0000\u02d2\u02d3\u0005M\u0000\u0000\u02d3"+ - "\u02db\u00053\u0000\u0000\u02d4\u02db\u0005L\u0000\u0000\u02d5\u02d6\u0005"+ - "M\u0000\u0000\u02d6\u02db\u0005L\u0000\u0000\u02d7\u02db\u0005G\u0000"+ - "\u0000\u02d8\u02d9\u0005K\u0000\u0000\u02d9\u02db\u0005G\u0000\u0000\u02da"+ - "\u02af\u0001\u0000\u0000\u0000\u02da\u02b0\u0001\u0000\u0000\u0000\u02da"+ - "\u02b2\u0001\u0000\u0000\u0000\u02da\u02b4\u0001\u0000\u0000\u0000\u02da"+ - "\u02b6\u0001\u0000\u0000\u0000\u02da\u02b8\u0001\u0000\u0000\u0000\u02da"+ - "\u02ba\u0001\u0000\u0000\u0000\u02da\u02bd\u0001\u0000\u0000\u0000\u02da"+ - "\u02c0\u0001\u0000\u0000\u0000\u02da\u02c3\u0001\u0000\u0000\u0000\u02da"+ - "\u02c6\u0001\u0000\u0000\u0000\u02da\u02c8\u0001\u0000\u0000\u0000\u02da"+ - "\u02cb\u0001\u0000\u0000\u0000\u02da\u02ce\u0001\u0000\u0000\u0000\u02da"+ - "\u02d1\u0001\u0000\u0000\u0000\u02da\u02d4\u0001\u0000\u0000\u0000\u02da"+ - "\u02d5\u0001\u0000\u0000\u0000\u02da\u02d7\u0001\u0000\u0000\u0000\u02da"+ - "\u02d8\u0001\u0000\u0000\u0000\u02dbD\u0001\u0000\u0000\u0000\u02dc\u02dd"+ - "\u0005I\u0000\u0000\u02dd\u02de\u0005F\u0000\u0000\u02deF\u0001\u0000"+ - "\u0000\u0000\u02df\u02e0\u0005I\u0000\u0000\u02e0\u02e1\u0005F\u0000\u0000"+ - "\u02e1\u02e2\u0005E\u0000\u0000\u02e2\u02e3\u0005R\u0000\u0000\u02e3\u02e4"+ - "\u0005R\u0000\u0000\u02e4\u02e5\u0005O\u0000\u0000\u02e5\u02e6\u0005R"+ - "\u0000\u0000\u02e6H\u0001\u0000\u0000\u0000\u02e7\u02e8\u0005I\u0000\u0000"+ - "\u02e8\u02e9\u0005S\u0000\u0000\u02e9\u02ea\u0005N\u0000\u0000\u02ea\u02eb"+ - "\u0005U\u0000\u0000\u02eb\u02ec\u0005M\u0000\u0000\u02ec\u02ed\u0005B"+ - "\u0000\u0000\u02ed\u02ee\u0005E\u0000\u0000\u02ee\u02ef\u0005R\u0000\u0000"+ - "\u02efJ\u0001\u0000\u0000\u0000\u02f0\u02f1\u0005I\u0000\u0000\u02f1\u02f2"+ - "\u0005S\u0000\u0000\u02f2\u02f3\u0005T\u0000\u0000\u02f3\u02f4\u0005E"+ - "\u0000\u0000\u02f4\u02f5\u0005X\u0000\u0000\u02f5\u02f6\u0005T\u0000\u0000"+ - "\u02f6L\u0001\u0000\u0000\u0000\u02f7\u02f8\u0005I\u0000\u0000\u02f8\u02f9"+ - "\u0005S\u0000\u0000\u02f9\u02fa\u0005E\u0000\u0000\u02fa\u02fb\u0005R"+ - "\u0000\u0000\u02fb\u02fc\u0005R\u0000\u0000\u02fc\u02fd\u0005O\u0000\u0000"+ - "\u02fd\u02fe\u0005R\u0000\u0000\u02feN\u0001\u0000\u0000\u0000\u02ff\u0300"+ - "\u0005I\u0000\u0000\u0300\u0301\u0005S\u0000\u0000\u0301\u0302\u0005N"+ - "\u0000\u0000\u0302\u0303\u0005O\u0000\u0000\u0303\u0304\u0005N\u0000\u0000"+ - "\u0304\u0305\u0005T\u0000\u0000\u0305\u0306\u0005E\u0000\u0000\u0306\u0307"+ - "\u0005X\u0000\u0000\u0307\u0308\u0005T\u0000\u0000\u0308P\u0001\u0000"+ - "\u0000\u0000\u0309\u030a\u0005I\u0000\u0000\u030a\u030b\u0005S\u0000\u0000"+ - "\u030b\u030c\u0005L\u0000\u0000\u030c\u030d\u0005O\u0000\u0000\u030d\u030e"+ - "\u0005G\u0000\u0000\u030e\u030f\u0005I\u0000\u0000\u030f\u0310\u0005C"+ - "\u0000\u0000\u0310\u0311\u0005A\u0000\u0000\u0311\u0312\u0005L\u0000\u0000"+ - "\u0312R\u0001\u0000\u0000\u0000\u0313\u0314\u0005I\u0000\u0000\u0314\u0315"+ - "\u0005S\u0000\u0000\u0315\u0316\u0005E\u0000\u0000\u0316\u0317\u0005V"+ - "\u0000\u0000\u0317\u0318\u0005E\u0000\u0000\u0318\u0319\u0005N\u0000\u0000"+ - "\u0319T\u0001\u0000\u0000\u0000\u031a\u031b\u0005I\u0000\u0000\u031b\u031c"+ - "\u0005S\u0000\u0000\u031c\u031d\u0005O\u0000\u0000\u031d\u031e\u0005D"+ - "\u0000\u0000\u031e\u031f\u0005D\u0000\u0000\u031fV\u0001\u0000\u0000\u0000"+ - "\u0320\u0321\u0005I\u0000\u0000\u0321\u0322\u0005S\u0000\u0000\u0322\u0323"+ - "\u0005N\u0000\u0000\u0323\u0324\u0005U\u0000\u0000\u0324\u0325\u0005L"+ - "\u0000\u0000\u0325\u0326\u0005L\u0000\u0000\u0326X\u0001\u0000\u0000\u0000"+ - "\u0327\u0328\u0005I\u0000\u0000\u0328\u0329\u0005S\u0000\u0000\u0329\u032a"+ - "\u0005N\u0000\u0000\u032a\u032b\u0005U\u0000\u0000\u032b\u032c\u0005L"+ - "\u0000\u0000\u032c\u032d\u0005L\u0000\u0000\u032d\u032e\u0005O\u0000\u0000"+ - "\u032e\u032f\u0005R\u0000\u0000\u032f\u0330\u0005E\u0000\u0000\u0330\u0331"+ - "\u0005R\u0000\u0000\u0331\u0332\u0005R\u0000\u0000\u0332\u0333\u0005O"+ - "\u0000\u0000\u0333\u0334\u0005R\u0000\u0000\u0334Z\u0001\u0000\u0000\u0000"+ - "\u0335\u0336\u0005A\u0000\u0000\u0336\u0337\u0005N\u0000\u0000\u0337\u0338"+ - "\u0005D\u0000\u0000\u0338\\\u0001\u0000\u0000\u0000\u0339\u033a\u0005"+ - "O\u0000\u0000\u033a\u033b\u0005R\u0000\u0000\u033b^\u0001\u0000\u0000"+ - "\u0000\u033c\u033d\u0005N\u0000\u0000\u033d\u033e\u0005O\u0000\u0000\u033e"+ - "\u033f\u0005T\u0000\u0000\u033f`\u0001\u0000\u0000\u0000\u0340\u0341\u0005"+ - "T\u0000\u0000\u0341\u0342\u0005R\u0000\u0000\u0342\u0343\u0005U\u0000"+ - "\u0000\u0343\u0348\u0005E\u0000\u0000\u0344\u0345\u0005Y\u0000\u0000\u0345"+ - "\u0346\u0005E\u0000\u0000\u0346\u0348\u0005S\u0000\u0000\u0347\u0340\u0001"+ - "\u0000\u0000\u0000\u0347\u0344\u0001\u0000\u0000\u0000\u0348b\u0001\u0000"+ - "\u0000\u0000\u0349\u034a\u0005F\u0000\u0000\u034a\u034b\u0005A\u0000\u0000"+ - "\u034b\u034c\u0005L\u0000\u0000\u034c\u034d\u0005S\u0000\u0000\u034d\u0351"+ - "\u0005E\u0000\u0000\u034e\u034f\u0005N\u0000\u0000\u034f\u0351\u0005O"+ - "\u0000\u0000\u0350\u0349\u0001\u0000\u0000\u0000\u0350\u034e\u0001\u0000"+ - "\u0000\u0000\u0351d\u0001\u0000\u0000\u0000\u0352\u0353\u0005E\u0000\u0000"+ - "\u0353f\u0001\u0000\u0000\u0000\u0354\u0355\u0005P\u0000\u0000\u0355\u0356"+ - "\u0005I\u0000\u0000\u0356h\u0001\u0000\u0000\u0000\u0357\u0358\u0005D"+ - "\u0000\u0000\u0358\u0359\u0005E\u0000\u0000\u0359\u035a\u0005C\u0000\u0000"+ - "\u035a\u035b\u00052\u0000\u0000\u035b\u035c\u0005B\u0000\u0000\u035c\u035d"+ - "\u0005I\u0000\u0000\u035d\u035e\u0005N\u0000\u0000\u035ej\u0001\u0000"+ - "\u0000\u0000\u035f\u0360\u0005D\u0000\u0000\u0360\u0361\u0005E\u0000\u0000"+ - "\u0361\u0362\u0005C\u0000\u0000\u0362\u0363\u00052\u0000\u0000\u0363\u0364"+ - "\u0005H\u0000\u0000\u0364\u0365\u0005E\u0000\u0000\u0365\u0366\u0005X"+ - "\u0000\u0000\u0366l\u0001\u0000\u0000\u0000\u0367\u0368\u0005D\u0000\u0000"+ - "\u0368\u0369\u0005E\u0000\u0000\u0369\u036a\u0005C\u0000\u0000\u036a\u036b"+ - "\u00052\u0000\u0000\u036b\u036c\u0005O\u0000\u0000\u036c\u036d\u0005C"+ - "\u0000\u0000\u036d\u036e\u0005T\u0000\u0000\u036en\u0001\u0000\u0000\u0000"+ - "\u036f\u0370\u0005H\u0000\u0000\u0370\u0371\u0005E\u0000\u0000\u0371\u0372"+ - "\u0005X\u0000\u0000\u0372\u0373\u00052\u0000\u0000\u0373\u0374\u0005B"+ - "\u0000\u0000\u0374\u0375\u0005I\u0000\u0000\u0375\u0376\u0005N\u0000\u0000"+ - "\u0376p\u0001\u0000\u0000\u0000\u0377\u0378\u0005H\u0000\u0000\u0378\u0379"+ - "\u0005E\u0000\u0000\u0379\u037a\u0005X\u0000\u0000\u037a\u037b\u00052"+ - "\u0000\u0000\u037b\u037c\u0005D\u0000\u0000\u037c\u037d\u0005E\u0000\u0000"+ - "\u037d\u037e\u0005C\u0000\u0000\u037er\u0001\u0000\u0000\u0000\u037f\u0380"+ - "\u0005H\u0000\u0000\u0380\u0381\u0005E\u0000\u0000\u0381\u0382\u0005X"+ - "\u0000\u0000\u0382\u0383\u00052\u0000\u0000\u0383\u0384\u0005O\u0000\u0000"+ - "\u0384\u0385\u0005C\u0000\u0000\u0385\u0386\u0005T\u0000\u0000\u0386t"+ - "\u0001\u0000\u0000\u0000\u0387\u0388\u0005O\u0000\u0000\u0388\u0389\u0005"+ - "C\u0000\u0000\u0389\u038a\u0005T\u0000\u0000\u038a\u038b\u00052\u0000"+ - "\u0000\u038b\u038c\u0005B\u0000\u0000\u038c\u038d\u0005I\u0000\u0000\u038d"+ - "\u038e\u0005N\u0000\u0000\u038ev\u0001\u0000\u0000\u0000\u038f\u0390\u0005"+ - "O\u0000\u0000\u0390\u0391\u0005C\u0000\u0000\u0391\u0392\u0005T\u0000"+ - "\u0000\u0392\u0393\u00052\u0000\u0000\u0393\u0394\u0005D\u0000\u0000\u0394"+ - "\u0395\u0005E\u0000\u0000\u0395\u0396\u0005C\u0000\u0000\u0396x\u0001"+ - "\u0000\u0000\u0000\u0397\u0398\u0005O\u0000\u0000\u0398\u0399\u0005C\u0000"+ - "\u0000\u0399\u039a\u0005T\u0000\u0000\u039a\u039b\u00052\u0000\u0000\u039b"+ - "\u039c\u0005H\u0000\u0000\u039c\u039d\u0005E\u0000\u0000\u039d\u039e\u0005"+ - "X\u0000\u0000\u039ez\u0001\u0000\u0000\u0000\u039f\u03a0\u0005B\u0000"+ - "\u0000\u03a0\u03a1\u0005I\u0000\u0000\u03a1\u03a2\u0005N\u0000\u0000\u03a2"+ - "\u03a3\u00052\u0000\u0000\u03a3\u03a4\u0005O\u0000\u0000\u03a4\u03a5\u0005"+ - "C\u0000\u0000\u03a5\u03a6\u0005T\u0000\u0000\u03a6|\u0001\u0000\u0000"+ - "\u0000\u03a7\u03a8\u0005B\u0000\u0000\u03a8\u03a9\u0005I\u0000\u0000\u03a9"+ - "\u03aa\u0005N\u0000\u0000\u03aa\u03ab\u00052\u0000\u0000\u03ab\u03ac\u0005"+ - "D\u0000\u0000\u03ac\u03ad\u0005E\u0000\u0000\u03ad\u03ae\u0005C\u0000"+ - "\u0000\u03ae~\u0001\u0000\u0000\u0000\u03af\u03b0\u0005B\u0000\u0000\u03b0"+ - "\u03b1\u0005I\u0000\u0000\u03b1\u03b2\u0005N\u0000\u0000\u03b2\u03b3\u0005"+ - "2\u0000\u0000\u03b3\u03b4\u0005H\u0000\u0000\u03b4\u03b5\u0005E\u0000"+ - "\u0000\u03b5\u03b6\u0005X\u0000\u0000\u03b6\u0080\u0001\u0000\u0000\u0000"+ - "\u03b7\u03b8\u0005A\u0000\u0000\u03b8\u03b9\u0005B\u0000\u0000\u03b9\u03ba"+ - "\u0005S\u0000\u0000\u03ba\u0082\u0001\u0000\u0000\u0000\u03bb\u03bc\u0005"+ - "Q\u0000\u0000\u03bc\u03bd\u0005U\u0000\u0000\u03bd\u03be\u0005O\u0000"+ - "\u0000\u03be\u03bf\u0005T\u0000\u0000\u03bf\u03c0\u0005I\u0000\u0000\u03c0"+ - "\u03c1\u0005E\u0000\u0000\u03c1\u03c2\u0005N\u0000\u0000\u03c2\u03c3\u0005"+ - "T\u0000\u0000\u03c3\u0084\u0001\u0000\u0000\u0000\u03c4\u03c5\u0005M\u0000"+ - "\u0000\u03c5\u03c6\u0005O\u0000\u0000\u03c6\u03c7\u0005D\u0000\u0000\u03c7"+ - "\u0086\u0001\u0000\u0000\u0000\u03c8\u03c9\u0005S\u0000\u0000\u03c9\u03ca"+ - "\u0005I\u0000\u0000\u03ca\u03cb\u0005G\u0000\u0000\u03cb\u03cc\u0005N"+ - "\u0000\u0000\u03cc\u0088\u0001\u0000\u0000\u0000\u03cd\u03ce\u0005S\u0000"+ - "\u0000\u03ce\u03cf\u0005Q\u0000\u0000\u03cf\u03d0\u0005R\u0000\u0000\u03d0"+ - "\u03d1\u0005T\u0000\u0000\u03d1\u008a\u0001\u0000\u0000\u0000\u03d2\u03d3"+ - "\u0005T\u0000\u0000\u03d3\u03d4\u0005R\u0000\u0000\u03d4\u03d5\u0005U"+ - "\u0000\u0000\u03d5\u03d6\u0005N\u0000\u0000\u03d6\u03d7\u0005C\u0000\u0000"+ - "\u03d7\u008c\u0001\u0000\u0000\u0000\u03d8\u03d9\u0005I\u0000\u0000\u03d9"+ - "\u03da\u0005N\u0000\u0000\u03da\u03db\u0005T\u0000\u0000\u03db\u008e\u0001"+ - "\u0000\u0000\u0000\u03dc\u03dd\u0005G\u0000\u0000\u03dd\u03de\u0005C\u0000"+ - "\u0000\u03de\u03df\u0005D\u0000\u0000\u03df\u0090\u0001\u0000\u0000\u0000"+ - "\u03e0\u03e1\u0005L\u0000\u0000\u03e1\u03e2\u0005C\u0000\u0000\u03e2\u03e3"+ - "\u0005M\u0000\u0000\u03e3\u0092\u0001\u0000\u0000\u0000\u03e4\u03e5\u0005"+ - "C\u0000\u0000\u03e5\u03e6\u0005O\u0000\u0000\u03e6\u03e7\u0005M\u0000"+ - "\u0000\u03e7\u03e8\u0005B\u0000\u0000\u03e8\u03e9\u0005I\u0000\u0000\u03e9"+ - "\u03ea\u0005N\u0000\u0000\u03ea\u0094\u0001\u0000\u0000\u0000\u03eb\u03ec"+ - "\u0005P\u0000\u0000\u03ec\u03ed\u0005E\u0000\u0000\u03ed\u03ee\u0005R"+ - "\u0000\u0000\u03ee\u03ef\u0005M\u0000\u0000\u03ef\u03f0\u0005U\u0000\u0000"+ - "\u03f0\u03f1\u0005T\u0000\u0000\u03f1\u0096\u0001\u0000\u0000\u0000\u03f2"+ - "\u03f3\u0005D\u0000\u0000\u03f3\u03f4\u0005E\u0000\u0000\u03f4\u03f5\u0005"+ - "G\u0000\u0000\u03f5\u03f6\u0005R\u0000\u0000\u03f6\u03f7\u0005E\u0000"+ - "\u0000\u03f7\u03f8\u0005E\u0000\u0000\u03f8\u03f9\u0005S\u0000\u0000\u03f9"+ - "\u0098\u0001\u0000\u0000\u0000\u03fa\u03fb\u0005R\u0000\u0000\u03fb\u03fc"+ - "\u0005A\u0000\u0000\u03fc\u03fd\u0005D\u0000\u0000\u03fd\u03fe\u0005I"+ - "\u0000\u0000\u03fe\u03ff\u0005A\u0000\u0000\u03ff\u0400\u0005N\u0000\u0000"+ - "\u0400\u0401\u0005S\u0000\u0000\u0401\u009a\u0001\u0000\u0000\u0000\u0402"+ - "\u0403\u0005C\u0000\u0000\u0403\u0404\u0005O\u0000\u0000\u0404\u0405\u0005"+ - "S\u0000\u0000\u0405\u009c\u0001\u0000\u0000\u0000\u0406\u0407\u0005C\u0000"+ - "\u0000\u0407\u0408\u0005O\u0000\u0000\u0408\u0409\u0005S\u0000\u0000\u0409"+ - "\u040a\u0005H\u0000\u0000\u040a\u009e\u0001\u0000\u0000\u0000\u040b\u040c"+ - "\u0005S\u0000\u0000\u040c\u040d\u0005I\u0000\u0000\u040d\u040e\u0005N"+ - "\u0000\u0000\u040e\u00a0\u0001\u0000\u0000\u0000\u040f\u0410\u0005S\u0000"+ - "\u0000\u0410\u0411\u0005I\u0000\u0000\u0411\u0412\u0005N\u0000\u0000\u0412"+ - "\u0413\u0005H\u0000\u0000\u0413\u00a2\u0001\u0000\u0000\u0000\u0414\u0415"+ - "\u0005T\u0000\u0000\u0415\u0416\u0005A\u0000\u0000\u0416\u0417\u0005N"+ - "\u0000\u0000\u0417\u00a4\u0001\u0000\u0000\u0000\u0418\u0419\u0005T\u0000"+ - "\u0000\u0419\u041a\u0005A\u0000\u0000\u041a\u041b\u0005N\u0000\u0000\u041b"+ - "\u041c\u0005H\u0000\u0000\u041c\u00a6\u0001\u0000\u0000\u0000\u041d\u041e"+ - "\u0005A\u0000\u0000\u041e\u041f\u0005C\u0000\u0000\u041f\u0420\u0005O"+ - "\u0000\u0000\u0420\u0421\u0005S\u0000\u0000\u0421\u00a8\u0001\u0000\u0000"+ - "\u0000\u0422\u0423\u0005A\u0000\u0000\u0423\u0424\u0005C\u0000\u0000\u0424"+ - "\u0425\u0005O\u0000\u0000\u0425\u0426\u0005S\u0000\u0000\u0426\u0427\u0005"+ - "H\u0000\u0000\u0427\u00aa\u0001\u0000\u0000\u0000\u0428\u0429\u0005A\u0000"+ - "\u0000\u0429\u042a\u0005S\u0000\u0000\u042a\u042b\u0005I\u0000\u0000\u042b"+ - "\u042c\u0005N\u0000\u0000\u042c\u00ac\u0001\u0000\u0000\u0000\u042d\u042e"+ - "\u0005A\u0000\u0000\u042e\u042f\u0005S\u0000\u0000\u042f\u0430\u0005I"+ - "\u0000\u0000\u0430\u0431\u0005N\u0000\u0000\u0431\u0432\u0005H\u0000\u0000"+ - "\u0432\u00ae\u0001\u0000\u0000\u0000\u0433\u0434\u0005A\u0000\u0000\u0434"+ - "\u0435\u0005T\u0000\u0000\u0435\u0436\u0005A\u0000\u0000\u0436\u0437\u0005"+ - "N\u0000\u0000\u0437\u00b0\u0001\u0000\u0000\u0000\u0438\u0439\u0005A\u0000"+ - "\u0000\u0439\u043a\u0005T\u0000\u0000\u043a\u043b\u0005A\u0000\u0000\u043b"+ - "\u043c\u0005N\u0000\u0000\u043c\u043d\u0005H\u0000\u0000\u043d\u00b2\u0001"+ - "\u0000\u0000\u0000\u043e\u043f\u0005A\u0000\u0000\u043f\u0440\u0005T\u0000"+ - "\u0000\u0440\u0441\u0005A\u0000\u0000\u0441\u0442\u0005N\u0000\u0000\u0442"+ - "\u0443\u00052\u0000\u0000\u0443\u00b4\u0001\u0000\u0000\u0000\u0444\u0445"+ - "\u0005R\u0000\u0000\u0445\u0446\u0005O\u0000\u0000\u0446\u0447\u0005U"+ - "\u0000\u0000\u0447\u0448\u0005N\u0000\u0000\u0448\u0449\u0005D\u0000\u0000"+ - "\u0449\u00b6\u0001\u0000\u0000\u0000\u044a\u044b\u0005R\u0000\u0000\u044b"+ - "\u044c\u0005O\u0000\u0000\u044c\u044d\u0005U\u0000\u0000\u044d\u044e\u0005"+ - "N\u0000\u0000\u044e\u044f\u0005D\u0000\u0000\u044f\u0450\u0005D\u0000"+ - "\u0000\u0450\u0451\u0005O\u0000\u0000\u0451\u0452\u0005W\u0000\u0000\u0452"+ - "\u0453\u0005N\u0000\u0000\u0453\u00b8\u0001\u0000\u0000\u0000\u0454\u0455"+ - "\u0005R\u0000\u0000\u0455\u0456\u0005O\u0000\u0000\u0456\u0457\u0005U"+ - "\u0000\u0000\u0457\u0458\u0005N\u0000\u0000\u0458\u0459\u0005D\u0000\u0000"+ - "\u0459\u045a\u0005U\u0000\u0000\u045a\u045b\u0005P\u0000\u0000\u045b\u00ba"+ - "\u0001\u0000\u0000\u0000\u045c\u045d\u0005C\u0000\u0000\u045d\u045e\u0005"+ - "E\u0000\u0000\u045e\u045f\u0005I\u0000\u0000\u045f\u0460\u0005L\u0000"+ - "\u0000\u0460\u0461\u0005I\u0000\u0000\u0461\u0462\u0005N\u0000\u0000\u0462"+ - "\u0463\u0005G\u0000\u0000\u0463\u00bc\u0001\u0000\u0000\u0000\u0464\u0465"+ - "\u0005F\u0000\u0000\u0465\u0466\u0005L\u0000\u0000\u0466\u0467\u0005O"+ - "\u0000\u0000\u0467\u0468\u0005O\u0000\u0000\u0468\u0469\u0005R\u0000\u0000"+ - "\u0469\u00be\u0001\u0000\u0000\u0000\u046a\u046b\u0005E\u0000\u0000\u046b"+ - "\u046c\u0005V\u0000\u0000\u046c\u046d\u0005E\u0000\u0000\u046d\u046e\u0005"+ - "N\u0000\u0000\u046e\u00c0\u0001\u0000\u0000\u0000\u046f\u0470\u0005O\u0000"+ - "\u0000\u0470\u0471\u0005D\u0000\u0000\u0471\u0472\u0005D\u0000\u0000\u0472"+ - "\u00c2\u0001\u0000\u0000\u0000\u0473\u0474\u0005M\u0000\u0000\u0474\u0475"+ - "\u0005R\u0000\u0000\u0475\u0476\u0005O\u0000\u0000\u0476\u0477\u0005U"+ - "\u0000\u0000\u0477\u0478\u0005N\u0000\u0000\u0478\u0479\u0005D\u0000\u0000"+ - "\u0479\u00c4\u0001\u0000\u0000\u0000\u047a\u047b\u0005R\u0000\u0000\u047b"+ - "\u047c\u0005A\u0000\u0000\u047c\u047d\u0005N\u0000\u0000\u047d\u047e\u0005"+ - "D\u0000\u0000\u047e\u00c6\u0001\u0000\u0000\u0000\u047f\u0480\u0005R\u0000"+ - "\u0000\u0480\u0481\u0005A\u0000\u0000\u0481\u0482\u0005N\u0000\u0000\u0482"+ - "\u0483\u0005D\u0000\u0000\u0483\u0484\u0005B\u0000\u0000\u0484\u0485\u0005"+ - "E\u0000\u0000\u0485\u0486\u0005T\u0000\u0000\u0486\u0487\u0005W\u0000"+ - "\u0000\u0487\u0488\u0005E\u0000\u0000\u0488\u0489\u0005E\u0000\u0000\u0489"+ - "\u048a\u0005N\u0000\u0000\u048a\u00c8\u0001\u0000\u0000\u0000\u048b\u048c"+ - "\u0005F\u0000\u0000\u048c\u048d\u0005A\u0000\u0000\u048d\u048e\u0005C"+ - "\u0000\u0000\u048e\u048f\u0005T\u0000\u0000\u048f\u00ca\u0001\u0000\u0000"+ - "\u0000\u0490\u0491\u0005F\u0000\u0000\u0491\u0492\u0005A\u0000\u0000\u0492"+ - "\u0493\u0005C\u0000\u0000\u0493\u0494\u0005T\u0000\u0000\u0494\u0495\u0005"+ - "D\u0000\u0000\u0495\u0496\u0005O\u0000\u0000\u0496\u0497\u0005U\u0000"+ - "\u0000\u0497\u0498\u0005B\u0000\u0000\u0498\u0499\u0005L\u0000\u0000\u0499"+ - "\u049a\u0005E\u0000\u0000\u049a\u00cc\u0001\u0000\u0000\u0000\u049b\u049c"+ - "\u0005P\u0000\u0000\u049c\u049d\u0005O\u0000\u0000\u049d\u049e\u0005W"+ - "\u0000\u0000\u049e\u049f\u0005E\u0000\u0000\u049f\u04a0\u0005R\u0000\u0000"+ - "\u04a0\u00ce\u0001\u0000\u0000\u0000\u04a1\u04a2\u0005E\u0000\u0000\u04a2"+ - "\u04a3\u0005X\u0000\u0000\u04a3\u04a4\u0005P\u0000\u0000\u04a4\u00d0\u0001"+ - "\u0000\u0000\u0000\u04a5\u04a6\u0005L\u0000\u0000\u04a6\u04a7\u0005N\u0000"+ - "\u0000\u04a7\u00d2\u0001\u0000\u0000\u0000\u04a8\u04a9\u0005L\u0000\u0000"+ - "\u04a9\u04aa\u0005O\u0000\u0000\u04aa\u04ab\u0005G\u0000\u0000\u04ab\u00d4"+ - "\u0001\u0000\u0000\u0000\u04ac\u04ad\u0005L\u0000\u0000\u04ad\u04ae\u0005"+ - "O\u0000\u0000\u04ae\u04af\u0005G\u0000\u0000\u04af\u04b0\u00051\u0000"+ - "\u0000\u04b0\u04b1\u00050\u0000\u0000\u04b1\u00d6\u0001\u0000\u0000\u0000"+ - "\u04b2\u04b3\u0005M\u0000\u0000\u04b3\u04b4\u0005U\u0000\u0000\u04b4\u04b5"+ - "\u0005L\u0000\u0000\u04b5\u04b6\u0005T\u0000\u0000\u04b6\u04b7\u0005I"+ - "\u0000\u0000\u04b7\u04b8\u0005N\u0000\u0000\u04b8\u04b9\u0005O\u0000\u0000"+ - "\u04b9\u04ba\u0005M\u0000\u0000\u04ba\u04bb\u0005I\u0000\u0000\u04bb\u04bc"+ - "\u0005A\u0000\u0000\u04bc\u04bd\u0005L\u0000\u0000\u04bd\u00d8\u0001\u0000"+ - "\u0000\u0000\u04be\u04bf\u0005P\u0000\u0000\u04bf\u04c0\u0005R\u0000\u0000"+ - "\u04c0\u04c1\u0005O\u0000\u0000\u04c1\u04c2\u0005D\u0000\u0000\u04c2\u04c3"+ - "\u0005U\u0000\u0000\u04c3\u04c4\u0005C\u0000\u0000\u04c4\u04c5\u0005T"+ - "\u0000\u0000\u04c5\u00da\u0001\u0000\u0000\u0000\u04c6\u04c7\u0005S\u0000"+ - "\u0000\u04c7\u04c8\u0005Q\u0000\u0000\u04c8\u04c9\u0005R\u0000\u0000\u04c9"+ - "\u04ca\u0005T\u0000\u0000\u04ca\u04cb\u0005P\u0000\u0000\u04cb\u04cc\u0005"+ - "I\u0000\u0000\u04cc\u00dc\u0001\u0000\u0000\u0000\u04cd\u04ce\u0005S\u0000"+ - "\u0000\u04ce\u04cf\u0005U\u0000\u0000\u04cf\u04d0\u0005M\u0000\u0000\u04d0"+ - "\u04d1\u0005S\u0000\u0000\u04d1\u04d2\u0005Q\u0000\u0000\u04d2\u00de\u0001"+ - "\u0000\u0000\u0000\u04d3\u04d4\u0005A\u0000\u0000\u04d4\u04d5\u0005S\u0000"+ - "\u0000\u04d5\u04d6\u0005C\u0000\u0000\u04d6\u00e0\u0001\u0000\u0000\u0000"+ - "\u04d7\u04d8\u0005J\u0000\u0000\u04d8\u04d9\u0005I\u0000\u0000\u04d9\u04e3"+ - "\u0005S\u0000\u0000\u04da\u04db\u0005W\u0000\u0000\u04db\u04dc\u0005I"+ - "\u0000\u0000\u04dc\u04dd\u0005D\u0000\u0000\u04dd\u04de\u0005E\u0000\u0000"+ - "\u04de\u04df\u0005C\u0000\u0000\u04df\u04e0\u0005H\u0000\u0000\u04e0\u04e1"+ - "\u0005A\u0000\u0000\u04e1\u04e3\u0005R\u0000\u0000\u04e2\u04d7\u0001\u0000"+ - "\u0000\u0000\u04e2\u04da\u0001\u0000\u0000\u0000\u04e3\u00e2\u0001\u0000"+ - "\u0000\u0000\u04e4\u04e5\u0005C\u0000\u0000\u04e5\u04e6\u0005H\u0000\u0000"+ - "\u04e6\u04e7\u0005A\u0000\u0000\u04e7\u04e8\u0005R\u0000\u0000\u04e8\u00e4"+ - "\u0001\u0000\u0000\u0000\u04e9\u04ea\u0005C\u0000\u0000\u04ea\u04eb\u0005"+ - "L\u0000\u0000\u04eb\u04ec\u0005E\u0000\u0000\u04ec\u04ed\u0005A\u0000"+ - "\u0000\u04ed\u04ee\u0005N\u0000\u0000\u04ee\u00e6\u0001\u0000\u0000\u0000"+ - "\u04ef\u04f0\u0005C\u0000\u0000\u04f0\u04f1\u0005O\u0000\u0000\u04f1\u04f2"+ - "\u0005D\u0000\u0000\u04f2\u04f3\u0005E\u0000\u0000\u04f3\u00e8\u0001\u0000"+ - "\u0000\u0000\u04f4\u04f5\u0005C\u0000\u0000\u04f5\u04f6\u0005O\u0000\u0000"+ - "\u04f6\u04f7\u0005N\u0000\u0000\u04f7\u04f8\u0005C\u0000\u0000\u04f8\u04f9"+ - "\u0005A\u0000\u0000\u04f9\u04fa\u0005T\u0000\u0000\u04fa\u04fb\u0005E"+ - "\u0000\u0000\u04fb\u04fc\u0005N\u0000\u0000\u04fc\u04fd\u0005A\u0000\u0000"+ - "\u04fd\u04fe\u0005T\u0000\u0000\u04fe\u04ff\u0005E\u0000\u0000\u04ff\u00ea"+ - "\u0001\u0000\u0000\u0000\u0500\u0501\u0005E\u0000\u0000\u0501\u0502\u0005"+ - "X\u0000\u0000\u0502\u0503\u0005A\u0000\u0000\u0503\u0504\u0005C\u0000"+ - "\u0000\u0504\u0505\u0005T\u0000\u0000\u0505\u00ec\u0001\u0000\u0000\u0000"+ - "\u0506\u0507\u0005F\u0000\u0000\u0507\u0508\u0005I\u0000\u0000\u0508\u0509"+ - "\u0005N\u0000\u0000\u0509\u050a\u0005D\u0000\u0000\u050a\u00ee\u0001\u0000"+ - "\u0000\u0000\u050b\u050c\u0005F\u0000\u0000\u050c\u050d\u0005I\u0000\u0000"+ - "\u050d\u050e\u0005X\u0000\u0000\u050e\u050f\u0005E\u0000\u0000\u050f\u0510"+ - "\u0005D\u0000\u0000\u0510\u00f0\u0001\u0000\u0000\u0000\u0511\u0512\u0005"+ - "L\u0000\u0000\u0512\u0513\u0005E\u0000\u0000\u0513\u0514\u0005F\u0000"+ - "\u0000\u0514\u0515\u0005T\u0000\u0000\u0515\u00f2\u0001\u0000\u0000\u0000"+ - "\u0516\u0517\u0005L\u0000\u0000\u0517\u0518\u0005E\u0000\u0000\u0518\u0519"+ - "\u0005N\u0000\u0000\u0519\u00f4\u0001\u0000\u0000\u0000\u051a\u051b\u0005"+ - "L\u0000\u0000\u051b\u051c\u0005O\u0000\u0000\u051c\u051d\u0005W\u0000"+ - "\u0000\u051d\u051e\u0005E\u0000\u0000\u051e\u0527\u0005R\u0000\u0000\u051f"+ - "\u0520\u0005T\u0000\u0000\u0520\u0521\u0005O\u0000\u0000\u0521\u0522\u0005"+ - "L\u0000\u0000\u0522\u0523\u0005O\u0000\u0000\u0523\u0524\u0005W\u0000"+ - "\u0000\u0524\u0525\u0005E\u0000\u0000\u0525\u0527\u0005R\u0000\u0000\u0526"+ - "\u051a\u0001\u0000\u0000\u0000\u0526\u051f\u0001\u0000\u0000\u0000\u0527"+ - "\u00f6\u0001\u0000\u0000\u0000\u0528\u0529\u0005M\u0000\u0000\u0529\u052a"+ - "\u0005I\u0000\u0000\u052a\u052b\u0005D\u0000\u0000\u052b\u00f8\u0001\u0000"+ - "\u0000\u0000\u052c\u052d\u0005P\u0000\u0000\u052d\u052e\u0005R\u0000\u0000"+ - "\u052e\u052f\u0005O\u0000\u0000\u052f\u0530\u0005P\u0000\u0000\u0530\u0531"+ - "\u0005E\u0000\u0000\u0531\u0532\u0005R\u0000\u0000\u0532\u00fa\u0001\u0000"+ - "\u0000\u0000\u0533\u0534\u0005R\u0000\u0000\u0534\u0535\u0005E\u0000\u0000"+ - "\u0535\u0536\u0005P\u0000\u0000\u0536\u0537\u0005L\u0000\u0000\u0537\u0538"+ - "\u0005A\u0000\u0000\u0538\u0539\u0005C\u0000\u0000\u0539\u053a\u0005E"+ - "\u0000\u0000\u053a\u00fc\u0001\u0000\u0000\u0000\u053b\u053c\u0005R\u0000"+ - "\u0000\u053c\u053d\u0005E\u0000\u0000\u053d\u053e\u0005P\u0000\u0000\u053e"+ - "\u053f\u0005T\u0000\u0000\u053f\u00fe\u0001\u0000\u0000\u0000\u0540\u0541"+ - "\u0005R\u0000\u0000\u0541\u0542\u0005I\u0000\u0000\u0542\u0543\u0005G"+ - "\u0000\u0000\u0543\u0544\u0005H\u0000\u0000\u0544\u0545\u0005T\u0000\u0000"+ - "\u0545\u0100\u0001\u0000\u0000\u0000\u0546\u0547\u0005R\u0000\u0000\u0547"+ - "\u0548\u0005M\u0000\u0000\u0548\u0549\u0005B\u0000\u0000\u0549\u0102\u0001"+ - "\u0000\u0000\u0000\u054a\u054b\u0005S\u0000\u0000\u054b\u054c\u0005E\u0000"+ - "\u0000\u054c\u054d\u0005A\u0000\u0000\u054d\u054e\u0005R\u0000\u0000\u054e"+ - "\u054f\u0005C\u0000\u0000\u054f\u0550\u0005H\u0000\u0000\u0550\u0104\u0001"+ - "\u0000\u0000\u0000\u0551\u0552\u0005S\u0000\u0000\u0552\u0553\u0005U\u0000"+ - "\u0000\u0553\u0554\u0005B\u0000\u0000\u0554\u0555\u0005S\u0000\u0000\u0555"+ - "\u0556\u0005T\u0000\u0000\u0556\u0557\u0005I\u0000\u0000\u0557\u0558\u0005"+ - "T\u0000\u0000\u0558\u0559\u0005U\u0000\u0000\u0559\u055a\u0005T\u0000"+ - "\u0000\u055a\u055b\u0005E\u0000\u0000\u055b\u0106\u0001\u0000\u0000\u0000"+ - "\u055c\u055d\u0005T\u0000\u0000\u055d\u0108\u0001\u0000\u0000\u0000\u055e"+ - "\u055f\u0005T\u0000\u0000\u055f\u0560\u0005E\u0000\u0000\u0560\u0561\u0005"+ - "X\u0000\u0000\u0561\u0562\u0005T\u0000\u0000\u0562\u010a\u0001\u0000\u0000"+ - "\u0000\u0563\u0564\u0005T\u0000\u0000\u0564\u0565\u0005R\u0000\u0000\u0565"+ - "\u0566\u0005I\u0000\u0000\u0566\u0567\u0005M\u0000\u0000\u0567\u010c\u0001"+ - "\u0000\u0000\u0000\u0568\u0569\u0005U\u0000\u0000\u0569\u056a\u0005P\u0000"+ - "\u0000\u056a\u056b\u0005P\u0000\u0000\u056b\u056c\u0005E\u0000\u0000\u056c"+ - "\u0575\u0005R\u0000\u0000\u056d\u056e\u0005T\u0000\u0000\u056e\u056f\u0005"+ - "O\u0000\u0000\u056f\u0570\u0005U\u0000\u0000\u0570\u0571\u0005P\u0000"+ - "\u0000\u0571\u0572\u0005P\u0000\u0000\u0572\u0573\u0005E\u0000\u0000\u0573"+ - "\u0575\u0005R\u0000\u0000\u0574\u0568\u0001\u0000\u0000\u0000\u0574\u056d"+ - "\u0001\u0000\u0000\u0000\u0575\u010e\u0001\u0000\u0000\u0000\u0576\u0577"+ - "\u0005V\u0000\u0000\u0577\u0578\u0005A\u0000\u0000\u0578\u0579\u0005L"+ - "\u0000\u0000\u0579\u057a\u0005U\u0000\u0000\u057a\u057b\u0005E\u0000\u0000"+ - "\u057b\u0110\u0001\u0000\u0000\u0000\u057c\u057d\u0005D\u0000\u0000\u057d"+ - "\u057e\u0005A\u0000\u0000\u057e\u057f\u0005T\u0000\u0000\u057f\u0580\u0005"+ - "E\u0000\u0000\u0580\u0581\u0005V\u0000\u0000\u0581\u0582\u0005A\u0000"+ - "\u0000\u0582\u0583\u0005L\u0000\u0000\u0583\u0584\u0005U\u0000\u0000\u0584"+ - "\u0585\u0005E\u0000\u0000\u0585\u0112\u0001\u0000\u0000\u0000\u0586\u0587"+ - "\u0005T\u0000\u0000\u0587\u0588\u0005I\u0000\u0000\u0588\u0589\u0005M"+ - "\u0000\u0000\u0589\u058a\u0005E\u0000\u0000\u058a\u058b\u0005V\u0000\u0000"+ - "\u058b\u058c\u0005A\u0000\u0000\u058c\u058d\u0005L\u0000\u0000\u058d\u058e"+ - "\u0005U\u0000\u0000\u058e\u058f\u0005E\u0000\u0000\u058f\u0114\u0001\u0000"+ - "\u0000\u0000\u0590\u0591\u0005D\u0000\u0000\u0591\u0592\u0005A\u0000\u0000"+ - "\u0592\u0593\u0005T\u0000\u0000\u0593\u0594\u0005E\u0000\u0000\u0594\u0116"+ - "\u0001\u0000\u0000\u0000\u0595\u0596\u0005T\u0000\u0000\u0596\u0597\u0005"+ - "I\u0000\u0000\u0597\u0598\u0005M\u0000\u0000\u0598\u0599\u0005E\u0000"+ - "\u0000\u0599\u0118\u0001\u0000\u0000\u0000\u059a\u059b\u0005N\u0000\u0000"+ - "\u059b\u059c\u0005O\u0000\u0000\u059c\u059d\u0005W\u0000\u0000\u059d\u011a"+ - "\u0001\u0000\u0000\u0000\u059e\u059f\u0005T\u0000\u0000\u059f\u05a0\u0005"+ - "O\u0000\u0000\u05a0\u05a1\u0005D\u0000\u0000\u05a1\u05a2\u0005A\u0000"+ - "\u0000\u05a2\u05a3\u0005Y\u0000\u0000\u05a3\u011c\u0001\u0000\u0000\u0000"+ - "\u05a4\u05a5\u0005Y\u0000\u0000\u05a5\u05a6\u0005E\u0000\u0000\u05a6\u05a7"+ - "\u0005A\u0000\u0000\u05a7\u05a8\u0005R\u0000\u0000\u05a8\u011e\u0001\u0000"+ - "\u0000\u0000\u05a9\u05aa\u0005M\u0000\u0000\u05aa\u05ab\u0005O\u0000\u0000"+ - "\u05ab\u05ac\u0005N\u0000\u0000\u05ac\u05ad\u0005T\u0000\u0000\u05ad\u05ae"+ - "\u0005H\u0000\u0000\u05ae\u0120\u0001\u0000\u0000\u0000\u05af\u05b0\u0005"+ - "D\u0000\u0000\u05b0\u05b1\u0005A\u0000\u0000\u05b1\u05b2\u0005Y\u0000"+ - "\u0000\u05b2\u0122\u0001\u0000\u0000\u0000\u05b3\u05b4\u0005H\u0000\u0000"+ - "\u05b4\u05b5\u0005O\u0000\u0000\u05b5\u05b6\u0005U\u0000\u0000\u05b6\u05b7"+ - "\u0005R\u0000\u0000\u05b7\u0124\u0001\u0000\u0000\u0000\u05b8\u05b9\u0005"+ - "M\u0000\u0000\u05b9\u05ba\u0005I\u0000\u0000\u05ba\u05bb\u0005N\u0000"+ - "\u0000\u05bb\u05bc\u0005U\u0000\u0000\u05bc\u05bd\u0005T\u0000\u0000\u05bd"+ - "\u05be\u0005E\u0000\u0000\u05be\u0126\u0001\u0000\u0000\u0000\u05bf\u05c0"+ - "\u0005S\u0000\u0000\u05c0\u05c1\u0005E\u0000\u0000\u05c1\u05c2\u0005C"+ - "\u0000\u0000\u05c2\u05c3\u0005O\u0000\u0000\u05c3\u05c4\u0005N\u0000\u0000"+ - "\u05c4\u05c5\u0005D\u0000\u0000\u05c5\u0128\u0001\u0000\u0000\u0000\u05c6"+ - "\u05c7\u0005W\u0000\u0000\u05c7\u05c8\u0005E\u0000\u0000\u05c8\u05c9\u0005"+ - "E\u0000\u0000\u05c9\u05ca\u0005K\u0000\u0000\u05ca\u05cb\u0005D\u0000"+ - "\u0000\u05cb\u05cc\u0005A\u0000\u0000\u05cc\u05cd\u0005Y\u0000\u0000\u05cd"+ - "\u012a\u0001\u0000\u0000\u0000\u05ce\u05cf\u0005D\u0000\u0000\u05cf\u05d0"+ - "\u0005A\u0000\u0000\u05d0\u05d1\u0005T\u0000\u0000\u05d1\u05d2\u0005E"+ - "\u0000\u0000\u05d2\u05d3\u0005D\u0000\u0000\u05d3\u05d4\u0005I\u0000\u0000"+ - "\u05d4\u05d5\u0005F\u0000\u0000\u05d5\u012c\u0001\u0000\u0000\u0000\u05d6"+ - "\u05d7\u0005D\u0000\u0000\u05d7\u05d8\u0005A\u0000\u0000\u05d8\u05d9\u0005"+ - "Y\u0000\u0000\u05d9\u05da\u0005S\u0000\u0000\u05da\u05db\u00053\u0000"+ - "\u0000\u05db\u05dc\u00056\u0000\u0000\u05dc\u05dd\u00050\u0000\u0000\u05dd"+ - "\u012e\u0001\u0000\u0000\u0000\u05de\u05df\u0005E\u0000\u0000\u05df\u05e0"+ - "\u0005D\u0000\u0000\u05e0\u05e1\u0005A\u0000\u0000\u05e1\u05e2\u0005T"+ - "\u0000\u0000\u05e2\u05e3\u0005E\u0000\u0000\u05e3\u0130\u0001\u0000\u0000"+ - "\u0000\u05e4\u05e5\u0005E\u0000\u0000\u05e5\u05e6\u0005O\u0000\u0000\u05e6"+ - "\u05e7\u0005M\u0000\u0000\u05e7\u05e8\u0005O\u0000\u0000\u05e8\u05e9\u0005"+ - "N\u0000\u0000\u05e9\u05ea\u0005T\u0000\u0000\u05ea\u05eb\u0005H\u0000"+ - "\u0000\u05eb\u0132\u0001\u0000\u0000\u0000\u05ec\u05ed\u0005N\u0000\u0000"+ - "\u05ed\u05ee\u0005E\u0000\u0000\u05ee\u05ef\u0005T\u0000\u0000\u05ef\u05f0"+ - "\u0005W\u0000\u0000\u05f0\u05f1\u0005O\u0000\u0000\u05f1\u05f2\u0005R"+ - "\u0000\u0000\u05f2\u05f3\u0005K\u0000\u0000\u05f3\u05f4\u0005D\u0000\u0000"+ - "\u05f4\u05f5\u0005A\u0000\u0000\u05f5\u05f6\u0005Y\u0000\u0000\u05f6\u05f7"+ - "\u0005S\u0000\u0000\u05f7\u0134\u0001\u0000\u0000\u0000\u05f8\u05f9\u0005"+ - "W\u0000\u0000\u05f9\u05fa\u0005O\u0000\u0000\u05fa\u05fb\u0005R\u0000"+ - "\u0000\u05fb\u05fc\u0005K\u0000\u0000\u05fc\u05fd\u0005D\u0000\u0000\u05fd"+ - "\u05fe\u0005A\u0000\u0000\u05fe\u05ff\u0005Y\u0000\u0000\u05ff\u0136\u0001"+ - "\u0000\u0000\u0000\u0600\u0601\u0005W\u0000\u0000\u0601\u0602\u0005E\u0000"+ - "\u0000\u0602\u0603\u0005E\u0000\u0000\u0603\u0604\u0005K\u0000\u0000\u0604"+ - "\u0605\u0005N\u0000\u0000\u0605\u0606\u0005U\u0000\u0000\u0606\u0607\u0005"+ - "M\u0000\u0000\u0607\u0138\u0001\u0000\u0000\u0000\u0608\u0609\u0005M\u0000"+ - "\u0000\u0609\u060a\u0005A\u0000\u0000\u060a\u060b\u0005X\u0000\u0000\u060b"+ - "\u013a\u0001\u0000\u0000\u0000\u060c\u060d\u0005M\u0000\u0000\u060d\u060e"+ - "\u0005E\u0000\u0000\u060e\u060f\u0005D\u0000\u0000\u060f\u0610\u0005I"+ - "\u0000\u0000\u0610\u0611\u0005A\u0000\u0000\u0611\u0612\u0005N\u0000\u0000"+ - "\u0612\u013c\u0001\u0000\u0000\u0000\u0613\u0614\u0005M\u0000\u0000\u0614"+ - "\u0615\u0005I\u0000\u0000\u0615\u0616\u0005N\u0000\u0000\u0616\u013e\u0001"+ - "\u0000\u0000\u0000\u0617\u0618\u0005Q\u0000\u0000\u0618\u0619\u0005U\u0000"+ - "\u0000\u0619\u061a\u0005A\u0000\u0000\u061a\u061b\u0005R\u0000\u0000\u061b"+ - "\u061c\u0005T\u0000\u0000\u061c\u061d\u0005I\u0000\u0000\u061d\u061e\u0005"+ - "L\u0000\u0000\u061e\u061f\u0005E\u0000\u0000\u061f\u0140\u0001\u0000\u0000"+ - "\u0000\u0620\u0621\u0005M\u0000\u0000\u0621\u0622\u0005O\u0000\u0000\u0622"+ - "\u0623\u0005D\u0000\u0000\u0623\u0624\u0005E\u0000\u0000\u0624\u0142\u0001"+ - "\u0000\u0000\u0000\u0625\u0626\u0005L\u0000\u0000\u0626\u0627\u0005A\u0000"+ - "\u0000\u0627\u0628\u0005R\u0000\u0000\u0628\u0629\u0005G\u0000\u0000\u0629"+ - "\u062a\u0005E\u0000\u0000\u062a\u0144\u0001\u0000\u0000\u0000\u062b\u062c"+ - "\u0005S\u0000\u0000\u062c\u062d\u0005M\u0000\u0000\u062d\u062e\u0005A"+ - "\u0000\u0000\u062e\u062f\u0005L\u0000\u0000\u062f\u0630\u0005L\u0000\u0000"+ - "\u0630\u0146\u0001\u0000\u0000\u0000\u0631\u0632\u0005P\u0000\u0000\u0632"+ - "\u0633\u0005E\u0000\u0000\u0633\u0634\u0005R\u0000\u0000\u0634\u0635\u0005"+ - "C\u0000\u0000\u0635\u0636\u0005E\u0000\u0000\u0636\u0637\u0005N\u0000"+ - "\u0000\u0637\u0638\u0005T\u0000\u0000\u0638\u0639\u0005I\u0000\u0000\u0639"+ - "\u063a\u0005L\u0000\u0000\u063a\u064a\u0005E\u0000\u0000\u063b\u063c\u0005"+ - "P\u0000\u0000\u063c\u063d\u0005E\u0000\u0000\u063d\u063e\u0005R\u0000"+ - "\u0000\u063e\u063f\u0005C\u0000\u0000\u063f\u0640\u0005E\u0000\u0000\u0640"+ - "\u0641\u0005N\u0000\u0000\u0641\u0642\u0005T\u0000\u0000\u0642\u0643\u0005"+ - "I\u0000\u0000\u0643\u0644\u0005L\u0000\u0000\u0644\u0645\u0005E\u0000"+ - "\u0000\u0645\u0646\u0005.\u0000\u0000\u0646\u0647\u0005I\u0000\u0000\u0647"+ - "\u0648\u0005N\u0000\u0000\u0648\u064a\u0005C\u0000\u0000\u0649\u0631\u0001"+ - "\u0000\u0000\u0000\u0649\u063b\u0001\u0000\u0000\u0000\u064a\u0148\u0001"+ - "\u0000\u0000\u0000\u064b\u064c\u0005P\u0000\u0000\u064c\u064d\u0005E\u0000"+ - "\u0000\u064d\u064e\u0005R\u0000\u0000\u064e\u064f\u0005C\u0000\u0000\u064f"+ - "\u0650\u0005E\u0000\u0000\u0650\u0651\u0005N\u0000\u0000\u0651\u0652\u0005"+ - "T\u0000\u0000\u0652\u0653\u0005R\u0000\u0000\u0653\u0654\u0005A\u0000"+ - "\u0000\u0654\u0655\u0005N\u0000\u0000\u0655\u0666\u0005K\u0000\u0000\u0656"+ - "\u0657\u0005P\u0000\u0000\u0657\u0658\u0005E\u0000\u0000\u0658\u0659\u0005"+ - "R\u0000\u0000\u0659\u065a\u0005C\u0000\u0000\u065a\u065b\u0005E\u0000"+ - "\u0000\u065b\u065c\u0005N\u0000\u0000\u065c\u065d\u0005T\u0000\u0000\u065d"+ - "\u065e\u0005R\u0000\u0000\u065e\u065f\u0005A\u0000\u0000\u065f\u0660\u0005"+ - "N\u0000\u0000\u0660\u0661\u0005K\u0000\u0000\u0661\u0662\u0005.\u0000"+ - "\u0000\u0662\u0663\u0005I\u0000\u0000\u0663\u0664\u0005N\u0000\u0000\u0664"+ - "\u0666\u0005C\u0000\u0000\u0665\u064b\u0001\u0000\u0000\u0000\u0665\u0656"+ - "\u0001\u0000\u0000\u0000\u0666\u014a\u0001\u0000\u0000\u0000\u0667\u0668"+ - "\u0005A\u0000\u0000\u0668\u0669\u0005V\u0000\u0000\u0669\u066a\u0005E"+ - "\u0000\u0000\u066a\u066b\u0005R\u0000\u0000\u066b\u066c\u0005A\u0000\u0000"+ - "\u066c\u066d\u0005G\u0000\u0000\u066d\u066e\u0005E\u0000\u0000\u066e\u014c"+ - "\u0001\u0000\u0000\u0000\u066f\u0670\u0005A\u0000\u0000\u0670\u0671\u0005"+ - "V\u0000\u0000\u0671\u0672\u0005E\u0000\u0000\u0672\u0673\u0005R\u0000"+ - "\u0000\u0673\u0674\u0005A\u0000\u0000\u0674\u0675\u0005G\u0000\u0000\u0675"+ - "\u0676\u0005E\u0000\u0000\u0676\u0677\u0005I\u0000\u0000\u0677\u0678\u0005"+ - "F\u0000\u0000\u0678\u014e\u0001\u0000\u0000\u0000\u0679\u067a\u0005G\u0000"+ - "\u0000\u067a\u067b\u0005E\u0000\u0000\u067b\u067c\u0005O\u0000\u0000\u067c"+ - "\u067d\u0005M\u0000\u0000\u067d\u067e\u0005E\u0000\u0000\u067e\u067f\u0005"+ - "A\u0000\u0000\u067f\u0680\u0005N\u0000\u0000\u0680\u0150\u0001\u0000\u0000"+ - "\u0000\u0681\u0682\u0005H\u0000\u0000\u0682\u0683\u0005A\u0000\u0000\u0683"+ - "\u0684\u0005R\u0000\u0000\u0684\u0685\u0005M\u0000\u0000\u0685\u0686\u0005"+ - "E\u0000\u0000\u0686\u0687\u0005A\u0000\u0000\u0687\u0688\u0005N\u0000"+ - "\u0000\u0688\u0152\u0001\u0000\u0000\u0000\u0689\u068a\u0005C\u0000\u0000"+ - "\u068a\u068b\u0005O\u0000\u0000\u068b\u068c\u0005U\u0000\u0000\u068c\u068d"+ - "\u0005N\u0000\u0000\u068d\u068e\u0005T\u0000\u0000\u068e\u0154\u0001\u0000"+ - "\u0000\u0000\u068f\u0690\u0005C\u0000\u0000\u0690\u0691\u0005O\u0000\u0000"+ - "\u0691\u0692\u0005U\u0000\u0000\u0692\u0693\u0005N\u0000\u0000\u0693\u0694"+ - "\u0005T\u0000\u0000\u0694\u0695\u0005I\u0000\u0000\u0695\u0696\u0005F"+ - "\u0000\u0000\u0696\u0156\u0001\u0000\u0000\u0000\u0697\u0698\u0005S\u0000"+ - "\u0000\u0698\u0699\u0005U\u0000\u0000\u0699\u069a\u0005M\u0000\u0000\u069a"+ - "\u0158\u0001\u0000\u0000\u0000\u069b\u069c\u0005S\u0000\u0000\u069c\u069d"+ - "\u0005U\u0000\u0000\u069d\u069e\u0005M\u0000\u0000\u069e\u069f\u0005I"+ - "\u0000\u0000\u069f\u06a0\u0005F\u0000\u0000\u06a0\u015a\u0001\u0000\u0000"+ - "\u0000\u06a1\u06a2\u0005A\u0000\u0000\u06a2\u06a3\u0005V\u0000\u0000\u06a3"+ - "\u06a4\u0005E\u0000\u0000\u06a4\u06a5\u0005D\u0000\u0000\u06a5\u06a6\u0005"+ - "E\u0000\u0000\u06a6\u06a7\u0005V\u0000\u0000\u06a7\u015c\u0001\u0000\u0000"+ - "\u0000\u06a8\u06a9\u0005S\u0000\u0000\u06a9\u06aa\u0005T\u0000\u0000\u06aa"+ - "\u06ab\u0005D\u0000\u0000\u06ab\u06ac\u0005E\u0000\u0000\u06ac\u06b5\u0005"+ - "V\u0000\u0000\u06ad\u06ae\u0005S\u0000\u0000\u06ae\u06af\u0005T\u0000"+ - "\u0000\u06af\u06b0\u0005D\u0000\u0000\u06b0\u06b1\u0005E\u0000\u0000\u06b1"+ - "\u06b2\u0005V\u0000\u0000\u06b2\u06b3\u0005.\u0000\u0000\u06b3\u06b5\u0005"+ - "S\u0000\u0000\u06b4\u06a8\u0001\u0000\u0000\u0000\u06b4\u06ad\u0001\u0000"+ - "\u0000\u0000\u06b5\u015e\u0001\u0000\u0000\u0000\u06b6\u06b7\u0005S\u0000"+ - "\u0000\u06b7\u06b8\u0005T\u0000\u0000\u06b8\u06b9\u0005D\u0000\u0000\u06b9"+ - "\u06ba\u0005E\u0000\u0000\u06ba\u06bb\u0005V\u0000\u0000\u06bb\u06c4\u0005"+ - "P\u0000\u0000\u06bc\u06bd\u0005S\u0000\u0000\u06bd\u06be\u0005T\u0000"+ - "\u0000\u06be\u06bf\u0005D\u0000\u0000\u06bf\u06c0\u0005E\u0000\u0000\u06c0"+ - "\u06c1\u0005V\u0000\u0000\u06c1\u06c2\u0005.\u0000\u0000\u06c2\u06c4\u0005"+ - "P\u0000\u0000\u06c3\u06b6\u0001\u0000\u0000\u0000\u06c3\u06bc\u0001\u0000"+ - "\u0000\u0000\u06c4\u0160\u0001\u0000\u0000\u0000\u06c5\u06c6\u0005C\u0000"+ - "\u0000\u06c6\u06c7\u0005O\u0000\u0000\u06c7\u06c8\u0005V\u0000\u0000\u06c8"+ - "\u06c9\u0005A\u0000\u0000\u06c9\u06d7\u0005R\u0000\u0000\u06ca\u06cb\u0005"+ - "C\u0000\u0000\u06cb\u06cc\u0005O\u0000\u0000\u06cc\u06cd\u0005V\u0000"+ - "\u0000\u06cd\u06ce\u0005A\u0000\u0000\u06ce\u06cf\u0005R\u0000\u0000\u06cf"+ - "\u06d0\u0005I\u0000\u0000\u06d0\u06d1\u0005A\u0000\u0000\u06d1\u06d2\u0005"+ - "N\u0000\u0000\u06d2\u06d3\u0005C\u0000\u0000\u06d3\u06d4\u0005E\u0000"+ - "\u0000\u06d4\u06d5\u0005.\u0000\u0000\u06d5\u06d7\u0005P\u0000\u0000\u06d6"+ - "\u06c5\u0001\u0000\u0000\u0000\u06d6\u06ca\u0001\u0000\u0000\u0000\u06d7"+ - "\u0162\u0001\u0000\u0000\u0000\u06d8\u06d9\u0005C\u0000\u0000\u06d9\u06da"+ - "\u0005O\u0000\u0000\u06da\u06db\u0005V\u0000\u0000\u06db\u06dc\u0005A"+ - "\u0000\u0000\u06dc\u06dd\u0005R\u0000\u0000\u06dd\u06de\u0005I\u0000\u0000"+ - "\u06de\u06df\u0005A\u0000\u0000\u06df\u06e0\u0005N\u0000\u0000\u06e0\u06e1"+ - "\u0005C\u0000\u0000\u06e1\u06e2\u0005E\u0000\u0000\u06e2\u06e3\u0005."+ - "\u0000\u0000\u06e3\u06e4\u0005S\u0000\u0000\u06e4\u0164\u0001\u0000\u0000"+ - "\u0000\u06e5\u06e6\u0005D\u0000\u0000\u06e6\u06e7\u0005E\u0000\u0000\u06e7"+ - "\u06e8\u0005V\u0000\u0000\u06e8\u06e9\u0005S\u0000\u0000\u06e9\u06ea\u0005"+ - "Q\u0000\u0000\u06ea\u0166\u0001\u0000\u0000\u0000\u06eb\u06ec\u0005V\u0000"+ - "\u0000\u06ec\u06ed\u0005A\u0000\u0000\u06ed\u06f4\u0005R\u0000\u0000\u06ee"+ - "\u06ef\u0005V\u0000\u0000\u06ef\u06f0\u0005A\u0000\u0000\u06f0\u06f1\u0005"+ - "R\u0000\u0000\u06f1\u06f2\u0005.\u0000\u0000\u06f2\u06f4\u0005S\u0000"+ - "\u0000\u06f3\u06eb\u0001\u0000\u0000\u0000\u06f3\u06ee\u0001\u0000\u0000"+ - "\u0000\u06f4\u0168\u0001\u0000\u0000\u0000\u06f5\u06f6\u0005V\u0000\u0000"+ - "\u06f6\u06f7\u0005A\u0000\u0000\u06f7\u06f8\u0005R\u0000\u0000\u06f8\u06ff"+ - "\u0005P\u0000\u0000\u06f9\u06fa\u0005V\u0000\u0000\u06fa\u06fb\u0005A"+ - "\u0000\u0000\u06fb\u06fc\u0005R\u0000\u0000\u06fc\u06fd\u0005.\u0000\u0000"+ - "\u06fd\u06ff\u0005P\u0000\u0000\u06fe\u06f5\u0001\u0000\u0000\u0000\u06fe"+ - "\u06f9\u0001\u0000\u0000\u0000\u06ff\u016a\u0001\u0000\u0000\u0000\u0700"+ - "\u0701\u0005N\u0000\u0000\u0701\u0702\u0005O\u0000\u0000\u0702\u0703\u0005"+ - "R\u0000\u0000\u0703\u0704\u0005M\u0000\u0000\u0704\u0705\u0005D\u0000"+ - "\u0000\u0705\u0706\u0005I\u0000\u0000\u0706\u0707\u0005S\u0000\u0000\u0707"+ - "\u0712\u0005T\u0000\u0000\u0708\u0709\u0005N\u0000\u0000\u0709\u070a\u0005"+ - "O\u0000\u0000\u070a\u070b\u0005R\u0000\u0000\u070b\u070c\u0005M\u0000"+ - "\u0000\u070c\u070d\u0005.\u0000\u0000\u070d\u070e\u0005D\u0000\u0000\u070e"+ - "\u070f\u0005I\u0000\u0000\u070f\u0710\u0005S\u0000\u0000\u0710\u0712\u0005"+ - "T\u0000\u0000\u0711\u0700\u0001\u0000\u0000\u0000\u0711\u0708\u0001\u0000"+ - "\u0000\u0000\u0712\u016c\u0001\u0000\u0000\u0000\u0713\u0714\u0005N\u0000"+ - "\u0000\u0714\u0715\u0005O\u0000\u0000\u0715\u0716\u0005R\u0000\u0000\u0716"+ - "\u0717\u0005M\u0000\u0000\u0717\u0718\u0005I\u0000\u0000\u0718\u0719\u0005"+ - "N\u0000\u0000\u0719\u0723\u0005V\u0000\u0000\u071a\u071b\u0005N\u0000"+ - "\u0000\u071b\u071c\u0005O\u0000\u0000\u071c\u071d\u0005R\u0000\u0000\u071d"+ - "\u071e\u0005M\u0000\u0000\u071e\u071f\u0005.\u0000\u0000\u071f\u0720\u0005"+ - "I\u0000\u0000\u0720\u0721\u0005N\u0000\u0000\u0721\u0723\u0005V\u0000"+ - "\u0000\u0722\u0713\u0001\u0000\u0000\u0000\u0722\u071a\u0001\u0000\u0000"+ - "\u0000\u0723\u016e\u0001\u0000\u0000\u0000\u0724\u0725\u0005N\u0000\u0000"+ - "\u0725\u0726\u0005O\u0000\u0000\u0726\u0727\u0005R\u0000\u0000\u0727\u0728"+ - "\u0005M\u0000\u0000\u0728\u0729\u0005S\u0000\u0000\u0729\u072a\u0005D"+ - "\u0000\u0000\u072a\u072b\u0005I\u0000\u0000\u072b\u072c\u0005S\u0000\u0000"+ - "\u072c\u0739\u0005T\u0000\u0000\u072d\u072e\u0005N\u0000\u0000\u072e\u072f"+ - "\u0005O\u0000\u0000\u072f\u0730\u0005R\u0000\u0000\u0730\u0731\u0005M"+ - "\u0000\u0000\u0731\u0732\u0005.\u0000\u0000\u0732\u0733\u0005S\u0000\u0000"+ - "\u0733\u0734\u0005.\u0000\u0000\u0734\u0735\u0005D\u0000\u0000\u0735\u0736"+ - "\u0005I\u0000\u0000\u0736\u0737\u0005S\u0000\u0000\u0737\u0739\u0005T"+ - "\u0000\u0000\u0738\u0724\u0001\u0000\u0000\u0000\u0738\u072d\u0001\u0000"+ - "\u0000\u0000\u0739\u0170\u0001\u0000\u0000\u0000\u073a\u073b\u0005N\u0000"+ - "\u0000\u073b\u073c\u0005O\u0000\u0000\u073c\u073d\u0005R\u0000\u0000\u073d"+ - "\u073e\u0005M\u0000\u0000\u073e\u073f\u0005S\u0000\u0000\u073f\u0740\u0005"+ - "I\u0000\u0000\u0740\u0741\u0005N\u0000\u0000\u0741\u074d\u0005V\u0000"+ - "\u0000\u0742\u0743\u0005N\u0000\u0000\u0743\u0744\u0005O\u0000\u0000\u0744"+ - "\u0745\u0005R\u0000\u0000\u0745\u0746\u0005M\u0000\u0000\u0746\u0747\u0005"+ - ".\u0000\u0000\u0747\u0748\u0005S\u0000\u0000\u0748\u0749\u0005.\u0000"+ - "\u0000\u0749\u074a\u0005I\u0000\u0000\u074a\u074b\u0005N\u0000\u0000\u074b"+ - "\u074d\u0005V\u0000\u0000\u074c\u073a\u0001\u0000\u0000\u0000\u074c\u0742"+ - "\u0001\u0000\u0000\u0000\u074d\u0172\u0001\u0000\u0000\u0000\u074e\u074f"+ - "\u0005B\u0000\u0000\u074f\u0750\u0005E\u0000\u0000\u0750\u0751\u0005T"+ - "\u0000\u0000\u0751\u0752\u0005A\u0000\u0000\u0752\u0753\u0005D\u0000\u0000"+ - "\u0753\u0754\u0005I\u0000\u0000\u0754\u0755\u0005S\u0000\u0000\u0755\u0760"+ - "\u0005T\u0000\u0000\u0756\u0757\u0005B\u0000\u0000\u0757\u0758\u0005E"+ - "\u0000\u0000\u0758\u0759\u0005T\u0000\u0000\u0759\u075a\u0005A\u0000\u0000"+ - "\u075a\u075b\u0005.\u0000\u0000\u075b\u075c\u0005D\u0000\u0000\u075c\u075d"+ - "\u0005I\u0000\u0000\u075d\u075e\u0005S\u0000\u0000\u075e\u0760\u0005T"+ - "\u0000\u0000\u075f\u074e\u0001\u0000\u0000\u0000\u075f\u0756\u0001\u0000"+ - "\u0000\u0000\u0760\u0174\u0001\u0000\u0000\u0000\u0761\u0762\u0005B\u0000"+ - "\u0000\u0762\u0763\u0005E\u0000\u0000\u0763\u0764\u0005T\u0000\u0000\u0764"+ - "\u0765\u0005A\u0000\u0000\u0765\u0766\u0005I\u0000\u0000\u0766\u0767\u0005"+ - "N\u0000\u0000\u0767\u0771\u0005V\u0000\u0000\u0768\u0769\u0005B\u0000"+ - "\u0000\u0769\u076a\u0005E\u0000\u0000\u076a\u076b\u0005T\u0000\u0000\u076b"+ - "\u076c\u0005A\u0000\u0000\u076c\u076d\u0005.\u0000\u0000\u076d\u076e\u0005"+ - "I\u0000\u0000\u076e\u076f\u0005N\u0000\u0000\u076f\u0771\u0005V\u0000"+ - "\u0000\u0770\u0761\u0001\u0000\u0000\u0000\u0770\u0768\u0001\u0000\u0000"+ - "\u0000\u0771\u0176\u0001\u0000\u0000\u0000\u0772\u0773\u0005B\u0000\u0000"+ - "\u0773\u0774\u0005I\u0000\u0000\u0774\u0775\u0005N\u0000\u0000\u0775\u0776"+ - "\u0005O\u0000\u0000\u0776\u0777\u0005M\u0000\u0000\u0777\u0778\u0005D"+ - "\u0000\u0000\u0778\u0779\u0005I\u0000\u0000\u0779\u077a\u0005S\u0000\u0000"+ - "\u077a\u0786\u0005T\u0000\u0000\u077b\u077c\u0005B\u0000\u0000\u077c\u077d"+ - "\u0005I\u0000\u0000\u077d\u077e\u0005N\u0000\u0000\u077e\u077f\u0005O"+ - "\u0000\u0000\u077f\u0780\u0005M\u0000\u0000\u0780\u0781\u0005.\u0000\u0000"+ - "\u0781\u0782\u0005D\u0000\u0000\u0782\u0783\u0005I\u0000\u0000\u0783\u0784"+ - "\u0005S\u0000\u0000\u0784\u0786\u0005T\u0000\u0000\u0785\u0772\u0001\u0000"+ - "\u0000\u0000\u0785\u077b\u0001\u0000\u0000\u0000\u0786\u0178\u0001\u0000"+ - "\u0000\u0000\u0787\u0788\u0005E\u0000\u0000\u0788\u0789\u0005X\u0000\u0000"+ - "\u0789\u078a\u0005P\u0000\u0000\u078a\u078b\u0005O\u0000\u0000\u078b\u078c"+ - "\u0005N\u0000\u0000\u078c\u078d\u0005D\u0000\u0000\u078d\u078e\u0005I"+ - "\u0000\u0000\u078e\u078f\u0005S\u0000\u0000\u078f\u079b\u0005T\u0000\u0000"+ - "\u0790\u0791\u0005E\u0000\u0000\u0791\u0792\u0005X\u0000\u0000\u0792\u0793"+ - "\u0005P\u0000\u0000\u0793\u0794\u0005O\u0000\u0000\u0794\u0795\u0005N"+ - "\u0000\u0000\u0795\u0796\u0005.\u0000\u0000\u0796\u0797\u0005D\u0000\u0000"+ - "\u0797\u0798\u0005I\u0000\u0000\u0798\u0799\u0005S\u0000\u0000\u0799\u079b"+ - "\u0005T\u0000\u0000\u079a\u0787\u0001\u0000\u0000\u0000\u079a\u0790\u0001"+ - "\u0000\u0000\u0000\u079b\u017a\u0001\u0000\u0000\u0000\u079c\u079d\u0005"+ - "F\u0000\u0000\u079d\u079e\u0005D\u0000\u0000\u079e\u079f\u0005I\u0000"+ - "\u0000\u079f\u07a0\u0005S\u0000\u0000\u07a0\u07a8\u0005T\u0000\u0000\u07a1"+ - "\u07a2\u0005F\u0000\u0000\u07a2\u07a3\u0005.\u0000\u0000\u07a3\u07a4\u0005"+ - "D\u0000\u0000\u07a4\u07a5\u0005I\u0000\u0000\u07a5\u07a6\u0005S\u0000"+ - "\u0000\u07a6\u07a8\u0005T\u0000\u0000\u07a7\u079c\u0001\u0000\u0000\u0000"+ - "\u07a7\u07a1\u0001\u0000\u0000\u0000\u07a8\u017c\u0001\u0000\u0000\u0000"+ - "\u07a9\u07aa\u0005F\u0000\u0000\u07aa\u07ab\u0005I\u0000\u0000\u07ab\u07ac"+ - "\u0005N\u0000\u0000\u07ac\u07b3\u0005V\u0000\u0000\u07ad\u07ae\u0005F"+ - "\u0000\u0000\u07ae\u07af\u0005.\u0000\u0000\u07af\u07b0\u0005I\u0000\u0000"+ - "\u07b0\u07b1\u0005N\u0000\u0000\u07b1\u07b3\u0005V\u0000\u0000\u07b2\u07a9"+ - "\u0001\u0000\u0000\u0000\u07b2\u07ad\u0001\u0000\u0000\u0000\u07b3\u017e"+ - "\u0001\u0000\u0000\u0000\u07b4\u07b5\u0005F\u0000\u0000\u07b5\u07b6\u0005"+ - "I\u0000\u0000\u07b6\u07b7\u0005S\u0000\u0000\u07b7\u07b8\u0005H\u0000"+ - "\u0000\u07b8\u07b9\u0005E\u0000\u0000\u07b9\u07ba\u0005R\u0000\u0000\u07ba"+ - "\u0180\u0001\u0000\u0000\u0000\u07bb\u07bc\u0005F\u0000\u0000\u07bc\u07bd"+ - "\u0005I\u0000\u0000\u07bd\u07be\u0005S\u0000\u0000\u07be\u07bf\u0005H"+ - "\u0000\u0000\u07bf\u07c0\u0005E\u0000\u0000\u07c0\u07c1\u0005R\u0000\u0000"+ - "\u07c1\u07c2\u0005I\u0000\u0000\u07c2\u07c3\u0005N\u0000\u0000\u07c3\u07c4"+ - "\u0005V\u0000\u0000\u07c4\u0182\u0001\u0000\u0000\u0000\u07c5\u07c6\u0005"+ - "G\u0000\u0000\u07c6\u07c7\u0005A\u0000\u0000\u07c7\u07c8\u0005M\u0000"+ - "\u0000\u07c8\u07c9\u0005M\u0000\u0000\u07c9\u07ca\u0005A\u0000\u0000\u07ca"+ - "\u07cb\u0005D\u0000\u0000\u07cb\u07cc\u0005I\u0000\u0000\u07cc\u07cd\u0005"+ - "S\u0000\u0000\u07cd\u07d9\u0005T\u0000\u0000\u07ce\u07cf\u0005G\u0000"+ - "\u0000\u07cf\u07d0\u0005A\u0000\u0000\u07d0\u07d1\u0005M\u0000\u0000\u07d1"+ - "\u07d2\u0005M\u0000\u0000\u07d2\u07d3\u0005A\u0000\u0000\u07d3\u07d4\u0005"+ - ".\u0000\u0000\u07d4\u07d5\u0005D\u0000\u0000\u07d5\u07d6\u0005I\u0000"+ - "\u0000\u07d6\u07d7\u0005S\u0000\u0000\u07d7\u07d9\u0005T\u0000\u0000\u07d8"+ - "\u07c5\u0001\u0000\u0000\u0000\u07d8\u07ce\u0001\u0000\u0000\u0000\u07d9"+ - "\u0184\u0001\u0000\u0000\u0000\u07da\u07db\u0005G\u0000\u0000\u07db\u07dc"+ - "\u0005A\u0000\u0000\u07dc\u07dd\u0005M\u0000\u0000\u07dd\u07de\u0005M"+ - "\u0000\u0000\u07de\u07df\u0005A\u0000\u0000\u07df\u07e0\u0005I\u0000\u0000"+ - "\u07e0\u07e1\u0005N\u0000\u0000\u07e1\u07ec\u0005V\u0000\u0000\u07e2\u07e3"+ - "\u0005G\u0000\u0000\u07e3\u07e4\u0005A\u0000\u0000\u07e4\u07e5\u0005M"+ - "\u0000\u0000\u07e5\u07e6\u0005M\u0000\u0000\u07e6\u07e7\u0005A\u0000\u0000"+ - "\u07e7\u07e8\u0005.\u0000\u0000\u07e8\u07e9\u0005I\u0000\u0000\u07e9\u07ea"+ - "\u0005N\u0000\u0000\u07ea\u07ec\u0005V\u0000\u0000\u07eb\u07da\u0001\u0000"+ - "\u0000\u0000\u07eb\u07e2\u0001\u0000\u0000\u0000\u07ec\u0186\u0001\u0000"+ - "\u0000\u0000\u07ed\u07ee\u0005G\u0000\u0000\u07ee\u07ef\u0005A\u0000\u0000"+ - "\u07ef\u07f0\u0005M\u0000\u0000\u07f0\u07f1\u0005M\u0000\u0000\u07f1\u07f2"+ - "\u0005A\u0000\u0000\u07f2\u07f3\u0005L\u0000\u0000\u07f3\u0804\u0005N"+ - "\u0000\u0000\u07f4\u07f5\u0005G\u0000\u0000\u07f5\u07f6\u0005A\u0000\u0000"+ - "\u07f6\u07f7\u0005M\u0000\u0000\u07f7\u07f8\u0005M\u0000\u0000\u07f8\u07f9"+ - "\u0005A\u0000\u0000\u07f9\u07fa\u0005L\u0000\u0000\u07fa\u07fb\u0005N"+ - "\u0000\u0000\u07fb\u07fc\u0005.\u0000\u0000\u07fc\u07fd\u0005P\u0000\u0000"+ - "\u07fd\u07fe\u0005R\u0000\u0000\u07fe\u07ff\u0005E\u0000\u0000\u07ff\u0800"+ - "\u0005C\u0000\u0000\u0800\u0801\u0005I\u0000\u0000\u0801\u0802\u0005S"+ - "\u0000\u0000\u0802\u0804\u0005E\u0000\u0000\u0803\u07ed\u0001\u0000\u0000"+ - "\u0000\u0803\u07f4\u0001\u0000\u0000\u0000\u0804\u0188\u0001\u0000\u0000"+ - "\u0000\u0805\u0806\u0005H\u0000\u0000\u0806\u0807\u0005Y\u0000\u0000\u0807"+ - "\u0808\u0005P\u0000\u0000\u0808\u0809\u0005G\u0000\u0000\u0809\u080a\u0005"+ - "E\u0000\u0000\u080a\u080b\u0005O\u0000\u0000\u080b\u080c\u0005M\u0000"+ - "\u0000\u080c\u080d\u0005D\u0000\u0000\u080d\u080e\u0005I\u0000\u0000\u080e"+ - "\u080f\u0005S\u0000\u0000\u080f\u081d\u0005T\u0000\u0000\u0810\u0811\u0005"+ - "H\u0000\u0000\u0811\u0812\u0005Y\u0000\u0000\u0812\u0813\u0005P\u0000"+ - "\u0000\u0813\u0814\u0005G\u0000\u0000\u0814\u0815\u0005E\u0000\u0000\u0815"+ - "\u0816\u0005O\u0000\u0000\u0816\u0817\u0005M\u0000\u0000\u0817\u0818\u0005"+ - ".\u0000\u0000\u0818\u0819\u0005D\u0000\u0000\u0819\u081a\u0005I\u0000"+ - "\u0000\u081a\u081b\u0005S\u0000\u0000\u081b\u081d\u0005T\u0000\u0000\u081c"+ - "\u0805\u0001\u0000\u0000\u0000\u081c\u0810\u0001\u0000\u0000\u0000\u081d"+ - "\u018a\u0001\u0000\u0000\u0000\u081e\u081f\u0005L\u0000\u0000\u081f\u0820"+ - "\u0005O\u0000\u0000\u0820\u0821\u0005G\u0000\u0000\u0821\u0822\u0005I"+ - "\u0000\u0000\u0822\u0823\u0005N\u0000\u0000\u0823\u0830\u0005V\u0000\u0000"+ - "\u0824\u0825\u0005L\u0000\u0000\u0825\u0826\u0005O\u0000\u0000\u0826\u0827"+ - "\u0005G\u0000\u0000\u0827\u0828\u0005N\u0000\u0000\u0828\u0829\u0005O"+ - "\u0000\u0000\u0829\u082a\u0005R\u0000\u0000\u082a\u082b\u0005M\u0000\u0000"+ - "\u082b\u082c\u0005.\u0000\u0000\u082c\u082d\u0005I\u0000\u0000\u082d\u082e"+ - "\u0005N\u0000\u0000\u082e\u0830\u0005V\u0000\u0000\u082f\u081e\u0001\u0000"+ - "\u0000\u0000\u082f\u0824\u0001\u0000\u0000\u0000\u0830\u018c\u0001\u0000"+ - "\u0000\u0000\u0831\u0832\u0005L\u0000\u0000\u0832\u0833\u0005O\u0000\u0000"+ - "\u0833\u0834\u0005G\u0000\u0000\u0834\u0835\u0005N\u0000\u0000\u0835\u0836"+ - "\u0005O\u0000\u0000\u0836\u0837\u0005R\u0000\u0000\u0837\u0838\u0005M"+ - "\u0000\u0000\u0838\u0839\u0005D\u0000\u0000\u0839\u083a\u0005I\u0000\u0000"+ - "\u083a\u083b\u0005S\u0000\u0000\u083b\u0849\u0005T\u0000\u0000\u083c\u083d"+ - "\u0005L\u0000\u0000\u083d\u083e\u0005O\u0000\u0000\u083e\u083f\u0005G"+ - "\u0000\u0000\u083f\u0840\u0005N\u0000\u0000\u0840\u0841\u0005O\u0000\u0000"+ - "\u0841\u0842\u0005R\u0000\u0000\u0842\u0843\u0005M\u0000\u0000\u0843\u0844"+ - "\u0005.\u0000\u0000\u0844\u0845\u0005D\u0000\u0000\u0845\u0846\u0005I"+ - "\u0000\u0000\u0846\u0847\u0005S\u0000\u0000\u0847\u0849\u0005T\u0000\u0000"+ - "\u0848\u0831\u0001\u0000\u0000\u0000\u0848\u083c\u0001\u0000\u0000\u0000"+ - "\u0849\u018e\u0001\u0000\u0000\u0000\u084a\u084b\u0005N\u0000\u0000\u084b"+ - "\u084c\u0005E\u0000\u0000\u084c\u084d\u0005G\u0000\u0000\u084d\u084e\u0005"+ - "B\u0000\u0000\u084e\u084f\u0005I\u0000\u0000\u084f\u0850\u0005N\u0000"+ - "\u0000\u0850\u0851\u0005O\u0000\u0000\u0851\u0852\u0005M\u0000\u0000\u0852"+ - "\u0853\u0005D\u0000\u0000\u0853\u0854\u0005I\u0000\u0000\u0854\u0855\u0005"+ - "S\u0000\u0000\u0855\u0864\u0005T\u0000\u0000\u0856\u0857\u0005N\u0000"+ - "\u0000\u0857\u0858\u0005E\u0000\u0000\u0858\u0859\u0005G\u0000\u0000\u0859"+ - "\u085a\u0005B\u0000\u0000\u085a\u085b\u0005I\u0000\u0000\u085b\u085c\u0005"+ - "N\u0000\u0000\u085c\u085d\u0005O\u0000\u0000\u085d\u085e\u0005M\u0000"+ - "\u0000\u085e\u085f\u0005.\u0000\u0000\u085f\u0860\u0005D\u0000\u0000\u0860"+ - "\u0861\u0005I\u0000\u0000\u0861\u0862\u0005S\u0000\u0000\u0862\u0864\u0005"+ - "T\u0000\u0000\u0863\u084a\u0001\u0000\u0000\u0000\u0863\u0856\u0001\u0000"+ - "\u0000\u0000\u0864\u0190\u0001\u0000\u0000\u0000\u0865\u0866\u0005P\u0000"+ - "\u0000\u0866\u0867\u0005O\u0000\u0000\u0867\u0868\u0005I\u0000\u0000\u0868"+ - "\u0869\u0005S\u0000\u0000\u0869\u086a\u0005S\u0000\u0000\u086a\u086b\u0005"+ - "O\u0000\u0000\u086b\u0879\u0005N\u0000\u0000\u086c\u086d\u0005P\u0000"+ - "\u0000\u086d\u086e\u0005O\u0000\u0000\u086e\u086f\u0005I\u0000\u0000\u086f"+ - "\u0870\u0005S\u0000\u0000\u0870\u0871\u0005S\u0000\u0000\u0871\u0872\u0005"+ - "O\u0000\u0000\u0872\u0873\u0005N\u0000\u0000\u0873\u0874\u0005.\u0000"+ - "\u0000\u0874\u0875\u0005D\u0000\u0000\u0875\u0876\u0005I\u0000\u0000\u0876"+ - "\u0877\u0005S\u0000\u0000\u0877\u0879\u0005T\u0000\u0000\u0878\u0865\u0001"+ - "\u0000\u0000\u0000\u0878\u086c\u0001\u0000\u0000\u0000\u0879\u0192\u0001"+ - "\u0000\u0000\u0000\u087a\u087b\u0005T\u0000\u0000\u087b\u087c\u0005D\u0000"+ - "\u0000\u087c\u087d\u0005I\u0000\u0000\u087d\u087e\u0005S\u0000\u0000\u087e"+ - "\u0886\u0005T\u0000\u0000\u087f\u0880\u0005T\u0000\u0000\u0880\u0881\u0005"+ - ".\u0000\u0000\u0881\u0882\u0005D\u0000\u0000\u0882\u0883\u0005I\u0000"+ - "\u0000\u0883\u0884\u0005S\u0000\u0000\u0884\u0886\u0005T\u0000\u0000\u0885"+ - "\u087a\u0001\u0000\u0000\u0000\u0885\u087f\u0001\u0000\u0000\u0000\u0886"+ - "\u0194\u0001\u0000\u0000\u0000\u0887\u0888\u0005T\u0000\u0000\u0888\u0889"+ - "\u0005I\u0000\u0000\u0889\u088a\u0005N\u0000\u0000\u088a\u0891\u0005V"+ - "\u0000\u0000\u088b\u088c\u0005T\u0000\u0000\u088c\u088d\u0005.\u0000\u0000"+ - "\u088d\u088e\u0005I\u0000\u0000\u088e\u088f\u0005N\u0000\u0000\u088f\u0891"+ - "\u0005V\u0000\u0000\u0890\u0887\u0001\u0000\u0000\u0000\u0890\u088b\u0001"+ - "\u0000\u0000\u0000\u0891\u0196\u0001\u0000\u0000\u0000\u0892\u0893\u0005"+ - "W\u0000\u0000\u0893\u0894\u0005E\u0000\u0000\u0894\u0895\u0005I\u0000"+ - "\u0000\u0895\u0896\u0005B\u0000\u0000\u0896\u0897\u0005U\u0000\u0000\u0897"+ - "\u0898\u0005L\u0000\u0000\u0898\u0899\u0005L\u0000\u0000\u0899\u0198\u0001"+ - "\u0000\u0000\u0000\u089a\u089b\u0005U\u0000\u0000\u089b\u089c\u0005R\u0000"+ - "\u0000\u089c\u089d\u0005L\u0000\u0000\u089d\u089e\u0005E\u0000\u0000\u089e"+ - "\u089f\u0005N\u0000\u0000\u089f\u08a0\u0005C\u0000\u0000\u08a0\u08a1\u0005"+ - "O\u0000\u0000\u08a1\u08a2\u0005D\u0000\u0000\u08a2\u08a3\u0005E\u0000"+ - "\u0000\u08a3\u019a\u0001\u0000\u0000\u0000\u08a4\u08a5\u0005U\u0000\u0000"+ - "\u08a5\u08a6\u0005R\u0000\u0000\u08a6\u08a7\u0005L\u0000\u0000\u08a7\u08a8"+ - "\u0005D\u0000\u0000\u08a8\u08a9\u0005E\u0000\u0000\u08a9\u08aa\u0005C"+ - "\u0000\u0000\u08aa\u08ab\u0005O\u0000\u0000\u08ab\u08ac\u0005D\u0000\u0000"+ - "\u08ac\u08ad\u0005E\u0000\u0000\u08ad\u019c\u0001\u0000\u0000\u0000\u08ae"+ - "\u08af\u0005H\u0000\u0000\u08af\u08b0\u0005T\u0000\u0000\u08b0\u08b1\u0005"+ - "M\u0000\u0000\u08b1\u08b2\u0005L\u0000\u0000\u08b2\u08b3\u0005E\u0000"+ - "\u0000\u08b3\u08b4\u0005N\u0000\u0000\u08b4\u08b5\u0005C\u0000\u0000\u08b5"+ - "\u08b6\u0005O\u0000\u0000\u08b6\u08b7\u0005D\u0000\u0000\u08b7\u08b8\u0005"+ - "E\u0000\u0000\u08b8\u019e\u0001\u0000\u0000\u0000\u08b9\u08ba\u0005H\u0000"+ - "\u0000\u08ba\u08bb\u0005T\u0000\u0000\u08bb\u08bc\u0005M\u0000\u0000\u08bc"+ - "\u08bd\u0005L\u0000\u0000\u08bd\u08be\u0005D\u0000\u0000\u08be\u08bf\u0005"+ - "E\u0000\u0000\u08bf\u08c0\u0005C\u0000\u0000\u08c0\u08c1\u0005O\u0000"+ - "\u0000\u08c1\u08c2\u0005D\u0000\u0000\u08c2\u08c3\u0005E\u0000\u0000\u08c3"+ - "\u01a0\u0001\u0000\u0000\u0000\u08c4\u08c5\u0005B\u0000\u0000\u08c5\u08c6"+ - "\u0005A\u0000\u0000\u08c6\u08c7\u0005S\u0000\u0000\u08c7\u08c8\u0005E"+ - "\u0000\u0000\u08c8\u08c9\u00056\u0000\u0000\u08c9\u08ca\u00054\u0000\u0000"+ - "\u08ca\u08cb\u0005T\u0000\u0000\u08cb\u08cc\u0005O\u0000\u0000\u08cc\u08cd"+ - "\u0005T\u0000\u0000\u08cd\u08ce\u0005E\u0000\u0000\u08ce\u08cf\u0005X"+ - "\u0000\u0000\u08cf\u08d0\u0005T\u0000\u0000\u08d0\u01a2\u0001\u0000\u0000"+ - "\u0000\u08d1\u08d2\u0005B\u0000\u0000\u08d2\u08d3\u0005A\u0000\u0000\u08d3"+ - "\u08d4\u0005S\u0000\u0000\u08d4\u08d5\u0005E\u0000\u0000\u08d5\u08d6\u0005"+ - "6\u0000\u0000\u08d6\u08d7\u00054\u0000\u0000\u08d7\u08d8\u0005U\u0000"+ - "\u0000\u08d8\u08d9\u0005R\u0000\u0000\u08d9\u08da\u0005L\u0000\u0000\u08da"+ - "\u08db\u0005T\u0000\u0000\u08db\u08dc\u0005O\u0000\u0000\u08dc\u08dd\u0005"+ - "T\u0000\u0000\u08dd\u08de\u0005E\u0000\u0000\u08de\u08df\u0005X\u0000"+ - "\u0000\u08df\u08e0\u0005T\u0000\u0000\u08e0\u01a4\u0001\u0000\u0000\u0000"+ - "\u08e1\u08e2\u0005T\u0000\u0000\u08e2\u08e3\u0005E\u0000\u0000\u08e3\u08e4"+ - "\u0005X\u0000\u0000\u08e4\u08e5\u0005T\u0000\u0000\u08e5\u08e6\u0005T"+ - "\u0000\u0000\u08e6\u08e7\u0005O\u0000\u0000\u08e7\u08e8\u0005B\u0000\u0000"+ - "\u08e8\u08e9\u0005A\u0000\u0000\u08e9\u08ea\u0005S\u0000\u0000\u08ea\u08eb"+ - "\u0005E\u0000\u0000\u08eb\u08ec\u00056\u0000\u0000\u08ec\u08ed\u00054"+ - "\u0000\u0000\u08ed\u01a6\u0001\u0000\u0000\u0000\u08ee\u08ef\u0005T\u0000"+ - "\u0000\u08ef\u08f0\u0005E\u0000\u0000\u08f0\u08f1\u0005X\u0000\u0000\u08f1"+ - "\u08f2\u0005T\u0000\u0000\u08f2\u08f3\u0005T\u0000\u0000\u08f3\u08f4\u0005"+ - "O\u0000\u0000\u08f4\u08f5\u0005B\u0000\u0000\u08f5\u08f6\u0005A\u0000"+ - "\u0000\u08f6\u08f7\u0005S\u0000\u0000\u08f7\u08f8\u0005E\u0000\u0000\u08f8"+ - "\u08f9\u00056\u0000\u0000\u08f9\u08fa\u00054\u0000\u0000\u08fa\u08fb\u0005"+ - "U\u0000\u0000\u08fb\u08fc\u0005R\u0000\u0000\u08fc\u08fd\u0005L\u0000"+ - "\u0000\u08fd\u01a8\u0001\u0000\u0000\u0000\u08fe\u08ff\u0005R\u0000\u0000"+ - "\u08ff\u0900\u0005E\u0000\u0000\u0900\u0901\u0005G\u0000\u0000\u0901\u0902"+ - "\u0005E\u0000\u0000\u0902\u0903\u0005X\u0000\u0000\u0903\u01aa\u0001\u0000"+ - "\u0000\u0000\u0904\u0905\u0005R\u0000\u0000\u0905\u0906\u0005E\u0000\u0000"+ - "\u0906\u0907\u0005G\u0000\u0000\u0907\u0908\u0005E\u0000\u0000\u0908\u0909"+ - "\u0005X\u0000\u0000\u0909\u090a\u0005R\u0000\u0000\u090a\u090b\u0005E"+ - "\u0000\u0000\u090b\u090c\u0005P\u0000\u0000\u090c\u090d\u0005A\u0000\u0000"+ - "\u090d\u090e\u0005L\u0000\u0000\u090e\u090f\u0005C\u0000\u0000\u090f\u0910"+ - "\u0005E\u0000\u0000\u0910\u01ac\u0001\u0000\u0000\u0000\u0911\u0912\u0005"+ - "I\u0000\u0000\u0912\u0913\u0005S\u0000\u0000\u0913\u0914\u0005R\u0000"+ - "\u0000\u0914\u0915\u0005E\u0000\u0000\u0915\u0916\u0005G\u0000\u0000\u0916"+ - "\u0917\u0005E\u0000\u0000\u0917\u0920\u0005X\u0000\u0000\u0918\u0919\u0005"+ - "I\u0000\u0000\u0919\u091a\u0005S\u0000\u0000\u091a\u091b\u0005M\u0000"+ - "\u0000\u091b\u091c\u0005A\u0000\u0000\u091c\u091d\u0005T\u0000\u0000\u091d"+ - "\u091e\u0005C\u0000\u0000\u091e\u0920\u0005H\u0000\u0000\u091f\u0911\u0001"+ - "\u0000\u0000\u0000\u091f\u0918\u0001\u0000\u0000\u0000\u0920\u01ae\u0001"+ - "\u0000\u0000\u0000\u0921\u0922\u0005G\u0000\u0000\u0922\u0923\u0005U\u0000"+ - "\u0000\u0923\u0924\u0005I\u0000\u0000\u0924\u0925\u0005D\u0000\u0000\u0925"+ - "\u01b0\u0001\u0000\u0000\u0000\u0926\u0927\u0005M\u0000\u0000\u0927\u0928"+ - "\u0005D\u0000\u0000\u0928\u0929\u00055\u0000\u0000\u0929\u01b2\u0001\u0000"+ - "\u0000\u0000\u092a\u092b\u0005S\u0000\u0000\u092b\u092c\u0005H\u0000\u0000"+ - "\u092c\u092d\u0005A\u0000\u0000\u092d\u092e\u00051\u0000\u0000\u092e\u01b4"+ - "\u0001\u0000\u0000\u0000\u092f\u0930\u0005S\u0000\u0000\u0930\u0931\u0005"+ - "H\u0000\u0000\u0931\u0932\u0005A\u0000\u0000\u0932\u0933\u00052\u0000"+ - "\u0000\u0933\u0934\u00055\u0000\u0000\u0934\u0935\u00056\u0000\u0000\u0935"+ - "\u01b6\u0001\u0000\u0000\u0000\u0936\u0937\u0005S\u0000\u0000\u0937\u0938"+ - "\u0005H\u0000\u0000\u0938\u0939\u0005A\u0000\u0000\u0939\u093a\u00055"+ - "\u0000\u0000\u093a\u093b\u00051\u0000\u0000\u093b\u093c\u00052\u0000\u0000"+ - "\u093c\u01b8\u0001\u0000\u0000\u0000\u093d\u093e\u0005H\u0000\u0000\u093e"+ + "\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f0\u0001\u00f1\u0001\u00f1"+ + "\u0001\u00f1\u0001\u00f1\u0001\u00f1\u0001\u00f2\u0001\u00f2\u0001\u00f2"+ + "\u0001\u00f2\u0001\u00f2\u0001\u00f3\u0001\u00f3\u0001\u00f3\u0001\u00f4"+ + "\u0001\u00f4\u0001\u00f4\u0001\u00f5\u0001\u00f5\u0001\u00f5\u0001\u00f5"+ + "\u0001\u00f5\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6\u0001\u00f6"+ + "\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f7\u0001\u00f8\u0001\u00f8"+ + "\u0001\u00f8\u0001\u00f8\u0001\u00f8\u0001\u00f9\u0001\u00f9\u0001\u00f9"+ + "\u0001\u00f9\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa\u0001\u00fa"+ + "\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fb\u0001\u00fc"+ + "\u0001\u00fc\u0001\u00fc\u0001\u00fc\u0001\u00fd\u0001\u00fd\u0001\u00fd"+ + "\u0001\u00fe\u0001\u00fe\u0001\u00fe\u0001\u00fe\u0001\u00ff\u0001\u00ff"+ + "\u0001\u00ff\u0001\u00ff\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100"+ + "\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100\u0001\u0100"+ + "\u0001\u0101\u0001\u0101\u0001\u0101\u0001\u0101\u0001\u0101\u0001\u0101"+ + "\u0001\u0101\u0001\u0101\u0001\u0101\u0001\u0101\u0001\u0102\u0001\u0102"+ + "\u0001\u0102\u0001\u0102\u0001\u0102\u0001\u0102\u0001\u0102\u0001\u0102"+ + "\u0001\u0102\u0001\u0102\u0001\u0102\u0001\u0103\u0001\u0103\u0001\u0103"+ + "\u0001\u0103\u0001\u0103\u0001\u0103\u0001\u0103\u0001\u0103\u0001\u0103"+ + "\u0001\u0103\u0001\u0103\u0001\u0104\u0001\u0104\u0001\u0104\u0001\u0104"+ + "\u0001\u0104\u0001\u0104\u0001\u0104\u0001\u0104\u0001\u0104\u0001\u0104"+ + "\u0001\u0104\u0001\u0104\u0001\u0104\u0001\u0105\u0001\u0105\u0001\u0105"+ + "\u0001\u0105\u0001\u0105\u0001\u0105\u0001\u0105\u0001\u0105\u0001\u0105"+ + "\u0001\u0105\u0001\u0105\u0001\u0105\u0001\u0105\u0001\u0105\u0001\u0105"+ + "\u0001\u0105\u0001\u0106\u0001\u0106\u0001\u0106\u0001\u0106\u0001\u0106"+ + "\u0001\u0106\u0001\u0106\u0001\u0106\u0001\u0106\u0001\u0106\u0001\u0106"+ + "\u0001\u0106\u0001\u0106\u0001\u0107\u0001\u0107\u0001\u0107\u0001\u0107"+ + "\u0001\u0107\u0001\u0107\u0001\u0107\u0001\u0107\u0001\u0107\u0001\u0107"+ + "\u0001\u0107\u0001\u0107\u0001\u0107\u0001\u0107\u0001\u0107\u0001\u0107"+ + "\u0001\u0108\u0001\u0108\u0001\u0108\u0001\u0108\u0001\u0108\u0001\u0108"+ + "\u0001\u0109\u0001\u0109\u0001\u0109\u0001\u0109\u0001\u0109\u0001\u0109"+ + "\u0001\u0109\u0001\u0109\u0001\u0109\u0001\u0109\u0001\u0109\u0001\u0109"+ + "\u0001\u0109\u0001\u010a\u0001\u010a\u0001\u010a\u0001\u010a\u0001\u010a"+ + "\u0001\u010a\u0001\u010a\u0001\u010a\u0001\u010a\u0001\u010a\u0001\u010a"+ + "\u0001\u010a\u0001\u010a\u0001\u010a\u0003\u010a\u0ac5\b\u010a\u0001\u010b"+ + "\u0001\u010b\u0001\u010b\u0001\u010b\u0001\u010b\u0001\u010c\u0001\u010c"+ + "\u0001\u010c\u0001\u010c\u0001\u010d\u0001\u010d\u0001\u010d\u0001\u010d"+ + "\u0001\u010d\u0001\u010e\u0001\u010e\u0001\u010e\u0001\u010e\u0001\u010e"+ + "\u0001\u010e\u0001\u010e\u0001\u010f\u0001\u010f\u0001\u010f\u0001\u010f"+ + "\u0001\u010f\u0001\u010f\u0001\u010f\u0001\u0110\u0001\u0110\u0001\u0110"+ + "\u0001\u0110\u0001\u0110\u0001\u0110\u0001\u0110\u0001\u0110\u0001\u0111"+ + "\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111\u0001\u0111"+ + "\u0001\u0111\u0001\u0111\u0001\u0112\u0001\u0112\u0001\u0112\u0001\u0112"+ + "\u0001\u0112\u0001\u0112\u0001\u0112\u0001\u0112\u0001\u0112\u0001\u0112"+ + "\u0001\u0112\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113"+ + "\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113\u0001\u0113"+ + "\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114"+ + "\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114\u0001\u0114"+ + "\u0001\u0114\u0001\u0114\u0003\u0114\u0b18\b\u0114\u0001\u0115\u0001\u0115"+ + "\u0001\u0115\u0001\u0115\u0001\u0115\u0001\u0115\u0001\u0115\u0001\u0115"+ + "\u0001\u0115\u0001\u0115\u0001\u0115\u0001\u0115\u0003\u0115\u0b26\b\u0115"+ + "\u0001\u0116\u0001\u0116\u0001\u0116\u0001\u0116\u0001\u0116\u0001\u0116"+ + "\u0001\u0116\u0001\u0116\u0001\u0117\u0001\u0117\u0001\u0117\u0001\u0117"+ + "\u0001\u0117\u0001\u0117\u0001\u0117\u0001\u0117\u0001\u0117\u0001\u0117"+ + "\u0001\u0117\u0001\u0117\u0001\u0118\u0001\u0118\u0001\u0118\u0001\u0118"+ + "\u0001\u0118\u0001\u0118\u0001\u0119\u0001\u0119\u0001\u0119\u0001\u0119"+ + "\u0001\u0119\u0001\u011a\u0001\u011a\u0001\u011a\u0001\u011a\u0001\u011a"+ + "\u0001\u011a\u0001\u011a\u0001\u011a\u0001\u011a\u0001\u011a\u0001\u011b"+ + "\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b"+ + "\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011b\u0001\u011c\u0001\u011c"+ + "\u0001\u011c\u0001\u011c\u0001\u011c\u0001\u011c\u0001\u011c\u0001\u011c"+ + "\u0001\u011c\u0001\u011d\u0001\u011d\u0001\u011d\u0001\u011d\u0001\u011d"+ + "\u0001\u011d\u0001\u011d\u0001\u011d\u0001\u011d\u0001\u011d\u0001\u011d"+ + "\u0001\u011d\u0001\u011d\u0001\u011d\u0001\u011e\u0001\u011e\u0001\u011e"+ + "\u0001\u011e\u0001\u011e\u0001\u011e\u0001\u011e\u0001\u011e\u0001\u011e"+ + "\u0001\u011e\u0001\u011e\u0001\u011e\u0001\u011e\u0001\u011e\u0001\u011e"+ + "\u0001\u011e\u0001\u011e\u0001\u011e\u0001\u011e\u0001\u011f\u0001\u011f"+ + "\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f"+ + "\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u011f\u0001\u0120\u0001\u0120"+ + "\u0001\u0120\u0001\u0120\u0001\u0120\u0001\u0120\u0001\u0120\u0001\u0120"+ + "\u0001\u0120\u0001\u0120\u0001\u0121\u0001\u0121\u0001\u0121\u0001\u0121"+ + "\u0001\u0121\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122"+ + "\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122\u0001\u0122"+ + "\u0001\u0122\u0001\u0123\u0001\u0123\u0001\u0123\u0001\u0123\u0001\u0123"+ + "\u0001\u0123\u0001\u0123\u0001\u0123\u0001\u0123\u0001\u0123\u0001\u0124"+ + "\u0001\u0124\u0001\u0124\u0001\u0124\u0001\u0124\u0001\u0124\u0001\u0125"+ + "\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125"+ + "\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125"+ + "\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125"+ + "\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125"+ + "\u0001\u0125\u0001\u0125\u0001\u0125\u0001\u0125\u0003\u0125\u0bda\b\u0125"+ + "\u0001\u0126\u0001\u0126\u0001\u0126\u0001\u0126\u0001\u0126\u0001\u0126"+ + "\u0001\u0126\u0001\u0126\u0001\u0126\u0001\u0127\u0001\u0127\u0001\u0127"+ + "\u0001\u0127\u0001\u0127\u0001\u0127\u0001\u0127\u0001\u0127\u0001\u0127"+ + "\u0001\u0127\u0001\u0128\u0001\u0128\u0001\u0128\u0001\u0128\u0001\u0128"+ + "\u0001\u0128\u0001\u0128\u0001\u0128\u0001\u0129\u0001\u0129\u0001\u0129"+ + "\u0001\u0129\u0001\u0129\u0001\u0129\u0001\u0129\u0001\u0129\u0001\u0129"+ + "\u0001\u012a\u0001\u012a\u0001\u012a\u0001\u012a\u0001\u012a\u0001\u012a"+ + "\u0001\u012a\u0001\u012a\u0001\u012a\u0001\u012a\u0001\u012a\u0001\u012b"+ + "\u0001\u012b\u0001\u012b\u0001\u012b\u0001\u012b\u0001\u012b\u0001\u012b"+ + "\u0001\u012b\u0001\u012b\u0001\u012b\u0001\u012b\u0001\u012c\u0001\u012c"+ + "\u0001\u012c\u0001\u012c\u0001\u012c\u0001\u012c\u0001\u012c\u0001\u012c"+ + "\u0001\u012c\u0001\u012c\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d"+ + "\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d"+ + "\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d"+ + "\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d"+ + "\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d\u0001\u012d"+ + "\u0003\u012d\u0c3c\b\u012d\u0001\u012e\u0001\u012e\u0001\u012e\u0001\u012e"+ + "\u0001\u012e\u0001\u012e\u0001\u012e\u0001\u012e\u0001\u012e\u0001\u012e"+ + "\u0001\u012e\u0001\u012e\u0001\u012e\u0001\u012e\u0001\u012e\u0001\u012e"+ + "\u0001\u012e\u0001\u012e\u0001\u012e\u0001\u012e\u0001\u012e\u0003\u012e"+ + "\u0c53\b\u012e\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f"+ + "\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f"+ + "\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f"+ + "\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f\u0001\u012f"+ + "\u0001\u012f\u0001\u012f\u0001\u012f\u0003\u012f\u0c6f\b\u012f\u0001\u0130"+ + "\u0001\u0130\u0003\u0130\u0c73\b\u0130\u0001\u0130\u0001\u0130\u0005\u0130"+ + "\u0c77\b\u0130\n\u0130\f\u0130\u0c7a\t\u0130\u0001\u0131\u0001\u0131\u0001"+ + "\u0132\u0004\u0132\u0c7f\b\u0132\u000b\u0132\f\u0132\u0c80\u0001\u0132"+ + "\u0001\u0132\u0001\u0133\u0001\u0133\u0001\u0133\u0001\u0133\u0005\u0133"+ + "\u0c89\b\u0133\n\u0133\f\u0133\u0c8c\t\u0133\u0001\u0133\u0001\u0133\u0001"+ + "\u0133\u0001\u0133\u0001\u0133\u0001\u0134\u0001\u0134\u0001\u0134\u0001"+ + "\u0134\u0005\u0134\u0c97\b\u0134\n\u0134\f\u0134\u0c9a\t\u0134\u0001\u0134"+ + "\u0001\u0134\u0001\u0c8a\u0000\u0135\u0001\u0001\u0003\u0002\u0005\u0003"+ + "\u0007\u0004\t\u0005\u000b\u0006\r\u0007\u000f\b\u0011\t\u0013\n\u0015"+ + "\u000b\u0017\f\u0019\r\u001b\u000e\u001d\u000f\u001f\u0010!\u0011#\u0012"+ + "%\u0013\'\u0014)\u0015+\u0016-\u0017/\u00181\u00193\u001a5\u001b7\u001c"+ + "9\u001d;\u001e=\u001f? A!C\"E#G$I%K&M\'O(Q)S*U+W,Y-[.]/_0a1c2e3g4i5k6"+ + "m7o8q9s:u;w}?\u007f@\u0081A\u0083B\u0085C\u0087D\u0089E\u008bF\u008d"+ + "G\u008fH\u0091I\u0093J\u0095K\u0097L\u0099M\u009bN\u009dO\u009fP\u00a1"+ + "Q\u00a3R\u00a5S\u00a7T\u00a9U\u00abV\u00adW\u00afX\u00b1Y\u00b3Z\u00b5"+ + "[\u00b7\\\u00b9]\u00bb^\u00bd_\u00bf`\u00c1a\u00c3b\u00c5c\u00c7d\u00c9"+ + "e\u00cbf\u00cdg\u00cfh\u00d1i\u00d3j\u00d5k\u00d7l\u00d9m\u00dbn\u00dd"+ + "o\u00dfp\u00e1q\u00e3r\u00e5s\u00e7t\u00e9u\u00ebv\u00edw\u00efx\u00f1"+ + "y\u00f3z\u00f5{\u00f7|\u00f9}\u00fb~\u00fd\u007f\u00ff\u0080\u0101\u0081"+ + "\u0103\u0082\u0105\u0083\u0107\u0084\u0109\u0085\u010b\u0086\u010d\u0087"+ + "\u010f\u0088\u0111\u0089\u0113\u008a\u0115\u008b\u0117\u008c\u0119\u008d"+ + "\u011b\u008e\u011d\u008f\u011f\u0090\u0121\u0091\u0123\u0092\u0125\u0093"+ + "\u0127\u0094\u0129\u0095\u012b\u0096\u012d\u0097\u012f\u0098\u0131\u0099"+ + "\u0133\u009a\u0135\u009b\u0137\u009c\u0139\u009d\u013b\u009e\u013d\u009f"+ + "\u013f\u00a0\u0141\u00a1\u0143\u00a2\u0145\u00a3\u0147\u00a4\u0149\u00a5"+ + "\u014b\u00a6\u014d\u00a7\u014f\u00a8\u0151\u00a9\u0153\u00aa\u0155\u00ab"+ + "\u0157\u00ac\u0159\u00ad\u015b\u00ae\u015d\u00af\u015f\u00b0\u0161\u00b1"+ + "\u0163\u00b2\u0165\u00b3\u0167\u00b4\u0169\u00b5\u016b\u00b6\u016d\u00b7"+ + "\u016f\u00b8\u0171\u00b9\u0173\u00ba\u0175\u00bb\u0177\u00bc\u0179\u00bd"+ + "\u017b\u00be\u017d\u00bf\u017f\u00c0\u0181\u00c1\u0183\u00c2\u0185\u00c3"+ + "\u0187\u00c4\u0189\u00c5\u018b\u00c6\u018d\u00c7\u018f\u00c8\u0191\u00c9"+ + "\u0193\u00ca\u0195\u00cb\u0197\u00cc\u0199\u00cd\u019b\u00ce\u019d\u00cf"+ + "\u019f\u00d0\u01a1\u00d1\u01a3\u00d2\u01a5\u00d3\u01a7\u00d4\u01a9\u00d5"+ + "\u01ab\u00d6\u01ad\u00d7\u01af\u00d8\u01b1\u00d9\u01b3\u00da\u01b5\u00db"+ + "\u01b7\u00dc\u01b9\u00dd\u01bb\u00de\u01bd\u00df\u01bf\u00e0\u01c1\u00e1"+ + "\u01c3\u00e2\u01c5\u00e3\u01c7\u00e4\u01c9\u00e5\u01cb\u00e6\u01cd\u00e7"+ + "\u01cf\u00e8\u01d1\u00e9\u01d3\u00ea\u01d5\u00eb\u01d7\u00ec\u01d9\u00ed"+ + "\u01db\u00ee\u01dd\u00ef\u01df\u00f0\u01e1\u00f1\u01e3\u00f2\u01e5\u00f3"+ + "\u01e7\u00f4\u01e9\u00f5\u01eb\u00f6\u01ed\u00f7\u01ef\u00f8\u01f1\u00f9"+ + "\u01f3\u00fa\u01f5\u00fb\u01f7\u00fc\u01f9\u00fd\u01fb\u00fe\u01fd\u00ff"+ + "\u01ff\u0100\u0201\u0101\u0203\u0102\u0205\u0103\u0207\u0104\u0209\u0105"+ + "\u020b\u0106\u020d\u0107\u020f\u0108\u0211\u0109\u0213\u010a\u0215\u010b"+ + "\u0217\u010c\u0219\u010d\u021b\u010e\u021d\u010f\u021f\u0110\u0221\u0111"+ + "\u0223\u0112\u0225\u0113\u0227\u0114\u0229\u0115\u022b\u0116\u022d\u0117"+ + "\u022f\u0118\u0231\u0119\u0233\u011a\u0235\u011b\u0237\u011c\u0239\u011d"+ + "\u023b\u011e\u023d\u011f\u023f\u0120\u0241\u0121\u0243\u0122\u0245\u0123"+ + "\u0247\u0124\u0249\u0125\u024b\u0126\u024d\u0127\u024f\u0128\u0251\u0129"+ + "\u0253\u012a\u0255\u012b\u0257\u012c\u0259\u012d\u025b\u012e\u025d\u012f"+ + "\u025f\u0130\u0261\u0131\u0263\u0000\u0265\u0132\u0267\u0133\u0269\u0134"+ + "\u0001\u0000\u000b\u0001\u000009\u0001\u000019\u0002\u0000++--\u0001\u0000"+ + "\'\'\u0001\u0000\"\"\u0001\u0000``\u0002\u0000AZ__\u0003\u000009AZ__\n"+ + "\u0000\u00c0\u00d6\u00d8\u00f6\u00f8\u1fff\u2c00\u2fff\u3040\u318f\u3300"+ + "\u337f\u3400\u3fff\u4e00\u8000\ud7ff\u8000\uf900\u8000\ufaff\u8000\uff00"+ + "\u8000\ufff0\u0003\u0000\t\n\f\r \u0002\u0000\n\n\r\r\u0cf5\u0000\u0001"+ + "\u0001\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0000\u0000\u0005"+ + "\u0001\u0000\u0000\u0000\u0000\u0007\u0001\u0000\u0000\u0000\u0000\t\u0001"+ + "\u0000\u0000\u0000\u0000\u000b\u0001\u0000\u0000\u0000\u0000\r\u0001\u0000"+ + "\u0000\u0000\u0000\u000f\u0001\u0000\u0000\u0000\u0000\u0011\u0001\u0000"+ + "\u0000\u0000\u0000\u0013\u0001\u0000\u0000\u0000\u0000\u0015\u0001\u0000"+ + "\u0000\u0000\u0000\u0017\u0001\u0000\u0000\u0000\u0000\u0019\u0001\u0000"+ + "\u0000\u0000\u0000\u001b\u0001\u0000\u0000\u0000\u0000\u001d\u0001\u0000"+ + "\u0000\u0000\u0000\u001f\u0001\u0000\u0000\u0000\u0000!\u0001\u0000\u0000"+ + "\u0000\u0000#\u0001\u0000\u0000\u0000\u0000%\u0001\u0000\u0000\u0000\u0000"+ + "\'\u0001\u0000\u0000\u0000\u0000)\u0001\u0000\u0000\u0000\u0000+\u0001"+ + "\u0000\u0000\u0000\u0000-\u0001\u0000\u0000\u0000\u0000/\u0001\u0000\u0000"+ + "\u0000\u00001\u0001\u0000\u0000\u0000\u00003\u0001\u0000\u0000\u0000\u0000"+ + "5\u0001\u0000\u0000\u0000\u00007\u0001\u0000\u0000\u0000\u00009\u0001"+ + "\u0000\u0000\u0000\u0000;\u0001\u0000\u0000\u0000\u0000=\u0001\u0000\u0000"+ + "\u0000\u0000?\u0001\u0000\u0000\u0000\u0000A\u0001\u0000\u0000\u0000\u0000"+ + "C\u0001\u0000\u0000\u0000\u0000E\u0001\u0000\u0000\u0000\u0000G\u0001"+ + "\u0000\u0000\u0000\u0000I\u0001\u0000\u0000\u0000\u0000K\u0001\u0000\u0000"+ + "\u0000\u0000M\u0001\u0000\u0000\u0000\u0000O\u0001\u0000\u0000\u0000\u0000"+ + "Q\u0001\u0000\u0000\u0000\u0000S\u0001\u0000\u0000\u0000\u0000U\u0001"+ + "\u0000\u0000\u0000\u0000W\u0001\u0000\u0000\u0000\u0000Y\u0001\u0000\u0000"+ + "\u0000\u0000[\u0001\u0000\u0000\u0000\u0000]\u0001\u0000\u0000\u0000\u0000"+ + "_\u0001\u0000\u0000\u0000\u0000a\u0001\u0000\u0000\u0000\u0000c\u0001"+ + "\u0000\u0000\u0000\u0000e\u0001\u0000\u0000\u0000\u0000g\u0001\u0000\u0000"+ + "\u0000\u0000i\u0001\u0000\u0000\u0000\u0000k\u0001\u0000\u0000\u0000\u0000"+ + "m\u0001\u0000\u0000\u0000\u0000o\u0001\u0000\u0000\u0000\u0000q\u0001"+ + "\u0000\u0000\u0000\u0000s\u0001\u0000\u0000\u0000\u0000u\u0001\u0000\u0000"+ + "\u0000\u0000w\u0001\u0000\u0000\u0000\u0000y\u0001\u0000\u0000\u0000\u0000"+ + "{\u0001\u0000\u0000\u0000\u0000}\u0001\u0000\u0000\u0000\u0000\u007f\u0001"+ + "\u0000\u0000\u0000\u0000\u0081\u0001\u0000\u0000\u0000\u0000\u0083\u0001"+ + "\u0000\u0000\u0000\u0000\u0085\u0001\u0000\u0000\u0000\u0000\u0087\u0001"+ + "\u0000\u0000\u0000\u0000\u0089\u0001\u0000\u0000\u0000\u0000\u008b\u0001"+ + "\u0000\u0000\u0000\u0000\u008d\u0001\u0000\u0000\u0000\u0000\u008f\u0001"+ + "\u0000\u0000\u0000\u0000\u0091\u0001\u0000\u0000\u0000\u0000\u0093\u0001"+ + "\u0000\u0000\u0000\u0000\u0095\u0001\u0000\u0000\u0000\u0000\u0097\u0001"+ + "\u0000\u0000\u0000\u0000\u0099\u0001\u0000\u0000\u0000\u0000\u009b\u0001"+ + "\u0000\u0000\u0000\u0000\u009d\u0001\u0000\u0000\u0000\u0000\u009f\u0001"+ + "\u0000\u0000\u0000\u0000\u00a1\u0001\u0000\u0000\u0000\u0000\u00a3\u0001"+ + "\u0000\u0000\u0000\u0000\u00a5\u0001\u0000\u0000\u0000\u0000\u00a7\u0001"+ + "\u0000\u0000\u0000\u0000\u00a9\u0001\u0000\u0000\u0000\u0000\u00ab\u0001"+ + "\u0000\u0000\u0000\u0000\u00ad\u0001\u0000\u0000\u0000\u0000\u00af\u0001"+ + "\u0000\u0000\u0000\u0000\u00b1\u0001\u0000\u0000\u0000\u0000\u00b3\u0001"+ + "\u0000\u0000\u0000\u0000\u00b5\u0001\u0000\u0000\u0000\u0000\u00b7\u0001"+ + "\u0000\u0000\u0000\u0000\u00b9\u0001\u0000\u0000\u0000\u0000\u00bb\u0001"+ + "\u0000\u0000\u0000\u0000\u00bd\u0001\u0000\u0000\u0000\u0000\u00bf\u0001"+ + "\u0000\u0000\u0000\u0000\u00c1\u0001\u0000\u0000\u0000\u0000\u00c3\u0001"+ + "\u0000\u0000\u0000\u0000\u00c5\u0001\u0000\u0000\u0000\u0000\u00c7\u0001"+ + "\u0000\u0000\u0000\u0000\u00c9\u0001\u0000\u0000\u0000\u0000\u00cb\u0001"+ + "\u0000\u0000\u0000\u0000\u00cd\u0001\u0000\u0000\u0000\u0000\u00cf\u0001"+ + "\u0000\u0000\u0000\u0000\u00d1\u0001\u0000\u0000\u0000\u0000\u00d3\u0001"+ + "\u0000\u0000\u0000\u0000\u00d5\u0001\u0000\u0000\u0000\u0000\u00d7\u0001"+ + "\u0000\u0000\u0000\u0000\u00d9\u0001\u0000\u0000\u0000\u0000\u00db\u0001"+ + "\u0000\u0000\u0000\u0000\u00dd\u0001\u0000\u0000\u0000\u0000\u00df\u0001"+ + "\u0000\u0000\u0000\u0000\u00e1\u0001\u0000\u0000\u0000\u0000\u00e3\u0001"+ + "\u0000\u0000\u0000\u0000\u00e5\u0001\u0000\u0000\u0000\u0000\u00e7\u0001"+ + "\u0000\u0000\u0000\u0000\u00e9\u0001\u0000\u0000\u0000\u0000\u00eb\u0001"+ + "\u0000\u0000\u0000\u0000\u00ed\u0001\u0000\u0000\u0000\u0000\u00ef\u0001"+ + "\u0000\u0000\u0000\u0000\u00f1\u0001\u0000\u0000\u0000\u0000\u00f3\u0001"+ + "\u0000\u0000\u0000\u0000\u00f5\u0001\u0000\u0000\u0000\u0000\u00f7\u0001"+ + "\u0000\u0000\u0000\u0000\u00f9\u0001\u0000\u0000\u0000\u0000\u00fb\u0001"+ + "\u0000\u0000\u0000\u0000\u00fd\u0001\u0000\u0000\u0000\u0000\u00ff\u0001"+ + "\u0000\u0000\u0000\u0000\u0101\u0001\u0000\u0000\u0000\u0000\u0103\u0001"+ + "\u0000\u0000\u0000\u0000\u0105\u0001\u0000\u0000\u0000\u0000\u0107\u0001"+ + "\u0000\u0000\u0000\u0000\u0109\u0001\u0000\u0000\u0000\u0000\u010b\u0001"+ + "\u0000\u0000\u0000\u0000\u010d\u0001\u0000\u0000\u0000\u0000\u010f\u0001"+ + "\u0000\u0000\u0000\u0000\u0111\u0001\u0000\u0000\u0000\u0000\u0113\u0001"+ + "\u0000\u0000\u0000\u0000\u0115\u0001\u0000\u0000\u0000\u0000\u0117\u0001"+ + "\u0000\u0000\u0000\u0000\u0119\u0001\u0000\u0000\u0000\u0000\u011b\u0001"+ + "\u0000\u0000\u0000\u0000\u011d\u0001\u0000\u0000\u0000\u0000\u011f\u0001"+ + "\u0000\u0000\u0000\u0000\u0121\u0001\u0000\u0000\u0000\u0000\u0123\u0001"+ + "\u0000\u0000\u0000\u0000\u0125\u0001\u0000\u0000\u0000\u0000\u0127\u0001"+ + "\u0000\u0000\u0000\u0000\u0129\u0001\u0000\u0000\u0000\u0000\u012b\u0001"+ + "\u0000\u0000\u0000\u0000\u012d\u0001\u0000\u0000\u0000\u0000\u012f\u0001"+ + "\u0000\u0000\u0000\u0000\u0131\u0001\u0000\u0000\u0000\u0000\u0133\u0001"+ + "\u0000\u0000\u0000\u0000\u0135\u0001\u0000\u0000\u0000\u0000\u0137\u0001"+ + "\u0000\u0000\u0000\u0000\u0139\u0001\u0000\u0000\u0000\u0000\u013b\u0001"+ + "\u0000\u0000\u0000\u0000\u013d\u0001\u0000\u0000\u0000\u0000\u013f\u0001"+ + "\u0000\u0000\u0000\u0000\u0141\u0001\u0000\u0000\u0000\u0000\u0143\u0001"+ + "\u0000\u0000\u0000\u0000\u0145\u0001\u0000\u0000\u0000\u0000\u0147\u0001"+ + "\u0000\u0000\u0000\u0000\u0149\u0001\u0000\u0000\u0000\u0000\u014b\u0001"+ + "\u0000\u0000\u0000\u0000\u014d\u0001\u0000\u0000\u0000\u0000\u014f\u0001"+ + "\u0000\u0000\u0000\u0000\u0151\u0001\u0000\u0000\u0000\u0000\u0153\u0001"+ + "\u0000\u0000\u0000\u0000\u0155\u0001\u0000\u0000\u0000\u0000\u0157\u0001"+ + "\u0000\u0000\u0000\u0000\u0159\u0001\u0000\u0000\u0000\u0000\u015b\u0001"+ + "\u0000\u0000\u0000\u0000\u015d\u0001\u0000\u0000\u0000\u0000\u015f\u0001"+ + "\u0000\u0000\u0000\u0000\u0161\u0001\u0000\u0000\u0000\u0000\u0163\u0001"+ + "\u0000\u0000\u0000\u0000\u0165\u0001\u0000\u0000\u0000\u0000\u0167\u0001"+ + "\u0000\u0000\u0000\u0000\u0169\u0001\u0000\u0000\u0000\u0000\u016b\u0001"+ + "\u0000\u0000\u0000\u0000\u016d\u0001\u0000\u0000\u0000\u0000\u016f\u0001"+ + "\u0000\u0000\u0000\u0000\u0171\u0001\u0000\u0000\u0000\u0000\u0173\u0001"+ + "\u0000\u0000\u0000\u0000\u0175\u0001\u0000\u0000\u0000\u0000\u0177\u0001"+ + "\u0000\u0000\u0000\u0000\u0179\u0001\u0000\u0000\u0000\u0000\u017b\u0001"+ + "\u0000\u0000\u0000\u0000\u017d\u0001\u0000\u0000\u0000\u0000\u017f\u0001"+ + "\u0000\u0000\u0000\u0000\u0181\u0001\u0000\u0000\u0000\u0000\u0183\u0001"+ + "\u0000\u0000\u0000\u0000\u0185\u0001\u0000\u0000\u0000\u0000\u0187\u0001"+ + "\u0000\u0000\u0000\u0000\u0189\u0001\u0000\u0000\u0000\u0000\u018b\u0001"+ + "\u0000\u0000\u0000\u0000\u018d\u0001\u0000\u0000\u0000\u0000\u018f\u0001"+ + "\u0000\u0000\u0000\u0000\u0191\u0001\u0000\u0000\u0000\u0000\u0193\u0001"+ + "\u0000\u0000\u0000\u0000\u0195\u0001\u0000\u0000\u0000\u0000\u0197\u0001"+ + "\u0000\u0000\u0000\u0000\u0199\u0001\u0000\u0000\u0000\u0000\u019b\u0001"+ + "\u0000\u0000\u0000\u0000\u019d\u0001\u0000\u0000\u0000\u0000\u019f\u0001"+ + "\u0000\u0000\u0000\u0000\u01a1\u0001\u0000\u0000\u0000\u0000\u01a3\u0001"+ + "\u0000\u0000\u0000\u0000\u01a5\u0001\u0000\u0000\u0000\u0000\u01a7\u0001"+ + "\u0000\u0000\u0000\u0000\u01a9\u0001\u0000\u0000\u0000\u0000\u01ab\u0001"+ + "\u0000\u0000\u0000\u0000\u01ad\u0001\u0000\u0000\u0000\u0000\u01af\u0001"+ + "\u0000\u0000\u0000\u0000\u01b1\u0001\u0000\u0000\u0000\u0000\u01b3\u0001"+ + "\u0000\u0000\u0000\u0000\u01b5\u0001\u0000\u0000\u0000\u0000\u01b7\u0001"+ + "\u0000\u0000\u0000\u0000\u01b9\u0001\u0000\u0000\u0000\u0000\u01bb\u0001"+ + "\u0000\u0000\u0000\u0000\u01bd\u0001\u0000\u0000\u0000\u0000\u01bf\u0001"+ + "\u0000\u0000\u0000\u0000\u01c1\u0001\u0000\u0000\u0000\u0000\u01c3\u0001"+ + "\u0000\u0000\u0000\u0000\u01c5\u0001\u0000\u0000\u0000\u0000\u01c7\u0001"+ + "\u0000\u0000\u0000\u0000\u01c9\u0001\u0000\u0000\u0000\u0000\u01cb\u0001"+ + "\u0000\u0000\u0000\u0000\u01cd\u0001\u0000\u0000\u0000\u0000\u01cf\u0001"+ + "\u0000\u0000\u0000\u0000\u01d1\u0001\u0000\u0000\u0000\u0000\u01d3\u0001"+ + "\u0000\u0000\u0000\u0000\u01d5\u0001\u0000\u0000\u0000\u0000\u01d7\u0001"+ + "\u0000\u0000\u0000\u0000\u01d9\u0001\u0000\u0000\u0000\u0000\u01db\u0001"+ + "\u0000\u0000\u0000\u0000\u01dd\u0001\u0000\u0000\u0000\u0000\u01df\u0001"+ + "\u0000\u0000\u0000\u0000\u01e1\u0001\u0000\u0000\u0000\u0000\u01e3\u0001"+ + "\u0000\u0000\u0000\u0000\u01e5\u0001\u0000\u0000\u0000\u0000\u01e7\u0001"+ + "\u0000\u0000\u0000\u0000\u01e9\u0001\u0000\u0000\u0000\u0000\u01eb\u0001"+ + "\u0000\u0000\u0000\u0000\u01ed\u0001\u0000\u0000\u0000\u0000\u01ef\u0001"+ + "\u0000\u0000\u0000\u0000\u01f1\u0001\u0000\u0000\u0000\u0000\u01f3\u0001"+ + "\u0000\u0000\u0000\u0000\u01f5\u0001\u0000\u0000\u0000\u0000\u01f7\u0001"+ + "\u0000\u0000\u0000\u0000\u01f9\u0001\u0000\u0000\u0000\u0000\u01fb\u0001"+ + "\u0000\u0000\u0000\u0000\u01fd\u0001\u0000\u0000\u0000\u0000\u01ff\u0001"+ + "\u0000\u0000\u0000\u0000\u0201\u0001\u0000\u0000\u0000\u0000\u0203\u0001"+ + "\u0000\u0000\u0000\u0000\u0205\u0001\u0000\u0000\u0000\u0000\u0207\u0001"+ + "\u0000\u0000\u0000\u0000\u0209\u0001\u0000\u0000\u0000\u0000\u020b\u0001"+ + "\u0000\u0000\u0000\u0000\u020d\u0001\u0000\u0000\u0000\u0000\u020f\u0001"+ + "\u0000\u0000\u0000\u0000\u0211\u0001\u0000\u0000\u0000\u0000\u0213\u0001"+ + "\u0000\u0000\u0000\u0000\u0215\u0001\u0000\u0000\u0000\u0000\u0217\u0001"+ + "\u0000\u0000\u0000\u0000\u0219\u0001\u0000\u0000\u0000\u0000\u021b\u0001"+ + "\u0000\u0000\u0000\u0000\u021d\u0001\u0000\u0000\u0000\u0000\u021f\u0001"+ + "\u0000\u0000\u0000\u0000\u0221\u0001\u0000\u0000\u0000\u0000\u0223\u0001"+ + "\u0000\u0000\u0000\u0000\u0225\u0001\u0000\u0000\u0000\u0000\u0227\u0001"+ + "\u0000\u0000\u0000\u0000\u0229\u0001\u0000\u0000\u0000\u0000\u022b\u0001"+ + "\u0000\u0000\u0000\u0000\u022d\u0001\u0000\u0000\u0000\u0000\u022f\u0001"+ + "\u0000\u0000\u0000\u0000\u0231\u0001\u0000\u0000\u0000\u0000\u0233\u0001"+ + "\u0000\u0000\u0000\u0000\u0235\u0001\u0000\u0000\u0000\u0000\u0237\u0001"+ + "\u0000\u0000\u0000\u0000\u0239\u0001\u0000\u0000\u0000\u0000\u023b\u0001"+ + "\u0000\u0000\u0000\u0000\u023d\u0001\u0000\u0000\u0000\u0000\u023f\u0001"+ + "\u0000\u0000\u0000\u0000\u0241\u0001\u0000\u0000\u0000\u0000\u0243\u0001"+ + "\u0000\u0000\u0000\u0000\u0245\u0001\u0000\u0000\u0000\u0000\u0247\u0001"+ + "\u0000\u0000\u0000\u0000\u0249\u0001\u0000\u0000\u0000\u0000\u024b\u0001"+ + "\u0000\u0000\u0000\u0000\u024d\u0001\u0000\u0000\u0000\u0000\u024f\u0001"+ + "\u0000\u0000\u0000\u0000\u0251\u0001\u0000\u0000\u0000\u0000\u0253\u0001"+ + "\u0000\u0000\u0000\u0000\u0255\u0001\u0000\u0000\u0000\u0000\u0257\u0001"+ + "\u0000\u0000\u0000\u0000\u0259\u0001\u0000\u0000\u0000\u0000\u025b\u0001"+ + "\u0000\u0000\u0000\u0000\u025d\u0001\u0000\u0000\u0000\u0000\u025f\u0001"+ + "\u0000\u0000\u0000\u0000\u0261\u0001\u0000\u0000\u0000\u0000\u0265\u0001"+ + "\u0000\u0000\u0000\u0000\u0267\u0001\u0000\u0000\u0000\u0000\u0269\u0001"+ + "\u0000\u0000\u0000\u0001\u026b\u0001\u0000\u0000\u0000\u0003\u026d\u0001"+ + "\u0000\u0000\u0000\u0005\u026f\u0001\u0000\u0000\u0000\u0007\u0271\u0001"+ + "\u0000\u0000\u0000\t\u0273\u0001\u0000\u0000\u0000\u000b\u0275\u0001\u0000"+ + "\u0000\u0000\r\u0277\u0001\u0000\u0000\u0000\u000f\u0279\u0001\u0000\u0000"+ + "\u0000\u0011\u027b\u0001\u0000\u0000\u0000\u0013\u027d\u0001\u0000\u0000"+ + "\u0000\u0015\u027f\u0001\u0000\u0000\u0000\u0017\u0281\u0001\u0000\u0000"+ + "\u0000\u0019\u0283\u0001\u0000\u0000\u0000\u001b\u0285\u0001\u0000\u0000"+ + "\u0000\u001d\u0288\u0001\u0000\u0000\u0000\u001f\u028a\u0001\u0000\u0000"+ + "\u0000!\u028d\u0001\u0000\u0000\u0000#\u028f\u0001\u0000\u0000\u0000%"+ + "\u0292\u0001\u0000\u0000\u0000\'\u0296\u0001\u0000\u0000\u0000)\u029a"+ + "\u0001\u0000\u0000\u0000+\u029d\u0001\u0000\u0000\u0000-\u02a0\u0001\u0000"+ + "\u0000\u0000/\u02a3\u0001\u0000\u0000\u00001\u02a6\u0001\u0000\u0000\u0000"+ + "3\u02a8\u0001\u0000\u0000\u00005\u02aa\u0001\u0000\u0000\u00007\u02ac"+ + "\u0001\u0000\u0000\u00009\u02ae\u0001\u0000\u0000\u0000;\u02ea\u0001\u0000"+ + "\u0000\u0000=\u030a\u0001\u0000\u0000\u0000?\u030c\u0001\u0000\u0000\u0000"+ + "A\u0311\u0001\u0000\u0000\u0000C\u0342\u0001\u0000\u0000\u0000E\u0344"+ + "\u0001\u0000\u0000\u0000G\u0347\u0001\u0000\u0000\u0000I\u034b\u0001\u0000"+ + "\u0000\u0000K\u0352\u0001\u0000\u0000\u0000M\u035a\u0001\u0000\u0000\u0000"+ + "O\u0363\u0001\u0000\u0000\u0000Q\u036a\u0001\u0000\u0000\u0000S\u0372"+ + "\u0001\u0000\u0000\u0000U\u037c\u0001\u0000\u0000\u0000W\u0386\u0001\u0000"+ + "\u0000\u0000Y\u038d\u0001\u0000\u0000\u0000[\u0393\u0001\u0000\u0000\u0000"+ + "]\u039a\u0001\u0000\u0000\u0000_\u03a8\u0001\u0000\u0000\u0000a\u03ac"+ + "\u0001\u0000\u0000\u0000c\u03af\u0001\u0000\u0000\u0000e\u03b3\u0001\u0000"+ + "\u0000\u0000g\u03be\u0001\u0000\u0000\u0000i\u03c7\u0001\u0000\u0000\u0000"+ + "k\u03c9\u0001\u0000\u0000\u0000m\u03cb\u0001\u0000\u0000\u0000o\u03ce"+ + "\u0001\u0000\u0000\u0000q\u03d6\u0001\u0000\u0000\u0000s\u03de\u0001\u0000"+ + "\u0000\u0000u\u03e6\u0001\u0000\u0000\u0000w\u03ee\u0001\u0000\u0000\u0000"+ + "y\u03f6\u0001\u0000\u0000\u0000{\u03fe\u0001\u0000\u0000\u0000}\u0406"+ + "\u0001\u0000\u0000\u0000\u007f\u040e\u0001\u0000\u0000\u0000\u0081\u0416"+ + "\u0001\u0000\u0000\u0000\u0083\u041e\u0001\u0000\u0000\u0000\u0085\u0426"+ + "\u0001\u0000\u0000\u0000\u0087\u042e\u0001\u0000\u0000\u0000\u0089\u0432"+ + "\u0001\u0000\u0000\u0000\u008b\u043b\u0001\u0000\u0000\u0000\u008d\u043f"+ + "\u0001\u0000\u0000\u0000\u008f\u0444\u0001\u0000\u0000\u0000\u0091\u0449"+ + "\u0001\u0000\u0000\u0000\u0093\u044f\u0001\u0000\u0000\u0000\u0095\u0453"+ + "\u0001\u0000\u0000\u0000\u0097\u0457\u0001\u0000\u0000\u0000\u0099\u045b"+ + "\u0001\u0000\u0000\u0000\u009b\u0462\u0001\u0000\u0000\u0000\u009d\u0469"+ + "\u0001\u0000\u0000\u0000\u009f\u0471\u0001\u0000\u0000\u0000\u00a1\u0479"+ + "\u0001\u0000\u0000\u0000\u00a3\u047d\u0001\u0000\u0000\u0000\u00a5\u0482"+ + "\u0001\u0000\u0000\u0000\u00a7\u0486\u0001\u0000\u0000\u0000\u00a9\u048b"+ + "\u0001\u0000\u0000\u0000\u00ab\u048f\u0001\u0000\u0000\u0000\u00ad\u0494"+ + "\u0001\u0000\u0000\u0000\u00af\u0498\u0001\u0000\u0000\u0000\u00b1\u049d"+ + "\u0001\u0000\u0000\u0000\u00b3\u04a1\u0001\u0000\u0000\u0000\u00b5\u04a6"+ + "\u0001\u0000\u0000\u0000\u00b7\u04aa\u0001\u0000\u0000\u0000\u00b9\u04af"+ + "\u0001\u0000\u0000\u0000\u00bb\u04b4\u0001\u0000\u0000\u0000\u00bd\u04ba"+ + "\u0001\u0000\u0000\u0000\u00bf\u04bf\u0001\u0000\u0000\u0000\u00c1\u04c5"+ + "\u0001\u0000\u0000\u0000\u00c3\u04ca\u0001\u0000\u0000\u0000\u00c5\u04d0"+ + "\u0001\u0000\u0000\u0000\u00c7\u04d5\u0001\u0000\u0000\u0000\u00c9\u04db"+ + "\u0001\u0000\u0000\u0000\u00cb\u04e1\u0001\u0000\u0000\u0000\u00cd\u04e7"+ + "\u0001\u0000\u0000\u0000\u00cf\u04f1\u0001\u0000\u0000\u0000\u00d1\u04f9"+ + "\u0001\u0000\u0000\u0000\u00d3\u0501\u0001\u0000\u0000\u0000\u00d5\u0507"+ + "\u0001\u0000\u0000\u0000\u00d7\u050c\u0001\u0000\u0000\u0000\u00d9\u0510"+ + "\u0001\u0000\u0000\u0000\u00db\u0517\u0001\u0000\u0000\u0000\u00dd\u051c"+ + "\u0001\u0000\u0000\u0000\u00df\u0528\u0001\u0000\u0000\u0000\u00e1\u052d"+ + "\u0001\u0000\u0000\u0000\u00e3\u0538\u0001\u0000\u0000\u0000\u00e5\u053e"+ + "\u0001\u0000\u0000\u0000\u00e7\u0542\u0001\u0000\u0000\u0000\u00e9\u0545"+ + "\u0001\u0000\u0000\u0000\u00eb\u0549\u0001\u0000\u0000\u0000\u00ed\u054f"+ + "\u0001\u0000\u0000\u0000\u00ef\u055b\u0001\u0000\u0000\u0000\u00f1\u0563"+ + "\u0001\u0000\u0000\u0000\u00f3\u056a\u0001\u0000\u0000\u0000\u00f5\u056e"+ + "\u0001\u0000\u0000\u0000\u00f7\u0573\u0001\u0000\u0000\u0000\u00f9\u057b"+ + "\u0001\u0000\u0000\u0000\u00fb\u0583\u0001\u0000\u0000\u0000\u00fd\u058b"+ + "\u0001\u0000\u0000\u0000\u00ff\u0593\u0001\u0000\u0000\u0000\u0101\u0599"+ + "\u0001\u0000\u0000\u0000\u0103\u05a0\u0001\u0000\u0000\u0000\u0105\u05a6"+ + "\u0001\u0000\u0000\u0000\u0107\u05b1\u0001\u0000\u0000\u0000\u0109\u05ba"+ + "\u0001\u0000\u0000\u0000\u010b\u05c3\u0001\u0000\u0000\u0000\u010d\u05cb"+ + "\u0001\u0000\u0000\u0000\u010f\u05d2\u0001\u0000\u0000\u0000\u0111\u05d8"+ + "\u0001\u0000\u0000\u0000\u0113\u05e2\u0001\u0000\u0000\u0000\u0115\u05e7"+ + "\u0001\u0000\u0000\u0000\u0117\u05f0\u0001\u0000\u0000\u0000\u0119\u05fa"+ + "\u0001\u0000\u0000\u0000\u011b\u0600\u0001\u0000\u0000\u0000\u011d\u0607"+ + "\u0001\u0000\u0000\u0000\u011f\u060f\u0001\u0000\u0000\u0000\u0121\u0618"+ + "\u0001\u0000\u0000\u0000\u0123\u0627\u0001\u0000\u0000\u0000\u0125\u0629"+ + "\u0001\u0000\u0000\u0000\u0127\u062e\u0001\u0000\u0000\u0000\u0129\u0634"+ + "\u0001\u0000\u0000\u0000\u012b\u0639\u0001\u0000\u0000\u0000\u012d\u0641"+ + "\u0001\u0000\u0000\u0000\u012f\u065a\u0001\u0000\u0000\u0000\u0131\u065c"+ + "\u0001\u0000\u0000\u0000\u0133\u0662\u0001\u0000\u0000\u0000\u0135\u0667"+ + "\u0001\u0000\u0000\u0000\u0137\u066d\u0001\u0000\u0000\u0000\u0139\u0672"+ + "\u0001\u0000\u0000\u0000\u013b\u0682\u0001\u0000\u0000\u0000\u013d\u0684"+ + "\u0001\u0000\u0000\u0000\u013f\u0688\u0001\u0000\u0000\u0000\u0141\u068f"+ + "\u0001\u0000\u0000\u0000\u0143\u0697\u0001\u0000\u0000\u0000\u0145\u069c"+ + "\u0001\u0000\u0000\u0000\u0147\u06a2\u0001\u0000\u0000\u0000\u0149\u06a6"+ + "\u0001\u0000\u0000\u0000\u014b\u06ad\u0001\u0000\u0000\u0000\u014d\u06b8"+ + "\u0001\u0000\u0000\u0000\u014f\u06ba\u0001\u0000\u0000\u0000\u0151\u06bf"+ + "\u0001\u0000\u0000\u0000\u0153\u06d0\u0001\u0000\u0000\u0000\u0155\u06d2"+ + "\u0001\u0000\u0000\u0000\u0157\u06d8\u0001\u0000\u0000\u0000\u0159\u06e2"+ + "\u0001\u0000\u0000\u0000\u015b\u06ec\u0001\u0000\u0000\u0000\u015d\u06f1"+ + "\u0001\u0000\u0000\u0000\u015f\u06f6\u0001\u0000\u0000\u0000\u0161\u06fa"+ + "\u0001\u0000\u0000\u0000\u0163\u0700\u0001\u0000\u0000\u0000\u0165\u0705"+ + "\u0001\u0000\u0000\u0000\u0167\u070b\u0001\u0000\u0000\u0000\u0169\u070f"+ + "\u0001\u0000\u0000\u0000\u016b\u0714\u0001\u0000\u0000\u0000\u016d\u071b"+ + "\u0001\u0000\u0000\u0000\u016f\u0722\u0001\u0000\u0000\u0000\u0171\u072a"+ + "\u0001\u0000\u0000\u0000\u0173\u0732\u0001\u0000\u0000\u0000\u0175\u0737"+ + "\u0001\u0000\u0000\u0000\u0177\u073f\u0001\u0000\u0000\u0000\u0179\u0745"+ + "\u0001\u0000\u0000\u0000\u017b\u074d\u0001\u0000\u0000\u0000\u017d\u0759"+ + "\u0001\u0000\u0000\u0000\u017f\u0761\u0001\u0000\u0000\u0000\u0181\u0769"+ + "\u0001\u0000\u0000\u0000\u0183\u076d\u0001\u0000\u0000\u0000\u0185\u0774"+ + "\u0001\u0000\u0000\u0000\u0187\u0778\u0001\u0000\u0000\u0000\u0189\u0781"+ + "\u0001\u0000\u0000\u0000\u018b\u0786\u0001\u0000\u0000\u0000\u018d\u078c"+ + "\u0001\u0000\u0000\u0000\u018f\u07aa\u0001\u0000\u0000\u0000\u0191\u07c6"+ + "\u0001\u0000\u0000\u0000\u0193\u07c8\u0001\u0000\u0000\u0000\u0195\u07d0"+ + "\u0001\u0000\u0000\u0000\u0197\u07da\u0001\u0000\u0000\u0000\u0199\u07e2"+ + "\u0001\u0000\u0000\u0000\u019b\u07ea\u0001\u0000\u0000\u0000\u019d\u07f0"+ + "\u0001\u0000\u0000\u0000\u019f\u07f8\u0001\u0000\u0000\u0000\u01a1\u07fc"+ + "\u0001\u0000\u0000\u0000\u01a3\u0802\u0001\u0000\u0000\u0000\u01a5\u0815"+ + "\u0001\u0000\u0000\u0000\u01a7\u0824\u0001\u0000\u0000\u0000\u01a9\u0837"+ + "\u0001\u0000\u0000\u0000\u01ab\u0839\u0001\u0000\u0000\u0000\u01ad\u0846"+ + "\u0001\u0000\u0000\u0000\u01af\u0854\u0001\u0000\u0000\u0000\u01b1\u085f"+ + "\u0001\u0000\u0000\u0000\u01b3\u0872\u0001\u0000\u0000\u0000\u01b5\u0883"+ + "\u0001\u0000\u0000\u0000\u01b7\u0899\u0001\u0000\u0000\u0000\u01b9\u08ad"+ + "\u0001\u0000\u0000\u0000\u01bb\u08c0\u0001\u0000\u0000\u0000\u01bd\u08d1"+ + "\u0001\u0000\u0000\u0000\u01bf\u08e6\u0001\u0000\u0000\u0000\u01c1\u08fb"+ + "\u0001\u0000\u0000\u0000\u01c3\u0908\u0001\u0000\u0000\u0000\u01c5\u0913"+ + "\u0001\u0000\u0000\u0000\u01c7\u0915\u0001\u0000\u0000\u0000\u01c9\u091c"+ + "\u0001\u0000\u0000\u0000\u01cb\u0939\u0001\u0000\u0000\u0000\u01cd\u094c"+ + "\u0001\u0000\u0000\u0000\u01cf\u0964\u0001\u0000\u0000\u0000\u01d1\u097d"+ + "\u0001\u0000\u0000\u0000\u01d3\u0990\u0001\u0000\u0000\u0000\u01d5\u09a9"+ + "\u0001\u0000\u0000\u0000\u01d7\u09c4\u0001\u0000\u0000\u0000\u01d9\u09d9"+ + "\u0001\u0000\u0000\u0000\u01db\u09e6\u0001\u0000\u0000\u0000\u01dd\u09f1"+ + "\u0001\u0000\u0000\u0000\u01df\u09f3\u0001\u0000\u0000\u0000\u01e1\u09fb"+ + "\u0001\u0000\u0000\u0000\u01e3\u09ff\u0001\u0000\u0000\u0000\u01e5\u0a04"+ + "\u0001\u0000\u0000\u0000\u01e7\u0a09\u0001\u0000\u0000\u0000\u01e9\u0a0c"+ + "\u0001\u0000\u0000\u0000\u01eb\u0a0f\u0001\u0000\u0000\u0000\u01ed\u0a14"+ + "\u0001\u0000\u0000\u0000\u01ef\u0a19\u0001\u0000\u0000\u0000\u01f1\u0a1d"+ + "\u0001\u0000\u0000\u0000\u01f3\u0a22\u0001\u0000\u0000\u0000\u01f5\u0a26"+ + "\u0001\u0000\u0000\u0000\u01f7\u0a2b\u0001\u0000\u0000\u0000\u01f9\u0a30"+ + "\u0001\u0000\u0000\u0000\u01fb\u0a34\u0001\u0000\u0000\u0000\u01fd\u0a37"+ + "\u0001\u0000\u0000\u0000\u01ff\u0a3b\u0001\u0000\u0000\u0000\u0201\u0a3f"+ + "\u0001\u0000\u0000\u0000\u0203\u0a49\u0001\u0000\u0000\u0000\u0205\u0a53"+ + "\u0001\u0000\u0000\u0000\u0207\u0a5e\u0001\u0000\u0000\u0000\u0209\u0a69"+ + "\u0001\u0000\u0000\u0000\u020b\u0a76\u0001\u0000\u0000\u0000\u020d\u0a86"+ + "\u0001\u0000\u0000\u0000\u020f\u0a93\u0001\u0000\u0000\u0000\u0211\u0aa3"+ + "\u0001\u0000\u0000\u0000\u0213\u0aa9\u0001\u0000\u0000\u0000\u0215\u0ac4"+ + "\u0001\u0000\u0000\u0000\u0217\u0ac6\u0001\u0000\u0000\u0000\u0219\u0acb"+ + "\u0001\u0000\u0000\u0000\u021b\u0acf\u0001\u0000\u0000\u0000\u021d\u0ad4"+ + "\u0001\u0000\u0000\u0000\u021f\u0adb\u0001\u0000\u0000\u0000\u0221\u0ae2"+ + "\u0001\u0000\u0000\u0000\u0223\u0aea\u0001\u0000\u0000\u0000\u0225\u0af3"+ + "\u0001\u0000\u0000\u0000\u0227\u0afe\u0001\u0000\u0000\u0000\u0229\u0b17"+ + "\u0001\u0000\u0000\u0000\u022b\u0b25\u0001\u0000\u0000\u0000\u022d\u0b27"+ + "\u0001\u0000\u0000\u0000\u022f\u0b2f\u0001\u0000\u0000\u0000\u0231\u0b3b"+ + "\u0001\u0000\u0000\u0000\u0233\u0b41\u0001\u0000\u0000\u0000\u0235\u0b46"+ + "\u0001\u0000\u0000\u0000\u0237\u0b50\u0001\u0000\u0000\u0000\u0239\u0b5b"+ + "\u0001\u0000\u0000\u0000\u023b\u0b64\u0001\u0000\u0000\u0000\u023d\u0b72"+ + "\u0001\u0000\u0000\u0000\u023f\u0b85\u0001\u0000\u0000\u0000\u0241\u0b91"+ + "\u0001\u0000\u0000\u0000\u0243\u0b9b\u0001\u0000\u0000\u0000\u0245\u0ba0"+ + "\u0001\u0000\u0000\u0000\u0247\u0bac\u0001\u0000\u0000\u0000\u0249\u0bb6"+ + "\u0001\u0000\u0000\u0000\u024b\u0bd9\u0001\u0000\u0000\u0000\u024d\u0bdb"+ + "\u0001\u0000\u0000\u0000\u024f\u0be4\u0001\u0000\u0000\u0000\u0251\u0bee"+ + "\u0001\u0000\u0000\u0000\u0253\u0bf6\u0001\u0000\u0000\u0000\u0255\u0bff"+ + "\u0001\u0000\u0000\u0000\u0257\u0c0a\u0001\u0000\u0000\u0000\u0259\u0c15"+ + "\u0001\u0000\u0000\u0000\u025b\u0c3b\u0001\u0000\u0000\u0000\u025d\u0c52"+ + "\u0001\u0000\u0000\u0000\u025f\u0c6e\u0001\u0000\u0000\u0000\u0261\u0c72"+ + "\u0001\u0000\u0000\u0000\u0263\u0c7b\u0001\u0000\u0000\u0000\u0265\u0c7e"+ + "\u0001\u0000\u0000\u0000\u0267\u0c84\u0001\u0000\u0000\u0000\u0269\u0c92"+ + "\u0001\u0000\u0000\u0000\u026b\u026c\u0005.\u0000\u0000\u026c\u0002\u0001"+ + "\u0000\u0000\u0000\u026d\u026e\u0005(\u0000\u0000\u026e\u0004\u0001\u0000"+ + "\u0000\u0000\u026f\u0270\u0005)\u0000\u0000\u0270\u0006\u0001\u0000\u0000"+ + "\u0000\u0271\u0272\u0005,\u0000\u0000\u0272\b\u0001\u0000\u0000\u0000"+ + "\u0273\u0274\u0005[\u0000\u0000\u0274\n\u0001\u0000\u0000\u0000\u0275"+ + "\u0276\u0005]\u0000\u0000\u0276\f\u0001\u0000\u0000\u0000\u0277\u0278"+ + "\u0005!\u0000\u0000\u0278\u000e\u0001\u0000\u0000\u0000\u0279\u027a\u0005"+ + "%\u0000\u0000\u027a\u0010\u0001\u0000\u0000\u0000\u027b\u027c\u0005*\u0000"+ + "\u0000\u027c\u0012\u0001\u0000\u0000\u0000\u027d\u027e\u0005/\u0000\u0000"+ + "\u027e\u0014\u0001\u0000\u0000\u0000\u027f\u0280\u0005+\u0000\u0000\u0280"+ + "\u0016\u0001\u0000\u0000\u0000\u0281\u0282\u0005&\u0000\u0000\u0282\u0018"+ + "\u0001\u0000\u0000\u0000\u0283\u0284\u0005>\u0000\u0000\u0284\u001a\u0001"+ + "\u0000\u0000\u0000\u0285\u0286\u0005>\u0000\u0000\u0286\u0287\u0005=\u0000"+ + "\u0000\u0287\u001c\u0001\u0000\u0000\u0000\u0288\u0289\u0005<\u0000\u0000"+ + "\u0289\u001e\u0001\u0000\u0000\u0000\u028a\u028b\u0005<\u0000\u0000\u028b"+ + "\u028c\u0005=\u0000\u0000\u028c \u0001\u0000\u0000\u0000\u028d\u028e\u0005"+ + "=\u0000\u0000\u028e\"\u0001\u0000\u0000\u0000\u028f\u0290\u0005=\u0000"+ + "\u0000\u0290\u0291\u0005=\u0000\u0000\u0291$\u0001\u0000\u0000\u0000\u0292"+ + "\u0293\u0005=\u0000\u0000\u0293\u0294\u0005=\u0000\u0000\u0294\u0295\u0005"+ + "=\u0000\u0000\u0295&\u0001\u0000\u0000\u0000\u0296\u0297\u0005!\u0000"+ + "\u0000\u0297\u0298\u0005=\u0000\u0000\u0298\u0299\u0005=\u0000\u0000\u0299"+ + "(\u0001\u0000\u0000\u0000\u029a\u029b\u0005!\u0000\u0000\u029b\u029c\u0005"+ + "=\u0000\u0000\u029c*\u0001\u0000\u0000\u0000\u029d\u029e\u0005<\u0000"+ + "\u0000\u029e\u029f\u0005>\u0000\u0000\u029f,\u0001\u0000\u0000\u0000\u02a0"+ + "\u02a1\u0005&\u0000\u0000\u02a1\u02a2\u0005&\u0000\u0000\u02a2.\u0001"+ + "\u0000\u0000\u0000\u02a3\u02a4\u0005|\u0000\u0000\u02a4\u02a5\u0005|\u0000"+ + "\u0000\u02a50\u0001\u0000\u0000\u0000\u02a6\u02a7\u0005?\u0000\u0000\u02a7"+ + "2\u0001\u0000\u0000\u0000\u02a8\u02a9\u0005:\u0000\u0000\u02a94\u0001"+ + "\u0000\u0000\u0000\u02aa\u02ab\u0005{\u0000\u0000\u02ab6\u0001\u0000\u0000"+ + "\u0000\u02ac\u02ad\u0005}\u0000\u0000\u02ad8\u0001\u0000\u0000\u0000\u02ae"+ + "\u02af\u0005-\u0000\u0000\u02af:\u0001\u0000\u0000\u0000\u02b0\u02b7\u0005"+ + "0\u0000\u0000\u02b1\u02b3\u0005.\u0000\u0000\u02b2\u02b4\u0007\u0000\u0000"+ + "\u0000\u02b3\u02b2\u0001\u0000\u0000\u0000\u02b4\u02b5\u0001\u0000\u0000"+ + "\u0000\u02b5\u02b3\u0001\u0000\u0000\u0000\u02b5\u02b6\u0001\u0000\u0000"+ + "\u0000\u02b6\u02b8\u0001\u0000\u0000\u0000\u02b7\u02b1\u0001\u0000\u0000"+ + "\u0000\u02b7\u02b8\u0001\u0000\u0000\u0000\u02b8\u02eb\u0001\u0000\u0000"+ + "\u0000\u02b9\u02bd\u0007\u0001\u0000\u0000\u02ba\u02bc\u0007\u0000\u0000"+ + "\u0000\u02bb\u02ba\u0001\u0000\u0000\u0000\u02bc\u02bf\u0001\u0000\u0000"+ + "\u0000\u02bd\u02bb\u0001\u0000\u0000\u0000\u02bd\u02be\u0001\u0000\u0000"+ + "\u0000\u02be\u02c6\u0001\u0000\u0000\u0000\u02bf\u02bd\u0001\u0000\u0000"+ + "\u0000\u02c0\u02c2\u0005.\u0000\u0000\u02c1\u02c3\u0007\u0000\u0000\u0000"+ + "\u02c2\u02c1\u0001\u0000\u0000\u0000\u02c3\u02c4\u0001\u0000\u0000\u0000"+ + "\u02c4\u02c2\u0001\u0000\u0000\u0000\u02c4\u02c5\u0001\u0000\u0000\u0000"+ + "\u02c5\u02c7\u0001\u0000\u0000\u0000\u02c6\u02c0\u0001\u0000\u0000\u0000"+ + "\u02c6\u02c7\u0001\u0000\u0000\u0000\u02c7\u02eb\u0001\u0000\u0000\u0000"+ + "\u02c8\u02cf\u00050\u0000\u0000\u02c9\u02cb\u0005.\u0000\u0000\u02ca\u02cc"+ + "\u0007\u0000\u0000\u0000\u02cb\u02ca\u0001\u0000\u0000\u0000\u02cc\u02cd"+ + "\u0001\u0000\u0000\u0000\u02cd\u02cb\u0001\u0000\u0000\u0000\u02cd\u02ce"+ + "\u0001\u0000\u0000\u0000\u02ce\u02d0\u0001\u0000\u0000\u0000\u02cf\u02c9"+ + "\u0001\u0000\u0000\u0000\u02cf\u02d0\u0001\u0000\u0000\u0000\u02d0\u02e1"+ + "\u0001\u0000\u0000\u0000\u02d1\u02d5\u0007\u0001\u0000\u0000\u02d2\u02d4"+ + "\u0007\u0000\u0000\u0000\u02d3\u02d2\u0001\u0000\u0000\u0000\u02d4\u02d7"+ + "\u0001\u0000\u0000\u0000\u02d5\u02d3\u0001\u0000\u0000\u0000\u02d5\u02d6"+ + "\u0001\u0000\u0000\u0000\u02d6\u02de\u0001\u0000\u0000\u0000\u02d7\u02d5"+ + "\u0001\u0000\u0000\u0000\u02d8\u02da\u0005.\u0000\u0000\u02d9\u02db\u0007"+ + "\u0000\u0000\u0000\u02da\u02d9\u0001\u0000\u0000\u0000\u02db\u02dc\u0001"+ + "\u0000\u0000\u0000\u02dc\u02da\u0001\u0000\u0000\u0000\u02dc\u02dd\u0001"+ + "\u0000\u0000\u0000\u02dd\u02df\u0001\u0000\u0000\u0000\u02de\u02d8\u0001"+ + "\u0000\u0000\u0000\u02de\u02df\u0001\u0000\u0000\u0000\u02df\u02e1\u0001"+ + "\u0000\u0000\u0000\u02e0\u02c8\u0001\u0000\u0000\u0000\u02e0\u02d1\u0001"+ + "\u0000\u0000\u0000\u02e1\u02e2\u0001\u0000\u0000\u0000\u02e2\u02e4\u0005"+ + "E\u0000\u0000\u02e3\u02e5\u0007\u0002\u0000\u0000\u02e4\u02e3\u0001\u0000"+ + "\u0000\u0000\u02e4\u02e5\u0001\u0000\u0000\u0000\u02e5\u02e6\u0001\u0000"+ + "\u0000\u0000\u02e6\u02e8\u0007\u0000\u0000\u0000\u02e7\u02e9\u0007\u0000"+ + "\u0000\u0000\u02e8\u02e7\u0001\u0000\u0000\u0000\u02e8\u02e9\u0001\u0000"+ + "\u0000\u0000\u02e9\u02eb\u0001\u0000\u0000\u0000\u02ea\u02b0\u0001\u0000"+ + "\u0000\u0000\u02ea\u02b9\u0001\u0000\u0000\u0000\u02ea\u02e0\u0001\u0000"+ + "\u0000\u0000\u02eb<\u0001\u0000\u0000\u0000\u02ec\u02f2\u0005\'\u0000"+ + "\u0000\u02ed\u02f1\b\u0003\u0000\u0000\u02ee\u02ef\u0005\\\u0000\u0000"+ + "\u02ef\u02f1\u0005\'\u0000\u0000\u02f0\u02ed\u0001\u0000\u0000\u0000\u02f0"+ + "\u02ee\u0001\u0000\u0000\u0000\u02f1\u02f4\u0001\u0000\u0000\u0000\u02f2"+ + "\u02f0\u0001\u0000\u0000\u0000\u02f2\u02f3\u0001\u0000\u0000\u0000\u02f3"+ + "\u02f5\u0001\u0000\u0000\u0000\u02f4\u02f2\u0001\u0000\u0000\u0000\u02f5"+ + "\u030b\u0005\'\u0000\u0000\u02f6\u02fc\u0005\"\u0000\u0000\u02f7\u02fb"+ + "\b\u0004\u0000\u0000\u02f8\u02f9\u0005\\\u0000\u0000\u02f9\u02fb\u0005"+ + "\"\u0000\u0000\u02fa\u02f7\u0001\u0000\u0000\u0000\u02fa\u02f8\u0001\u0000"+ + "\u0000\u0000\u02fb\u02fe\u0001\u0000\u0000\u0000\u02fc\u02fa\u0001\u0000"+ + "\u0000\u0000\u02fc\u02fd\u0001\u0000\u0000\u0000\u02fd\u02ff\u0001\u0000"+ + "\u0000\u0000\u02fe\u02fc\u0001\u0000\u0000\u0000\u02ff\u030b\u0005\"\u0000"+ + "\u0000\u0300\u0306\u0005`\u0000\u0000\u0301\u0305\b\u0005\u0000\u0000"+ + "\u0302\u0303\u0005\\\u0000\u0000\u0303\u0305\u0005`\u0000\u0000\u0304"+ + "\u0301\u0001\u0000\u0000\u0000\u0304\u0302\u0001\u0000\u0000\u0000\u0305"+ + "\u0308\u0001\u0000\u0000\u0000\u0306\u0304\u0001\u0000\u0000\u0000\u0306"+ + "\u0307\u0001\u0000\u0000\u0000\u0307\u0309\u0001\u0000\u0000\u0000\u0308"+ + "\u0306\u0001\u0000\u0000\u0000\u0309\u030b\u0005`\u0000\u0000\u030a\u02ec"+ + "\u0001\u0000\u0000\u0000\u030a\u02f6\u0001\u0000\u0000\u0000\u030a\u0300"+ + "\u0001\u0000\u0000\u0000\u030b>\u0001\u0000\u0000\u0000\u030c\u030d\u0005"+ + "N\u0000\u0000\u030d\u030e\u0005U\u0000\u0000\u030e\u030f\u0005L\u0000"+ + "\u0000\u030f\u0310\u0005L\u0000\u0000\u0310@\u0001\u0000\u0000\u0000\u0311"+ + "\u0312\u0005E\u0000\u0000\u0312\u0313\u0005R\u0000\u0000\u0313\u0314\u0005"+ + "R\u0000\u0000\u0314\u0315\u0005O\u0000\u0000\u0315\u0316\u0005R\u0000"+ + "\u0000\u0316B\u0001\u0000\u0000\u0000\u0317\u0343\u0005M\u0000\u0000\u0318"+ + "\u0319\u0005K\u0000\u0000\u0319\u0343\u0005M\u0000\u0000\u031a\u031b\u0005"+ + "D\u0000\u0000\u031b\u0343\u0005M\u0000\u0000\u031c\u031d\u0005C\u0000"+ + "\u0000\u031d\u0343\u0005M\u0000\u0000\u031e\u031f\u0005M\u0000\u0000\u031f"+ + "\u0343\u0005M\u0000\u0000\u0320\u0321\u0005M\u0000\u0000\u0321\u0343\u0005"+ + "2\u0000\u0000\u0322\u0323\u0005K\u0000\u0000\u0323\u0324\u0005M\u0000"+ + "\u0000\u0324\u0343\u00052\u0000\u0000\u0325\u0326\u0005D\u0000\u0000\u0326"+ + "\u0327\u0005M\u0000\u0000\u0327\u0343\u00052\u0000\u0000\u0328\u0329\u0005"+ + "C\u0000\u0000\u0329\u032a\u0005M\u0000\u0000\u032a\u0343\u00052\u0000"+ + "\u0000\u032b\u032c\u0005M\u0000\u0000\u032c\u032d\u0005M\u0000\u0000\u032d"+ + "\u0343\u00052\u0000\u0000\u032e\u032f\u0005M\u0000\u0000\u032f\u0343\u0005"+ + "3\u0000\u0000\u0330\u0331\u0005K\u0000\u0000\u0331\u0332\u0005M\u0000"+ + "\u0000\u0332\u0343\u00053\u0000\u0000\u0333\u0334\u0005D\u0000\u0000\u0334"+ + "\u0335\u0005M\u0000\u0000\u0335\u0343\u00053\u0000\u0000\u0336\u0337\u0005"+ + "C\u0000\u0000\u0337\u0338\u0005M\u0000\u0000\u0338\u0343\u00053\u0000"+ + "\u0000\u0339\u033a\u0005M\u0000\u0000\u033a\u033b\u0005M\u0000\u0000\u033b"+ + "\u0343\u00053\u0000\u0000\u033c\u0343\u0005L\u0000\u0000\u033d\u033e\u0005"+ + "M\u0000\u0000\u033e\u0343\u0005L\u0000\u0000\u033f\u0343\u0005G\u0000"+ + "\u0000\u0340\u0341\u0005K\u0000\u0000\u0341\u0343\u0005G\u0000\u0000\u0342"+ + "\u0317\u0001\u0000\u0000\u0000\u0342\u0318\u0001\u0000\u0000\u0000\u0342"+ + "\u031a\u0001\u0000\u0000\u0000\u0342\u031c\u0001\u0000\u0000\u0000\u0342"+ + "\u031e\u0001\u0000\u0000\u0000\u0342\u0320\u0001\u0000\u0000\u0000\u0342"+ + "\u0322\u0001\u0000\u0000\u0000\u0342\u0325\u0001\u0000\u0000\u0000\u0342"+ + "\u0328\u0001\u0000\u0000\u0000\u0342\u032b\u0001\u0000\u0000\u0000\u0342"+ + "\u032e\u0001\u0000\u0000\u0000\u0342\u0330\u0001\u0000\u0000\u0000\u0342"+ + "\u0333\u0001\u0000\u0000\u0000\u0342\u0336\u0001\u0000\u0000\u0000\u0342"+ + "\u0339\u0001\u0000\u0000\u0000\u0342\u033c\u0001\u0000\u0000\u0000\u0342"+ + "\u033d\u0001\u0000\u0000\u0000\u0342\u033f\u0001\u0000\u0000\u0000\u0342"+ + "\u0340\u0001\u0000\u0000\u0000\u0343D\u0001\u0000\u0000\u0000\u0344\u0345"+ + "\u0005I\u0000\u0000\u0345\u0346\u0005F\u0000\u0000\u0346F\u0001\u0000"+ + "\u0000\u0000\u0347\u0348\u0005I\u0000\u0000\u0348\u0349\u0005F\u0000\u0000"+ + "\u0349\u034a\u0005S\u0000\u0000\u034aH\u0001\u0000\u0000\u0000\u034b\u034c"+ + "\u0005S\u0000\u0000\u034c\u034d\u0005W\u0000\u0000\u034d\u034e\u0005I"+ + "\u0000\u0000\u034e\u034f\u0005T\u0000\u0000\u034f\u0350\u0005C\u0000\u0000"+ + "\u0350\u0351\u0005H\u0000\u0000\u0351J\u0001\u0000\u0000\u0000\u0352\u0353"+ + "\u0005I\u0000\u0000\u0353\u0354\u0005F\u0000\u0000\u0354\u0355\u0005E"+ + "\u0000\u0000\u0355\u0356\u0005R\u0000\u0000\u0356\u0357\u0005R\u0000\u0000"+ + "\u0357\u0358\u0005O\u0000\u0000\u0358\u0359\u0005R\u0000\u0000\u0359L"+ + "\u0001\u0000\u0000\u0000\u035a\u035b\u0005I\u0000\u0000\u035b\u035c\u0005"+ + "S\u0000\u0000\u035c\u035d\u0005N\u0000\u0000\u035d\u035e\u0005U\u0000"+ + "\u0000\u035e\u035f\u0005M\u0000\u0000\u035f\u0360\u0005B\u0000\u0000\u0360"+ + "\u0361\u0005E\u0000\u0000\u0361\u0362\u0005R\u0000\u0000\u0362N\u0001"+ + "\u0000\u0000\u0000\u0363\u0364\u0005I\u0000\u0000\u0364\u0365\u0005S\u0000"+ + "\u0000\u0365\u0366\u0005T\u0000\u0000\u0366\u0367\u0005E\u0000\u0000\u0367"+ + "\u0368\u0005X\u0000\u0000\u0368\u0369\u0005T\u0000\u0000\u0369P\u0001"+ + "\u0000\u0000\u0000\u036a\u036b\u0005I\u0000\u0000\u036b\u036c\u0005S\u0000"+ + "\u0000\u036c\u036d\u0005E\u0000\u0000\u036d\u036e\u0005R\u0000\u0000\u036e"+ + "\u036f\u0005R\u0000\u0000\u036f\u0370\u0005O\u0000\u0000\u0370\u0371\u0005"+ + "R\u0000\u0000\u0371R\u0001\u0000\u0000\u0000\u0372\u0373\u0005I\u0000"+ + "\u0000\u0373\u0374\u0005S\u0000\u0000\u0374\u0375\u0005N\u0000\u0000\u0375"+ + "\u0376\u0005O\u0000\u0000\u0376\u0377\u0005N\u0000\u0000\u0377\u0378\u0005"+ + "T\u0000\u0000\u0378\u0379\u0005E\u0000\u0000\u0379\u037a\u0005X\u0000"+ + "\u0000\u037a\u037b\u0005T\u0000\u0000\u037bT\u0001\u0000\u0000\u0000\u037c"+ + "\u037d\u0005I\u0000\u0000\u037d\u037e\u0005S\u0000\u0000\u037e\u037f\u0005"+ + "L\u0000\u0000\u037f\u0380\u0005O\u0000\u0000\u0380\u0381\u0005G\u0000"+ + "\u0000\u0381\u0382\u0005I\u0000\u0000\u0382\u0383\u0005C\u0000\u0000\u0383"+ + "\u0384\u0005A\u0000\u0000\u0384\u0385\u0005L\u0000\u0000\u0385V\u0001"+ + "\u0000\u0000\u0000\u0386\u0387\u0005I\u0000\u0000\u0387\u0388\u0005S\u0000"+ + "\u0000\u0388\u0389\u0005E\u0000\u0000\u0389\u038a\u0005V\u0000\u0000\u038a"+ + "\u038b\u0005E\u0000\u0000\u038b\u038c\u0005N\u0000\u0000\u038cX\u0001"+ + "\u0000\u0000\u0000\u038d\u038e\u0005I\u0000\u0000\u038e\u038f\u0005S\u0000"+ + "\u0000\u038f\u0390\u0005O\u0000\u0000\u0390\u0391\u0005D\u0000\u0000\u0391"+ + "\u0392\u0005D\u0000\u0000\u0392Z\u0001\u0000\u0000\u0000\u0393\u0394\u0005"+ + "I\u0000\u0000\u0394\u0395\u0005S\u0000\u0000\u0395\u0396\u0005N\u0000"+ + "\u0000\u0396\u0397\u0005U\u0000\u0000\u0397\u0398\u0005L\u0000\u0000\u0398"+ + "\u0399\u0005L\u0000\u0000\u0399\\\u0001\u0000\u0000\u0000\u039a\u039b"+ + "\u0005I\u0000\u0000\u039b\u039c\u0005S\u0000\u0000\u039c\u039d\u0005N"+ + "\u0000\u0000\u039d\u039e\u0005U\u0000\u0000\u039e\u039f\u0005L\u0000\u0000"+ + "\u039f\u03a0\u0005L\u0000\u0000\u03a0\u03a1\u0005O\u0000\u0000\u03a1\u03a2"+ + "\u0005R\u0000\u0000\u03a2\u03a3\u0005E\u0000\u0000\u03a3\u03a4\u0005R"+ + "\u0000\u0000\u03a4\u03a5\u0005R\u0000\u0000\u03a5\u03a6\u0005O\u0000\u0000"+ + "\u03a6\u03a7\u0005R\u0000\u0000\u03a7^\u0001\u0000\u0000\u0000\u03a8\u03a9"+ + "\u0005A\u0000\u0000\u03a9\u03aa\u0005N\u0000\u0000\u03aa\u03ab\u0005D"+ + "\u0000\u0000\u03ab`\u0001\u0000\u0000\u0000\u03ac\u03ad\u0005O\u0000\u0000"+ + "\u03ad\u03ae\u0005R\u0000\u0000\u03aeb\u0001\u0000\u0000\u0000\u03af\u03b0"+ + "\u0005X\u0000\u0000\u03b0\u03b1\u0005O\u0000\u0000\u03b1\u03b2\u0005R"+ + "\u0000\u0000\u03b2d\u0001\u0000\u0000\u0000\u03b3\u03b4\u0005N\u0000\u0000"+ + "\u03b4\u03b5\u0005O\u0000\u0000\u03b5\u03b6\u0005T\u0000\u0000\u03b6f"+ + "\u0001\u0000\u0000\u0000\u03b7\u03b8\u0005T\u0000\u0000\u03b8\u03b9\u0005"+ + "R\u0000\u0000\u03b9\u03ba\u0005U\u0000\u0000\u03ba\u03bf\u0005E\u0000"+ + "\u0000\u03bb\u03bc\u0005Y\u0000\u0000\u03bc\u03bd\u0005E\u0000\u0000\u03bd"+ + "\u03bf\u0005S\u0000\u0000\u03be\u03b7\u0001\u0000\u0000\u0000\u03be\u03bb"+ + "\u0001\u0000\u0000\u0000\u03bfh\u0001\u0000\u0000\u0000\u03c0\u03c1\u0005"+ + "F\u0000\u0000\u03c1\u03c2\u0005A\u0000\u0000\u03c2\u03c3\u0005L\u0000"+ + "\u0000\u03c3\u03c4\u0005S\u0000\u0000\u03c4\u03c8\u0005E\u0000\u0000\u03c5"+ + "\u03c6\u0005N\u0000\u0000\u03c6\u03c8\u0005O\u0000\u0000\u03c7\u03c0\u0001"+ + "\u0000\u0000\u0000\u03c7\u03c5\u0001\u0000\u0000\u0000\u03c8j\u0001\u0000"+ + "\u0000\u0000\u03c9\u03ca\u0005E\u0000\u0000\u03cal\u0001\u0000\u0000\u0000"+ + "\u03cb\u03cc\u0005P\u0000\u0000\u03cc\u03cd\u0005I\u0000\u0000\u03cdn"+ + "\u0001\u0000\u0000\u0000\u03ce\u03cf\u0005D\u0000\u0000\u03cf\u03d0\u0005"+ + "E\u0000\u0000\u03d0\u03d1\u0005C\u0000\u0000\u03d1\u03d2\u00052\u0000"+ + "\u0000\u03d2\u03d3\u0005B\u0000\u0000\u03d3\u03d4\u0005I\u0000\u0000\u03d4"+ + "\u03d5\u0005N\u0000\u0000\u03d5p\u0001\u0000\u0000\u0000\u03d6\u03d7\u0005"+ + "D\u0000\u0000\u03d7\u03d8\u0005E\u0000\u0000\u03d8\u03d9\u0005C\u0000"+ + "\u0000\u03d9\u03da\u00052\u0000\u0000\u03da\u03db\u0005H\u0000\u0000\u03db"+ + "\u03dc\u0005E\u0000\u0000\u03dc\u03dd\u0005X\u0000\u0000\u03ddr\u0001"+ + "\u0000\u0000\u0000\u03de\u03df\u0005D\u0000\u0000\u03df\u03e0\u0005E\u0000"+ + "\u0000\u03e0\u03e1\u0005C\u0000\u0000\u03e1\u03e2\u00052\u0000\u0000\u03e2"+ + "\u03e3\u0005O\u0000\u0000\u03e3\u03e4\u0005C\u0000\u0000\u03e4\u03e5\u0005"+ + "T\u0000\u0000\u03e5t\u0001\u0000\u0000\u0000\u03e6\u03e7\u0005H\u0000"+ + "\u0000\u03e7\u03e8\u0005E\u0000\u0000\u03e8\u03e9\u0005X\u0000\u0000\u03e9"+ + "\u03ea\u00052\u0000\u0000\u03ea\u03eb\u0005B\u0000\u0000\u03eb\u03ec\u0005"+ + "I\u0000\u0000\u03ec\u03ed\u0005N\u0000\u0000\u03edv\u0001\u0000\u0000"+ + "\u0000\u03ee\u03ef\u0005H\u0000\u0000\u03ef\u03f0\u0005E\u0000\u0000\u03f0"+ + "\u03f1\u0005X\u0000\u0000\u03f1\u03f2\u00052\u0000\u0000\u03f2\u03f3\u0005"+ + "D\u0000\u0000\u03f3\u03f4\u0005E\u0000\u0000\u03f4\u03f5\u0005C\u0000"+ + "\u0000\u03f5x\u0001\u0000\u0000\u0000\u03f6\u03f7\u0005H\u0000\u0000\u03f7"+ + "\u03f8\u0005E\u0000\u0000\u03f8\u03f9\u0005X\u0000\u0000\u03f9\u03fa\u0005"+ + "2\u0000\u0000\u03fa\u03fb\u0005O\u0000\u0000\u03fb\u03fc\u0005C\u0000"+ + "\u0000\u03fc\u03fd\u0005T\u0000\u0000\u03fdz\u0001\u0000\u0000\u0000\u03fe"+ + "\u03ff\u0005O\u0000\u0000\u03ff\u0400\u0005C\u0000\u0000\u0400\u0401\u0005"+ + "T\u0000\u0000\u0401\u0402\u00052\u0000\u0000\u0402\u0403\u0005B\u0000"+ + "\u0000\u0403\u0404\u0005I\u0000\u0000\u0404\u0405\u0005N\u0000\u0000\u0405"+ + "|\u0001\u0000\u0000\u0000\u0406\u0407\u0005O\u0000\u0000\u0407\u0408\u0005"+ + "C\u0000\u0000\u0408\u0409\u0005T\u0000\u0000\u0409\u040a\u00052\u0000"+ + "\u0000\u040a\u040b\u0005D\u0000\u0000\u040b\u040c\u0005E\u0000\u0000\u040c"+ + "\u040d\u0005C\u0000\u0000\u040d~\u0001\u0000\u0000\u0000\u040e\u040f\u0005"+ + "O\u0000\u0000\u040f\u0410\u0005C\u0000\u0000\u0410\u0411\u0005T\u0000"+ + "\u0000\u0411\u0412\u00052\u0000\u0000\u0412\u0413\u0005H\u0000\u0000\u0413"+ + "\u0414\u0005E\u0000\u0000\u0414\u0415\u0005X\u0000\u0000\u0415\u0080\u0001"+ + "\u0000\u0000\u0000\u0416\u0417\u0005B\u0000\u0000\u0417\u0418\u0005I\u0000"+ + "\u0000\u0418\u0419\u0005N\u0000\u0000\u0419\u041a\u00052\u0000\u0000\u041a"+ + "\u041b\u0005O\u0000\u0000\u041b\u041c\u0005C\u0000\u0000\u041c\u041d\u0005"+ + "T\u0000\u0000\u041d\u0082\u0001\u0000\u0000\u0000\u041e\u041f\u0005B\u0000"+ + "\u0000\u041f\u0420\u0005I\u0000\u0000\u0420\u0421\u0005N\u0000\u0000\u0421"+ + "\u0422\u00052\u0000\u0000\u0422\u0423\u0005D\u0000\u0000\u0423\u0424\u0005"+ + "E\u0000\u0000\u0424\u0425\u0005C\u0000\u0000\u0425\u0084\u0001\u0000\u0000"+ + "\u0000\u0426\u0427\u0005B\u0000\u0000\u0427\u0428\u0005I\u0000\u0000\u0428"+ + "\u0429\u0005N\u0000\u0000\u0429\u042a\u00052\u0000\u0000\u042a\u042b\u0005"+ + "H\u0000\u0000\u042b\u042c\u0005E\u0000\u0000\u042c\u042d\u0005X\u0000"+ + "\u0000\u042d\u0086\u0001\u0000\u0000\u0000\u042e\u042f\u0005A\u0000\u0000"+ + "\u042f\u0430\u0005B\u0000\u0000\u0430\u0431\u0005S\u0000\u0000\u0431\u0088"+ + "\u0001\u0000\u0000\u0000\u0432\u0433\u0005Q\u0000\u0000\u0433\u0434\u0005"+ + "U\u0000\u0000\u0434\u0435\u0005O\u0000\u0000\u0435\u0436\u0005T\u0000"+ + "\u0000\u0436\u0437\u0005I\u0000\u0000\u0437\u0438\u0005E\u0000\u0000\u0438"+ + "\u0439\u0005N\u0000\u0000\u0439\u043a\u0005T\u0000\u0000\u043a\u008a\u0001"+ + "\u0000\u0000\u0000\u043b\u043c\u0005M\u0000\u0000\u043c\u043d\u0005O\u0000"+ + "\u0000\u043d\u043e\u0005D\u0000\u0000\u043e\u008c\u0001\u0000\u0000\u0000"+ + "\u043f\u0440\u0005S\u0000\u0000\u0440\u0441\u0005I\u0000\u0000\u0441\u0442"+ + "\u0005G\u0000\u0000\u0442\u0443\u0005N\u0000\u0000\u0443\u008e\u0001\u0000"+ + "\u0000\u0000\u0444\u0445\u0005S\u0000\u0000\u0445\u0446\u0005Q\u0000\u0000"+ + "\u0446\u0447\u0005R\u0000\u0000\u0447\u0448\u0005T\u0000\u0000\u0448\u0090"+ + "\u0001\u0000\u0000\u0000\u0449\u044a\u0005T\u0000\u0000\u044a\u044b\u0005"+ + "R\u0000\u0000\u044b\u044c\u0005U\u0000\u0000\u044c\u044d\u0005N\u0000"+ + "\u0000\u044d\u044e\u0005C\u0000\u0000\u044e\u0092\u0001\u0000\u0000\u0000"+ + "\u044f\u0450\u0005I\u0000\u0000\u0450\u0451\u0005N\u0000\u0000\u0451\u0452"+ + "\u0005T\u0000\u0000\u0452\u0094\u0001\u0000\u0000\u0000\u0453\u0454\u0005"+ + "G\u0000\u0000\u0454\u0455\u0005C\u0000\u0000\u0455\u0456\u0005D\u0000"+ + "\u0000\u0456\u0096\u0001\u0000\u0000\u0000\u0457\u0458\u0005L\u0000\u0000"+ + "\u0458\u0459\u0005C\u0000\u0000\u0459\u045a\u0005M\u0000\u0000\u045a\u0098"+ + "\u0001\u0000\u0000\u0000\u045b\u045c\u0005C\u0000\u0000\u045c\u045d\u0005"+ + "O\u0000\u0000\u045d\u045e\u0005M\u0000\u0000\u045e\u045f\u0005B\u0000"+ + "\u0000\u045f\u0460\u0005I\u0000\u0000\u0460\u0461\u0005N\u0000\u0000\u0461"+ + "\u009a\u0001\u0000\u0000\u0000\u0462\u0463\u0005P\u0000\u0000\u0463\u0464"+ + "\u0005E\u0000\u0000\u0464\u0465\u0005R\u0000\u0000\u0465\u0466\u0005M"+ + "\u0000\u0000\u0466\u0467\u0005U\u0000\u0000\u0467\u0468\u0005T\u0000\u0000"+ + "\u0468\u009c\u0001\u0000\u0000\u0000\u0469\u046a\u0005D\u0000\u0000\u046a"+ + "\u046b\u0005E\u0000\u0000\u046b\u046c\u0005G\u0000\u0000\u046c\u046d\u0005"+ + "R\u0000\u0000\u046d\u046e\u0005E\u0000\u0000\u046e\u046f\u0005E\u0000"+ + "\u0000\u046f\u0470\u0005S\u0000\u0000\u0470\u009e\u0001\u0000\u0000\u0000"+ + "\u0471\u0472\u0005R\u0000\u0000\u0472\u0473\u0005A\u0000\u0000\u0473\u0474"+ + "\u0005D\u0000\u0000\u0474\u0475\u0005I\u0000\u0000\u0475\u0476\u0005A"+ + "\u0000\u0000\u0476\u0477\u0005N\u0000\u0000\u0477\u0478\u0005S\u0000\u0000"+ + "\u0478\u00a0\u0001\u0000\u0000\u0000\u0479\u047a\u0005C\u0000\u0000\u047a"+ + "\u047b\u0005O\u0000\u0000\u047b\u047c\u0005S\u0000\u0000\u047c\u00a2\u0001"+ + "\u0000\u0000\u0000\u047d\u047e\u0005C\u0000\u0000\u047e\u047f\u0005O\u0000"+ + "\u0000\u047f\u0480\u0005S\u0000\u0000\u0480\u0481\u0005H\u0000\u0000\u0481"+ + "\u00a4\u0001\u0000\u0000\u0000\u0482\u0483\u0005S\u0000\u0000\u0483\u0484"+ + "\u0005I\u0000\u0000\u0484\u0485\u0005N\u0000\u0000\u0485\u00a6\u0001\u0000"+ + "\u0000\u0000\u0486\u0487\u0005S\u0000\u0000\u0487\u0488\u0005I\u0000\u0000"+ + "\u0488\u0489\u0005N\u0000\u0000\u0489\u048a\u0005H\u0000\u0000\u048a\u00a8"+ + "\u0001\u0000\u0000\u0000\u048b\u048c\u0005T\u0000\u0000\u048c\u048d\u0005"+ + "A\u0000\u0000\u048d\u048e\u0005N\u0000\u0000\u048e\u00aa\u0001\u0000\u0000"+ + "\u0000\u048f\u0490\u0005T\u0000\u0000\u0490\u0491\u0005A\u0000\u0000\u0491"+ + "\u0492\u0005N\u0000\u0000\u0492\u0493\u0005H\u0000\u0000\u0493\u00ac\u0001"+ + "\u0000\u0000\u0000\u0494\u0495\u0005C\u0000\u0000\u0495\u0496\u0005O\u0000"+ + "\u0000\u0496\u0497\u0005T\u0000\u0000\u0497\u00ae\u0001\u0000\u0000\u0000"+ + "\u0498\u0499\u0005C\u0000\u0000\u0499\u049a\u0005O\u0000\u0000\u049a\u049b"+ + "\u0005T\u0000\u0000\u049b\u049c\u0005H\u0000\u0000\u049c\u00b0\u0001\u0000"+ + "\u0000\u0000\u049d\u049e\u0005C\u0000\u0000\u049e\u049f\u0005S\u0000\u0000"+ + "\u049f\u04a0\u0005C\u0000\u0000\u04a0\u00b2\u0001\u0000\u0000\u0000\u04a1"+ + "\u04a2\u0005C\u0000\u0000\u04a2\u04a3\u0005S\u0000\u0000\u04a3\u04a4\u0005"+ + "C\u0000\u0000\u04a4\u04a5\u0005H\u0000\u0000\u04a5\u00b4\u0001\u0000\u0000"+ + "\u0000\u04a6\u04a7\u0005S\u0000\u0000\u04a7\u04a8\u0005E\u0000\u0000\u04a8"+ + "\u04a9\u0005C\u0000\u0000\u04a9\u00b6\u0001\u0000\u0000\u0000\u04aa\u04ab"+ + "\u0005S\u0000\u0000\u04ab\u04ac\u0005E\u0000\u0000\u04ac\u04ad\u0005C"+ + "\u0000\u0000\u04ad\u04ae\u0005H\u0000\u0000\u04ae\u00b8\u0001\u0000\u0000"+ + "\u0000\u04af\u04b0\u0005A\u0000\u0000\u04b0\u04b1\u0005C\u0000\u0000\u04b1"+ + "\u04b2\u0005O\u0000\u0000\u04b2\u04b3\u0005S\u0000\u0000\u04b3\u00ba\u0001"+ + "\u0000\u0000\u0000\u04b4\u04b5\u0005A\u0000\u0000\u04b5\u04b6\u0005C\u0000"+ + "\u0000\u04b6\u04b7\u0005O\u0000\u0000\u04b7\u04b8\u0005S\u0000\u0000\u04b8"+ + "\u04b9\u0005H\u0000\u0000\u04b9\u00bc\u0001\u0000\u0000\u0000\u04ba\u04bb"+ + "\u0005A\u0000\u0000\u04bb\u04bc\u0005S\u0000\u0000\u04bc\u04bd\u0005I"+ + "\u0000\u0000\u04bd\u04be\u0005N\u0000\u0000\u04be\u00be\u0001\u0000\u0000"+ + "\u0000\u04bf\u04c0\u0005A\u0000\u0000\u04c0\u04c1\u0005S\u0000\u0000\u04c1"+ + "\u04c2\u0005I\u0000\u0000\u04c2\u04c3\u0005N\u0000\u0000\u04c3\u04c4\u0005"+ + "H\u0000\u0000\u04c4\u00c0\u0001\u0000\u0000\u0000\u04c5\u04c6\u0005A\u0000"+ + "\u0000\u04c6\u04c7\u0005T\u0000\u0000\u04c7\u04c8\u0005A\u0000\u0000\u04c8"+ + "\u04c9\u0005N\u0000\u0000\u04c9\u00c2\u0001\u0000\u0000\u0000\u04ca\u04cb"+ + "\u0005A\u0000\u0000\u04cb\u04cc\u0005T\u0000\u0000\u04cc\u04cd\u0005A"+ + "\u0000\u0000\u04cd\u04ce\u0005N\u0000\u0000\u04ce\u04cf\u0005H\u0000\u0000"+ + "\u04cf\u00c4\u0001\u0000\u0000\u0000\u04d0\u04d1\u0005A\u0000\u0000\u04d1"+ + "\u04d2\u0005C\u0000\u0000\u04d2\u04d3\u0005O\u0000\u0000\u04d3\u04d4\u0005"+ + "T\u0000\u0000\u04d4\u00c6\u0001\u0000\u0000\u0000\u04d5\u04d6\u0005A\u0000"+ + "\u0000\u04d6\u04d7\u0005C\u0000\u0000\u04d7\u04d8\u0005O\u0000\u0000\u04d8"+ + "\u04d9\u0005T\u0000\u0000\u04d9\u04da\u0005H\u0000\u0000\u04da\u00c8\u0001"+ + "\u0000\u0000\u0000\u04db\u04dc\u0005A\u0000\u0000\u04dc\u04dd\u0005T\u0000"+ + "\u0000\u04dd\u04de\u0005A\u0000\u0000\u04de\u04df\u0005N\u0000\u0000\u04df"+ + "\u04e0\u00052\u0000\u0000\u04e0\u00ca\u0001\u0000\u0000\u0000\u04e1\u04e2"+ + "\u0005R\u0000\u0000\u04e2\u04e3\u0005O\u0000\u0000\u04e3\u04e4\u0005U"+ + "\u0000\u0000\u04e4\u04e5\u0005N\u0000\u0000\u04e5\u04e6\u0005D\u0000\u0000"+ + "\u04e6\u00cc\u0001\u0000\u0000\u0000\u04e7\u04e8\u0005R\u0000\u0000\u04e8"+ + "\u04e9\u0005O\u0000\u0000\u04e9\u04ea\u0005U\u0000\u0000\u04ea\u04eb\u0005"+ + "N\u0000\u0000\u04eb\u04ec\u0005D\u0000\u0000\u04ec\u04ed\u0005D\u0000"+ + "\u0000\u04ed\u04ee\u0005O\u0000\u0000\u04ee\u04ef\u0005W\u0000\u0000\u04ef"+ + "\u04f0\u0005N\u0000\u0000\u04f0\u00ce\u0001\u0000\u0000\u0000\u04f1\u04f2"+ + "\u0005R\u0000\u0000\u04f2\u04f3\u0005O\u0000\u0000\u04f3\u04f4\u0005U"+ + "\u0000\u0000\u04f4\u04f5\u0005N\u0000\u0000\u04f5\u04f6\u0005D\u0000\u0000"+ + "\u04f6\u04f7\u0005U\u0000\u0000\u04f7\u04f8\u0005P\u0000\u0000\u04f8\u00d0"+ + "\u0001\u0000\u0000\u0000\u04f9\u04fa\u0005C\u0000\u0000\u04fa\u04fb\u0005"+ + "E\u0000\u0000\u04fb\u04fc\u0005I\u0000\u0000\u04fc\u04fd\u0005L\u0000"+ + "\u0000\u04fd\u04fe\u0005I\u0000\u0000\u04fe\u04ff\u0005N\u0000\u0000\u04ff"+ + "\u0500\u0005G\u0000\u0000\u0500\u00d2\u0001\u0000\u0000\u0000\u0501\u0502"+ + "\u0005F\u0000\u0000\u0502\u0503\u0005L\u0000\u0000\u0503\u0504\u0005O"+ + "\u0000\u0000\u0504\u0505\u0005O\u0000\u0000\u0505\u0506\u0005R\u0000\u0000"+ + "\u0506\u00d4\u0001\u0000\u0000\u0000\u0507\u0508\u0005E\u0000\u0000\u0508"+ + "\u0509\u0005V\u0000\u0000\u0509\u050a\u0005E\u0000\u0000\u050a\u050b\u0005"+ + "N\u0000\u0000\u050b\u00d6\u0001\u0000\u0000\u0000\u050c\u050d\u0005O\u0000"+ + "\u0000\u050d\u050e\u0005D\u0000\u0000\u050e\u050f\u0005D\u0000\u0000\u050f"+ + "\u00d8\u0001\u0000\u0000\u0000\u0510\u0511\u0005M\u0000\u0000\u0511\u0512"+ + "\u0005R\u0000\u0000\u0512\u0513\u0005O\u0000\u0000\u0513\u0514\u0005U"+ + "\u0000\u0000\u0514\u0515\u0005N\u0000\u0000\u0515\u0516\u0005D\u0000\u0000"+ + "\u0516\u00da\u0001\u0000\u0000\u0000\u0517\u0518\u0005R\u0000\u0000\u0518"+ + "\u0519\u0005A\u0000\u0000\u0519\u051a\u0005N\u0000\u0000\u051a\u051b\u0005"+ + "D\u0000\u0000\u051b\u00dc\u0001\u0000\u0000\u0000\u051c\u051d\u0005R\u0000"+ + "\u0000\u051d\u051e\u0005A\u0000\u0000\u051e\u051f\u0005N\u0000\u0000\u051f"+ + "\u0520\u0005D\u0000\u0000\u0520\u0521\u0005B\u0000\u0000\u0521\u0522\u0005"+ + "E\u0000\u0000\u0522\u0523\u0005T\u0000\u0000\u0523\u0524\u0005W\u0000"+ + "\u0000\u0524\u0525\u0005E\u0000\u0000\u0525\u0526\u0005E\u0000\u0000\u0526"+ + "\u0527\u0005N\u0000\u0000\u0527\u00de\u0001\u0000\u0000\u0000\u0528\u0529"+ + "\u0005F\u0000\u0000\u0529\u052a\u0005A\u0000\u0000\u052a\u052b\u0005C"+ + "\u0000\u0000\u052b\u052c\u0005T\u0000\u0000\u052c\u00e0\u0001\u0000\u0000"+ + "\u0000\u052d\u052e\u0005F\u0000\u0000\u052e\u052f\u0005A\u0000\u0000\u052f"+ + "\u0530\u0005C\u0000\u0000\u0530\u0531\u0005T\u0000\u0000\u0531\u0532\u0005"+ + "D\u0000\u0000\u0532\u0533\u0005O\u0000\u0000\u0533\u0534\u0005U\u0000"+ + "\u0000\u0534\u0535\u0005B\u0000\u0000\u0535\u0536\u0005L\u0000\u0000\u0536"+ + "\u0537\u0005E\u0000\u0000\u0537\u00e2\u0001\u0000\u0000\u0000\u0538\u0539"+ + "\u0005P\u0000\u0000\u0539\u053a\u0005O\u0000\u0000\u053a\u053b\u0005W"+ + "\u0000\u0000\u053b\u053c\u0005E\u0000\u0000\u053c\u053d\u0005R\u0000\u0000"+ + "\u053d\u00e4\u0001\u0000\u0000\u0000\u053e\u053f\u0005E\u0000\u0000\u053f"+ + "\u0540\u0005X\u0000\u0000\u0540\u0541\u0005P\u0000\u0000\u0541\u00e6\u0001"+ + "\u0000\u0000\u0000\u0542\u0543\u0005L\u0000\u0000\u0543\u0544\u0005N\u0000"+ + "\u0000\u0544\u00e8\u0001\u0000\u0000\u0000\u0545\u0546\u0005L\u0000\u0000"+ + "\u0546\u0547\u0005O\u0000\u0000\u0547\u0548\u0005G\u0000\u0000\u0548\u00ea"+ + "\u0001\u0000\u0000\u0000\u0549\u054a\u0005L\u0000\u0000\u054a\u054b\u0005"+ + "O\u0000\u0000\u054b\u054c\u0005G\u0000\u0000\u054c\u054d\u00051\u0000"+ + "\u0000\u054d\u054e\u00050\u0000\u0000\u054e\u00ec\u0001\u0000\u0000\u0000"+ + "\u054f\u0550\u0005M\u0000\u0000\u0550\u0551\u0005U\u0000\u0000\u0551\u0552"+ + "\u0005L\u0000\u0000\u0552\u0553\u0005T\u0000\u0000\u0553\u0554\u0005I"+ + "\u0000\u0000\u0554\u0555\u0005N\u0000\u0000\u0555\u0556\u0005O\u0000\u0000"+ + "\u0556\u0557\u0005M\u0000\u0000\u0557\u0558\u0005I\u0000\u0000\u0558\u0559"+ + "\u0005A\u0000\u0000\u0559\u055a\u0005L\u0000\u0000\u055a\u00ee\u0001\u0000"+ + "\u0000\u0000\u055b\u055c\u0005P\u0000\u0000\u055c\u055d\u0005R\u0000\u0000"+ + "\u055d\u055e\u0005O\u0000\u0000\u055e\u055f\u0005D\u0000\u0000\u055f\u0560"+ + "\u0005U\u0000\u0000\u0560\u0561\u0005C\u0000\u0000\u0561\u0562\u0005T"+ + "\u0000\u0000\u0562\u00f0\u0001\u0000\u0000\u0000\u0563\u0564\u0005S\u0000"+ + "\u0000\u0564\u0565\u0005Q\u0000\u0000\u0565\u0566\u0005R\u0000\u0000\u0566"+ + "\u0567\u0005T\u0000\u0000\u0567\u0568\u0005P\u0000\u0000\u0568\u0569\u0005"+ + "I\u0000\u0000\u0569\u00f2\u0001\u0000\u0000\u0000\u056a\u056b\u0005E\u0000"+ + "\u0000\u056b\u056c\u0005R\u0000\u0000\u056c\u056d\u0005F\u0000\u0000\u056d"+ + "\u00f4\u0001\u0000\u0000\u0000\u056e\u056f\u0005E\u0000\u0000\u056f\u0570"+ + "\u0005R\u0000\u0000\u0570\u0571\u0005F\u0000\u0000\u0571\u0572\u0005C"+ + "\u0000\u0000\u0572\u00f6\u0001\u0000\u0000\u0000\u0573\u0574\u0005B\u0000"+ + "\u0000\u0574\u0575\u0005E\u0000\u0000\u0575\u0576\u0005S\u0000\u0000\u0576"+ + "\u0577\u0005S\u0000\u0000\u0577\u0578\u0005E\u0000\u0000\u0578\u0579\u0005"+ + "L\u0000\u0000\u0579\u057a\u0005I\u0000\u0000\u057a\u00f8\u0001\u0000\u0000"+ + "\u0000\u057b\u057c\u0005B\u0000\u0000\u057c\u057d\u0005E\u0000\u0000\u057d"+ + "\u057e\u0005S\u0000\u0000\u057e\u057f\u0005S\u0000\u0000\u057f\u0580\u0005"+ + "E\u0000\u0000\u0580\u0581\u0005L\u0000\u0000\u0581\u0582\u0005J\u0000"+ + "\u0000\u0582\u00fa\u0001\u0000\u0000\u0000\u0583\u0584\u0005B\u0000\u0000"+ + "\u0584\u0585\u0005E\u0000\u0000\u0585\u0586\u0005S\u0000\u0000\u0586\u0587"+ + "\u0005S\u0000\u0000\u0587\u0588\u0005E\u0000\u0000\u0588\u0589\u0005L"+ + "\u0000\u0000\u0589\u058a\u0005K\u0000\u0000\u058a\u00fc\u0001\u0000\u0000"+ + "\u0000\u058b\u058c\u0005B\u0000\u0000\u058c\u058d\u0005E\u0000\u0000\u058d"+ + "\u058e\u0005S\u0000\u0000\u058e\u058f\u0005S\u0000\u0000\u058f\u0590\u0005"+ + "E\u0000\u0000\u0590\u0591\u0005L\u0000\u0000\u0591\u0592\u0005Y\u0000"+ + "\u0000\u0592\u00fe\u0001\u0000\u0000\u0000\u0593\u0594\u0005D\u0000\u0000"+ + "\u0594\u0595\u0005E\u0000\u0000\u0595\u0596\u0005L\u0000\u0000\u0596\u0597"+ + "\u0005T\u0000\u0000\u0597\u0598\u0005A\u0000\u0000\u0598\u0100\u0001\u0000"+ + "\u0000\u0000\u0599\u059a\u0005G\u0000\u0000\u059a\u059b\u0005E\u0000\u0000"+ + "\u059b\u059c\u0005S\u0000\u0000\u059c\u059d\u0005T\u0000\u0000\u059d\u059e"+ + "\u0005E\u0000\u0000\u059e\u059f\u0005P\u0000\u0000\u059f\u0102\u0001\u0000"+ + "\u0000\u0000\u05a0\u05a1\u0005S\u0000\u0000\u05a1\u05a2\u0005U\u0000\u0000"+ + "\u05a2\u05a3\u0005M\u0000\u0000\u05a3\u05a4\u0005S\u0000\u0000\u05a4\u05a5"+ + "\u0005Q\u0000\u0000\u05a5\u0104\u0001\u0000\u0000\u0000\u05a6\u05a7\u0005"+ + "S\u0000\u0000\u05a7\u05a8\u0005U\u0000\u0000\u05a8\u05a9\u0005M\u0000"+ + "\u0000\u05a9\u05aa\u0005P\u0000\u0000\u05aa\u05ab\u0005R\u0000\u0000\u05ab"+ + "\u05ac\u0005O\u0000\u0000\u05ac\u05ad\u0005D\u0000\u0000\u05ad\u05ae\u0005"+ + "U\u0000\u0000\u05ae\u05af\u0005C\u0000\u0000\u05af\u05b0\u0005T\u0000"+ + "\u0000\u05b0\u0106\u0001\u0000\u0000\u0000\u05b1\u05b2\u0005S\u0000\u0000"+ + "\u05b2\u05b3\u0005U\u0000\u0000\u05b3\u05b4\u0005M\u0000\u0000\u05b4\u05b5"+ + "\u0005X\u0000\u0000\u05b5\u05b6\u00052\u0000\u0000\u05b6\u05b7\u0005M"+ + "\u0000\u0000\u05b7\u05b8\u0005Y\u0000\u0000\u05b8\u05b9\u00052\u0000\u0000"+ + "\u05b9\u0108\u0001\u0000\u0000\u0000\u05ba\u05bb\u0005S\u0000\u0000\u05bb"+ + "\u05bc\u0005U\u0000\u0000\u05bc\u05bd\u0005M\u0000\u0000\u05bd\u05be\u0005"+ + "X\u0000\u0000\u05be\u05bf\u00052\u0000\u0000\u05bf\u05c0\u0005P\u0000"+ + "\u0000\u05c0\u05c1\u0005Y\u0000\u0000\u05c1\u05c2\u00052\u0000\u0000\u05c2"+ + "\u010a\u0001\u0000\u0000\u0000\u05c3\u05c4\u0005S\u0000\u0000\u05c4\u05c5"+ + "\u0005U\u0000\u0000\u05c5\u05c6\u0005M\u0000\u0000\u05c6\u05c7\u0005X"+ + "\u0000\u0000\u05c7\u05c8\u0005M\u0000\u0000\u05c8\u05c9\u0005Y\u0000\u0000"+ + "\u05c9\u05ca\u00052\u0000\u0000\u05ca\u010c\u0001\u0000\u0000\u0000\u05cb"+ + "\u05cc\u0005A\u0000\u0000\u05cc\u05cd\u0005R\u0000\u0000\u05cd\u05ce\u0005"+ + "A\u0000\u0000\u05ce\u05cf\u0005B\u0000\u0000\u05cf\u05d0\u0005I\u0000"+ + "\u0000\u05d0\u05d1\u0005C\u0000\u0000\u05d1\u010e\u0001\u0000\u0000\u0000"+ + "\u05d2\u05d3\u0005R\u0000\u0000\u05d3\u05d4\u0005O\u0000\u0000\u05d4\u05d5"+ + "\u0005M\u0000\u0000\u05d5\u05d6\u0005A\u0000\u0000\u05d6\u05d7\u0005N"+ + "\u0000\u0000\u05d7\u0110\u0001\u0000\u0000\u0000\u05d8\u05d9\u0005S\u0000"+ + "\u0000\u05d9\u05da\u0005E\u0000\u0000\u05da\u05db\u0005R\u0000\u0000\u05db"+ + "\u05dc\u0005I\u0000\u0000\u05dc\u05dd\u0005E\u0000\u0000\u05dd\u05de\u0005"+ + "S\u0000\u0000\u05de\u05df\u0005S\u0000\u0000\u05df\u05e0\u0005U\u0000"+ + "\u0000\u05e0\u05e1\u0005M\u0000\u0000\u05e1\u0112\u0001\u0000\u0000\u0000"+ + "\u05e2\u05e3\u0005R\u0000\u0000\u05e3\u05e4\u0005A\u0000\u0000\u05e4\u05e5"+ + "\u0005N\u0000\u0000\u05e5\u05e6\u0005K\u0000\u0000\u05e6\u0114\u0001\u0000"+ + "\u0000\u0000\u05e7\u05e8\u0005F\u0000\u0000\u05e8\u05e9\u0005O\u0000\u0000"+ + "\u05e9\u05ea\u0005R\u0000\u0000\u05ea\u05eb\u0005E\u0000\u0000\u05eb\u05ec"+ + "\u0005C\u0000\u0000\u05ec\u05ed\u0005A\u0000\u0000\u05ed\u05ee\u0005S"+ + "\u0000\u0000\u05ee\u05ef\u0005T\u0000\u0000\u05ef\u0116\u0001\u0000\u0000"+ + "\u0000\u05f0\u05f1\u0005I\u0000\u0000\u05f1\u05f2\u0005N\u0000\u0000\u05f2"+ + "\u05f3\u0005T\u0000\u0000\u05f3\u05f4\u0005E\u0000\u0000\u05f4\u05f5\u0005"+ + "R\u0000\u0000\u05f5\u05f6\u0005C\u0000\u0000\u05f6\u05f7\u0005E\u0000"+ + "\u0000\u05f7\u05f8\u0005P\u0000\u0000\u05f8\u05f9\u0005T\u0000\u0000\u05f9"+ + "\u0118\u0001\u0000\u0000\u0000\u05fa\u05fb\u0005S\u0000\u0000\u05fb\u05fc"+ + "\u0005L\u0000\u0000\u05fc\u05fd\u0005O\u0000\u0000\u05fd\u05fe\u0005P"+ + "\u0000\u0000\u05fe\u05ff\u0005E\u0000\u0000\u05ff\u011a\u0001\u0000\u0000"+ + "\u0000\u0600\u0601\u0005C\u0000\u0000\u0601\u0602\u0005O\u0000\u0000\u0602"+ + "\u0603\u0005R\u0000\u0000\u0603\u0604\u0005R\u0000\u0000\u0604\u0605\u0005"+ + "E\u0000\u0000\u0605\u0606\u0005L\u0000\u0000\u0606\u011c\u0001\u0000\u0000"+ + "\u0000\u0607\u0608\u0005P\u0000\u0000\u0608\u0609\u0005E\u0000\u0000\u0609"+ + "\u060a\u0005A\u0000\u0000\u060a\u060b\u0005R\u0000\u0000\u060b\u060c\u0005"+ + "S\u0000\u0000\u060c\u060d\u0005O\u0000\u0000\u060d\u060e\u0005N\u0000"+ + "\u0000\u060e\u011e\u0001\u0000\u0000\u0000\u060f\u0610\u0005Y\u0000\u0000"+ + "\u0610\u0611\u0005E\u0000\u0000\u0611\u0612\u0005A\u0000\u0000\u0612\u0613"+ + "\u0005R\u0000\u0000\u0613\u0614\u0005F\u0000\u0000\u0614\u0615\u0005R"+ + "\u0000\u0000\u0615\u0616\u0005A\u0000\u0000\u0616\u0617\u0005C\u0000\u0000"+ + "\u0617\u0120\u0001\u0000\u0000\u0000\u0618\u0619\u0005A\u0000\u0000\u0619"+ + "\u061a\u0005S\u0000\u0000\u061a\u061b\u0005C\u0000\u0000\u061b\u0122\u0001"+ + "\u0000\u0000\u0000\u061c\u061d\u0005J\u0000\u0000\u061d\u061e\u0005I\u0000"+ + "\u0000\u061e\u0628\u0005S\u0000\u0000\u061f\u0620\u0005W\u0000\u0000\u0620"+ + "\u0621\u0005I\u0000\u0000\u0621\u0622\u0005D\u0000\u0000\u0622\u0623\u0005"+ + "E\u0000\u0000\u0623\u0624\u0005C\u0000\u0000\u0624\u0625\u0005H\u0000"+ + "\u0000\u0625\u0626\u0005A\u0000\u0000\u0626\u0628\u0005R\u0000\u0000\u0627"+ + "\u061c\u0001\u0000\u0000\u0000\u0627\u061f\u0001\u0000\u0000\u0000\u0628"+ + "\u0124\u0001\u0000\u0000\u0000\u0629\u062a\u0005C\u0000\u0000\u062a\u062b"+ + "\u0005H\u0000\u0000\u062b\u062c\u0005A\u0000\u0000\u062c\u062d\u0005R"+ + "\u0000\u0000\u062d\u0126\u0001\u0000\u0000\u0000\u062e\u062f\u0005C\u0000"+ + "\u0000\u062f\u0630\u0005L\u0000\u0000\u0630\u0631\u0005E\u0000\u0000\u0631"+ + "\u0632\u0005A\u0000\u0000\u0632\u0633\u0005N\u0000\u0000\u0633\u0128\u0001"+ + "\u0000\u0000\u0000\u0634\u0635\u0005C\u0000\u0000\u0635\u0636\u0005O\u0000"+ + "\u0000\u0636\u0637\u0005D\u0000\u0000\u0637\u0638\u0005E\u0000\u0000\u0638"+ + "\u012a\u0001\u0000\u0000\u0000\u0639\u063a\u0005U\u0000\u0000\u063a\u063b"+ + "\u0005N\u0000\u0000\u063b\u063c\u0005I\u0000\u0000\u063c\u063d\u0005C"+ + "\u0000\u0000\u063d\u063e\u0005H\u0000\u0000\u063e\u063f\u0005A\u0000\u0000"+ + "\u063f\u0640\u0005R\u0000\u0000\u0640\u012c\u0001\u0000\u0000\u0000\u0641"+ + "\u0642\u0005U\u0000\u0000\u0642\u0643\u0005N\u0000\u0000\u0643\u0644\u0005"+ + "I\u0000\u0000\u0644\u0645\u0005C\u0000\u0000\u0645\u0646\u0005O\u0000"+ + "\u0000\u0646\u0647\u0005D\u0000\u0000\u0647\u0648\u0005E\u0000\u0000\u0648"+ + "\u012e\u0001\u0000\u0000\u0000\u0649\u064a\u0005C\u0000\u0000\u064a\u064b"+ + "\u0005O\u0000\u0000\u064b\u064c\u0005N\u0000\u0000\u064c\u064d\u0005C"+ + "\u0000\u0000\u064d\u064e\u0005A\u0000\u0000\u064e\u064f\u0005T\u0000\u0000"+ + "\u064f\u0650\u0005E\u0000\u0000\u0650\u0651\u0005N\u0000\u0000\u0651\u0652"+ + "\u0005A\u0000\u0000\u0652\u0653\u0005T\u0000\u0000\u0653\u065b\u0005E"+ + "\u0000\u0000\u0654\u0655\u0005C\u0000\u0000\u0655\u0656\u0005O\u0000\u0000"+ + "\u0656\u0657\u0005N\u0000\u0000\u0657\u0658\u0005C\u0000\u0000\u0658\u0659"+ + "\u0005A\u0000\u0000\u0659\u065b\u0005T\u0000\u0000\u065a\u0649\u0001\u0000"+ + "\u0000\u0000\u065a\u0654\u0001\u0000\u0000\u0000\u065b\u0130\u0001\u0000"+ + "\u0000\u0000\u065c\u065d\u0005E\u0000\u0000\u065d\u065e\u0005X\u0000\u0000"+ + "\u065e\u065f\u0005A\u0000\u0000\u065f\u0660\u0005C\u0000\u0000\u0660\u0661"+ + "\u0005T\u0000\u0000\u0661\u0132\u0001\u0000\u0000\u0000\u0662\u0663\u0005"+ + "F\u0000\u0000\u0663\u0664\u0005I\u0000\u0000\u0664\u0665\u0005N\u0000"+ + "\u0000\u0665\u0666\u0005D\u0000\u0000\u0666\u0134\u0001\u0000\u0000\u0000"+ + "\u0667\u0668\u0005F\u0000\u0000\u0668\u0669\u0005I\u0000\u0000\u0669\u066a"+ + "\u0005X\u0000\u0000\u066a\u066b\u0005E\u0000\u0000\u066b\u066c\u0005D"+ + "\u0000\u0000\u066c\u0136\u0001\u0000\u0000\u0000\u066d\u066e\u0005L\u0000"+ + "\u0000\u066e\u066f\u0005E\u0000\u0000\u066f\u0670\u0005F\u0000\u0000\u0670"+ + "\u0671\u0005T\u0000\u0000\u0671\u0138\u0001\u0000\u0000\u0000\u0672\u0673"+ + "\u0005L\u0000\u0000\u0673\u0674\u0005E\u0000\u0000\u0674\u0675\u0005N"+ + "\u0000\u0000\u0675\u013a\u0001\u0000\u0000\u0000\u0676\u0677\u0005L\u0000"+ + "\u0000\u0677\u0678\u0005O\u0000\u0000\u0678\u0679\u0005W\u0000\u0000\u0679"+ + "\u067a\u0005E\u0000\u0000\u067a\u0683\u0005R\u0000\u0000\u067b\u067c\u0005"+ + "T\u0000\u0000\u067c\u067d\u0005O\u0000\u0000\u067d\u067e\u0005L\u0000"+ + "\u0000\u067e\u067f\u0005O\u0000\u0000\u067f\u0680\u0005W\u0000\u0000\u0680"+ + "\u0681\u0005E\u0000\u0000\u0681\u0683\u0005R\u0000\u0000\u0682\u0676\u0001"+ + "\u0000\u0000\u0000\u0682\u067b\u0001\u0000\u0000\u0000\u0683\u013c\u0001"+ + "\u0000\u0000\u0000\u0684\u0685\u0005M\u0000\u0000\u0685\u0686\u0005I\u0000"+ + "\u0000\u0686\u0687\u0005D\u0000\u0000\u0687\u013e\u0001\u0000\u0000\u0000"+ + "\u0688\u0689\u0005P\u0000\u0000\u0689\u068a\u0005R\u0000\u0000\u068a\u068b"+ + "\u0005O\u0000\u0000\u068b\u068c\u0005P\u0000\u0000\u068c\u068d\u0005E"+ + "\u0000\u0000\u068d\u068e\u0005R\u0000\u0000\u068e\u0140\u0001\u0000\u0000"+ + "\u0000\u068f\u0690\u0005R\u0000\u0000\u0690\u0691\u0005E\u0000\u0000\u0691"+ + "\u0692\u0005P\u0000\u0000\u0692\u0693\u0005L\u0000\u0000\u0693\u0694\u0005"+ + "A\u0000\u0000\u0694\u0695\u0005C\u0000\u0000\u0695\u0696\u0005E\u0000"+ + "\u0000\u0696\u0142\u0001\u0000\u0000\u0000\u0697\u0698\u0005R\u0000\u0000"+ + "\u0698\u0699\u0005E\u0000\u0000\u0699\u069a\u0005P\u0000\u0000\u069a\u069b"+ + "\u0005T\u0000\u0000\u069b\u0144\u0001\u0000\u0000\u0000\u069c\u069d\u0005"+ + "R\u0000\u0000\u069d\u069e\u0005I\u0000\u0000\u069e\u069f\u0005G\u0000"+ + "\u0000\u069f\u06a0\u0005H\u0000\u0000\u06a0\u06a1\u0005T\u0000\u0000\u06a1"+ + "\u0146\u0001\u0000\u0000\u0000\u06a2\u06a3\u0005R\u0000\u0000\u06a3\u06a4"+ + "\u0005M\u0000\u0000\u06a4\u06a5\u0005B\u0000\u0000\u06a5\u0148\u0001\u0000"+ + "\u0000\u0000\u06a6\u06a7\u0005S\u0000\u0000\u06a7\u06a8\u0005E\u0000\u0000"+ + "\u06a8\u06a9\u0005A\u0000\u0000\u06a9\u06aa\u0005R\u0000\u0000\u06aa\u06ab"+ + "\u0005C\u0000\u0000\u06ab\u06ac\u0005H\u0000\u0000\u06ac\u014a\u0001\u0000"+ + "\u0000\u0000\u06ad\u06ae\u0005S\u0000\u0000\u06ae\u06af\u0005U\u0000\u0000"+ + "\u06af\u06b0\u0005B\u0000\u0000\u06b0\u06b1\u0005S\u0000\u0000\u06b1\u06b2"+ + "\u0005T\u0000\u0000\u06b2\u06b3\u0005I\u0000\u0000\u06b3\u06b4\u0005T"+ + "\u0000\u0000\u06b4\u06b5\u0005U\u0000\u0000\u06b5\u06b6\u0005T\u0000\u0000"+ + "\u06b6\u06b7\u0005E\u0000\u0000\u06b7\u014c\u0001\u0000\u0000\u0000\u06b8"+ + "\u06b9\u0005T\u0000\u0000\u06b9\u014e\u0001\u0000\u0000\u0000\u06ba\u06bb"+ + "\u0005T\u0000\u0000\u06bb\u06bc\u0005E\u0000\u0000\u06bc\u06bd\u0005X"+ + "\u0000\u0000\u06bd\u06be\u0005T\u0000\u0000\u06be\u0150\u0001\u0000\u0000"+ + "\u0000\u06bf\u06c0\u0005T\u0000\u0000\u06c0\u06c1\u0005R\u0000\u0000\u06c1"+ + "\u06c2\u0005I\u0000\u0000\u06c2\u06c3\u0005M\u0000\u0000\u06c3\u0152\u0001"+ + "\u0000\u0000\u0000\u06c4\u06c5\u0005U\u0000\u0000\u06c5\u06c6\u0005P\u0000"+ + "\u0000\u06c6\u06c7\u0005P\u0000\u0000\u06c7\u06c8\u0005E\u0000\u0000\u06c8"+ + "\u06d1\u0005R\u0000\u0000\u06c9\u06ca\u0005T\u0000\u0000\u06ca\u06cb\u0005"+ + "O\u0000\u0000\u06cb\u06cc\u0005U\u0000\u0000\u06cc\u06cd\u0005P\u0000"+ + "\u0000\u06cd\u06ce\u0005P\u0000\u0000\u06ce\u06cf\u0005E\u0000\u0000\u06cf"+ + "\u06d1\u0005R\u0000\u0000\u06d0\u06c4\u0001\u0000\u0000\u0000\u06d0\u06c9"+ + "\u0001\u0000\u0000\u0000\u06d1\u0154\u0001\u0000\u0000\u0000\u06d2\u06d3"+ + "\u0005V\u0000\u0000\u06d3\u06d4\u0005A\u0000\u0000\u06d4\u06d5\u0005L"+ + "\u0000\u0000\u06d5\u06d6\u0005U\u0000\u0000\u06d6\u06d7\u0005E\u0000\u0000"+ + "\u06d7\u0156\u0001\u0000\u0000\u0000\u06d8\u06d9\u0005D\u0000\u0000\u06d9"+ + "\u06da\u0005A\u0000\u0000\u06da\u06db\u0005T\u0000\u0000\u06db\u06dc\u0005"+ + "E\u0000\u0000\u06dc\u06dd\u0005V\u0000\u0000\u06dd\u06de\u0005A\u0000"+ + "\u0000\u06de\u06df\u0005L\u0000\u0000\u06df\u06e0\u0005U\u0000\u0000\u06e0"+ + "\u06e1\u0005E\u0000\u0000\u06e1\u0158\u0001\u0000\u0000\u0000\u06e2\u06e3"+ + "\u0005T\u0000\u0000\u06e3\u06e4\u0005I\u0000\u0000\u06e4\u06e5\u0005M"+ + "\u0000\u0000\u06e5\u06e6\u0005E\u0000\u0000\u06e6\u06e7\u0005V\u0000\u0000"+ + "\u06e7\u06e8\u0005A\u0000\u0000\u06e8\u06e9\u0005L\u0000\u0000\u06e9\u06ea"+ + "\u0005U\u0000\u0000\u06ea\u06eb\u0005E\u0000\u0000\u06eb\u015a\u0001\u0000"+ + "\u0000\u0000\u06ec\u06ed\u0005D\u0000\u0000\u06ed\u06ee\u0005A\u0000\u0000"+ + "\u06ee\u06ef\u0005T\u0000\u0000\u06ef\u06f0\u0005E\u0000\u0000\u06f0\u015c"+ + "\u0001\u0000\u0000\u0000\u06f1\u06f2\u0005T\u0000\u0000\u06f2\u06f3\u0005"+ + "I\u0000\u0000\u06f3\u06f4\u0005M\u0000\u0000\u06f4\u06f5\u0005E\u0000"+ + "\u0000\u06f5\u015e\u0001\u0000\u0000\u0000\u06f6\u06f7\u0005N\u0000\u0000"+ + "\u06f7\u06f8\u0005O\u0000\u0000\u06f8\u06f9\u0005W\u0000\u0000\u06f9\u0160"+ + "\u0001\u0000\u0000\u0000\u06fa\u06fb\u0005T\u0000\u0000\u06fb\u06fc\u0005"+ + "O\u0000\u0000\u06fc\u06fd\u0005D\u0000\u0000\u06fd\u06fe\u0005A\u0000"+ + "\u0000\u06fe\u06ff\u0005Y\u0000\u0000\u06ff\u0162\u0001\u0000\u0000\u0000"+ + "\u0700\u0701\u0005Y\u0000\u0000\u0701\u0702\u0005E\u0000\u0000\u0702\u0703"+ + "\u0005A\u0000\u0000\u0703\u0704\u0005R\u0000\u0000\u0704\u0164\u0001\u0000"+ + "\u0000\u0000\u0705\u0706\u0005M\u0000\u0000\u0706\u0707\u0005O\u0000\u0000"+ + "\u0707\u0708\u0005N\u0000\u0000\u0708\u0709\u0005T\u0000\u0000\u0709\u070a"+ + "\u0005H\u0000\u0000\u070a\u0166\u0001\u0000\u0000\u0000\u070b\u070c\u0005"+ + "D\u0000\u0000\u070c\u070d\u0005A\u0000\u0000\u070d\u070e\u0005Y\u0000"+ + "\u0000\u070e\u0168\u0001\u0000\u0000\u0000\u070f\u0710\u0005H\u0000\u0000"+ + "\u0710\u0711\u0005O\u0000\u0000\u0711\u0712\u0005U\u0000\u0000\u0712\u0713"+ + "\u0005R\u0000\u0000\u0713\u016a\u0001\u0000\u0000\u0000\u0714\u0715\u0005"+ + "M\u0000\u0000\u0715\u0716\u0005I\u0000\u0000\u0716\u0717\u0005N\u0000"+ + "\u0000\u0717\u0718\u0005U\u0000\u0000\u0718\u0719\u0005T\u0000\u0000\u0719"+ + "\u071a\u0005E\u0000\u0000\u071a\u016c\u0001\u0000\u0000\u0000\u071b\u071c"+ + "\u0005S\u0000\u0000\u071c\u071d\u0005E\u0000\u0000\u071d\u071e\u0005C"+ + "\u0000\u0000\u071e\u071f\u0005O\u0000\u0000\u071f\u0720\u0005N\u0000\u0000"+ + "\u0720\u0721\u0005D\u0000\u0000\u0721\u016e\u0001\u0000\u0000\u0000\u0722"+ + "\u0723\u0005W\u0000\u0000\u0723\u0724\u0005E\u0000\u0000\u0724\u0725\u0005"+ + "E\u0000\u0000\u0725\u0726\u0005K\u0000\u0000\u0726\u0727\u0005D\u0000"+ + "\u0000\u0727\u0728\u0005A\u0000\u0000\u0728\u0729\u0005Y\u0000\u0000\u0729"+ + "\u0170\u0001\u0000\u0000\u0000\u072a\u072b\u0005D\u0000\u0000\u072b\u072c"+ + "\u0005A\u0000\u0000\u072c\u072d\u0005T\u0000\u0000\u072d\u072e\u0005E"+ + "\u0000\u0000\u072e\u072f\u0005D\u0000\u0000\u072f\u0730\u0005I\u0000\u0000"+ + "\u0730\u0731\u0005F\u0000\u0000\u0731\u0172\u0001\u0000\u0000\u0000\u0732"+ + "\u0733\u0005D\u0000\u0000\u0733\u0734\u0005A\u0000\u0000\u0734\u0735\u0005"+ + "Y\u0000\u0000\u0735\u0736\u0005S\u0000\u0000\u0736\u0174\u0001\u0000\u0000"+ + "\u0000\u0737\u0738\u0005D\u0000\u0000\u0738\u0739\u0005A\u0000\u0000\u0739"+ + "\u073a\u0005Y\u0000\u0000\u073a\u073b\u0005S\u0000\u0000\u073b\u073c\u0005"+ + "3\u0000\u0000\u073c\u073d\u00056\u0000\u0000\u073d\u073e\u00050\u0000"+ + "\u0000\u073e\u0176\u0001\u0000\u0000\u0000\u073f\u0740\u0005E\u0000\u0000"+ + "\u0740\u0741\u0005D\u0000\u0000\u0741\u0742\u0005A\u0000\u0000\u0742\u0743"+ + "\u0005T\u0000\u0000\u0743\u0744\u0005E\u0000\u0000\u0744\u0178\u0001\u0000"+ + "\u0000\u0000\u0745\u0746\u0005E\u0000\u0000\u0746\u0747\u0005O\u0000\u0000"+ + "\u0747\u0748\u0005M\u0000\u0000\u0748\u0749\u0005O\u0000\u0000\u0749\u074a"+ + "\u0005N\u0000\u0000\u074a\u074b\u0005T\u0000\u0000\u074b\u074c\u0005H"+ + "\u0000\u0000\u074c\u017a\u0001\u0000\u0000\u0000\u074d\u074e\u0005N\u0000"+ + "\u0000\u074e\u074f\u0005E\u0000\u0000\u074f\u0750\u0005T\u0000\u0000\u0750"+ + "\u0751\u0005W\u0000\u0000\u0751\u0752\u0005O\u0000\u0000\u0752\u0753\u0005"+ + "R\u0000\u0000\u0753\u0754\u0005K\u0000\u0000\u0754\u0755\u0005D\u0000"+ + "\u0000\u0755\u0756\u0005A\u0000\u0000\u0756\u0757\u0005Y\u0000\u0000\u0757"+ + "\u0758\u0005S\u0000\u0000\u0758\u017c\u0001\u0000\u0000\u0000\u0759\u075a"+ + "\u0005W\u0000\u0000\u075a\u075b\u0005O\u0000\u0000\u075b\u075c\u0005R"+ + "\u0000\u0000\u075c\u075d\u0005K\u0000\u0000\u075d\u075e\u0005D\u0000\u0000"+ + "\u075e\u075f\u0005A\u0000\u0000\u075f\u0760\u0005Y\u0000\u0000\u0760\u017e"+ + "\u0001\u0000\u0000\u0000\u0761\u0762\u0005W\u0000\u0000\u0762\u0763\u0005"+ + "E\u0000\u0000\u0763\u0764\u0005E\u0000\u0000\u0764\u0765\u0005K\u0000"+ + "\u0000\u0765\u0766\u0005N\u0000\u0000\u0766\u0767\u0005U\u0000\u0000\u0767"+ + "\u0768\u0005M\u0000\u0000\u0768\u0180\u0001\u0000\u0000\u0000\u0769\u076a"+ + "\u0005M\u0000\u0000\u076a\u076b\u0005A\u0000\u0000\u076b\u076c\u0005X"+ + "\u0000\u0000\u076c\u0182\u0001\u0000\u0000\u0000\u076d\u076e\u0005M\u0000"+ + "\u0000\u076e\u076f\u0005E\u0000\u0000\u076f\u0770\u0005D\u0000\u0000\u0770"+ + "\u0771\u0005I\u0000\u0000\u0771\u0772\u0005A\u0000\u0000\u0772\u0773\u0005"+ + "N\u0000\u0000\u0773\u0184\u0001\u0000\u0000\u0000\u0774\u0775\u0005M\u0000"+ + "\u0000\u0775\u0776\u0005I\u0000\u0000\u0776\u0777\u0005N\u0000\u0000\u0777"+ + "\u0186\u0001\u0000\u0000\u0000\u0778\u0779\u0005Q\u0000\u0000\u0779\u077a"+ + "\u0005U\u0000\u0000\u077a\u077b\u0005A\u0000\u0000\u077b\u077c\u0005R"+ + "\u0000\u0000\u077c\u077d\u0005T\u0000\u0000\u077d\u077e\u0005I\u0000\u0000"+ + "\u077e\u077f\u0005L\u0000\u0000\u077f\u0780\u0005E\u0000\u0000\u0780\u0188"+ + "\u0001\u0000\u0000\u0000\u0781\u0782\u0005M\u0000\u0000\u0782\u0783\u0005"+ + "O\u0000\u0000\u0783\u0784\u0005D\u0000\u0000\u0784\u0785\u0005E\u0000"+ + "\u0000\u0785\u018a\u0001\u0000\u0000\u0000\u0786\u0787\u0005L\u0000\u0000"+ + "\u0787\u0788\u0005A\u0000\u0000\u0788\u0789\u0005R\u0000\u0000\u0789\u078a"+ + "\u0005G\u0000\u0000\u078a\u078b\u0005E\u0000\u0000\u078b\u018c\u0001\u0000"+ + "\u0000\u0000\u078c\u078d\u0005S\u0000\u0000\u078d\u078e\u0005M\u0000\u0000"+ + "\u078e\u078f\u0005A\u0000\u0000\u078f\u0790\u0005L\u0000\u0000\u0790\u0791"+ + "\u0005L\u0000\u0000\u0791\u018e\u0001\u0000\u0000\u0000\u0792\u0793\u0005"+ + "P\u0000\u0000\u0793\u0794\u0005E\u0000\u0000\u0794\u0795\u0005R\u0000"+ + "\u0000\u0795\u0796\u0005C\u0000\u0000\u0796\u0797\u0005E\u0000\u0000\u0797"+ + "\u0798\u0005N\u0000\u0000\u0798\u0799\u0005T\u0000\u0000\u0799\u079a\u0005"+ + "I\u0000\u0000\u079a\u079b\u0005L\u0000\u0000\u079b\u07ab\u0005E\u0000"+ + "\u0000\u079c\u079d\u0005P\u0000\u0000\u079d\u079e\u0005E\u0000\u0000\u079e"+ + "\u079f\u0005R\u0000\u0000\u079f\u07a0\u0005C\u0000\u0000\u07a0\u07a1\u0005"+ + "E\u0000\u0000\u07a1\u07a2\u0005N\u0000\u0000\u07a2\u07a3\u0005T\u0000"+ + "\u0000\u07a3\u07a4\u0005I\u0000\u0000\u07a4\u07a5\u0005L\u0000\u0000\u07a5"+ + "\u07a6\u0005E\u0000\u0000\u07a6\u07a7\u0005.\u0000\u0000\u07a7\u07a8\u0005"+ + "I\u0000\u0000\u07a8\u07a9\u0005N\u0000\u0000\u07a9\u07ab\u0005C\u0000"+ + "\u0000\u07aa\u0792\u0001\u0000\u0000\u0000\u07aa\u079c\u0001\u0000\u0000"+ + "\u0000\u07ab\u0190\u0001\u0000\u0000\u0000\u07ac\u07ad\u0005P\u0000\u0000"+ + "\u07ad\u07ae\u0005E\u0000\u0000\u07ae\u07af\u0005R\u0000\u0000\u07af\u07b0"+ + "\u0005C\u0000\u0000\u07b0\u07b1\u0005E\u0000\u0000\u07b1\u07b2\u0005N"+ + "\u0000\u0000\u07b2\u07b3\u0005T\u0000\u0000\u07b3\u07b4\u0005R\u0000\u0000"+ + "\u07b4\u07b5\u0005A\u0000\u0000\u07b5\u07b6\u0005N\u0000\u0000\u07b6\u07c7"+ + "\u0005K\u0000\u0000\u07b7\u07b8\u0005P\u0000\u0000\u07b8\u07b9\u0005E"+ + "\u0000\u0000\u07b9\u07ba\u0005R\u0000\u0000\u07ba\u07bb\u0005C\u0000\u0000"+ + "\u07bb\u07bc\u0005E\u0000\u0000\u07bc\u07bd\u0005N\u0000\u0000\u07bd\u07be"+ + "\u0005T\u0000\u0000\u07be\u07bf\u0005R\u0000\u0000\u07bf\u07c0\u0005A"+ + "\u0000\u0000\u07c0\u07c1\u0005N\u0000\u0000\u07c1\u07c2\u0005K\u0000\u0000"+ + "\u07c2\u07c3\u0005.\u0000\u0000\u07c3\u07c4\u0005I\u0000\u0000\u07c4\u07c5"+ + "\u0005N\u0000\u0000\u07c5\u07c7\u0005C\u0000\u0000\u07c6\u07ac\u0001\u0000"+ + "\u0000\u0000\u07c6\u07b7\u0001\u0000\u0000\u0000\u07c7\u0192\u0001\u0000"+ + "\u0000\u0000\u07c8\u07c9\u0005A\u0000\u0000\u07c9\u07ca\u0005V\u0000\u0000"+ + "\u07ca\u07cb\u0005E\u0000\u0000\u07cb\u07cc\u0005R\u0000\u0000\u07cc\u07cd"+ + "\u0005A\u0000\u0000\u07cd\u07ce\u0005G\u0000\u0000\u07ce\u07cf\u0005E"+ + "\u0000\u0000\u07cf\u0194\u0001\u0000\u0000\u0000\u07d0\u07d1\u0005A\u0000"+ + "\u0000\u07d1\u07d2\u0005V\u0000\u0000\u07d2\u07d3\u0005E\u0000\u0000\u07d3"+ + "\u07d4\u0005R\u0000\u0000\u07d4\u07d5\u0005A\u0000\u0000\u07d5\u07d6\u0005"+ + "G\u0000\u0000\u07d6\u07d7\u0005E\u0000\u0000\u07d7\u07d8\u0005I\u0000"+ + "\u0000\u07d8\u07d9\u0005F\u0000\u0000\u07d9\u0196\u0001\u0000\u0000\u0000"+ + "\u07da\u07db\u0005G\u0000\u0000\u07db\u07dc\u0005E\u0000\u0000\u07dc\u07dd"+ + "\u0005O\u0000\u0000\u07dd\u07de\u0005M\u0000\u0000\u07de\u07df\u0005E"+ + "\u0000\u0000\u07df\u07e0\u0005A\u0000\u0000\u07e0\u07e1\u0005N\u0000\u0000"+ + "\u07e1\u0198\u0001\u0000\u0000\u0000\u07e2\u07e3\u0005H\u0000\u0000\u07e3"+ + "\u07e4\u0005A\u0000\u0000\u07e4\u07e5\u0005R\u0000\u0000\u07e5\u07e6\u0005"+ + "M\u0000\u0000\u07e6\u07e7\u0005E\u0000\u0000\u07e7\u07e8\u0005A\u0000"+ + "\u0000\u07e8\u07e9\u0005N\u0000\u0000\u07e9\u019a\u0001\u0000\u0000\u0000"+ + "\u07ea\u07eb\u0005C\u0000\u0000\u07eb\u07ec\u0005O\u0000\u0000\u07ec\u07ed"+ + "\u0005U\u0000\u0000\u07ed\u07ee\u0005N\u0000\u0000\u07ee\u07ef\u0005T"+ + "\u0000\u0000\u07ef\u019c\u0001\u0000\u0000\u0000\u07f0\u07f1\u0005C\u0000"+ + "\u0000\u07f1\u07f2\u0005O\u0000\u0000\u07f2\u07f3\u0005U\u0000\u0000\u07f3"+ + "\u07f4\u0005N\u0000\u0000\u07f4\u07f5\u0005T\u0000\u0000\u07f5\u07f6\u0005"+ + "I\u0000\u0000\u07f6\u07f7\u0005F\u0000\u0000\u07f7\u019e\u0001\u0000\u0000"+ + "\u0000\u07f8\u07f9\u0005S\u0000\u0000\u07f9\u07fa\u0005U\u0000\u0000\u07fa"+ + "\u07fb\u0005M\u0000\u0000\u07fb\u01a0\u0001\u0000\u0000\u0000\u07fc\u07fd"+ + "\u0005S\u0000\u0000\u07fd\u07fe\u0005U\u0000\u0000\u07fe\u07ff\u0005M"+ + "\u0000\u0000\u07ff\u0800\u0005I\u0000\u0000\u0800\u0801\u0005F\u0000\u0000"+ + "\u0801\u01a2\u0001\u0000\u0000\u0000\u0802\u0803\u0005A\u0000\u0000\u0803"+ + "\u0804\u0005V\u0000\u0000\u0804\u0805\u0005E\u0000\u0000\u0805\u0806\u0005"+ + "D\u0000\u0000\u0806\u0807\u0005E\u0000\u0000\u0807\u0808\u0005V\u0000"+ + "\u0000\u0808\u01a4\u0001\u0000\u0000\u0000\u0809\u080a\u0005S\u0000\u0000"+ + "\u080a\u080b\u0005T\u0000\u0000\u080b\u080c\u0005D\u0000\u0000\u080c\u080d"+ + "\u0005E\u0000\u0000\u080d\u0816\u0005V\u0000\u0000\u080e\u080f\u0005S"+ + "\u0000\u0000\u080f\u0810\u0005T\u0000\u0000\u0810\u0811\u0005D\u0000\u0000"+ + "\u0811\u0812\u0005E\u0000\u0000\u0812\u0813\u0005V\u0000\u0000\u0813\u0814"+ + "\u0005.\u0000\u0000\u0814\u0816\u0005S\u0000\u0000\u0815\u0809\u0001\u0000"+ + "\u0000\u0000\u0815\u080e\u0001\u0000\u0000\u0000\u0816\u01a6\u0001\u0000"+ + "\u0000\u0000\u0817\u0818\u0005S\u0000\u0000\u0818\u0819\u0005T\u0000\u0000"+ + "\u0819\u081a\u0005D\u0000\u0000\u081a\u081b\u0005E\u0000\u0000\u081b\u081c"+ + "\u0005V\u0000\u0000\u081c\u0825\u0005P\u0000\u0000\u081d\u081e\u0005S"+ + "\u0000\u0000\u081e\u081f\u0005T\u0000\u0000\u081f\u0820\u0005D\u0000\u0000"+ + "\u0820\u0821\u0005E\u0000\u0000\u0821\u0822\u0005V\u0000\u0000\u0822\u0823"+ + "\u0005.\u0000\u0000\u0823\u0825\u0005P\u0000\u0000\u0824\u0817\u0001\u0000"+ + "\u0000\u0000\u0824\u081d\u0001\u0000\u0000\u0000\u0825\u01a8\u0001\u0000"+ + "\u0000\u0000\u0826\u0827\u0005C\u0000\u0000\u0827\u0828\u0005O\u0000\u0000"+ + "\u0828\u0829\u0005V\u0000\u0000\u0829\u082a\u0005A\u0000\u0000\u082a\u0838"+ + "\u0005R\u0000\u0000\u082b\u082c\u0005C\u0000\u0000\u082c\u082d\u0005O"+ + "\u0000\u0000\u082d\u082e\u0005V\u0000\u0000\u082e\u082f\u0005A\u0000\u0000"+ + "\u082f\u0830\u0005R\u0000\u0000\u0830\u0831\u0005I\u0000\u0000\u0831\u0832"+ + "\u0005A\u0000\u0000\u0832\u0833\u0005N\u0000\u0000\u0833\u0834\u0005C"+ + "\u0000\u0000\u0834\u0835\u0005E\u0000\u0000\u0835\u0836\u0005.\u0000\u0000"+ + "\u0836\u0838\u0005P\u0000\u0000\u0837\u0826\u0001\u0000\u0000\u0000\u0837"+ + "\u082b\u0001\u0000\u0000\u0000\u0838\u01aa\u0001\u0000\u0000\u0000\u0839"+ + "\u083a\u0005C\u0000\u0000\u083a\u083b\u0005O\u0000\u0000\u083b\u083c\u0005"+ + "V\u0000\u0000\u083c\u083d\u0005A\u0000\u0000\u083d\u083e\u0005R\u0000"+ + "\u0000\u083e\u083f\u0005I\u0000\u0000\u083f\u0840\u0005A\u0000\u0000\u0840"+ + "\u0841\u0005N\u0000\u0000\u0841\u0842\u0005C\u0000\u0000\u0842\u0843\u0005"+ + "E\u0000\u0000\u0843\u0844\u0005.\u0000\u0000\u0844\u0845\u0005S\u0000"+ + "\u0000\u0845\u01ac\u0001\u0000\u0000\u0000\u0846\u0847\u0005D\u0000\u0000"+ + "\u0847\u0848\u0005E\u0000\u0000\u0848\u0849\u0005V\u0000\u0000\u0849\u084a"+ + "\u0005S\u0000\u0000\u084a\u084b\u0005Q\u0000\u0000\u084b\u01ae\u0001\u0000"+ + "\u0000\u0000\u084c\u084d\u0005V\u0000\u0000\u084d\u084e\u0005A\u0000\u0000"+ + "\u084e\u0855\u0005R\u0000\u0000\u084f\u0850\u0005V\u0000\u0000\u0850\u0851"+ + "\u0005A\u0000\u0000\u0851\u0852\u0005R\u0000\u0000\u0852\u0853\u0005."+ + "\u0000\u0000\u0853\u0855\u0005S\u0000\u0000\u0854\u084c\u0001\u0000\u0000"+ + "\u0000\u0854\u084f\u0001\u0000\u0000\u0000\u0855\u01b0\u0001\u0000\u0000"+ + "\u0000\u0856\u0857\u0005V\u0000\u0000\u0857\u0858\u0005A\u0000\u0000\u0858"+ + "\u0859\u0005R\u0000\u0000\u0859\u0860\u0005P\u0000\u0000\u085a\u085b\u0005"+ + "V\u0000\u0000\u085b\u085c\u0005A\u0000\u0000\u085c\u085d\u0005R\u0000"+ + "\u0000\u085d\u085e\u0005.\u0000\u0000\u085e\u0860\u0005P\u0000\u0000\u085f"+ + "\u0856\u0001\u0000\u0000\u0000\u085f\u085a\u0001\u0000\u0000\u0000\u0860"+ + "\u01b2\u0001\u0000\u0000\u0000\u0861\u0862\u0005N\u0000\u0000\u0862\u0863"+ + "\u0005O\u0000\u0000\u0863\u0864\u0005R\u0000\u0000\u0864\u0865\u0005M"+ + "\u0000\u0000\u0865\u0866\u0005D\u0000\u0000\u0866\u0867\u0005I\u0000\u0000"+ + "\u0867\u0868\u0005S\u0000\u0000\u0868\u0873\u0005T\u0000\u0000\u0869\u086a"+ + "\u0005N\u0000\u0000\u086a\u086b\u0005O\u0000\u0000\u086b\u086c\u0005R"+ + "\u0000\u0000\u086c\u086d\u0005M\u0000\u0000\u086d\u086e\u0005.\u0000\u0000"+ + "\u086e\u086f\u0005D\u0000\u0000\u086f\u0870\u0005I\u0000\u0000\u0870\u0871"+ + "\u0005S\u0000\u0000\u0871\u0873\u0005T\u0000\u0000\u0872\u0861\u0001\u0000"+ + "\u0000\u0000\u0872\u0869\u0001\u0000\u0000\u0000\u0873\u01b4\u0001\u0000"+ + "\u0000\u0000\u0874\u0875\u0005N\u0000\u0000\u0875\u0876\u0005O\u0000\u0000"+ + "\u0876\u0877\u0005R\u0000\u0000\u0877\u0878\u0005M\u0000\u0000\u0878\u0879"+ + "\u0005I\u0000\u0000\u0879\u087a\u0005N\u0000\u0000\u087a\u0884\u0005V"+ + "\u0000\u0000\u087b\u087c\u0005N\u0000\u0000\u087c\u087d\u0005O\u0000\u0000"+ + "\u087d\u087e\u0005R\u0000\u0000\u087e\u087f\u0005M\u0000\u0000\u087f\u0880"+ + "\u0005.\u0000\u0000\u0880\u0881\u0005I\u0000\u0000\u0881\u0882\u0005N"+ + "\u0000\u0000\u0882\u0884\u0005V\u0000\u0000\u0883\u0874\u0001\u0000\u0000"+ + "\u0000\u0883\u087b\u0001\u0000\u0000\u0000\u0884\u01b6\u0001\u0000\u0000"+ + "\u0000\u0885\u0886\u0005N\u0000\u0000\u0886\u0887\u0005O\u0000\u0000\u0887"+ + "\u0888\u0005R\u0000\u0000\u0888\u0889\u0005M\u0000\u0000\u0889\u088a\u0005"+ + "S\u0000\u0000\u088a\u088b\u0005D\u0000\u0000\u088b\u088c\u0005I\u0000"+ + "\u0000\u088c\u088d\u0005S\u0000\u0000\u088d\u089a\u0005T\u0000\u0000\u088e"+ + "\u088f\u0005N\u0000\u0000\u088f\u0890\u0005O\u0000\u0000\u0890\u0891\u0005"+ + "R\u0000\u0000\u0891\u0892\u0005M\u0000\u0000\u0892\u0893\u0005.\u0000"+ + "\u0000\u0893\u0894\u0005S\u0000\u0000\u0894\u0895\u0005.\u0000\u0000\u0895"+ + "\u0896\u0005D\u0000\u0000\u0896\u0897\u0005I\u0000\u0000\u0897\u0898\u0005"+ + "S\u0000\u0000\u0898\u089a\u0005T\u0000\u0000\u0899\u0885\u0001\u0000\u0000"+ + "\u0000\u0899\u088e\u0001\u0000\u0000\u0000\u089a\u01b8\u0001\u0000\u0000"+ + "\u0000\u089b\u089c\u0005N\u0000\u0000\u089c\u089d\u0005O\u0000\u0000\u089d"+ + "\u089e\u0005R\u0000\u0000\u089e\u089f\u0005M\u0000\u0000\u089f\u08a0\u0005"+ + "S\u0000\u0000\u08a0\u08a1\u0005I\u0000\u0000\u08a1\u08a2\u0005N\u0000"+ + "\u0000\u08a2\u08ae\u0005V\u0000\u0000\u08a3\u08a4\u0005N\u0000\u0000\u08a4"+ + "\u08a5\u0005O\u0000\u0000\u08a5\u08a6\u0005R\u0000\u0000\u08a6\u08a7\u0005"+ + "M\u0000\u0000\u08a7\u08a8\u0005.\u0000\u0000\u08a8\u08a9\u0005S\u0000"+ + "\u0000\u08a9\u08aa\u0005.\u0000\u0000\u08aa\u08ab\u0005I\u0000\u0000\u08ab"+ + "\u08ac\u0005N\u0000\u0000\u08ac\u08ae\u0005V\u0000\u0000\u08ad\u089b\u0001"+ + "\u0000\u0000\u0000\u08ad\u08a3\u0001\u0000\u0000\u0000\u08ae\u01ba\u0001"+ + "\u0000\u0000\u0000\u08af\u08b0\u0005B\u0000\u0000\u08b0\u08b1\u0005E\u0000"+ + "\u0000\u08b1\u08b2\u0005T\u0000\u0000\u08b2\u08b3\u0005A\u0000\u0000\u08b3"+ + "\u08b4\u0005D\u0000\u0000\u08b4\u08b5\u0005I\u0000\u0000\u08b5\u08b6\u0005"+ + "S\u0000\u0000\u08b6\u08c1\u0005T\u0000\u0000\u08b7\u08b8\u0005B\u0000"+ + "\u0000\u08b8\u08b9\u0005E\u0000\u0000\u08b9\u08ba\u0005T\u0000\u0000\u08ba"+ + "\u08bb\u0005A\u0000\u0000\u08bb\u08bc\u0005.\u0000\u0000\u08bc\u08bd\u0005"+ + "D\u0000\u0000\u08bd\u08be\u0005I\u0000\u0000\u08be\u08bf\u0005S\u0000"+ + "\u0000\u08bf\u08c1\u0005T\u0000\u0000\u08c0\u08af\u0001\u0000\u0000\u0000"+ + "\u08c0\u08b7\u0001\u0000\u0000\u0000\u08c1\u01bc\u0001\u0000\u0000\u0000"+ + "\u08c2\u08c3\u0005B\u0000\u0000\u08c3\u08c4\u0005E\u0000\u0000\u08c4\u08c5"+ + "\u0005T\u0000\u0000\u08c5\u08c6\u0005A\u0000\u0000\u08c6\u08c7\u0005I"+ + "\u0000\u0000\u08c7\u08c8\u0005N\u0000\u0000\u08c8\u08d2\u0005V\u0000\u0000"+ + "\u08c9\u08ca\u0005B\u0000\u0000\u08ca\u08cb\u0005E\u0000\u0000\u08cb\u08cc"+ + "\u0005T\u0000\u0000\u08cc\u08cd\u0005A\u0000\u0000\u08cd\u08ce\u0005."+ + "\u0000\u0000\u08ce\u08cf\u0005I\u0000\u0000\u08cf\u08d0\u0005N\u0000\u0000"+ + "\u08d0\u08d2\u0005V\u0000\u0000\u08d1\u08c2\u0001\u0000\u0000\u0000\u08d1"+ + "\u08c9\u0001\u0000\u0000\u0000\u08d2\u01be\u0001\u0000\u0000\u0000\u08d3"+ + "\u08d4\u0005B\u0000\u0000\u08d4\u08d5\u0005I\u0000\u0000\u08d5\u08d6\u0005"+ + "N\u0000\u0000\u08d6\u08d7\u0005O\u0000\u0000\u08d7\u08d8\u0005M\u0000"+ + "\u0000\u08d8\u08d9\u0005D\u0000\u0000\u08d9\u08da\u0005I\u0000\u0000\u08da"+ + "\u08db\u0005S\u0000\u0000\u08db\u08e7\u0005T\u0000\u0000\u08dc\u08dd\u0005"+ + "B\u0000\u0000\u08dd\u08de\u0005I\u0000\u0000\u08de\u08df\u0005N\u0000"+ + "\u0000\u08df\u08e0\u0005O\u0000\u0000\u08e0\u08e1\u0005M\u0000\u0000\u08e1"+ + "\u08e2\u0005.\u0000\u0000\u08e2\u08e3\u0005D\u0000\u0000\u08e3\u08e4\u0005"+ + "I\u0000\u0000\u08e4\u08e5\u0005S\u0000\u0000\u08e5\u08e7\u0005T\u0000"+ + "\u0000\u08e6\u08d3\u0001\u0000\u0000\u0000\u08e6\u08dc\u0001\u0000\u0000"+ + "\u0000\u08e7\u01c0\u0001\u0000\u0000\u0000\u08e8\u08e9\u0005E\u0000\u0000"+ + "\u08e9\u08ea\u0005X\u0000\u0000\u08ea\u08eb\u0005P\u0000\u0000\u08eb\u08ec"+ + "\u0005O\u0000\u0000\u08ec\u08ed\u0005N\u0000\u0000\u08ed\u08ee\u0005D"+ + "\u0000\u0000\u08ee\u08ef\u0005I\u0000\u0000\u08ef\u08f0\u0005S\u0000\u0000"+ + "\u08f0\u08fc\u0005T\u0000\u0000\u08f1\u08f2\u0005E\u0000\u0000\u08f2\u08f3"+ + "\u0005X\u0000\u0000\u08f3\u08f4\u0005P\u0000\u0000\u08f4\u08f5\u0005O"+ + "\u0000\u0000\u08f5\u08f6\u0005N\u0000\u0000\u08f6\u08f7\u0005.\u0000\u0000"+ + "\u08f7\u08f8\u0005D\u0000\u0000\u08f8\u08f9\u0005I\u0000\u0000\u08f9\u08fa"+ + "\u0005S\u0000\u0000\u08fa\u08fc\u0005T\u0000\u0000\u08fb\u08e8\u0001\u0000"+ + "\u0000\u0000\u08fb\u08f1\u0001\u0000\u0000\u0000\u08fc\u01c2\u0001\u0000"+ + "\u0000\u0000\u08fd\u08fe\u0005F\u0000\u0000\u08fe\u08ff\u0005D\u0000\u0000"+ + "\u08ff\u0900\u0005I\u0000\u0000\u0900\u0901\u0005S\u0000\u0000\u0901\u0909"+ + "\u0005T\u0000\u0000\u0902\u0903\u0005F\u0000\u0000\u0903\u0904\u0005."+ + "\u0000\u0000\u0904\u0905\u0005D\u0000\u0000\u0905\u0906\u0005I\u0000\u0000"+ + "\u0906\u0907\u0005S\u0000\u0000\u0907\u0909\u0005T\u0000\u0000\u0908\u08fd"+ + "\u0001\u0000\u0000\u0000\u0908\u0902\u0001\u0000\u0000\u0000\u0909\u01c4"+ + "\u0001\u0000\u0000\u0000\u090a\u090b\u0005F\u0000\u0000\u090b\u090c\u0005"+ + "I\u0000\u0000\u090c\u090d\u0005N\u0000\u0000\u090d\u0914\u0005V\u0000"+ + "\u0000\u090e\u090f\u0005F\u0000\u0000\u090f\u0910\u0005.\u0000\u0000\u0910"+ + "\u0911\u0005I\u0000\u0000\u0911\u0912\u0005N\u0000\u0000\u0912\u0914\u0005"+ + "V\u0000\u0000\u0913\u090a\u0001\u0000\u0000\u0000\u0913\u090e\u0001\u0000"+ + "\u0000\u0000\u0914\u01c6\u0001\u0000\u0000\u0000\u0915\u0916\u0005F\u0000"+ + "\u0000\u0916\u0917\u0005I\u0000\u0000\u0917\u0918\u0005S\u0000\u0000\u0918"+ + "\u0919\u0005H\u0000\u0000\u0919\u091a\u0005E\u0000\u0000\u091a\u091b\u0005"+ + "R\u0000\u0000\u091b\u01c8\u0001\u0000\u0000\u0000\u091c\u091d\u0005F\u0000"+ + "\u0000\u091d\u091e\u0005I\u0000\u0000\u091e\u091f\u0005S\u0000\u0000\u091f"+ + "\u0920\u0005H\u0000\u0000\u0920\u0921\u0005E\u0000\u0000\u0921\u0922\u0005"+ + "R\u0000\u0000\u0922\u0923\u0005I\u0000\u0000\u0923\u0924\u0005N\u0000"+ + "\u0000\u0924\u0925\u0005V\u0000\u0000\u0925\u01ca\u0001\u0000\u0000\u0000"+ + "\u0926\u0927\u0005G\u0000\u0000\u0927\u0928\u0005A\u0000\u0000\u0928\u0929"+ + "\u0005M\u0000\u0000\u0929\u092a\u0005M\u0000\u0000\u092a\u092b\u0005A"+ + "\u0000\u0000\u092b\u092c\u0005D\u0000\u0000\u092c\u092d\u0005I\u0000\u0000"+ + "\u092d\u092e\u0005S\u0000\u0000\u092e\u093a\u0005T\u0000\u0000\u092f\u0930"+ + "\u0005G\u0000\u0000\u0930\u0931\u0005A\u0000\u0000\u0931\u0932\u0005M"+ + "\u0000\u0000\u0932\u0933\u0005M\u0000\u0000\u0933\u0934\u0005A\u0000\u0000"+ + "\u0934\u0935\u0005.\u0000\u0000\u0935\u0936\u0005D\u0000\u0000\u0936\u0937"+ + "\u0005I\u0000\u0000\u0937\u0938\u0005S\u0000\u0000\u0938\u093a\u0005T"+ + "\u0000\u0000\u0939\u0926\u0001\u0000\u0000\u0000\u0939\u092f\u0001\u0000"+ + "\u0000\u0000\u093a\u01cc\u0001\u0000\u0000\u0000\u093b\u093c\u0005G\u0000"+ + "\u0000\u093c\u093d\u0005A\u0000\u0000\u093d\u093e\u0005M\u0000\u0000\u093e"+ "\u093f\u0005M\u0000\u0000\u093f\u0940\u0005A\u0000\u0000\u0940\u0941\u0005"+ - "C\u0000\u0000\u0941\u0942\u0005M\u0000\u0000\u0942\u0943\u0005D\u0000"+ - "\u0000\u0943\u0944\u00055\u0000\u0000\u0944\u01ba\u0001\u0000\u0000\u0000"+ - "\u0945\u0946\u0005H\u0000\u0000\u0946\u0947\u0005M\u0000\u0000\u0947\u0948"+ - "\u0005A\u0000\u0000\u0948\u0949\u0005C\u0000\u0000\u0949\u094a\u0005S"+ - "\u0000\u0000\u094a\u094b\u0005H\u0000\u0000\u094b\u094c\u0005A\u0000\u0000"+ - "\u094c\u094d\u00051\u0000\u0000\u094d\u01bc\u0001\u0000\u0000\u0000\u094e"+ - "\u094f\u0005H\u0000\u0000\u094f\u0950\u0005M\u0000\u0000\u0950\u0951\u0005"+ - "A\u0000\u0000\u0951\u0952\u0005C\u0000\u0000\u0952\u0953\u0005S\u0000"+ - "\u0000\u0953\u0954\u0005H\u0000\u0000\u0954\u0955\u0005A\u0000\u0000\u0955"+ - "\u0956\u00052\u0000\u0000\u0956\u0957\u00055\u0000\u0000\u0957\u0958\u0005"+ - "6\u0000\u0000\u0958\u01be\u0001\u0000\u0000\u0000\u0959\u095a\u0005H\u0000"+ - "\u0000\u095a\u095b\u0005M\u0000\u0000\u095b\u095c\u0005A\u0000\u0000\u095c"+ - "\u095d\u0005C\u0000\u0000\u095d\u095e\u0005S\u0000\u0000\u095e\u095f\u0005"+ - "H\u0000\u0000\u095f\u0960\u0005A\u0000\u0000\u0960\u0961\u00055\u0000"+ - "\u0000\u0961\u0962\u00051\u0000\u0000\u0962\u0963\u00052\u0000\u0000\u0963"+ - "\u01c0\u0001\u0000\u0000\u0000\u0964\u0965\u0005T\u0000\u0000\u0965\u0966"+ - "\u0005R\u0000\u0000\u0966\u0967\u0005I\u0000\u0000\u0967\u0968\u0005M"+ - "\u0000\u0000\u0968\u0969\u0005S\u0000\u0000\u0969\u096a\u0005T\u0000\u0000"+ - "\u096a\u096b\u0005A\u0000\u0000\u096b\u096c\u0005R\u0000\u0000\u096c\u0973"+ - "\u0005T\u0000\u0000\u096d\u096e\u0005L\u0000\u0000\u096e\u096f\u0005T"+ - "\u0000\u0000\u096f\u0970\u0005R\u0000\u0000\u0970\u0971\u0005I\u0000\u0000"+ - "\u0971\u0973\u0005M\u0000\u0000\u0972\u0964\u0001\u0000\u0000\u0000\u0972"+ - "\u096d\u0001\u0000\u0000\u0000\u0973\u01c2\u0001\u0000\u0000\u0000\u0974"+ - "\u0975\u0005T\u0000\u0000\u0975\u0976\u0005R\u0000\u0000\u0976\u0977\u0005"+ - "I\u0000\u0000\u0977\u0978\u0005M\u0000\u0000\u0978\u0979\u0005E\u0000"+ - "\u0000\u0979\u097a\u0005N\u0000\u0000\u097a\u0981\u0005D\u0000\u0000\u097b"+ - "\u097c\u0005R\u0000\u0000\u097c\u097d\u0005T\u0000\u0000\u097d\u097e\u0005"+ - "R\u0000\u0000\u097e\u097f\u0005I\u0000\u0000\u097f\u0981\u0005M\u0000"+ - "\u0000\u0980\u0974\u0001\u0000\u0000\u0000\u0980\u097b\u0001\u0000\u0000"+ - "\u0000\u0981\u01c4\u0001\u0000\u0000\u0000\u0982\u0983\u0005I\u0000\u0000"+ - "\u0983\u0984\u0005N\u0000\u0000\u0984\u0985\u0005D\u0000\u0000\u0985\u0986"+ - "\u0005E\u0000\u0000\u0986\u0987\u0005X\u0000\u0000\u0987\u0988\u0005O"+ - "\u0000\u0000\u0988\u0989\u0005F\u0000\u0000\u0989\u01c6\u0001\u0000\u0000"+ - "\u0000\u098a\u098b\u0005L\u0000\u0000\u098b\u098c\u0005A\u0000\u0000\u098c"+ - "\u098d\u0005S\u0000\u0000\u098d\u098e\u0005T\u0000\u0000\u098e\u098f\u0005"+ - "I\u0000\u0000\u098f\u0990\u0005N\u0000\u0000\u0990\u0991\u0005D\u0000"+ - "\u0000\u0991\u0992\u0005E\u0000\u0000\u0992\u0993\u0005X\u0000\u0000\u0993"+ - "\u0994\u0005O\u0000\u0000\u0994\u0995\u0005F\u0000\u0000\u0995\u01c8\u0001"+ - "\u0000\u0000\u0000\u0996\u0997\u0005S\u0000\u0000\u0997\u0998\u0005P\u0000"+ - "\u0000\u0998\u0999\u0005L\u0000\u0000\u0999\u099a\u0005I\u0000\u0000\u099a"+ - "\u099b\u0005T\u0000\u0000\u099b\u01ca\u0001\u0000\u0000\u0000\u099c\u099d"+ - "\u0005J\u0000\u0000\u099d\u099e\u0005O\u0000\u0000\u099e\u099f\u0005I"+ - "\u0000\u0000\u099f\u09a0\u0005N\u0000\u0000\u09a0\u01cc\u0001\u0000\u0000"+ - "\u0000\u09a1\u09a2\u0005S\u0000\u0000\u09a2\u09a3\u0005U\u0000\u0000\u09a3"+ - "\u09a4\u0005B\u0000\u0000\u09a4\u09a5\u0005S\u0000\u0000\u09a5\u09a6\u0005"+ - "T\u0000\u0000\u09a6\u09a7\u0005R\u0000\u0000\u09a7\u09a8\u0005I\u0000"+ - "\u0000\u09a8\u09a9\u0005N\u0000\u0000\u09a9\u09aa\u0005G\u0000\u0000\u09aa"+ - "\u01ce\u0001\u0000\u0000\u0000\u09ab\u09ac\u0005S\u0000\u0000\u09ac\u09ad"+ - "\u0005T\u0000\u0000\u09ad\u09ae\u0005A\u0000\u0000\u09ae\u09af\u0005R"+ - "\u0000\u0000\u09af\u09b0\u0005T\u0000\u0000\u09b0\u09b1\u0005S\u0000\u0000"+ - "\u09b1\u09b2\u0005W\u0000\u0000\u09b2\u09b3\u0005I\u0000\u0000\u09b3\u09b4"+ - "\u0005T\u0000\u0000\u09b4\u09b5\u0005H\u0000\u0000\u09b5\u01d0\u0001\u0000"+ - "\u0000\u0000\u09b6\u09b7\u0005E\u0000\u0000\u09b7\u09b8\u0005N\u0000\u0000"+ - "\u09b8\u09b9\u0005D\u0000\u0000\u09b9\u09ba\u0005S\u0000\u0000\u09ba\u09bb"+ - "\u0005W\u0000\u0000\u09bb\u09bc\u0005I\u0000\u0000\u09bc\u09bd\u0005T"+ - "\u0000\u0000\u09bd\u09be\u0005H\u0000\u0000\u09be\u01d2\u0001\u0000\u0000"+ - "\u0000\u09bf\u09c0\u0005I\u0000\u0000\u09c0\u09c1\u0005S\u0000\u0000\u09c1"+ - "\u09c2\u0005N\u0000\u0000\u09c2\u09c3\u0005U\u0000\u0000\u09c3\u09c4\u0005"+ - "L\u0000\u0000\u09c4\u09c5\u0005L\u0000\u0000\u09c5\u09c6\u0005O\u0000"+ - "\u0000\u09c6\u09c7\u0005R\u0000\u0000\u09c7\u09c8\u0005E\u0000\u0000\u09c8"+ - "\u09c9\u0005M\u0000\u0000\u09c9\u09ca\u0005P\u0000\u0000\u09ca\u09cb\u0005"+ - "T\u0000\u0000\u09cb\u09cc\u0005Y\u0000\u0000\u09cc\u01d4\u0001\u0000\u0000"+ - "\u0000\u09cd\u09ce\u0005I\u0000\u0000\u09ce\u09cf\u0005S\u0000\u0000\u09cf"+ - "\u09d0\u0005N\u0000\u0000\u09d0\u09d1\u0005U\u0000\u0000\u09d1\u09d2\u0005"+ - "L\u0000\u0000\u09d2\u09d3\u0005L\u0000\u0000\u09d3\u09d4\u0005O\u0000"+ - "\u0000\u09d4\u09d5\u0005R\u0000"; + "I\u0000\u0000\u0941\u0942\u0005N\u0000\u0000"; private static final String _serializedATNSegment1 = - "\u0000\u09d5\u09d6\u0005W\u0000\u0000\u09d6\u09d7\u0005H\u0000\u0000\u09d7"+ - "\u09d8\u0005I\u0000\u0000\u09d8\u09d9\u0005T\u0000\u0000\u09d9\u09da\u0005"+ - "E\u0000\u0000\u09da\u09db\u0005S\u0000\u0000\u09db\u09dc\u0005P\u0000"+ - "\u0000\u09dc\u09dd\u0005A\u0000\u0000\u09dd\u09de\u0005C\u0000\u0000\u09de"+ - "\u09df\u0005E\u0000\u0000\u09df\u01d6\u0001\u0000\u0000\u0000\u09e0\u09e1"+ - "\u0005R\u0000\u0000\u09e1\u09e2\u0005E\u0000\u0000\u09e2\u09e3\u0005M"+ - "\u0000\u0000\u09e3\u09e4\u0005O\u0000\u0000\u09e4\u09e5\u0005V\u0000\u0000"+ - "\u09e5\u09e6\u0005E\u0000\u0000\u09e6\u09e7\u0005S\u0000\u0000\u09e7\u09e8"+ - "\u0005T\u0000\u0000\u09e8\u09e9\u0005A\u0000\u0000\u09e9\u09ea\u0005R"+ - "\u0000\u0000\u09ea\u09eb\u0005T\u0000\u0000\u09eb\u01d8\u0001\u0000\u0000"+ - "\u0000\u09ec\u09ed\u0005R\u0000\u0000\u09ed\u09ee\u0005E\u0000\u0000\u09ee"+ - "\u09ef\u0005M\u0000\u0000\u09ef\u09f0\u0005O\u0000\u0000\u09f0\u09f1\u0005"+ - "V\u0000\u0000\u09f1\u09f2\u0005E\u0000\u0000\u09f2\u09f3\u0005E\u0000"+ - "\u0000\u09f3\u09f4\u0005N\u0000\u0000\u09f4\u09f5\u0005D\u0000\u0000\u09f5"+ - "\u01da\u0001\u0000\u0000\u0000\u09f6\u09f7\u0005J\u0000\u0000\u09f7\u09f8"+ - "\u0005S\u0000\u0000\u09f8\u09f9\u0005O\u0000\u0000\u09f9\u09fa\u0005N"+ - "\u0000\u0000\u09fa\u01dc\u0001\u0000\u0000\u0000\u09fb\u09fc\u0005L\u0000"+ - "\u0000\u09fc\u09fd\u0005O\u0000\u0000\u09fd\u09fe\u0005O\u0000\u0000\u09fe"+ - "\u09ff\u0005K\u0000\u0000\u09ff\u0a00\u0005C\u0000\u0000\u0a00\u0a01\u0005"+ - "E\u0000\u0000\u0a01\u0a02\u0005I\u0000\u0000\u0a02\u0a03\u0005L\u0000"+ - "\u0000\u0a03\u0a04\u0005I\u0000\u0000\u0a04\u0a05\u0005N\u0000\u0000\u0a05"+ - "\u0a06\u0005G\u0000\u0000\u0a06\u01de\u0001\u0000\u0000\u0000\u0a07\u0a08"+ - "\u0005L\u0000\u0000\u0a08\u0a09\u0005O\u0000\u0000\u0a09\u0a0a\u0005O"+ - "\u0000\u0000\u0a0a\u0a0b\u0005K\u0000\u0000\u0a0b\u0a0c\u0005F\u0000\u0000"+ - "\u0a0c\u0a0d\u0005L\u0000\u0000\u0a0d\u0a0e\u0005O\u0000\u0000\u0a0e\u0a0f"+ - "\u0005O\u0000\u0000\u0a0f\u0a10\u0005R\u0000\u0000\u0a10\u01e0\u0001\u0000"+ - "\u0000\u0000\u0a11\u0a12\u0005A\u0000\u0000\u0a12\u0a13\u0005R\u0000\u0000"+ - "\u0a13\u0a14\u0005R\u0000\u0000\u0a14\u0a15\u0005A\u0000\u0000\u0a15\u0a16"+ - "\u0005Y\u0000\u0000\u0a16\u01e2\u0001\u0000\u0000\u0000\u0a17\u0a18\u0005"+ - "A\u0000\u0000\u0a18\u0a19\u0005L\u0000\u0000\u0a19\u0a1a\u0005G\u0000"+ - "\u0000\u0a1a\u0a1b\u0005O\u0000\u0000\u0a1b\u0a1c\u0005R\u0000\u0000\u0a1c"+ - "\u0a1d\u0005I\u0000\u0000\u0a1d\u0a1e\u0005T\u0000\u0000\u0a1e\u0a1f\u0005"+ - "H\u0000\u0000\u0a1f\u0a20\u0005M\u0000\u0000\u0a20\u0a21\u0005V\u0000"+ - "\u0000\u0a21\u0a22\u0005E\u0000\u0000\u0a22\u0a23\u0005R\u0000\u0000\u0a23"+ - "\u0a24\u0005S\u0000\u0000\u0a24\u0a25\u0005I\u0000\u0000\u0a25\u0a26\u0005"+ - "O\u0000\u0000\u0a26\u0a35\u0005N\u0000\u0000\u0a27\u0a28\u0005E\u0000"+ - "\u0000\u0a28\u0a29\u0005N\u0000\u0000\u0a29\u0a2a\u0005G\u0000\u0000\u0a2a"+ - "\u0a2b\u0005I\u0000\u0000\u0a2b\u0a2c\u0005N\u0000\u0000\u0a2c\u0a2d\u0005"+ - "E\u0000\u0000\u0a2d\u0a2e\u0005V\u0000\u0000\u0a2e\u0a2f\u0005E\u0000"+ - "\u0000\u0a2f\u0a30\u0005R\u0000\u0000\u0a30\u0a31\u0005S\u0000\u0000\u0a31"+ - "\u0a32\u0005I\u0000\u0000\u0a32\u0a33\u0005O\u0000\u0000\u0a33\u0a35\u0005"+ - "N\u0000\u0000\u0a34\u0a17\u0001\u0000\u0000\u0000\u0a34\u0a27\u0001\u0000"+ - "\u0000\u0000\u0a35\u01e4\u0001\u0000\u0000\u0000\u0a36\u0a37\u0005A\u0000"+ - "\u0000\u0a37\u0a38\u0005D\u0000\u0000\u0a38\u0a39\u0005D\u0000\u0000\u0a39"+ - "\u0a3a\u0005Y\u0000\u0000\u0a3a\u0a3b\u0005E\u0000\u0000\u0a3b\u0a3c\u0005"+ - "A\u0000\u0000\u0a3c\u0a3d\u0005R\u0000\u0000\u0a3d\u0a3e\u0005S\u0000"+ - "\u0000\u0a3e\u01e6\u0001\u0000\u0000\u0000\u0a3f\u0a40\u0005A\u0000\u0000"+ - "\u0a40\u0a41\u0005D\u0000\u0000\u0a41\u0a42\u0005D\u0000\u0000\u0a42\u0a43"+ - "\u0005M\u0000\u0000\u0a43\u0a44\u0005O\u0000\u0000\u0a44\u0a45\u0005N"+ - "\u0000\u0000\u0a45\u0a46\u0005T\u0000\u0000\u0a46\u0a47\u0005H\u0000\u0000"+ - "\u0a47\u0a48\u0005S\u0000\u0000\u0a48\u01e8\u0001\u0000\u0000\u0000\u0a49"+ - "\u0a4a\u0005A\u0000\u0000\u0a4a\u0a4b\u0005D\u0000\u0000\u0a4b\u0a4c\u0005"+ - "D\u0000\u0000\u0a4c\u0a4d\u0005D\u0000\u0000\u0a4d\u0a4e\u0005A\u0000"+ - "\u0000\u0a4e\u0a4f\u0005Y\u0000\u0000\u0a4f\u0a50\u0005S\u0000\u0000\u0a50"+ - "\u01ea\u0001\u0000\u0000\u0000\u0a51\u0a52\u0005A\u0000\u0000\u0a52\u0a53"+ - "\u0005D\u0000\u0000\u0a53\u0a54\u0005D\u0000\u0000\u0a54\u0a55\u0005H"+ - "\u0000\u0000\u0a55\u0a56\u0005O\u0000\u0000\u0a56\u0a57\u0005U\u0000\u0000"+ - "\u0a57\u0a58\u0005R\u0000\u0000\u0a58\u0a59\u0005S\u0000\u0000\u0a59\u01ec"+ - "\u0001\u0000\u0000\u0000\u0a5a\u0a5b\u0005A\u0000\u0000\u0a5b\u0a5c\u0005"+ - "D\u0000\u0000\u0a5c\u0a5d\u0005D\u0000\u0000\u0a5d\u0a5e\u0005M\u0000"+ - "\u0000\u0a5e\u0a5f\u0005I\u0000\u0000\u0a5f\u0a60\u0005N\u0000\u0000\u0a60"+ - "\u0a61\u0005U\u0000\u0000\u0a61\u0a62\u0005T\u0000\u0000\u0a62\u0a63\u0005"+ - "E\u0000\u0000\u0a63\u0a64\u0005S\u0000\u0000\u0a64\u01ee\u0001\u0000\u0000"+ - "\u0000\u0a65\u0a66\u0005A\u0000\u0000\u0a66\u0a67\u0005D\u0000\u0000\u0a67"+ - "\u0a68\u0005D\u0000\u0000\u0a68\u0a69\u0005S\u0000\u0000\u0a69\u0a6a\u0005"+ - "E\u0000\u0000\u0a6a\u0a6b\u0005C\u0000\u0000\u0a6b\u0a6c\u0005O\u0000"+ - "\u0000\u0a6c\u0a6d\u0005N\u0000\u0000\u0a6d\u0a6e\u0005D\u0000\u0000\u0a6e"+ - "\u0a6f\u0005S\u0000\u0000\u0a6f\u01f0\u0001\u0000\u0000\u0000\u0a70\u0a71"+ - "\u0005T\u0000\u0000\u0a71\u0a72\u0005I\u0000\u0000\u0a72\u0a73\u0005M"+ - "\u0000\u0000\u0a73\u0a74\u0005E\u0000\u0000\u0a74\u0a75\u0005S\u0000\u0000"+ - "\u0a75\u0a76\u0005T\u0000\u0000\u0a76\u0a77\u0005A\u0000\u0000\u0a77\u0a78"+ - "\u0005M\u0000\u0000\u0a78\u0a79\u0005P\u0000\u0000\u0a79\u01f2\u0001\u0000"+ - "\u0000\u0000\u0a7a\u0a7b\u0005H\u0000\u0000\u0a7b\u0a7c\u0005A\u0000\u0000"+ - "\u0a7c\u0a97\u0005S\u0000\u0000\u0a7d\u0a7e\u0005H\u0000\u0000\u0a7e\u0a7f"+ - "\u0005A\u0000\u0000\u0a7f\u0a80\u0005S\u0000\u0000\u0a80\u0a81\u0005K"+ - "\u0000\u0000\u0a81\u0a82\u0005E\u0000\u0000\u0a82\u0a97\u0005Y\u0000\u0000"+ - "\u0a83\u0a84\u0005C\u0000\u0000\u0a84\u0a85\u0005O\u0000\u0000\u0a85\u0a86"+ - "\u0005N\u0000\u0000\u0a86\u0a87\u0005T\u0000\u0000\u0a87\u0a88\u0005A"+ - "\u0000\u0000\u0a88\u0a89\u0005I\u0000\u0000\u0a89\u0a8a\u0005N\u0000\u0000"+ - "\u0a8a\u0a97\u0005S\u0000\u0000\u0a8b\u0a8c\u0005C\u0000\u0000\u0a8c\u0a8d"+ - "\u0005O\u0000\u0000\u0a8d\u0a8e\u0005N\u0000\u0000\u0a8e\u0a8f\u0005T"+ - "\u0000\u0000\u0a8f\u0a90\u0005A\u0000\u0000\u0a90\u0a91\u0005I\u0000\u0000"+ - "\u0a91\u0a92\u0005N\u0000\u0000\u0a92\u0a93\u0005S\u0000\u0000\u0a93\u0a94"+ - "\u0005K\u0000\u0000\u0a94\u0a95\u0005E\u0000\u0000\u0a95\u0a97\u0005Y"+ - "\u0000\u0000\u0a96\u0a7a\u0001\u0000\u0000\u0000\u0a96\u0a7d\u0001\u0000"+ - "\u0000\u0000\u0a96\u0a83\u0001\u0000\u0000\u0000\u0a96\u0a8b\u0001\u0000"+ - "\u0000\u0000\u0a97\u01f4\u0001\u0000\u0000\u0000\u0a98\u0a99\u0005H\u0000"+ - "\u0000\u0a99\u0a9a\u0005A\u0000\u0000\u0a9a\u0a9b\u0005S\u0000\u0000\u0a9b"+ - "\u0a9c\u0005V\u0000\u0000\u0a9c\u0a9d\u0005A\u0000\u0000\u0a9d\u0a9e\u0005"+ - "L\u0000\u0000\u0a9e\u0a9f\u0005U\u0000\u0000\u0a9f\u0aae\u0005E\u0000"+ - "\u0000\u0aa0\u0aa1\u0005C\u0000\u0000\u0aa1\u0aa2\u0005O\u0000\u0000\u0aa2"+ - "\u0aa3\u0005N\u0000\u0000\u0aa3\u0aa4\u0005T\u0000\u0000\u0aa4\u0aa5\u0005"+ - "A\u0000\u0000\u0aa5\u0aa6\u0005I\u0000\u0000\u0aa6\u0aa7\u0005N\u0000"+ - "\u0000\u0aa7\u0aa8\u0005S\u0000\u0000\u0aa8\u0aa9\u0005V\u0000\u0000\u0aa9"+ - "\u0aaa\u0005A\u0000\u0000\u0aaa\u0aab\u0005L\u0000\u0000\u0aab\u0aac\u0005"+ - "U\u0000\u0000\u0aac\u0aae\u0005E\u0000\u0000\u0aad\u0a98\u0001\u0000\u0000"+ - "\u0000\u0aad\u0aa0\u0001\u0000\u0000\u0000\u0aae\u01f6\u0001\u0000\u0000"+ - "\u0000\u0aaf\u0ab0\u0005P\u0000\u0000\u0ab0\u0ab1\u0005A\u0000\u0000\u0ab1"+ - "\u0ab2\u0005R\u0000\u0000\u0ab2\u0ab3\u0005A\u0000\u0000\u0ab3\u0aca\u0005"+ - "M\u0000\u0000\u0ab4\u0ab5\u0005P\u0000\u0000\u0ab5\u0ab6\u0005A\u0000"+ - "\u0000\u0ab6\u0ab7\u0005R\u0000\u0000\u0ab7\u0ab8\u0005A\u0000\u0000\u0ab8"+ - "\u0ab9\u0005M\u0000\u0000\u0ab9\u0aba\u0005E\u0000\u0000\u0aba\u0abb\u0005"+ - "T\u0000\u0000\u0abb\u0abc\u0005E\u0000\u0000\u0abc\u0aca\u0005R\u0000"+ - "\u0000\u0abd\u0abe\u0005G\u0000\u0000\u0abe\u0abf\u0005E\u0000\u0000\u0abf"+ - "\u0ac0\u0005T\u0000\u0000\u0ac0\u0ac1\u0005P\u0000\u0000\u0ac1\u0ac2\u0005"+ - "A\u0000\u0000\u0ac2\u0ac3\u0005R\u0000\u0000\u0ac3\u0ac4\u0005A\u0000"+ - "\u0000\u0ac4\u0ac5\u0005M\u0000\u0000\u0ac5\u0ac6\u0005E\u0000\u0000\u0ac6"+ - "\u0ac7\u0005T\u0000\u0000\u0ac7\u0ac8\u0005E\u0000\u0000\u0ac8\u0aca\u0005"+ - "R\u0000\u0000\u0ac9\u0aaf\u0001\u0000\u0000\u0000\u0ac9\u0ab4\u0001\u0000"+ - "\u0000\u0000\u0ac9\u0abd\u0001\u0000\u0000\u0000\u0aca\u01f8\u0001\u0000"+ - "\u0000\u0000\u0acb\u0ace\u0007\u0006\u0000\u0000\u0acc\u0ace\u0003\u01fb"+ - "\u00fd\u0000\u0acd\u0acb\u0001\u0000\u0000\u0000\u0acd\u0acc\u0001\u0000"+ - "\u0000\u0000\u0ace\u0ad3\u0001\u0000\u0000\u0000\u0acf\u0ad2\u0007\u0007"+ - "\u0000\u0000\u0ad0\u0ad2\u0003\u01fb\u00fd\u0000\u0ad1\u0acf\u0001\u0000"+ - "\u0000\u0000\u0ad1\u0ad0\u0001\u0000\u0000\u0000\u0ad2\u0ad5\u0001\u0000"+ - "\u0000\u0000\u0ad3\u0ad1\u0001\u0000\u0000\u0000\u0ad3\u0ad4\u0001\u0000"+ - "\u0000\u0000\u0ad4\u01fa\u0001\u0000\u0000\u0000\u0ad5\u0ad3\u0001\u0000"+ - "\u0000\u0000\u0ad6\u0ad7\u0007\b\u0000\u0000\u0ad7\u01fc\u0001\u0000\u0000"+ - "\u0000\u0ad8\u0ada\u0007\t\u0000\u0000\u0ad9\u0ad8\u0001\u0000\u0000\u0000"+ - "\u0ada\u0adb\u0001\u0000\u0000\u0000\u0adb\u0ad9\u0001\u0000\u0000\u0000"+ - "\u0adb\u0adc\u0001\u0000\u0000\u0000\u0adc\u0add\u0001\u0000\u0000\u0000"+ - "\u0add\u0ade\u0006\u00fe\u0000\u0000\u0ade\u01fe\u0001\u0000\u0000\u0000"+ - "\u0adf\u0ae0\u0005/\u0000\u0000\u0ae0\u0ae1\u0005*\u0000\u0000\u0ae1\u0ae5"+ - "\u0001\u0000\u0000\u0000\u0ae2\u0ae4\t\u0000\u0000\u0000\u0ae3\u0ae2\u0001"+ - "\u0000\u0000\u0000\u0ae4\u0ae7\u0001\u0000\u0000\u0000\u0ae5\u0ae6\u0001"+ - "\u0000\u0000\u0000\u0ae5\u0ae3\u0001\u0000\u0000\u0000\u0ae6\u0ae8\u0001"+ - "\u0000\u0000\u0000\u0ae7\u0ae5\u0001\u0000\u0000\u0000\u0ae8\u0ae9\u0005"+ - "*\u0000\u0000\u0ae9\u0aea\u0005/\u0000\u0000\u0aea\u0aeb\u0001\u0000\u0000"+ - "\u0000\u0aeb\u0aec\u0006\u00ff\u0000\u0000\u0aec\u0200\u0001\u0000\u0000"+ - "\u0000\u0aed\u0aee\u0005/\u0000\u0000\u0aee\u0aef\u0005/\u0000\u0000\u0aef"+ - "\u0af3\u0001\u0000\u0000\u0000\u0af0\u0af2\b\n\u0000\u0000\u0af1\u0af0"+ - "\u0001\u0000\u0000\u0000\u0af2\u0af5\u0001\u0000\u0000\u0000\u0af3\u0af1"+ - "\u0001\u0000\u0000\u0000\u0af3\u0af4\u0001\u0000\u0000\u0000\u0af4\u0af6"+ - "\u0001\u0000\u0000\u0000\u0af5\u0af3\u0001\u0000\u0000\u0000\u0af6\u0af7"+ - "\u0006\u0100\u0000\u0000\u0af7\u0202\u0001\u0000\u0000\u0000D\u0000\u024d"+ - "\u024f\u0255\u025c\u025e\u0265\u0267\u026d\u0274\u0276\u0278\u027c\u0280"+ - "\u0282\u0288\u028a\u0292\u0294\u029c\u029e\u02a2\u02da\u0347\u0350\u04e2"+ - "\u0526\u0574\u0649\u0665\u06b4\u06c3\u06d6\u06f3\u06fe\u0711\u0722\u0738"+ - "\u074c\u075f\u0770\u0785\u079a\u07a7\u07b2\u07d8\u07eb\u0803\u081c\u082f"+ - "\u0848\u0863\u0878\u0885\u0890\u091f\u0972\u0980\u0a34\u0a96\u0aad\u0ac9"+ - "\u0acd\u0ad1\u0ad3\u0adb\u0ae5\u0af3\u0001\u0006\u0000\u0000"; + "\u0942\u094d\u0005V\u0000\u0000\u0943\u0944\u0005G\u0000\u0000\u0944\u0945"+ + "\u0005A\u0000\u0000\u0945\u0946\u0005M\u0000\u0000\u0946\u0947\u0005M"+ + "\u0000\u0000\u0947\u0948\u0005A\u0000\u0000\u0948\u0949\u0005.\u0000\u0000"+ + "\u0949\u094a\u0005I\u0000\u0000\u094a\u094b\u0005N\u0000\u0000\u094b\u094d"+ + "\u0005V\u0000\u0000\u094c\u093b\u0001\u0000\u0000\u0000\u094c\u0943\u0001"+ + "\u0000\u0000\u0000\u094d\u01ce\u0001\u0000\u0000\u0000\u094e\u094f\u0005"+ + "G\u0000\u0000\u094f\u0950\u0005A\u0000\u0000\u0950\u0951\u0005M\u0000"+ + "\u0000\u0951\u0952\u0005M\u0000\u0000\u0952\u0953\u0005A\u0000\u0000\u0953"+ + "\u0954\u0005L\u0000\u0000\u0954\u0965\u0005N\u0000\u0000\u0955\u0956\u0005"+ + "G\u0000\u0000\u0956\u0957\u0005A\u0000\u0000\u0957\u0958\u0005M\u0000"+ + "\u0000\u0958\u0959\u0005M\u0000\u0000\u0959\u095a\u0005A\u0000\u0000\u095a"+ + "\u095b\u0005L\u0000\u0000\u095b\u095c\u0005N\u0000\u0000\u095c\u095d\u0005"+ + ".\u0000\u0000\u095d\u095e\u0005P\u0000\u0000\u095e\u095f\u0005R\u0000"+ + "\u0000\u095f\u0960\u0005E\u0000\u0000\u0960\u0961\u0005C\u0000\u0000\u0961"+ + "\u0962\u0005I\u0000\u0000\u0962\u0963\u0005S\u0000\u0000\u0963\u0965\u0005"+ + "E\u0000\u0000\u0964\u094e\u0001\u0000\u0000\u0000\u0964\u0955\u0001\u0000"+ + "\u0000\u0000\u0965\u01d0\u0001\u0000\u0000\u0000\u0966\u0967\u0005H\u0000"+ + "\u0000\u0967\u0968\u0005Y\u0000\u0000\u0968\u0969\u0005P\u0000\u0000\u0969"+ + "\u096a\u0005G\u0000\u0000\u096a\u096b\u0005E\u0000\u0000\u096b\u096c\u0005"+ + "O\u0000\u0000\u096c\u096d\u0005M\u0000\u0000\u096d\u096e\u0005D\u0000"+ + "\u0000\u096e\u096f\u0005I\u0000\u0000\u096f\u0970\u0005S\u0000\u0000\u0970"+ + "\u097e\u0005T\u0000\u0000\u0971\u0972\u0005H\u0000\u0000\u0972\u0973\u0005"+ + "Y\u0000\u0000\u0973\u0974\u0005P\u0000\u0000\u0974\u0975\u0005G\u0000"+ + "\u0000\u0975\u0976\u0005E\u0000\u0000\u0976\u0977\u0005O\u0000\u0000\u0977"+ + "\u0978\u0005M\u0000\u0000\u0978\u0979\u0005.\u0000\u0000\u0979\u097a\u0005"+ + "D\u0000\u0000\u097a\u097b\u0005I\u0000\u0000\u097b\u097c\u0005S\u0000"+ + "\u0000\u097c\u097e\u0005T\u0000\u0000\u097d\u0966\u0001\u0000\u0000\u0000"+ + "\u097d\u0971\u0001\u0000\u0000\u0000\u097e\u01d2\u0001\u0000\u0000\u0000"+ + "\u097f\u0980\u0005L\u0000\u0000\u0980\u0981\u0005O\u0000\u0000\u0981\u0982"+ + "\u0005G\u0000\u0000\u0982\u0983\u0005I\u0000\u0000\u0983\u0984\u0005N"+ + "\u0000\u0000\u0984\u0991\u0005V\u0000\u0000\u0985\u0986\u0005L\u0000\u0000"+ + "\u0986\u0987\u0005O\u0000\u0000\u0987\u0988\u0005G\u0000\u0000\u0988\u0989"+ + "\u0005N\u0000\u0000\u0989\u098a\u0005O\u0000\u0000\u098a\u098b\u0005R"+ + "\u0000\u0000\u098b\u098c\u0005M\u0000\u0000\u098c\u098d\u0005.\u0000\u0000"+ + "\u098d\u098e\u0005I\u0000\u0000\u098e\u098f\u0005N\u0000\u0000\u098f\u0991"+ + "\u0005V\u0000\u0000\u0990\u097f\u0001\u0000\u0000\u0000\u0990\u0985\u0001"+ + "\u0000\u0000\u0000\u0991\u01d4\u0001\u0000\u0000\u0000\u0992\u0993\u0005"+ + "L\u0000\u0000\u0993\u0994\u0005O\u0000\u0000\u0994\u0995\u0005G\u0000"+ + "\u0000\u0995\u0996\u0005N\u0000\u0000\u0996\u0997\u0005O\u0000\u0000\u0997"+ + "\u0998\u0005R\u0000\u0000\u0998\u0999\u0005M\u0000\u0000\u0999\u099a\u0005"+ + "D\u0000\u0000\u099a\u099b\u0005I\u0000\u0000\u099b\u099c\u0005S\u0000"+ + "\u0000\u099c\u09aa\u0005T\u0000\u0000\u099d\u099e\u0005L\u0000\u0000\u099e"+ + "\u099f\u0005O\u0000\u0000\u099f\u09a0\u0005G\u0000\u0000\u09a0\u09a1\u0005"+ + "N\u0000\u0000\u09a1\u09a2\u0005O\u0000\u0000\u09a2\u09a3\u0005R\u0000"+ + "\u0000\u09a3\u09a4\u0005M\u0000\u0000\u09a4\u09a5\u0005.\u0000\u0000\u09a5"+ + "\u09a6\u0005D\u0000\u0000\u09a6\u09a7\u0005I\u0000\u0000\u09a7\u09a8\u0005"+ + "S\u0000\u0000\u09a8\u09aa\u0005T\u0000\u0000\u09a9\u0992\u0001\u0000\u0000"+ + "\u0000\u09a9\u099d\u0001\u0000\u0000\u0000\u09aa\u01d6\u0001\u0000\u0000"+ + "\u0000\u09ab\u09ac\u0005N\u0000\u0000\u09ac\u09ad\u0005E\u0000\u0000\u09ad"+ + "\u09ae\u0005G\u0000\u0000\u09ae\u09af\u0005B\u0000\u0000\u09af\u09b0\u0005"+ + "I\u0000\u0000\u09b0\u09b1\u0005N\u0000\u0000\u09b1\u09b2\u0005O\u0000"+ + "\u0000\u09b2\u09b3\u0005M\u0000\u0000\u09b3\u09b4\u0005D\u0000\u0000\u09b4"+ + "\u09b5\u0005I\u0000\u0000\u09b5\u09b6\u0005S\u0000\u0000\u09b6\u09c5\u0005"+ + "T\u0000\u0000\u09b7\u09b8\u0005N\u0000\u0000\u09b8\u09b9\u0005E\u0000"+ + "\u0000\u09b9\u09ba\u0005G\u0000\u0000\u09ba\u09bb\u0005B\u0000\u0000\u09bb"+ + "\u09bc\u0005I\u0000\u0000\u09bc\u09bd\u0005N\u0000\u0000\u09bd\u09be\u0005"+ + "O\u0000\u0000\u09be\u09bf\u0005M\u0000\u0000\u09bf\u09c0\u0005.\u0000"+ + "\u0000\u09c0\u09c1\u0005D\u0000\u0000\u09c1\u09c2\u0005I\u0000\u0000\u09c2"+ + "\u09c3\u0005S\u0000\u0000\u09c3\u09c5\u0005T\u0000\u0000\u09c4\u09ab\u0001"+ + "\u0000\u0000\u0000\u09c4\u09b7\u0001\u0000\u0000\u0000\u09c5\u01d8\u0001"+ + "\u0000\u0000\u0000\u09c6\u09c7\u0005P\u0000\u0000\u09c7\u09c8\u0005O\u0000"+ + "\u0000\u09c8\u09c9\u0005I\u0000\u0000\u09c9\u09ca\u0005S\u0000\u0000\u09ca"+ + "\u09cb\u0005S\u0000\u0000\u09cb\u09cc\u0005O\u0000\u0000\u09cc\u09da\u0005"+ + "N\u0000\u0000\u09cd\u09ce\u0005P\u0000\u0000\u09ce\u09cf\u0005O\u0000"+ + "\u0000\u09cf\u09d0\u0005I\u0000\u0000\u09d0\u09d1\u0005S\u0000\u0000\u09d1"+ + "\u09d2\u0005S\u0000\u0000\u09d2\u09d3\u0005O\u0000\u0000\u09d3\u09d4\u0005"+ + "N\u0000\u0000\u09d4\u09d5\u0005.\u0000\u0000\u09d5\u09d6\u0005D\u0000"+ + "\u0000\u09d6\u09d7\u0005I\u0000\u0000\u09d7\u09d8\u0005S\u0000\u0000\u09d8"+ + "\u09da\u0005T\u0000\u0000\u09d9\u09c6\u0001\u0000\u0000\u0000\u09d9\u09cd"+ + "\u0001\u0000\u0000\u0000\u09da\u01da\u0001\u0000\u0000\u0000\u09db\u09dc"+ + "\u0005T\u0000\u0000\u09dc\u09dd\u0005D\u0000\u0000\u09dd\u09de\u0005I"+ + "\u0000\u0000\u09de\u09df\u0005S\u0000\u0000\u09df\u09e7\u0005T\u0000\u0000"+ + "\u09e0\u09e1\u0005T\u0000\u0000\u09e1\u09e2\u0005.\u0000\u0000\u09e2\u09e3"+ + "\u0005D\u0000\u0000\u09e3\u09e4\u0005I\u0000\u0000\u09e4\u09e5\u0005S"+ + "\u0000\u0000\u09e5\u09e7\u0005T\u0000\u0000\u09e6\u09db\u0001\u0000\u0000"+ + "\u0000\u09e6\u09e0\u0001\u0000\u0000\u0000\u09e7\u01dc\u0001\u0000\u0000"+ + "\u0000\u09e8\u09e9\u0005T\u0000\u0000\u09e9\u09ea\u0005I\u0000\u0000\u09ea"+ + "\u09eb\u0005N\u0000\u0000\u09eb\u09f2\u0005V\u0000\u0000\u09ec\u09ed\u0005"+ + "T\u0000\u0000\u09ed\u09ee\u0005.\u0000\u0000\u09ee\u09ef\u0005I\u0000"+ + "\u0000\u09ef\u09f0\u0005N\u0000\u0000\u09f0\u09f2\u0005V\u0000\u0000\u09f1"+ + "\u09e8\u0001\u0000\u0000\u0000\u09f1\u09ec\u0001\u0000\u0000\u0000\u09f2"+ + "\u01de\u0001\u0000\u0000\u0000\u09f3\u09f4\u0005W\u0000\u0000\u09f4\u09f5"+ + "\u0005E\u0000\u0000\u09f5\u09f6\u0005I\u0000\u0000\u09f6\u09f7\u0005B"+ + "\u0000\u0000\u09f7\u09f8\u0005U\u0000\u0000\u09f8\u09f9\u0005L\u0000\u0000"+ + "\u09f9\u09fa\u0005L\u0000\u0000\u09fa\u01e0\u0001\u0000\u0000\u0000\u09fb"+ + "\u09fc\u0005P\u0000\u0000\u09fc\u09fd\u0005M\u0000\u0000\u09fd\u09fe\u0005"+ + "T\u0000\u0000\u09fe\u01e2\u0001\u0000\u0000\u0000\u09ff\u0a00\u0005P\u0000"+ + "\u0000\u0a00\u0a01\u0005P\u0000\u0000\u0a01\u0a02\u0005M\u0000\u0000\u0a02"+ + "\u0a03\u0005T\u0000\u0000\u0a03\u01e4\u0001\u0000\u0000\u0000\u0a04\u0a05"+ + "\u0005I\u0000\u0000\u0a05\u0a06\u0005P\u0000\u0000\u0a06\u0a07\u0005M"+ + "\u0000\u0000\u0a07\u0a08\u0005T\u0000\u0000\u0a08\u01e6\u0001\u0000\u0000"+ + "\u0000\u0a09\u0a0a\u0005P\u0000\u0000\u0a0a\u0a0b\u0005V\u0000\u0000\u0a0b"+ + "\u01e8\u0001\u0000\u0000\u0000\u0a0c\u0a0d\u0005F\u0000\u0000\u0a0d\u0a0e"+ + "\u0005V\u0000\u0000\u0a0e\u01ea\u0001\u0000\u0000\u0000\u0a0f\u0a10\u0005"+ + "N\u0000\u0000\u0a10\u0a11\u0005P\u0000\u0000\u0a11\u0a12\u0005E\u0000"+ + "\u0000\u0a12\u0a13\u0005R\u0000\u0000\u0a13\u01ec\u0001\u0000\u0000\u0000"+ + "\u0a14\u0a15\u0005R\u0000\u0000\u0a15\u0a16\u0005A\u0000\u0000\u0a16\u0a17"+ + "\u0005T\u0000\u0000\u0a17\u0a18\u0005E\u0000\u0000\u0a18\u01ee\u0001\u0000"+ + "\u0000\u0000\u0a19\u0a1a\u0005N\u0000\u0000\u0a1a\u0a1b\u0005P\u0000\u0000"+ + "\u0a1b\u0a1c\u0005V\u0000\u0000\u0a1c\u01f0\u0001\u0000\u0000\u0000\u0a1d"+ + "\u0a1e\u0005X\u0000\u0000\u0a1e\u0a1f\u0005N\u0000\u0000\u0a1f\u0a20\u0005"+ + "P\u0000\u0000\u0a20\u0a21\u0005V\u0000\u0000\u0a21\u01f2\u0001\u0000\u0000"+ + "\u0000\u0a22\u0a23\u0005I\u0000\u0000\u0a23\u0a24\u0005R\u0000\u0000\u0a24"+ + "\u0a25\u0005R\u0000\u0000\u0a25\u01f4\u0001\u0000\u0000\u0000\u0a26\u0a27"+ + "\u0005M\u0000\u0000\u0a27\u0a28\u0005I\u0000\u0000\u0a28\u0a29\u0005R"+ + "\u0000\u0000\u0a29\u0a2a\u0005R\u0000\u0000\u0a2a\u01f6\u0001\u0000\u0000"+ + "\u0000\u0a2b\u0a2c\u0005X\u0000\u0000\u0a2c\u0a2d\u0005I\u0000\u0000\u0a2d"+ + "\u0a2e\u0005R\u0000\u0000\u0a2e\u0a2f\u0005R\u0000\u0000\u0a2f\u01f8\u0001"+ + "\u0000\u0000\u0000\u0a30\u0a31\u0005S\u0000\u0000\u0a31\u0a32\u0005L\u0000"+ + "\u0000\u0a32\u0a33\u0005N\u0000\u0000\u0a33\u01fa\u0001\u0000\u0000\u0000"+ + "\u0a34\u0a35\u0005D\u0000\u0000\u0a35\u0a36\u0005B\u0000\u0000\u0a36\u01fc"+ + "\u0001\u0000\u0000\u0000\u0a37\u0a38\u0005D\u0000\u0000\u0a38\u0a39\u0005"+ + "D\u0000\u0000\u0a39\u0a3a\u0005B\u0000\u0000\u0a3a\u01fe\u0001\u0000\u0000"+ + "\u0000\u0a3b\u0a3c\u0005S\u0000\u0000\u0a3c\u0a3d\u0005Y\u0000\u0000\u0a3d"+ + "\u0a3e\u0005D\u0000\u0000\u0a3e\u0200\u0001\u0000\u0000\u0000\u0a3f\u0a40"+ + "\u0005U\u0000\u0000\u0a40\u0a41\u0005R\u0000\u0000\u0a41\u0a42\u0005L"+ + "\u0000\u0000\u0a42\u0a43\u0005E\u0000\u0000\u0a43\u0a44\u0005N\u0000\u0000"+ + "\u0a44\u0a45\u0005C\u0000\u0000\u0a45\u0a46\u0005O\u0000\u0000\u0a46\u0a47"+ + "\u0005D\u0000\u0000\u0a47\u0a48\u0005E\u0000\u0000\u0a48\u0202\u0001\u0000"+ + "\u0000\u0000\u0a49\u0a4a\u0005U\u0000\u0000\u0a4a\u0a4b\u0005R\u0000\u0000"+ + "\u0a4b\u0a4c\u0005L\u0000\u0000\u0a4c\u0a4d\u0005D\u0000\u0000\u0a4d\u0a4e"+ + "\u0005E\u0000\u0000\u0a4e\u0a4f\u0005C\u0000\u0000\u0a4f\u0a50\u0005O"+ + "\u0000\u0000\u0a50\u0a51\u0005D\u0000\u0000\u0a51\u0a52\u0005E\u0000\u0000"+ + "\u0a52\u0204\u0001\u0000\u0000\u0000\u0a53\u0a54\u0005H\u0000\u0000\u0a54"+ + "\u0a55\u0005T\u0000\u0000\u0a55\u0a56\u0005M\u0000\u0000\u0a56\u0a57\u0005"+ + "L\u0000\u0000\u0a57\u0a58\u0005E\u0000\u0000\u0a58\u0a59\u0005N\u0000"+ + "\u0000\u0a59\u0a5a\u0005C\u0000\u0000\u0a5a\u0a5b\u0005O\u0000\u0000\u0a5b"+ + "\u0a5c\u0005D\u0000\u0000\u0a5c\u0a5d\u0005E\u0000\u0000\u0a5d\u0206\u0001"+ + "\u0000\u0000\u0000\u0a5e\u0a5f\u0005H\u0000\u0000\u0a5f\u0a60\u0005T\u0000"+ + "\u0000\u0a60\u0a61\u0005M\u0000\u0000\u0a61\u0a62\u0005L\u0000\u0000\u0a62"+ + "\u0a63\u0005D\u0000\u0000\u0a63\u0a64\u0005E\u0000\u0000\u0a64\u0a65\u0005"+ + "C\u0000\u0000\u0a65\u0a66\u0005O\u0000\u0000\u0a66\u0a67\u0005D\u0000"+ + "\u0000\u0a67\u0a68\u0005E\u0000\u0000\u0a68\u0208\u0001\u0000\u0000\u0000"+ + "\u0a69\u0a6a\u0005B\u0000\u0000\u0a6a\u0a6b\u0005A\u0000\u0000\u0a6b\u0a6c"+ + "\u0005S\u0000\u0000\u0a6c\u0a6d\u0005E\u0000\u0000\u0a6d\u0a6e\u00056"+ + "\u0000\u0000\u0a6e\u0a6f\u00054\u0000\u0000\u0a6f\u0a70\u0005T\u0000\u0000"+ + "\u0a70\u0a71\u0005O\u0000\u0000\u0a71\u0a72\u0005T\u0000\u0000\u0a72\u0a73"+ + "\u0005E\u0000\u0000\u0a73\u0a74\u0005X\u0000\u0000\u0a74\u0a75\u0005T"+ + "\u0000\u0000\u0a75\u020a\u0001\u0000\u0000\u0000\u0a76\u0a77\u0005B\u0000"+ + "\u0000\u0a77\u0a78\u0005A\u0000\u0000\u0a78\u0a79\u0005S\u0000\u0000\u0a79"+ + "\u0a7a\u0005E\u0000\u0000\u0a7a\u0a7b\u00056\u0000\u0000\u0a7b\u0a7c\u0005"+ + "4\u0000\u0000\u0a7c\u0a7d\u0005U\u0000\u0000\u0a7d\u0a7e\u0005R\u0000"+ + "\u0000\u0a7e\u0a7f\u0005L\u0000\u0000\u0a7f\u0a80\u0005T\u0000\u0000\u0a80"+ + "\u0a81\u0005O\u0000\u0000\u0a81\u0a82\u0005T\u0000\u0000\u0a82\u0a83\u0005"+ + "E\u0000\u0000\u0a83\u0a84\u0005X\u0000\u0000\u0a84\u0a85\u0005T\u0000"+ + "\u0000\u0a85\u020c\u0001\u0000\u0000\u0000\u0a86\u0a87\u0005T\u0000\u0000"+ + "\u0a87\u0a88\u0005E\u0000\u0000\u0a88\u0a89\u0005X\u0000\u0000\u0a89\u0a8a"+ + "\u0005T\u0000\u0000\u0a8a\u0a8b\u0005T\u0000\u0000\u0a8b\u0a8c\u0005O"+ + "\u0000\u0000\u0a8c\u0a8d\u0005B\u0000\u0000\u0a8d\u0a8e\u0005A\u0000\u0000"+ + "\u0a8e\u0a8f\u0005S\u0000\u0000\u0a8f\u0a90\u0005E\u0000\u0000\u0a90\u0a91"+ + "\u00056\u0000\u0000\u0a91\u0a92\u00054\u0000\u0000\u0a92\u020e\u0001\u0000"+ + "\u0000\u0000\u0a93\u0a94\u0005T\u0000\u0000\u0a94\u0a95\u0005E\u0000\u0000"+ + "\u0a95\u0a96\u0005X\u0000\u0000\u0a96\u0a97\u0005T\u0000\u0000\u0a97\u0a98"+ + "\u0005T\u0000\u0000\u0a98\u0a99\u0005O\u0000\u0000\u0a99\u0a9a\u0005B"+ + "\u0000\u0000\u0a9a\u0a9b\u0005A\u0000\u0000\u0a9b\u0a9c\u0005S\u0000\u0000"+ + "\u0a9c\u0a9d\u0005E\u0000\u0000\u0a9d\u0a9e\u00056\u0000\u0000\u0a9e\u0a9f"+ + "\u00054\u0000\u0000\u0a9f\u0aa0\u0005U\u0000\u0000\u0aa0\u0aa1\u0005R"+ + "\u0000\u0000\u0aa1\u0aa2\u0005L\u0000\u0000\u0aa2\u0210\u0001\u0000\u0000"+ + "\u0000\u0aa3\u0aa4\u0005R\u0000\u0000\u0aa4\u0aa5\u0005E\u0000\u0000\u0aa5"+ + "\u0aa6\u0005G\u0000\u0000\u0aa6\u0aa7\u0005E\u0000\u0000\u0aa7\u0aa8\u0005"+ + "X\u0000\u0000\u0aa8\u0212\u0001\u0000\u0000\u0000\u0aa9\u0aaa\u0005R\u0000"+ + "\u0000\u0aaa\u0aab\u0005E\u0000\u0000\u0aab\u0aac\u0005G\u0000\u0000\u0aac"+ + "\u0aad\u0005E\u0000\u0000\u0aad\u0aae\u0005X\u0000\u0000\u0aae\u0aaf\u0005"+ + "R\u0000\u0000\u0aaf\u0ab0\u0005E\u0000\u0000\u0ab0\u0ab1\u0005P\u0000"+ + "\u0000\u0ab1\u0ab2\u0005L\u0000\u0000\u0ab2\u0ab3\u0005A\u0000\u0000\u0ab3"+ + "\u0ab4\u0005C\u0000\u0000\u0ab4\u0ab5\u0005E\u0000\u0000\u0ab5\u0214\u0001"+ + "\u0000\u0000\u0000\u0ab6\u0ab7\u0005I\u0000\u0000\u0ab7\u0ab8\u0005S\u0000"+ + "\u0000\u0ab8\u0ab9\u0005R\u0000\u0000\u0ab9\u0aba\u0005E\u0000\u0000\u0aba"+ + "\u0abb\u0005G\u0000\u0000\u0abb\u0abc\u0005E\u0000\u0000\u0abc\u0ac5\u0005"+ + "X\u0000\u0000\u0abd\u0abe\u0005I\u0000\u0000\u0abe\u0abf\u0005S\u0000"+ + "\u0000\u0abf\u0ac0\u0005M\u0000\u0000\u0ac0\u0ac1\u0005A\u0000\u0000\u0ac1"+ + "\u0ac2\u0005T\u0000\u0000\u0ac2\u0ac3\u0005C\u0000\u0000\u0ac3\u0ac5\u0005"+ + "H\u0000\u0000\u0ac4\u0ab6\u0001\u0000\u0000\u0000\u0ac4\u0abd\u0001\u0000"+ + "\u0000\u0000\u0ac5\u0216\u0001\u0000\u0000\u0000\u0ac6\u0ac7\u0005G\u0000"+ + "\u0000\u0ac7\u0ac8\u0005U\u0000\u0000\u0ac8\u0ac9\u0005I\u0000\u0000\u0ac9"+ + "\u0aca\u0005D\u0000\u0000\u0aca\u0218\u0001\u0000\u0000\u0000\u0acb\u0acc"+ + "\u0005M\u0000\u0000\u0acc\u0acd\u0005D\u0000\u0000\u0acd\u0ace\u00055"+ + "\u0000\u0000\u0ace\u021a\u0001\u0000\u0000\u0000\u0acf\u0ad0\u0005S\u0000"+ + "\u0000\u0ad0\u0ad1\u0005H\u0000\u0000\u0ad1\u0ad2\u0005A\u0000\u0000\u0ad2"+ + "\u0ad3\u00051\u0000\u0000\u0ad3\u021c\u0001\u0000\u0000\u0000\u0ad4\u0ad5"+ + "\u0005S\u0000\u0000\u0ad5\u0ad6\u0005H\u0000\u0000\u0ad6\u0ad7\u0005A"+ + "\u0000\u0000\u0ad7\u0ad8\u00052\u0000\u0000\u0ad8\u0ad9\u00055\u0000\u0000"+ + "\u0ad9\u0ada\u00056\u0000\u0000\u0ada\u021e\u0001\u0000\u0000\u0000\u0adb"+ + "\u0adc\u0005S\u0000\u0000\u0adc\u0add\u0005H\u0000\u0000\u0add\u0ade\u0005"+ + "A\u0000\u0000\u0ade\u0adf\u00055\u0000\u0000\u0adf\u0ae0\u00051\u0000"+ + "\u0000\u0ae0\u0ae1\u00052\u0000\u0000\u0ae1\u0220\u0001\u0000\u0000\u0000"+ + "\u0ae2\u0ae3\u0005H\u0000\u0000\u0ae3\u0ae4\u0005M\u0000\u0000\u0ae4\u0ae5"+ + "\u0005A\u0000\u0000\u0ae5\u0ae6\u0005C\u0000\u0000\u0ae6\u0ae7\u0005M"+ + "\u0000\u0000\u0ae7\u0ae8\u0005D\u0000\u0000\u0ae8\u0ae9\u00055\u0000\u0000"+ + "\u0ae9\u0222\u0001\u0000\u0000\u0000\u0aea\u0aeb\u0005H\u0000\u0000\u0aeb"+ + "\u0aec\u0005M\u0000\u0000\u0aec\u0aed\u0005A\u0000\u0000\u0aed\u0aee\u0005"+ + "C\u0000\u0000\u0aee\u0aef\u0005S\u0000\u0000\u0aef\u0af0\u0005H\u0000"+ + "\u0000\u0af0\u0af1\u0005A\u0000\u0000\u0af1\u0af2\u00051\u0000\u0000\u0af2"+ + "\u0224\u0001\u0000\u0000\u0000\u0af3\u0af4\u0005H\u0000\u0000\u0af4\u0af5"+ + "\u0005M\u0000\u0000\u0af5\u0af6\u0005A\u0000\u0000\u0af6\u0af7\u0005C"+ + "\u0000\u0000\u0af7\u0af8\u0005S\u0000\u0000\u0af8\u0af9\u0005H\u0000\u0000"+ + "\u0af9\u0afa\u0005A\u0000\u0000\u0afa\u0afb\u00052\u0000\u0000\u0afb\u0afc"+ + "\u00055\u0000\u0000\u0afc\u0afd\u00056\u0000\u0000\u0afd\u0226\u0001\u0000"+ + "\u0000\u0000\u0afe\u0aff\u0005H\u0000\u0000\u0aff\u0b00\u0005M\u0000\u0000"+ + "\u0b00\u0b01\u0005A\u0000\u0000\u0b01\u0b02\u0005C\u0000\u0000\u0b02\u0b03"+ + "\u0005S\u0000\u0000\u0b03\u0b04\u0005H\u0000\u0000\u0b04\u0b05\u0005A"+ + "\u0000\u0000\u0b05\u0b06\u00055\u0000\u0000\u0b06\u0b07\u00051\u0000\u0000"+ + "\u0b07\u0b08\u00052\u0000\u0000\u0b08\u0228\u0001\u0000\u0000\u0000\u0b09"+ + "\u0b0a\u0005T\u0000\u0000\u0b0a\u0b0b\u0005R\u0000\u0000\u0b0b\u0b0c\u0005"+ + "I\u0000\u0000\u0b0c\u0b0d\u0005M\u0000\u0000\u0b0d\u0b0e\u0005S\u0000"+ + "\u0000\u0b0e\u0b0f\u0005T\u0000\u0000\u0b0f\u0b10\u0005A\u0000\u0000\u0b10"+ + "\u0b11\u0005R\u0000\u0000\u0b11\u0b18\u0005T\u0000\u0000\u0b12\u0b13\u0005"+ + "L\u0000\u0000\u0b13\u0b14\u0005T\u0000\u0000\u0b14\u0b15\u0005R\u0000"+ + "\u0000\u0b15\u0b16\u0005I\u0000\u0000\u0b16\u0b18\u0005M\u0000\u0000\u0b17"+ + "\u0b09\u0001\u0000\u0000\u0000\u0b17\u0b12\u0001\u0000\u0000\u0000\u0b18"+ + "\u022a\u0001\u0000\u0000\u0000\u0b19\u0b1a\u0005T\u0000\u0000\u0b1a\u0b1b"+ + "\u0005R\u0000\u0000\u0b1b\u0b1c\u0005I\u0000\u0000\u0b1c\u0b1d\u0005M"+ + "\u0000\u0000\u0b1d\u0b1e\u0005E\u0000\u0000\u0b1e\u0b1f\u0005N\u0000\u0000"+ + "\u0b1f\u0b26\u0005D\u0000\u0000\u0b20\u0b21\u0005R\u0000\u0000\u0b21\u0b22"+ + "\u0005T\u0000\u0000\u0b22\u0b23\u0005R\u0000\u0000\u0b23\u0b24\u0005I"+ + "\u0000\u0000\u0b24\u0b26\u0005M\u0000\u0000\u0b25\u0b19\u0001\u0000\u0000"+ + "\u0000\u0b25\u0b20\u0001\u0000\u0000\u0000\u0b26\u022c\u0001\u0000\u0000"+ + "\u0000\u0b27\u0b28\u0005I\u0000\u0000\u0b28\u0b29\u0005N\u0000\u0000\u0b29"+ + "\u0b2a\u0005D\u0000\u0000\u0b2a\u0b2b\u0005E\u0000\u0000\u0b2b\u0b2c\u0005"+ + "X\u0000\u0000\u0b2c\u0b2d\u0005O\u0000\u0000\u0b2d\u0b2e\u0005F\u0000"+ + "\u0000\u0b2e\u022e\u0001\u0000\u0000\u0000\u0b2f\u0b30\u0005L\u0000\u0000"+ + "\u0b30\u0b31\u0005A\u0000\u0000\u0b31\u0b32\u0005S\u0000\u0000\u0b32\u0b33"+ + "\u0005T\u0000\u0000\u0b33\u0b34\u0005I\u0000\u0000\u0b34\u0b35\u0005N"+ + "\u0000\u0000\u0b35\u0b36\u0005D\u0000\u0000\u0b36\u0b37\u0005E\u0000\u0000"+ + "\u0b37\u0b38\u0005X\u0000\u0000\u0b38\u0b39\u0005O\u0000\u0000\u0b39\u0b3a"+ + "\u0005F\u0000\u0000\u0b3a\u0230\u0001\u0000\u0000\u0000\u0b3b\u0b3c\u0005"+ + "S\u0000\u0000\u0b3c\u0b3d\u0005P\u0000\u0000\u0b3d\u0b3e\u0005L\u0000"+ + "\u0000\u0b3e\u0b3f\u0005I\u0000\u0000\u0b3f\u0b40\u0005T\u0000\u0000\u0b40"+ + "\u0232\u0001\u0000\u0000\u0000\u0b41\u0b42\u0005J\u0000\u0000\u0b42\u0b43"+ + "\u0005O\u0000\u0000\u0b43\u0b44\u0005I\u0000\u0000\u0b44\u0b45\u0005N"+ + "\u0000\u0000\u0b45\u0234\u0001\u0000\u0000\u0000\u0b46\u0b47\u0005S\u0000"+ + "\u0000\u0b47\u0b48\u0005U\u0000\u0000\u0b48\u0b49\u0005B\u0000\u0000\u0b49"+ + "\u0b4a\u0005S\u0000\u0000\u0b4a\u0b4b\u0005T\u0000\u0000\u0b4b\u0b4c\u0005"+ + "R\u0000\u0000\u0b4c\u0b4d\u0005I\u0000\u0000\u0b4d\u0b4e\u0005N\u0000"+ + "\u0000\u0b4e\u0b4f\u0005G\u0000\u0000\u0b4f\u0236\u0001\u0000\u0000\u0000"+ + "\u0b50\u0b51\u0005S\u0000\u0000\u0b51\u0b52\u0005T\u0000\u0000\u0b52\u0b53"+ + "\u0005A\u0000\u0000\u0b53\u0b54\u0005R\u0000\u0000\u0b54\u0b55\u0005T"+ + "\u0000\u0000\u0b55\u0b56\u0005S\u0000\u0000\u0b56\u0b57\u0005W\u0000\u0000"+ + "\u0b57\u0b58\u0005I\u0000\u0000\u0b58\u0b59\u0005T\u0000\u0000\u0b59\u0b5a"+ + "\u0005H\u0000\u0000\u0b5a\u0238\u0001\u0000\u0000\u0000\u0b5b\u0b5c\u0005"+ + "E\u0000\u0000\u0b5c\u0b5d\u0005N\u0000\u0000\u0b5d\u0b5e\u0005D\u0000"+ + "\u0000\u0b5e\u0b5f\u0005S\u0000\u0000\u0b5f\u0b60\u0005W\u0000\u0000\u0b60"+ + "\u0b61\u0005I\u0000\u0000\u0b61\u0b62\u0005T\u0000\u0000\u0b62\u0b63\u0005"+ + "H\u0000\u0000\u0b63\u023a\u0001\u0000\u0000\u0000\u0b64\u0b65\u0005I\u0000"+ + "\u0000\u0b65\u0b66\u0005S\u0000\u0000\u0b66\u0b67\u0005N\u0000\u0000\u0b67"+ + "\u0b68\u0005U\u0000\u0000\u0b68\u0b69\u0005L\u0000\u0000\u0b69\u0b6a\u0005"+ + "L\u0000\u0000\u0b6a\u0b6b\u0005O\u0000\u0000\u0b6b\u0b6c\u0005R\u0000"+ + "\u0000\u0b6c\u0b6d\u0005E\u0000\u0000\u0b6d\u0b6e\u0005M\u0000\u0000\u0b6e"+ + "\u0b6f\u0005P\u0000\u0000\u0b6f\u0b70\u0005T\u0000\u0000\u0b70\u0b71\u0005"+ + "Y\u0000\u0000\u0b71\u023c\u0001\u0000\u0000\u0000\u0b72\u0b73\u0005I\u0000"+ + "\u0000\u0b73\u0b74\u0005S\u0000\u0000\u0b74\u0b75\u0005N\u0000\u0000\u0b75"+ + "\u0b76\u0005U\u0000\u0000\u0b76\u0b77\u0005L\u0000\u0000\u0b77\u0b78\u0005"+ + "L\u0000\u0000\u0b78\u0b79\u0005O\u0000\u0000\u0b79\u0b7a\u0005R\u0000"+ + "\u0000\u0b7a\u0b7b\u0005W\u0000\u0000\u0b7b\u0b7c\u0005H\u0000\u0000\u0b7c"+ + "\u0b7d\u0005I\u0000\u0000\u0b7d\u0b7e\u0005T\u0000\u0000\u0b7e\u0b7f\u0005"+ + "E\u0000\u0000\u0b7f\u0b80\u0005S\u0000\u0000\u0b80\u0b81\u0005P\u0000"+ + "\u0000\u0b81\u0b82\u0005A\u0000\u0000\u0b82\u0b83\u0005C\u0000\u0000\u0b83"+ + "\u0b84\u0005E\u0000\u0000\u0b84\u023e\u0001\u0000\u0000\u0000\u0b85\u0b86"+ + "\u0005R\u0000\u0000\u0b86\u0b87\u0005E\u0000\u0000\u0b87\u0b88\u0005M"+ + "\u0000\u0000\u0b88\u0b89\u0005O\u0000\u0000\u0b89\u0b8a\u0005V\u0000\u0000"+ + "\u0b8a\u0b8b\u0005E\u0000\u0000\u0b8b\u0b8c\u0005S\u0000\u0000\u0b8c\u0b8d"+ + "\u0005T\u0000\u0000\u0b8d\u0b8e\u0005A\u0000\u0000\u0b8e\u0b8f\u0005R"+ + "\u0000\u0000\u0b8f\u0b90\u0005T\u0000\u0000\u0b90\u0240\u0001\u0000\u0000"+ + "\u0000\u0b91\u0b92\u0005R\u0000\u0000\u0b92\u0b93\u0005E\u0000\u0000\u0b93"+ + "\u0b94\u0005M\u0000\u0000\u0b94\u0b95\u0005O\u0000\u0000\u0b95\u0b96\u0005"+ + "V\u0000\u0000\u0b96\u0b97\u0005E\u0000\u0000\u0b97\u0b98\u0005E\u0000"+ + "\u0000\u0b98\u0b99\u0005N\u0000\u0000\u0b99\u0b9a\u0005D\u0000\u0000\u0b9a"+ + "\u0242\u0001\u0000\u0000\u0000\u0b9b\u0b9c\u0005J\u0000\u0000\u0b9c\u0b9d"+ + "\u0005S\u0000\u0000\u0b9d\u0b9e\u0005O\u0000\u0000\u0b9e\u0b9f\u0005N"+ + "\u0000\u0000\u0b9f\u0244\u0001\u0000\u0000\u0000\u0ba0\u0ba1\u0005L\u0000"+ + "\u0000\u0ba1\u0ba2\u0005O\u0000\u0000\u0ba2\u0ba3\u0005O\u0000\u0000\u0ba3"+ + "\u0ba4\u0005K\u0000\u0000\u0ba4\u0ba5\u0005C\u0000\u0000\u0ba5\u0ba6\u0005"+ + "E\u0000\u0000\u0ba6\u0ba7\u0005I\u0000\u0000\u0ba7\u0ba8\u0005L\u0000"+ + "\u0000\u0ba8\u0ba9\u0005I\u0000\u0000\u0ba9\u0baa\u0005N\u0000\u0000\u0baa"+ + "\u0bab\u0005G\u0000\u0000\u0bab\u0246\u0001\u0000\u0000\u0000\u0bac\u0bad"+ + "\u0005L\u0000\u0000\u0bad\u0bae\u0005O\u0000\u0000\u0bae\u0baf\u0005O"+ + "\u0000\u0000\u0baf\u0bb0\u0005K\u0000\u0000\u0bb0\u0bb1\u0005F\u0000\u0000"+ + "\u0bb1\u0bb2\u0005L\u0000\u0000\u0bb2\u0bb3\u0005O\u0000\u0000\u0bb3\u0bb4"+ + "\u0005O\u0000\u0000\u0bb4\u0bb5\u0005R\u0000\u0000\u0bb5\u0248\u0001\u0000"+ + "\u0000\u0000\u0bb6\u0bb7\u0005A\u0000\u0000\u0bb7\u0bb8\u0005R\u0000\u0000"+ + "\u0bb8\u0bb9\u0005R\u0000\u0000\u0bb9\u0bba\u0005A\u0000\u0000\u0bba\u0bbb"+ + "\u0005Y\u0000\u0000\u0bbb\u024a\u0001\u0000\u0000\u0000\u0bbc\u0bbd\u0005"+ + "A\u0000\u0000\u0bbd\u0bbe\u0005L\u0000\u0000\u0bbe\u0bbf\u0005G\u0000"+ + "\u0000\u0bbf\u0bc0\u0005O\u0000\u0000\u0bc0\u0bc1\u0005R\u0000\u0000\u0bc1"+ + "\u0bc2\u0005I\u0000\u0000\u0bc2\u0bc3\u0005T\u0000\u0000\u0bc3\u0bc4\u0005"+ + "H\u0000\u0000\u0bc4\u0bc5\u0005M\u0000\u0000\u0bc5\u0bc6\u0005V\u0000"+ + "\u0000\u0bc6\u0bc7\u0005E\u0000\u0000\u0bc7\u0bc8\u0005R\u0000\u0000\u0bc8"+ + "\u0bc9\u0005S\u0000\u0000\u0bc9\u0bca\u0005I\u0000\u0000\u0bca\u0bcb\u0005"+ + "O\u0000\u0000\u0bcb\u0bda\u0005N\u0000\u0000\u0bcc\u0bcd\u0005E\u0000"+ + "\u0000\u0bcd\u0bce\u0005N\u0000\u0000\u0bce\u0bcf\u0005G\u0000\u0000\u0bcf"+ + "\u0bd0\u0005I\u0000\u0000\u0bd0\u0bd1\u0005N\u0000\u0000\u0bd1\u0bd2\u0005"+ + "E\u0000\u0000\u0bd2\u0bd3\u0005V\u0000\u0000\u0bd3\u0bd4\u0005E\u0000"+ + "\u0000\u0bd4\u0bd5\u0005R\u0000\u0000\u0bd5\u0bd6\u0005S\u0000\u0000\u0bd6"+ + "\u0bd7\u0005I\u0000\u0000\u0bd7\u0bd8\u0005O\u0000\u0000\u0bd8\u0bda\u0005"+ + "N\u0000\u0000\u0bd9\u0bbc\u0001\u0000\u0000\u0000\u0bd9\u0bcc\u0001\u0000"+ + "\u0000\u0000\u0bda\u024c\u0001\u0000\u0000\u0000\u0bdb\u0bdc\u0005A\u0000"+ + "\u0000\u0bdc\u0bdd\u0005D\u0000\u0000\u0bdd\u0bde\u0005D\u0000\u0000\u0bde"+ + "\u0bdf\u0005Y\u0000\u0000\u0bdf\u0be0\u0005E\u0000\u0000\u0be0\u0be1\u0005"+ + "A\u0000\u0000\u0be1\u0be2\u0005R\u0000\u0000\u0be2\u0be3\u0005S\u0000"+ + "\u0000\u0be3\u024e\u0001\u0000\u0000\u0000\u0be4\u0be5\u0005A\u0000\u0000"+ + "\u0be5\u0be6\u0005D\u0000\u0000\u0be6\u0be7\u0005D\u0000\u0000\u0be7\u0be8"+ + "\u0005M\u0000\u0000\u0be8\u0be9\u0005O\u0000\u0000\u0be9\u0bea\u0005N"+ + "\u0000\u0000\u0bea\u0beb\u0005T\u0000\u0000\u0beb\u0bec\u0005H\u0000\u0000"+ + "\u0bec\u0bed\u0005S\u0000\u0000\u0bed\u0250\u0001\u0000\u0000\u0000\u0bee"+ + "\u0bef\u0005A\u0000\u0000\u0bef\u0bf0\u0005D\u0000\u0000\u0bf0\u0bf1\u0005"+ + "D\u0000\u0000\u0bf1\u0bf2\u0005D\u0000\u0000\u0bf2\u0bf3\u0005A\u0000"+ + "\u0000\u0bf3\u0bf4\u0005Y\u0000\u0000\u0bf4\u0bf5\u0005S\u0000\u0000\u0bf5"+ + "\u0252\u0001\u0000\u0000\u0000\u0bf6\u0bf7\u0005A\u0000\u0000\u0bf7\u0bf8"+ + "\u0005D\u0000\u0000\u0bf8\u0bf9\u0005D\u0000\u0000\u0bf9\u0bfa\u0005H"+ + "\u0000\u0000\u0bfa\u0bfb\u0005O\u0000\u0000\u0bfb\u0bfc\u0005U\u0000\u0000"+ + "\u0bfc\u0bfd\u0005R\u0000\u0000\u0bfd\u0bfe\u0005S\u0000\u0000\u0bfe\u0254"+ + "\u0001\u0000\u0000\u0000\u0bff\u0c00\u0005A\u0000\u0000\u0c00\u0c01\u0005"+ + "D\u0000\u0000\u0c01\u0c02\u0005D\u0000\u0000\u0c02\u0c03\u0005M\u0000"+ + "\u0000\u0c03\u0c04\u0005I\u0000\u0000\u0c04\u0c05\u0005N\u0000\u0000\u0c05"+ + "\u0c06\u0005U\u0000\u0000\u0c06\u0c07\u0005T\u0000\u0000\u0c07\u0c08\u0005"+ + "E\u0000\u0000\u0c08\u0c09\u0005S\u0000\u0000\u0c09\u0256\u0001\u0000\u0000"+ + "\u0000\u0c0a\u0c0b\u0005A\u0000\u0000\u0c0b\u0c0c\u0005D\u0000\u0000\u0c0c"+ + "\u0c0d\u0005D\u0000\u0000\u0c0d\u0c0e\u0005S\u0000\u0000\u0c0e\u0c0f\u0005"+ + "E\u0000\u0000\u0c0f\u0c10\u0005C\u0000\u0000\u0c10\u0c11\u0005O\u0000"+ + "\u0000\u0c11\u0c12\u0005N\u0000\u0000\u0c12\u0c13\u0005D\u0000\u0000\u0c13"+ + "\u0c14\u0005S\u0000\u0000\u0c14\u0258\u0001\u0000\u0000\u0000\u0c15\u0c16"+ + "\u0005T\u0000\u0000\u0c16\u0c17\u0005I\u0000\u0000\u0c17\u0c18\u0005M"+ + "\u0000\u0000\u0c18\u0c19\u0005E\u0000\u0000\u0c19\u0c1a\u0005S\u0000\u0000"+ + "\u0c1a\u0c1b\u0005T\u0000\u0000\u0c1b\u0c1c\u0005A\u0000\u0000\u0c1c\u0c1d"+ + "\u0005M\u0000\u0000\u0c1d\u0c1e\u0005P\u0000\u0000\u0c1e\u025a\u0001\u0000"+ + "\u0000\u0000\u0c1f\u0c20\u0005H\u0000\u0000\u0c20\u0c21\u0005A\u0000\u0000"+ + "\u0c21\u0c3c\u0005S\u0000\u0000\u0c22\u0c23\u0005H\u0000\u0000\u0c23\u0c24"+ + "\u0005A\u0000\u0000\u0c24\u0c25\u0005S\u0000\u0000\u0c25\u0c26\u0005K"+ + "\u0000\u0000\u0c26\u0c27\u0005E\u0000\u0000\u0c27\u0c3c\u0005Y\u0000\u0000"+ + "\u0c28\u0c29\u0005C\u0000\u0000\u0c29\u0c2a\u0005O\u0000\u0000\u0c2a\u0c2b"+ + "\u0005N\u0000\u0000\u0c2b\u0c2c\u0005T\u0000\u0000\u0c2c\u0c2d\u0005A"+ + "\u0000\u0000\u0c2d\u0c2e\u0005I\u0000\u0000\u0c2e\u0c2f\u0005N\u0000\u0000"+ + "\u0c2f\u0c3c\u0005S\u0000\u0000\u0c30\u0c31\u0005C\u0000\u0000\u0c31\u0c32"+ + "\u0005O\u0000\u0000\u0c32\u0c33\u0005N\u0000\u0000\u0c33\u0c34\u0005T"+ + "\u0000\u0000\u0c34\u0c35\u0005A\u0000\u0000\u0c35\u0c36\u0005I\u0000\u0000"+ + "\u0c36\u0c37\u0005N\u0000\u0000\u0c37\u0c38\u0005S\u0000\u0000\u0c38\u0c39"+ + "\u0005K\u0000\u0000\u0c39\u0c3a\u0005E\u0000\u0000\u0c3a\u0c3c\u0005Y"+ + "\u0000\u0000\u0c3b\u0c1f\u0001\u0000\u0000\u0000\u0c3b\u0c22\u0001\u0000"+ + "\u0000\u0000\u0c3b\u0c28\u0001\u0000\u0000\u0000\u0c3b\u0c30\u0001\u0000"+ + "\u0000\u0000\u0c3c\u025c\u0001\u0000\u0000\u0000\u0c3d\u0c3e\u0005H\u0000"+ + "\u0000\u0c3e\u0c3f\u0005A\u0000\u0000\u0c3f\u0c40\u0005S\u0000\u0000\u0c40"+ + "\u0c41\u0005V\u0000\u0000\u0c41\u0c42\u0005A\u0000\u0000\u0c42\u0c43\u0005"+ + "L\u0000\u0000\u0c43\u0c44\u0005U\u0000\u0000\u0c44\u0c53\u0005E\u0000"+ + "\u0000\u0c45\u0c46\u0005C\u0000\u0000\u0c46\u0c47\u0005O\u0000\u0000\u0c47"+ + "\u0c48\u0005N\u0000\u0000\u0c48\u0c49\u0005T\u0000\u0000\u0c49\u0c4a\u0005"+ + "A\u0000\u0000\u0c4a\u0c4b\u0005I\u0000\u0000\u0c4b\u0c4c\u0005N\u0000"+ + "\u0000\u0c4c\u0c4d\u0005S\u0000\u0000\u0c4d\u0c4e\u0005V\u0000\u0000\u0c4e"+ + "\u0c4f\u0005A\u0000\u0000\u0c4f\u0c50\u0005L\u0000\u0000\u0c50\u0c51\u0005"+ + "U\u0000\u0000\u0c51\u0c53\u0005E\u0000\u0000\u0c52\u0c3d\u0001\u0000\u0000"+ + "\u0000\u0c52\u0c45\u0001\u0000\u0000\u0000\u0c53\u025e\u0001\u0000\u0000"+ + "\u0000\u0c54\u0c55\u0005P\u0000\u0000\u0c55\u0c56\u0005A\u0000\u0000\u0c56"+ + "\u0c57\u0005R\u0000\u0000\u0c57\u0c58\u0005A\u0000\u0000\u0c58\u0c6f\u0005"+ + "M\u0000\u0000\u0c59\u0c5a\u0005P\u0000\u0000\u0c5a\u0c5b\u0005A\u0000"+ + "\u0000\u0c5b\u0c5c\u0005R\u0000\u0000\u0c5c\u0c5d\u0005A\u0000\u0000\u0c5d"+ + "\u0c5e\u0005M\u0000\u0000\u0c5e\u0c5f\u0005E\u0000\u0000\u0c5f\u0c60\u0005"+ + "T\u0000\u0000\u0c60\u0c61\u0005E\u0000\u0000\u0c61\u0c6f\u0005R\u0000"+ + "\u0000\u0c62\u0c63\u0005G\u0000\u0000\u0c63\u0c64\u0005E\u0000\u0000\u0c64"+ + "\u0c65\u0005T\u0000\u0000\u0c65\u0c66\u0005P\u0000\u0000\u0c66\u0c67\u0005"+ + "A\u0000\u0000\u0c67\u0c68\u0005R\u0000\u0000\u0c68\u0c69\u0005A\u0000"+ + "\u0000\u0c69\u0c6a\u0005M\u0000\u0000\u0c6a\u0c6b\u0005E\u0000\u0000\u0c6b"+ + "\u0c6c\u0005T\u0000\u0000\u0c6c\u0c6d\u0005E\u0000\u0000\u0c6d\u0c6f\u0005"+ + "R\u0000\u0000\u0c6e\u0c54\u0001\u0000\u0000\u0000\u0c6e\u0c59\u0001\u0000"+ + "\u0000\u0000\u0c6e\u0c62\u0001\u0000\u0000\u0000\u0c6f\u0260\u0001\u0000"+ + "\u0000\u0000\u0c70\u0c73\u0007\u0006\u0000\u0000\u0c71\u0c73\u0003\u0263"+ + "\u0131\u0000\u0c72\u0c70\u0001\u0000\u0000\u0000\u0c72\u0c71\u0001\u0000"+ + "\u0000\u0000\u0c73\u0c78\u0001\u0000\u0000\u0000\u0c74\u0c77\u0007\u0007"+ + "\u0000\u0000\u0c75\u0c77\u0003\u0263\u0131\u0000\u0c76\u0c74\u0001\u0000"+ + "\u0000\u0000\u0c76\u0c75\u0001\u0000\u0000\u0000\u0c77\u0c7a\u0001\u0000"+ + "\u0000\u0000\u0c78\u0c76\u0001\u0000\u0000\u0000\u0c78\u0c79\u0001\u0000"+ + "\u0000\u0000\u0c79\u0262\u0001\u0000\u0000\u0000\u0c7a\u0c78\u0001\u0000"+ + "\u0000\u0000\u0c7b\u0c7c\u0007\b\u0000\u0000\u0c7c\u0264\u0001\u0000\u0000"+ + "\u0000\u0c7d\u0c7f\u0007\t\u0000\u0000\u0c7e\u0c7d\u0001\u0000\u0000\u0000"+ + "\u0c7f\u0c80\u0001\u0000\u0000\u0000\u0c80\u0c7e\u0001\u0000\u0000\u0000"+ + "\u0c80\u0c81\u0001\u0000\u0000\u0000\u0c81\u0c82\u0001\u0000\u0000\u0000"+ + "\u0c82\u0c83\u0006\u0132\u0000\u0000\u0c83\u0266\u0001\u0000\u0000\u0000"+ + "\u0c84\u0c85\u0005/\u0000\u0000\u0c85\u0c86\u0005*\u0000\u0000\u0c86\u0c8a"+ + "\u0001\u0000\u0000\u0000\u0c87\u0c89\t\u0000\u0000\u0000\u0c88\u0c87\u0001"+ + "\u0000\u0000\u0000\u0c89\u0c8c\u0001\u0000\u0000\u0000\u0c8a\u0c8b\u0001"+ + "\u0000\u0000\u0000\u0c8a\u0c88\u0001\u0000\u0000\u0000\u0c8b\u0c8d\u0001"+ + "\u0000\u0000\u0000\u0c8c\u0c8a\u0001\u0000\u0000\u0000\u0c8d\u0c8e\u0005"+ + "*\u0000\u0000\u0c8e\u0c8f\u0005/\u0000\u0000\u0c8f\u0c90\u0001\u0000\u0000"+ + "\u0000\u0c90\u0c91\u0006\u0133\u0000\u0000\u0c91\u0268\u0001\u0000\u0000"+ + "\u0000\u0c92\u0c93\u0005/\u0000\u0000\u0c93\u0c94\u0005/\u0000\u0000\u0c94"+ + "\u0c98\u0001\u0000\u0000\u0000\u0c95\u0c97\b\n\u0000\u0000\u0c96\u0c95"+ + "\u0001\u0000\u0000\u0000\u0c97\u0c9a\u0001\u0000\u0000\u0000\u0c98\u0c96"+ + "\u0001\u0000\u0000\u0000\u0c98\u0c99\u0001\u0000\u0000\u0000\u0c99\u0c9b"+ + "\u0001\u0000\u0000\u0000\u0c9a\u0c98\u0001\u0000\u0000\u0000\u0c9b\u0c9c"+ + "\u0006\u0134\u0000\u0000\u0c9c\u026a\u0001\u0000\u0000\u0000E\u0000\u02b5"+ + "\u02b7\u02bd\u02c4\u02c6\u02cd\u02cf\u02d5\u02dc\u02de\u02e0\u02e4\u02e8"+ + "\u02ea\u02f0\u02f2\u02fa\u02fc\u0304\u0306\u030a\u0342\u03be\u03c7\u0627"+ + "\u065a\u0682\u06d0\u07aa\u07c6\u0815\u0824\u0837\u0854\u085f\u0872\u0883"+ + "\u0899\u08ad\u08c0\u08d1\u08e6\u08fb\u0908\u0913\u0939\u094c\u0964\u097d"+ + "\u0990\u09a9\u09c4\u09d9\u09e6\u09f1\u0ac4\u0b17\u0b25\u0bd9\u0c3b\u0c52"+ + "\u0c6e\u0c72\u0c76\u0c78\u0c80\u0c8a\u0c98\u0001\u0006\u0000\u0000"; public static final String _serializedATN = Utils.join( new String[] { _serializedATNSegment0, diff --git a/java/src/main/java/toolgood/algorithm/math/mathParser.java b/java/src/main/java/toolgood/algorithm/math/mathParser.java index e1fdd07ee..90a9851d5 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathParser.java +++ b/java/src/main/java/toolgood/algorithm/math/mathParser.java @@ -1,5 +1,4 @@ // Generated from math.g4 by ANTLR 4.13.2 -package toolgood.algorithm.math; import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.*; @@ -21,48 +20,55 @@ public class mathParser extends Parser { T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17, T__17=18, T__18=19, T__19=20, T__20=21, T__21=22, T__22=23, T__23=24, T__24=25, T__25=26, T__26=27, T__27=28, SUB=29, NUM=30, STRING=31, NULL=32, - ERROR=33, UNIT=34, IF=35, IFERROR=36, ISNUMBER=37, ISTEXT=38, ISERROR=39, - ISNONTEXT=40, ISLOGICAL=41, ISEVEN=42, ISODD=43, IsNull=44, ISNULLORERROR=45, - AND=46, OR=47, NOT=48, TRUE=49, FALSE=50, E=51, PI=52, DEC2BIN=53, DEC2HEX=54, - DEC2OCT=55, HEX2BIN=56, HEX2DEC=57, HEX2OCT=58, OCT2BIN=59, OCT2DEC=60, - OCT2HEX=61, BIN2OCT=62, BIN2DEC=63, BIN2HEX=64, ABS=65, QUOTIENT=66, MOD=67, - SIGN=68, SQRT=69, TRUNC=70, INT=71, GCD=72, LCM=73, COMBIN=74, PERMUT=75, - DEGREES=76, RADIANS=77, COS=78, COSH=79, SIN=80, SINH=81, TAN=82, TANH=83, - ACOS=84, ACOSH=85, ASIN=86, ASINH=87, ATAN=88, ATANH=89, ATAN2=90, ROUND=91, - ROUNDDOWN=92, ROUNDUP=93, CEILING=94, FLOOR=95, EVEN=96, ODD=97, MROUND=98, - RAND=99, RANDBETWEEN=100, FACT=101, FACTDOUBLE=102, POWER=103, EXP=104, - LN=105, LOG=106, LOG10=107, MULTINOMIAL=108, PRODUCT=109, SQRTPI=110, - SUMSQ=111, ASC=112, JIS=113, CHAR=114, CLEAN=115, CODE=116, CONCATENATE=117, - EXACT=118, FIND=119, FIXED=120, LEFT=121, LEN=122, LOWER=123, MID=124, - PROPER=125, REPLACE=126, REPT=127, RIGHT=128, RMB=129, SEARCH=130, SUBSTITUTE=131, - T=132, TEXT=133, TRIM=134, UPPER=135, VALUE=136, DATEVALUE=137, TIMEVALUE=138, - DATE=139, TIME=140, NOW=141, TODAY=142, YEAR=143, MONTH=144, DAY=145, - HOUR=146, MINUTE=147, SECOND=148, WEEKDAY=149, DATEDIF=150, DAYS360=151, - EDATE=152, EOMONTH=153, NETWORKDAYS=154, WORKDAY=155, WEEKNUM=156, MAX=157, - MEDIAN=158, MIN=159, QUARTILE=160, MODE=161, LARGE=162, SMALL=163, PERCENTILE=164, - PERCENTRANK=165, AVERAGE=166, AVERAGEIF=167, GEOMEAN=168, HARMEAN=169, - COUNT=170, COUNTIF=171, SUM=172, SUMIF=173, AVEDEV=174, STDEV=175, STDEVP=176, - COVAR=177, COVARIANCES=178, DEVSQ=179, VAR=180, VARP=181, NORMDIST=182, - NORMINV=183, NORMSDIST=184, NORMSINV=185, BETADIST=186, BETAINV=187, BINOMDIST=188, - EXPONDIST=189, FDIST=190, FINV=191, FISHER=192, FISHERINV=193, GAMMADIST=194, - GAMMAINV=195, GAMMALN=196, HYPGEOMDIST=197, LOGINV=198, LOGNORMDIST=199, - NEGBINOMDIST=200, POISSON=201, TDIST=202, TINV=203, WEIBULL=204, URLENCODE=205, - URLDECODE=206, HTMLENCODE=207, HTMLDECODE=208, BASE64TOTEXT=209, BASE64URLTOTEXT=210, - TEXTTOBASE64=211, TEXTTOBASE64URL=212, REGEX=213, REGEXREPALCE=214, ISREGEX=215, - GUID=216, MD5=217, SHA1=218, SHA256=219, SHA512=220, HMACMD5=221, HMACSHA1=222, - HMACSHA256=223, HMACSHA512=224, TRIMSTART=225, TRIMEND=226, INDEXOF=227, - LASTINDEXOF=228, SPLIT=229, JOIN=230, SUBSTRING=231, STARTSWITH=232, ENDSWITH=233, - ISNULLOREMPTY=234, ISNULLORWHITESPACE=235, REMOVESTART=236, REMOVEEND=237, - JSON=238, LOOKCEILING=239, LOOKFLOOR=240, ARRAY=241, ALGORITHMVERSION=242, - ADDYEARS=243, ADDMONTHS=244, ADDDAYS=245, ADDHOURS=246, ADDMINUTES=247, - ADDSECONDS=248, TIMESTAMP=249, HAS=250, HASVALUE=251, PARAM=252, PARAMETER=253, - WS=254, COMMENT=255, LINE_COMMENT=256; + ERROR=33, UNIT=34, IF=35, IFS=36, SWITCH=37, IFERROR=38, ISNUMBER=39, + ISTEXT=40, ISERROR=41, ISNONTEXT=42, ISLOGICAL=43, ISEVEN=44, ISODD=45, + ISNULL=46, ISNULLORERROR=47, AND=48, OR=49, XOR=50, NOT=51, TRUE=52, FALSE=53, + E=54, PI=55, DEC2BIN=56, DEC2HEX=57, DEC2OCT=58, HEX2BIN=59, HEX2DEC=60, + HEX2OCT=61, OCT2BIN=62, OCT2DEC=63, OCT2HEX=64, BIN2OCT=65, BIN2DEC=66, + BIN2HEX=67, ABS=68, QUOTIENT=69, MOD=70, SIGN=71, SQRT=72, TRUNC=73, INT=74, + GCD=75, LCM=76, COMBIN=77, PERMUT=78, DEGREES=79, RADIANS=80, COS=81, + COSH=82, SIN=83, SINH=84, TAN=85, TANH=86, COT=87, COTH=88, CSC=89, CSCH=90, + SEC=91, SECH=92, ACOS=93, ACOSH=94, ASIN=95, ASINH=96, ATAN=97, ATANH=98, + ACOT=99, ACOTH=100, ATAN2=101, ROUND=102, ROUNDDOWN=103, ROUNDUP=104, + CEILING=105, FLOOR=106, EVEN=107, ODD=108, MROUND=109, RAND=110, RANDBETWEEN=111, + FACT=112, FACTDOUBLE=113, POWER=114, EXP=115, LN=116, LOG=117, LOG10=118, + MULTINOMIAL=119, PRODUCT=120, SQRTPI=121, ERF=122, ERFC=123, BESSELI=124, + BESSELJ=125, BESSELK=126, BESSELY=127, DELTA=128, GESTEP=129, SUMSQ=130, + SUMPRODUCT=131, SUMX2MY2=132, SUMX2PY2=133, SUMXMY2=134, ARABIC=135, ROMAN=136, + SERIESSUM=137, RANK=138, FORECAST=139, INTERCEPT=140, SLOPE=141, CORREL=142, + PEARSON=143, YEARFRAC=144, ASC=145, JIS=146, CHAR=147, CLEAN=148, CODE=149, + UNICHAR=150, UNICODE=151, CONCATENATE=152, EXACT=153, FIND=154, FIXED=155, + LEFT=156, LEN=157, LOWER=158, MID=159, PROPER=160, REPLACE=161, REPT=162, + RIGHT=163, RMB=164, SEARCH=165, SUBSTITUTE=166, T=167, TEXT=168, TRIM=169, + UPPER=170, VALUE=171, DATEVALUE=172, TIMEVALUE=173, DATE=174, TIME=175, + NOW=176, TODAY=177, YEAR=178, MONTH=179, DAY=180, HOUR=181, MINUTE=182, + SECOND=183, WEEKDAY=184, DATEDIF=185, DAYS=186, DAYS360=187, EDATE=188, + EOMONTH=189, NETWORKDAYS=190, WORKDAY=191, WEEKNUM=192, MAX=193, MEDIAN=194, + MIN=195, QUARTILE=196, MODE=197, LARGE=198, SMALL=199, PERCENTILE=200, + PERCENTRANK=201, AVERAGE=202, AVERAGEIF=203, GEOMEAN=204, HARMEAN=205, + COUNT=206, COUNTIF=207, SUM=208, SUMIF=209, AVEDEV=210, STDEV=211, STDEVP=212, + COVAR=213, COVARIANCES=214, DEVSQ=215, VAR=216, VARP=217, NORMDIST=218, + NORMINV=219, NORMSDIST=220, NORMSINV=221, BETADIST=222, BETAINV=223, BINOMDIST=224, + EXPONDIST=225, FDIST=226, FINV=227, FISHER=228, FISHERINV=229, GAMMADIST=230, + GAMMAINV=231, GAMMALN=232, HYPGEOMDIST=233, LOGINV=234, LOGNORMDIST=235, + NEGBINOMDIST=236, POISSON=237, TDIST=238, TINV=239, WEIBULL=240, PMT=241, + PPMT=242, IPMT=243, PV=244, FV=245, NPER=246, RATE=247, NPV=248, XNPV=249, + IRR=250, MIRR=251, XIRR=252, SLN=253, DB=254, DDB=255, SYD=256, URLENCODE=257, + URLDECODE=258, HTMLENCODE=259, HTMLDECODE=260, BASE64TOTEXT=261, BASE64URLTOTEXT=262, + TEXTTOBASE64=263, TEXTTOBASE64URL=264, REGEX=265, REGEXREPLACE=266, ISREGEX=267, + GUID=268, MD5=269, SHA1=270, SHA256=271, SHA512=272, HMACMD5=273, HMACSHA1=274, + HMACSHA256=275, HMACSHA512=276, TRIMSTART=277, TRIMEND=278, INDEXOF=279, + LASTINDEXOF=280, SPLIT=281, JOIN=282, SUBSTRING=283, STARTSWITH=284, ENDSWITH=285, + ISNULLOREMPTY=286, ISNULLORWHITESPACE=287, REMOVESTART=288, REMOVEEND=289, + JSON=290, LOOKCEILING=291, LOOKFLOOR=292, ARRAY=293, ALGORITHMVERSION=294, + ADDYEARS=295, ADDMONTHS=296, ADDDAYS=297, ADDHOURS=298, ADDMINUTES=299, + ADDSECONDS=300, TIMESTAMP=301, HAS=302, HASVALUE=303, PARAM=304, PARAMETER=305, + WS=306, COMMENT=307, LINE_COMMENT=308; public static final int - RULE_prog = 0, RULE_expr = 1, RULE_num = 2, RULE_unit = 3, RULE_arrayJson = 4, - RULE_parameter2 = 5; + RULE_prog = 0, RULE_expr = 1, RULE_num = 2, RULE_arrayJson = 3, RULE_parameter2 = 4; private static String[] makeRuleNames() { return new String[] { - "prog", "expr", "num", "unit", "arrayJson", "parameter2" + "prog", "expr", "num", "arrayJson", "parameter2" }; } public static final String[] ruleNames = makeRuleNames(); @@ -72,33 +78,41 @@ private static String[] makeLiteralNames() { null, "'.'", "'('", "')'", "','", "'['", "']'", "'!'", "'%'", "'*'", "'/'", "'+'", "'&'", "'>'", "'>='", "'<'", "'<='", "'='", "'=='", "'==='", "'!=='", "'!='", "'<>'", "'&&'", "'||'", "'?'", "':'", "'{'", "'}'", - "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFERROR'", "'ISNUMBER'", - "'ISTEXT'", "'ISERROR'", "'ISNONTEXT'", "'ISLOGICAL'", "'ISEVEN'", "'ISODD'", - "'IsNull'", "'ISNULLORERROR'", "'AND'", "'OR'", "'NOT'", null, null, - "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", - "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", - "'BIN2HEX'", "'ABS'", "'QUOTIENT'", "'MOD'", "'SIGN'", "'SQRT'", "'TRUNC'", - "'INT'", "'GCD'", "'LCM'", "'COMBIN'", "'PERMUT'", "'DEGREES'", "'RADIANS'", - "'COS'", "'COSH'", "'SIN'", "'SINH'", "'TAN'", "'TANH'", "'ACOS'", "'ACOSH'", - "'ASIN'", "'ASINH'", "'ATAN'", "'ATANH'", "'ATAN2'", "'ROUND'", "'ROUNDDOWN'", - "'ROUNDUP'", "'CEILING'", "'FLOOR'", "'EVEN'", "'ODD'", "'MROUND'", "'RAND'", - "'RANDBETWEEN'", "'FACT'", "'FACTDOUBLE'", "'POWER'", "'EXP'", "'LN'", - "'LOG'", "'LOG10'", "'MULTINOMIAL'", "'PRODUCT'", "'SQRTPI'", "'SUMSQ'", - "'ASC'", null, "'CHAR'", "'CLEAN'", "'CODE'", "'CONCATENATE'", "'EXACT'", - "'FIND'", "'FIXED'", "'LEFT'", "'LEN'", null, "'MID'", "'PROPER'", "'REPLACE'", - "'REPT'", "'RIGHT'", "'RMB'", "'SEARCH'", "'SUBSTITUTE'", "'T'", "'TEXT'", - "'TRIM'", null, "'VALUE'", "'DATEVALUE'", "'TIMEVALUE'", "'DATE'", "'TIME'", - "'NOW'", "'TODAY'", "'YEAR'", "'MONTH'", "'DAY'", "'HOUR'", "'MINUTE'", - "'SECOND'", "'WEEKDAY'", "'DATEDIF'", "'DAYS360'", "'EDATE'", "'EOMONTH'", + "'-'", null, null, "'NULL'", "'ERROR'", null, "'IF'", "'IFS'", "'SWITCH'", + "'IFERROR'", "'ISNUMBER'", "'ISTEXT'", "'ISERROR'", "'ISNONTEXT'", "'ISLOGICAL'", + "'ISEVEN'", "'ISODD'", "'ISNULL'", "'ISNULLORERROR'", "'AND'", "'OR'", + "'XOR'", "'NOT'", null, null, "'E'", "'PI'", "'DEC2BIN'", "'DEC2HEX'", + "'DEC2OCT'", "'HEX2BIN'", "'HEX2DEC'", "'HEX2OCT'", "'OCT2BIN'", "'OCT2DEC'", + "'OCT2HEX'", "'BIN2OCT'", "'BIN2DEC'", "'BIN2HEX'", "'ABS'", "'QUOTIENT'", + "'MOD'", "'SIGN'", "'SQRT'", "'TRUNC'", "'INT'", "'GCD'", "'LCM'", "'COMBIN'", + "'PERMUT'", "'DEGREES'", "'RADIANS'", "'COS'", "'COSH'", "'SIN'", "'SINH'", + "'TAN'", "'TANH'", "'COT'", "'COTH'", "'CSC'", "'CSCH'", "'SEC'", "'SECH'", + "'ACOS'", "'ACOSH'", "'ASIN'", "'ASINH'", "'ATAN'", "'ATANH'", "'ACOT'", + "'ACOTH'", "'ATAN2'", "'ROUND'", "'ROUNDDOWN'", "'ROUNDUP'", "'CEILING'", + "'FLOOR'", "'EVEN'", "'ODD'", "'MROUND'", "'RAND'", "'RANDBETWEEN'", + "'FACT'", "'FACTDOUBLE'", "'POWER'", "'EXP'", "'LN'", "'LOG'", "'LOG10'", + "'MULTINOMIAL'", "'PRODUCT'", "'SQRTPI'", "'ERF'", "'ERFC'", "'BESSELI'", + "'BESSELJ'", "'BESSELK'", "'BESSELY'", "'DELTA'", "'GESTEP'", "'SUMSQ'", + "'SUMPRODUCT'", "'SUMX2MY2'", "'SUMX2PY2'", "'SUMXMY2'", "'ARABIC'", + "'ROMAN'", "'SERIESSUM'", "'RANK'", "'FORECAST'", "'INTERCEPT'", "'SLOPE'", + "'CORREL'", "'PEARSON'", "'YEARFRAC'", "'ASC'", null, "'CHAR'", "'CLEAN'", + "'CODE'", "'UNICHAR'", "'UNICODE'", null, "'EXACT'", "'FIND'", "'FIXED'", + "'LEFT'", "'LEN'", null, "'MID'", "'PROPER'", "'REPLACE'", "'REPT'", + "'RIGHT'", "'RMB'", "'SEARCH'", "'SUBSTITUTE'", "'T'", "'TEXT'", "'TRIM'", + null, "'VALUE'", "'DATEVALUE'", "'TIMEVALUE'", "'DATE'", "'TIME'", "'NOW'", + "'TODAY'", "'YEAR'", "'MONTH'", "'DAY'", "'HOUR'", "'MINUTE'", "'SECOND'", + "'WEEKDAY'", "'DATEDIF'", "'DAYS'", "'DAYS360'", "'EDATE'", "'EOMONTH'", "'NETWORKDAYS'", "'WORKDAY'", "'WEEKNUM'", "'MAX'", "'MEDIAN'", "'MIN'", "'QUARTILE'", "'MODE'", "'LARGE'", "'SMALL'", null, null, "'AVERAGE'", "'AVERAGEIF'", "'GEOMEAN'", "'HARMEAN'", "'COUNT'", "'COUNTIF'", "'SUM'", "'SUMIF'", "'AVEDEV'", null, null, null, "'COVARIANCE.S'", "'DEVSQ'", null, null, null, null, null, null, null, null, null, null, null, null, "'FISHER'", "'FISHERINV'", null, null, null, null, null, null, null, - null, null, null, "'WEIBULL'", "'URLENCODE'", "'URLDECODE'", "'HTMLENCODE'", + null, null, null, "'WEIBULL'", "'PMT'", "'PPMT'", "'IPMT'", "'PV'", "'FV'", + "'NPER'", "'RATE'", "'NPV'", "'XNPV'", "'IRR'", "'MIRR'", "'XIRR'", "'SLN'", + "'DB'", "'DDB'", "'SYD'", "'URLENCODE'", "'URLDECODE'", "'HTMLENCODE'", "'HTMLDECODE'", "'BASE64TOTEXT'", "'BASE64URLTOTEXT'", "'TEXTTOBASE64'", - "'TEXTTOBASE64URL'", "'REGEX'", "'REGEXREPALCE'", null, "'GUID'", "'MD5'", + "'TEXTTOBASE64URL'", "'REGEX'", "'REGEXREPLACE'", null, "'GUID'", "'MD5'", "'SHA1'", "'SHA256'", "'SHA512'", "'HMACMD5'", "'HMACSHA1'", "'HMACSHA256'", "'HMACSHA512'", null, null, "'INDEXOF'", "'LASTINDEXOF'", "'SPLIT'", "'JOIN'", "'SUBSTRING'", "'STARTSWITH'", "'ENDSWITH'", "'ISNULLOREMPTY'", @@ -113,38 +127,44 @@ private static String[] makeSymbolicNames() { null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, null, "SUB", "NUM", "STRING", "NULL", "ERROR", - "UNIT", "IF", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", "ISNONTEXT", - "ISLOGICAL", "ISEVEN", "ISODD", "IsNull", "ISNULLORERROR", "AND", "OR", - "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", "DEC2OCT", "HEX2BIN", - "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", "BIN2OCT", "BIN2DEC", - "BIN2HEX", "ABS", "QUOTIENT", "MOD", "SIGN", "SQRT", "TRUNC", "INT", - "GCD", "LCM", "COMBIN", "PERMUT", "DEGREES", "RADIANS", "COS", "COSH", - "SIN", "SINH", "TAN", "TANH", "ACOS", "ACOSH", "ASIN", "ASINH", "ATAN", - "ATANH", "ATAN2", "ROUND", "ROUNDDOWN", "ROUNDUP", "CEILING", "FLOOR", + "UNIT", "IF", "IFS", "SWITCH", "IFERROR", "ISNUMBER", "ISTEXT", "ISERROR", + "ISNONTEXT", "ISLOGICAL", "ISEVEN", "ISODD", "ISNULL", "ISNULLORERROR", + "AND", "OR", "XOR", "NOT", "TRUE", "FALSE", "E", "PI", "DEC2BIN", "DEC2HEX", + "DEC2OCT", "HEX2BIN", "HEX2DEC", "HEX2OCT", "OCT2BIN", "OCT2DEC", "OCT2HEX", + "BIN2OCT", "BIN2DEC", "BIN2HEX", "ABS", "QUOTIENT", "MOD", "SIGN", "SQRT", + "TRUNC", "INT", "GCD", "LCM", "COMBIN", "PERMUT", "DEGREES", "RADIANS", + "COS", "COSH", "SIN", "SINH", "TAN", "TANH", "COT", "COTH", "CSC", "CSCH", + "SEC", "SECH", "ACOS", "ACOSH", "ASIN", "ASINH", "ATAN", "ATANH", "ACOT", + "ACOTH", "ATAN2", "ROUND", "ROUNDDOWN", "ROUNDUP", "CEILING", "FLOOR", "EVEN", "ODD", "MROUND", "RAND", "RANDBETWEEN", "FACT", "FACTDOUBLE", "POWER", "EXP", "LN", "LOG", "LOG10", "MULTINOMIAL", "PRODUCT", "SQRTPI", - "SUMSQ", "ASC", "JIS", "CHAR", "CLEAN", "CODE", "CONCATENATE", "EXACT", - "FIND", "FIXED", "LEFT", "LEN", "LOWER", "MID", "PROPER", "REPLACE", - "REPT", "RIGHT", "RMB", "SEARCH", "SUBSTITUTE", "T", "TEXT", "TRIM", - "UPPER", "VALUE", "DATEVALUE", "TIMEVALUE", "DATE", "TIME", "NOW", "TODAY", - "YEAR", "MONTH", "DAY", "HOUR", "MINUTE", "SECOND", "WEEKDAY", "DATEDIF", - "DAYS360", "EDATE", "EOMONTH", "NETWORKDAYS", "WORKDAY", "WEEKNUM", "MAX", - "MEDIAN", "MIN", "QUARTILE", "MODE", "LARGE", "SMALL", "PERCENTILE", - "PERCENTRANK", "AVERAGE", "AVERAGEIF", "GEOMEAN", "HARMEAN", "COUNT", - "COUNTIF", "SUM", "SUMIF", "AVEDEV", "STDEV", "STDEVP", "COVAR", "COVARIANCES", - "DEVSQ", "VAR", "VARP", "NORMDIST", "NORMINV", "NORMSDIST", "NORMSINV", - "BETADIST", "BETAINV", "BINOMDIST", "EXPONDIST", "FDIST", "FINV", "FISHER", - "FISHERINV", "GAMMADIST", "GAMMAINV", "GAMMALN", "HYPGEOMDIST", "LOGINV", - "LOGNORMDIST", "NEGBINOMDIST", "POISSON", "TDIST", "TINV", "WEIBULL", - "URLENCODE", "URLDECODE", "HTMLENCODE", "HTMLDECODE", "BASE64TOTEXT", - "BASE64URLTOTEXT", "TEXTTOBASE64", "TEXTTOBASE64URL", "REGEX", "REGEXREPALCE", - "ISREGEX", "GUID", "MD5", "SHA1", "SHA256", "SHA512", "HMACMD5", "HMACSHA1", - "HMACSHA256", "HMACSHA512", "TRIMSTART", "TRIMEND", "INDEXOF", "LASTINDEXOF", - "SPLIT", "JOIN", "SUBSTRING", "STARTSWITH", "ENDSWITH", "ISNULLOREMPTY", - "ISNULLORWHITESPACE", "REMOVESTART", "REMOVEEND", "JSON", "LOOKCEILING", - "LOOKFLOOR", "ARRAY", "ALGORITHMVERSION", "ADDYEARS", "ADDMONTHS", "ADDDAYS", - "ADDHOURS", "ADDMINUTES", "ADDSECONDS", "TIMESTAMP", "HAS", "HASVALUE", - "PARAM", "PARAMETER", "WS", "COMMENT", "LINE_COMMENT" + "ERF", "ERFC", "BESSELI", "BESSELJ", "BESSELK", "BESSELY", "DELTA", "GESTEP", + "SUMSQ", "SUMPRODUCT", "SUMX2MY2", "SUMX2PY2", "SUMXMY2", "ARABIC", "ROMAN", + "SERIESSUM", "RANK", "FORECAST", "INTERCEPT", "SLOPE", "CORREL", "PEARSON", + "YEARFRAC", "ASC", "JIS", "CHAR", "CLEAN", "CODE", "UNICHAR", "UNICODE", + "CONCATENATE", "EXACT", "FIND", "FIXED", "LEFT", "LEN", "LOWER", "MID", + "PROPER", "REPLACE", "REPT", "RIGHT", "RMB", "SEARCH", "SUBSTITUTE", + "T", "TEXT", "TRIM", "UPPER", "VALUE", "DATEVALUE", "TIMEVALUE", "DATE", + "TIME", "NOW", "TODAY", "YEAR", "MONTH", "DAY", "HOUR", "MINUTE", "SECOND", + "WEEKDAY", "DATEDIF", "DAYS", "DAYS360", "EDATE", "EOMONTH", "NETWORKDAYS", + "WORKDAY", "WEEKNUM", "MAX", "MEDIAN", "MIN", "QUARTILE", "MODE", "LARGE", + "SMALL", "PERCENTILE", "PERCENTRANK", "AVERAGE", "AVERAGEIF", "GEOMEAN", + "HARMEAN", "COUNT", "COUNTIF", "SUM", "SUMIF", "AVEDEV", "STDEV", "STDEVP", + "COVAR", "COVARIANCES", "DEVSQ", "VAR", "VARP", "NORMDIST", "NORMINV", + "NORMSDIST", "NORMSINV", "BETADIST", "BETAINV", "BINOMDIST", "EXPONDIST", + "FDIST", "FINV", "FISHER", "FISHERINV", "GAMMADIST", "GAMMAINV", "GAMMALN", + "HYPGEOMDIST", "LOGINV", "LOGNORMDIST", "NEGBINOMDIST", "POISSON", "TDIST", + "TINV", "WEIBULL", "PMT", "PPMT", "IPMT", "PV", "FV", "NPER", "RATE", + "NPV", "XNPV", "IRR", "MIRR", "XIRR", "SLN", "DB", "DDB", "SYD", "URLENCODE", + "URLDECODE", "HTMLENCODE", "HTMLDECODE", "BASE64TOTEXT", "BASE64URLTOTEXT", + "TEXTTOBASE64", "TEXTTOBASE64URL", "REGEX", "REGEXREPLACE", "ISREGEX", + "GUID", "MD5", "SHA1", "SHA256", "SHA512", "HMACMD5", "HMACSHA1", "HMACSHA256", + "HMACSHA512", "TRIMSTART", "TRIMEND", "INDEXOF", "LASTINDEXOF", "SPLIT", + "JOIN", "SUBSTRING", "STARTSWITH", "ENDSWITH", "ISNULLOREMPTY", "ISNULLORWHITESPACE", + "REMOVESTART", "REMOVEEND", "JSON", "LOOKCEILING", "LOOKFLOOR", "ARRAY", + "ALGORITHMVERSION", "ADDYEARS", "ADDMONTHS", "ADDDAYS", "ADDHOURS", "ADDMINUTES", + "ADDSECONDS", "TIMESTAMP", "HAS", "HASVALUE", "PARAM", "PARAMETER", "WS", + "COMMENT", "LINE_COMMENT" }; } private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); @@ -221,9 +241,9 @@ public final ProgContext prog() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(12); + setState(10); expr(0); - setState(13); + setState(11); match(EOF); } } @@ -280,18 +300,18 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class REGEXREPALCE_funContext extends ExprContext { - public TerminalNode REGEXREPALCE() { return getToken(mathParser.REGEXREPALCE, 0); } + public static class NPV_funContext extends ExprContext { + public TerminalNode NPV() { return getToken(mathParser.NPV, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public REGEXREPALCE_funContext(ExprContext ctx) { copyFrom(ctx); } + public NPV_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitREGEXREPALCE_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitNPV_fun(this); else return visitor.visitChildren(this); } } @@ -409,6 +429,35 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class BESSELI_funContext extends ExprContext { + public TerminalNode BESSELI() { return getToken(mathParser.BESSELI, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public BESSELI_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitBESSELI_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class CSCH_funContext extends ExprContext { + public TerminalNode CSCH() { return getToken(mathParser.CSCH, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public CSCH_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitCSCH_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class OCT2BIN_funContext extends ExprContext { public TerminalNode OCT2BIN() { return getToken(mathParser.OCT2BIN, 0); } public List expr() { @@ -441,6 +490,19 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class UNICODE_funContext extends ExprContext { + public TerminalNode UNICODE() { return getToken(mathParser.UNICODE, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public UNICODE_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitUNICODE_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class FINV_funContext extends ExprContext { public TerminalNode FINV() { return getToken(mathParser.FINV, 0); } public List expr() { @@ -457,6 +519,35 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class SEC_funContext extends ExprContext { + public TerminalNode SEC() { return getToken(mathParser.SEC, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public SEC_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSEC_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class SYD_funContext extends ExprContext { + public TerminalNode SYD() { return getToken(mathParser.SYD, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public SYD_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSYD_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class NOT_funContext extends ExprContext { public ExprContext expr() { return getRuleContext(ExprContext.class,0); @@ -486,6 +577,19 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class ACOTH_funContext extends ExprContext { + public TerminalNode ACOTH() { return getToken(mathParser.ACOTH, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public ACOTH_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitACOTH_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class LOOKCEILING_funContext extends ExprContext { public TerminalNode LOOKCEILING() { return getToken(mathParser.LOOKCEILING, 0); } public List expr() { @@ -582,6 +686,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class RATE_funContext extends ExprContext { + public TerminalNode RATE() { return getToken(mathParser.RATE, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public RATE_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitRATE_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class DiyFunction_funContext extends ExprContext { public TerminalNode PARAMETER() { return getToken(mathParser.PARAMETER, 0); } public List expr() { @@ -600,11 +720,8 @@ public T accept(ParseTreeVisitor visitor) { @SuppressWarnings("CheckReturnValue") public static class SHA256_funContext extends ExprContext { public TerminalNode SHA256() { return getToken(mathParser.SHA256, 0); } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); } public SHA256_funContext(ExprContext ctx) { copyFrom(ctx); } @Override @@ -707,6 +824,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class SLOPE_funContext extends ExprContext { + public TerminalNode SLOPE() { return getToken(mathParser.SLOPE, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public SLOPE_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSLOPE_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class CLEAN_funContext extends ExprContext { public TerminalNode CLEAN() { return getToken(mathParser.CLEAN, 0); } public ExprContext expr() { @@ -823,6 +956,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class PPMT_funContext extends ExprContext { + public TerminalNode PPMT() { return getToken(mathParser.PPMT, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public PPMT_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitPPMT_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class WORKDAY_funContext extends ExprContext { public TerminalNode WORKDAY() { return getToken(mathParser.WORKDAY, 0); } public List expr() { @@ -857,8 +1006,11 @@ public T accept(ParseTreeVisitor visitor) { @SuppressWarnings("CheckReturnValue") public static class BIN2DEC_funContext extends ExprContext { public TerminalNode BIN2DEC() { return getToken(mathParser.BIN2DEC, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); } public BIN2DEC_funContext(ExprContext ctx) { copyFrom(ctx); } @Override @@ -897,6 +1049,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class BESSELJ_funContext extends ExprContext { + public TerminalNode BESSELJ() { return getToken(mathParser.BESSELJ, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public BESSELJ_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitBESSELJ_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class HARMEAN_funContext extends ExprContext { public TerminalNode HARMEAN() { return getToken(mathParser.HARMEAN, 0); } public List expr() { @@ -1045,6 +1213,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class DDB_funContext extends ExprContext { + public TerminalNode DDB() { return getToken(mathParser.DDB, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public DDB_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitDDB_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class SUMIF_funContext extends ExprContext { public TerminalNode SUMIF() { return getToken(mathParser.SUMIF, 0); } public List expr() { @@ -1170,11 +1354,8 @@ public T accept(ParseTreeVisitor visitor) { @SuppressWarnings("CheckReturnValue") public static class BASE64URLTOTEXT_funContext extends ExprContext { public TerminalNode BASE64URLTOTEXT() { return getToken(mathParser.BASE64URLTOTEXT, 0); } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); } public BASE64URLTOTEXT_funContext(ExprContext ctx) { copyFrom(ctx); } @Override @@ -1197,6 +1378,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class XIRR_funContext extends ExprContext { + public TerminalNode XIRR() { return getToken(mathParser.XIRR, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public XIRR_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitXIRR_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class ISTEXT_funContext extends ExprContext { public TerminalNode ISTEXT() { return getToken(mathParser.ISTEXT, 0); } public ExprContext expr() { @@ -1294,6 +1491,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class PV_funContext extends ExprContext { + public TerminalNode PV() { return getToken(mathParser.PV, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public PV_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitPV_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class JSON_funContext extends ExprContext { public TerminalNode JSON() { return getToken(mathParser.JSON, 0); } public ExprContext expr() { @@ -1504,12 +1717,12 @@ public T accept(ParseTreeVisitor visitor) { } @SuppressWarnings("CheckReturnValue") public static class NUM_funContext extends ExprContext { + public Token unit; public NumContext num() { return getRuleContext(NumContext.class,0); } - public UnitContext unit() { - return getRuleContext(UnitContext.class,0); - } + public TerminalNode UNIT() { return getToken(mathParser.UNIT, 0); } + public TerminalNode T() { return getToken(mathParser.T, 0); } public NUM_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { @@ -1531,172 +1744,310 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class QUOTIENT_funContext extends ExprContext { - public TerminalNode QUOTIENT() { return getToken(mathParser.QUOTIENT, 0); } + public static class CORREL_funContext extends ExprContext { + public TerminalNode CORREL() { return getToken(mathParser.CORREL, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public QUOTIENT_funContext(ExprContext ctx) { copyFrom(ctx); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitQUOTIENT_fun(this); - else return visitor.visitChildren(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class OCT2DEC_funContext extends ExprContext { - public TerminalNode OCT2DEC() { return getToken(mathParser.OCT2DEC, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); - } - public OCT2DEC_funContext(ExprContext ctx) { copyFrom(ctx); } + public CORREL_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitOCT2DEC_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitCORREL_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class SEARCH_funContext extends ExprContext { - public TerminalNode SEARCH() { return getToken(mathParser.SEARCH, 0); } + public static class GESTEP_funContext extends ExprContext { + public TerminalNode GESTEP() { return getToken(mathParser.GESTEP, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public SEARCH_funContext(ExprContext ctx) { copyFrom(ctx); } + public GESTEP_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSEARCH_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitGESTEP_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class ROUNDUP_funContext extends ExprContext { - public TerminalNode ROUNDUP() { return getToken(mathParser.ROUNDUP, 0); } + public static class XNPV_funContext extends ExprContext { + public TerminalNode XNPV() { return getToken(mathParser.XNPV, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public ROUNDUP_funContext(ExprContext ctx) { copyFrom(ctx); } + public XNPV_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitROUNDUP_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitXNPV_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class COMBIN_funContext extends ExprContext { - public TerminalNode COMBIN() { return getToken(mathParser.COMBIN, 0); } + public static class QUOTIENT_funContext extends ExprContext { + public TerminalNode QUOTIENT() { return getToken(mathParser.QUOTIENT, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public COMBIN_funContext(ExprContext ctx) { copyFrom(ctx); } + public QUOTIENT_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitCOMBIN_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitQUOTIENT_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class CODE_funContext extends ExprContext { - public TerminalNode CODE() { return getToken(mathParser.CODE, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); - } - public CODE_funContext(ExprContext ctx) { copyFrom(ctx); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitCODE_fun(this); - else return visitor.visitChildren(this); + public static class FORECAST_funContext extends ExprContext { + public TerminalNode FORECAST() { return getToken(mathParser.FORECAST, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); } - } - @SuppressWarnings("CheckReturnValue") - public static class ASINH_funContext extends ExprContext { - public TerminalNode ASINH() { return getToken(mathParser.ASINH, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); } - public ASINH_funContext(ExprContext ctx) { copyFrom(ctx); } + public FORECAST_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitASINH_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitFORECAST_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class SIN_funContext extends ExprContext { - public TerminalNode SIN() { return getToken(mathParser.SIN, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); + public static class BESSELY_funContext extends ExprContext { + public TerminalNode BESSELY() { return getToken(mathParser.BESSELY, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); } - public SIN_funContext(ExprContext ctx) { copyFrom(ctx); } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public BESSELY_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSIN_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitBESSELY_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class SUBSTRING_funContext extends ExprContext { - public TerminalNode SUBSTRING() { return getToken(mathParser.SUBSTRING, 0); } + public static class OCT2DEC_funContext extends ExprContext { + public TerminalNode OCT2DEC() { return getToken(mathParser.OCT2DEC, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public SUBSTRING_funContext(ExprContext ctx) { copyFrom(ctx); } + public OCT2DEC_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSUBSTRING_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitOCT2DEC_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class RANDBETWEEN_funContext extends ExprContext { - public TerminalNode RANDBETWEEN() { return getToken(mathParser.RANDBETWEEN, 0); } + public static class SEARCH_funContext extends ExprContext { + public TerminalNode SEARCH() { return getToken(mathParser.SEARCH, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public RANDBETWEEN_funContext(ExprContext ctx) { copyFrom(ctx); } + public SEARCH_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitRANDBETWEEN_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSEARCH_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class AVERAGE_funContext extends ExprContext { - public TerminalNode AVERAGE() { return getToken(mathParser.AVERAGE, 0); } + public static class IRR_funContext extends ExprContext { + public TerminalNode IRR() { return getToken(mathParser.IRR, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public AVERAGE_funContext(ExprContext ctx) { copyFrom(ctx); } + public IRR_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitAVERAGE_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitIRR_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class LOG_funContext extends ExprContext { - public TerminalNode LOG() { return getToken(mathParser.LOG, 0); } + public static class ACOT_funContext extends ExprContext { + public TerminalNode ACOT() { return getToken(mathParser.ACOT, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public ACOT_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitACOT_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ROUNDUP_funContext extends ExprContext { + public TerminalNode ROUNDUP() { return getToken(mathParser.ROUNDUP, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public ROUNDUP_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitROUNDUP_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class COMBIN_funContext extends ExprContext { + public TerminalNode COMBIN() { return getToken(mathParser.COMBIN, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public COMBIN_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitCOMBIN_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class CODE_funContext extends ExprContext { + public TerminalNode CODE() { return getToken(mathParser.CODE, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public CODE_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitCODE_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class CSC_funContext extends ExprContext { + public TerminalNode CSC() { return getToken(mathParser.CSC, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public CSC_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitCSC_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ASINH_funContext extends ExprContext { + public TerminalNode ASINH() { return getToken(mathParser.ASINH, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public ASINH_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitASINH_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class COTH_funContext extends ExprContext { + public TerminalNode COTH() { return getToken(mathParser.COTH, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public COTH_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitCOTH_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class SIN_funContext extends ExprContext { + public TerminalNode SIN() { return getToken(mathParser.SIN, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public SIN_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSIN_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class SUBSTRING_funContext extends ExprContext { + public TerminalNode SUBSTRING() { return getToken(mathParser.SUBSTRING, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public SUBSTRING_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSUBSTRING_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class RANDBETWEEN_funContext extends ExprContext { + public TerminalNode RANDBETWEEN() { return getToken(mathParser.RANDBETWEEN, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public RANDBETWEEN_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitRANDBETWEEN_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class AVERAGE_funContext extends ExprContext { + public TerminalNode AVERAGE() { return getToken(mathParser.AVERAGE, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public AVERAGE_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitAVERAGE_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class LOG_funContext extends ExprContext { + public TerminalNode LOG() { return getToken(mathParser.LOG, 0); } public List expr() { return getRuleContexts(ExprContext.class); } @@ -1735,8 +2086,6 @@ public List expr() { public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public TerminalNode AND() { return getToken(mathParser.AND, 0); } - public TerminalNode OR() { return getToken(mathParser.OR, 0); } public AndOr_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { @@ -1912,246 +2261,403 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class SPLIT_funContext extends ExprContext { - public TerminalNode SPLIT() { return getToken(mathParser.SPLIT, 0); } + public static class BESSELK_funContext extends ExprContext { + public TerminalNode BESSELK() { return getToken(mathParser.BESSELK, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public SPLIT_funContext(ExprContext ctx) { copyFrom(ctx); } + public BESSELK_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSPLIT_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitBESSELK_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class COVAR_funContext extends ExprContext { - public TerminalNode COVAR() { return getToken(mathParser.COVAR, 0); } + public static class SPLIT_funContext extends ExprContext { + public TerminalNode SPLIT() { return getToken(mathParser.SPLIT, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public COVAR_funContext(ExprContext ctx) { copyFrom(ctx); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitCOVAR_fun(this); - else return visitor.visitChildren(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class URLDECODE_funContext extends ExprContext { - public TerminalNode URLDECODE() { return getToken(mathParser.URLDECODE, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); - } - public URLDECODE_funContext(ExprContext ctx) { copyFrom(ctx); } + public SPLIT_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitURLDECODE_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSPLIT_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class LARGE_funContext extends ExprContext { - public TerminalNode LARGE() { return getToken(mathParser.LARGE, 0); } + public static class REGEXREPLACE_funContext extends ExprContext { + public TerminalNode REGEXREPLACE() { return getToken(mathParser.REGEXREPLACE, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public LARGE_funContext(ExprContext ctx) { copyFrom(ctx); } + public REGEXREPLACE_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitLARGE_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitREGEXREPLACE_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class TIMESTAMP_funContext extends ExprContext { - public TerminalNode TIMESTAMP() { return getToken(mathParser.TIMESTAMP, 0); } + public static class COVAR_funContext extends ExprContext { + public TerminalNode COVAR() { return getToken(mathParser.COVAR, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public TIMESTAMP_funContext(ExprContext ctx) { copyFrom(ctx); } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitTIMESTAMP_fun(this); - else return visitor.visitChildren(this); - } - } - @SuppressWarnings("CheckReturnValue") - public static class VALUE_funContext extends ExprContext { - public TerminalNode VALUE() { return getToken(mathParser.VALUE, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); - } - public VALUE_funContext(ExprContext ctx) { copyFrom(ctx); } + public COVAR_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitVALUE_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitCOVAR_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class DAY_funContext extends ExprContext { - public TerminalNode DAY() { return getToken(mathParser.DAY, 0); } + public static class URLDECODE_funContext extends ExprContext { + public TerminalNode URLDECODE() { return getToken(mathParser.URLDECODE, 0); } public ExprContext expr() { return getRuleContext(ExprContext.class,0); } - public DAY_funContext(ExprContext ctx) { copyFrom(ctx); } + public URLDECODE_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitDAY_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitURLDECODE_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class WEIBULL_funContext extends ExprContext { - public TerminalNode WEIBULL() { return getToken(mathParser.WEIBULL, 0); } + public static class LARGE_funContext extends ExprContext { + public TerminalNode LARGE() { return getToken(mathParser.LARGE, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public WEIBULL_funContext(ExprContext ctx) { copyFrom(ctx); } + public LARGE_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitWEIBULL_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitLARGE_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class HMACSHA256_funContext extends ExprContext { - public TerminalNode HMACSHA256() { return getToken(mathParser.HMACSHA256, 0); } + public static class SUMXMY2_funContext extends ExprContext { + public TerminalNode SUMXMY2() { return getToken(mathParser.SUMXMY2, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public HMACSHA256_funContext(ExprContext ctx) { copyFrom(ctx); } + public SUMXMY2_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitHMACSHA256_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSUMXMY2_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class BINOMDIST_funContext extends ExprContext { - public TerminalNode BINOMDIST() { return getToken(mathParser.BINOMDIST, 0); } + public static class SERIESSUM_funContext extends ExprContext { + public TerminalNode SERIESSUM() { return getToken(mathParser.SERIESSUM, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public BINOMDIST_funContext(ExprContext ctx) { copyFrom(ctx); } + public SERIESSUM_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitBINOMDIST_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSERIESSUM_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class Judge_funContext extends ExprContext { - public Token op; + public static class TIMESTAMP_funContext extends ExprContext { + public TerminalNode TIMESTAMP() { return getToken(mathParser.TIMESTAMP, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public Judge_funContext(ExprContext ctx) { copyFrom(ctx); } + public TIMESTAMP_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitJudge_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitTIMESTAMP_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class DEVSQ_funContext extends ExprContext { - public TerminalNode DEVSQ() { return getToken(mathParser.DEVSQ, 0); } + public static class RANK_funContext extends ExprContext { + public TerminalNode RANK() { return getToken(mathParser.RANK, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public DEVSQ_funContext(ExprContext ctx) { copyFrom(ctx); } + public RANK_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitDEVSQ_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitRANK_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class MODE_funContext extends ExprContext { - public TerminalNode MODE() { return getToken(mathParser.MODE, 0); } + public static class PMT_funContext extends ExprContext { + public TerminalNode PMT() { return getToken(mathParser.PMT, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public MODE_funContext(ExprContext ctx) { copyFrom(ctx); } + public PMT_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitMODE_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitPMT_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class BETAINV_funContext extends ExprContext { - public TerminalNode BETAINV() { return getToken(mathParser.BETAINV, 0); } + public static class ROMAN_funContext extends ExprContext { + public TerminalNode ROMAN() { return getToken(mathParser.ROMAN, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public BETAINV_funContext(ExprContext ctx) { copyFrom(ctx); } + public ROMAN_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitBETAINV_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitROMAN_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class MAX_funContext extends ExprContext { - public TerminalNode MAX() { return getToken(mathParser.MAX, 0); } + public static class DELTA_funContext extends ExprContext { + public TerminalNode DELTA() { return getToken(mathParser.DELTA, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public MAX_funContext(ExprContext ctx) { copyFrom(ctx); } + public DELTA_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitMAX_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitDELTA_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class MINUTE_funContext extends ExprContext { - public TerminalNode MINUTE() { return getToken(mathParser.MINUTE, 0); } + public static class VALUE_funContext extends ExprContext { + public TerminalNode VALUE() { return getToken(mathParser.VALUE, 0); } public ExprContext expr() { return getRuleContext(ExprContext.class,0); } - public MINUTE_funContext(ExprContext ctx) { copyFrom(ctx); } + public VALUE_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitMINUTE_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitVALUE_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class DAY_funContext extends ExprContext { + public TerminalNode DAY() { return getToken(mathParser.DAY, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public DAY_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitDAY_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class WEIBULL_funContext extends ExprContext { + public TerminalNode WEIBULL() { return getToken(mathParser.WEIBULL, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public WEIBULL_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitWEIBULL_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class PEARSON_funContext extends ExprContext { + public TerminalNode PEARSON() { return getToken(mathParser.PEARSON, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public PEARSON_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitPEARSON_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class HMACSHA256_funContext extends ExprContext { + public TerminalNode HMACSHA256() { return getToken(mathParser.HMACSHA256, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public HMACSHA256_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitHMACSHA256_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class BINOMDIST_funContext extends ExprContext { + public TerminalNode BINOMDIST() { return getToken(mathParser.BINOMDIST, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public BINOMDIST_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitBINOMDIST_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class Judge_funContext extends ExprContext { + public Token op; + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public Judge_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitJudge_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class DEVSQ_funContext extends ExprContext { + public TerminalNode DEVSQ() { return getToken(mathParser.DEVSQ, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public DEVSQ_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitDEVSQ_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class ERFC_funContext extends ExprContext { + public TerminalNode ERFC() { return getToken(mathParser.ERFC, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public ERFC_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitERFC_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class MODE_funContext extends ExprContext { + public TerminalNode MODE() { return getToken(mathParser.MODE, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public MODE_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitMODE_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class BETAINV_funContext extends ExprContext { + public TerminalNode BETAINV() { return getToken(mathParser.BETAINV, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public BETAINV_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitBETAINV_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class MAX_funContext extends ExprContext { + public TerminalNode MAX() { return getToken(mathParser.MAX, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public MAX_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitMAX_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class MINUTE_funContext extends ExprContext { + public TerminalNode MINUTE() { return getToken(mathParser.MINUTE, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public MINUTE_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitMINUTE_fun(this); else return visitor.visitChildren(this); } } @@ -2277,8 +2783,11 @@ public T accept(ParseTreeVisitor visitor) { @SuppressWarnings("CheckReturnValue") public static class HEX2DEC_funContext extends ExprContext { public TerminalNode HEX2DEC() { return getToken(mathParser.HEX2DEC, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); } public HEX2DEC_funContext(ExprContext ctx) { copyFrom(ctx); } @Override @@ -2304,6 +2813,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class IFS_funContext extends ExprContext { + public TerminalNode IFS() { return getToken(mathParser.IFS, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public IFS_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitIFS_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class ODD_funContext extends ExprContext { public TerminalNode ODD() { return getToken(mathParser.ODD, 0); } public ExprContext expr() { @@ -2319,16 +2844,29 @@ public T accept(ParseTreeVisitor visitor) { @SuppressWarnings("CheckReturnValue") public static class TEXTTOBASE64_funContext extends ExprContext { public TerminalNode TEXTTOBASE64() { return getToken(mathParser.TEXTTOBASE64, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public TEXTTOBASE64_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitTEXTTOBASE64_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class SUMPRODUCT_funContext extends ExprContext { + public TerminalNode SUMPRODUCT() { return getToken(mathParser.SUMPRODUCT, 0); } public List expr() { return getRuleContexts(ExprContext.class); } public ExprContext expr(int i) { return getRuleContext(ExprContext.class,i); } - public TEXTTOBASE64_funContext(ExprContext ctx) { copyFrom(ctx); } + public SUMPRODUCT_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitTEXTTOBASE64_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSUMPRODUCT_fun(this); else return visitor.visitChildren(this); } } @@ -2470,11 +3008,8 @@ public T accept(ParseTreeVisitor visitor) { @SuppressWarnings("CheckReturnValue") public static class TEXTTOBASE64URL_funContext extends ExprContext { public TerminalNode TEXTTOBASE64URL() { return getToken(mathParser.TEXTTOBASE64URL, 0); } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); } public TEXTTOBASE64URL_funContext(ExprContext ctx) { copyFrom(ctx); } @Override @@ -2486,11 +3021,8 @@ public T accept(ParseTreeVisitor visitor) { @SuppressWarnings("CheckReturnValue") public static class MD5_funContext extends ExprContext { public TerminalNode MD5() { return getToken(mathParser.MD5, 0); } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); } public MD5_funContext(ExprContext ctx) { copyFrom(ctx); } @Override @@ -2542,6 +3074,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class MIRR_funContext extends ExprContext { + public TerminalNode MIRR() { return getToken(mathParser.MIRR, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public MIRR_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitMIRR_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class ASC_funContext extends ExprContext { public TerminalNode ASC() { return getToken(mathParser.ASC, 0); } public ExprContext expr() { @@ -2700,6 +3248,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class DAYS_funContext extends ExprContext { + public TerminalNode DAYS() { return getToken(mathParser.DAYS, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public DAYS_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitDAYS_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class GAMMADIST_funContext extends ExprContext { public TerminalNode GAMMADIST() { return getToken(mathParser.GAMMADIST, 0); } public List expr() { @@ -2768,20 +3332,49 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") - public static class E_funContext extends ExprContext { - public TerminalNode E() { return getToken(mathParser.E, 0); } - public E_funContext(ExprContext ctx) { copyFrom(ctx); } + public static class ERF_funContext extends ExprContext { + public TerminalNode ERF() { return getToken(mathParser.ERF, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public ERF_funContext(ExprContext ctx) { copyFrom(ctx); } @Override public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitE_fun(this); + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitERF_fun(this); else return visitor.visitChildren(this); } } @SuppressWarnings("CheckReturnValue") - public static class TRIM_funContext extends ExprContext { - public TerminalNode TRIM() { return getToken(mathParser.TRIM, 0); } - public ExprContext expr() { - return getRuleContext(ExprContext.class,0); + public static class SUMX2PY2_funContext extends ExprContext { + public TerminalNode SUMX2PY2() { return getToken(mathParser.SUMX2PY2, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public SUMX2PY2_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSUMX2PY2_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class E_funContext extends ExprContext { + public TerminalNode E() { return getToken(mathParser.E, 0); } + public E_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitE_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class TRIM_funContext extends ExprContext { + public TerminalNode TRIM() { return getToken(mathParser.TRIM, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); } public TRIM_funContext(ExprContext ctx) { copyFrom(ctx); } @Override @@ -2951,6 +3544,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class IPMT_funContext extends ExprContext { + public TerminalNode IPMT() { return getToken(mathParser.IPMT, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public IPMT_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitIPMT_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class HMACSHA1_funContext extends ExprContext { public TerminalNode HMACSHA1() { return getToken(mathParser.HMACSHA1, 0); } public List expr() { @@ -2995,6 +3604,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class SLN_funContext extends ExprContext { + public TerminalNode SLN() { return getToken(mathParser.SLN, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public SLN_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSLN_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class BETADIST_funContext extends ExprContext { public TerminalNode BETADIST() { return getToken(mathParser.BETADIST, 0); } public List expr() { @@ -3168,11 +3793,8 @@ public T accept(ParseTreeVisitor visitor) { @SuppressWarnings("CheckReturnValue") public static class SHA512_funContext extends ExprContext { public TerminalNode SHA512() { return getToken(mathParser.SHA512, 0); } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); } public SHA512_funContext(ExprContext ctx) { copyFrom(ctx); } @Override @@ -3214,6 +3836,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class SWITCH_funContext extends ExprContext { + public TerminalNode SWITCH() { return getToken(mathParser.SWITCH, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public SWITCH_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSWITCH_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class ISNONTEXT_funContext extends ExprContext { public TerminalNode ISNONTEXT() { return getToken(mathParser.ISNONTEXT, 0); } public ExprContext expr() { @@ -3349,7 +3987,7 @@ public T accept(ParseTreeVisitor visitor) { } @SuppressWarnings("CheckReturnValue") public static class ISNULL_funContext extends ExprContext { - public TerminalNode IsNull() { return getToken(mathParser.IsNull, 0); } + public TerminalNode ISNULL() { return getToken(mathParser.ISNULL, 0); } public List expr() { return getRuleContexts(ExprContext.class); } @@ -3364,6 +4002,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class FV_funContext extends ExprContext { + public TerminalNode FV() { return getToken(mathParser.FV, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public FV_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitFV_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class ASIN_funContext extends ExprContext { public TerminalNode ASIN() { return getToken(mathParser.ASIN, 0); } public ExprContext expr() { @@ -3377,6 +4031,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class SUMX2MY2_funContext extends ExprContext { + public TerminalNode SUMX2MY2() { return getToken(mathParser.SUMX2MY2, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public SUMX2MY2_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSUMX2MY2_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class MulDiv_funContext extends ExprContext { public Token op; public List expr() { @@ -3393,6 +4063,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class NPER_funContext extends ExprContext { + public TerminalNode NPER() { return getToken(mathParser.NPER, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public NPER_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitNPER_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class REMOVESTART_funContext extends ExprContext { public TerminalNode REMOVESTART() { return getToken(mathParser.REMOVESTART, 0); } public List expr() { @@ -3409,6 +4095,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class XOR_funContext extends ExprContext { + public TerminalNode XOR() { return getToken(mathParser.XOR, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public XOR_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitXOR_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class T_funContext extends ExprContext { public TerminalNode T() { return getToken(mathParser.T, 0); } public ExprContext expr() { @@ -3466,11 +4168,8 @@ public T accept(ParseTreeVisitor visitor) { @SuppressWarnings("CheckReturnValue") public static class BASE64TOTEXT_funContext extends ExprContext { public TerminalNode BASE64TOTEXT() { return getToken(mathParser.BASE64TOTEXT, 0); } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); } public BASE64TOTEXT_funContext(ExprContext ctx) { copyFrom(ctx); } @Override @@ -3557,6 +4256,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class DB_funContext extends ExprContext { + public TerminalNode DB() { return getToken(mathParser.DB, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public DB_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitDB_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class ISNULLOREMPTY_funContext extends ExprContext { public TerminalNode ISNULLOREMPTY() { return getToken(mathParser.ISNULLOREMPTY, 0); } public ExprContext expr() { @@ -3580,6 +4295,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class INTERCEPT_funContext extends ExprContext { + public TerminalNode INTERCEPT() { return getToken(mathParser.INTERCEPT, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public INTERCEPT_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitINTERCEPT_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class FISHERINV_funContext extends ExprContext { public TerminalNode FISHERINV() { return getToken(mathParser.FISHERINV, 0); } public ExprContext expr() { @@ -3595,11 +4326,8 @@ public T accept(ParseTreeVisitor visitor) { @SuppressWarnings("CheckReturnValue") public static class SHA1_funContext extends ExprContext { public TerminalNode SHA1() { return getToken(mathParser.SHA1, 0); } - public List expr() { - return getRuleContexts(ExprContext.class); - } - public ExprContext expr(int i) { - return getRuleContext(ExprContext.class,i); + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); } public SHA1_funContext(ExprContext ctx) { copyFrom(ctx); } @Override @@ -3625,6 +4353,19 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class ARABIC_funContext extends ExprContext { + public TerminalNode ARABIC() { return getToken(mathParser.ARABIC, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public ARABIC_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitARABIC_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class ATAN2_funContext extends ExprContext { public TerminalNode ATAN2() { return getToken(mathParser.ATAN2, 0); } public List expr() { @@ -3641,6 +4382,45 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class SECH_funContext extends ExprContext { + public TerminalNode SECH() { return getToken(mathParser.SECH, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public SECH_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitSECH_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class COT_funContext extends ExprContext { + public TerminalNode COT() { return getToken(mathParser.COT, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public COT_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitCOT_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") + public static class UNICHAR_funContext extends ExprContext { + public TerminalNode UNICHAR() { return getToken(mathParser.UNICHAR, 0); } + public ExprContext expr() { + return getRuleContext(ExprContext.class,0); + } + public UNICHAR_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitUNICHAR_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class ADDHOURS_funContext extends ExprContext { public TerminalNode ADDHOURS() { return getToken(mathParser.ADDHOURS, 0); } public List expr() { @@ -3667,6 +4447,22 @@ public T accept(ParseTreeVisitor visitor) { } } @SuppressWarnings("CheckReturnValue") + public static class YEARFRAC_funContext extends ExprContext { + public TerminalNode YEARFRAC() { return getToken(mathParser.YEARFRAC, 0); } + public List expr() { + return getRuleContexts(ExprContext.class); + } + public ExprContext expr(int i) { + return getRuleContext(ExprContext.class,i); + } + public YEARFRAC_funContext(ExprContext ctx) { copyFrom(ctx); } + @Override + public T accept(ParseTreeVisitor visitor) { + if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitYEARFRAC_fun(this); + else return visitor.visitChildren(this); + } + } + @SuppressWarnings("CheckReturnValue") public static class RAND_funContext extends ExprContext { public TerminalNode RAND() { return getToken(mathParser.RAND, 0); } public RAND_funContext(ExprContext ctx) { copyFrom(ctx); } @@ -3693,20 +4489,20 @@ private ExprContext expr(int _p) throws RecognitionException { int _alt; enterOuterAlt(_localctx, 1); { - setState(1810); + setState(2284); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,103,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,123,_ctx) ) { case 1: { _localctx = new Bracket_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(16); + setState(14); match(T__1); - setState(17); + setState(15); expr(0); - setState(18); + setState(16); match(T__2); } break; @@ -3715,10 +4511,10 @@ private ExprContext expr(int _p) throws RecognitionException { _localctx = new NOT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(20); + setState(18); match(T__6); - setState(21); - expr(235); + setState(19); + expr(287); } break; case 3: @@ -3726,29 +4522,29 @@ private ExprContext expr(int _p) throws RecognitionException { _localctx = new Array_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(22); + setState(20); match(ARRAY); - setState(23); + setState(21); match(T__1); - setState(24); + setState(22); expr(0); - setState(29); + setState(27); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(25); + setState(23); match(T__3); - setState(26); + setState(24); expr(0); } } - setState(31); + setState(29); _errHandler.sync(this); _la = _input.LA(1); } - setState(32); + setState(30); match(T__2); } break; @@ -3757,4325 +4553,4648 @@ private ExprContext expr(int _p) throws RecognitionException { _localctx = new IF_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(34); + setState(32); match(IF); - setState(35); + setState(33); match(T__1); - setState(36); + setState(34); expr(0); - setState(37); + setState(35); match(T__3); - setState(38); + setState(36); expr(0); - setState(41); + setState(39); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(39); + setState(37); match(T__3); - setState(40); + setState(38); expr(0); } } - setState(43); + setState(41); match(T__2); } break; case 5: { - _localctx = new ISNUMBER_funContext(_localctx); + _localctx = new IFS_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; + setState(43); + match(IFS); + setState(44); + match(T__1); setState(45); - match(ISNUMBER); + expr(0); setState(46); - match(T__1); + match(T__3); setState(47); expr(0); - setState(48); + setState(55); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(48); + match(T__3); + setState(49); + expr(0); + setState(50); + match(T__3); + setState(51); + expr(0); + } + } + setState(57); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(58); match(T__2); } break; case 6: { - _localctx = new ISTEXT_funContext(_localctx); + _localctx = new SWITCH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(50); - match(ISTEXT); - setState(51); + setState(60); + match(SWITCH); + setState(61); match(T__1); - setState(52); + setState(62); expr(0); - setState(53); - match(T__2); - } - break; - case 7: - { - _localctx = new ISERROR_funContext(_localctx); + setState(63); + match(T__3); + setState(64); + expr(0); + setState(65); + match(T__3); + setState(66); + expr(0); + setState(74); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(67); + match(T__3); + setState(68); + expr(0); + setState(69); + match(T__3); + setState(70); + expr(0); + } + } + setState(76); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(77); + match(T__2); + } + break; + case 7: + { + _localctx = new ISNUMBER_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(55); + setState(79); + match(ISNUMBER); + setState(80); + match(T__1); + setState(81); + expr(0); + setState(82); + match(T__2); + } + break; + case 8: + { + _localctx = new ISTEXT_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(84); + match(ISTEXT); + setState(85); + match(T__1); + setState(86); + expr(0); + setState(87); + match(T__2); + } + break; + case 9: + { + _localctx = new ISERROR_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(89); match(ISERROR); - setState(56); + setState(90); match(T__1); - setState(57); + setState(91); expr(0); - setState(60); + setState(94); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(58); + setState(92); match(T__3); - setState(59); + setState(93); expr(0); } } - setState(62); + setState(96); match(T__2); } break; - case 8: + case 10: { _localctx = new ISNONTEXT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(64); + setState(98); match(ISNONTEXT); - setState(65); + setState(99); match(T__1); - setState(66); + setState(100); expr(0); - setState(67); + setState(101); match(T__2); } break; - case 9: + case 11: { _localctx = new ISLOGICAL_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(69); + setState(103); match(ISLOGICAL); - setState(70); + setState(104); match(T__1); - setState(71); + setState(105); expr(0); - setState(72); + setState(106); match(T__2); } break; - case 10: + case 12: { _localctx = new ISEVEN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(74); + setState(108); match(ISEVEN); - setState(75); + setState(109); match(T__1); - setState(76); + setState(110); expr(0); - setState(77); + setState(111); match(T__2); } break; - case 11: + case 13: { _localctx = new ISODD_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(79); + setState(113); match(ISODD); - setState(80); + setState(114); match(T__1); - setState(81); + setState(115); expr(0); - setState(82); + setState(116); match(T__2); } break; - case 12: + case 14: { _localctx = new IFERROR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(84); + setState(118); match(IFERROR); - setState(85); + setState(119); match(T__1); - setState(86); + setState(120); expr(0); - setState(87); + setState(121); match(T__3); - setState(88); + setState(122); expr(0); - setState(91); + setState(125); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(89); + setState(123); match(T__3); - setState(90); + setState(124); expr(0); } } - setState(93); + setState(127); match(T__2); } break; - case 13: + case 15: { _localctx = new ISNULL_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(95); - match(IsNull); - setState(96); + setState(129); + match(ISNULL); + setState(130); match(T__1); - setState(97); + setState(131); expr(0); - setState(100); + setState(134); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(98); + setState(132); match(T__3); - setState(99); + setState(133); expr(0); } } - setState(102); + setState(136); match(T__2); } break; - case 14: + case 16: { _localctx = new ISNULLORERROR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(104); + setState(138); match(ISNULLORERROR); - setState(105); + setState(139); match(T__1); - setState(106); + setState(140); expr(0); - setState(109); + setState(143); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(107); + setState(141); match(T__3); - setState(108); + setState(142); expr(0); } } - setState(111); + setState(145); match(T__2); } break; - case 15: + case 17: { _localctx = new AND_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(113); + setState(147); match(AND); - setState(114); + setState(148); match(T__1); - setState(115); + setState(149); expr(0); - setState(120); + setState(154); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(116); + setState(150); match(T__3); - setState(117); + setState(151); expr(0); } } - setState(122); + setState(156); _errHandler.sync(this); _la = _input.LA(1); } - setState(123); + setState(157); match(T__2); } break; - case 16: + case 18: { _localctx = new OR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(125); + setState(159); match(OR); - setState(126); + setState(160); match(T__1); - setState(127); + setState(161); expr(0); - setState(132); + setState(166); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(128); + setState(162); match(T__3); - setState(129); + setState(163); expr(0); } } - setState(134); + setState(168); _errHandler.sync(this); _la = _input.LA(1); } - setState(135); + setState(169); match(T__2); } break; - case 17: + case 19: + { + _localctx = new XOR_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(171); + match(XOR); + setState(172); + match(T__1); + setState(173); + expr(0); + setState(178); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(174); + match(T__3); + setState(175); + expr(0); + } + } + setState(180); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(181); + match(T__2); + } + break; + case 20: { _localctx = new NOT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(137); + setState(183); match(NOT); - setState(138); + setState(184); match(T__1); - setState(139); + setState(185); expr(0); - setState(140); + setState(186); match(T__2); } break; - case 18: + case 21: { _localctx = new TRUE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(142); + setState(188); match(TRUE); - setState(145); + setState(191); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,8,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { case 1: { - setState(143); + setState(189); match(T__1); - setState(144); + setState(190); match(T__2); } break; } } break; - case 19: + case 22: { _localctx = new FALSE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(147); + setState(193); match(FALSE); - setState(150); + setState(196); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,12,_ctx) ) { case 1: { - setState(148); + setState(194); match(T__1); - setState(149); + setState(195); match(T__2); } break; } } break; - case 20: + case 23: { _localctx = new E_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(152); + setState(198); match(E); - setState(155); + setState(201); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,13,_ctx) ) { case 1: { - setState(153); + setState(199); match(T__1); - setState(154); + setState(200); match(T__2); } break; } } break; - case 21: + case 24: { _localctx = new PI_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(157); + setState(203); match(PI); - setState(160); + setState(206); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { + switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { case 1: { - setState(158); + setState(204); match(T__1); - setState(159); + setState(205); match(T__2); } break; } } break; - case 22: + case 25: { _localctx = new DEC2BIN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(162); + setState(208); match(DEC2BIN); { - setState(163); + setState(209); match(T__1); - setState(164); + setState(210); expr(0); - setState(167); + setState(213); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(165); + setState(211); match(T__3); - setState(166); + setState(212); expr(0); } } - setState(169); + setState(215); match(T__2); } } break; - case 23: + case 26: { _localctx = new DEC2HEX_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(171); + setState(217); match(DEC2HEX); { - setState(172); + setState(218); match(T__1); - setState(173); + setState(219); expr(0); - setState(176); + setState(222); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(174); + setState(220); match(T__3); - setState(175); + setState(221); expr(0); } } - setState(178); + setState(224); match(T__2); } } break; - case 24: + case 27: { _localctx = new DEC2OCT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(180); + setState(226); match(DEC2OCT); { - setState(181); + setState(227); match(T__1); - setState(182); + setState(228); expr(0); - setState(185); + setState(231); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(183); + setState(229); match(T__3); - setState(184); + setState(230); expr(0); } } - setState(187); + setState(233); match(T__2); } } break; - case 25: + case 28: { _localctx = new HEX2BIN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(189); + setState(235); match(HEX2BIN); { - setState(190); + setState(236); match(T__1); - setState(191); + setState(237); expr(0); - setState(194); + setState(240); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(192); + setState(238); match(T__3); - setState(193); + setState(239); expr(0); } } - setState(196); + setState(242); match(T__2); } } break; - case 26: + case 29: { _localctx = new HEX2DEC_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(198); + setState(244); match(HEX2DEC); { - setState(199); + setState(245); match(T__1); - setState(200); + setState(246); expr(0); - setState(201); + setState(249); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(247); + match(T__3); + setState(248); + expr(0); + } + } + + setState(251); match(T__2); } } break; - case 27: + case 30: { _localctx = new HEX2OCT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(203); + setState(253); match(HEX2OCT); { - setState(204); + setState(254); match(T__1); - setState(205); + setState(255); expr(0); - setState(208); + setState(258); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(206); + setState(256); match(T__3); - setState(207); + setState(257); expr(0); } } - setState(210); + setState(260); match(T__2); } } break; - case 28: + case 31: { _localctx = new OCT2BIN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(212); + setState(262); match(OCT2BIN); { - setState(213); + setState(263); match(T__1); - setState(214); + setState(264); expr(0); - setState(217); + setState(267); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(215); + setState(265); match(T__3); - setState(216); + setState(266); expr(0); } } - setState(219); + setState(269); match(T__2); } } break; - case 29: + case 32: { _localctx = new OCT2DEC_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(221); + setState(271); match(OCT2DEC); { - setState(222); + setState(272); match(T__1); - setState(223); + setState(273); expr(0); - setState(224); + setState(276); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(274); + match(T__3); + setState(275); + expr(0); + } + } + + setState(278); match(T__2); } } break; - case 30: + case 33: { _localctx = new OCT2HEX_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(226); + setState(280); match(OCT2HEX); { - setState(227); + setState(281); match(T__1); - setState(228); + setState(282); expr(0); - setState(231); + setState(285); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(229); + setState(283); match(T__3); - setState(230); + setState(284); expr(0); } } - setState(233); + setState(287); match(T__2); } } break; - case 31: + case 34: { _localctx = new BIN2OCT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(235); + setState(289); match(BIN2OCT); { - setState(236); + setState(290); match(T__1); - setState(237); + setState(291); expr(0); - setState(240); + setState(294); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(238); + setState(292); match(T__3); - setState(239); + setState(293); expr(0); } } - setState(242); + setState(296); match(T__2); } } break; - case 32: + case 35: { _localctx = new BIN2DEC_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(244); + setState(298); match(BIN2DEC); { - setState(245); + setState(299); match(T__1); - setState(246); + setState(300); expr(0); - setState(247); + setState(303); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(301); + match(T__3); + setState(302); + expr(0); + } + } + + setState(305); match(T__2); } } break; - case 33: + case 36: { _localctx = new BIN2HEX_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(249); + setState(307); match(BIN2HEX); { - setState(250); + setState(308); match(T__1); - setState(251); + setState(309); expr(0); - setState(254); + setState(312); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(252); + setState(310); match(T__3); - setState(253); + setState(311); expr(0); } } - setState(256); + setState(314); match(T__2); } } break; - case 34: + case 37: { _localctx = new ABS_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(258); + setState(316); match(ABS); - setState(259); + setState(317); match(T__1); - setState(260); + setState(318); expr(0); - setState(261); + setState(319); match(T__2); } break; - case 35: + case 38: { _localctx = new QUOTIENT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(263); + setState(321); match(QUOTIENT); - setState(264); + setState(322); match(T__1); - setState(265); + setState(323); expr(0); { - setState(266); + setState(324); match(T__3); - setState(267); + setState(325); expr(0); } - setState(269); + setState(327); match(T__2); } break; - case 36: + case 39: { _localctx = new MOD_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(271); + setState(329); match(MOD); - setState(272); + setState(330); match(T__1); - setState(273); + setState(331); expr(0); { - setState(274); + setState(332); match(T__3); - setState(275); + setState(333); expr(0); } - setState(277); + setState(335); match(T__2); } break; - case 37: + case 40: { _localctx = new SIGN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(279); + setState(337); match(SIGN); - setState(280); + setState(338); match(T__1); - setState(281); + setState(339); expr(0); - setState(282); + setState(340); match(T__2); } break; - case 38: + case 41: { _localctx = new SQRT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(284); + setState(342); match(SQRT); - setState(285); + setState(343); match(T__1); - setState(286); + setState(344); expr(0); - setState(287); + setState(345); match(T__2); } break; - case 39: + case 42: { _localctx = new TRUNC_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(289); + setState(347); match(TRUNC); - setState(290); + setState(348); match(T__1); - setState(291); + setState(349); expr(0); - setState(292); + setState(350); match(T__2); } break; - case 40: + case 43: { _localctx = new INT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(294); + setState(352); match(INT); - setState(295); + setState(353); match(T__1); - setState(296); + setState(354); expr(0); - setState(297); + setState(355); match(T__2); } break; - case 41: + case 44: { _localctx = new GCD_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(299); + setState(357); match(GCD); - setState(300); + setState(358); match(T__1); - setState(301); + setState(359); expr(0); - setState(304); + setState(364); _errHandler.sync(this); _la = _input.LA(1); - do { + while (_la==T__3) { { { - setState(302); + setState(360); match(T__3); - setState(303); + setState(361); expr(0); } } - setState(306); + setState(366); _errHandler.sync(this); _la = _input.LA(1); - } while ( _la==T__3 ); - setState(308); + } + setState(367); match(T__2); } break; - case 42: + case 45: { _localctx = new LCM_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(310); + setState(369); match(LCM); - setState(311); + setState(370); match(T__1); - setState(312); + setState(371); expr(0); - setState(315); + setState(376); _errHandler.sync(this); _la = _input.LA(1); - do { + while (_la==T__3) { { { - setState(313); + setState(372); match(T__3); - setState(314); + setState(373); expr(0); } } - setState(317); + setState(378); _errHandler.sync(this); _la = _input.LA(1); - } while ( _la==T__3 ); - setState(319); + } + setState(379); match(T__2); } break; - case 43: + case 46: { _localctx = new COMBIN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(321); + setState(381); match(COMBIN); - setState(322); + setState(382); match(T__1); - setState(323); + setState(383); expr(0); - setState(324); + setState(384); match(T__3); - setState(325); + setState(385); expr(0); - setState(326); + setState(386); match(T__2); } break; - case 44: + case 47: { _localctx = new PERMUT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(328); + setState(388); match(PERMUT); - setState(329); + setState(389); match(T__1); - setState(330); + setState(390); expr(0); - setState(331); + setState(391); match(T__3); - setState(332); + setState(392); expr(0); - setState(333); + setState(393); match(T__2); } break; - case 45: + case 48: { _localctx = new DEGREES_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(335); + setState(395); match(DEGREES); - setState(336); + setState(396); match(T__1); - setState(337); + setState(397); expr(0); - setState(338); + setState(398); match(T__2); } break; - case 46: + case 49: { _localctx = new RADIANS_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(340); + setState(400); match(RADIANS); - setState(341); + setState(401); match(T__1); - setState(342); + setState(402); expr(0); - setState(343); + setState(403); match(T__2); } break; - case 47: + case 50: { _localctx = new COS_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(345); + setState(405); match(COS); - setState(346); + setState(406); match(T__1); - setState(347); + setState(407); expr(0); - setState(348); + setState(408); match(T__2); } break; - case 48: + case 51: { _localctx = new COSH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(350); + setState(410); match(COSH); - setState(351); + setState(411); match(T__1); - setState(352); + setState(412); expr(0); - setState(353); + setState(413); match(T__2); } break; - case 49: + case 52: { _localctx = new SIN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(355); + setState(415); match(SIN); - setState(356); + setState(416); match(T__1); - setState(357); + setState(417); expr(0); - setState(358); + setState(418); match(T__2); } break; - case 50: + case 53: { _localctx = new SINH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(360); + setState(420); match(SINH); - setState(361); + setState(421); match(T__1); - setState(362); + setState(422); expr(0); - setState(363); + setState(423); match(T__2); } break; - case 51: + case 54: { _localctx = new TAN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(365); + setState(425); match(TAN); - setState(366); + setState(426); match(T__1); - setState(367); + setState(427); expr(0); - setState(368); + setState(428); match(T__2); } break; - case 52: + case 55: { _localctx = new TANH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(370); + setState(430); match(TANH); - setState(371); + setState(431); match(T__1); - setState(372); + setState(432); expr(0); - setState(373); + setState(433); match(T__2); } break; - case 53: + case 56: { - _localctx = new ACOS_funContext(_localctx); + _localctx = new COT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(375); - match(ACOS); - setState(376); + setState(435); + match(COT); + setState(436); match(T__1); - setState(377); + setState(437); expr(0); - setState(378); + setState(438); match(T__2); } break; - case 54: + case 57: { - _localctx = new ACOSH_funContext(_localctx); + _localctx = new COTH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(380); - match(ACOSH); - setState(381); + setState(440); + match(COTH); + setState(441); match(T__1); - setState(382); + setState(442); expr(0); - setState(383); + setState(443); match(T__2); } break; - case 55: + case 58: { - _localctx = new ASIN_funContext(_localctx); + _localctx = new CSC_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(385); - match(ASIN); - setState(386); + setState(445); + match(CSC); + setState(446); match(T__1); - setState(387); + setState(447); expr(0); - setState(388); + setState(448); match(T__2); } break; - case 56: + case 59: + { + _localctx = new CSCH_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(450); + match(CSCH); + setState(451); + match(T__1); + setState(452); + expr(0); + setState(453); + match(T__2); + } + break; + case 60: + { + _localctx = new SEC_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(455); + match(SEC); + setState(456); + match(T__1); + setState(457); + expr(0); + setState(458); + match(T__2); + } + break; + case 61: + { + _localctx = new SECH_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(460); + match(SECH); + setState(461); + match(T__1); + setState(462); + expr(0); + setState(463); + match(T__2); + } + break; + case 62: + { + _localctx = new ACOS_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(465); + match(ACOS); + setState(466); + match(T__1); + setState(467); + expr(0); + setState(468); + match(T__2); + } + break; + case 63: + { + _localctx = new ACOSH_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(470); + match(ACOSH); + setState(471); + match(T__1); + setState(472); + expr(0); + setState(473); + match(T__2); + } + break; + case 64: + { + _localctx = new ASIN_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(475); + match(ASIN); + setState(476); + match(T__1); + setState(477); + expr(0); + setState(478); + match(T__2); + } + break; + case 65: { _localctx = new ASINH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(390); + setState(480); match(ASINH); - setState(391); + setState(481); match(T__1); - setState(392); + setState(482); expr(0); - setState(393); + setState(483); match(T__2); } break; - case 57: + case 66: { _localctx = new ATAN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(395); + setState(485); match(ATAN); - setState(396); + setState(486); match(T__1); - setState(397); + setState(487); expr(0); - setState(398); + setState(488); match(T__2); } break; - case 58: + case 67: { _localctx = new ATANH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(400); + setState(490); match(ATANH); - setState(401); + setState(491); match(T__1); - setState(402); + setState(492); expr(0); - setState(403); + setState(493); match(T__2); } break; - case 59: + case 68: + { + _localctx = new ACOT_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(495); + match(ACOT); + setState(496); + match(T__1); + setState(497); + expr(0); + setState(498); + match(T__2); + } + break; + case 69: + { + _localctx = new ACOTH_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(500); + match(ACOTH); + setState(501); + match(T__1); + setState(502); + expr(0); + setState(503); + match(T__2); + } + break; + case 70: { _localctx = new ATAN2_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(405); + setState(505); match(ATAN2); - setState(406); + setState(506); match(T__1); - setState(407); + setState(507); expr(0); - setState(408); + setState(508); match(T__3); - setState(409); + setState(509); expr(0); - setState(410); + setState(510); match(T__2); } break; - case 60: + case 71: { _localctx = new ROUND_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(412); + setState(512); match(ROUND); - setState(413); + setState(513); match(T__1); - setState(414); + setState(514); expr(0); - setState(417); + setState(517); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(415); + setState(515); match(T__3); - setState(416); + setState(516); expr(0); } } - setState(419); + setState(519); match(T__2); } break; - case 61: + case 72: { _localctx = new ROUNDDOWN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(421); + setState(521); match(ROUNDDOWN); - setState(422); + setState(522); match(T__1); - setState(423); + setState(523); expr(0); - setState(424); + setState(524); match(T__3); - setState(425); + setState(525); expr(0); - setState(426); + setState(526); match(T__2); } break; - case 62: + case 73: { _localctx = new ROUNDUP_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(428); + setState(528); match(ROUNDUP); - setState(429); + setState(529); match(T__1); - setState(430); + setState(530); expr(0); - setState(431); + setState(531); match(T__3); - setState(432); + setState(532); expr(0); - setState(433); + setState(533); match(T__2); } break; - case 63: + case 74: { _localctx = new CEILING_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(435); + setState(535); match(CEILING); - setState(436); + setState(536); match(T__1); - setState(437); + setState(537); expr(0); - setState(440); + setState(540); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(438); + setState(538); match(T__3); - setState(439); + setState(539); expr(0); } } - setState(442); + setState(542); match(T__2); } break; - case 64: + case 75: { _localctx = new FLOOR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(444); + setState(544); match(FLOOR); - setState(445); + setState(545); match(T__1); - setState(446); + setState(546); expr(0); - setState(449); + setState(549); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(447); + setState(547); match(T__3); - setState(448); + setState(548); expr(0); } } - setState(451); + setState(551); match(T__2); } break; - case 65: + case 76: { _localctx = new EVEN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(453); + setState(553); match(EVEN); - setState(454); + setState(554); match(T__1); - setState(455); + setState(555); expr(0); - setState(456); + setState(556); match(T__2); } break; - case 66: + case 77: { _localctx = new ODD_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(458); + setState(558); match(ODD); - setState(459); + setState(559); match(T__1); - setState(460); + setState(560); expr(0); - setState(461); + setState(561); match(T__2); } break; - case 67: + case 78: { _localctx = new MROUND_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(463); + setState(563); match(MROUND); - setState(464); + setState(564); match(T__1); - setState(465); + setState(565); expr(0); - setState(466); + setState(566); match(T__3); - setState(467); + setState(567); expr(0); - setState(468); + setState(568); match(T__2); } break; - case 68: + case 79: { _localctx = new RAND_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(470); + setState(570); match(RAND); - setState(471); + setState(571); match(T__1); - setState(472); + setState(572); match(T__2); } break; - case 69: + case 80: { _localctx = new RANDBETWEEN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(473); + setState(573); match(RANDBETWEEN); - setState(474); + setState(574); match(T__1); - setState(475); + setState(575); expr(0); - setState(476); + setState(576); match(T__3); - setState(477); + setState(577); expr(0); - setState(478); + setState(578); match(T__2); } break; - case 70: + case 81: { _localctx = new FACT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(480); + setState(580); match(FACT); - setState(481); + setState(581); match(T__1); - setState(482); + setState(582); expr(0); - setState(483); + setState(583); match(T__2); } break; - case 71: + case 82: { _localctx = new FACTDOUBLE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(485); + setState(585); match(FACTDOUBLE); - setState(486); + setState(586); match(T__1); - setState(487); + setState(587); expr(0); - setState(488); + setState(588); match(T__2); } break; - case 72: + case 83: { _localctx = new POWER_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(490); + setState(590); match(POWER); - setState(491); + setState(591); match(T__1); - setState(492); + setState(592); expr(0); - setState(493); + setState(593); match(T__3); - setState(494); + setState(594); expr(0); - setState(495); + setState(595); match(T__2); } break; - case 73: + case 84: { _localctx = new EXP_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(497); + setState(597); match(EXP); - setState(498); + setState(598); match(T__1); - setState(499); + setState(599); expr(0); - setState(500); + setState(600); match(T__2); } break; - case 74: + case 85: { _localctx = new LN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(502); + setState(602); match(LN); - setState(503); + setState(603); match(T__1); - setState(504); + setState(604); expr(0); - setState(505); + setState(605); match(T__2); } break; - case 75: + case 86: { _localctx = new LOG_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(507); + setState(607); match(LOG); - setState(508); + setState(608); match(T__1); - setState(509); + setState(609); expr(0); - setState(512); + setState(612); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(510); + setState(610); match(T__3); - setState(511); + setState(611); expr(0); } } - setState(514); + setState(614); match(T__2); } break; - case 76: + case 87: { _localctx = new LOG10_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(516); + setState(616); match(LOG10); - setState(517); + setState(617); match(T__1); - setState(518); + setState(618); expr(0); - setState(519); + setState(619); match(T__2); } break; - case 77: + case 88: { _localctx = new MULTINOMIAL_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(521); + setState(621); match(MULTINOMIAL); - setState(522); + setState(622); match(T__1); - setState(523); + setState(623); expr(0); - setState(528); + setState(628); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(524); + setState(624); match(T__3); - setState(525); + setState(625); expr(0); } } - setState(530); + setState(630); _errHandler.sync(this); _la = _input.LA(1); } - setState(531); + setState(631); match(T__2); } break; - case 78: + case 89: { _localctx = new PRODUCT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(533); + setState(633); match(PRODUCT); - setState(534); + setState(634); match(T__1); - setState(535); + setState(635); expr(0); - setState(540); + setState(640); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(536); + setState(636); match(T__3); - setState(537); + setState(637); expr(0); } } - setState(542); + setState(642); _errHandler.sync(this); _la = _input.LA(1); } - setState(543); + setState(643); match(T__2); } break; - case 79: + case 90: { _localctx = new SQRTPI_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(545); + setState(645); match(SQRTPI); - setState(546); + setState(646); match(T__1); - setState(547); + setState(647); expr(0); - setState(548); + setState(648); match(T__2); } break; - case 80: + case 91: { - _localctx = new SUMSQ_funContext(_localctx); + _localctx = new ERF_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(550); - match(SUMSQ); - setState(551); + setState(650); + match(ERF); + setState(651); match(T__1); - setState(552); + setState(652); expr(0); - setState(557); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==T__3) { - { - { - setState(553); - match(T__3); - setState(554); - expr(0); - } - } - setState(559); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(560); + setState(653); match(T__2); } break; - case 81: + case 92: { - _localctx = new ASC_funContext(_localctx); + _localctx = new ERFC_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(562); - match(ASC); - setState(563); + setState(655); + match(ERFC); + setState(656); match(T__1); - setState(564); + setState(657); expr(0); - setState(565); + setState(658); match(T__2); } break; - case 82: + case 93: { - _localctx = new JIS_funContext(_localctx); + _localctx = new BESSELI_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(567); - match(JIS); - setState(568); + setState(660); + match(BESSELI); + setState(661); match(T__1); - setState(569); + setState(662); expr(0); - setState(570); + setState(663); + match(T__3); + setState(664); + expr(0); + setState(665); match(T__2); } break; - case 83: + case 94: { - _localctx = new CHAR_funContext(_localctx); + _localctx = new BESSELJ_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(572); - match(CHAR); - setState(573); + setState(667); + match(BESSELJ); + setState(668); match(T__1); - setState(574); + setState(669); expr(0); - setState(575); + setState(670); + match(T__3); + setState(671); + expr(0); + setState(672); match(T__2); } break; - case 84: + case 95: { - _localctx = new CLEAN_funContext(_localctx); + _localctx = new BESSELK_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(577); - match(CLEAN); - setState(578); + setState(674); + match(BESSELK); + setState(675); match(T__1); - setState(579); + setState(676); expr(0); - setState(580); + setState(677); + match(T__3); + setState(678); + expr(0); + setState(679); match(T__2); } break; - case 85: + case 96: { - _localctx = new CODE_funContext(_localctx); + _localctx = new BESSELY_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(582); - match(CODE); - setState(583); + setState(681); + match(BESSELY); + setState(682); match(T__1); - setState(584); + setState(683); expr(0); - setState(585); + setState(684); + match(T__3); + setState(685); + expr(0); + setState(686); match(T__2); } break; - case 86: + case 97: { - _localctx = new CONCATENATE_funContext(_localctx); + _localctx = new DELTA_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(587); - match(CONCATENATE); - setState(588); + setState(688); + match(DELTA); + setState(689); match(T__1); - setState(589); + setState(690); expr(0); - setState(594); + setState(693); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__3) { - { + if (_la==T__3) { { - setState(590); + setState(691); match(T__3); - setState(591); + setState(692); expr(0); } - } - setState(596); - _errHandler.sync(this); - _la = _input.LA(1); } - setState(597); - match(T__2); - } - break; - case 87: - { - _localctx = new EXACT_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(599); - match(EXACT); - setState(600); - match(T__1); - setState(601); - expr(0); - setState(602); - match(T__3); - setState(603); - expr(0); - setState(604); + + setState(695); match(T__2); } break; - case 88: + case 98: { - _localctx = new FIND_funContext(_localctx); + _localctx = new GESTEP_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(606); - match(FIND); - setState(607); + setState(697); + match(GESTEP); + setState(698); match(T__1); - setState(608); - expr(0); - setState(609); - match(T__3); - setState(610); + setState(699); expr(0); - setState(613); + setState(702); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(611); + setState(700); match(T__3); - setState(612); + setState(701); expr(0); } } - setState(615); + setState(704); match(T__2); } break; - case 89: + case 99: { - _localctx = new FIXED_funContext(_localctx); + _localctx = new SUMSQ_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(617); - match(FIXED); - setState(618); + setState(706); + match(SUMSQ); + setState(707); match(T__1); - setState(619); + setState(708); expr(0); - setState(626); + setState(713); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__3) { + while (_la==T__3) { + { { - setState(620); + setState(709); match(T__3); - setState(621); + setState(710); expr(0); - setState(624); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(622); - match(T__3); - setState(623); - expr(0); - } } - } + setState(715); + _errHandler.sync(this); + _la = _input.LA(1); } - - setState(628); + setState(716); match(T__2); } break; - case 90: + case 100: { - _localctx = new LEFT_funContext(_localctx); + _localctx = new SUMPRODUCT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(630); - match(LEFT); - setState(631); + setState(718); + match(SUMPRODUCT); + setState(719); match(T__1); - setState(632); + setState(720); expr(0); - setState(635); + setState(725); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__3) { + while (_la==T__3) { + { { - setState(633); + setState(721); match(T__3); - setState(634); + setState(722); expr(0); } + } + setState(727); + _errHandler.sync(this); + _la = _input.LA(1); } - - setState(637); + setState(728); match(T__2); } break; - case 91: + case 101: { - _localctx = new LEN_funContext(_localctx); + _localctx = new SUMX2MY2_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(639); - match(LEN); - setState(640); + setState(730); + match(SUMX2MY2); + setState(731); match(T__1); - setState(641); + setState(732); expr(0); - setState(642); - match(T__2); - } + setState(733); + match(T__3); + setState(734); + expr(0); + setState(735); + match(T__2); + } break; - case 92: + case 102: { - _localctx = new LOWER_funContext(_localctx); + _localctx = new SUMX2PY2_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(644); - match(LOWER); - setState(645); + setState(737); + match(SUMX2PY2); + setState(738); match(T__1); - setState(646); + setState(739); expr(0); - setState(647); + setState(740); + match(T__3); + setState(741); + expr(0); + setState(742); match(T__2); } break; - case 93: + case 103: { - _localctx = new MID_funContext(_localctx); + _localctx = new SUMXMY2_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(649); - match(MID); - setState(650); + setState(744); + match(SUMXMY2); + setState(745); match(T__1); - setState(651); - expr(0); - setState(652); - match(T__3); - setState(653); + setState(746); expr(0); - setState(654); + setState(747); match(T__3); - setState(655); + setState(748); expr(0); - setState(656); + setState(749); match(T__2); } break; - case 94: + case 104: { - _localctx = new PROPER_funContext(_localctx); + _localctx = new ARABIC_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(658); - match(PROPER); - setState(659); + setState(751); + match(ARABIC); + setState(752); match(T__1); - setState(660); + setState(753); expr(0); - setState(661); + setState(754); match(T__2); } break; - case 95: + case 105: { - _localctx = new REPLACE_funContext(_localctx); + _localctx = new ROMAN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(663); - match(REPLACE); - setState(664); + setState(756); + match(ROMAN); + setState(757); match(T__1); - setState(665); - expr(0); - setState(666); - match(T__3); - setState(667); - expr(0); - setState(668); - match(T__3); - setState(669); + setState(758); expr(0); - setState(672); + setState(761); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(670); + setState(759); match(T__3); - setState(671); + setState(760); expr(0); } } - setState(674); + setState(763); match(T__2); } break; - case 96: + case 106: { - _localctx = new REPT_funContext(_localctx); + _localctx = new SERIESSUM_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(676); - match(REPT); - setState(677); + setState(765); + match(SERIESSUM); + setState(766); match(T__1); - setState(678); + setState(767); expr(0); - setState(679); + setState(768); match(T__3); - setState(680); + setState(769); expr(0); - setState(681); + setState(770); + match(T__3); + setState(771); + expr(0); + setState(772); + match(T__3); + setState(773); + expr(0); + setState(774); match(T__2); } break; - case 97: + case 107: { - _localctx = new RIGHT_funContext(_localctx); + _localctx = new RANK_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(683); - match(RIGHT); - setState(684); + setState(776); + match(RANK); + setState(777); match(T__1); - setState(685); + setState(778); expr(0); - setState(688); + setState(779); + match(T__3); + setState(780); + expr(0); + setState(783); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(686); + setState(781); match(T__3); - setState(687); + setState(782); expr(0); } } - setState(690); + setState(785); match(T__2); } break; - case 98: + case 108: { - _localctx = new RMB_funContext(_localctx); + _localctx = new FORECAST_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(692); - match(RMB); - setState(693); + setState(787); + match(FORECAST); + setState(788); match(T__1); - setState(694); + setState(789); expr(0); - setState(695); + setState(790); + match(T__3); + setState(791); + expr(0); + setState(792); + match(T__3); + setState(793); + expr(0); + setState(794); match(T__2); } break; - case 99: + case 109: { - _localctx = new SEARCH_funContext(_localctx); + _localctx = new INTERCEPT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(697); - match(SEARCH); - setState(698); + setState(796); + match(INTERCEPT); + setState(797); match(T__1); - setState(699); + setState(798); expr(0); - setState(700); + setState(799); match(T__3); - setState(701); + setState(800); expr(0); - setState(704); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(702); - match(T__3); - setState(703); - expr(0); - } + setState(801); + match(T__2); } - - setState(706); + break; + case 110: + { + _localctx = new SLOPE_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(803); + match(SLOPE); + setState(804); + match(T__1); + setState(805); + expr(0); + setState(806); + match(T__3); + setState(807); + expr(0); + setState(808); match(T__2); } break; - case 100: + case 111: { - _localctx = new SUBSTITUTE_funContext(_localctx); + _localctx = new CORREL_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(708); - match(SUBSTITUTE); - setState(709); + setState(810); + match(CORREL); + setState(811); match(T__1); - setState(710); + setState(812); expr(0); - setState(711); + setState(813); match(T__3); - setState(712); + setState(814); expr(0); - setState(713); + setState(815); + match(T__2); + } + break; + case 112: + { + _localctx = new PEARSON_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(817); + match(PEARSON); + setState(818); + match(T__1); + setState(819); + expr(0); + setState(820); + match(T__3); + setState(821); + expr(0); + setState(822); + match(T__2); + } + break; + case 113: + { + _localctx = new YEARFRAC_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(824); + match(YEARFRAC); + setState(825); + match(T__1); + setState(826); + expr(0); + setState(827); match(T__3); - setState(714); + setState(828); expr(0); - setState(717); + setState(831); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(715); + setState(829); match(T__3); - setState(716); + setState(830); expr(0); } } - setState(719); + setState(833); match(T__2); } break; - case 101: + case 114: { - _localctx = new T_funContext(_localctx); + _localctx = new ASC_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(721); - match(T); - setState(722); + setState(835); + match(ASC); + setState(836); match(T__1); - setState(723); + setState(837); expr(0); - setState(724); + setState(838); match(T__2); } break; - case 102: + case 115: { - _localctx = new TEXT_funContext(_localctx); + _localctx = new JIS_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(726); - match(TEXT); - setState(727); + setState(840); + match(JIS); + setState(841); match(T__1); - setState(728); - expr(0); - setState(729); - match(T__3); - setState(730); + setState(842); expr(0); - setState(731); + setState(843); match(T__2); } break; - case 103: + case 116: { - _localctx = new TRIM_funContext(_localctx); + _localctx = new CHAR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(733); - match(TRIM); - setState(734); + setState(845); + match(CHAR); + setState(846); match(T__1); - setState(735); + setState(847); expr(0); - setState(736); + setState(848); match(T__2); } break; - case 104: + case 117: { - _localctx = new UPPER_funContext(_localctx); + _localctx = new CLEAN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(738); - match(UPPER); - setState(739); + setState(850); + match(CLEAN); + setState(851); match(T__1); - setState(740); + setState(852); expr(0); - setState(741); + setState(853); match(T__2); } break; - case 105: + case 118: { - _localctx = new VALUE_funContext(_localctx); + _localctx = new CODE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(743); - match(VALUE); - setState(744); + setState(855); + match(CODE); + setState(856); match(T__1); - setState(745); + setState(857); expr(0); - setState(746); + setState(858); match(T__2); } break; - case 106: + case 119: { - _localctx = new DATEVALUE_funContext(_localctx); + _localctx = new UNICHAR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(748); - match(DATEVALUE); - setState(749); - match(T__1); - setState(750); + setState(860); + match(UNICHAR); + setState(861); + match(T__1); + setState(862); expr(0); - setState(753); + setState(863); + match(T__2); + } + break; + case 120: + { + _localctx = new UNICODE_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(865); + match(UNICODE); + setState(866); + match(T__1); + setState(867); + expr(0); + setState(868); + match(T__2); + } + break; + case 121: + { + _localctx = new CONCATENATE_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(870); + match(CONCATENATE); + setState(871); + match(T__1); + setState(872); + expr(0); + setState(877); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__3) { + while (_la==T__3) { { - setState(751); + { + setState(873); match(T__3); - setState(752); + setState(874); expr(0); } + } + setState(879); + _errHandler.sync(this); + _la = _input.LA(1); } - - setState(755); + setState(880); match(T__2); } break; - case 107: + case 122: { - _localctx = new TIMEVALUE_funContext(_localctx); + _localctx = new EXACT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(757); - match(TIMEVALUE); - setState(758); + setState(882); + match(EXACT); + setState(883); match(T__1); - setState(759); + setState(884); + expr(0); + setState(885); + match(T__3); + setState(886); expr(0); - setState(760); + setState(887); match(T__2); } break; - case 108: + case 123: { - _localctx = new DATE_funContext(_localctx); + _localctx = new FIND_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(762); - match(DATE); - setState(763); + setState(889); + match(FIND); + setState(890); match(T__1); - setState(764); + setState(891); expr(0); - setState(765); + setState(892); match(T__3); - setState(766); + setState(893); expr(0); - setState(767); - match(T__3); - setState(768); + setState(896); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(894); + match(T__3); + setState(895); + expr(0); + } + } + + setState(898); + match(T__2); + } + break; + case 124: + { + _localctx = new FIXED_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(900); + match(FIXED); + setState(901); + match(T__1); + setState(902); expr(0); - setState(779); + setState(909); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(769); + setState(903); match(T__3); - setState(770); + setState(904); expr(0); - setState(777); + setState(907); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(771); + setState(905); match(T__3); - setState(772); + setState(906); expr(0); - setState(775); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(773); - match(T__3); - setState(774); - expr(0); - } - } - } } } } - setState(781); + setState(911); match(T__2); } break; - case 109: + case 125: { - _localctx = new TIME_funContext(_localctx); + _localctx = new LEFT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(783); - match(TIME); - setState(784); + setState(913); + match(LEFT); + setState(914); match(T__1); - setState(785); - expr(0); - setState(786); - match(T__3); - setState(787); + setState(915); expr(0); - setState(790); + setState(918); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(788); + setState(916); match(T__3); - setState(789); + setState(917); expr(0); } } - setState(792); - match(T__2); - } - break; - case 110: - { - _localctx = new NOW_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(794); - match(NOW); - setState(795); - match(T__1); - setState(796); - match(T__2); - } - break; - case 111: - { - _localctx = new TODAY_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(797); - match(TODAY); - setState(798); - match(T__1); - setState(799); + setState(920); match(T__2); } break; - case 112: + case 126: { - _localctx = new YEAR_funContext(_localctx); + _localctx = new LEN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(800); - match(YEAR); - setState(801); + setState(922); + match(LEN); + setState(923); match(T__1); - setState(802); + setState(924); expr(0); - setState(803); + setState(925); match(T__2); } break; - case 113: + case 127: { - _localctx = new MONTH_funContext(_localctx); + _localctx = new LOWER_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(805); - match(MONTH); - setState(806); + setState(927); + match(LOWER); + setState(928); match(T__1); - setState(807); + setState(929); expr(0); - setState(808); + setState(930); match(T__2); } break; - case 114: + case 128: { - _localctx = new DAY_funContext(_localctx); + _localctx = new MID_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(810); - match(DAY); - setState(811); + setState(932); + match(MID); + setState(933); match(T__1); - setState(812); + setState(934); expr(0); - setState(813); + setState(935); + match(T__3); + setState(936); + expr(0); + setState(937); + match(T__3); + setState(938); + expr(0); + setState(939); match(T__2); } break; - case 115: + case 129: { - _localctx = new HOUR_funContext(_localctx); + _localctx = new PROPER_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(815); - match(HOUR); - setState(816); + setState(941); + match(PROPER); + setState(942); match(T__1); - setState(817); + setState(943); expr(0); - setState(818); + setState(944); match(T__2); } break; - case 116: + case 130: { - _localctx = new MINUTE_funContext(_localctx); + _localctx = new REPLACE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(820); - match(MINUTE); - setState(821); + setState(946); + match(REPLACE); + setState(947); match(T__1); - setState(822); + setState(948); + expr(0); + setState(949); + match(T__3); + setState(950); + expr(0); + setState(951); + match(T__3); + setState(952); expr(0); - setState(823); + setState(955); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(953); + match(T__3); + setState(954); + expr(0); + } + } + + setState(957); match(T__2); } break; - case 117: + case 131: { - _localctx = new SECOND_funContext(_localctx); + _localctx = new REPT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(825); - match(SECOND); - setState(826); + setState(959); + match(REPT); + setState(960); match(T__1); - setState(827); + setState(961); expr(0); - setState(828); + setState(962); + match(T__3); + setState(963); + expr(0); + setState(964); match(T__2); } break; - case 118: + case 132: { - _localctx = new WEEKDAY_funContext(_localctx); + _localctx = new RIGHT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(830); - match(WEEKDAY); - setState(831); + setState(966); + match(RIGHT); + setState(967); match(T__1); - setState(832); + setState(968); expr(0); - setState(835); + setState(971); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(833); + setState(969); match(T__3); - setState(834); + setState(970); expr(0); } } - setState(837); + setState(973); match(T__2); } break; - case 119: + case 133: { - _localctx = new DATEDIF_funContext(_localctx); + _localctx = new RMB_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(839); - match(DATEDIF); - setState(840); + setState(975); + match(RMB); + setState(976); match(T__1); - setState(841); - expr(0); - setState(842); - match(T__3); - setState(843); - expr(0); - setState(844); - match(T__3); - setState(845); + setState(977); expr(0); - setState(846); + setState(978); match(T__2); } break; - case 120: + case 134: { - _localctx = new DAYS360_funContext(_localctx); + _localctx = new SEARCH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(848); - match(DAYS360); - setState(849); + setState(980); + match(SEARCH); + setState(981); match(T__1); - setState(850); + setState(982); expr(0); - setState(851); + setState(983); match(T__3); - setState(852); + setState(984); expr(0); - setState(855); + setState(987); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(853); + setState(985); match(T__3); - setState(854); + setState(986); expr(0); } } - setState(857); + setState(989); match(T__2); } break; - case 121: + case 135: { - _localctx = new EDATE_funContext(_localctx); + _localctx = new SUBSTITUTE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(859); - match(EDATE); - setState(860); + setState(991); + match(SUBSTITUTE); + setState(992); match(T__1); - setState(861); + setState(993); expr(0); - setState(862); + setState(994); match(T__3); - setState(863); + setState(995); + expr(0); + setState(996); + match(T__3); + setState(997); expr(0); - setState(864); + setState(1000); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(998); + match(T__3); + setState(999); + expr(0); + } + } + + setState(1002); match(T__2); } break; - case 122: + case 136: { - _localctx = new EOMONTH_funContext(_localctx); + _localctx = new T_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(866); - match(EOMONTH); - setState(867); + setState(1004); + match(T); + setState(1005); match(T__1); - setState(868); - expr(0); - setState(869); - match(T__3); - setState(870); + setState(1006); expr(0); - setState(871); + setState(1007); match(T__2); } break; - case 123: + case 137: { - _localctx = new NETWORKDAYS_funContext(_localctx); + _localctx = new TEXT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(873); - match(NETWORKDAYS); - setState(874); + setState(1009); + match(TEXT); + setState(1010); match(T__1); - setState(875); + setState(1011); expr(0); - setState(876); + setState(1012); match(T__3); - setState(877); + setState(1013); expr(0); - setState(880); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(878); - match(T__3); - setState(879); - expr(0); - } - } - - setState(882); + setState(1014); match(T__2); } break; - case 124: + case 138: { - _localctx = new WORKDAY_funContext(_localctx); + _localctx = new TRIM_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(884); - match(WORKDAY); - setState(885); + setState(1016); + match(TRIM); + setState(1017); match(T__1); - setState(886); + setState(1018); expr(0); - setState(887); - match(T__3); - setState(888); + setState(1019); + match(T__2); + } + break; + case 139: + { + _localctx = new UPPER_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1021); + match(UPPER); + setState(1022); + match(T__1); + setState(1023); expr(0); - setState(891); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(889); - match(T__3); - setState(890); - expr(0); - } + setState(1024); + match(T__2); } - - setState(893); + break; + case 140: + { + _localctx = new VALUE_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1026); + match(VALUE); + setState(1027); + match(T__1); + setState(1028); + expr(0); + setState(1029); match(T__2); } break; - case 125: + case 141: { - _localctx = new WEEKNUM_funContext(_localctx); + _localctx = new DATEVALUE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(895); - match(WEEKNUM); - setState(896); + setState(1031); + match(DATEVALUE); + setState(1032); match(T__1); - setState(897); + setState(1033); expr(0); - setState(900); + setState(1036); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(898); + setState(1034); match(T__3); - setState(899); + setState(1035); expr(0); } } - setState(902); + setState(1038); match(T__2); } break; - case 126: + case 142: { - _localctx = new MAX_funContext(_localctx); + _localctx = new TIMEVALUE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(904); - match(MAX); - setState(905); + setState(1040); + match(TIMEVALUE); + setState(1041); match(T__1); - setState(906); + setState(1042); expr(0); - setState(909); - _errHandler.sync(this); - _la = _input.LA(1); - do { - { - { - setState(907); - match(T__3); - setState(908); - expr(0); - } - } - setState(911); - _errHandler.sync(this); - _la = _input.LA(1); - } while ( _la==T__3 ); - setState(913); + setState(1043); match(T__2); } break; - case 127: + case 143: { - _localctx = new MEDIAN_funContext(_localctx); + _localctx = new DATE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(915); - match(MEDIAN); - setState(916); + setState(1045); + match(DATE); + setState(1046); match(T__1); - setState(917); + setState(1047); expr(0); - setState(920); + setState(1048); + match(T__3); + setState(1049); + expr(0); + setState(1050); + match(T__3); + setState(1051); + expr(0); + setState(1062); _errHandler.sync(this); _la = _input.LA(1); - do { - { + if (_la==T__3) { { - setState(918); + setState(1052); match(T__3); - setState(919); + setState(1053); expr(0); - } - } - setState(922); + setState(1060); _errHandler.sync(this); _la = _input.LA(1); - } while ( _la==T__3 ); - setState(924); + if (_la==T__3) { + { + setState(1054); + match(T__3); + setState(1055); + expr(0); + setState(1058); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(1056); + match(T__3); + setState(1057); + expr(0); + } + } + + } + } + + } + } + + setState(1064); match(T__2); } break; - case 128: + case 144: { - _localctx = new MIN_funContext(_localctx); + _localctx = new TIME_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(926); - match(MIN); - setState(927); + setState(1066); + match(TIME); + setState(1067); match(T__1); - setState(928); + setState(1068); + expr(0); + setState(1069); + match(T__3); + setState(1070); expr(0); - setState(931); + setState(1073); _errHandler.sync(this); _la = _input.LA(1); - do { - { + if (_la==T__3) { { - setState(929); + setState(1071); match(T__3); - setState(930); + setState(1072); expr(0); } - } - setState(933); - _errHandler.sync(this); - _la = _input.LA(1); - } while ( _la==T__3 ); - setState(935); + } + + setState(1075); match(T__2); } break; - case 129: + case 145: { - _localctx = new QUARTILE_funContext(_localctx); + _localctx = new NOW_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(937); - match(QUARTILE); - setState(938); + setState(1077); + match(NOW); + setState(1078); match(T__1); - setState(939); - expr(0); - setState(940); - match(T__3); - setState(941); - expr(0); - setState(942); + setState(1079); match(T__2); } break; - case 130: + case 146: { - _localctx = new MODE_funContext(_localctx); + _localctx = new TODAY_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(944); - match(MODE); - setState(945); + setState(1080); + match(TODAY); + setState(1081); match(T__1); - setState(946); - expr(0); - setState(951); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==T__3) { - { - { - setState(947); - match(T__3); - setState(948); - expr(0); - } - } - setState(953); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(954); + setState(1082); match(T__2); } break; - case 131: + case 147: { - _localctx = new LARGE_funContext(_localctx); + _localctx = new YEAR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(956); - match(LARGE); - setState(957); + setState(1083); + match(YEAR); + setState(1084); match(T__1); - setState(958); - expr(0); - setState(959); - match(T__3); - setState(960); + setState(1085); expr(0); - setState(961); + setState(1086); match(T__2); } break; - case 132: + case 148: { - _localctx = new SMALL_funContext(_localctx); + _localctx = new MONTH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(963); - match(SMALL); - setState(964); + setState(1088); + match(MONTH); + setState(1089); match(T__1); - setState(965); - expr(0); - setState(966); - match(T__3); - setState(967); + setState(1090); expr(0); - setState(968); + setState(1091); match(T__2); } break; - case 133: + case 149: { - _localctx = new PERCENTILE_funContext(_localctx); + _localctx = new DAY_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(970); - match(PERCENTILE); - setState(971); + setState(1093); + match(DAY); + setState(1094); match(T__1); - setState(972); - expr(0); - setState(973); - match(T__3); - setState(974); + setState(1095); expr(0); - setState(975); + setState(1096); match(T__2); } break; - case 134: + case 150: { - _localctx = new PERCENTRANK_funContext(_localctx); + _localctx = new HOUR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(977); - match(PERCENTRANK); - setState(978); + setState(1098); + match(HOUR); + setState(1099); match(T__1); - setState(979); - expr(0); - setState(980); - match(T__3); - setState(981); + setState(1100); expr(0); - setState(982); + setState(1101); match(T__2); } break; - case 135: + case 151: { - _localctx = new AVERAGE_funContext(_localctx); + _localctx = new MINUTE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(984); - match(AVERAGE); - setState(985); + setState(1103); + match(MINUTE); + setState(1104); match(T__1); - setState(986); + setState(1105); expr(0); - setState(991); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==T__3) { - { - { - setState(987); - match(T__3); - setState(988); - expr(0); - } - } - setState(993); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(994); + setState(1106); match(T__2); } break; - case 136: + case 152: { - _localctx = new AVERAGEIF_funContext(_localctx); + _localctx = new SECOND_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(996); - match(AVERAGEIF); - setState(997); + setState(1108); + match(SECOND); + setState(1109); match(T__1); - setState(998); + setState(1110); expr(0); - setState(999); - match(T__3); - setState(1000); - expr(0); - setState(1003); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1001); - match(T__3); - setState(1002); - expr(0); - } - } - - setState(1005); + setState(1111); match(T__2); } break; - case 137: + case 153: { - _localctx = new GEOMEAN_funContext(_localctx); + _localctx = new WEEKDAY_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1007); - match(GEOMEAN); - setState(1008); + setState(1113); + match(WEEKDAY); + setState(1114); match(T__1); - setState(1009); + setState(1115); expr(0); - setState(1014); + setState(1118); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__3) { - { + if (_la==T__3) { { - setState(1010); + setState(1116); match(T__3); - setState(1011); + setState(1117); expr(0); } - } - setState(1016); - _errHandler.sync(this); - _la = _input.LA(1); } - setState(1017); + + setState(1120); match(T__2); } break; - case 138: + case 154: { - _localctx = new HARMEAN_funContext(_localctx); + _localctx = new DATEDIF_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1019); - match(HARMEAN); - setState(1020); + setState(1122); + match(DATEDIF); + setState(1123); match(T__1); - setState(1021); + setState(1124); expr(0); - setState(1026); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==T__3) { - { - { - setState(1022); - match(T__3); - setState(1023); - expr(0); - } - } - setState(1028); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(1029); + setState(1125); + match(T__3); + setState(1126); + expr(0); + setState(1127); + match(T__3); + setState(1128); + expr(0); + setState(1129); match(T__2); } break; - case 139: + case 155: { - _localctx = new COUNT_funContext(_localctx); + _localctx = new DAYS_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1031); - match(COUNT); - setState(1032); + setState(1131); + match(DAYS); + setState(1132); match(T__1); - setState(1033); + setState(1133); expr(0); - setState(1038); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==T__3) { - { - { - setState(1034); - match(T__3); - setState(1035); - expr(0); - } - } - setState(1040); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(1041); + setState(1134); + match(T__3); + setState(1135); + expr(0); + setState(1136); match(T__2); } break; - case 140: + case 156: { - _localctx = new COUNTIF_funContext(_localctx); + _localctx = new DAYS360_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1043); - match(COUNTIF); - setState(1044); + setState(1138); + match(DAYS360); + setState(1139); match(T__1); - setState(1045); + setState(1140); expr(0); - setState(1050); + setState(1141); + match(T__3); + setState(1142); + expr(0); + setState(1145); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__3) { - { + if (_la==T__3) { { - setState(1046); + setState(1143); match(T__3); - setState(1047); + setState(1144); expr(0); } - } - setState(1052); - _errHandler.sync(this); - _la = _input.LA(1); } - setState(1053); + + setState(1147); match(T__2); } break; - case 141: + case 157: { - _localctx = new SUM_funContext(_localctx); + _localctx = new EDATE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1055); - match(SUM); - setState(1056); + setState(1149); + match(EDATE); + setState(1150); match(T__1); - setState(1057); + setState(1151); expr(0); - setState(1062); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==T__3) { - { - { - setState(1058); - match(T__3); - setState(1059); - expr(0); - } - } - setState(1064); - _errHandler.sync(this); - _la = _input.LA(1); - } - setState(1065); + setState(1152); + match(T__3); + setState(1153); + expr(0); + setState(1154); match(T__2); } break; - case 142: + case 158: { - _localctx = new SUMIF_funContext(_localctx); + _localctx = new EOMONTH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1067); - match(SUMIF); - setState(1068); + setState(1156); + match(EOMONTH); + setState(1157); match(T__1); - setState(1069); + setState(1158); expr(0); - setState(1070); + setState(1159); + match(T__3); + setState(1160); + expr(0); + setState(1161); + match(T__2); + } + break; + case 159: + { + _localctx = new NETWORKDAYS_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1163); + match(NETWORKDAYS); + setState(1164); + match(T__1); + setState(1165); + expr(0); + setState(1166); match(T__3); - setState(1071); + setState(1167); expr(0); - setState(1074); + setState(1170); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1072); + setState(1168); match(T__3); - setState(1073); + setState(1169); expr(0); } } - setState(1076); + setState(1172); match(T__2); } break; - case 143: + case 160: { - _localctx = new AVEDEV_funContext(_localctx); + _localctx = new WORKDAY_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1078); - match(AVEDEV); - setState(1079); + setState(1174); + match(WORKDAY); + setState(1175); match(T__1); - setState(1080); + setState(1176); expr(0); - setState(1085); + setState(1177); + match(T__3); + setState(1178); + expr(0); + setState(1181); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__3) { - { + if (_la==T__3) { { - setState(1081); + setState(1179); match(T__3); - setState(1082); + setState(1180); expr(0); } - } - setState(1087); - _errHandler.sync(this); - _la = _input.LA(1); } - setState(1088); + + setState(1183); match(T__2); } break; - case 144: + case 161: { - _localctx = new STDEV_funContext(_localctx); + _localctx = new WEEKNUM_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1090); - match(STDEV); - setState(1091); + setState(1185); + match(WEEKNUM); + setState(1186); match(T__1); - setState(1092); + setState(1187); expr(0); - setState(1097); + setState(1190); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__3) { - { + if (_la==T__3) { { - setState(1093); + setState(1188); match(T__3); - setState(1094); + setState(1189); expr(0); } - } - setState(1099); - _errHandler.sync(this); - _la = _input.LA(1); } - setState(1100); + + setState(1192); match(T__2); } break; - case 145: + case 162: { - _localctx = new STDEVP_funContext(_localctx); + _localctx = new MAX_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1102); - match(STDEVP); - setState(1103); + setState(1194); + match(MAX); + setState(1195); match(T__1); - setState(1104); + setState(1196); expr(0); - setState(1109); + setState(1201); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(1105); + setState(1197); match(T__3); - setState(1106); + setState(1198); expr(0); } } - setState(1111); + setState(1203); _errHandler.sync(this); _la = _input.LA(1); } - setState(1112); - match(T__2); - } - break; - case 146: - { - _localctx = new COVAR_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(1114); - match(COVAR); - setState(1115); - match(T__1); - setState(1116); - expr(0); - setState(1117); - match(T__3); - setState(1118); - expr(0); - setState(1119); - match(T__2); - } - break; - case 147: - { - _localctx = new COVARIANCES_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(1121); - match(COVARIANCES); - setState(1122); - match(T__1); - setState(1123); - expr(0); - setState(1124); - match(T__3); - setState(1125); - expr(0); - setState(1126); + setState(1204); match(T__2); } break; - case 148: + case 163: { - _localctx = new DEVSQ_funContext(_localctx); + _localctx = new MEDIAN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1128); - match(DEVSQ); - setState(1129); + setState(1206); + match(MEDIAN); + setState(1207); match(T__1); - setState(1130); + setState(1208); expr(0); - setState(1135); + setState(1213); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(1131); + setState(1209); match(T__3); - setState(1132); + setState(1210); expr(0); } } - setState(1137); + setState(1215); _errHandler.sync(this); _la = _input.LA(1); } - setState(1138); + setState(1216); match(T__2); } break; - case 149: + case 164: { - _localctx = new VAR_funContext(_localctx); + _localctx = new MIN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1140); - match(VAR); - setState(1141); + setState(1218); + match(MIN); + setState(1219); match(T__1); - setState(1142); + setState(1220); expr(0); - setState(1147); + setState(1225); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(1143); + setState(1221); match(T__3); - setState(1144); + setState(1222); expr(0); } } - setState(1149); + setState(1227); _errHandler.sync(this); _la = _input.LA(1); } - setState(1150); + setState(1228); match(T__2); } break; - case 150: + case 165: { - _localctx = new VARP_funContext(_localctx); + _localctx = new QUARTILE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1152); - match(VARP); - setState(1153); + setState(1230); + match(QUARTILE); + setState(1231); match(T__1); - setState(1154); + setState(1232); expr(0); - setState(1159); + setState(1233); + match(T__3); + setState(1234); + expr(0); + setState(1235); + match(T__2); + } + break; + case 166: + { + _localctx = new MODE_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1237); + match(MODE); + setState(1238); + match(T__1); + setState(1239); + expr(0); + setState(1244); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(1155); + setState(1240); match(T__3); - setState(1156); + setState(1241); expr(0); } } - setState(1161); + setState(1246); _errHandler.sync(this); _la = _input.LA(1); } - setState(1162); + setState(1247); match(T__2); } break; - case 151: + case 167: { - _localctx = new NORMDIST_funContext(_localctx); + _localctx = new LARGE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1164); - match(NORMDIST); - setState(1165); + setState(1249); + match(LARGE); + setState(1250); match(T__1); - setState(1166); - expr(0); - setState(1167); - match(T__3); - setState(1168); - expr(0); - setState(1169); - match(T__3); - setState(1170); + setState(1251); expr(0); - setState(1171); + setState(1252); match(T__3); - setState(1172); + setState(1253); expr(0); - setState(1173); + setState(1254); match(T__2); } break; - case 152: + case 168: { - _localctx = new NORMINV_funContext(_localctx); + _localctx = new SMALL_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1175); - match(NORMINV); - setState(1176); + setState(1256); + match(SMALL); + setState(1257); match(T__1); - setState(1177); - expr(0); - setState(1178); - match(T__3); - setState(1179); + setState(1258); expr(0); - setState(1180); + setState(1259); match(T__3); - setState(1181); + setState(1260); expr(0); - setState(1182); + setState(1261); match(T__2); } break; - case 153: + case 169: { - _localctx = new NORMSDIST_funContext(_localctx); + _localctx = new PERCENTILE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1184); - match(NORMSDIST); - setState(1185); + setState(1263); + match(PERCENTILE); + setState(1264); match(T__1); - setState(1186); + setState(1265); expr(0); - setState(1187); + setState(1266); + match(T__3); + setState(1267); + expr(0); + setState(1268); match(T__2); } break; - case 154: + case 170: { - _localctx = new NORMSINV_funContext(_localctx); + _localctx = new PERCENTRANK_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1189); - match(NORMSINV); - setState(1190); + setState(1270); + match(PERCENTRANK); + setState(1271); match(T__1); - setState(1191); + setState(1272); expr(0); - setState(1192); - match(T__2); - } - break; - case 155: - { - _localctx = new BETADIST_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(1194); - match(BETADIST); - setState(1195); - match(T__1); - setState(1196); - expr(0); - setState(1197); - match(T__3); - setState(1198); - expr(0); - setState(1199); + setState(1273); match(T__3); - setState(1200); + setState(1274); expr(0); - setState(1201); + setState(1275); match(T__2); } break; - case 156: + case 171: { - _localctx = new BETAINV_funContext(_localctx); + _localctx = new AVERAGE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1203); - match(BETAINV); - setState(1204); + setState(1277); + match(AVERAGE); + setState(1278); match(T__1); - setState(1205); - expr(0); - setState(1206); - match(T__3); - setState(1207); + setState(1279); expr(0); - setState(1208); - match(T__3); - setState(1209); - expr(0); - setState(1210); + setState(1284); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1280); + match(T__3); + setState(1281); + expr(0); + } + } + setState(1286); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1287); match(T__2); } break; - case 157: + case 172: { - _localctx = new BINOMDIST_funContext(_localctx); + _localctx = new AVERAGEIF_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1212); - match(BINOMDIST); - setState(1213); + setState(1289); + match(AVERAGEIF); + setState(1290); match(T__1); - setState(1214); - expr(0); - setState(1215); - match(T__3); - setState(1216); - expr(0); - setState(1217); - match(T__3); - setState(1218); + setState(1291); expr(0); - setState(1219); + setState(1292); match(T__3); - setState(1220); + setState(1293); expr(0); - setState(1221); + setState(1296); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(1294); + match(T__3); + setState(1295); + expr(0); + } + } + + setState(1298); match(T__2); } break; - case 158: + case 173: { - _localctx = new EXPONDIST_funContext(_localctx); + _localctx = new GEOMEAN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1223); - match(EXPONDIST); - setState(1224); + setState(1300); + match(GEOMEAN); + setState(1301); match(T__1); - setState(1225); - expr(0); - setState(1226); - match(T__3); - setState(1227); - expr(0); - setState(1228); - match(T__3); - setState(1229); + setState(1302); expr(0); - setState(1230); + setState(1307); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1303); + match(T__3); + setState(1304); + expr(0); + } + } + setState(1309); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1310); match(T__2); } break; - case 159: + case 174: { - _localctx = new FDIST_funContext(_localctx); + _localctx = new HARMEAN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1232); - match(FDIST); - setState(1233); + setState(1312); + match(HARMEAN); + setState(1313); match(T__1); - setState(1234); - expr(0); - setState(1235); - match(T__3); - setState(1236); - expr(0); - setState(1237); - match(T__3); - setState(1238); + setState(1314); expr(0); - setState(1239); + setState(1319); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1315); + match(T__3); + setState(1316); + expr(0); + } + } + setState(1321); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1322); match(T__2); } break; - case 160: + case 175: { - _localctx = new FINV_funContext(_localctx); + _localctx = new COUNT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1241); - match(FINV); - setState(1242); + setState(1324); + match(COUNT); + setState(1325); match(T__1); - setState(1243); - expr(0); - setState(1244); - match(T__3); - setState(1245); - expr(0); - setState(1246); - match(T__3); - setState(1247); + setState(1326); expr(0); - setState(1248); + setState(1331); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1327); + match(T__3); + setState(1328); + expr(0); + } + } + setState(1333); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1334); match(T__2); } break; - case 161: + case 176: { - _localctx = new FISHER_funContext(_localctx); + _localctx = new COUNTIF_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1250); - match(FISHER); - setState(1251); + setState(1336); + match(COUNTIF); + setState(1337); match(T__1); - setState(1252); + setState(1338); expr(0); - setState(1253); + setState(1343); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1339); + match(T__3); + setState(1340); + expr(0); + } + } + setState(1345); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1346); match(T__2); } break; - case 162: + case 177: { - _localctx = new FISHERINV_funContext(_localctx); + _localctx = new SUM_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1255); - match(FISHERINV); - setState(1256); + setState(1348); + match(SUM); + setState(1349); match(T__1); - setState(1257); + setState(1350); expr(0); - setState(1258); + setState(1355); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1351); + match(T__3); + setState(1352); + expr(0); + } + } + setState(1357); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1358); match(T__2); } break; - case 163: + case 178: { - _localctx = new GAMMADIST_funContext(_localctx); + _localctx = new SUMIF_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1260); - match(GAMMADIST); - setState(1261); + setState(1360); + match(SUMIF); + setState(1361); match(T__1); - setState(1262); - expr(0); - setState(1263); - match(T__3); - setState(1264); - expr(0); - setState(1265); - match(T__3); - setState(1266); + setState(1362); expr(0); - setState(1267); + setState(1363); match(T__3); - setState(1268); + setState(1364); expr(0); - setState(1269); + setState(1367); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(1365); + match(T__3); + setState(1366); + expr(0); + } + } + + setState(1369); match(T__2); } break; - case 164: + case 179: { - _localctx = new GAMMAINV_funContext(_localctx); + _localctx = new AVEDEV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1271); - match(GAMMAINV); - setState(1272); + setState(1371); + match(AVEDEV); + setState(1372); match(T__1); - setState(1273); - expr(0); - setState(1274); - match(T__3); - setState(1275); - expr(0); - setState(1276); - match(T__3); - setState(1277); + setState(1373); expr(0); - setState(1278); + setState(1378); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1374); + match(T__3); + setState(1375); + expr(0); + } + } + setState(1380); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1381); match(T__2); } break; - case 165: + case 180: { - _localctx = new GAMMALN_funContext(_localctx); + _localctx = new STDEV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1280); - match(GAMMALN); - setState(1281); + setState(1383); + match(STDEV); + setState(1384); match(T__1); - setState(1282); + setState(1385); expr(0); - setState(1283); + setState(1390); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1386); + match(T__3); + setState(1387); + expr(0); + } + } + setState(1392); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1393); match(T__2); } break; - case 166: + case 181: { - _localctx = new HYPGEOMDIST_funContext(_localctx); + _localctx = new STDEVP_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1285); - match(HYPGEOMDIST); - setState(1286); + setState(1395); + match(STDEVP); + setState(1396); match(T__1); - setState(1287); - expr(0); - setState(1288); - match(T__3); - setState(1289); - expr(0); - setState(1290); - match(T__3); - setState(1291); - expr(0); - setState(1292); - match(T__3); - setState(1293); + setState(1397); expr(0); - setState(1294); + setState(1402); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1398); + match(T__3); + setState(1399); + expr(0); + } + } + setState(1404); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1405); match(T__2); } break; - case 167: + case 182: { - _localctx = new LOGINV_funContext(_localctx); + _localctx = new COVAR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1296); - match(LOGINV); - setState(1297); + setState(1407); + match(COVAR); + setState(1408); match(T__1); - setState(1298); - expr(0); - setState(1299); - match(T__3); - setState(1300); + setState(1409); expr(0); - setState(1301); + setState(1410); match(T__3); - setState(1302); + setState(1411); expr(0); - setState(1303); + setState(1412); match(T__2); } break; - case 168: + case 183: { - _localctx = new LOGNORMDIST_funContext(_localctx); + _localctx = new COVARIANCES_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1305); - match(LOGNORMDIST); - setState(1306); + setState(1414); + match(COVARIANCES); + setState(1415); match(T__1); - setState(1307); - expr(0); - setState(1308); - match(T__3); - setState(1309); + setState(1416); expr(0); - setState(1310); + setState(1417); match(T__3); - setState(1311); + setState(1418); expr(0); - setState(1312); + setState(1419); match(T__2); } break; - case 169: + case 184: { - _localctx = new NEGBINOMDIST_funContext(_localctx); + _localctx = new DEVSQ_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1314); - match(NEGBINOMDIST); - setState(1315); + setState(1421); + match(DEVSQ); + setState(1422); match(T__1); - setState(1316); - expr(0); - setState(1317); - match(T__3); - setState(1318); - expr(0); - setState(1319); - match(T__3); - setState(1320); + setState(1423); expr(0); - setState(1321); + setState(1428); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1424); + match(T__3); + setState(1425); + expr(0); + } + } + setState(1430); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1431); match(T__2); } break; - case 170: + case 185: { - _localctx = new POISSON_funContext(_localctx); + _localctx = new VAR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1323); - match(POISSON); - setState(1324); + setState(1433); + match(VAR); + setState(1434); match(T__1); - setState(1325); - expr(0); - setState(1326); - match(T__3); - setState(1327); - expr(0); - setState(1328); - match(T__3); - setState(1329); + setState(1435); expr(0); - setState(1330); + setState(1440); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1436); + match(T__3); + setState(1437); + expr(0); + } + } + setState(1442); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1443); match(T__2); } break; - case 171: + case 186: { - _localctx = new TDIST_funContext(_localctx); + _localctx = new VARP_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1332); - match(TDIST); - setState(1333); + setState(1445); + match(VARP); + setState(1446); match(T__1); - setState(1334); - expr(0); - setState(1335); - match(T__3); - setState(1336); - expr(0); - setState(1337); - match(T__3); - setState(1338); + setState(1447); expr(0); - setState(1339); + setState(1452); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1448); + match(T__3); + setState(1449); + expr(0); + } + } + setState(1454); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1455); match(T__2); } break; - case 172: + case 187: { - _localctx = new TINV_funContext(_localctx); + _localctx = new NORMDIST_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1341); - match(TINV); - setState(1342); + setState(1457); + match(NORMDIST); + setState(1458); match(T__1); - setState(1343); + setState(1459); + expr(0); + setState(1460); + match(T__3); + setState(1461); expr(0); - setState(1344); + setState(1462); match(T__3); - setState(1345); + setState(1463); expr(0); - setState(1346); + setState(1464); + match(T__3); + setState(1465); + expr(0); + setState(1466); match(T__2); } break; - case 173: + case 188: { - _localctx = new WEIBULL_funContext(_localctx); + _localctx = new NORMINV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1348); - match(WEIBULL); - setState(1349); + setState(1468); + match(NORMINV); + setState(1469); match(T__1); - setState(1350); - expr(0); - setState(1351); - match(T__3); - setState(1352); + setState(1470); expr(0); - setState(1353); + setState(1471); match(T__3); - setState(1354); + setState(1472); expr(0); - setState(1355); + setState(1473); match(T__3); - setState(1356); + setState(1474); expr(0); - setState(1357); + setState(1475); match(T__2); } break; - case 174: + case 189: { - _localctx = new URLENCODE_funContext(_localctx); + _localctx = new NORMSDIST_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1359); - match(URLENCODE); - setState(1360); + setState(1477); + match(NORMSDIST); + setState(1478); match(T__1); - setState(1361); + setState(1479); expr(0); - setState(1362); + setState(1480); match(T__2); } break; - case 175: + case 190: { - _localctx = new URLDECODE_funContext(_localctx); + _localctx = new NORMSINV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1364); - match(URLDECODE); - setState(1365); + setState(1482); + match(NORMSINV); + setState(1483); match(T__1); - setState(1366); + setState(1484); expr(0); - setState(1367); + setState(1485); match(T__2); } break; - case 176: + case 191: { - _localctx = new HTMLENCODE_funContext(_localctx); + _localctx = new BETADIST_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1369); - match(HTMLENCODE); - setState(1370); + setState(1487); + match(BETADIST); + setState(1488); match(T__1); - setState(1371); + setState(1489); expr(0); - setState(1372); + setState(1490); + match(T__3); + setState(1491); + expr(0); + setState(1492); + match(T__3); + setState(1493); + expr(0); + setState(1494); match(T__2); } break; - case 177: + case 192: { - _localctx = new HTMLDECODE_funContext(_localctx); + _localctx = new BETAINV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1374); - match(HTMLDECODE); - setState(1375); + setState(1496); + match(BETAINV); + setState(1497); match(T__1); - setState(1376); + setState(1498); + expr(0); + setState(1499); + match(T__3); + setState(1500); + expr(0); + setState(1501); + match(T__3); + setState(1502); expr(0); - setState(1377); + setState(1503); match(T__2); } break; - case 178: + case 193: { - _localctx = new BASE64TOTEXT_funContext(_localctx); + _localctx = new BINOMDIST_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1379); - match(BASE64TOTEXT); - setState(1380); + setState(1505); + match(BINOMDIST); + setState(1506); match(T__1); - setState(1381); + setState(1507); expr(0); - setState(1384); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1382); - match(T__3); - setState(1383); - expr(0); - } - } - - setState(1386); + setState(1508); + match(T__3); + setState(1509); + expr(0); + setState(1510); + match(T__3); + setState(1511); + expr(0); + setState(1512); + match(T__3); + setState(1513); + expr(0); + setState(1514); match(T__2); } break; - case 179: + case 194: { - _localctx = new BASE64URLTOTEXT_funContext(_localctx); + _localctx = new EXPONDIST_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1388); - match(BASE64URLTOTEXT); - setState(1389); + setState(1516); + match(EXPONDIST); + setState(1517); match(T__1); - setState(1390); + setState(1518); expr(0); - setState(1393); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1391); - match(T__3); - setState(1392); - expr(0); - } - } - - setState(1395); + setState(1519); + match(T__3); + setState(1520); + expr(0); + setState(1521); + match(T__3); + setState(1522); + expr(0); + setState(1523); match(T__2); } break; - case 180: + case 195: { - _localctx = new TEXTTOBASE64_funContext(_localctx); + _localctx = new FDIST_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1397); - match(TEXTTOBASE64); - setState(1398); + setState(1525); + match(FDIST); + setState(1526); match(T__1); - setState(1399); + setState(1527); expr(0); - setState(1402); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1400); - match(T__3); - setState(1401); - expr(0); - } - } - - setState(1404); + setState(1528); + match(T__3); + setState(1529); + expr(0); + setState(1530); + match(T__3); + setState(1531); + expr(0); + setState(1532); match(T__2); } break; - case 181: + case 196: { - _localctx = new TEXTTOBASE64URL_funContext(_localctx); + _localctx = new FINV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1406); - match(TEXTTOBASE64URL); - setState(1407); + setState(1534); + match(FINV); + setState(1535); match(T__1); - setState(1408); + setState(1536); expr(0); - setState(1411); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1409); - match(T__3); - setState(1410); - expr(0); - } - } - - setState(1413); + setState(1537); + match(T__3); + setState(1538); + expr(0); + setState(1539); + match(T__3); + setState(1540); + expr(0); + setState(1541); match(T__2); } break; - case 182: + case 197: { - _localctx = new REGEX_funContext(_localctx); + _localctx = new FISHER_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1415); - match(REGEX); - setState(1416); + setState(1543); + match(FISHER); + setState(1544); match(T__1); - setState(1417); + setState(1545); expr(0); - setState(1418); - match(T__3); - setState(1419); + setState(1546); + match(T__2); + } + break; + case 198: + { + _localctx = new FISHERINV_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1548); + match(FISHERINV); + setState(1549); + match(T__1); + setState(1550); expr(0); - setState(1420); + setState(1551); match(T__2); } break; - case 183: + case 199: { - _localctx = new REGEXREPALCE_funContext(_localctx); + _localctx = new GAMMADIST_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1422); - match(REGEXREPALCE); - setState(1423); + setState(1553); + match(GAMMADIST); + setState(1554); match(T__1); - setState(1424); + setState(1555); + expr(0); + setState(1556); + match(T__3); + setState(1557); expr(0); - setState(1425); + setState(1558); match(T__3); - setState(1426); + setState(1559); expr(0); - setState(1427); + setState(1560); match(T__3); - setState(1428); + setState(1561); expr(0); - setState(1429); + setState(1562); match(T__2); } break; - case 184: + case 200: { - _localctx = new ISREGEX_funContext(_localctx); + _localctx = new GAMMAINV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1431); - match(ISREGEX); - setState(1432); + setState(1564); + match(GAMMAINV); + setState(1565); match(T__1); - setState(1433); + setState(1566); expr(0); - setState(1434); + setState(1567); match(T__3); - setState(1435); + setState(1568); + expr(0); + setState(1569); + match(T__3); + setState(1570); expr(0); - setState(1436); + setState(1571); match(T__2); } break; - case 185: + case 201: { - _localctx = new GUID_funContext(_localctx); + _localctx = new GAMMALN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1438); - match(GUID); - setState(1439); + setState(1573); + match(GAMMALN); + setState(1574); match(T__1); - setState(1440); + setState(1575); + expr(0); + setState(1576); match(T__2); } break; - case 186: + case 202: { - _localctx = new MD5_funContext(_localctx); + _localctx = new HYPGEOMDIST_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1441); - match(MD5); - setState(1442); + setState(1578); + match(HYPGEOMDIST); + setState(1579); match(T__1); - setState(1443); + setState(1580); expr(0); - setState(1446); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1444); - match(T__3); - setState(1445); - expr(0); - } - } - - setState(1448); + setState(1581); + match(T__3); + setState(1582); + expr(0); + setState(1583); + match(T__3); + setState(1584); + expr(0); + setState(1585); + match(T__3); + setState(1586); + expr(0); + setState(1587); match(T__2); } break; - case 187: + case 203: { - _localctx = new SHA1_funContext(_localctx); + _localctx = new LOGINV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1450); - match(SHA1); - setState(1451); + setState(1589); + match(LOGINV); + setState(1590); match(T__1); - setState(1452); + setState(1591); expr(0); - setState(1455); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1453); - match(T__3); - setState(1454); - expr(0); - } - } - - setState(1457); + setState(1592); + match(T__3); + setState(1593); + expr(0); + setState(1594); + match(T__3); + setState(1595); + expr(0); + setState(1596); match(T__2); } break; - case 188: + case 204: { - _localctx = new SHA256_funContext(_localctx); + _localctx = new LOGNORMDIST_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1459); - match(SHA256); - setState(1460); + setState(1598); + match(LOGNORMDIST); + setState(1599); match(T__1); - setState(1461); + setState(1600); expr(0); - setState(1464); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1462); - match(T__3); - setState(1463); - expr(0); - } - } - - setState(1466); + setState(1601); + match(T__3); + setState(1602); + expr(0); + setState(1603); + match(T__3); + setState(1604); + expr(0); + setState(1605); match(T__2); } break; - case 189: + case 205: { - _localctx = new SHA512_funContext(_localctx); + _localctx = new NEGBINOMDIST_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1468); - match(SHA512); - setState(1469); + setState(1607); + match(NEGBINOMDIST); + setState(1608); match(T__1); - setState(1470); + setState(1609); expr(0); - setState(1473); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1471); - match(T__3); - setState(1472); - expr(0); - } - } - - setState(1475); + setState(1610); + match(T__3); + setState(1611); + expr(0); + setState(1612); + match(T__3); + setState(1613); + expr(0); + setState(1614); match(T__2); } break; - case 190: + case 206: { - _localctx = new HMACMD5_funContext(_localctx); + _localctx = new POISSON_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1477); - match(HMACMD5); - setState(1478); + setState(1616); + match(POISSON); + setState(1617); match(T__1); - setState(1479); + setState(1618); expr(0); - setState(1480); + setState(1619); match(T__3); - setState(1481); + setState(1620); expr(0); - setState(1484); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1482); - match(T__3); - setState(1483); - expr(0); - } - } - - setState(1486); + setState(1621); + match(T__3); + setState(1622); + expr(0); + setState(1623); match(T__2); } break; - case 191: + case 207: { - _localctx = new HMACSHA1_funContext(_localctx); + _localctx = new TDIST_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1488); - match(HMACSHA1); - setState(1489); + setState(1625); + match(TDIST); + setState(1626); match(T__1); - setState(1490); + setState(1627); expr(0); - setState(1491); + setState(1628); match(T__3); - setState(1492); + setState(1629); expr(0); - setState(1495); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1493); - match(T__3); - setState(1494); - expr(0); - } - } - - setState(1497); + setState(1630); + match(T__3); + setState(1631); + expr(0); + setState(1632); match(T__2); } break; - case 192: + case 208: { - _localctx = new HMACSHA256_funContext(_localctx); + _localctx = new TINV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1499); - match(HMACSHA256); - setState(1500); + setState(1634); + match(TINV); + setState(1635); match(T__1); - setState(1501); + setState(1636); expr(0); - setState(1502); + setState(1637); match(T__3); - setState(1503); + setState(1638); expr(0); - setState(1506); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1504); - match(T__3); - setState(1505); - expr(0); - } - } - - setState(1508); + setState(1639); match(T__2); } break; - case 193: + case 209: { - _localctx = new HMACSHA512_funContext(_localctx); + _localctx = new WEIBULL_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1510); - match(HMACSHA512); - setState(1511); + setState(1641); + match(WEIBULL); + setState(1642); match(T__1); - setState(1512); + setState(1643); expr(0); - setState(1513); + setState(1644); match(T__3); - setState(1514); + setState(1645); expr(0); - setState(1517); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1515); - match(T__3); - setState(1516); - expr(0); - } - } - - setState(1519); + setState(1646); + match(T__3); + setState(1647); + expr(0); + setState(1648); + match(T__3); + setState(1649); + expr(0); + setState(1650); match(T__2); } break; - case 194: + case 210: { - _localctx = new TRIMSTART_funContext(_localctx); + _localctx = new PMT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1521); - match(TRIMSTART); - setState(1522); + setState(1652); + match(PMT); + setState(1653); match(T__1); - setState(1523); + setState(1654); expr(0); - setState(1526); + setState(1655); + match(T__3); + setState(1656); + expr(0); + setState(1657); + match(T__3); + setState(1658); + expr(0); + setState(1665); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1524); + setState(1659); match(T__3); - setState(1525); + setState(1660); expr(0); + setState(1663); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(1661); + match(T__3); + setState(1662); + expr(0); + } } - } - setState(1528); - match(T__2); - } - break; - case 195: - { - _localctx = new TRIMEND_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(1530); - match(TRIMEND); - setState(1531); - match(T__1); - setState(1532); - expr(0); - setState(1535); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1533); - match(T__3); - setState(1534); - expr(0); } } - setState(1537); + setState(1667); match(T__2); } break; - case 196: + case 211: { - _localctx = new INDEXOF_funContext(_localctx); + _localctx = new PPMT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1539); - match(INDEXOF); - setState(1540); + setState(1669); + match(PPMT); + setState(1670); match(T__1); - setState(1541); + setState(1671); expr(0); - setState(1542); + setState(1672); match(T__3); - setState(1543); + setState(1673); expr(0); - setState(1550); + setState(1674); + match(T__3); + setState(1675); + expr(0); + setState(1676); + match(T__3); + setState(1677); + expr(0); + setState(1684); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1544); + setState(1678); match(T__3); - setState(1545); + setState(1679); expr(0); - setState(1548); + setState(1682); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1546); + setState(1680); match(T__3); - setState(1547); + setState(1681); expr(0); } } @@ -8083,42 +9202,50 @@ private ExprContext expr(int _p) throws RecognitionException { } } - setState(1552); + setState(1686); match(T__2); } break; - case 197: + case 212: { - _localctx = new LASTINDEXOF_funContext(_localctx); + _localctx = new IPMT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1554); - match(LASTINDEXOF); - setState(1555); + setState(1688); + match(IPMT); + setState(1689); match(T__1); - setState(1556); + setState(1690); expr(0); - setState(1557); + setState(1691); match(T__3); - setState(1558); + setState(1692); expr(0); - setState(1565); + setState(1693); + match(T__3); + setState(1694); + expr(0); + setState(1695); + match(T__3); + setState(1696); + expr(0); + setState(1703); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1559); + setState(1697); match(T__3); - setState(1560); + setState(1698); expr(0); - setState(1563); + setState(1701); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1561); + setState(1699); match(T__3); - setState(1562); + setState(1700); expr(0); } } @@ -8126,2603 +9253,2647 @@ private ExprContext expr(int _p) throws RecognitionException { } } - setState(1567); + setState(1705); match(T__2); } break; - case 198: + case 213: { - _localctx = new SPLIT_funContext(_localctx); + _localctx = new PV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1569); - match(SPLIT); - setState(1570); + setState(1707); + match(PV); + setState(1708); match(T__1); - setState(1571); + setState(1709); expr(0); - setState(1572); + setState(1710); match(T__3); - setState(1573); + setState(1711); expr(0); - setState(1574); - match(T__2); - } - break; - case 199: - { - _localctx = new JOIN_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(1576); - match(JOIN); - setState(1577); - match(T__1); - setState(1578); + setState(1712); + match(T__3); + setState(1713); expr(0); - setState(1581); + setState(1720); _errHandler.sync(this); _la = _input.LA(1); - do { - { + if (_la==T__3) { { - setState(1579); + setState(1714); match(T__3); - setState(1580); + setState(1715); expr(0); - } - } - setState(1583); + setState(1718); _errHandler.sync(this); _la = _input.LA(1); - } while ( _la==T__3 ); - setState(1585); + if (_la==T__3) { + { + setState(1716); + match(T__3); + setState(1717); + expr(0); + } + } + + } + } + + setState(1722); match(T__2); } break; - case 200: + case 214: { - _localctx = new SUBSTRING_funContext(_localctx); + _localctx = new FV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1587); - match(SUBSTRING); - setState(1588); + setState(1724); + match(FV); + setState(1725); match(T__1); - setState(1589); + setState(1726); expr(0); - setState(1590); + setState(1727); match(T__3); - setState(1591); + setState(1728); expr(0); - setState(1594); + setState(1729); + match(T__3); + setState(1730); + expr(0); + setState(1737); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1592); + setState(1731); match(T__3); - setState(1593); + setState(1732); expr(0); + setState(1735); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(1733); + match(T__3); + setState(1734); + expr(0); + } + } + } } - setState(1596); + setState(1739); match(T__2); } break; - case 201: + case 215: { - _localctx = new STARTSWITH_funContext(_localctx); + _localctx = new NPER_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1598); - match(STARTSWITH); - setState(1599); + setState(1741); + match(NPER); + setState(1742); match(T__1); - setState(1600); + setState(1743); expr(0); - setState(1601); + setState(1744); match(T__3); - setState(1602); + setState(1745); expr(0); - setState(1605); + setState(1746); + match(T__3); + setState(1747); + expr(0); + setState(1754); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1603); + setState(1748); match(T__3); - setState(1604); + setState(1749); expr(0); + setState(1752); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(1750); + match(T__3); + setState(1751); + expr(0); + } + } + } } - setState(1607); + setState(1756); match(T__2); } break; - case 202: + case 216: { - _localctx = new ENDSWITH_funContext(_localctx); + _localctx = new RATE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1609); - match(ENDSWITH); - setState(1610); + setState(1758); + match(RATE); + setState(1759); match(T__1); - setState(1611); + setState(1760); expr(0); - setState(1612); + setState(1761); match(T__3); - setState(1613); + setState(1762); expr(0); - setState(1616); + setState(1763); + match(T__3); + setState(1764); + expr(0); + setState(1775); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1614); + setState(1765); match(T__3); - setState(1615); + setState(1766); expr(0); + setState(1773); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(1767); + match(T__3); + setState(1768); + expr(0); + setState(1771); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(1769); + match(T__3); + setState(1770); + expr(0); + } + } + + } + } + } } - setState(1618); + setState(1777); match(T__2); } break; - case 203: + case 217: { - _localctx = new ISNULLOREMPTY_funContext(_localctx); + _localctx = new NPV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1620); - match(ISNULLOREMPTY); - setState(1621); + setState(1779); + match(NPV); + setState(1780); match(T__1); - setState(1622); + setState(1781); expr(0); - setState(1623); + setState(1782); + match(T__3); + setState(1783); + expr(0); + setState(1788); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(1784); + match(T__3); + setState(1785); + expr(0); + } + } + setState(1790); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1791); match(T__2); } break; - case 204: + case 218: { - _localctx = new ISNULLORWHITESPACE_funContext(_localctx); + _localctx = new XNPV_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1625); - match(ISNULLORWHITESPACE); - setState(1626); + setState(1793); + match(XNPV); + setState(1794); match(T__1); - setState(1627); + setState(1795); expr(0); - setState(1628); + setState(1796); + match(T__3); + setState(1797); + expr(0); + setState(1798); + match(T__3); + setState(1799); + expr(0); + setState(1800); match(T__2); } break; - case 205: + case 219: { - _localctx = new REMOVESTART_funContext(_localctx); + _localctx = new IRR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1630); - match(REMOVESTART); - setState(1631); + setState(1802); + match(IRR); + setState(1803); match(T__1); - setState(1632); + setState(1804); expr(0); - setState(1639); + setState(1807); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1633); + setState(1805); match(T__3); - setState(1634); + setState(1806); expr(0); - setState(1637); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1635); - match(T__3); - setState(1636); - expr(0); - } - } - } } - setState(1641); + setState(1809); match(T__2); } break; - case 206: + case 220: { - _localctx = new REMOVEEND_funContext(_localctx); + _localctx = new MIRR_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1643); - match(REMOVEEND); - setState(1644); + setState(1811); + match(MIRR); + setState(1812); match(T__1); - setState(1645); + setState(1813); expr(0); - setState(1652); + setState(1814); + match(T__3); + setState(1815); + expr(0); + setState(1816); + match(T__3); + setState(1817); + expr(0); + setState(1818); + match(T__2); + } + break; + case 221: + { + _localctx = new XIRR_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1820); + match(XIRR); + setState(1821); + match(T__1); + setState(1822); + expr(0); + setState(1823); + match(T__3); + setState(1824); + expr(0); + setState(1827); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(1646); + setState(1825); match(T__3); - setState(1647); + setState(1826); expr(0); - setState(1650); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1648); - match(T__3); - setState(1649); - expr(0); - } - } - } } - setState(1654); + setState(1829); match(T__2); } break; - case 207: + case 222: { - _localctx = new JSON_funContext(_localctx); + _localctx = new SLN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1656); - match(JSON); - setState(1657); + setState(1831); + match(SLN); + setState(1832); match(T__1); - setState(1658); + setState(1833); expr(0); - setState(1659); - match(T__2); - } - break; - case 208: - { - _localctx = new LOOKCEILING_funContext(_localctx); - _ctx = _localctx; - _prevctx = _localctx; - setState(1661); - match(LOOKCEILING); - setState(1662); - match(T__1); - setState(1663); + setState(1834); + match(T__3); + setState(1835); expr(0); - setState(1664); + setState(1836); match(T__3); - setState(1665); + setState(1837); expr(0); - setState(1666); + setState(1838); match(T__2); } break; - case 209: + case 223: { - _localctx = new LOOKFLOOR_funContext(_localctx); + _localctx = new DB_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1668); - match(LOOKFLOOR); - setState(1669); + setState(1840); + match(DB); + setState(1841); match(T__1); - setState(1670); + setState(1842); expr(0); - setState(1671); + setState(1843); match(T__3); - setState(1672); + setState(1844); expr(0); - setState(1673); + setState(1845); + match(T__3); + setState(1846); + expr(0); + setState(1847); + match(T__3); + setState(1848); + expr(0); + setState(1851); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(1849); + match(T__3); + setState(1850); + expr(0); + } + } + + setState(1853); match(T__2); } break; - case 210: + case 224: { - _localctx = new DiyFunction_funContext(_localctx); + _localctx = new DDB_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1675); - match(PARAMETER); - setState(1676); + setState(1855); + match(DDB); + setState(1856); match(T__1); - setState(1685); + setState(1857); + expr(0); + setState(1858); + match(T__3); + setState(1859); + expr(0); + setState(1860); + match(T__3); + setState(1861); + expr(0); + setState(1862); + match(T__3); + setState(1863); + expr(0); + setState(1866); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { + if (_la==T__3) { { - setState(1677); + setState(1864); + match(T__3); + setState(1865); expr(0); - setState(1682); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==T__3) { - { - { - setState(1678); - match(T__3); - setState(1679); - expr(0); - } - } - setState(1684); - _errHandler.sync(this); - _la = _input.LA(1); - } } } - setState(1687); + setState(1868); match(T__2); } break; - case 211: + case 225: { - _localctx = new ADDYEARS_funContext(_localctx); + _localctx = new SYD_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1688); - match(ADDYEARS); - setState(1689); + setState(1870); + match(SYD); + setState(1871); match(T__1); - setState(1690); + setState(1872); expr(0); - setState(1691); + setState(1873); match(T__3); - setState(1692); + setState(1874); expr(0); - setState(1693); + setState(1875); + match(T__3); + setState(1876); + expr(0); + setState(1877); + match(T__3); + setState(1878); + expr(0); + setState(1879); match(T__2); } break; - case 212: + case 226: { - _localctx = new ADDMONTHS_funContext(_localctx); + _localctx = new URLENCODE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1695); - match(ADDMONTHS); - setState(1696); + setState(1881); + match(URLENCODE); + setState(1882); match(T__1); - setState(1697); - expr(0); - setState(1698); - match(T__3); - setState(1699); + setState(1883); expr(0); - setState(1700); + setState(1884); match(T__2); } break; - case 213: + case 227: { - _localctx = new ADDDAYS_funContext(_localctx); + _localctx = new URLDECODE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1702); - match(ADDDAYS); - setState(1703); + setState(1886); + match(URLDECODE); + setState(1887); match(T__1); - setState(1704); + setState(1888); expr(0); - setState(1705); - match(T__3); - setState(1706); - expr(0); - setState(1707); + setState(1889); match(T__2); } break; - case 214: + case 228: { - _localctx = new ADDHOURS_funContext(_localctx); + _localctx = new HTMLENCODE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1709); - match(ADDHOURS); - setState(1710); + setState(1891); + match(HTMLENCODE); + setState(1892); match(T__1); - setState(1711); - expr(0); - setState(1712); - match(T__3); - setState(1713); + setState(1893); expr(0); - setState(1714); + setState(1894); match(T__2); } break; - case 215: + case 229: { - _localctx = new ADDMINUTES_funContext(_localctx); + _localctx = new HTMLDECODE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1716); - match(ADDMINUTES); - setState(1717); + setState(1896); + match(HTMLDECODE); + setState(1897); match(T__1); - setState(1718); - expr(0); - setState(1719); - match(T__3); - setState(1720); + setState(1898); expr(0); - setState(1721); + setState(1899); match(T__2); } break; - case 216: + case 230: { - _localctx = new ADDSECONDS_funContext(_localctx); + _localctx = new BASE64TOTEXT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1723); - match(ADDSECONDS); - setState(1724); + setState(1901); + match(BASE64TOTEXT); + setState(1902); match(T__1); - setState(1725); + setState(1903); expr(0); - setState(1726); - match(T__3); - setState(1727); - expr(0); - setState(1728); + setState(1904); match(T__2); } break; - case 217: + case 231: { - _localctx = new TIMESTAMP_funContext(_localctx); + _localctx = new BASE64URLTOTEXT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1730); - match(TIMESTAMP); - setState(1731); + setState(1906); + match(BASE64URLTOTEXT); + setState(1907); match(T__1); - setState(1732); + setState(1908); expr(0); - setState(1735); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1733); - match(T__3); - setState(1734); - expr(0); - } - } - - setState(1737); + setState(1909); match(T__2); } break; - case 218: + case 232: { - _localctx = new PARAM_funContext(_localctx); + _localctx = new TEXTTOBASE64_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1739); - match(PARAM); - setState(1740); + setState(1911); + match(TEXTTOBASE64); + setState(1912); match(T__1); - setState(1741); + setState(1913); expr(0); - setState(1744); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(1742); - match(T__3); - setState(1743); - expr(0); - } - } - - setState(1746); + setState(1914); match(T__2); } break; - case 219: + case 233: { - _localctx = new ERROR_funContext(_localctx); + _localctx = new TEXTTOBASE64URL_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1748); - match(ERROR); - setState(1749); + setState(1916); + match(TEXTTOBASE64URL); + setState(1917); match(T__1); - setState(1751); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1750); - expr(0); - } - } - - setState(1753); + setState(1918); + expr(0); + setState(1919); match(T__2); } break; - case 220: + case 234: { - _localctx = new HAS_funContext(_localctx); + _localctx = new REGEX_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1754); - match(HAS); - setState(1755); + setState(1921); + match(REGEX); + setState(1922); match(T__1); - setState(1756); + setState(1923); expr(0); - setState(1757); + setState(1924); match(T__3); - setState(1758); + setState(1925); expr(0); - setState(1759); + setState(1926); match(T__2); } break; - case 221: + case 235: { - _localctx = new HASVALUE_funContext(_localctx); + _localctx = new REGEXREPLACE_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1761); - match(HASVALUE); - setState(1762); + setState(1928); + match(REGEXREPLACE); + setState(1929); match(T__1); - setState(1763); + setState(1930); expr(0); - setState(1764); + setState(1931); match(T__3); - setState(1765); + setState(1932); expr(0); - setState(1766); + setState(1933); + match(T__3); + setState(1934); + expr(0); + setState(1935); match(T__2); } break; - case 222: + case 236: { - _localctx = new ArrayJson_funContext(_localctx); + _localctx = new ISREGEX_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1768); - match(T__26); - setState(1769); - arrayJson(); - setState(1774); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,98,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { - { - setState(1770); - match(T__3); - setState(1771); - arrayJson(); - } - } - } - setState(1776); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,98,_ctx); - } - setState(1780); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==T__3) { - { - { - setState(1777); - match(T__3); - } - } - setState(1782); - _errHandler.sync(this); - _la = _input.LA(1); + setState(1937); + match(ISREGEX); + setState(1938); + match(T__1); + setState(1939); + expr(0); + setState(1940); + match(T__3); + setState(1941); + expr(0); + setState(1942); + match(T__2); } - setState(1783); - match(T__27); + break; + case 237: + { + _localctx = new GUID_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1944); + match(GUID); + setState(1945); + match(T__1); + setState(1946); + match(T__2); } break; - case 223: + case 238: { - _localctx = new Array_funContext(_localctx); + _localctx = new MD5_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1785); - match(T__4); - setState(1786); - expr(0); - setState(1791); + setState(1947); + match(MD5); + setState(1948); + match(T__1); + setState(1949); + expr(0); + setState(1950); + match(T__2); + } + break; + case 239: + { + _localctx = new SHA1_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1952); + match(SHA1); + setState(1953); + match(T__1); + setState(1954); + expr(0); + setState(1955); + match(T__2); + } + break; + case 240: + { + _localctx = new SHA256_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1957); + match(SHA256); + setState(1958); + match(T__1); + setState(1959); + expr(0); + setState(1960); + match(T__2); + } + break; + case 241: + { + _localctx = new SHA512_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1962); + match(SHA512); + setState(1963); + match(T__1); + setState(1964); + expr(0); + setState(1965); + match(T__2); + } + break; + case 242: + { + _localctx = new HMACMD5_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1967); + match(HMACMD5); + setState(1968); + match(T__1); + setState(1969); + expr(0); + setState(1970); + match(T__3); + setState(1971); + expr(0); + setState(1972); + match(T__2); + } + break; + case 243: + { + _localctx = new HMACSHA1_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1974); + match(HMACSHA1); + setState(1975); + match(T__1); + setState(1976); + expr(0); + setState(1977); + match(T__3); + setState(1978); + expr(0); + setState(1979); + match(T__2); + } + break; + case 244: + { + _localctx = new HMACSHA256_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1981); + match(HMACSHA256); + setState(1982); + match(T__1); + setState(1983); + expr(0); + setState(1984); + match(T__3); + setState(1985); + expr(0); + setState(1986); + match(T__2); + } + break; + case 245: + { + _localctx = new HMACSHA512_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1988); + match(HMACSHA512); + setState(1989); + match(T__1); + setState(1990); + expr(0); + setState(1991); + match(T__3); + setState(1992); + expr(0); + setState(1993); + match(T__2); + } + break; + case 246: + { + _localctx = new TRIMSTART_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(1995); + match(TRIMSTART); + setState(1996); + match(T__1); + setState(1997); + expr(0); + setState(2000); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,100,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - { + _la = _input.LA(1); + if (_la==T__3) { + { + setState(1998); + match(T__3); + setState(1999); + expr(0); + } + } + + setState(2002); + match(T__2); + } + break; + case 247: + { + _localctx = new TRIMEND_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2004); + match(TRIMEND); + setState(2005); + match(T__1); + setState(2006); + expr(0); + setState(2009); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(2007); + match(T__3); + setState(2008); + expr(0); + } + } + + setState(2011); + match(T__2); + } + break; + case 248: + { + _localctx = new INDEXOF_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2013); + match(INDEXOF); + setState(2014); + match(T__1); + setState(2015); + expr(0); + setState(2016); + match(T__3); + setState(2017); + expr(0); + setState(2024); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(2018); + match(T__3); + setState(2019); + expr(0); + setState(2022); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { { - setState(1787); + setState(2020); match(T__3); - setState(1788); + setState(2021); expr(0); } - } } - setState(1793); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,100,_ctx); + + } } - setState(1797); + + setState(2026); + match(T__2); + } + break; + case 249: + { + _localctx = new LASTINDEXOF_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2028); + match(LASTINDEXOF); + setState(2029); + match(T__1); + setState(2030); + expr(0); + setState(2031); + match(T__3); + setState(2032); + expr(0); + setState(2039); _errHandler.sync(this); _la = _input.LA(1); - while (_la==T__3) { - { + if (_la==T__3) { { - setState(1794); + setState(2033); match(T__3); - } - } - setState(1799); + setState(2034); + expr(0); + setState(2037); _errHandler.sync(this); _la = _input.LA(1); + if (_la==T__3) { + { + setState(2035); + match(T__3); + setState(2036); + expr(0); + } + } + + } } - setState(1800); - match(T__5); + + setState(2041); + match(T__2); } break; - case 224: + case 250: { - _localctx = new Version_funContext(_localctx); + _localctx = new SPLIT_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1802); - match(ALGORITHMVERSION); + setState(2043); + match(SPLIT); + setState(2044); + match(T__1); + setState(2045); + expr(0); + setState(2046); + match(T__3); + setState(2047); + expr(0); + setState(2048); + match(T__2); } break; - case 225: + case 251: { - _localctx = new PARAMETER_funContext(_localctx); + _localctx = new JOIN_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1803); - match(PARAMETER); + setState(2050); + match(JOIN); + setState(2051); + match(T__1); + setState(2052); + expr(0); + setState(2055); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(2053); + match(T__3); + setState(2054); + expr(0); + } + } + setState(2057); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==T__3 ); + setState(2059); + match(T__2); } break; - case 226: + case 252: { - _localctx = new NUM_funContext(_localctx); + _localctx = new SUBSTRING_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1804); - num(); - setState(1806); + setState(2061); + match(SUBSTRING); + setState(2062); + match(T__1); + setState(2063); + expr(0); + setState(2064); + match(T__3); + setState(2065); + expr(0); + setState(2068); _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,102,_ctx) ) { - case 1: + _la = _input.LA(1); + if (_la==T__3) { { - setState(1805); - unit(); + setState(2066); + match(T__3); + setState(2067); + expr(0); } - break; } + + setState(2070); + match(T__2); } break; - case 227: + case 253: { - _localctx = new STRING_funContext(_localctx); + _localctx = new STARTSWITH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1808); - match(STRING); + setState(2072); + match(STARTSWITH); + setState(2073); + match(T__1); + setState(2074); + expr(0); + setState(2075); + match(T__3); + setState(2076); + expr(0); + setState(2079); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(2077); + match(T__3); + setState(2078); + expr(0); + } + } + + setState(2081); + match(T__2); } break; - case 228: + case 254: { - _localctx = new NULL_funContext(_localctx); + _localctx = new ENDSWITH_funContext(_localctx); _ctx = _localctx; _prevctx = _localctx; - setState(1809); - match(NULL); - } - break; - } - _ctx.stop = _input.LT(-1); - setState(2594); - _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,159,_ctx); - while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { - if ( _alt==1 ) { - if ( _parseListeners!=null ) triggerExitRuleEvent(); - _prevctx = _localctx; + setState(2083); + match(ENDSWITH); + setState(2084); + match(T__1); + setState(2085); + expr(0); + setState(2086); + match(T__3); + setState(2087); + expr(0); + setState(2090); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { { - setState(2592); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,158,_ctx) ) { - case 1: - { - _localctx = new MulDiv_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1812); - if (!(precpred(_ctx, 233))) throw new FailedPredicateException(this, "precpred(_ctx, 233)"); - setState(1813); - ((MulDiv_funContext)_localctx).op = _input.LT(1); - _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 1792L) != 0)) ) { - ((MulDiv_funContext)_localctx).op = (Token)_errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(1814); - expr(234); - } - break; - case 2: - { - _localctx = new AddSub_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1815); - if (!(precpred(_ctx, 232))) throw new FailedPredicateException(this, "precpred(_ctx, 232)"); - setState(1816); - ((AddSub_funContext)_localctx).op = _input.LT(1); - _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 536877056L) != 0)) ) { - ((AddSub_funContext)_localctx).op = (Token)_errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(1817); - expr(233); - } - break; - case 3: - { - _localctx = new Judge_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1818); - if (!(precpred(_ctx, 231))) throw new FailedPredicateException(this, "precpred(_ctx, 231)"); - setState(1819); - ((Judge_funContext)_localctx).op = _input.LT(1); - _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 122880L) != 0)) ) { - ((Judge_funContext)_localctx).op = (Token)_errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(1820); - expr(232); - } - break; - case 4: - { - _localctx = new Judge_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1821); - if (!(precpred(_ctx, 230))) throw new FailedPredicateException(this, "precpred(_ctx, 230)"); - setState(1822); - ((Judge_funContext)_localctx).op = _input.LT(1); - _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 8257536L) != 0)) ) { - ((Judge_funContext)_localctx).op = (Token)_errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(1823); - expr(231); - } - break; - case 5: - { - _localctx = new AndOr_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1824); - if (!(precpred(_ctx, 229))) throw new FailedPredicateException(this, "precpred(_ctx, 229)"); - setState(1825); - ((AndOr_funContext)_localctx).op = _input.LT(1); - _la = _input.LA(1); - if ( !(_la==T__22 || _la==AND) ) { - ((AndOr_funContext)_localctx).op = (Token)_errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(1826); - expr(230); - } - break; - case 6: - { - _localctx = new AndOr_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1827); - if (!(precpred(_ctx, 228))) throw new FailedPredicateException(this, "precpred(_ctx, 228)"); - setState(1828); - ((AndOr_funContext)_localctx).op = _input.LT(1); - _la = _input.LA(1); - if ( !(_la==T__23 || _la==OR) ) { - ((AndOr_funContext)_localctx).op = (Token)_errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - setState(1829); - expr(229); - } - break; - case 7: - { - _localctx = new IF_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1830); - if (!(precpred(_ctx, 227))) throw new FailedPredicateException(this, "precpred(_ctx, 227)"); - setState(1831); - match(T__24); - setState(1832); - expr(0); - setState(1833); - match(T__25); - setState(1834); - expr(228); - } - break; - case 8: - { - _localctx = new ISNUMBER_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1836); - if (!(precpred(_ctx, 336))) throw new FailedPredicateException(this, "precpred(_ctx, 336)"); - setState(1837); - match(T__0); - setState(1838); - match(ISNUMBER); - setState(1839); - match(T__1); - setState(1840); - match(T__2); - } - break; - case 9: - { - _localctx = new ISTEXT_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1841); - if (!(precpred(_ctx, 335))) throw new FailedPredicateException(this, "precpred(_ctx, 335)"); - setState(1842); - match(T__0); - setState(1843); - match(ISTEXT); - setState(1844); - match(T__1); - setState(1845); - match(T__2); - } - break; - case 10: - { - _localctx = new ISNONTEXT_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1846); - if (!(precpred(_ctx, 334))) throw new FailedPredicateException(this, "precpred(_ctx, 334)"); - setState(1847); - match(T__0); - setState(1848); - match(ISNONTEXT); - setState(1849); - match(T__1); - setState(1850); - match(T__2); - } - break; - case 11: - { - _localctx = new ISLOGICAL_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1851); - if (!(precpred(_ctx, 333))) throw new FailedPredicateException(this, "precpred(_ctx, 333)"); - setState(1852); - match(T__0); - setState(1853); - match(ISLOGICAL); - setState(1854); - match(T__1); - setState(1855); - match(T__2); - } - break; - case 12: - { - _localctx = new ISEVEN_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1856); - if (!(precpred(_ctx, 332))) throw new FailedPredicateException(this, "precpred(_ctx, 332)"); - setState(1857); - match(T__0); - setState(1858); - match(ISEVEN); - setState(1859); - match(T__1); - setState(1860); - match(T__2); - } - break; - case 13: - { - _localctx = new ISODD_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1861); - if (!(precpred(_ctx, 331))) throw new FailedPredicateException(this, "precpred(_ctx, 331)"); - setState(1862); - match(T__0); - setState(1863); - match(ISODD); - setState(1864); - match(T__1); - setState(1865); - match(T__2); - } - break; - case 14: - { - _localctx = new ISERROR_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1866); - if (!(precpred(_ctx, 330))) throw new FailedPredicateException(this, "precpred(_ctx, 330)"); - setState(1867); - match(T__0); - setState(1868); - match(ISERROR); - setState(1869); - match(T__1); - setState(1871); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1870); - expr(0); - } - } - - setState(1873); - match(T__2); - } - break; - case 15: - { - _localctx = new ISNULL_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1874); - if (!(precpred(_ctx, 329))) throw new FailedPredicateException(this, "precpred(_ctx, 329)"); - setState(1875); - match(T__0); - setState(1876); - match(IsNull); - setState(1877); - match(T__1); - setState(1879); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1878); - expr(0); - } - } - - setState(1881); - match(T__2); - } - break; - case 16: - { - _localctx = new ISNULLORERROR_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1882); - if (!(precpred(_ctx, 328))) throw new FailedPredicateException(this, "precpred(_ctx, 328)"); - setState(1883); - match(T__0); - setState(1884); - match(ISNULLORERROR); - setState(1885); - match(T__1); - setState(1887); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1886); - expr(0); - } - } + setState(2088); + match(T__3); + setState(2089); + expr(0); + } + } - setState(1889); - match(T__2); - } - break; - case 17: - { - _localctx = new DEC2BIN_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1890); - if (!(precpred(_ctx, 327))) throw new FailedPredicateException(this, "precpred(_ctx, 327)"); - setState(1891); - match(T__0); - setState(1892); - match(DEC2BIN); + setState(2092); + match(T__2); + } + break; + case 255: + { + _localctx = new ISNULLOREMPTY_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2094); + match(ISNULLOREMPTY); + setState(2095); + match(T__1); + setState(2096); + expr(0); + setState(2097); + match(T__2); + } + break; + case 256: + { + _localctx = new ISNULLORWHITESPACE_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2099); + match(ISNULLORWHITESPACE); + setState(2100); + match(T__1); + setState(2101); + expr(0); + setState(2102); + match(T__2); + } + break; + case 257: + { + _localctx = new REMOVESTART_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2104); + match(REMOVESTART); + setState(2105); + match(T__1); + setState(2106); + expr(0); + setState(2113); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(2107); + match(T__3); + setState(2108); + expr(0); + setState(2111); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { { - setState(1893); - match(T__1); - setState(1895); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1894); - expr(0); - } + setState(2109); + match(T__3); + setState(2110); + expr(0); } + } - setState(1897); - match(T__2); - } - } - break; - case 18: - { - _localctx = new DEC2HEX_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1898); - if (!(precpred(_ctx, 326))) throw new FailedPredicateException(this, "precpred(_ctx, 326)"); - setState(1899); - match(T__0); - setState(1900); - match(DEC2HEX); - { - setState(1901); - match(T__1); - setState(1903); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1902); - expr(0); - } - } + } + } - setState(1905); - match(T__2); - } - } - break; - case 19: - { - _localctx = new DEC2OCT_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1906); - if (!(precpred(_ctx, 325))) throw new FailedPredicateException(this, "precpred(_ctx, 325)"); - setState(1907); - match(T__0); - setState(1908); - match(DEC2OCT); + setState(2115); + match(T__2); + } + break; + case 258: + { + _localctx = new REMOVEEND_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2117); + match(REMOVEEND); + setState(2118); + match(T__1); + setState(2119); + expr(0); + setState(2126); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(2120); + match(T__3); + setState(2121); + expr(0); + setState(2124); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { { - setState(1909); - match(T__1); - setState(1911); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1910); - expr(0); - } + setState(2122); + match(T__3); + setState(2123); + expr(0); } + } - setState(1913); - match(T__2); - } - } - break; - case 20: - { - _localctx = new HEX2BIN_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1914); - if (!(precpred(_ctx, 324))) throw new FailedPredicateException(this, "precpred(_ctx, 324)"); - setState(1915); - match(T__0); - setState(1916); - match(HEX2BIN); - { - setState(1917); - match(T__1); - setState(1919); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1918); - expr(0); - } - } + } + } - setState(1921); - match(T__2); - } - } - break; - case 21: + setState(2128); + match(T__2); + } + break; + case 259: + { + _localctx = new JSON_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2130); + match(JSON); + setState(2131); + match(T__1); + setState(2132); + expr(0); + setState(2133); + match(T__2); + } + break; + case 260: + { + _localctx = new LOOKCEILING_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2135); + match(LOOKCEILING); + setState(2136); + match(T__1); + setState(2137); + expr(0); + setState(2138); + match(T__3); + setState(2139); + expr(0); + setState(2140); + match(T__2); + } + break; + case 261: + { + _localctx = new LOOKFLOOR_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2142); + match(LOOKFLOOR); + setState(2143); + match(T__1); + setState(2144); + expr(0); + setState(2145); + match(T__3); + setState(2146); + expr(0); + setState(2147); + match(T__2); + } + break; + case 262: + { + _localctx = new DiyFunction_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2149); + match(PARAMETER); + setState(2150); + match(T__1); + setState(2159); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125899906842623L) != 0)) { + { + setState(2151); + expr(0); + setState(2156); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { { - _localctx = new HEX2DEC_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1922); - if (!(precpred(_ctx, 323))) throw new FailedPredicateException(this, "precpred(_ctx, 323)"); - setState(1923); - match(T__0); - setState(1924); - match(HEX2DEC); { - setState(1925); - match(T__1); - setState(1926); - match(T__2); + setState(2152); + match(T__3); + setState(2153); + expr(0); } } - break; - case 22: - { - _localctx = new HEX2OCT_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1927); - if (!(precpred(_ctx, 322))) throw new FailedPredicateException(this, "precpred(_ctx, 322)"); - setState(1928); - match(T__0); - setState(1929); - match(HEX2OCT); - { - setState(1930); - match(T__1); - setState(1932); + setState(2158); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1931); - expr(0); - } - } + } + } + } + + setState(2161); + match(T__2); + } + break; + case 263: + { + _localctx = new ADDYEARS_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2162); + match(ADDYEARS); + setState(2163); + match(T__1); + setState(2164); + expr(0); + setState(2165); + match(T__3); + setState(2166); + expr(0); + setState(2167); + match(T__2); + } + break; + case 264: + { + _localctx = new ADDMONTHS_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2169); + match(ADDMONTHS); + setState(2170); + match(T__1); + setState(2171); + expr(0); + setState(2172); + match(T__3); + setState(2173); + expr(0); + setState(2174); + match(T__2); + } + break; + case 265: + { + _localctx = new ADDDAYS_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2176); + match(ADDDAYS); + setState(2177); + match(T__1); + setState(2178); + expr(0); + setState(2179); + match(T__3); + setState(2180); + expr(0); + setState(2181); + match(T__2); + } + break; + case 266: + { + _localctx = new ADDHOURS_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2183); + match(ADDHOURS); + setState(2184); + match(T__1); + setState(2185); + expr(0); + setState(2186); + match(T__3); + setState(2187); + expr(0); + setState(2188); + match(T__2); + } + break; + case 267: + { + _localctx = new ADDMINUTES_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2190); + match(ADDMINUTES); + setState(2191); + match(T__1); + setState(2192); + expr(0); + setState(2193); + match(T__3); + setState(2194); + expr(0); + setState(2195); + match(T__2); + } + break; + case 268: + { + _localctx = new ADDSECONDS_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2197); + match(ADDSECONDS); + setState(2198); + match(T__1); + setState(2199); + expr(0); + setState(2200); + match(T__3); + setState(2201); + expr(0); + setState(2202); + match(T__2); + } + break; + case 269: + { + _localctx = new TIMESTAMP_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2204); + match(TIMESTAMP); + setState(2205); + match(T__1); + setState(2206); + expr(0); + setState(2209); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(2207); + match(T__3); + setState(2208); + expr(0); + } + } - setState(1934); - match(T__2); - } - } - break; - case 23: + setState(2211); + match(T__2); + } + break; + case 270: + { + _localctx = new PARAM_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2213); + match(PARAM); + setState(2214); + match(T__1); + setState(2215); + expr(0); + setState(2218); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__3) { + { + setState(2216); + match(T__3); + setState(2217); + expr(0); + } + } + + setState(2220); + match(T__2); + } + break; + case 271: + { + _localctx = new ERROR_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2222); + match(ERROR); + setState(2223); + match(T__1); + setState(2225); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125899906842623L) != 0)) { + { + setState(2224); + expr(0); + } + } + + setState(2227); + match(T__2); + } + break; + case 272: + { + _localctx = new HAS_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2228); + match(HAS); + setState(2229); + match(T__1); + setState(2230); + expr(0); + setState(2231); + match(T__3); + setState(2232); + expr(0); + setState(2233); + match(T__2); + } + break; + case 273: + { + _localctx = new HASVALUE_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2235); + match(HASVALUE); + setState(2236); + match(T__1); + setState(2237); + expr(0); + setState(2238); + match(T__3); + setState(2239); + expr(0); + setState(2240); + match(T__2); + } + break; + case 274: + { + _localctx = new ArrayJson_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2242); + match(T__26); + setState(2243); + arrayJson(); + setState(2248); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,118,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { { - _localctx = new OCT2BIN_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1935); - if (!(precpred(_ctx, 321))) throw new FailedPredicateException(this, "precpred(_ctx, 321)"); - setState(1936); - match(T__0); - setState(1937); - match(OCT2BIN); { - setState(1938); - match(T__1); - setState(1940); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1939); - expr(0); - } - } - - setState(1942); - match(T__2); - } + setState(2244); + match(T__3); + setState(2245); + arrayJson(); } - break; - case 24: + } + } + setState(2250); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,118,_ctx); + } + setState(2254); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(2251); + match(T__3); + } + } + setState(2256); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2257); + match(T__27); + } + break; + case 275: + { + _localctx = new Array_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2259); + match(T__4); + setState(2260); + expr(0); + setState(2265); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,120,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { { - _localctx = new OCT2DEC_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1943); - if (!(precpred(_ctx, 320))) throw new FailedPredicateException(this, "precpred(_ctx, 320)"); - setState(1944); - match(T__0); - setState(1945); - match(OCT2DEC); { - setState(1946); - match(T__1); - setState(1947); - match(T__2); - } + setState(2261); + match(T__3); + setState(2262); + expr(0); } - break; - case 25: + } + } + setState(2267); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,120,_ctx); + } + setState(2271); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==T__3) { + { + { + setState(2268); + match(T__3); + } + } + setState(2273); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2274); + match(T__5); + } + break; + case 276: + { + _localctx = new Version_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2276); + match(ALGORITHMVERSION); + } + break; + case 277: + { + _localctx = new PARAMETER_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2277); + match(PARAMETER); + } + break; + case 278: + { + _localctx = new NUM_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2278); + num(); + setState(2280); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,122,_ctx) ) { + case 1: + { + setState(2279); + ((NUM_funContext)_localctx).unit = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==UNIT || _la==T) ) { + ((NUM_funContext)_localctx).unit = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + } + break; + case 279: + { + _localctx = new STRING_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2282); + match(STRING); + } + break; + case 280: + { + _localctx = new NULL_funContext(_localctx); + _ctx = _localctx; + _prevctx = _localctx; + setState(2283); + match(NULL); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(2786); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,153,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(2784); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,152,_ctx) ) { + case 1: { - _localctx = new OCT2HEX_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new MulDiv_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1948); - if (!(precpred(_ctx, 319))) throw new FailedPredicateException(this, "precpred(_ctx, 319)"); - setState(1949); - match(T__0); - setState(1950); - match(OCT2HEX); - { - setState(1951); - match(T__1); - setState(1953); - _errHandler.sync(this); + setState(2286); + if (!(precpred(_ctx, 285))) throw new FailedPredicateException(this, "precpred(_ctx, 285)"); + setState(2287); + ((MulDiv_funContext)_localctx).op = _input.LT(1); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1952); - expr(0); - } + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 1792L) != 0)) ) { + ((MulDiv_funContext)_localctx).op = (Token)_errHandler.recoverInline(this); } - - setState(1955); - match(T__2); + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); } + setState(2288); + expr(286); } break; - case 26: + case 2: { - _localctx = new BIN2OCT_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new AddSub_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1956); - if (!(precpred(_ctx, 318))) throw new FailedPredicateException(this, "precpred(_ctx, 318)"); - setState(1957); - match(T__0); - setState(1958); - match(BIN2OCT); - { - setState(1959); - match(T__1); - setState(1961); - _errHandler.sync(this); + setState(2289); + if (!(precpred(_ctx, 284))) throw new FailedPredicateException(this, "precpred(_ctx, 284)"); + setState(2290); + ((AddSub_funContext)_localctx).op = _input.LT(1); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1960); - expr(0); - } + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 536877056L) != 0)) ) { + ((AddSub_funContext)_localctx).op = (Token)_errHandler.recoverInline(this); } - - setState(1963); - match(T__2); + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); } + setState(2291); + expr(285); } break; - case 27: + case 3: { - _localctx = new BIN2DEC_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new Judge_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1964); - if (!(precpred(_ctx, 317))) throw new FailedPredicateException(this, "precpred(_ctx, 317)"); - setState(1965); - match(T__0); - setState(1966); - match(BIN2DEC); - { - setState(1967); - match(T__1); - setState(1968); - match(T__2); + setState(2292); + if (!(precpred(_ctx, 283))) throw new FailedPredicateException(this, "precpred(_ctx, 283)"); + setState(2293); + ((Judge_funContext)_localctx).op = _input.LT(1); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 122880L) != 0)) ) { + ((Judge_funContext)_localctx).op = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); } + setState(2294); + expr(284); } break; - case 28: + case 4: { - _localctx = new BIN2HEX_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new Judge_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1969); - if (!(precpred(_ctx, 316))) throw new FailedPredicateException(this, "precpred(_ctx, 316)"); - setState(1970); - match(T__0); - setState(1971); - match(BIN2HEX); - { - setState(1972); - match(T__1); - setState(1974); - _errHandler.sync(this); + setState(2295); + if (!(precpred(_ctx, 282))) throw new FailedPredicateException(this, "precpred(_ctx, 282)"); + setState(2296); + ((Judge_funContext)_localctx).op = _input.LT(1); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(1973); - expr(0); - } + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & 8257536L) != 0)) ) { + ((Judge_funContext)_localctx).op = (Token)_errHandler.recoverInline(this); } - - setState(1976); - match(T__2); + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); } + setState(2297); + expr(283); } break; - case 29: + case 5: { - _localctx = new INT_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new AndOr_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1977); - if (!(precpred(_ctx, 315))) throw new FailedPredicateException(this, "precpred(_ctx, 315)"); - setState(1978); - match(T__0); - setState(1979); - match(INT); - setState(1980); - match(T__1); - setState(1981); - match(T__2); + setState(2298); + if (!(precpred(_ctx, 281))) throw new FailedPredicateException(this, "precpred(_ctx, 281)"); + setState(2299); + ((AndOr_funContext)_localctx).op = match(T__22); + setState(2300); + expr(282); } break; - case 30: + case 6: { - _localctx = new ASC_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new AndOr_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1982); - if (!(precpred(_ctx, 314))) throw new FailedPredicateException(this, "precpred(_ctx, 314)"); - setState(1983); - match(T__0); - setState(1984); - match(ASC); - setState(1985); - match(T__1); - setState(1986); - match(T__2); + setState(2301); + if (!(precpred(_ctx, 280))) throw new FailedPredicateException(this, "precpred(_ctx, 280)"); + setState(2302); + ((AndOr_funContext)_localctx).op = match(T__23); + setState(2303); + expr(281); } break; - case 31: + case 7: { - _localctx = new JIS_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new IF_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1987); - if (!(precpred(_ctx, 313))) throw new FailedPredicateException(this, "precpred(_ctx, 313)"); - setState(1988); + setState(2304); + if (!(precpred(_ctx, 279))) throw new FailedPredicateException(this, "precpred(_ctx, 279)"); + setState(2305); + match(T__24); + setState(2306); + expr(0); + setState(2307); + match(T__25); + setState(2308); + expr(280); + } + break; + case 8: + { + _localctx = new ISNUMBER_funContext(new ExprContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(2310); + if (!(precpred(_ctx, 353))) throw new FailedPredicateException(this, "precpred(_ctx, 353)"); + setState(2311); match(T__0); - setState(1989); - match(JIS); - setState(1990); + setState(2312); + match(ISNUMBER); + setState(2313); match(T__1); - setState(1991); + setState(2314); match(T__2); } break; - case 32: + case 9: { - _localctx = new CHAR_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new ISTEXT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1992); - if (!(precpred(_ctx, 312))) throw new FailedPredicateException(this, "precpred(_ctx, 312)"); - setState(1993); + setState(2315); + if (!(precpred(_ctx, 352))) throw new FailedPredicateException(this, "precpred(_ctx, 352)"); + setState(2316); match(T__0); - setState(1994); - match(CHAR); - setState(1995); + setState(2317); + match(ISTEXT); + setState(2318); match(T__1); - setState(1996); + setState(2319); match(T__2); } break; - case 33: + case 10: { - _localctx = new CLEAN_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new ISNONTEXT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(1997); - if (!(precpred(_ctx, 311))) throw new FailedPredicateException(this, "precpred(_ctx, 311)"); - setState(1998); + setState(2320); + if (!(precpred(_ctx, 351))) throw new FailedPredicateException(this, "precpred(_ctx, 351)"); + setState(2321); match(T__0); - setState(1999); - match(CLEAN); - setState(2000); + setState(2322); + match(ISNONTEXT); + setState(2323); match(T__1); - setState(2001); + setState(2324); match(T__2); } break; - case 34: + case 11: { - _localctx = new CODE_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new ISLOGICAL_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2002); - if (!(precpred(_ctx, 310))) throw new FailedPredicateException(this, "precpred(_ctx, 310)"); - setState(2003); + setState(2325); + if (!(precpred(_ctx, 350))) throw new FailedPredicateException(this, "precpred(_ctx, 350)"); + setState(2326); match(T__0); - setState(2004); - match(CODE); - setState(2005); + setState(2327); + match(ISLOGICAL); + setState(2328); match(T__1); - setState(2006); + setState(2329); match(T__2); } break; - case 35: + case 12: { - _localctx = new CONCATENATE_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new ISERROR_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2007); - if (!(precpred(_ctx, 309))) throw new FailedPredicateException(this, "precpred(_ctx, 309)"); - setState(2008); + setState(2330); + if (!(precpred(_ctx, 349))) throw new FailedPredicateException(this, "precpred(_ctx, 349)"); + setState(2331); match(T__0); - setState(2009); - match(CONCATENATE); - setState(2010); + setState(2332); + match(ISERROR); + setState(2333); match(T__1); - setState(2019); + setState(2335); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125899906842623L) != 0)) { { - setState(2011); + setState(2334); expr(0); - setState(2016); - _errHandler.sync(this); - _la = _input.LA(1); - while (_la==T__3) { - { - { - setState(2012); - match(T__3); - setState(2013); - expr(0); - } - } - setState(2018); - _errHandler.sync(this); - _la = _input.LA(1); - } } } - setState(2021); - match(T__2); - } - break; - case 36: - { - _localctx = new EXACT_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2022); - if (!(precpred(_ctx, 308))) throw new FailedPredicateException(this, "precpred(_ctx, 308)"); - setState(2023); - match(T__0); - setState(2024); - match(EXACT); - setState(2025); - match(T__1); - setState(2026); - expr(0); - setState(2027); + setState(2337); match(T__2); } break; - case 37: + case 13: { - _localctx = new FIND_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new ISNULL_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2029); - if (!(precpred(_ctx, 307))) throw new FailedPredicateException(this, "precpred(_ctx, 307)"); - setState(2030); + setState(2338); + if (!(precpred(_ctx, 348))) throw new FailedPredicateException(this, "precpred(_ctx, 348)"); + setState(2339); match(T__0); - setState(2031); - match(FIND); - setState(2032); + setState(2340); + match(ISNULL); + setState(2341); match(T__1); - setState(2033); - expr(0); - setState(2036); + setState(2343); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__3) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125899906842623L) != 0)) { { - setState(2034); - match(T__3); - setState(2035); + setState(2342); expr(0); } } - setState(2038); + setState(2345); match(T__2); } break; - case 38: + case 14: { - _localctx = new LEFT_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new ISNULLORERROR_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2040); - if (!(precpred(_ctx, 306))) throw new FailedPredicateException(this, "precpred(_ctx, 306)"); - setState(2041); + setState(2346); + if (!(precpred(_ctx, 347))) throw new FailedPredicateException(this, "precpred(_ctx, 347)"); + setState(2347); match(T__0); - setState(2042); - match(LEFT); - setState(2043); + setState(2348); + match(ISNULLORERROR); + setState(2349); match(T__1); - setState(2045); + setState(2351); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125899906842623L) != 0)) { { - setState(2044); + setState(2350); expr(0); } } - setState(2047); - match(T__2); - } - break; - case 39: - { - _localctx = new LEN_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2048); - if (!(precpred(_ctx, 305))) throw new FailedPredicateException(this, "precpred(_ctx, 305)"); - setState(2049); - match(T__0); - setState(2050); - match(LEN); - setState(2051); - match(T__1); - setState(2052); + setState(2353); match(T__2); } break; - case 40: + case 15: { - _localctx = new LOWER_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new INT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2053); - if (!(precpred(_ctx, 304))) throw new FailedPredicateException(this, "precpred(_ctx, 304)"); - setState(2054); + setState(2354); + if (!(precpred(_ctx, 346))) throw new FailedPredicateException(this, "precpred(_ctx, 346)"); + setState(2355); match(T__0); - setState(2055); - match(LOWER); - setState(2056); + setState(2356); + match(INT); + setState(2357); match(T__1); - setState(2057); + setState(2358); match(T__2); } break; - case 41: + case 16: { - _localctx = new MID_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new EXACT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2058); - if (!(precpred(_ctx, 303))) throw new FailedPredicateException(this, "precpred(_ctx, 303)"); - setState(2059); + setState(2359); + if (!(precpred(_ctx, 345))) throw new FailedPredicateException(this, "precpred(_ctx, 345)"); + setState(2360); match(T__0); - setState(2060); - match(MID); - setState(2061); + setState(2361); + match(EXACT); + setState(2362); match(T__1); - setState(2062); - expr(0); - setState(2063); - match(T__3); - setState(2064); + setState(2363); expr(0); - setState(2065); - match(T__2); - } - break; - case 42: - { - _localctx = new PROPER_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2067); - if (!(precpred(_ctx, 302))) throw new FailedPredicateException(this, "precpred(_ctx, 302)"); - setState(2068); - match(T__0); - setState(2069); - match(PROPER); - setState(2070); - match(T__1); - setState(2071); + setState(2364); match(T__2); } break; - case 43: + case 17: { - _localctx = new REPLACE_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new LEFT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2072); - if (!(precpred(_ctx, 301))) throw new FailedPredicateException(this, "precpred(_ctx, 301)"); - setState(2073); + setState(2366); + if (!(precpred(_ctx, 344))) throw new FailedPredicateException(this, "precpred(_ctx, 344)"); + setState(2367); match(T__0); - setState(2074); - match(REPLACE); - setState(2075); + setState(2368); + match(LEFT); + setState(2369); match(T__1); - setState(2076); - expr(0); - setState(2077); - match(T__3); - setState(2078); - expr(0); - setState(2081); + setState(2371); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__3) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125899906842623L) != 0)) { { - setState(2079); - match(T__3); - setState(2080); + setState(2370); expr(0); } } - setState(2083); + setState(2373); match(T__2); } break; - case 44: + case 18: { - _localctx = new REPT_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new LEN_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2085); - if (!(precpred(_ctx, 300))) throw new FailedPredicateException(this, "precpred(_ctx, 300)"); - setState(2086); + setState(2374); + if (!(precpred(_ctx, 343))) throw new FailedPredicateException(this, "precpred(_ctx, 343)"); + setState(2375); match(T__0); - setState(2087); - match(REPT); - setState(2088); + setState(2376); + match(LEN); + setState(2377); match(T__1); - setState(2089); - expr(0); - setState(2090); + setState(2378); match(T__2); } break; - case 45: + case 19: { - _localctx = new RIGHT_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new LOWER_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2092); - if (!(precpred(_ctx, 299))) throw new FailedPredicateException(this, "precpred(_ctx, 299)"); - setState(2093); - match(T__0); - setState(2094); - match(RIGHT); - setState(2095); - match(T__1); - setState(2097); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(2096); - expr(0); - } - } - - setState(2099); + setState(2379); + if (!(precpred(_ctx, 342))) throw new FailedPredicateException(this, "precpred(_ctx, 342)"); + setState(2380); + match(T__0); + setState(2381); + match(LOWER); + setState(2382); + match(T__1); + setState(2383); match(T__2); } break; - case 46: + case 20: { - _localctx = new RMB_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new MID_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2100); - if (!(precpred(_ctx, 298))) throw new FailedPredicateException(this, "precpred(_ctx, 298)"); - setState(2101); + setState(2384); + if (!(precpred(_ctx, 341))) throw new FailedPredicateException(this, "precpred(_ctx, 341)"); + setState(2385); match(T__0); - setState(2102); - match(RMB); - setState(2103); + setState(2386); + match(MID); + setState(2387); match(T__1); - setState(2104); + setState(2388); + expr(0); + setState(2389); + match(T__3); + setState(2390); + expr(0); + setState(2391); match(T__2); } break; - case 47: + case 21: { - _localctx = new SEARCH_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new REPLACE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2105); - if (!(precpred(_ctx, 297))) throw new FailedPredicateException(this, "precpred(_ctx, 297)"); - setState(2106); + setState(2393); + if (!(precpred(_ctx, 340))) throw new FailedPredicateException(this, "precpred(_ctx, 340)"); + setState(2394); match(T__0); - setState(2107); - match(SEARCH); - setState(2108); + setState(2395); + match(REPLACE); + setState(2396); match(T__1); - setState(2109); + setState(2397); expr(0); - setState(2112); + setState(2398); + match(T__3); + setState(2399); + expr(0); + setState(2402); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2110); + setState(2400); match(T__3); - setState(2111); + setState(2401); expr(0); } } - setState(2114); + setState(2404); match(T__2); } break; - case 48: + case 22: { - _localctx = new SUBSTITUTE_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new RIGHT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2116); - if (!(precpred(_ctx, 296))) throw new FailedPredicateException(this, "precpred(_ctx, 296)"); - setState(2117); + setState(2406); + if (!(precpred(_ctx, 339))) throw new FailedPredicateException(this, "precpred(_ctx, 339)"); + setState(2407); match(T__0); - setState(2118); - match(SUBSTITUTE); - setState(2119); + setState(2408); + match(RIGHT); + setState(2409); match(T__1); - setState(2120); - expr(0); - setState(2121); - match(T__3); - setState(2122); - expr(0); - setState(2125); + setState(2411); _errHandler.sync(this); _la = _input.LA(1); - if (_la==T__3) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125899906842623L) != 0)) { { - setState(2123); - match(T__3); - setState(2124); + setState(2410); expr(0); } } - setState(2127); + setState(2413); match(T__2); } break; - case 49: + case 23: + { + _localctx = new RMB_funContext(new ExprContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(2414); + if (!(precpred(_ctx, 338))) throw new FailedPredicateException(this, "precpred(_ctx, 338)"); + setState(2415); + match(T__0); + setState(2416); + match(RMB); + setState(2417); + match(T__1); + setState(2418); + match(T__2); + } + break; + case 24: { _localctx = new T_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2129); - if (!(precpred(_ctx, 295))) throw new FailedPredicateException(this, "precpred(_ctx, 295)"); - setState(2130); + setState(2419); + if (!(precpred(_ctx, 337))) throw new FailedPredicateException(this, "precpred(_ctx, 337)"); + setState(2420); match(T__0); - setState(2131); + setState(2421); match(T); - setState(2132); + setState(2422); match(T__1); - setState(2133); + setState(2423); match(T__2); } break; - case 50: + case 25: { _localctx = new TEXT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2134); - if (!(precpred(_ctx, 294))) throw new FailedPredicateException(this, "precpred(_ctx, 294)"); - setState(2135); + setState(2424); + if (!(precpred(_ctx, 336))) throw new FailedPredicateException(this, "precpred(_ctx, 336)"); + setState(2425); match(T__0); - setState(2136); + setState(2426); match(TEXT); - setState(2137); + setState(2427); match(T__1); - setState(2138); + setState(2428); expr(0); - setState(2139); + setState(2429); match(T__2); } break; - case 51: + case 26: { _localctx = new TRIM_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2141); - if (!(precpred(_ctx, 293))) throw new FailedPredicateException(this, "precpred(_ctx, 293)"); - setState(2142); + setState(2431); + if (!(precpred(_ctx, 335))) throw new FailedPredicateException(this, "precpred(_ctx, 335)"); + setState(2432); match(T__0); - setState(2143); + setState(2433); match(TRIM); - setState(2144); + setState(2434); match(T__1); - setState(2145); + setState(2435); match(T__2); } break; - case 52: + case 27: { _localctx = new UPPER_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2146); - if (!(precpred(_ctx, 292))) throw new FailedPredicateException(this, "precpred(_ctx, 292)"); - setState(2147); + setState(2436); + if (!(precpred(_ctx, 334))) throw new FailedPredicateException(this, "precpred(_ctx, 334)"); + setState(2437); match(T__0); - setState(2148); + setState(2438); match(UPPER); - setState(2149); + setState(2439); match(T__1); - setState(2150); + setState(2440); match(T__2); } break; - case 53: + case 28: { _localctx = new VALUE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2151); - if (!(precpred(_ctx, 291))) throw new FailedPredicateException(this, "precpred(_ctx, 291)"); - setState(2152); + setState(2441); + if (!(precpred(_ctx, 333))) throw new FailedPredicateException(this, "precpred(_ctx, 333)"); + setState(2442); match(T__0); - setState(2153); + setState(2443); match(VALUE); - setState(2154); + setState(2444); match(T__1); - setState(2155); + setState(2445); match(T__2); } break; - case 54: + case 29: { _localctx = new DATEVALUE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2156); - if (!(precpred(_ctx, 290))) throw new FailedPredicateException(this, "precpred(_ctx, 290)"); - setState(2157); + setState(2446); + if (!(precpred(_ctx, 332))) throw new FailedPredicateException(this, "precpred(_ctx, 332)"); + setState(2447); match(T__0); - setState(2158); + setState(2448); match(DATEVALUE); - setState(2159); + setState(2449); match(T__1); - setState(2161); + setState(2451); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125899906842623L) != 0)) { { - setState(2160); + setState(2450); expr(0); } } - setState(2163); + setState(2453); match(T__2); } break; - case 55: + case 30: { _localctx = new TIMEVALUE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2164); - if (!(precpred(_ctx, 289))) throw new FailedPredicateException(this, "precpred(_ctx, 289)"); - setState(2165); + setState(2454); + if (!(precpred(_ctx, 331))) throw new FailedPredicateException(this, "precpred(_ctx, 331)"); + setState(2455); match(T__0); - setState(2166); + setState(2456); match(TIMEVALUE); - setState(2167); + setState(2457); match(T__1); - setState(2168); + setState(2458); match(T__2); } break; - case 56: + case 31: { _localctx = new YEAR_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2169); - if (!(precpred(_ctx, 288))) throw new FailedPredicateException(this, "precpred(_ctx, 288)"); - setState(2170); - match(T__0); - setState(2171); - match(YEAR); - setState(2174); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,125,_ctx) ) { - case 1: - { - setState(2172); - match(T__1); - setState(2173); - match(T__2); - } - break; - } - } - break; - case 57: - { - _localctx = new MONTH_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2176); - if (!(precpred(_ctx, 287))) throw new FailedPredicateException(this, "precpred(_ctx, 287)"); - setState(2177); - match(T__0); - setState(2178); - match(MONTH); - setState(2181); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,126,_ctx) ) { - case 1: - { - setState(2179); - match(T__1); - setState(2180); - match(T__2); - } - break; - } - } - break; - case 58: - { - _localctx = new DAY_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2183); - if (!(precpred(_ctx, 286))) throw new FailedPredicateException(this, "precpred(_ctx, 286)"); - setState(2184); - match(T__0); - setState(2185); - match(DAY); - setState(2188); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,127,_ctx) ) { - case 1: - { - setState(2186); - match(T__1); - setState(2187); - match(T__2); - } - break; - } - } - break; - case 59: - { - _localctx = new HOUR_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2190); - if (!(precpred(_ctx, 285))) throw new FailedPredicateException(this, "precpred(_ctx, 285)"); - setState(2191); - match(T__0); - setState(2192); - match(HOUR); - setState(2195); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,128,_ctx) ) { - case 1: - { - setState(2193); - match(T__1); - setState(2194); - match(T__2); - } - break; - } - } - break; - case 60: - { - _localctx = new MINUTE_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2197); - if (!(precpred(_ctx, 284))) throw new FailedPredicateException(this, "precpred(_ctx, 284)"); - setState(2198); - match(T__0); - setState(2199); - match(MINUTE); - setState(2202); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,129,_ctx) ) { - case 1: - { - setState(2200); - match(T__1); - setState(2201); - match(T__2); - } - break; - } - } - break; - case 61: - { - _localctx = new SECOND_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2204); - if (!(precpred(_ctx, 283))) throw new FailedPredicateException(this, "precpred(_ctx, 283)"); - setState(2205); - match(T__0); - setState(2206); - match(SECOND); - setState(2209); - _errHandler.sync(this); - switch ( getInterpreter().adaptivePredict(_input,130,_ctx) ) { - case 1: - { - setState(2207); - match(T__1); - setState(2208); - match(T__2); - } - break; - } - } - break; - case 62: - { - _localctx = new URLENCODE_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2211); - if (!(precpred(_ctx, 282))) throw new FailedPredicateException(this, "precpred(_ctx, 282)"); - setState(2212); - match(T__0); - setState(2213); - match(URLENCODE); - setState(2214); - match(T__1); - setState(2215); - match(T__2); - } - break; - case 63: - { - _localctx = new URLDECODE_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2216); - if (!(precpred(_ctx, 281))) throw new FailedPredicateException(this, "precpred(_ctx, 281)"); - setState(2217); - match(T__0); - setState(2218); - match(URLDECODE); - setState(2219); - match(T__1); - setState(2220); - match(T__2); - } - break; - case 64: - { - _localctx = new HTMLENCODE_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2221); - if (!(precpred(_ctx, 280))) throw new FailedPredicateException(this, "precpred(_ctx, 280)"); - setState(2222); - match(T__0); - setState(2223); - match(HTMLENCODE); - setState(2224); - match(T__1); - setState(2225); - match(T__2); - } - break; - case 65: - { - _localctx = new HTMLDECODE_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2226); - if (!(precpred(_ctx, 279))) throw new FailedPredicateException(this, "precpred(_ctx, 279)"); - setState(2227); - match(T__0); - setState(2228); - match(HTMLDECODE); - setState(2229); - match(T__1); - setState(2230); - match(T__2); - } - break; - case 66: - { - _localctx = new BASE64TOTEXT_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2231); - if (!(precpred(_ctx, 278))) throw new FailedPredicateException(this, "precpred(_ctx, 278)"); - setState(2232); + setState(2459); + if (!(precpred(_ctx, 330))) throw new FailedPredicateException(this, "precpred(_ctx, 330)"); + setState(2460); match(T__0); - setState(2233); - match(BASE64TOTEXT); - setState(2234); - match(T__1); - setState(2236); + setState(2461); + match(YEAR); + setState(2464); _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { + switch ( getInterpreter().adaptivePredict(_input,131,_ctx) ) { + case 1: { - setState(2235); - expr(0); + setState(2462); + match(T__1); + setState(2463); + match(T__2); } + break; } - - setState(2238); - match(T__2); } break; - case 67: + case 32: { - _localctx = new BASE64URLTOTEXT_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new MONTH_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2239); - if (!(precpred(_ctx, 277))) throw new FailedPredicateException(this, "precpred(_ctx, 277)"); - setState(2240); + setState(2466); + if (!(precpred(_ctx, 329))) throw new FailedPredicateException(this, "precpred(_ctx, 329)"); + setState(2467); match(T__0); - setState(2241); - match(BASE64URLTOTEXT); - setState(2242); - match(T__1); - setState(2244); + setState(2468); + match(MONTH); + setState(2471); _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { + switch ( getInterpreter().adaptivePredict(_input,132,_ctx) ) { + case 1: { - setState(2243); - expr(0); + setState(2469); + match(T__1); + setState(2470); + match(T__2); } + break; } - - setState(2246); - match(T__2); } break; - case 68: + case 33: { - _localctx = new TEXTTOBASE64_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new DAY_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2247); - if (!(precpred(_ctx, 276))) throw new FailedPredicateException(this, "precpred(_ctx, 276)"); - setState(2248); + setState(2473); + if (!(precpred(_ctx, 328))) throw new FailedPredicateException(this, "precpred(_ctx, 328)"); + setState(2474); match(T__0); - setState(2249); - match(TEXTTOBASE64); - setState(2250); - match(T__1); - setState(2252); + setState(2475); + match(DAY); + setState(2478); _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { + switch ( getInterpreter().adaptivePredict(_input,133,_ctx) ) { + case 1: { - setState(2251); - expr(0); + setState(2476); + match(T__1); + setState(2477); + match(T__2); } + break; } - - setState(2254); - match(T__2); } break; - case 69: + case 34: { - _localctx = new TEXTTOBASE64URL_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new HOUR_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2255); - if (!(precpred(_ctx, 275))) throw new FailedPredicateException(this, "precpred(_ctx, 275)"); - setState(2256); + setState(2480); + if (!(precpred(_ctx, 327))) throw new FailedPredicateException(this, "precpred(_ctx, 327)"); + setState(2481); match(T__0); - setState(2257); - match(TEXTTOBASE64URL); - setState(2258); - match(T__1); - setState(2260); + setState(2482); + match(HOUR); + setState(2485); _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { + switch ( getInterpreter().adaptivePredict(_input,134,_ctx) ) { + case 1: { - setState(2259); - expr(0); + setState(2483); + match(T__1); + setState(2484); + match(T__2); } + break; } - - setState(2262); - match(T__2); } break; - case 70: + case 35: { - _localctx = new REGEX_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new MINUTE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2263); - if (!(precpred(_ctx, 274))) throw new FailedPredicateException(this, "precpred(_ctx, 274)"); - setState(2264); + setState(2487); + if (!(precpred(_ctx, 326))) throw new FailedPredicateException(this, "precpred(_ctx, 326)"); + setState(2488); match(T__0); - setState(2265); - match(REGEX); - setState(2266); - match(T__1); - setState(2267); - expr(0); - setState(2268); - match(T__2); + setState(2489); + match(MINUTE); + setState(2492); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,135,_ctx) ) { + case 1: + { + setState(2490); + match(T__1); + setState(2491); + match(T__2); + } + break; } - break; - case 71: - { - _localctx = new REGEXREPALCE_funContext(new ExprContext(_parentctx, _parentState)); - pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2270); - if (!(precpred(_ctx, 273))) throw new FailedPredicateException(this, "precpred(_ctx, 273)"); - setState(2271); - match(T__0); - setState(2272); - match(REGEXREPALCE); - setState(2273); - match(T__1); - setState(2274); - expr(0); - setState(2275); - match(T__3); - setState(2276); - expr(0); - setState(2277); - match(T__2); } break; - case 72: + case 36: { - _localctx = new ISREGEX_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new SECOND_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2279); - if (!(precpred(_ctx, 272))) throw new FailedPredicateException(this, "precpred(_ctx, 272)"); - setState(2280); + setState(2494); + if (!(precpred(_ctx, 325))) throw new FailedPredicateException(this, "precpred(_ctx, 325)"); + setState(2495); match(T__0); - setState(2281); - match(ISREGEX); - setState(2282); - match(T__1); - setState(2283); - expr(0); - setState(2284); - match(T__2); + setState(2496); + match(SECOND); + setState(2499); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,136,_ctx) ) { + case 1: + { + setState(2497); + match(T__1); + setState(2498); + match(T__2); + } + break; + } } break; - case 73: + case 37: { - _localctx = new MD5_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new URLENCODE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2286); - if (!(precpred(_ctx, 271))) throw new FailedPredicateException(this, "precpred(_ctx, 271)"); - setState(2287); + setState(2501); + if (!(precpred(_ctx, 324))) throw new FailedPredicateException(this, "precpred(_ctx, 324)"); + setState(2502); match(T__0); - setState(2288); - match(MD5); - setState(2289); + setState(2503); + match(URLENCODE); + setState(2504); match(T__1); - setState(2291); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(2290); - expr(0); - } - } - - setState(2293); + setState(2505); match(T__2); } break; - case 74: + case 38: { - _localctx = new SHA1_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new URLDECODE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2294); - if (!(precpred(_ctx, 270))) throw new FailedPredicateException(this, "precpred(_ctx, 270)"); - setState(2295); + setState(2506); + if (!(precpred(_ctx, 323))) throw new FailedPredicateException(this, "precpred(_ctx, 323)"); + setState(2507); match(T__0); - setState(2296); - match(SHA1); - setState(2297); + setState(2508); + match(URLDECODE); + setState(2509); match(T__1); - setState(2299); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(2298); - expr(0); - } - } - - setState(2301); + setState(2510); match(T__2); } break; - case 75: + case 39: { - _localctx = new SHA256_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new REGEX_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2302); - if (!(precpred(_ctx, 269))) throw new FailedPredicateException(this, "precpred(_ctx, 269)"); - setState(2303); + setState(2511); + if (!(precpred(_ctx, 322))) throw new FailedPredicateException(this, "precpred(_ctx, 322)"); + setState(2512); match(T__0); - setState(2304); - match(SHA256); - setState(2305); + setState(2513); + match(REGEX); + setState(2514); match(T__1); - setState(2307); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(2306); - expr(0); - } - } - - setState(2309); + setState(2515); + expr(0); + setState(2516); match(T__2); } break; - case 76: + case 40: { - _localctx = new SHA512_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new REGEXREPLACE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2310); - if (!(precpred(_ctx, 268))) throw new FailedPredicateException(this, "precpred(_ctx, 268)"); - setState(2311); + setState(2518); + if (!(precpred(_ctx, 321))) throw new FailedPredicateException(this, "precpred(_ctx, 321)"); + setState(2519); match(T__0); - setState(2312); - match(SHA512); - setState(2313); + setState(2520); + match(REGEXREPLACE); + setState(2521); match(T__1); - setState(2315); - _errHandler.sync(this); - _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { - { - setState(2314); - expr(0); - } - } - - setState(2317); + setState(2522); + expr(0); + setState(2523); + match(T__3); + setState(2524); + expr(0); + setState(2525); match(T__2); } break; - case 77: + case 41: { - _localctx = new HMACMD5_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new ISREGEX_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2318); - if (!(precpred(_ctx, 267))) throw new FailedPredicateException(this, "precpred(_ctx, 267)"); - setState(2319); + setState(2527); + if (!(precpred(_ctx, 320))) throw new FailedPredicateException(this, "precpred(_ctx, 320)"); + setState(2528); match(T__0); - setState(2320); - match(HMACMD5); - setState(2321); + setState(2529); + match(ISREGEX); + setState(2530); match(T__1); - setState(2322); + setState(2531); expr(0); - setState(2325); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(2323); - match(T__3); - setState(2324); - expr(0); - } - } - - setState(2327); + setState(2532); match(T__2); } break; - case 78: + case 42: { - _localctx = new HMACSHA1_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new MD5_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2329); - if (!(precpred(_ctx, 266))) throw new FailedPredicateException(this, "precpred(_ctx, 266)"); - setState(2330); + setState(2534); + if (!(precpred(_ctx, 319))) throw new FailedPredicateException(this, "precpred(_ctx, 319)"); + setState(2535); match(T__0); - setState(2331); - match(HMACSHA1); - setState(2332); + setState(2536); + match(MD5); + setState(2537); match(T__1); - setState(2333); - expr(0); - setState(2336); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(2334); - match(T__3); - setState(2335); - expr(0); - } - } - - setState(2338); + setState(2538); match(T__2); } break; - case 79: + case 43: { - _localctx = new HMACSHA256_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new SHA1_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2340); - if (!(precpred(_ctx, 265))) throw new FailedPredicateException(this, "precpred(_ctx, 265)"); - setState(2341); + setState(2539); + if (!(precpred(_ctx, 318))) throw new FailedPredicateException(this, "precpred(_ctx, 318)"); + setState(2540); match(T__0); - setState(2342); - match(HMACSHA256); - setState(2343); + setState(2541); + match(SHA1); + setState(2542); match(T__1); - setState(2344); - expr(0); - setState(2347); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(2345); - match(T__3); - setState(2346); - expr(0); - } - } - - setState(2349); + setState(2543); match(T__2); } break; - case 80: + case 44: { - _localctx = new HMACSHA512_funContext(new ExprContext(_parentctx, _parentState)); + _localctx = new SHA256_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2351); - if (!(precpred(_ctx, 264))) throw new FailedPredicateException(this, "precpred(_ctx, 264)"); - setState(2352); + setState(2544); + if (!(precpred(_ctx, 317))) throw new FailedPredicateException(this, "precpred(_ctx, 317)"); + setState(2545); match(T__0); - setState(2353); - match(HMACSHA512); - setState(2354); + setState(2546); + match(SHA256); + setState(2547); match(T__1); - setState(2355); - expr(0); - setState(2358); - _errHandler.sync(this); - _la = _input.LA(1); - if (_la==T__3) { - { - setState(2356); - match(T__3); - setState(2357); - expr(0); - } + setState(2548); + match(T__2); } - - setState(2360); + break; + case 45: + { + _localctx = new SHA512_funContext(new ExprContext(_parentctx, _parentState)); + pushNewRecursionContext(_localctx, _startState, RULE_expr); + setState(2549); + if (!(precpred(_ctx, 316))) throw new FailedPredicateException(this, "precpred(_ctx, 316)"); + setState(2550); + match(T__0); + setState(2551); + match(SHA512); + setState(2552); + match(T__1); + setState(2553); match(T__2); } break; - case 81: + case 46: { _localctx = new TRIMSTART_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2362); - if (!(precpred(_ctx, 263))) throw new FailedPredicateException(this, "precpred(_ctx, 263)"); - setState(2363); + setState(2554); + if (!(precpred(_ctx, 315))) throw new FailedPredicateException(this, "precpred(_ctx, 315)"); + setState(2555); match(T__0); - setState(2364); + setState(2556); match(TRIMSTART); - setState(2365); + setState(2557); match(T__1); - setState(2367); + setState(2559); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125899906842623L) != 0)) { { - setState(2366); + setState(2558); expr(0); } } - setState(2369); + setState(2561); match(T__2); } break; - case 82: + case 47: { _localctx = new TRIMEND_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2370); - if (!(precpred(_ctx, 262))) throw new FailedPredicateException(this, "precpred(_ctx, 262)"); - setState(2371); + setState(2562); + if (!(precpred(_ctx, 314))) throw new FailedPredicateException(this, "precpred(_ctx, 314)"); + setState(2563); match(T__0); - setState(2372); + setState(2564); match(TRIMEND); - setState(2373); + setState(2565); match(T__1); - setState(2375); + setState(2567); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125899906842623L) != 0)) { { - setState(2374); + setState(2566); expr(0); } } - setState(2377); + setState(2569); match(T__2); } break; - case 83: + case 48: { _localctx = new INDEXOF_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2378); - if (!(precpred(_ctx, 261))) throw new FailedPredicateException(this, "precpred(_ctx, 261)"); - setState(2379); + setState(2570); + if (!(precpred(_ctx, 313))) throw new FailedPredicateException(this, "precpred(_ctx, 313)"); + setState(2571); match(T__0); - setState(2380); + setState(2572); match(INDEXOF); - setState(2381); + setState(2573); match(T__1); - setState(2382); + setState(2574); expr(0); - setState(2389); + setState(2581); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2383); + setState(2575); match(T__3); - setState(2384); + setState(2576); expr(0); - setState(2387); + setState(2579); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2385); + setState(2577); match(T__3); - setState(2386); + setState(2578); expr(0); } } @@ -10730,41 +11901,41 @@ private ExprContext expr(int _p) throws RecognitionException { } } - setState(2391); + setState(2583); match(T__2); } break; - case 84: + case 49: { _localctx = new LASTINDEXOF_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2393); - if (!(precpred(_ctx, 260))) throw new FailedPredicateException(this, "precpred(_ctx, 260)"); - setState(2394); + setState(2585); + if (!(precpred(_ctx, 312))) throw new FailedPredicateException(this, "precpred(_ctx, 312)"); + setState(2586); match(T__0); - setState(2395); + setState(2587); match(LASTINDEXOF); - setState(2396); + setState(2588); match(T__1); - setState(2397); + setState(2589); expr(0); - setState(2404); + setState(2596); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2398); + setState(2590); match(T__3); - setState(2399); + setState(2591); expr(0); - setState(2402); + setState(2594); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2400); + setState(2592); match(T__3); - setState(2401); + setState(2593); expr(0); } } @@ -10772,528 +11943,528 @@ private ExprContext expr(int _p) throws RecognitionException { } } - setState(2406); + setState(2598); match(T__2); } break; - case 85: + case 50: { _localctx = new SPLIT_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2408); - if (!(precpred(_ctx, 259))) throw new FailedPredicateException(this, "precpred(_ctx, 259)"); - setState(2409); + setState(2600); + if (!(precpred(_ctx, 311))) throw new FailedPredicateException(this, "precpred(_ctx, 311)"); + setState(2601); match(T__0); - setState(2410); + setState(2602); match(SPLIT); - setState(2411); + setState(2603); match(T__1); - setState(2412); + setState(2604); expr(0); - setState(2413); + setState(2605); match(T__2); } break; - case 86: + case 51: { _localctx = new JOIN_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2415); - if (!(precpred(_ctx, 258))) throw new FailedPredicateException(this, "precpred(_ctx, 258)"); - setState(2416); + setState(2607); + if (!(precpred(_ctx, 310))) throw new FailedPredicateException(this, "precpred(_ctx, 310)"); + setState(2608); match(T__0); - setState(2417); + setState(2609); match(JOIN); - setState(2418); + setState(2610); match(T__1); - setState(2419); + setState(2611); expr(0); - setState(2424); + setState(2616); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(2420); + setState(2612); match(T__3); - setState(2421); + setState(2613); expr(0); } } - setState(2426); + setState(2618); _errHandler.sync(this); _la = _input.LA(1); } - setState(2427); + setState(2619); match(T__2); } break; - case 87: + case 52: { _localctx = new SUBSTRING_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2429); - if (!(precpred(_ctx, 257))) throw new FailedPredicateException(this, "precpred(_ctx, 257)"); - setState(2430); + setState(2621); + if (!(precpred(_ctx, 309))) throw new FailedPredicateException(this, "precpred(_ctx, 309)"); + setState(2622); match(T__0); - setState(2431); + setState(2623); match(SUBSTRING); - setState(2432); + setState(2624); match(T__1); - setState(2433); + setState(2625); expr(0); - setState(2436); + setState(2628); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2434); + setState(2626); match(T__3); - setState(2435); + setState(2627); expr(0); } } - setState(2438); + setState(2630); match(T__2); } break; - case 88: + case 53: { _localctx = new STARTSWITH_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2440); - if (!(precpred(_ctx, 256))) throw new FailedPredicateException(this, "precpred(_ctx, 256)"); - setState(2441); + setState(2632); + if (!(precpred(_ctx, 308))) throw new FailedPredicateException(this, "precpred(_ctx, 308)"); + setState(2633); match(T__0); - setState(2442); + setState(2634); match(STARTSWITH); - setState(2443); + setState(2635); match(T__1); - setState(2444); + setState(2636); expr(0); - setState(2447); + setState(2639); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2445); + setState(2637); match(T__3); - setState(2446); + setState(2638); expr(0); } } - setState(2449); + setState(2641); match(T__2); } break; - case 89: + case 54: { _localctx = new ENDSWITH_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2451); - if (!(precpred(_ctx, 255))) throw new FailedPredicateException(this, "precpred(_ctx, 255)"); - setState(2452); + setState(2643); + if (!(precpred(_ctx, 307))) throw new FailedPredicateException(this, "precpred(_ctx, 307)"); + setState(2644); match(T__0); - setState(2453); + setState(2645); match(ENDSWITH); - setState(2454); + setState(2646); match(T__1); - setState(2455); + setState(2647); expr(0); - setState(2458); + setState(2650); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2456); + setState(2648); match(T__3); - setState(2457); + setState(2649); expr(0); } } - setState(2460); + setState(2652); match(T__2); } break; - case 90: + case 55: { _localctx = new ISNULLOREMPTY_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2462); - if (!(precpred(_ctx, 254))) throw new FailedPredicateException(this, "precpred(_ctx, 254)"); - setState(2463); + setState(2654); + if (!(precpred(_ctx, 306))) throw new FailedPredicateException(this, "precpred(_ctx, 306)"); + setState(2655); match(T__0); - setState(2464); + setState(2656); match(ISNULLOREMPTY); - setState(2465); + setState(2657); match(T__1); - setState(2466); + setState(2658); match(T__2); } break; - case 91: + case 56: { _localctx = new ISNULLORWHITESPACE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2467); - if (!(precpred(_ctx, 253))) throw new FailedPredicateException(this, "precpred(_ctx, 253)"); - setState(2468); + setState(2659); + if (!(precpred(_ctx, 305))) throw new FailedPredicateException(this, "precpred(_ctx, 305)"); + setState(2660); match(T__0); - setState(2469); + setState(2661); match(ISNULLORWHITESPACE); - setState(2470); + setState(2662); match(T__1); - setState(2471); + setState(2663); match(T__2); } break; - case 92: + case 57: { _localctx = new REMOVESTART_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2472); - if (!(precpred(_ctx, 252))) throw new FailedPredicateException(this, "precpred(_ctx, 252)"); - setState(2473); + setState(2664); + if (!(precpred(_ctx, 304))) throw new FailedPredicateException(this, "precpred(_ctx, 304)"); + setState(2665); match(T__0); - setState(2474); + setState(2666); match(REMOVESTART); - setState(2475); + setState(2667); match(T__1); - setState(2476); + setState(2668); expr(0); - setState(2479); + setState(2671); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2477); + setState(2669); match(T__3); - setState(2478); + setState(2670); expr(0); } } - setState(2481); + setState(2673); match(T__2); } break; - case 93: + case 58: { _localctx = new REMOVEEND_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2483); - if (!(precpred(_ctx, 251))) throw new FailedPredicateException(this, "precpred(_ctx, 251)"); - setState(2484); + setState(2675); + if (!(precpred(_ctx, 303))) throw new FailedPredicateException(this, "precpred(_ctx, 303)"); + setState(2676); match(T__0); - setState(2485); + setState(2677); match(REMOVEEND); - setState(2486); + setState(2678); match(T__1); - setState(2487); + setState(2679); expr(0); - setState(2490); + setState(2682); _errHandler.sync(this); _la = _input.LA(1); if (_la==T__3) { { - setState(2488); + setState(2680); match(T__3); - setState(2489); + setState(2681); expr(0); } } - setState(2492); + setState(2684); match(T__2); } break; - case 94: + case 59: { _localctx = new JSON_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2494); - if (!(precpred(_ctx, 250))) throw new FailedPredicateException(this, "precpred(_ctx, 250)"); - setState(2495); + setState(2686); + if (!(precpred(_ctx, 302))) throw new FailedPredicateException(this, "precpred(_ctx, 302)"); + setState(2687); match(T__0); - setState(2496); + setState(2688); match(JSON); - setState(2497); + setState(2689); match(T__1); - setState(2498); + setState(2690); match(T__2); } break; - case 95: + case 60: { _localctx = new DiyFunction_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2499); - if (!(precpred(_ctx, 249))) throw new FailedPredicateException(this, "precpred(_ctx, 249)"); - setState(2500); + setState(2691); + if (!(precpred(_ctx, 301))) throw new FailedPredicateException(this, "precpred(_ctx, 301)"); + setState(2692); match(T__0); - setState(2501); + setState(2693); match(PARAMETER); - setState(2502); + setState(2694); match(T__1); - setState(2511); + setState(2703); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125899906842623L) != 0)) { { - setState(2503); + setState(2695); expr(0); - setState(2508); + setState(2700); _errHandler.sync(this); _la = _input.LA(1); while (_la==T__3) { { { - setState(2504); + setState(2696); match(T__3); - setState(2505); + setState(2697); expr(0); } } - setState(2510); + setState(2702); _errHandler.sync(this); _la = _input.LA(1); } } } - setState(2513); + setState(2705); match(T__2); } break; - case 96: + case 61: { _localctx = new ADDYEARS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2514); - if (!(precpred(_ctx, 248))) throw new FailedPredicateException(this, "precpred(_ctx, 248)"); - setState(2515); + setState(2706); + if (!(precpred(_ctx, 300))) throw new FailedPredicateException(this, "precpred(_ctx, 300)"); + setState(2707); match(T__0); - setState(2516); + setState(2708); match(ADDYEARS); - setState(2517); + setState(2709); match(T__1); - setState(2518); + setState(2710); expr(0); - setState(2519); + setState(2711); match(T__2); } break; - case 97: + case 62: { _localctx = new ADDMONTHS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2521); - if (!(precpred(_ctx, 247))) throw new FailedPredicateException(this, "precpred(_ctx, 247)"); - setState(2522); + setState(2713); + if (!(precpred(_ctx, 299))) throw new FailedPredicateException(this, "precpred(_ctx, 299)"); + setState(2714); match(T__0); - setState(2523); + setState(2715); match(ADDMONTHS); - setState(2524); + setState(2716); match(T__1); - setState(2525); + setState(2717); expr(0); - setState(2526); + setState(2718); match(T__2); } break; - case 98: + case 63: { _localctx = new ADDDAYS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2528); - if (!(precpred(_ctx, 246))) throw new FailedPredicateException(this, "precpred(_ctx, 246)"); - setState(2529); + setState(2720); + if (!(precpred(_ctx, 298))) throw new FailedPredicateException(this, "precpred(_ctx, 298)"); + setState(2721); match(T__0); - setState(2530); + setState(2722); match(ADDDAYS); - setState(2531); + setState(2723); match(T__1); - setState(2532); + setState(2724); expr(0); - setState(2533); + setState(2725); match(T__2); } break; - case 99: + case 64: { _localctx = new ADDHOURS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2535); - if (!(precpred(_ctx, 245))) throw new FailedPredicateException(this, "precpred(_ctx, 245)"); - setState(2536); + setState(2727); + if (!(precpred(_ctx, 297))) throw new FailedPredicateException(this, "precpred(_ctx, 297)"); + setState(2728); match(T__0); - setState(2537); + setState(2729); match(ADDHOURS); - setState(2538); + setState(2730); match(T__1); - setState(2539); + setState(2731); expr(0); - setState(2540); + setState(2732); match(T__2); } break; - case 100: + case 65: { _localctx = new ADDMINUTES_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2542); - if (!(precpred(_ctx, 244))) throw new FailedPredicateException(this, "precpred(_ctx, 244)"); - setState(2543); + setState(2734); + if (!(precpred(_ctx, 296))) throw new FailedPredicateException(this, "precpred(_ctx, 296)"); + setState(2735); match(T__0); - setState(2544); + setState(2736); match(ADDMINUTES); - setState(2545); + setState(2737); match(T__1); - setState(2546); + setState(2738); expr(0); - setState(2547); + setState(2739); match(T__2); } break; - case 101: + case 66: { _localctx = new ADDSECONDS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2549); - if (!(precpred(_ctx, 243))) throw new FailedPredicateException(this, "precpred(_ctx, 243)"); - setState(2550); + setState(2741); + if (!(precpred(_ctx, 295))) throw new FailedPredicateException(this, "precpred(_ctx, 295)"); + setState(2742); match(T__0); - setState(2551); + setState(2743); match(ADDSECONDS); - setState(2552); + setState(2744); match(T__1); - setState(2553); + setState(2745); expr(0); - setState(2554); + setState(2746); match(T__2); } break; - case 102: + case 67: { _localctx = new TIMESTAMP_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2556); - if (!(precpred(_ctx, 242))) throw new FailedPredicateException(this, "precpred(_ctx, 242)"); - setState(2557); + setState(2748); + if (!(precpred(_ctx, 294))) throw new FailedPredicateException(this, "precpred(_ctx, 294)"); + setState(2749); match(T__0); - setState(2558); + setState(2750); match(TIMESTAMP); - setState(2559); + setState(2751); match(T__1); - setState(2561); + setState(2753); _errHandler.sync(this); _la = _input.LA(1); - if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611686018427387903L) != 0)) { + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & -17582522204L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125899906842623L) != 0)) { { - setState(2560); + setState(2752); expr(0); } } - setState(2563); + setState(2755); match(T__2); } break; - case 103: + case 68: { _localctx = new HAS_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2564); - if (!(precpred(_ctx, 241))) throw new FailedPredicateException(this, "precpred(_ctx, 241)"); - setState(2565); + setState(2756); + if (!(precpred(_ctx, 293))) throw new FailedPredicateException(this, "precpred(_ctx, 293)"); + setState(2757); match(T__0); - setState(2566); + setState(2758); match(HAS); - setState(2567); + setState(2759); match(T__1); - setState(2568); + setState(2760); expr(0); - setState(2569); + setState(2761); match(T__2); } break; - case 104: + case 69: { _localctx = new HASVALUE_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2571); - if (!(precpred(_ctx, 240))) throw new FailedPredicateException(this, "precpred(_ctx, 240)"); - setState(2572); + setState(2763); + if (!(precpred(_ctx, 292))) throw new FailedPredicateException(this, "precpred(_ctx, 292)"); + setState(2764); match(T__0); - setState(2573); + setState(2765); match(HASVALUE); - setState(2574); + setState(2766); match(T__1); - setState(2575); + setState(2767); expr(0); - setState(2576); + setState(2768); match(T__2); } break; - case 105: + case 70: { _localctx = new GetJsonValue_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2578); - if (!(precpred(_ctx, 239))) throw new FailedPredicateException(this, "precpred(_ctx, 239)"); - setState(2579); + setState(2770); + if (!(precpred(_ctx, 291))) throw new FailedPredicateException(this, "precpred(_ctx, 291)"); + setState(2771); match(T__4); - setState(2580); + setState(2772); match(PARAMETER); - setState(2581); + setState(2773); match(T__5); } break; - case 106: + case 71: { _localctx = new GetJsonValue_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2582); - if (!(precpred(_ctx, 238))) throw new FailedPredicateException(this, "precpred(_ctx, 238)"); - setState(2583); + setState(2774); + if (!(precpred(_ctx, 290))) throw new FailedPredicateException(this, "precpred(_ctx, 290)"); + setState(2775); match(T__4); - setState(2584); + setState(2776); expr(0); - setState(2585); + setState(2777); match(T__5); } break; - case 107: + case 72: { _localctx = new GetJsonValue_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2587); - if (!(precpred(_ctx, 237))) throw new FailedPredicateException(this, "precpred(_ctx, 237)"); - setState(2588); + setState(2779); + if (!(precpred(_ctx, 289))) throw new FailedPredicateException(this, "precpred(_ctx, 289)"); + setState(2780); match(T__0); - setState(2589); + setState(2781); parameter2(); } break; - case 108: + case 73: { _localctx = new Percentage_funContext(new ExprContext(_parentctx, _parentState)); pushNewRecursionContext(_localctx, _startState, RULE_expr); - setState(2590); - if (!(precpred(_ctx, 234))) throw new FailedPredicateException(this, "precpred(_ctx, 234)"); - setState(2591); + setState(2782); + if (!(precpred(_ctx, 286))) throw new FailedPredicateException(this, "precpred(_ctx, 286)"); + setState(2783); match(T__7); } break; } } } - setState(2596); + setState(2788); _errHandler.sync(this); - _alt = getInterpreter().adaptivePredict(_input,159,_ctx); + _alt = getInterpreter().adaptivePredict(_input,153,_ctx); } } } @@ -11330,17 +12501,17 @@ public final NumContext num() throws RecognitionException { try { enterOuterAlt(_localctx, 1); { - setState(2598); + setState(2790); _errHandler.sync(this); _la = _input.LA(1); if (_la==SUB) { { - setState(2597); + setState(2789); match(SUB); } } - setState(2600); + setState(2792); match(NUM); } } @@ -11355,53 +12526,9 @@ public final NumContext num() throws RecognitionException { return _localctx; } - @SuppressWarnings("CheckReturnValue") - public static class UnitContext extends ParserRuleContext { - public TerminalNode UNIT() { return getToken(mathParser.UNIT, 0); } - public TerminalNode T() { return getToken(mathParser.T, 0); } - public UnitContext(ParserRuleContext parent, int invokingState) { - super(parent, invokingState); - } - @Override public int getRuleIndex() { return RULE_unit; } - @Override - public T accept(ParseTreeVisitor visitor) { - if ( visitor instanceof mathVisitor ) return ((mathVisitor)visitor).visitUnit(this); - else return visitor.visitChildren(this); - } - } - - public final UnitContext unit() throws RecognitionException { - UnitContext _localctx = new UnitContext(_ctx, getState()); - enterRule(_localctx, 6, RULE_unit); - int _la; - try { - enterOuterAlt(_localctx, 1); - { - setState(2602); - _la = _input.LA(1); - if ( !(_la==UNIT || _la==T) ) { - _errHandler.recoverInline(this); - } - else { - if ( _input.LA(1)==Token.EOF ) matchedEOF = true; - _errHandler.reportMatch(this); - consume(); - } - } - } - catch (RecognitionException re) { - _localctx.exception = re; - _errHandler.reportError(this, re); - _errHandler.recover(this, re); - } - finally { - exitRule(); - } - return _localctx; - } - @SuppressWarnings("CheckReturnValue") public static class ArrayJsonContext extends ParserRuleContext { + public Token key; public ExprContext expr() { return getRuleContext(ExprContext.class,0); } @@ -11423,29 +12550,39 @@ public T accept(ParseTreeVisitor visitor) { public final ArrayJsonContext arrayJson() throws RecognitionException { ArrayJsonContext _localctx = new ArrayJsonContext(_ctx, getState()); - enterRule(_localctx, 8, RULE_arrayJson); + enterRule(_localctx, 6, RULE_arrayJson); + int _la; try { - enterOuterAlt(_localctx, 1); - { - setState(2607); + setState(2801); _errHandler.sync(this); switch (_input.LA(1)) { case NUM: - { - setState(2604); - match(NUM); - } - break; case STRING: + enterOuterAlt(_localctx, 1); { - setState(2605); - match(STRING); + setState(2794); + ((ArrayJsonContext)_localctx).key = _input.LT(1); + _la = _input.LA(1); + if ( !(_la==NUM || _la==STRING) ) { + ((ArrayJsonContext)_localctx).key = (Token)_errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2795); + match(T__25); + setState(2796); + expr(0); } break; case NULL: case ERROR: case UNIT: case IF: + case IFS: + case SWITCH: case IFERROR: case ISNUMBER: case ISTEXT: @@ -11454,10 +12591,11 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case ISLOGICAL: case ISEVEN: case ISODD: - case IsNull: + case ISNULL: case ISNULLORERROR: case AND: case OR: + case XOR: case NOT: case TRUE: case FALSE: @@ -11494,12 +12632,20 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case SINH: case TAN: case TANH: + case COT: + case COTH: + case CSC: + case CSCH: + case SEC: + case SECH: case ACOS: case ACOSH: case ASIN: case ASINH: case ATAN: case ATANH: + case ACOT: + case ACOTH: case ATAN2: case ROUND: case ROUNDDOWN: @@ -11521,12 +12667,36 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case MULTINOMIAL: case PRODUCT: case SQRTPI: + case ERF: + case ERFC: + case BESSELI: + case BESSELJ: + case BESSELK: + case BESSELY: + case DELTA: + case GESTEP: case SUMSQ: + case SUMPRODUCT: + case SUMX2MY2: + case SUMX2PY2: + case SUMXMY2: + case ARABIC: + case ROMAN: + case SERIESSUM: + case RANK: + case FORECAST: + case INTERCEPT: + case SLOPE: + case CORREL: + case PEARSON: + case YEARFRAC: case ASC: case JIS: case CHAR: case CLEAN: case CODE: + case UNICHAR: + case UNICODE: case CONCATENATE: case EXACT: case FIND: @@ -11561,6 +12731,7 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case SECOND: case WEEKDAY: case DATEDIF: + case DAYS: case DAYS360: case EDATE: case EOMONTH: @@ -11615,6 +12786,22 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case TDIST: case TINV: case WEIBULL: + case PMT: + case PPMT: + case IPMT: + case PV: + case FV: + case NPER: + case RATE: + case NPV: + case XNPV: + case IRR: + case MIRR: + case XIRR: + case SLN: + case DB: + case DDB: + case SYD: case URLENCODE: case URLDECODE: case HTMLENCODE: @@ -11624,7 +12811,7 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case TEXTTOBASE64: case TEXTTOBASE64URL: case REGEX: - case REGEXREPALCE: + case REGEXREPLACE: case ISREGEX: case GUID: case MD5: @@ -11663,19 +12850,19 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { case HASVALUE: case PARAM: case PARAMETER: + enterOuterAlt(_localctx, 2); { - setState(2606); + setState(2797); parameter2(); + setState(2798); + match(T__25); + setState(2799); + expr(0); } break; default: throw new NoViableAltException(this); } - setState(2609); - match(T__25); - setState(2610); - expr(0); - } } catch (RecognitionException re) { _localctx.exception = re; @@ -11692,6 +12879,8 @@ public final ArrayJsonContext arrayJson() throws RecognitionException { public static class Parameter2Context extends ParserRuleContext { public TerminalNode E() { return getToken(mathParser.E, 0); } public TerminalNode IF() { return getToken(mathParser.IF, 0); } + public TerminalNode IFS() { return getToken(mathParser.IFS, 0); } + public TerminalNode SWITCH() { return getToken(mathParser.SWITCH, 0); } public TerminalNode IFERROR() { return getToken(mathParser.IFERROR, 0); } public TerminalNode ISNUMBER() { return getToken(mathParser.ISNUMBER, 0); } public TerminalNode ISTEXT() { return getToken(mathParser.ISTEXT, 0); } @@ -11700,10 +12889,11 @@ public static class Parameter2Context extends ParserRuleContext { public TerminalNode ISLOGICAL() { return getToken(mathParser.ISLOGICAL, 0); } public TerminalNode ISEVEN() { return getToken(mathParser.ISEVEN, 0); } public TerminalNode ISODD() { return getToken(mathParser.ISODD, 0); } - public TerminalNode IsNull() { return getToken(mathParser.IsNull, 0); } + public TerminalNode ISNULL() { return getToken(mathParser.ISNULL, 0); } public TerminalNode ISNULLORERROR() { return getToken(mathParser.ISNULLORERROR, 0); } public TerminalNode AND() { return getToken(mathParser.AND, 0); } public TerminalNode OR() { return getToken(mathParser.OR, 0); } + public TerminalNode XOR() { return getToken(mathParser.XOR, 0); } public TerminalNode NOT() { return getToken(mathParser.NOT, 0); } public TerminalNode TRUE() { return getToken(mathParser.TRUE, 0); } public TerminalNode FALSE() { return getToken(mathParser.FALSE, 0); } @@ -11739,12 +12929,20 @@ public static class Parameter2Context extends ParserRuleContext { public TerminalNode SINH() { return getToken(mathParser.SINH, 0); } public TerminalNode TAN() { return getToken(mathParser.TAN, 0); } public TerminalNode TANH() { return getToken(mathParser.TANH, 0); } + public TerminalNode COT() { return getToken(mathParser.COT, 0); } + public TerminalNode COTH() { return getToken(mathParser.COTH, 0); } + public TerminalNode CSC() { return getToken(mathParser.CSC, 0); } + public TerminalNode CSCH() { return getToken(mathParser.CSCH, 0); } + public TerminalNode SEC() { return getToken(mathParser.SEC, 0); } + public TerminalNode SECH() { return getToken(mathParser.SECH, 0); } public TerminalNode ACOS() { return getToken(mathParser.ACOS, 0); } public TerminalNode ACOSH() { return getToken(mathParser.ACOSH, 0); } public TerminalNode ASIN() { return getToken(mathParser.ASIN, 0); } public TerminalNode ASINH() { return getToken(mathParser.ASINH, 0); } public TerminalNode ATAN() { return getToken(mathParser.ATAN, 0); } public TerminalNode ATANH() { return getToken(mathParser.ATANH, 0); } + public TerminalNode ACOT() { return getToken(mathParser.ACOT, 0); } + public TerminalNode ACOTH() { return getToken(mathParser.ACOTH, 0); } public TerminalNode ATAN2() { return getToken(mathParser.ATAN2, 0); } public TerminalNode ROUND() { return getToken(mathParser.ROUND, 0); } public TerminalNode ROUNDDOWN() { return getToken(mathParser.ROUNDDOWN, 0); } @@ -11766,12 +12964,36 @@ public static class Parameter2Context extends ParserRuleContext { public TerminalNode MULTINOMIAL() { return getToken(mathParser.MULTINOMIAL, 0); } public TerminalNode PRODUCT() { return getToken(mathParser.PRODUCT, 0); } public TerminalNode SQRTPI() { return getToken(mathParser.SQRTPI, 0); } + public TerminalNode ERF() { return getToken(mathParser.ERF, 0); } + public TerminalNode ERFC() { return getToken(mathParser.ERFC, 0); } + public TerminalNode BESSELI() { return getToken(mathParser.BESSELI, 0); } + public TerminalNode BESSELJ() { return getToken(mathParser.BESSELJ, 0); } + public TerminalNode BESSELK() { return getToken(mathParser.BESSELK, 0); } + public TerminalNode BESSELY() { return getToken(mathParser.BESSELY, 0); } + public TerminalNode DELTA() { return getToken(mathParser.DELTA, 0); } + public TerminalNode GESTEP() { return getToken(mathParser.GESTEP, 0); } public TerminalNode SUMSQ() { return getToken(mathParser.SUMSQ, 0); } + public TerminalNode SUMPRODUCT() { return getToken(mathParser.SUMPRODUCT, 0); } + public TerminalNode SUMX2MY2() { return getToken(mathParser.SUMX2MY2, 0); } + public TerminalNode SUMX2PY2() { return getToken(mathParser.SUMX2PY2, 0); } + public TerminalNode SUMXMY2() { return getToken(mathParser.SUMXMY2, 0); } + public TerminalNode ARABIC() { return getToken(mathParser.ARABIC, 0); } + public TerminalNode ROMAN() { return getToken(mathParser.ROMAN, 0); } + public TerminalNode SERIESSUM() { return getToken(mathParser.SERIESSUM, 0); } + public TerminalNode RANK() { return getToken(mathParser.RANK, 0); } + public TerminalNode FORECAST() { return getToken(mathParser.FORECAST, 0); } + public TerminalNode INTERCEPT() { return getToken(mathParser.INTERCEPT, 0); } + public TerminalNode SLOPE() { return getToken(mathParser.SLOPE, 0); } + public TerminalNode CORREL() { return getToken(mathParser.CORREL, 0); } + public TerminalNode PEARSON() { return getToken(mathParser.PEARSON, 0); } + public TerminalNode YEARFRAC() { return getToken(mathParser.YEARFRAC, 0); } public TerminalNode ASC() { return getToken(mathParser.ASC, 0); } public TerminalNode JIS() { return getToken(mathParser.JIS, 0); } public TerminalNode CHAR() { return getToken(mathParser.CHAR, 0); } public TerminalNode CLEAN() { return getToken(mathParser.CLEAN, 0); } public TerminalNode CODE() { return getToken(mathParser.CODE, 0); } + public TerminalNode UNICHAR() { return getToken(mathParser.UNICHAR, 0); } + public TerminalNode UNICODE() { return getToken(mathParser.UNICODE, 0); } public TerminalNode CONCATENATE() { return getToken(mathParser.CONCATENATE, 0); } public TerminalNode EXACT() { return getToken(mathParser.EXACT, 0); } public TerminalNode FIND() { return getToken(mathParser.FIND, 0); } @@ -11806,6 +13028,7 @@ public static class Parameter2Context extends ParserRuleContext { public TerminalNode SECOND() { return getToken(mathParser.SECOND, 0); } public TerminalNode WEEKDAY() { return getToken(mathParser.WEEKDAY, 0); } public TerminalNode DATEDIF() { return getToken(mathParser.DATEDIF, 0); } + public TerminalNode DAYS() { return getToken(mathParser.DAYS, 0); } public TerminalNode DAYS360() { return getToken(mathParser.DAYS360, 0); } public TerminalNode EDATE() { return getToken(mathParser.EDATE, 0); } public TerminalNode EOMONTH() { return getToken(mathParser.EOMONTH, 0); } @@ -11869,7 +13092,7 @@ public static class Parameter2Context extends ParserRuleContext { public TerminalNode TEXTTOBASE64() { return getToken(mathParser.TEXTTOBASE64, 0); } public TerminalNode TEXTTOBASE64URL() { return getToken(mathParser.TEXTTOBASE64URL, 0); } public TerminalNode REGEX() { return getToken(mathParser.REGEX, 0); } - public TerminalNode REGEXREPALCE() { return getToken(mathParser.REGEXREPALCE, 0); } + public TerminalNode REGEXREPLACE() { return getToken(mathParser.REGEXREPLACE, 0); } public TerminalNode ISREGEX() { return getToken(mathParser.ISREGEX, 0); } public TerminalNode GUID() { return getToken(mathParser.GUID, 0); } public TerminalNode MD5() { return getToken(mathParser.MD5, 0); } @@ -11903,6 +13126,22 @@ public static class Parameter2Context extends ParserRuleContext { public TerminalNode ADDMINUTES() { return getToken(mathParser.ADDMINUTES, 0); } public TerminalNode ADDSECONDS() { return getToken(mathParser.ADDSECONDS, 0); } public TerminalNode TIMESTAMP() { return getToken(mathParser.TIMESTAMP, 0); } + public TerminalNode PMT() { return getToken(mathParser.PMT, 0); } + public TerminalNode PPMT() { return getToken(mathParser.PPMT, 0); } + public TerminalNode IPMT() { return getToken(mathParser.IPMT, 0); } + public TerminalNode PV() { return getToken(mathParser.PV, 0); } + public TerminalNode FV() { return getToken(mathParser.FV, 0); } + public TerminalNode NPER() { return getToken(mathParser.NPER, 0); } + public TerminalNode RATE() { return getToken(mathParser.RATE, 0); } + public TerminalNode NPV() { return getToken(mathParser.NPV, 0); } + public TerminalNode XNPV() { return getToken(mathParser.XNPV, 0); } + public TerminalNode IRR() { return getToken(mathParser.IRR, 0); } + public TerminalNode MIRR() { return getToken(mathParser.MIRR, 0); } + public TerminalNode XIRR() { return getToken(mathParser.XIRR, 0); } + public TerminalNode SLN() { return getToken(mathParser.SLN, 0); } + public TerminalNode DB() { return getToken(mathParser.DB, 0); } + public TerminalNode DDB() { return getToken(mathParser.DDB, 0); } + public TerminalNode SYD() { return getToken(mathParser.SYD, 0); } public TerminalNode NULL() { return getToken(mathParser.NULL, 0); } public TerminalNode ERROR() { return getToken(mathParser.ERROR, 0); } public TerminalNode UNIT() { return getToken(mathParser.UNIT, 0); } @@ -11924,14 +13163,14 @@ public T accept(ParseTreeVisitor visitor) { public final Parameter2Context parameter2() throws RecognitionException { Parameter2Context _localctx = new Parameter2Context(_ctx, getState()); - enterRule(_localctx, 10, RULE_parameter2); + enterRule(_localctx, 8, RULE_parameter2); int _la; try { enterOuterAlt(_localctx, 1); { - setState(2612); + setState(2803); _la = _input.LA(1); - if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & -4294967296L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & 4611123068473966591L) != 0)) ) { + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & -4294967296L) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & -1L) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & -1L) != 0) || ((((_la - 192)) & ~0x3f) == 0 && ((1L << (_la - 192)) & -1L) != 0) || ((((_la - 256)) & ~0x3f) == 0 && ((1L << (_la - 256)) & 1125762467889151L) != 0)) ) { _errHandler.recoverInline(this); } else { @@ -11962,280 +13201,221 @@ public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { private boolean expr_sempred(ExprContext _localctx, int predIndex) { switch (predIndex) { case 0: - return precpred(_ctx, 233); + return precpred(_ctx, 285); case 1: - return precpred(_ctx, 232); + return precpred(_ctx, 284); case 2: - return precpred(_ctx, 231); + return precpred(_ctx, 283); case 3: - return precpred(_ctx, 230); + return precpred(_ctx, 282); case 4: - return precpred(_ctx, 229); + return precpred(_ctx, 281); case 5: - return precpred(_ctx, 228); + return precpred(_ctx, 280); case 6: - return precpred(_ctx, 227); + return precpred(_ctx, 279); case 7: - return precpred(_ctx, 336); + return precpred(_ctx, 353); case 8: - return precpred(_ctx, 335); + return precpred(_ctx, 352); case 9: - return precpred(_ctx, 334); + return precpred(_ctx, 351); case 10: - return precpred(_ctx, 333); + return precpred(_ctx, 350); case 11: - return precpred(_ctx, 332); + return precpred(_ctx, 349); case 12: - return precpred(_ctx, 331); + return precpred(_ctx, 348); case 13: - return precpred(_ctx, 330); + return precpred(_ctx, 347); case 14: - return precpred(_ctx, 329); + return precpred(_ctx, 346); case 15: - return precpred(_ctx, 328); + return precpred(_ctx, 345); case 16: - return precpred(_ctx, 327); + return precpred(_ctx, 344); case 17: - return precpred(_ctx, 326); + return precpred(_ctx, 343); case 18: - return precpred(_ctx, 325); + return precpred(_ctx, 342); case 19: - return precpred(_ctx, 324); + return precpred(_ctx, 341); case 20: - return precpred(_ctx, 323); + return precpred(_ctx, 340); case 21: - return precpred(_ctx, 322); + return precpred(_ctx, 339); case 22: - return precpred(_ctx, 321); + return precpred(_ctx, 338); case 23: - return precpred(_ctx, 320); + return precpred(_ctx, 337); case 24: - return precpred(_ctx, 319); + return precpred(_ctx, 336); case 25: - return precpred(_ctx, 318); + return precpred(_ctx, 335); case 26: - return precpred(_ctx, 317); + return precpred(_ctx, 334); case 27: - return precpred(_ctx, 316); + return precpred(_ctx, 333); case 28: - return precpred(_ctx, 315); + return precpred(_ctx, 332); case 29: - return precpred(_ctx, 314); + return precpred(_ctx, 331); case 30: - return precpred(_ctx, 313); + return precpred(_ctx, 330); case 31: - return precpred(_ctx, 312); + return precpred(_ctx, 329); case 32: - return precpred(_ctx, 311); + return precpred(_ctx, 328); case 33: - return precpred(_ctx, 310); + return precpred(_ctx, 327); case 34: - return precpred(_ctx, 309); + return precpred(_ctx, 326); case 35: - return precpred(_ctx, 308); + return precpred(_ctx, 325); case 36: - return precpred(_ctx, 307); + return precpred(_ctx, 324); case 37: - return precpred(_ctx, 306); + return precpred(_ctx, 323); case 38: - return precpred(_ctx, 305); + return precpred(_ctx, 322); case 39: - return precpred(_ctx, 304); + return precpred(_ctx, 321); case 40: - return precpred(_ctx, 303); + return precpred(_ctx, 320); case 41: - return precpred(_ctx, 302); + return precpred(_ctx, 319); case 42: - return precpred(_ctx, 301); + return precpred(_ctx, 318); case 43: - return precpred(_ctx, 300); + return precpred(_ctx, 317); case 44: - return precpred(_ctx, 299); + return precpred(_ctx, 316); case 45: - return precpred(_ctx, 298); + return precpred(_ctx, 315); case 46: - return precpred(_ctx, 297); + return precpred(_ctx, 314); case 47: - return precpred(_ctx, 296); + return precpred(_ctx, 313); case 48: - return precpred(_ctx, 295); + return precpred(_ctx, 312); case 49: - return precpred(_ctx, 294); + return precpred(_ctx, 311); case 50: - return precpred(_ctx, 293); + return precpred(_ctx, 310); case 51: - return precpred(_ctx, 292); + return precpred(_ctx, 309); case 52: - return precpred(_ctx, 291); + return precpred(_ctx, 308); case 53: - return precpred(_ctx, 290); + return precpred(_ctx, 307); case 54: - return precpred(_ctx, 289); + return precpred(_ctx, 306); case 55: - return precpred(_ctx, 288); + return precpred(_ctx, 305); case 56: - return precpred(_ctx, 287); + return precpred(_ctx, 304); case 57: - return precpred(_ctx, 286); + return precpred(_ctx, 303); case 58: - return precpred(_ctx, 285); + return precpred(_ctx, 302); case 59: - return precpred(_ctx, 284); + return precpred(_ctx, 301); case 60: - return precpred(_ctx, 283); + return precpred(_ctx, 300); case 61: - return precpred(_ctx, 282); + return precpred(_ctx, 299); case 62: - return precpred(_ctx, 281); + return precpred(_ctx, 298); case 63: - return precpred(_ctx, 280); + return precpred(_ctx, 297); case 64: - return precpred(_ctx, 279); + return precpred(_ctx, 296); case 65: - return precpred(_ctx, 278); + return precpred(_ctx, 295); case 66: - return precpred(_ctx, 277); + return precpred(_ctx, 294); case 67: - return precpred(_ctx, 276); + return precpred(_ctx, 293); case 68: - return precpred(_ctx, 275); + return precpred(_ctx, 292); case 69: - return precpred(_ctx, 274); + return precpred(_ctx, 291); case 70: - return precpred(_ctx, 273); + return precpred(_ctx, 290); case 71: - return precpred(_ctx, 272); + return precpred(_ctx, 289); case 72: - return precpred(_ctx, 271); - case 73: - return precpred(_ctx, 270); - case 74: - return precpred(_ctx, 269); - case 75: - return precpred(_ctx, 268); - case 76: - return precpred(_ctx, 267); - case 77: - return precpred(_ctx, 266); - case 78: - return precpred(_ctx, 265); - case 79: - return precpred(_ctx, 264); - case 80: - return precpred(_ctx, 263); - case 81: - return precpred(_ctx, 262); - case 82: - return precpred(_ctx, 261); - case 83: - return precpred(_ctx, 260); - case 84: - return precpred(_ctx, 259); - case 85: - return precpred(_ctx, 258); - case 86: - return precpred(_ctx, 257); - case 87: - return precpred(_ctx, 256); - case 88: - return precpred(_ctx, 255); - case 89: - return precpred(_ctx, 254); - case 90: - return precpred(_ctx, 253); - case 91: - return precpred(_ctx, 252); - case 92: - return precpred(_ctx, 251); - case 93: - return precpred(_ctx, 250); - case 94: - return precpred(_ctx, 249); - case 95: - return precpred(_ctx, 248); - case 96: - return precpred(_ctx, 247); - case 97: - return precpred(_ctx, 246); - case 98: - return precpred(_ctx, 245); - case 99: - return precpred(_ctx, 244); - case 100: - return precpred(_ctx, 243); - case 101: - return precpred(_ctx, 242); - case 102: - return precpred(_ctx, 241); - case 103: - return precpred(_ctx, 240); - case 104: - return precpred(_ctx, 239); - case 105: - return precpred(_ctx, 238); - case 106: - return precpred(_ctx, 237); - case 107: - return precpred(_ctx, 234); + return precpred(_ctx, 286); } return true; } private static final String _serializedATNSegment0 = - "\u0004\u0001\u0100\u0a37\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+ + "\u0004\u0001\u0134\u0af6\u0002\u0000\u0007\u0000\u0002\u0001\u0007\u0001"+ "\u0002\u0002\u0007\u0002\u0002\u0003\u0007\u0003\u0002\u0004\u0007\u0004"+ - "\u0002\u0005\u0007\u0005\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001"+ + "\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001"+ - "\u001c\b\u0001\n\u0001\f\u0001\u001f\t\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u001a\b\u0001\n\u0001"+ + "\f\u0001\u001d\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ + "(\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001*\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0005\u00016\b\u0001\n\u0001\f\u00019\t\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001=\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0005\u0001I\b\u0001\n\u0001\f\u0001L\t\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001_\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\\\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001e\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001n\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005"+ - "\u0001w\b\u0001\n\u0001\f\u0001z\t\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0083"+ - "\b\u0001\n\u0001\f\u0001\u0086\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0003\u0001\u0092\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0003\u0001\u0097\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "\u009c\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u00a1\b"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u00a8\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u00b1\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u00ba\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u00c3\b\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u00d1"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ + "~\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u0087\b\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ + "\u0090\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0005\u0001\u0099\b\u0001\n\u0001\f\u0001\u009c"+ + "\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0005\u0001\u00a5\b\u0001\n\u0001\f\u0001\u00a8\t\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0005\u0001\u00b1\b\u0001\n\u0001\f\u0001\u00b4\t\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u00c0\b\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u00c5\b\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u00ca\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0003\u0001\u00cf\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u00d6\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u00df"+ + "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u00e8\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u00f1"+ + "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u00fa\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0103"+ + "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u010c\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0115"+ + "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u011e\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0127"+ + "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u0130\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0139"+ "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u00da\b\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u00e8\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u00f1\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u00ff\b\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0005\u0001\u016b\b\u0001\n\u0001\f\u0001\u016e\t\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0005\u0001\u0177\b\u0001\n\u0001\f\u0001\u017a\t\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004\u0001\u0131"+ - "\b\u0001\u000b\u0001\f\u0001\u0132\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004\u0001\u013c\b\u0001"+ - "\u000b\u0001\f\u0001\u013d\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ @@ -12251,69 +13431,64 @@ private boolean expr_sempred(ExprContext _localctx, int predIndex) { "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u01a2\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u01b9\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0003\u0001\u01c2\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0206"+ + "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u021d\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0003\u0001\u0226\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0201\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001"+ - "\u020f\b\u0001\n\u0001\f\u0001\u0212\t\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u021b"+ - "\b\u0001\n\u0001\f\u0001\u021e\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u022c\b\u0001\n\u0001"+ - "\f\u0001\u022f\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0265\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005"+ + "\u0001\u0273\b\u0001\n\u0001\f\u0001\u0276\t\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001"+ + "\u027f\b\u0001\n\u0001\f\u0001\u0282\t\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0251\b\u0001"+ - "\n\u0001\f\u0001\u0254\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u0266\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u0271\b\u0001\u0003\u0001\u0273\b\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "\u027c\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ + "\u0001\u02b6\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u02bf\b\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005"+ + "\u0001\u02c8\b\u0001\n\u0001\f\u0001\u02cb\t\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001"+ + "\u02d4\b\u0001\n\u0001\f\u0001\u02d7\t\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0003\u0001\u02a1\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u02b1\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u02c1\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u02ce\b\u0001\u0001\u0001"+ + "\u0001\u0003\u0001\u02fa\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0310"+ + "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u02f2\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0003\u0001\u0308\b\u0001\u0003\u0001\u030a\b\u0001\u0003"+ - "\u0001\u030c\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0317"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0340"+ "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ @@ -12321,90 +13496,102 @@ private boolean expr_sempred(ExprContext _localctx, int predIndex) { "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u0344\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0005\u0001\u036c\b\u0001\n\u0001\f\u0001\u036f\t\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0358\b\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0381\b\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u038c\b\u0001\u0003\u0001\u038e\b"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u0397\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0371"+ - "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u037c\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u0385\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004\u0001\u038e\b\u0001\u000b"+ - "\u0001\f\u0001\u038f\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0004\u0001\u0399\b\u0001\u000b\u0001\f"+ - "\u0001\u039a\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0004\u0001\u03a4\b\u0001\u000b\u0001\f\u0001"+ - "\u03a5\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u03bc\b\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u03b6\b\u0001\n\u0001\f\u0001"+ - "\u03b9\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0003\u0001\u03cc\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u03dc"+ + "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ + "\u0001\u03e9\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0005\u0001\u03de\b\u0001\n\u0001\f\u0001\u03e1\t\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u03ec\b\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u03f5"+ - "\b\u0001\n\u0001\f\u0001\u03f8\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0401\b\u0001"+ - "\n\u0001\f\u0001\u0404\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u040d\b\u0001\n"+ - "\u0001\f\u0001\u0410\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0419\b\u0001\n"+ - "\u0001\f\u0001\u041c\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0425\b\u0001\n"+ - "\u0001\f\u0001\u0428\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u0433\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u043c\b\u0001\n\u0001\f\u0001"+ - "\u043f\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0005\u0001\u0448\b\u0001\n\u0001\f\u0001\u044b"+ - "\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0005\u0001\u0454\b\u0001\n\u0001\f\u0001\u0457\t\u0001"+ + "\u0001\u040d\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0423\b\u0001\u0003"+ + "\u0001\u0425\b\u0001\u0003\u0001\u0427\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u046e\b\u0001\n\u0001"+ - "\f\u0001\u0471\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u047a\b\u0001\n\u0001"+ - "\f\u0001\u047d\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0486\b\u0001\n\u0001"+ - "\f\u0001\u0489\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u0432\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u045f\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u047a\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u0493\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u049e\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u04a7\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0005\u0001\u04b0\b\u0001\n\u0001\f\u0001\u04b3\t\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0005\u0001\u04bc\b\u0001\n\u0001\f\u0001\u04bf\t\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0005\u0001\u04c8\b\u0001\n\u0001\f\u0001\u04cb\t\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0005\u0001\u04db\b\u0001\n\u0001\f\u0001\u04de\t\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0503\b\u0001"+ + "\n\u0001\f\u0001\u0506\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ + "\u0001\u0511\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u051a\b\u0001\n\u0001\f\u0001"+ + "\u051d\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0005\u0001\u0526\b\u0001\n\u0001\f\u0001\u0529"+ + "\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0005\u0001\u0532\b\u0001\n\u0001\f\u0001\u0535\t\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0005\u0001\u053e\b\u0001\n\u0001\f\u0001\u0541\t\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0005\u0001\u054a\b\u0001\n\u0001\f\u0001\u054d\t\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u0558\b\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001"+ + "\u0561\b\u0001\n\u0001\f\u0001\u0564\t\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u056d"+ + "\b\u0001\n\u0001\f\u0001\u0570\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0579\b\u0001"+ + "\n\u0001\f\u0001\u057c\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005"+ + "\u0001\u0593\b\u0001\n\u0001\f\u0001\u0596\t\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001"+ + "\u059f\b\u0001\n\u0001\f\u0001\u05a2\t\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u05ab"+ + "\b\u0001\n\u0001\f\u0001\u05ae\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ @@ -12412,1747 +13599,1866 @@ private boolean expr_sempred(ExprContext _localctx, int predIndex) { "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u0569\b\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "\u0572\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u057b\b\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "\u0584\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u05a7\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0003\u0001\u05b0\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u05b9\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0003\u0001\u05c2\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0003\u0001\u05cd\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "\u05d8\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u05e3\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u05ee\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0003\u0001\u05f7\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0600\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u060d\b\u0001"+ - "\u0003\u0001\u060f\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0003\u0001\u061c\b\u0001\u0003\u0001\u061e\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0004\u0001\u062e\b\u0001\u000b\u0001\f\u0001\u062f"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u063b\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u0646\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0003\u0001\u0651\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0666\b\u0001"+ - "\u0003\u0001\u0668\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "\u0673\b\u0001\u0003\u0001\u0675\b\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005"+ - "\u0001\u0691\b\u0001\n\u0001\f\u0001\u0694\t\u0001\u0003\u0001\u0696\b"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u0680\b\u0001\u0003\u0001\u0682\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u06c8\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u06d1\b\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u06d8"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0693\b\u0001\u0003\u0001\u0695"+ "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u06a6\b\u0001\u0003"+ + "\u0001\u06a8\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0005\u0001\u06ed\b\u0001\n\u0001\f\u0001\u06f0\t\u0001"+ - "\u0001\u0001\u0005\u0001\u06f3\b\u0001\n\u0001\f\u0001\u06f6\t\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005"+ - "\u0001\u06fe\b\u0001\n\u0001\f\u0001\u0701\t\u0001\u0001\u0001\u0005\u0001"+ - "\u0704\b\u0001\n\u0001\f\u0001\u0707\t\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u070f\b\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u0713\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u06b7\b\u0001\u0003\u0001\u06b9"+ + "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u06c8\b\u0001\u0003\u0001\u06ca\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u06d9\b\u0001\u0003\u0001\u06db\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u06ec\b\u0001\u0003\u0001\u06ee"+ + "\b\u0001\u0003\u0001\u06f0\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0005\u0001\u06fb\b\u0001\n\u0001\f\u0001\u06fe\t\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0710\b\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0750\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0758"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0724"+ "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u0760\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0768\b\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0770"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u073c"+ "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u0778\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0780\b\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u078d\b\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u0795\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u074b\b\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0003\u0001\u07a2\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u07aa\b\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u07b7\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0005\u0001\u07df\b\u0001\n\u0001\f\u0001\u07e2\t\u0001"+ - "\u0003\u0001\u07e4\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "\u07f5\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u07fe\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u0822\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0003\u0001\u0832\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0841\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u084e\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u07d1\b\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0003\u0001\u07da\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0872\b\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u07e7\b\u0001\u0003\u0001\u07e9\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "\u087f\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0003\u0001\u0886\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0003\u0001\u088d\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u0894\b\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u089b\b\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u08a2\b\u0001"+ + "\u07f6\b\u0001\u0003\u0001\u07f8\b\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0004"+ + "\u0001\u0808\b\u0001\u000b\u0001\f\u0001\u0809\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u0815\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0003\u0001\u08bd\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u08c5\b\u0001\u0001\u0001"+ + "\u0003\u0001\u0820\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "\u08cd\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0003\u0001\u08d5\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u082b\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u0840\b\u0001\u0003\u0001\u0842\b"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u084d\b\u0001\u0003"+ + "\u0001\u084f\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u086b\b\u0001\n"+ + "\u0001\f\u0001\u086e\t\u0001\u0003\u0001\u0870\b\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u08f4\b\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u08fc\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0003\u0001\u0904\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u090c\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0003\u0001\u0916\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u08a2"+ + "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u08ab\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u08b2\b\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005"+ + "\u0001\u08c7\b\u0001\n\u0001\f\u0001\u08ca\t\u0001\u0001\u0001\u0005\u0001"+ + "\u08cd\b\u0001\n\u0001\f\u0001\u08d0\t\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u08d8\b\u0001\n"+ + "\u0001\f\u0001\u08db\t\u0001\u0001\u0001\u0005\u0001\u08de\b\u0001\n\u0001"+ + "\f\u0001\u08e1\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u08e9\b\u0001\u0001\u0001\u0001\u0001"+ + "\u0003\u0001\u08ed\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0920\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ - "\u0921\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u092c\b\u0001"+ + "\u0928\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u0930\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0937\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0003\u0001\u0940\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u0948\b\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0944\b\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u0954\b\u0001\u0003\u0001\u0956\b"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003"+ - "\u0001\u0963\b\u0001\u0003\u0001\u0965\b\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0005\u0001\u0977\b\u0001\n\u0001\f\u0001\u097a"+ - "\t\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0985\b\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0963\b\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0990\b\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u096c\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0003\u0001\u099b\b\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u09b0"+ - "\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u09bb\b\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0005\u0001\u09cb\b\u0001\n\u0001\f\u0001\u09ce\t\u0001"+ - "\u0003\u0001\u09d0\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0003\u0001\u0a02\b\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ - "\u0001\u0001\u0001\u0001\u0001\u0001\u0005\u0001\u0a21\b\u0001\n\u0001"+ - "\f\u0001\u0a24\t\u0001\u0001\u0002\u0003\u0002\u0a27\b\u0002\u0001\u0002"+ - "\u0001\u0002\u0001\u0003\u0001\u0003\u0001\u0004\u0001\u0004\u0001\u0004"+ - "\u0003\u0004\u0a30\b\u0004\u0001\u0004\u0001\u0004\u0001\u0004\u0001\u0005"+ - "\u0001\u0005\u0001\u0005\u0000\u0001\u0002\u0006\u0000\u0002\u0004\u0006"+ - "\b\n\u0000\b\u0001\u0000\b\n\u0002\u0000\u000b\f\u001d\u001d\u0001\u0000"+ - "\r\u0010\u0001\u0000\u0011\u0016\u0002\u0000\u0017\u0017..\u0002\u0000"+ - "\u0018\u0018//\u0002\u0000\"\"\u0084\u0084\u0002\u0000 \u00f0\u00f2\u00fd"+ - "\u0c1f\u0000\f\u0001\u0000\u0000\u0000\u0002\u0712\u0001\u0000\u0000\u0000"+ - "\u0004\u0a26\u0001\u0000\u0000\u0000\u0006\u0a2a\u0001\u0000\u0000\u0000"+ - "\b\u0a2f\u0001\u0000\u0000\u0000\n\u0a34\u0001\u0000\u0000\u0000\f\r\u0003"+ - "\u0002\u0001\u0000\r\u000e\u0005\u0000\u0000\u0001\u000e\u0001\u0001\u0000"+ - "\u0000\u0000\u000f\u0010\u0006\u0001\uffff\uffff\u0000\u0010\u0011\u0005"+ - "\u0002\u0000\u0000\u0011\u0012\u0003\u0002\u0001\u0000\u0012\u0013\u0005"+ - "\u0003\u0000\u0000\u0013\u0713\u0001\u0000\u0000\u0000\u0014\u0015\u0005"+ - "\u0007\u0000\u0000\u0015\u0713\u0003\u0002\u0001\u00eb\u0016\u0017\u0005"+ - "\u00f1\u0000\u0000\u0017\u0018\u0005\u0002\u0000\u0000\u0018\u001d\u0003"+ - "\u0002\u0001\u0000\u0019\u001a\u0005\u0004\u0000\u0000\u001a\u001c\u0003"+ - "\u0002\u0001\u0000\u001b\u0019\u0001\u0000\u0000\u0000\u001c\u001f\u0001"+ - "\u0000\u0000\u0000\u001d\u001b\u0001\u0000\u0000\u0000\u001d\u001e\u0001"+ - "\u0000\u0000\u0000\u001e \u0001\u0000\u0000\u0000\u001f\u001d\u0001\u0000"+ - "\u0000\u0000 !\u0005\u0003\u0000\u0000!\u0713\u0001\u0000\u0000\u0000"+ - "\"#\u0005#\u0000\u0000#$\u0005\u0002\u0000\u0000$%\u0003\u0002\u0001\u0000"+ - "%&\u0005\u0004\u0000\u0000&)\u0003\u0002\u0001\u0000\'(\u0005\u0004\u0000"+ - "\u0000(*\u0003\u0002\u0001\u0000)\'\u0001\u0000\u0000\u0000)*\u0001\u0000"+ - "\u0000\u0000*+\u0001\u0000\u0000\u0000+,\u0005\u0003\u0000\u0000,\u0713"+ - "\u0001\u0000\u0000\u0000-.\u0005%\u0000\u0000./\u0005\u0002\u0000\u0000"+ - "/0\u0003\u0002\u0001\u000001\u0005\u0003\u0000\u00001\u0713\u0001\u0000"+ - "\u0000\u000023\u0005&\u0000\u000034\u0005\u0002\u0000\u000045\u0003\u0002"+ - "\u0001\u000056\u0005\u0003\u0000\u00006\u0713\u0001\u0000\u0000\u0000"+ - "78\u0005\'\u0000\u000089\u0005\u0002\u0000\u00009<\u0003\u0002\u0001\u0000"+ - ":;\u0005\u0004\u0000\u0000;=\u0003\u0002\u0001\u0000<:\u0001\u0000\u0000"+ - "\u0000<=\u0001\u0000\u0000\u0000=>\u0001\u0000\u0000\u0000>?\u0005\u0003"+ - "\u0000\u0000?\u0713\u0001\u0000\u0000\u0000@A\u0005(\u0000\u0000AB\u0005"+ - "\u0002\u0000\u0000BC\u0003\u0002\u0001\u0000CD\u0005\u0003\u0000\u0000"+ - "D\u0713\u0001\u0000\u0000\u0000EF\u0005)\u0000\u0000FG\u0005\u0002\u0000"+ - "\u0000GH\u0003\u0002\u0001\u0000HI\u0005\u0003\u0000\u0000I\u0713\u0001"+ - "\u0000\u0000\u0000JK\u0005*\u0000\u0000KL\u0005\u0002\u0000\u0000LM\u0003"+ - "\u0002\u0001\u0000MN\u0005\u0003\u0000\u0000N\u0713\u0001\u0000\u0000"+ - "\u0000OP\u0005+\u0000\u0000PQ\u0005\u0002\u0000\u0000QR\u0003\u0002\u0001"+ - "\u0000RS\u0005\u0003\u0000\u0000S\u0713\u0001\u0000\u0000\u0000TU\u0005"+ - "$\u0000\u0000UV\u0005\u0002\u0000\u0000VW\u0003\u0002\u0001\u0000WX\u0005"+ - "\u0004\u0000\u0000X[\u0003\u0002\u0001\u0000YZ\u0005\u0004\u0000\u0000"+ - "Z\\\u0003\u0002\u0001\u0000[Y\u0001\u0000\u0000\u0000[\\\u0001\u0000\u0000"+ - "\u0000\\]\u0001\u0000\u0000\u0000]^\u0005\u0003\u0000\u0000^\u0713\u0001"+ - "\u0000\u0000\u0000_`\u0005,\u0000\u0000`a\u0005\u0002\u0000\u0000ad\u0003"+ - "\u0002\u0001\u0000bc\u0005\u0004\u0000\u0000ce\u0003\u0002\u0001\u0000"+ - "db\u0001\u0000\u0000\u0000de\u0001\u0000\u0000\u0000ef\u0001\u0000\u0000"+ - "\u0000fg\u0005\u0003\u0000\u0000g\u0713\u0001\u0000\u0000\u0000hi\u0005"+ - "-\u0000\u0000ij\u0005\u0002\u0000\u0000jm\u0003\u0002\u0001\u0000kl\u0005"+ - "\u0004\u0000\u0000ln\u0003\u0002\u0001\u0000mk\u0001\u0000\u0000\u0000"+ - "mn\u0001\u0000\u0000\u0000no\u0001\u0000\u0000\u0000op\u0005\u0003\u0000"+ - "\u0000p\u0713\u0001\u0000\u0000\u0000qr\u0005.\u0000\u0000rs\u0005\u0002"+ - "\u0000\u0000sx\u0003\u0002\u0001\u0000tu\u0005\u0004\u0000\u0000uw\u0003"+ - "\u0002\u0001\u0000vt\u0001\u0000\u0000\u0000wz\u0001\u0000\u0000\u0000"+ - "xv\u0001\u0000\u0000\u0000xy\u0001\u0000\u0000\u0000y{\u0001\u0000\u0000"+ - "\u0000zx\u0001\u0000\u0000\u0000{|\u0005\u0003\u0000\u0000|\u0713\u0001"+ - "\u0000\u0000\u0000}~\u0005/\u0000\u0000~\u007f\u0005\u0002\u0000\u0000"+ - "\u007f\u0084\u0003\u0002\u0001\u0000\u0080\u0081\u0005\u0004\u0000\u0000"+ - "\u0081\u0083\u0003\u0002\u0001\u0000\u0082\u0080\u0001\u0000\u0000\u0000"+ - "\u0083\u0086\u0001\u0000\u0000\u0000\u0084\u0082\u0001\u0000\u0000\u0000"+ - "\u0084\u0085\u0001\u0000\u0000\u0000\u0085\u0087\u0001\u0000\u0000\u0000"+ - "\u0086\u0084\u0001\u0000\u0000\u0000\u0087\u0088\u0005\u0003\u0000\u0000"+ - "\u0088\u0713\u0001\u0000\u0000\u0000\u0089\u008a\u00050\u0000\u0000\u008a"+ - "\u008b\u0005\u0002\u0000\u0000\u008b\u008c\u0003\u0002\u0001\u0000\u008c"+ - "\u008d\u0005\u0003\u0000\u0000\u008d\u0713\u0001\u0000\u0000\u0000\u008e"+ - "\u0091\u00051\u0000\u0000\u008f\u0090\u0005\u0002\u0000\u0000\u0090\u0092"+ - "\u0005\u0003\u0000\u0000\u0091\u008f\u0001\u0000\u0000\u0000\u0091\u0092"+ - "\u0001\u0000\u0000\u0000\u0092\u0713\u0001\u0000\u0000\u0000\u0093\u0096"+ - "\u00052\u0000\u0000\u0094\u0095\u0005\u0002\u0000\u0000\u0095\u0097\u0005"+ - "\u0003\u0000\u0000\u0096\u0094\u0001\u0000\u0000\u0000\u0096\u0097\u0001"+ - "\u0000\u0000\u0000\u0097\u0713\u0001\u0000\u0000\u0000\u0098\u009b\u0005"+ - "3\u0000\u0000\u0099\u009a\u0005\u0002\u0000\u0000\u009a\u009c\u0005\u0003"+ - "\u0000\u0000\u009b\u0099\u0001\u0000\u0000\u0000\u009b\u009c\u0001\u0000"+ - "\u0000\u0000\u009c\u0713\u0001\u0000\u0000\u0000\u009d\u00a0\u00054\u0000"+ - "\u0000\u009e\u009f\u0005\u0002\u0000\u0000\u009f\u00a1\u0005\u0003\u0000"+ - "\u0000\u00a0\u009e\u0001\u0000\u0000\u0000\u00a0\u00a1\u0001\u0000\u0000"+ - "\u0000\u00a1\u0713\u0001\u0000\u0000\u0000\u00a2\u00a3\u00055\u0000\u0000"+ - "\u00a3\u00a4\u0005\u0002\u0000\u0000\u00a4\u00a7\u0003\u0002\u0001\u0000"+ - "\u00a5\u00a6\u0005\u0004\u0000\u0000\u00a6\u00a8\u0003\u0002\u0001\u0000"+ - "\u00a7\u00a5\u0001\u0000\u0000\u0000\u00a7\u00a8\u0001\u0000\u0000\u0000"+ - "\u00a8\u00a9\u0001\u0000\u0000\u0000\u00a9\u00aa\u0005\u0003\u0000\u0000"+ - "\u00aa\u0713\u0001\u0000\u0000\u0000\u00ab\u00ac\u00056\u0000\u0000\u00ac"+ - "\u00ad\u0005\u0002\u0000\u0000\u00ad\u00b0\u0003\u0002\u0001\u0000\u00ae"+ - "\u00af\u0005\u0004\u0000\u0000\u00af\u00b1\u0003\u0002\u0001\u0000\u00b0"+ - "\u00ae\u0001\u0000\u0000\u0000\u00b0\u00b1\u0001\u0000\u0000\u0000\u00b1"+ - "\u00b2\u0001\u0000\u0000\u0000\u00b2\u00b3\u0005\u0003\u0000\u0000\u00b3"+ - "\u0713\u0001\u0000\u0000\u0000\u00b4\u00b5\u00057\u0000\u0000\u00b5\u00b6"+ - "\u0005\u0002\u0000\u0000\u00b6\u00b9\u0003\u0002\u0001\u0000\u00b7\u00b8"+ - "\u0005\u0004\u0000\u0000\u00b8\u00ba\u0003\u0002\u0001\u0000\u00b9\u00b7"+ - "\u0001\u0000\u0000\u0000\u00b9\u00ba\u0001\u0000\u0000\u0000\u00ba\u00bb"+ - "\u0001\u0000\u0000\u0000\u00bb\u00bc\u0005\u0003\u0000\u0000\u00bc\u0713"+ - "\u0001\u0000\u0000\u0000\u00bd\u00be\u00058\u0000\u0000\u00be\u00bf\u0005"+ - "\u0002\u0000\u0000\u00bf\u00c2\u0003\u0002\u0001\u0000\u00c0\u00c1\u0005"+ - "\u0004\u0000\u0000\u00c1\u00c3\u0003\u0002\u0001\u0000\u00c2\u00c0\u0001"+ - "\u0000\u0000\u0000\u00c2\u00c3\u0001\u0000\u0000\u0000\u00c3\u00c4\u0001"+ - "\u0000\u0000\u0000\u00c4\u00c5\u0005\u0003\u0000\u0000\u00c5\u0713\u0001"+ - "\u0000\u0000\u0000\u00c6\u00c7\u00059\u0000\u0000\u00c7\u00c8\u0005\u0002"+ - "\u0000\u0000\u00c8\u00c9\u0003\u0002\u0001\u0000\u00c9\u00ca\u0005\u0003"+ - "\u0000\u0000\u00ca\u0713\u0001\u0000\u0000\u0000\u00cb\u00cc\u0005:\u0000"+ - "\u0000\u00cc\u00cd\u0005\u0002\u0000\u0000\u00cd\u00d0\u0003\u0002\u0001"+ - "\u0000\u00ce\u00cf\u0005\u0004\u0000\u0000\u00cf\u00d1\u0003\u0002\u0001"+ - "\u0000\u00d0\u00ce\u0001\u0000\u0000\u0000\u00d0\u00d1\u0001\u0000\u0000"+ - "\u0000\u00d1\u00d2\u0001\u0000\u0000\u0000\u00d2\u00d3\u0005\u0003\u0000"+ - "\u0000\u00d3\u0713\u0001\u0000\u0000\u0000\u00d4\u00d5\u0005;\u0000\u0000"+ - "\u00d5\u00d6\u0005\u0002\u0000\u0000\u00d6\u00d9\u0003\u0002\u0001\u0000"+ - "\u00d7\u00d8\u0005\u0004\u0000\u0000\u00d8\u00da\u0003\u0002\u0001\u0000"+ - "\u00d9\u00d7\u0001\u0000\u0000\u0000\u00d9\u00da\u0001\u0000\u0000\u0000"+ - "\u00da\u00db\u0001\u0000\u0000\u0000\u00db\u00dc\u0005\u0003\u0000\u0000"+ - "\u00dc\u0713\u0001\u0000\u0000\u0000\u00dd\u00de\u0005<\u0000\u0000\u00de"+ - "\u00df\u0005\u0002\u0000\u0000\u00df\u00e0\u0003\u0002\u0001\u0000\u00e0"+ - "\u00e1\u0005\u0003\u0000\u0000\u00e1\u0713\u0001\u0000\u0000\u0000\u00e2"+ - "\u00e3\u0005=\u0000\u0000\u00e3\u00e4\u0005\u0002\u0000\u0000\u00e4\u00e7"+ - "\u0003\u0002\u0001\u0000\u00e5\u00e6\u0005\u0004\u0000\u0000\u00e6\u00e8"+ - "\u0003\u0002\u0001\u0000\u00e7\u00e5\u0001\u0000\u0000\u0000\u00e7\u00e8"+ - "\u0001\u0000\u0000\u0000\u00e8\u00e9\u0001\u0000\u0000\u0000\u00e9\u00ea"+ - "\u0005\u0003\u0000\u0000\u00ea\u0713\u0001\u0000\u0000\u0000\u00eb\u00ec"+ - "\u0005>\u0000\u0000\u00ec\u00ed\u0005\u0002\u0000\u0000\u00ed\u00f0\u0003"+ - "\u0002\u0001\u0000\u00ee\u00ef\u0005\u0004\u0000\u0000\u00ef\u00f1\u0003"+ - "\u0002\u0001\u0000\u00f0\u00ee\u0001\u0000\u0000\u0000\u00f0\u00f1\u0001"+ - "\u0000\u0000\u0000\u00f1\u00f2\u0001\u0000\u0000\u0000\u00f2\u00f3\u0005"+ - "\u0003\u0000\u0000\u00f3\u0713\u0001\u0000\u0000\u0000\u00f4\u00f5\u0005"+ - "?\u0000\u0000\u00f5\u00f6\u0005\u0002\u0000\u0000\u00f6\u00f7\u0003\u0002"+ - "\u0001\u0000\u00f7\u00f8\u0005\u0003\u0000\u0000\u00f8\u0713\u0001\u0000"+ - "\u0000\u0000\u00f9\u00fa\u0005@\u0000\u0000\u00fa\u00fb\u0005\u0002\u0000"+ - "\u0000\u00fb\u00fe\u0003\u0002\u0001\u0000\u00fc\u00fd\u0005\u0004\u0000"+ - "\u0000\u00fd\u00ff\u0003\u0002\u0001\u0000\u00fe\u00fc\u0001\u0000\u0000"+ - "\u0000\u00fe\u00ff\u0001\u0000\u0000\u0000\u00ff\u0100\u0001\u0000\u0000"+ - "\u0000\u0100\u0101\u0005\u0003\u0000\u0000\u0101\u0713\u0001\u0000\u0000"+ - "\u0000\u0102\u0103\u0005A\u0000\u0000\u0103\u0104\u0005\u0002\u0000\u0000"+ - "\u0104\u0105\u0003\u0002\u0001\u0000\u0105\u0106\u0005\u0003\u0000\u0000"+ - "\u0106\u0713\u0001\u0000\u0000\u0000\u0107\u0108\u0005B\u0000\u0000\u0108"+ - "\u0109\u0005\u0002\u0000\u0000\u0109\u010a\u0003\u0002\u0001\u0000\u010a"+ - "\u010b\u0005\u0004\u0000\u0000\u010b\u010c\u0003\u0002\u0001\u0000\u010c"+ - "\u010d\u0001\u0000\u0000\u0000\u010d\u010e\u0005\u0003\u0000\u0000\u010e"+ - "\u0713\u0001\u0000\u0000\u0000\u010f\u0110\u0005C\u0000\u0000\u0110\u0111"+ - "\u0005\u0002\u0000\u0000\u0111\u0112\u0003\u0002\u0001\u0000\u0112\u0113"+ - "\u0005\u0004\u0000\u0000\u0113\u0114\u0003\u0002\u0001\u0000\u0114\u0115"+ - "\u0001\u0000\u0000\u0000\u0115\u0116\u0005\u0003\u0000\u0000\u0116\u0713"+ - "\u0001\u0000\u0000\u0000\u0117\u0118\u0005D\u0000\u0000\u0118\u0119\u0005"+ - "\u0002\u0000\u0000\u0119\u011a\u0003\u0002\u0001\u0000\u011a\u011b\u0005"+ - "\u0003\u0000\u0000\u011b\u0713\u0001\u0000\u0000\u0000\u011c\u011d\u0005"+ - "E\u0000\u0000\u011d\u011e\u0005\u0002\u0000\u0000\u011e\u011f\u0003\u0002"+ - "\u0001\u0000\u011f\u0120\u0005\u0003\u0000\u0000\u0120\u0713\u0001\u0000"+ - "\u0000\u0000\u0121\u0122\u0005F\u0000\u0000\u0122\u0123\u0005\u0002\u0000"+ - "\u0000\u0123\u0124\u0003\u0002\u0001\u0000\u0124\u0125\u0005\u0003\u0000"+ - "\u0000\u0125\u0713\u0001\u0000\u0000\u0000\u0126\u0127\u0005G\u0000\u0000"+ - "\u0127\u0128\u0005\u0002\u0000\u0000\u0128\u0129\u0003\u0002\u0001\u0000"+ - "\u0129\u012a\u0005\u0003\u0000\u0000\u012a\u0713\u0001\u0000\u0000\u0000"+ - "\u012b\u012c\u0005H\u0000\u0000\u012c\u012d\u0005\u0002\u0000\u0000\u012d"+ - "\u0130\u0003\u0002\u0001\u0000\u012e\u012f\u0005\u0004\u0000\u0000\u012f"+ - "\u0131\u0003\u0002\u0001\u0000\u0130\u012e\u0001\u0000\u0000\u0000\u0131"+ - "\u0132\u0001\u0000\u0000\u0000\u0132\u0130\u0001\u0000\u0000\u0000\u0132"+ - "\u0133\u0001\u0000\u0000\u0000\u0133\u0134\u0001\u0000\u0000\u0000\u0134"+ - "\u0135\u0005\u0003\u0000\u0000\u0135\u0713\u0001\u0000\u0000\u0000\u0136"+ - "\u0137\u0005I\u0000\u0000\u0137\u0138\u0005\u0002\u0000\u0000\u0138\u013b"+ - "\u0003\u0002\u0001\u0000\u0139\u013a\u0005\u0004\u0000\u0000\u013a\u013c"+ - "\u0003\u0002\u0001\u0000\u013b\u0139\u0001\u0000\u0000\u0000\u013c\u013d"+ - "\u0001\u0000\u0000\u0000\u013d\u013b\u0001\u0000\u0000\u0000\u013d\u013e"+ - "\u0001\u0000\u0000\u0000\u013e\u013f\u0001\u0000\u0000\u0000\u013f\u0140"+ - "\u0005\u0003\u0000\u0000\u0140\u0713\u0001\u0000\u0000\u0000\u0141\u0142"+ - "\u0005J\u0000\u0000\u0142\u0143\u0005\u0002\u0000\u0000\u0143\u0144\u0003"+ - "\u0002\u0001\u0000\u0144\u0145\u0005\u0004\u0000\u0000\u0145\u0146\u0003"+ - "\u0002\u0001\u0000\u0146\u0147\u0005\u0003\u0000\u0000\u0147\u0713\u0001"+ - "\u0000\u0000\u0000\u0148\u0149\u0005K\u0000\u0000\u0149\u014a\u0005\u0002"+ - "\u0000\u0000\u014a\u014b\u0003\u0002\u0001\u0000\u014b\u014c\u0005\u0004"+ - "\u0000\u0000\u014c\u014d\u0003\u0002\u0001\u0000\u014d\u014e\u0005\u0003"+ - "\u0000\u0000\u014e\u0713\u0001\u0000\u0000\u0000\u014f\u0150\u0005L\u0000"+ - "\u0000\u0150\u0151\u0005\u0002\u0000\u0000\u0151\u0152\u0003\u0002\u0001"+ - "\u0000\u0152\u0153\u0005\u0003\u0000\u0000\u0153\u0713\u0001\u0000\u0000"+ - "\u0000\u0154\u0155\u0005M\u0000\u0000\u0155\u0156\u0005\u0002\u0000\u0000"+ - "\u0156\u0157\u0003\u0002\u0001\u0000\u0157\u0158\u0005\u0003\u0000\u0000"+ - "\u0158\u0713\u0001\u0000\u0000\u0000\u0159\u015a\u0005N\u0000\u0000\u015a"+ - "\u015b\u0005\u0002\u0000\u0000\u015b\u015c\u0003\u0002\u0001\u0000\u015c"+ - "\u015d\u0005\u0003\u0000\u0000\u015d\u0713\u0001\u0000\u0000\u0000\u015e"+ - "\u015f\u0005O\u0000\u0000\u015f\u0160\u0005\u0002\u0000\u0000\u0160\u0161"+ - "\u0003\u0002\u0001\u0000\u0161\u0162\u0005\u0003\u0000\u0000\u0162\u0713"+ - "\u0001\u0000\u0000\u0000\u0163\u0164\u0005P\u0000\u0000\u0164\u0165\u0005"+ - "\u0002\u0000\u0000\u0165\u0166\u0003\u0002\u0001\u0000\u0166\u0167\u0005"+ - "\u0003\u0000\u0000\u0167\u0713\u0001\u0000\u0000\u0000\u0168\u0169\u0005"+ - "Q\u0000\u0000\u0169\u016a\u0005\u0002\u0000\u0000\u016a\u016b\u0003\u0002"+ - "\u0001\u0000\u016b\u016c\u0005\u0003\u0000\u0000\u016c\u0713\u0001\u0000"+ - "\u0000\u0000\u016d\u016e\u0005R\u0000\u0000\u016e\u016f\u0005\u0002\u0000"+ - "\u0000\u016f\u0170\u0003\u0002\u0001\u0000\u0170\u0171\u0005\u0003\u0000"+ - "\u0000\u0171\u0713\u0001\u0000\u0000\u0000\u0172\u0173\u0005S\u0000\u0000"+ - "\u0173\u0174\u0005\u0002\u0000\u0000\u0174\u0175\u0003\u0002\u0001\u0000"+ - "\u0175\u0176\u0005\u0003\u0000\u0000\u0176\u0713\u0001\u0000\u0000\u0000"+ - "\u0177\u0178\u0005T\u0000\u0000\u0178\u0179\u0005\u0002\u0000\u0000\u0179"+ - "\u017a\u0003\u0002\u0001\u0000\u017a\u017b\u0005\u0003\u0000\u0000\u017b"+ - "\u0713\u0001\u0000\u0000\u0000\u017c\u017d\u0005U\u0000\u0000\u017d\u017e"+ - "\u0005\u0002\u0000\u0000\u017e\u017f\u0003\u0002\u0001\u0000\u017f\u0180"+ - "\u0005\u0003\u0000\u0000\u0180\u0713\u0001\u0000\u0000\u0000\u0181\u0182"+ - "\u0005V\u0000\u0000\u0182\u0183\u0005\u0002\u0000\u0000\u0183\u0184\u0003"+ - "\u0002\u0001\u0000\u0184\u0185\u0005\u0003\u0000\u0000\u0185\u0713\u0001"+ - "\u0000\u0000\u0000\u0186\u0187\u0005W\u0000\u0000\u0187\u0188\u0005\u0002"+ - "\u0000\u0000\u0188\u0189\u0003\u0002\u0001\u0000\u0189\u018a\u0005\u0003"+ - "\u0000\u0000\u018a\u0713\u0001\u0000\u0000\u0000\u018b\u018c\u0005X\u0000"+ - "\u0000\u018c\u018d\u0005\u0002\u0000\u0000\u018d\u018e\u0003\u0002\u0001"+ - "\u0000\u018e\u018f\u0005\u0003\u0000\u0000\u018f\u0713\u0001\u0000\u0000"+ - "\u0000\u0190\u0191\u0005Y\u0000\u0000\u0191\u0192\u0005\u0002\u0000\u0000"+ - "\u0192\u0193\u0003\u0002\u0001\u0000\u0193\u0194\u0005\u0003\u0000\u0000"+ - "\u0194\u0713\u0001\u0000\u0000\u0000\u0195\u0196\u0005Z\u0000\u0000\u0196"+ - "\u0197\u0005\u0002\u0000\u0000\u0197\u0198\u0003\u0002\u0001\u0000\u0198"+ - "\u0199\u0005\u0004\u0000\u0000\u0199\u019a\u0003\u0002\u0001\u0000\u019a"+ - "\u019b\u0005\u0003\u0000\u0000\u019b\u0713\u0001\u0000\u0000\u0000\u019c"+ - "\u019d\u0005[\u0000\u0000\u019d\u019e\u0005\u0002\u0000\u0000\u019e\u01a1"+ - "\u0003\u0002\u0001\u0000\u019f\u01a0\u0005\u0004\u0000\u0000\u01a0\u01a2"+ - "\u0003\u0002\u0001\u0000\u01a1\u019f\u0001\u0000\u0000\u0000\u01a1\u01a2"+ - "\u0001\u0000\u0000\u0000\u01a2\u01a3\u0001\u0000\u0000\u0000\u01a3\u01a4"+ - "\u0005\u0003\u0000\u0000\u01a4\u0713\u0001\u0000\u0000\u0000\u01a5\u01a6"+ - "\u0005\\\u0000\u0000\u01a6\u01a7\u0005\u0002\u0000\u0000\u01a7\u01a8\u0003"+ - "\u0002\u0001\u0000\u01a8\u01a9\u0005\u0004\u0000\u0000\u01a9\u01aa\u0003"+ - "\u0002\u0001\u0000\u01aa\u01ab\u0005\u0003\u0000\u0000\u01ab\u0713\u0001"+ - "\u0000\u0000\u0000\u01ac\u01ad\u0005]\u0000\u0000\u01ad\u01ae\u0005\u0002"+ - "\u0000\u0000\u01ae\u01af\u0003\u0002\u0001\u0000\u01af\u01b0\u0005\u0004"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ + "\u0994\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0003\u0001\u09a1\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u09a8\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0003\u0001\u09af\b\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u09b6\b\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u09bd\b\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ + "\u09c4\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001"+ + "\u0a00\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u0a08\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u0a14\b\u0001\u0003\u0001\u0a16\b\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0a23"+ + "\b\u0001\u0003\u0001\u0a25\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0005\u0001\u0a37\b\u0001\n\u0001\f\u0001\u0a3a\t\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0a45\b\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0003\u0001\u0a50\b\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0003\u0001\u0a5b\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0a70\b\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0a7b\b\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0005\u0001\u0a8b\b\u0001\n\u0001\f\u0001\u0a8e\t\u0001\u0003\u0001"+ + "\u0a90\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0003\u0001\u0ac2\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001"+ + "\u0001\u0001\u0001\u0001\u0005\u0001\u0ae1\b\u0001\n\u0001\f\u0001\u0ae4"+ + "\t\u0001\u0001\u0002\u0003\u0002\u0ae7\b\u0002\u0001\u0002\u0001\u0002"+ + "\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003\u0001\u0003"+ + "\u0001\u0003\u0003\u0003\u0af2\b\u0003\u0001\u0004\u0001\u0004\u0001\u0004"+ + "\u0000\u0001\u0002\u0005\u0000\u0002\u0004\u0006\b\u0000\u0007\u0002\u0000"+ + "\"\"\u00a7\u00a7\u0001\u0000\b\n\u0002\u0000\u000b\f\u001d\u001d\u0001"+ + "\u0000\r\u0010\u0001\u0000\u0011\u0016\u0001\u0000\u001e\u001f\u0002\u0000"+ + " \u0124\u0126\u0131\u0ce9\u0000\n\u0001\u0000\u0000\u0000\u0002\u08ec"+ + "\u0001\u0000\u0000\u0000\u0004\u0ae6\u0001\u0000\u0000\u0000\u0006\u0af1"+ + "\u0001\u0000\u0000\u0000\b\u0af3\u0001\u0000\u0000\u0000\n\u000b\u0003"+ + "\u0002\u0001\u0000\u000b\f\u0005\u0000\u0000\u0001\f\u0001\u0001\u0000"+ + "\u0000\u0000\r\u000e\u0006\u0001\uffff\uffff\u0000\u000e\u000f\u0005\u0002"+ + "\u0000\u0000\u000f\u0010\u0003\u0002\u0001\u0000\u0010\u0011\u0005\u0003"+ + "\u0000\u0000\u0011\u08ed\u0001\u0000\u0000\u0000\u0012\u0013\u0005\u0007"+ + "\u0000\u0000\u0013\u08ed\u0003\u0002\u0001\u011f\u0014\u0015\u0005\u0125"+ + "\u0000\u0000\u0015\u0016\u0005\u0002\u0000\u0000\u0016\u001b\u0003\u0002"+ + "\u0001\u0000\u0017\u0018\u0005\u0004\u0000\u0000\u0018\u001a\u0003\u0002"+ + "\u0001\u0000\u0019\u0017\u0001\u0000\u0000\u0000\u001a\u001d\u0001\u0000"+ + "\u0000\u0000\u001b\u0019\u0001\u0000\u0000\u0000\u001b\u001c\u0001\u0000"+ + "\u0000\u0000\u001c\u001e\u0001\u0000\u0000\u0000\u001d\u001b\u0001\u0000"+ + "\u0000\u0000\u001e\u001f\u0005\u0003\u0000\u0000\u001f\u08ed\u0001\u0000"+ + "\u0000\u0000 !\u0005#\u0000\u0000!\"\u0005\u0002\u0000\u0000\"#\u0003"+ + "\u0002\u0001\u0000#$\u0005\u0004\u0000\u0000$\'\u0003\u0002\u0001\u0000"+ + "%&\u0005\u0004\u0000\u0000&(\u0003\u0002\u0001\u0000\'%\u0001\u0000\u0000"+ + "\u0000\'(\u0001\u0000\u0000\u0000()\u0001\u0000\u0000\u0000)*\u0005\u0003"+ + "\u0000\u0000*\u08ed\u0001\u0000\u0000\u0000+,\u0005$\u0000\u0000,-\u0005"+ + "\u0002\u0000\u0000-.\u0003\u0002\u0001\u0000./\u0005\u0004\u0000\u0000"+ + "/7\u0003\u0002\u0001\u000001\u0005\u0004\u0000\u000012\u0003\u0002\u0001"+ + "\u000023\u0005\u0004\u0000\u000034\u0003\u0002\u0001\u000046\u0001\u0000"+ + "\u0000\u000050\u0001\u0000\u0000\u000069\u0001\u0000\u0000\u000075\u0001"+ + "\u0000\u0000\u000078\u0001\u0000\u0000\u00008:\u0001\u0000\u0000\u0000"+ + "97\u0001\u0000\u0000\u0000:;\u0005\u0003\u0000\u0000;\u08ed\u0001\u0000"+ + "\u0000\u0000<=\u0005%\u0000\u0000=>\u0005\u0002\u0000\u0000>?\u0003\u0002"+ + "\u0001\u0000?@\u0005\u0004\u0000\u0000@A\u0003\u0002\u0001\u0000AB\u0005"+ + "\u0004\u0000\u0000BJ\u0003\u0002\u0001\u0000CD\u0005\u0004\u0000\u0000"+ + "DE\u0003\u0002\u0001\u0000EF\u0005\u0004\u0000\u0000FG\u0003\u0002\u0001"+ + "\u0000GI\u0001\u0000\u0000\u0000HC\u0001\u0000\u0000\u0000IL\u0001\u0000"+ + "\u0000\u0000JH\u0001\u0000\u0000\u0000JK\u0001\u0000\u0000\u0000KM\u0001"+ + "\u0000\u0000\u0000LJ\u0001\u0000\u0000\u0000MN\u0005\u0003\u0000\u0000"+ + "N\u08ed\u0001\u0000\u0000\u0000OP\u0005\'\u0000\u0000PQ\u0005\u0002\u0000"+ + "\u0000QR\u0003\u0002\u0001\u0000RS\u0005\u0003\u0000\u0000S\u08ed\u0001"+ + "\u0000\u0000\u0000TU\u0005(\u0000\u0000UV\u0005\u0002\u0000\u0000VW\u0003"+ + "\u0002\u0001\u0000WX\u0005\u0003\u0000\u0000X\u08ed\u0001\u0000\u0000"+ + "\u0000YZ\u0005)\u0000\u0000Z[\u0005\u0002\u0000\u0000[^\u0003\u0002\u0001"+ + "\u0000\\]\u0005\u0004\u0000\u0000]_\u0003\u0002\u0001\u0000^\\\u0001\u0000"+ + "\u0000\u0000^_\u0001\u0000\u0000\u0000_`\u0001\u0000\u0000\u0000`a\u0005"+ + "\u0003\u0000\u0000a\u08ed\u0001\u0000\u0000\u0000bc\u0005*\u0000\u0000"+ + "cd\u0005\u0002\u0000\u0000de\u0003\u0002\u0001\u0000ef\u0005\u0003\u0000"+ + "\u0000f\u08ed\u0001\u0000\u0000\u0000gh\u0005+\u0000\u0000hi\u0005\u0002"+ + "\u0000\u0000ij\u0003\u0002\u0001\u0000jk\u0005\u0003\u0000\u0000k\u08ed"+ + "\u0001\u0000\u0000\u0000lm\u0005,\u0000\u0000mn\u0005\u0002\u0000\u0000"+ + "no\u0003\u0002\u0001\u0000op\u0005\u0003\u0000\u0000p\u08ed\u0001\u0000"+ + "\u0000\u0000qr\u0005-\u0000\u0000rs\u0005\u0002\u0000\u0000st\u0003\u0002"+ + "\u0001\u0000tu\u0005\u0003\u0000\u0000u\u08ed\u0001\u0000\u0000\u0000"+ + "vw\u0005&\u0000\u0000wx\u0005\u0002\u0000\u0000xy\u0003\u0002\u0001\u0000"+ + "yz\u0005\u0004\u0000\u0000z}\u0003\u0002\u0001\u0000{|\u0005\u0004\u0000"+ + "\u0000|~\u0003\u0002\u0001\u0000}{\u0001\u0000\u0000\u0000}~\u0001\u0000"+ + "\u0000\u0000~\u007f\u0001\u0000\u0000\u0000\u007f\u0080\u0005\u0003\u0000"+ + "\u0000\u0080\u08ed\u0001\u0000\u0000\u0000\u0081\u0082\u0005.\u0000\u0000"+ + "\u0082\u0083\u0005\u0002\u0000\u0000\u0083\u0086\u0003\u0002\u0001\u0000"+ + "\u0084\u0085\u0005\u0004\u0000\u0000\u0085\u0087\u0003\u0002\u0001\u0000"+ + "\u0086\u0084\u0001\u0000\u0000\u0000\u0086\u0087\u0001\u0000\u0000\u0000"+ + "\u0087\u0088\u0001\u0000\u0000\u0000\u0088\u0089\u0005\u0003\u0000\u0000"+ + "\u0089\u08ed\u0001\u0000\u0000\u0000\u008a\u008b\u0005/\u0000\u0000\u008b"+ + "\u008c\u0005\u0002\u0000\u0000\u008c\u008f\u0003\u0002\u0001\u0000\u008d"+ + "\u008e\u0005\u0004\u0000\u0000\u008e\u0090\u0003\u0002\u0001\u0000\u008f"+ + "\u008d\u0001\u0000\u0000\u0000\u008f\u0090\u0001\u0000\u0000\u0000\u0090"+ + "\u0091\u0001\u0000\u0000\u0000\u0091\u0092\u0005\u0003\u0000\u0000\u0092"+ + "\u08ed\u0001\u0000\u0000\u0000\u0093\u0094\u00050\u0000\u0000\u0094\u0095"+ + "\u0005\u0002\u0000\u0000\u0095\u009a\u0003\u0002\u0001\u0000\u0096\u0097"+ + "\u0005\u0004\u0000\u0000\u0097\u0099\u0003\u0002\u0001\u0000\u0098\u0096"+ + "\u0001\u0000\u0000\u0000\u0099\u009c\u0001\u0000\u0000\u0000\u009a\u0098"+ + "\u0001\u0000\u0000\u0000\u009a\u009b\u0001\u0000\u0000\u0000\u009b\u009d"+ + "\u0001\u0000\u0000\u0000\u009c\u009a\u0001\u0000\u0000\u0000\u009d\u009e"+ + "\u0005\u0003\u0000\u0000\u009e\u08ed\u0001\u0000\u0000\u0000\u009f\u00a0"+ + "\u00051\u0000\u0000\u00a0\u00a1\u0005\u0002\u0000\u0000\u00a1\u00a6\u0003"+ + "\u0002\u0001\u0000\u00a2\u00a3\u0005\u0004\u0000\u0000\u00a3\u00a5\u0003"+ + "\u0002\u0001\u0000\u00a4\u00a2\u0001\u0000\u0000\u0000\u00a5\u00a8\u0001"+ + "\u0000\u0000\u0000\u00a6\u00a4\u0001\u0000\u0000\u0000\u00a6\u00a7\u0001"+ + "\u0000\u0000\u0000\u00a7\u00a9\u0001\u0000\u0000\u0000\u00a8\u00a6\u0001"+ + "\u0000\u0000\u0000\u00a9\u00aa\u0005\u0003\u0000\u0000\u00aa\u08ed\u0001"+ + "\u0000\u0000\u0000\u00ab\u00ac\u00052\u0000\u0000\u00ac\u00ad\u0005\u0002"+ + "\u0000\u0000\u00ad\u00b2\u0003\u0002\u0001\u0000\u00ae\u00af\u0005\u0004"+ + "\u0000\u0000\u00af\u00b1\u0003\u0002\u0001\u0000\u00b0\u00ae\u0001\u0000"+ + "\u0000\u0000\u00b1\u00b4\u0001\u0000\u0000\u0000\u00b2\u00b0\u0001\u0000"+ + "\u0000\u0000\u00b2\u00b3\u0001\u0000\u0000\u0000\u00b3\u00b5\u0001\u0000"+ + "\u0000\u0000\u00b4\u00b2\u0001\u0000\u0000\u0000\u00b5\u00b6\u0005\u0003"+ + "\u0000\u0000\u00b6\u08ed\u0001\u0000\u0000\u0000\u00b7\u00b8\u00053\u0000"+ + "\u0000\u00b8\u00b9\u0005\u0002\u0000\u0000\u00b9\u00ba\u0003\u0002\u0001"+ + "\u0000\u00ba\u00bb\u0005\u0003\u0000\u0000\u00bb\u08ed\u0001\u0000\u0000"+ + "\u0000\u00bc\u00bf\u00054\u0000\u0000\u00bd\u00be\u0005\u0002\u0000\u0000"+ + "\u00be\u00c0\u0005\u0003\u0000\u0000\u00bf\u00bd\u0001\u0000\u0000\u0000"+ + "\u00bf\u00c0\u0001\u0000\u0000\u0000\u00c0\u08ed\u0001\u0000\u0000\u0000"+ + "\u00c1\u00c4\u00055\u0000\u0000\u00c2\u00c3\u0005\u0002\u0000\u0000\u00c3"+ + "\u00c5\u0005\u0003\u0000\u0000\u00c4\u00c2\u0001\u0000\u0000\u0000\u00c4"+ + "\u00c5\u0001\u0000\u0000\u0000\u00c5\u08ed\u0001\u0000\u0000\u0000\u00c6"+ + "\u00c9\u00056\u0000\u0000\u00c7\u00c8\u0005\u0002\u0000\u0000\u00c8\u00ca"+ + "\u0005\u0003\u0000\u0000\u00c9\u00c7\u0001\u0000\u0000\u0000\u00c9\u00ca"+ + "\u0001\u0000\u0000\u0000\u00ca\u08ed\u0001\u0000\u0000\u0000\u00cb\u00ce"+ + "\u00057\u0000\u0000\u00cc\u00cd\u0005\u0002\u0000\u0000\u00cd\u00cf\u0005"+ + "\u0003\u0000\u0000\u00ce\u00cc\u0001\u0000\u0000\u0000\u00ce\u00cf\u0001"+ + "\u0000\u0000\u0000\u00cf\u08ed\u0001\u0000\u0000\u0000\u00d0\u00d1\u0005"+ + "8\u0000\u0000\u00d1\u00d2\u0005\u0002\u0000\u0000\u00d2\u00d5\u0003\u0002"+ + "\u0001\u0000\u00d3\u00d4\u0005\u0004\u0000\u0000\u00d4\u00d6\u0003\u0002"+ + "\u0001\u0000\u00d5\u00d3\u0001\u0000\u0000\u0000\u00d5\u00d6\u0001\u0000"+ + "\u0000\u0000\u00d6\u00d7\u0001\u0000\u0000\u0000\u00d7\u00d8\u0005\u0003"+ + "\u0000\u0000\u00d8\u08ed\u0001\u0000\u0000\u0000\u00d9\u00da\u00059\u0000"+ + "\u0000\u00da\u00db\u0005\u0002\u0000\u0000\u00db\u00de\u0003\u0002\u0001"+ + "\u0000\u00dc\u00dd\u0005\u0004\u0000\u0000\u00dd\u00df\u0003\u0002\u0001"+ + "\u0000\u00de\u00dc\u0001\u0000\u0000\u0000\u00de\u00df\u0001\u0000\u0000"+ + "\u0000\u00df\u00e0\u0001\u0000\u0000\u0000\u00e0\u00e1\u0005\u0003\u0000"+ + "\u0000\u00e1\u08ed\u0001\u0000\u0000\u0000\u00e2\u00e3\u0005:\u0000\u0000"+ + "\u00e3\u00e4\u0005\u0002\u0000\u0000\u00e4\u00e7\u0003\u0002\u0001\u0000"+ + "\u00e5\u00e6\u0005\u0004\u0000\u0000\u00e6\u00e8\u0003\u0002\u0001\u0000"+ + "\u00e7\u00e5\u0001\u0000\u0000\u0000\u00e7\u00e8\u0001\u0000\u0000\u0000"+ + "\u00e8\u00e9\u0001\u0000\u0000\u0000\u00e9\u00ea\u0005\u0003\u0000\u0000"+ + "\u00ea\u08ed\u0001\u0000\u0000\u0000\u00eb\u00ec\u0005;\u0000\u0000\u00ec"+ + "\u00ed\u0005\u0002\u0000\u0000\u00ed\u00f0\u0003\u0002\u0001\u0000\u00ee"+ + "\u00ef\u0005\u0004\u0000\u0000\u00ef\u00f1\u0003\u0002\u0001\u0000\u00f0"+ + "\u00ee\u0001\u0000\u0000\u0000\u00f0\u00f1\u0001\u0000\u0000\u0000\u00f1"+ + "\u00f2\u0001\u0000\u0000\u0000\u00f2\u00f3\u0005\u0003\u0000\u0000\u00f3"+ + "\u08ed\u0001\u0000\u0000\u0000\u00f4\u00f5\u0005<\u0000\u0000\u00f5\u00f6"+ + "\u0005\u0002\u0000\u0000\u00f6\u00f9\u0003\u0002\u0001\u0000\u00f7\u00f8"+ + "\u0005\u0004\u0000\u0000\u00f8\u00fa\u0003\u0002\u0001\u0000\u00f9\u00f7"+ + "\u0001\u0000\u0000\u0000\u00f9\u00fa\u0001\u0000\u0000\u0000\u00fa\u00fb"+ + "\u0001\u0000\u0000\u0000\u00fb\u00fc\u0005\u0003\u0000\u0000\u00fc\u08ed"+ + "\u0001\u0000\u0000\u0000\u00fd\u00fe\u0005=\u0000\u0000\u00fe\u00ff\u0005"+ + "\u0002\u0000\u0000\u00ff\u0102\u0003\u0002\u0001\u0000\u0100\u0101\u0005"+ + "\u0004\u0000\u0000\u0101\u0103\u0003\u0002\u0001\u0000\u0102\u0100\u0001"+ + "\u0000\u0000\u0000\u0102\u0103\u0001\u0000\u0000\u0000\u0103\u0104\u0001"+ + "\u0000\u0000\u0000\u0104\u0105\u0005\u0003\u0000\u0000\u0105\u08ed\u0001"+ + "\u0000\u0000\u0000\u0106\u0107\u0005>\u0000\u0000\u0107\u0108\u0005\u0002"+ + "\u0000\u0000\u0108\u010b\u0003\u0002\u0001\u0000\u0109\u010a\u0005\u0004"+ + "\u0000\u0000\u010a\u010c\u0003\u0002\u0001\u0000\u010b\u0109\u0001\u0000"+ + "\u0000\u0000\u010b\u010c\u0001\u0000\u0000\u0000\u010c\u010d\u0001\u0000"+ + "\u0000\u0000\u010d\u010e\u0005\u0003\u0000\u0000\u010e\u08ed\u0001\u0000"+ + "\u0000\u0000\u010f\u0110\u0005?\u0000\u0000\u0110\u0111\u0005\u0002\u0000"+ + "\u0000\u0111\u0114\u0003\u0002\u0001\u0000\u0112\u0113\u0005\u0004\u0000"+ + "\u0000\u0113\u0115\u0003\u0002\u0001\u0000\u0114\u0112\u0001\u0000\u0000"+ + "\u0000\u0114\u0115\u0001\u0000\u0000\u0000\u0115\u0116\u0001\u0000\u0000"+ + "\u0000\u0116\u0117\u0005\u0003\u0000\u0000\u0117\u08ed\u0001\u0000\u0000"+ + "\u0000\u0118\u0119\u0005@\u0000\u0000\u0119\u011a\u0005\u0002\u0000\u0000"+ + "\u011a\u011d\u0003\u0002\u0001\u0000\u011b\u011c\u0005\u0004\u0000\u0000"+ + "\u011c\u011e\u0003\u0002\u0001\u0000\u011d\u011b\u0001\u0000\u0000\u0000"+ + "\u011d\u011e\u0001\u0000\u0000\u0000\u011e\u011f\u0001\u0000\u0000\u0000"+ + "\u011f\u0120\u0005\u0003\u0000\u0000\u0120\u08ed\u0001\u0000\u0000\u0000"+ + "\u0121\u0122\u0005A\u0000\u0000\u0122\u0123\u0005\u0002\u0000\u0000\u0123"+ + "\u0126\u0003\u0002\u0001\u0000\u0124\u0125\u0005\u0004\u0000\u0000\u0125"+ + "\u0127\u0003\u0002\u0001\u0000\u0126\u0124\u0001\u0000\u0000\u0000\u0126"+ + "\u0127\u0001\u0000\u0000\u0000\u0127\u0128\u0001\u0000\u0000\u0000\u0128"+ + "\u0129\u0005\u0003\u0000\u0000\u0129\u08ed\u0001\u0000\u0000\u0000\u012a"+ + "\u012b\u0005B\u0000\u0000\u012b\u012c\u0005\u0002\u0000\u0000\u012c\u012f"+ + "\u0003\u0002\u0001\u0000\u012d\u012e\u0005\u0004\u0000\u0000\u012e\u0130"+ + "\u0003\u0002\u0001\u0000\u012f\u012d\u0001\u0000\u0000\u0000\u012f\u0130"+ + "\u0001\u0000\u0000\u0000\u0130\u0131\u0001\u0000\u0000\u0000\u0131\u0132"+ + "\u0005\u0003\u0000\u0000\u0132\u08ed\u0001\u0000\u0000\u0000\u0133\u0134"+ + "\u0005C\u0000\u0000\u0134\u0135\u0005\u0002\u0000\u0000\u0135\u0138\u0003"+ + "\u0002\u0001\u0000\u0136\u0137\u0005\u0004\u0000\u0000\u0137\u0139\u0003"+ + "\u0002\u0001\u0000\u0138\u0136\u0001\u0000\u0000\u0000\u0138\u0139\u0001"+ + "\u0000\u0000\u0000\u0139\u013a\u0001\u0000\u0000\u0000\u013a\u013b\u0005"+ + "\u0003\u0000\u0000\u013b\u08ed\u0001\u0000\u0000\u0000\u013c\u013d\u0005"+ + "D\u0000\u0000\u013d\u013e\u0005\u0002\u0000\u0000\u013e\u013f\u0003\u0002"+ + "\u0001\u0000\u013f\u0140\u0005\u0003\u0000\u0000\u0140\u08ed\u0001\u0000"+ + "\u0000\u0000\u0141\u0142\u0005E\u0000\u0000\u0142\u0143\u0005\u0002\u0000"+ + "\u0000\u0143\u0144\u0003\u0002\u0001\u0000\u0144\u0145\u0005\u0004\u0000"+ + "\u0000\u0145\u0146\u0003\u0002\u0001\u0000\u0146\u0147\u0001\u0000\u0000"+ + "\u0000\u0147\u0148\u0005\u0003\u0000\u0000\u0148\u08ed\u0001\u0000\u0000"+ + "\u0000\u0149\u014a\u0005F\u0000\u0000\u014a\u014b\u0005\u0002\u0000\u0000"+ + "\u014b\u014c\u0003\u0002\u0001\u0000\u014c\u014d\u0005\u0004\u0000\u0000"+ + "\u014d\u014e\u0003\u0002\u0001\u0000\u014e\u014f\u0001\u0000\u0000\u0000"+ + "\u014f\u0150\u0005\u0003\u0000\u0000\u0150\u08ed\u0001\u0000\u0000\u0000"+ + "\u0151\u0152\u0005G\u0000\u0000\u0152\u0153\u0005\u0002\u0000\u0000\u0153"+ + "\u0154\u0003\u0002\u0001\u0000\u0154\u0155\u0005\u0003\u0000\u0000\u0155"+ + "\u08ed\u0001\u0000\u0000\u0000\u0156\u0157\u0005H\u0000\u0000\u0157\u0158"+ + "\u0005\u0002\u0000\u0000\u0158\u0159\u0003\u0002\u0001\u0000\u0159\u015a"+ + "\u0005\u0003\u0000\u0000\u015a\u08ed\u0001\u0000\u0000\u0000\u015b\u015c"+ + "\u0005I\u0000\u0000\u015c\u015d\u0005\u0002\u0000\u0000\u015d\u015e\u0003"+ + "\u0002\u0001\u0000\u015e\u015f\u0005\u0003\u0000\u0000\u015f\u08ed\u0001"+ + "\u0000\u0000\u0000\u0160\u0161\u0005J\u0000\u0000\u0161\u0162\u0005\u0002"+ + "\u0000\u0000\u0162\u0163\u0003\u0002\u0001\u0000\u0163\u0164\u0005\u0003"+ + "\u0000\u0000\u0164\u08ed\u0001\u0000\u0000\u0000\u0165\u0166\u0005K\u0000"+ + "\u0000\u0166\u0167\u0005\u0002\u0000\u0000\u0167\u016c\u0003\u0002\u0001"+ + "\u0000\u0168\u0169\u0005\u0004\u0000\u0000\u0169\u016b\u0003\u0002\u0001"+ + "\u0000\u016a\u0168\u0001\u0000\u0000\u0000\u016b\u016e\u0001\u0000\u0000"+ + "\u0000\u016c\u016a\u0001\u0000\u0000\u0000\u016c\u016d\u0001\u0000\u0000"+ + "\u0000\u016d\u016f\u0001\u0000\u0000\u0000\u016e\u016c\u0001\u0000\u0000"+ + "\u0000\u016f\u0170\u0005\u0003\u0000\u0000\u0170\u08ed\u0001\u0000\u0000"+ + "\u0000\u0171\u0172\u0005L\u0000\u0000\u0172\u0173\u0005\u0002\u0000\u0000"+ + "\u0173\u0178\u0003\u0002\u0001\u0000\u0174\u0175\u0005\u0004\u0000\u0000"+ + "\u0175\u0177\u0003\u0002\u0001\u0000\u0176\u0174\u0001\u0000\u0000\u0000"+ + "\u0177\u017a\u0001\u0000\u0000\u0000\u0178\u0176\u0001\u0000\u0000\u0000"+ + "\u0178\u0179\u0001\u0000\u0000\u0000\u0179\u017b\u0001\u0000\u0000\u0000"+ + "\u017a\u0178\u0001\u0000\u0000\u0000\u017b\u017c\u0005\u0003\u0000\u0000"+ + "\u017c\u08ed\u0001\u0000\u0000\u0000\u017d\u017e\u0005M\u0000\u0000\u017e"+ + "\u017f\u0005\u0002\u0000\u0000\u017f\u0180\u0003\u0002\u0001\u0000\u0180"+ + "\u0181\u0005\u0004\u0000\u0000\u0181\u0182\u0003\u0002\u0001\u0000\u0182"+ + "\u0183\u0005\u0003\u0000\u0000\u0183\u08ed\u0001\u0000\u0000\u0000\u0184"+ + "\u0185\u0005N\u0000\u0000\u0185\u0186\u0005\u0002\u0000\u0000\u0186\u0187"+ + "\u0003\u0002\u0001\u0000\u0187\u0188\u0005\u0004\u0000\u0000\u0188\u0189"+ + "\u0003\u0002\u0001\u0000\u0189\u018a\u0005\u0003\u0000\u0000\u018a\u08ed"+ + "\u0001\u0000\u0000\u0000\u018b\u018c\u0005O\u0000\u0000\u018c\u018d\u0005"+ + "\u0002\u0000\u0000\u018d\u018e\u0003\u0002\u0001\u0000\u018e\u018f\u0005"+ + "\u0003\u0000\u0000\u018f\u08ed\u0001\u0000\u0000\u0000\u0190\u0191\u0005"+ + "P\u0000\u0000\u0191\u0192\u0005\u0002\u0000\u0000\u0192\u0193\u0003\u0002"+ + "\u0001\u0000\u0193\u0194\u0005\u0003\u0000\u0000\u0194\u08ed\u0001\u0000"+ + "\u0000\u0000\u0195\u0196\u0005Q\u0000\u0000\u0196\u0197\u0005\u0002\u0000"+ + "\u0000\u0197\u0198\u0003\u0002\u0001\u0000\u0198\u0199\u0005\u0003\u0000"+ + "\u0000\u0199\u08ed\u0001\u0000\u0000\u0000\u019a\u019b\u0005R\u0000\u0000"+ + "\u019b\u019c\u0005\u0002\u0000\u0000\u019c\u019d\u0003\u0002\u0001\u0000"+ + "\u019d\u019e\u0005\u0003\u0000\u0000\u019e\u08ed\u0001\u0000\u0000\u0000"+ + "\u019f\u01a0\u0005S\u0000\u0000\u01a0\u01a1\u0005\u0002\u0000\u0000\u01a1"+ + "\u01a2\u0003\u0002\u0001\u0000\u01a2\u01a3\u0005\u0003\u0000\u0000\u01a3"+ + "\u08ed\u0001\u0000\u0000\u0000\u01a4\u01a5\u0005T\u0000\u0000\u01a5\u01a6"+ + "\u0005\u0002\u0000\u0000\u01a6\u01a7\u0003\u0002\u0001\u0000\u01a7\u01a8"+ + "\u0005\u0003\u0000\u0000\u01a8\u08ed\u0001\u0000\u0000\u0000\u01a9\u01aa"+ + "\u0005U\u0000\u0000\u01aa\u01ab\u0005\u0002\u0000\u0000\u01ab\u01ac\u0003"+ + "\u0002\u0001\u0000\u01ac\u01ad\u0005\u0003\u0000\u0000\u01ad\u08ed\u0001"+ + "\u0000\u0000\u0000\u01ae\u01af\u0005V\u0000\u0000\u01af\u01b0\u0005\u0002"+ "\u0000\u0000\u01b0\u01b1\u0003\u0002\u0001\u0000\u01b1\u01b2\u0005\u0003"+ - "\u0000\u0000\u01b2\u0713\u0001\u0000\u0000\u0000\u01b3\u01b4\u0005^\u0000"+ - "\u0000\u01b4\u01b5\u0005\u0002\u0000\u0000\u01b5\u01b8\u0003\u0002\u0001"+ - "\u0000\u01b6\u01b7\u0005\u0004\u0000\u0000\u01b7\u01b9\u0003\u0002\u0001"+ - "\u0000\u01b8\u01b6\u0001\u0000\u0000\u0000\u01b8\u01b9\u0001\u0000\u0000"+ - "\u0000\u01b9\u01ba\u0001\u0000\u0000\u0000\u01ba\u01bb\u0005\u0003\u0000"+ - "\u0000\u01bb\u0713\u0001\u0000\u0000\u0000\u01bc\u01bd\u0005_\u0000\u0000"+ - "\u01bd\u01be\u0005\u0002\u0000\u0000\u01be\u01c1\u0003\u0002\u0001\u0000"+ - "\u01bf\u01c0\u0005\u0004\u0000\u0000\u01c0\u01c2\u0003\u0002\u0001\u0000"+ - "\u01c1\u01bf\u0001\u0000\u0000\u0000\u01c1\u01c2\u0001\u0000\u0000\u0000"+ - "\u01c2\u01c3\u0001\u0000\u0000\u0000\u01c3\u01c4\u0005\u0003\u0000\u0000"+ - "\u01c4\u0713\u0001\u0000\u0000\u0000\u01c5\u01c6\u0005`\u0000\u0000\u01c6"+ - "\u01c7\u0005\u0002\u0000\u0000\u01c7\u01c8\u0003\u0002\u0001\u0000\u01c8"+ - "\u01c9\u0005\u0003\u0000\u0000\u01c9\u0713\u0001\u0000\u0000\u0000\u01ca"+ - "\u01cb\u0005a\u0000\u0000\u01cb\u01cc\u0005\u0002\u0000\u0000\u01cc\u01cd"+ - "\u0003\u0002\u0001\u0000\u01cd\u01ce\u0005\u0003\u0000\u0000\u01ce\u0713"+ - "\u0001\u0000\u0000\u0000\u01cf\u01d0\u0005b\u0000\u0000\u01d0\u01d1\u0005"+ - "\u0002\u0000\u0000\u01d1\u01d2\u0003\u0002\u0001\u0000\u01d2\u01d3\u0005"+ - "\u0004\u0000\u0000\u01d3\u01d4\u0003\u0002\u0001\u0000\u01d4\u01d5\u0005"+ - "\u0003\u0000\u0000\u01d5\u0713\u0001\u0000\u0000\u0000\u01d6\u01d7\u0005"+ - "c\u0000\u0000\u01d7\u01d8\u0005\u0002\u0000\u0000\u01d8\u0713\u0005\u0003"+ - "\u0000\u0000\u01d9\u01da\u0005d\u0000\u0000\u01da\u01db\u0005\u0002\u0000"+ - "\u0000\u01db\u01dc\u0003\u0002\u0001\u0000\u01dc\u01dd\u0005\u0004\u0000"+ - "\u0000\u01dd\u01de\u0003\u0002\u0001\u0000\u01de\u01df\u0005\u0003\u0000"+ - "\u0000\u01df\u0713\u0001\u0000\u0000\u0000\u01e0\u01e1\u0005e\u0000\u0000"+ - "\u01e1\u01e2\u0005\u0002\u0000\u0000\u01e2\u01e3\u0003\u0002\u0001\u0000"+ - "\u01e3\u01e4\u0005\u0003\u0000\u0000\u01e4\u0713\u0001\u0000\u0000\u0000"+ - "\u01e5\u01e6\u0005f\u0000\u0000\u01e6\u01e7\u0005\u0002\u0000\u0000\u01e7"+ - "\u01e8\u0003\u0002\u0001\u0000\u01e8\u01e9\u0005\u0003\u0000\u0000\u01e9"+ - "\u0713\u0001\u0000\u0000\u0000\u01ea\u01eb\u0005g\u0000\u0000\u01eb\u01ec"+ - "\u0005\u0002\u0000\u0000\u01ec\u01ed\u0003\u0002\u0001\u0000\u01ed\u01ee"+ - "\u0005\u0004\u0000\u0000\u01ee\u01ef\u0003\u0002\u0001\u0000\u01ef\u01f0"+ - "\u0005\u0003\u0000\u0000\u01f0\u0713\u0001\u0000\u0000\u0000\u01f1\u01f2"+ - "\u0005h\u0000\u0000\u01f2\u01f3\u0005\u0002\u0000\u0000\u01f3\u01f4\u0003"+ - "\u0002\u0001\u0000\u01f4\u01f5\u0005\u0003\u0000\u0000\u01f5\u0713\u0001"+ - "\u0000\u0000\u0000\u01f6\u01f7\u0005i\u0000\u0000\u01f7\u01f8\u0005\u0002"+ - "\u0000\u0000\u01f8\u01f9\u0003\u0002\u0001\u0000\u01f9\u01fa\u0005\u0003"+ - "\u0000\u0000\u01fa\u0713\u0001\u0000\u0000\u0000\u01fb\u01fc\u0005j\u0000"+ - "\u0000\u01fc\u01fd\u0005\u0002\u0000\u0000\u01fd\u0200\u0003\u0002\u0001"+ - "\u0000\u01fe\u01ff\u0005\u0004\u0000\u0000\u01ff\u0201\u0003\u0002\u0001"+ - "\u0000\u0200\u01fe\u0001\u0000\u0000\u0000\u0200\u0201\u0001\u0000\u0000"+ - "\u0000\u0201\u0202\u0001\u0000\u0000\u0000\u0202\u0203\u0005\u0003\u0000"+ - "\u0000\u0203\u0713\u0001\u0000\u0000\u0000\u0204\u0205\u0005k\u0000\u0000"+ - "\u0205\u0206\u0005\u0002\u0000\u0000\u0206\u0207\u0003\u0002\u0001\u0000"+ - "\u0207\u0208\u0005\u0003\u0000\u0000\u0208\u0713\u0001\u0000\u0000\u0000"+ - "\u0209\u020a\u0005l\u0000\u0000\u020a\u020b\u0005\u0002\u0000\u0000\u020b"+ - "\u0210\u0003\u0002\u0001\u0000\u020c\u020d\u0005\u0004\u0000\u0000\u020d"+ - "\u020f\u0003\u0002\u0001\u0000\u020e\u020c\u0001\u0000\u0000\u0000\u020f"+ - "\u0212\u0001\u0000\u0000\u0000\u0210\u020e\u0001\u0000\u0000\u0000\u0210"+ - "\u0211\u0001\u0000\u0000\u0000\u0211\u0213\u0001\u0000\u0000\u0000\u0212"+ - "\u0210\u0001\u0000\u0000\u0000\u0213\u0214\u0005\u0003\u0000\u0000\u0214"+ - "\u0713\u0001\u0000\u0000\u0000\u0215\u0216\u0005m\u0000\u0000\u0216\u0217"+ - "\u0005\u0002\u0000\u0000\u0217\u021c\u0003\u0002\u0001\u0000\u0218\u0219"+ - "\u0005\u0004\u0000\u0000\u0219\u021b\u0003\u0002\u0001\u0000\u021a\u0218"+ - "\u0001\u0000\u0000\u0000\u021b\u021e\u0001\u0000\u0000\u0000\u021c\u021a"+ - "\u0001\u0000\u0000\u0000\u021c\u021d\u0001\u0000\u0000\u0000\u021d\u021f"+ - "\u0001\u0000\u0000\u0000\u021e\u021c\u0001\u0000\u0000\u0000\u021f\u0220"+ - "\u0005\u0003\u0000\u0000\u0220\u0713\u0001\u0000\u0000\u0000\u0221\u0222"+ - "\u0005n\u0000\u0000\u0222\u0223\u0005\u0002\u0000\u0000\u0223\u0224\u0003"+ - "\u0002\u0001\u0000\u0224\u0225\u0005\u0003\u0000\u0000\u0225\u0713\u0001"+ - "\u0000\u0000\u0000\u0226\u0227\u0005o\u0000\u0000\u0227\u0228\u0005\u0002"+ - "\u0000\u0000\u0228\u022d\u0003\u0002\u0001\u0000\u0229\u022a\u0005\u0004"+ - "\u0000\u0000\u022a\u022c\u0003\u0002\u0001\u0000\u022b\u0229\u0001\u0000"+ - "\u0000\u0000\u022c\u022f\u0001\u0000\u0000\u0000\u022d\u022b\u0001\u0000"+ - "\u0000\u0000\u022d\u022e\u0001\u0000\u0000\u0000\u022e\u0230\u0001\u0000"+ - "\u0000\u0000\u022f\u022d\u0001\u0000\u0000\u0000\u0230\u0231\u0005\u0003"+ - "\u0000\u0000\u0231\u0713\u0001\u0000\u0000\u0000\u0232\u0233\u0005p\u0000"+ - "\u0000\u0233\u0234\u0005\u0002\u0000\u0000\u0234\u0235\u0003\u0002\u0001"+ - "\u0000\u0235\u0236\u0005\u0003\u0000\u0000\u0236\u0713\u0001\u0000\u0000"+ - "\u0000\u0237\u0238\u0005q\u0000\u0000\u0238\u0239\u0005\u0002\u0000\u0000"+ - "\u0239\u023a\u0003\u0002\u0001\u0000\u023a\u023b\u0005\u0003\u0000\u0000"+ - "\u023b\u0713\u0001\u0000\u0000\u0000\u023c\u023d\u0005r\u0000\u0000\u023d"+ - "\u023e\u0005\u0002\u0000\u0000\u023e\u023f\u0003\u0002\u0001\u0000\u023f"+ - "\u0240\u0005\u0003\u0000\u0000\u0240\u0713\u0001\u0000\u0000\u0000\u0241"+ - "\u0242\u0005s\u0000\u0000\u0242\u0243\u0005\u0002\u0000\u0000\u0243\u0244"+ - "\u0003\u0002\u0001\u0000\u0244\u0245\u0005\u0003\u0000\u0000\u0245\u0713"+ - "\u0001\u0000\u0000\u0000\u0246\u0247\u0005t\u0000\u0000\u0247\u0248\u0005"+ - "\u0002\u0000\u0000\u0248\u0249\u0003\u0002\u0001\u0000\u0249\u024a\u0005"+ - "\u0003\u0000\u0000\u024a\u0713\u0001\u0000\u0000\u0000\u024b\u024c\u0005"+ - "u\u0000\u0000\u024c\u024d\u0005\u0002\u0000\u0000\u024d\u0252\u0003\u0002"+ - "\u0001\u0000\u024e\u024f\u0005\u0004\u0000\u0000\u024f\u0251\u0003\u0002"+ - "\u0001\u0000\u0250\u024e\u0001\u0000\u0000\u0000\u0251\u0254\u0001\u0000"+ - "\u0000\u0000\u0252\u0250\u0001\u0000\u0000\u0000\u0252\u0253\u0001\u0000"+ - "\u0000\u0000\u0253\u0255\u0001\u0000\u0000\u0000\u0254\u0252\u0001\u0000"+ - "\u0000\u0000\u0255\u0256\u0005\u0003\u0000\u0000\u0256\u0713\u0001\u0000"+ - "\u0000\u0000\u0257\u0258\u0005v\u0000\u0000\u0258\u0259\u0005\u0002\u0000"+ - "\u0000\u0259\u025a\u0003\u0002\u0001\u0000\u025a\u025b\u0005\u0004\u0000"+ - "\u0000\u025b\u025c\u0003\u0002\u0001\u0000\u025c\u025d\u0005\u0003\u0000"+ - "\u0000\u025d\u0713\u0001\u0000\u0000\u0000\u025e\u025f\u0005w\u0000\u0000"+ - "\u025f\u0260\u0005\u0002\u0000\u0000\u0260\u0261\u0003\u0002\u0001\u0000"+ - "\u0261\u0262\u0005\u0004\u0000\u0000\u0262\u0265\u0003\u0002\u0001\u0000"+ - "\u0263\u0264\u0005\u0004\u0000\u0000\u0264\u0266\u0003\u0002\u0001\u0000"+ - "\u0265\u0263\u0001\u0000\u0000\u0000\u0265\u0266\u0001\u0000\u0000\u0000"+ - "\u0266\u0267\u0001\u0000\u0000\u0000\u0267\u0268\u0005\u0003\u0000\u0000"+ - "\u0268\u0713\u0001\u0000\u0000\u0000\u0269\u026a\u0005x\u0000\u0000\u026a"+ - "\u026b\u0005\u0002\u0000\u0000\u026b\u0272\u0003\u0002\u0001\u0000\u026c"+ - "\u026d\u0005\u0004\u0000\u0000\u026d\u0270\u0003\u0002\u0001\u0000\u026e"+ - "\u026f\u0005\u0004\u0000\u0000\u026f\u0271\u0003\u0002\u0001\u0000\u0270"+ - "\u026e\u0001\u0000\u0000\u0000\u0270\u0271\u0001\u0000\u0000\u0000\u0271"+ - "\u0273\u0001\u0000\u0000\u0000\u0272\u026c\u0001\u0000\u0000\u0000\u0272"+ - "\u0273\u0001\u0000\u0000\u0000\u0273\u0274\u0001\u0000\u0000\u0000\u0274"+ - "\u0275\u0005\u0003\u0000\u0000\u0275\u0713\u0001\u0000\u0000\u0000\u0276"+ - "\u0277\u0005y\u0000\u0000\u0277\u0278\u0005\u0002\u0000\u0000\u0278\u027b"+ - "\u0003\u0002\u0001\u0000\u0279\u027a\u0005\u0004\u0000\u0000\u027a\u027c"+ - "\u0003\u0002\u0001\u0000\u027b\u0279\u0001\u0000\u0000\u0000\u027b\u027c"+ - "\u0001\u0000\u0000\u0000\u027c\u027d\u0001\u0000\u0000\u0000\u027d\u027e"+ - "\u0005\u0003\u0000\u0000\u027e\u0713\u0001\u0000\u0000\u0000\u027f\u0280"+ - "\u0005z\u0000\u0000\u0280\u0281\u0005\u0002\u0000\u0000\u0281\u0282\u0003"+ - "\u0002\u0001\u0000\u0282\u0283\u0005\u0003\u0000\u0000\u0283\u0713\u0001"+ - "\u0000\u0000\u0000\u0284\u0285\u0005{\u0000\u0000\u0285\u0286\u0005\u0002"+ - "\u0000\u0000\u0286\u0287\u0003\u0002\u0001\u0000\u0287\u0288\u0005\u0003"+ - "\u0000\u0000\u0288\u0713\u0001\u0000\u0000\u0000\u0289\u028a\u0005|\u0000"+ - "\u0000\u028a\u028b\u0005\u0002\u0000\u0000\u028b\u028c\u0003\u0002\u0001"+ - "\u0000\u028c\u028d\u0005\u0004\u0000\u0000\u028d\u028e\u0003\u0002\u0001"+ - "\u0000\u028e\u028f\u0005\u0004\u0000\u0000\u028f\u0290\u0003\u0002\u0001"+ - "\u0000\u0290\u0291\u0005\u0003\u0000\u0000\u0291\u0713\u0001\u0000\u0000"+ - "\u0000\u0292\u0293\u0005}\u0000\u0000\u0293\u0294\u0005\u0002\u0000\u0000"+ - "\u0294\u0295\u0003\u0002\u0001\u0000\u0295\u0296\u0005\u0003\u0000\u0000"+ - "\u0296\u0713\u0001\u0000\u0000\u0000\u0297\u0298\u0005~\u0000\u0000\u0298"+ - "\u0299\u0005\u0002\u0000\u0000\u0299\u029a\u0003\u0002\u0001\u0000\u029a"+ - "\u029b\u0005\u0004\u0000\u0000\u029b\u029c\u0003\u0002\u0001\u0000\u029c"+ - "\u029d\u0005\u0004\u0000\u0000\u029d\u02a0\u0003\u0002\u0001\u0000\u029e"+ - "\u029f\u0005\u0004\u0000\u0000\u029f\u02a1\u0003\u0002\u0001\u0000\u02a0"+ - "\u029e\u0001\u0000\u0000\u0000\u02a0\u02a1\u0001\u0000\u0000\u0000\u02a1"+ - "\u02a2\u0001\u0000\u0000\u0000\u02a2\u02a3\u0005\u0003\u0000\u0000\u02a3"+ - "\u0713\u0001\u0000\u0000\u0000\u02a4\u02a5\u0005\u007f\u0000\u0000\u02a5"+ - "\u02a6\u0005\u0002\u0000\u0000\u02a6\u02a7\u0003\u0002\u0001\u0000\u02a7"+ - "\u02a8\u0005\u0004\u0000\u0000\u02a8\u02a9\u0003\u0002\u0001\u0000\u02a9"+ - "\u02aa\u0005\u0003\u0000\u0000\u02aa\u0713\u0001\u0000\u0000\u0000\u02ab"+ - "\u02ac\u0005\u0080\u0000\u0000\u02ac\u02ad\u0005\u0002\u0000\u0000\u02ad"+ - "\u02b0\u0003\u0002\u0001\u0000\u02ae\u02af\u0005\u0004\u0000\u0000\u02af"+ - "\u02b1\u0003\u0002\u0001\u0000\u02b0\u02ae\u0001\u0000\u0000\u0000\u02b0"+ - "\u02b1\u0001\u0000\u0000\u0000\u02b1\u02b2\u0001\u0000\u0000\u0000\u02b2"+ - "\u02b3\u0005\u0003\u0000\u0000\u02b3\u0713\u0001\u0000\u0000\u0000\u02b4"+ - "\u02b5\u0005\u0081\u0000\u0000\u02b5\u02b6\u0005\u0002\u0000\u0000\u02b6"+ - "\u02b7\u0003\u0002\u0001\u0000\u02b7\u02b8\u0005\u0003\u0000\u0000\u02b8"+ - "\u0713\u0001\u0000\u0000\u0000\u02b9\u02ba\u0005\u0082\u0000\u0000\u02ba"+ - "\u02bb\u0005\u0002\u0000\u0000\u02bb\u02bc\u0003\u0002\u0001\u0000\u02bc"+ - "\u02bd\u0005\u0004\u0000\u0000\u02bd\u02c0\u0003\u0002\u0001\u0000\u02be"+ - "\u02bf\u0005\u0004\u0000\u0000\u02bf\u02c1\u0003\u0002\u0001\u0000\u02c0"+ - "\u02be\u0001\u0000\u0000\u0000\u02c0\u02c1\u0001\u0000\u0000\u0000\u02c1"+ - "\u02c2\u0001\u0000\u0000\u0000\u02c2\u02c3\u0005\u0003\u0000\u0000\u02c3"+ - "\u0713\u0001\u0000\u0000\u0000\u02c4\u02c5\u0005\u0083\u0000\u0000\u02c5"+ - "\u02c6\u0005\u0002\u0000\u0000\u02c6\u02c7\u0003\u0002\u0001\u0000\u02c7"+ - "\u02c8\u0005\u0004\u0000\u0000\u02c8\u02c9\u0003\u0002\u0001\u0000\u02c9"+ - "\u02ca\u0005\u0004\u0000\u0000\u02ca\u02cd\u0003\u0002\u0001\u0000\u02cb"+ - "\u02cc\u0005\u0004\u0000\u0000\u02cc\u02ce\u0003\u0002\u0001\u0000\u02cd"+ - "\u02cb\u0001\u0000\u0000\u0000\u02cd\u02ce\u0001\u0000\u0000\u0000\u02ce"+ - "\u02cf\u0001\u0000\u0000\u0000\u02cf\u02d0\u0005\u0003\u0000\u0000\u02d0"+ - "\u0713\u0001\u0000\u0000\u0000\u02d1\u02d2\u0005\u0084\u0000\u0000\u02d2"+ - "\u02d3\u0005\u0002\u0000\u0000\u02d3\u02d4\u0003\u0002\u0001\u0000\u02d4"+ - "\u02d5\u0005\u0003\u0000\u0000\u02d5\u0713\u0001\u0000\u0000\u0000\u02d6"+ - "\u02d7\u0005\u0085\u0000\u0000\u02d7\u02d8\u0005\u0002\u0000\u0000\u02d8"+ - "\u02d9\u0003\u0002\u0001\u0000\u02d9\u02da\u0005\u0004\u0000\u0000\u02da"+ - "\u02db\u0003\u0002\u0001\u0000\u02db\u02dc\u0005\u0003\u0000\u0000\u02dc"+ - "\u0713\u0001\u0000\u0000\u0000\u02dd\u02de\u0005\u0086\u0000\u0000\u02de"+ - "\u02df\u0005\u0002\u0000\u0000\u02df\u02e0\u0003\u0002\u0001\u0000\u02e0"+ - "\u02e1\u0005\u0003\u0000\u0000\u02e1\u0713\u0001\u0000\u0000\u0000\u02e2"+ - "\u02e3\u0005\u0087\u0000\u0000\u02e3\u02e4\u0005\u0002\u0000\u0000\u02e4"+ - "\u02e5\u0003\u0002\u0001\u0000\u02e5\u02e6\u0005\u0003\u0000\u0000\u02e6"+ - "\u0713\u0001\u0000\u0000\u0000\u02e7\u02e8\u0005\u0088\u0000\u0000\u02e8"+ - "\u02e9\u0005\u0002\u0000\u0000\u02e9\u02ea\u0003\u0002\u0001\u0000\u02ea"+ - "\u02eb\u0005\u0003\u0000\u0000\u02eb\u0713\u0001\u0000\u0000\u0000\u02ec"+ - "\u02ed\u0005\u0089\u0000\u0000\u02ed\u02ee\u0005\u0002\u0000\u0000\u02ee"+ - "\u02f1\u0003\u0002\u0001\u0000\u02ef\u02f0\u0005\u0004\u0000\u0000\u02f0"+ - "\u02f2\u0003\u0002\u0001\u0000\u02f1\u02ef\u0001\u0000\u0000\u0000\u02f1"+ - "\u02f2\u0001\u0000\u0000\u0000\u02f2\u02f3\u0001\u0000\u0000\u0000\u02f3"+ - "\u02f4\u0005\u0003\u0000\u0000\u02f4\u0713\u0001\u0000\u0000\u0000\u02f5"+ - "\u02f6\u0005\u008a\u0000\u0000\u02f6\u02f7\u0005\u0002\u0000\u0000\u02f7"+ - "\u02f8\u0003\u0002\u0001\u0000\u02f8\u02f9\u0005\u0003\u0000\u0000\u02f9"+ - "\u0713\u0001\u0000\u0000\u0000\u02fa\u02fb\u0005\u008b\u0000\u0000\u02fb"+ - "\u02fc\u0005\u0002\u0000\u0000\u02fc\u02fd\u0003\u0002\u0001\u0000\u02fd"+ - "\u02fe\u0005\u0004\u0000\u0000\u02fe\u02ff\u0003\u0002\u0001\u0000\u02ff"+ - "\u0300\u0005\u0004\u0000\u0000\u0300\u030b\u0003\u0002\u0001\u0000\u0301"+ - "\u0302\u0005\u0004\u0000\u0000\u0302\u0309\u0003\u0002\u0001\u0000\u0303"+ - "\u0304\u0005\u0004\u0000\u0000\u0304\u0307\u0003\u0002\u0001\u0000\u0305"+ - "\u0306\u0005\u0004\u0000\u0000\u0306\u0308\u0003\u0002\u0001\u0000\u0307"+ - "\u0305\u0001\u0000\u0000\u0000\u0307\u0308\u0001\u0000\u0000\u0000\u0308"+ - "\u030a\u0001\u0000\u0000\u0000\u0309\u0303\u0001\u0000\u0000\u0000\u0309"+ - "\u030a\u0001\u0000\u0000\u0000\u030a\u030c\u0001\u0000\u0000\u0000\u030b"+ - "\u0301\u0001\u0000\u0000\u0000\u030b\u030c\u0001\u0000\u0000\u0000\u030c"+ - "\u030d\u0001\u0000\u0000\u0000\u030d\u030e\u0005\u0003\u0000\u0000\u030e"+ - "\u0713\u0001\u0000\u0000\u0000\u030f\u0310\u0005\u008c\u0000\u0000\u0310"+ - "\u0311\u0005\u0002\u0000\u0000\u0311\u0312\u0003\u0002\u0001\u0000\u0312"+ - "\u0313\u0005\u0004\u0000\u0000\u0313\u0316\u0003\u0002\u0001\u0000\u0314"+ - "\u0315\u0005\u0004\u0000\u0000\u0315\u0317\u0003\u0002\u0001\u0000\u0316"+ - "\u0314\u0001\u0000\u0000\u0000\u0316\u0317\u0001\u0000\u0000\u0000\u0317"+ - "\u0318\u0001\u0000\u0000\u0000\u0318\u0319\u0005\u0003\u0000\u0000\u0319"+ - "\u0713\u0001\u0000\u0000\u0000\u031a\u031b\u0005\u008d\u0000\u0000\u031b"+ - "\u031c\u0005\u0002\u0000\u0000\u031c\u0713\u0005\u0003\u0000\u0000\u031d"+ - "\u031e\u0005\u008e\u0000\u0000\u031e\u031f\u0005\u0002\u0000\u0000\u031f"+ - "\u0713\u0005\u0003\u0000\u0000\u0320\u0321\u0005\u008f\u0000\u0000\u0321"+ - "\u0322\u0005\u0002\u0000\u0000\u0322\u0323\u0003\u0002\u0001\u0000\u0323"+ - "\u0324\u0005\u0003\u0000\u0000\u0324\u0713\u0001\u0000\u0000\u0000\u0325"+ - "\u0326\u0005\u0090\u0000\u0000\u0326\u0327\u0005\u0002\u0000\u0000\u0327"+ - "\u0328\u0003\u0002\u0001\u0000\u0328\u0329\u0005\u0003\u0000\u0000\u0329"+ - "\u0713\u0001\u0000\u0000\u0000\u032a\u032b\u0005\u0091\u0000\u0000\u032b"+ - "\u032c\u0005\u0002\u0000\u0000\u032c\u032d\u0003\u0002\u0001\u0000\u032d"+ - "\u032e\u0005\u0003\u0000\u0000\u032e\u0713\u0001\u0000\u0000\u0000\u032f"+ - "\u0330\u0005\u0092\u0000\u0000\u0330\u0331\u0005\u0002\u0000\u0000\u0331"+ - "\u0332\u0003\u0002\u0001\u0000\u0332\u0333\u0005\u0003\u0000\u0000\u0333"+ - "\u0713\u0001\u0000\u0000\u0000\u0334\u0335\u0005\u0093\u0000\u0000\u0335"+ - "\u0336\u0005\u0002\u0000\u0000\u0336\u0337\u0003\u0002\u0001\u0000\u0337"+ - "\u0338\u0005\u0003\u0000\u0000\u0338\u0713\u0001\u0000\u0000\u0000\u0339"+ - "\u033a\u0005\u0094\u0000\u0000\u033a\u033b\u0005\u0002\u0000\u0000\u033b"+ - "\u033c\u0003\u0002\u0001\u0000\u033c\u033d\u0005\u0003\u0000\u0000\u033d"+ - "\u0713\u0001\u0000\u0000\u0000\u033e\u033f\u0005\u0095\u0000\u0000\u033f"+ - "\u0340\u0005\u0002\u0000\u0000\u0340\u0343\u0003\u0002\u0001\u0000\u0341"+ - "\u0342\u0005\u0004\u0000\u0000\u0342\u0344\u0003\u0002\u0001\u0000\u0343"+ - "\u0341\u0001\u0000\u0000\u0000\u0343\u0344\u0001\u0000\u0000\u0000\u0344"+ - "\u0345\u0001\u0000\u0000\u0000\u0345\u0346\u0005\u0003\u0000\u0000\u0346"+ - "\u0713\u0001\u0000\u0000\u0000\u0347\u0348\u0005\u0096\u0000\u0000\u0348"+ - "\u0349\u0005\u0002\u0000\u0000\u0349\u034a\u0003\u0002\u0001\u0000\u034a"+ - "\u034b\u0005\u0004\u0000\u0000\u034b\u034c\u0003\u0002\u0001\u0000\u034c"+ - "\u034d\u0005\u0004\u0000\u0000\u034d\u034e\u0003\u0002\u0001\u0000\u034e"+ - "\u034f\u0005\u0003\u0000\u0000\u034f\u0713\u0001\u0000\u0000\u0000\u0350"+ - "\u0351\u0005\u0097\u0000\u0000\u0351\u0352\u0005\u0002\u0000\u0000\u0352"+ - "\u0353\u0003\u0002\u0001\u0000\u0353\u0354\u0005\u0004\u0000\u0000\u0354"+ - "\u0357\u0003\u0002\u0001\u0000\u0355\u0356\u0005\u0004\u0000\u0000\u0356"+ - "\u0358\u0003\u0002\u0001\u0000\u0357\u0355\u0001\u0000\u0000\u0000\u0357"+ - "\u0358\u0001\u0000\u0000\u0000\u0358\u0359\u0001\u0000\u0000\u0000\u0359"+ - "\u035a\u0005\u0003\u0000\u0000\u035a\u0713\u0001\u0000\u0000\u0000\u035b"+ - "\u035c\u0005\u0098\u0000\u0000\u035c\u035d\u0005\u0002\u0000\u0000\u035d"+ - "\u035e\u0003\u0002\u0001\u0000\u035e\u035f\u0005\u0004\u0000\u0000\u035f"+ - "\u0360\u0003\u0002\u0001\u0000\u0360\u0361\u0005\u0003\u0000\u0000\u0361"+ - "\u0713\u0001\u0000\u0000\u0000\u0362\u0363\u0005\u0099\u0000\u0000\u0363"+ - "\u0364\u0005\u0002\u0000\u0000\u0364\u0365\u0003\u0002\u0001\u0000\u0365"+ - "\u0366\u0005\u0004\u0000\u0000\u0366\u0367\u0003\u0002\u0001\u0000\u0367"+ - "\u0368\u0005\u0003\u0000\u0000\u0368\u0713\u0001\u0000\u0000\u0000\u0369"+ - "\u036a\u0005\u009a\u0000\u0000\u036a\u036b\u0005\u0002\u0000\u0000\u036b"+ - "\u036c\u0003\u0002\u0001\u0000\u036c\u036d\u0005\u0004\u0000\u0000\u036d"+ - "\u0370\u0003\u0002\u0001\u0000\u036e\u036f\u0005\u0004\u0000\u0000\u036f"+ - "\u0371\u0003\u0002\u0001\u0000\u0370\u036e\u0001\u0000\u0000\u0000\u0370"+ - "\u0371\u0001\u0000\u0000\u0000\u0371\u0372\u0001\u0000\u0000\u0000\u0372"+ - "\u0373\u0005\u0003\u0000\u0000\u0373\u0713\u0001\u0000\u0000\u0000\u0374"+ - "\u0375\u0005\u009b\u0000\u0000\u0375\u0376\u0005\u0002\u0000\u0000\u0376"+ - "\u0377\u0003\u0002\u0001\u0000\u0377\u0378\u0005\u0004\u0000\u0000\u0378"+ - "\u037b\u0003\u0002\u0001\u0000\u0379\u037a\u0005\u0004\u0000\u0000\u037a"+ - "\u037c\u0003\u0002\u0001\u0000\u037b\u0379\u0001\u0000\u0000\u0000\u037b"+ - "\u037c\u0001\u0000\u0000\u0000\u037c\u037d\u0001\u0000\u0000\u0000\u037d"+ - "\u037e\u0005\u0003\u0000\u0000\u037e\u0713\u0001\u0000\u0000\u0000\u037f"+ - "\u0380\u0005\u009c\u0000\u0000\u0380\u0381\u0005\u0002\u0000\u0000\u0381"+ - "\u0384\u0003\u0002\u0001\u0000\u0382\u0383\u0005\u0004\u0000\u0000\u0383"+ - "\u0385\u0003\u0002\u0001\u0000\u0384\u0382\u0001\u0000\u0000\u0000\u0384"+ - "\u0385\u0001\u0000\u0000\u0000\u0385\u0386\u0001\u0000\u0000\u0000\u0386"+ - "\u0387\u0005\u0003\u0000\u0000\u0387\u0713\u0001\u0000\u0000\u0000\u0388"+ - "\u0389\u0005\u009d\u0000\u0000\u0389\u038a\u0005\u0002\u0000\u0000\u038a"+ - "\u038d\u0003\u0002\u0001\u0000\u038b\u038c\u0005\u0004\u0000\u0000\u038c"+ - "\u038e\u0003\u0002\u0001\u0000\u038d\u038b\u0001\u0000\u0000\u0000\u038e"+ - "\u038f\u0001\u0000\u0000\u0000\u038f\u038d\u0001\u0000\u0000\u0000\u038f"+ - "\u0390\u0001\u0000\u0000\u0000\u0390\u0391\u0001\u0000\u0000\u0000\u0391"+ - "\u0392\u0005\u0003\u0000\u0000\u0392\u0713\u0001\u0000\u0000\u0000\u0393"+ - "\u0394\u0005\u009e\u0000\u0000\u0394\u0395\u0005\u0002\u0000\u0000\u0395"+ - "\u0398\u0003\u0002\u0001\u0000\u0396\u0397\u0005\u0004\u0000\u0000\u0397"+ - "\u0399\u0003\u0002\u0001\u0000\u0398\u0396\u0001\u0000\u0000\u0000\u0399"+ - "\u039a\u0001\u0000\u0000\u0000\u039a\u0398\u0001\u0000\u0000\u0000\u039a"+ - "\u039b\u0001\u0000\u0000\u0000\u039b\u039c\u0001\u0000\u0000\u0000\u039c"+ - "\u039d\u0005\u0003\u0000\u0000\u039d\u0713\u0001\u0000\u0000\u0000\u039e"+ - "\u039f\u0005\u009f\u0000\u0000\u039f\u03a0\u0005\u0002\u0000\u0000\u03a0"+ - "\u03a3\u0003\u0002\u0001\u0000\u03a1\u03a2\u0005\u0004\u0000\u0000\u03a2"+ - "\u03a4\u0003\u0002\u0001\u0000\u03a3\u03a1\u0001\u0000\u0000\u0000\u03a4"+ - "\u03a5\u0001\u0000\u0000\u0000\u03a5\u03a3\u0001\u0000\u0000\u0000\u03a5"+ - "\u03a6\u0001\u0000\u0000\u0000\u03a6\u03a7\u0001\u0000\u0000\u0000\u03a7"+ - "\u03a8\u0005\u0003\u0000\u0000\u03a8\u0713\u0001\u0000\u0000\u0000\u03a9"+ - "\u03aa\u0005\u00a0\u0000\u0000\u03aa\u03ab\u0005\u0002\u0000\u0000\u03ab"+ - "\u03ac\u0003\u0002\u0001\u0000\u03ac\u03ad\u0005\u0004\u0000\u0000\u03ad"+ - "\u03ae\u0003\u0002\u0001\u0000\u03ae\u03af\u0005\u0003\u0000\u0000\u03af"+ - "\u0713\u0001\u0000\u0000\u0000\u03b0\u03b1\u0005\u00a1\u0000\u0000\u03b1"+ - "\u03b2\u0005\u0002\u0000\u0000\u03b2\u03b7\u0003\u0002\u0001\u0000\u03b3"+ - "\u03b4\u0005\u0004\u0000\u0000\u03b4\u03b6\u0003\u0002\u0001\u0000\u03b5"+ - "\u03b3\u0001\u0000\u0000\u0000\u03b6\u03b9\u0001\u0000\u0000\u0000\u03b7"+ - "\u03b5\u0001\u0000\u0000\u0000\u03b7\u03b8\u0001\u0000\u0000\u0000\u03b8"+ - "\u03ba\u0001\u0000\u0000\u0000\u03b9\u03b7\u0001\u0000\u0000\u0000\u03ba"+ - "\u03bb\u0005\u0003\u0000\u0000\u03bb\u0713\u0001\u0000\u0000\u0000\u03bc"+ - "\u03bd\u0005\u00a2\u0000\u0000\u03bd\u03be\u0005\u0002\u0000\u0000\u03be"+ - "\u03bf\u0003\u0002\u0001\u0000\u03bf\u03c0\u0005\u0004\u0000\u0000\u03c0"+ - "\u03c1\u0003\u0002\u0001\u0000\u03c1\u03c2\u0005\u0003\u0000\u0000\u03c2"+ - "\u0713\u0001\u0000\u0000\u0000\u03c3\u03c4\u0005\u00a3\u0000\u0000\u03c4"+ - "\u03c5\u0005\u0002\u0000\u0000\u03c5\u03c6\u0003\u0002\u0001\u0000\u03c6"+ - "\u03c7\u0005\u0004\u0000\u0000\u03c7\u03c8\u0003\u0002\u0001\u0000\u03c8"+ - "\u03c9\u0005\u0003\u0000\u0000\u03c9\u0713\u0001\u0000\u0000\u0000\u03ca"+ - "\u03cb\u0005\u00a4\u0000\u0000\u03cb\u03cc\u0005\u0002\u0000\u0000\u03cc"+ - "\u03cd\u0003\u0002\u0001\u0000\u03cd\u03ce\u0005\u0004\u0000\u0000\u03ce"+ - "\u03cf\u0003\u0002\u0001\u0000\u03cf\u03d0\u0005\u0003\u0000\u0000\u03d0"+ - "\u0713\u0001\u0000\u0000\u0000\u03d1\u03d2\u0005\u00a5\u0000\u0000\u03d2"+ - "\u03d3\u0005\u0002\u0000\u0000\u03d3\u03d4\u0003\u0002\u0001\u0000\u03d4"+ - "\u03d5\u0005\u0004\u0000\u0000\u03d5\u03d6\u0003\u0002\u0001\u0000\u03d6"+ - "\u03d7\u0005\u0003\u0000\u0000\u03d7\u0713\u0001\u0000\u0000\u0000\u03d8"+ - "\u03d9\u0005\u00a6\u0000\u0000\u03d9\u03da\u0005\u0002\u0000\u0000\u03da"+ - "\u03df\u0003\u0002\u0001\u0000\u03db\u03dc\u0005\u0004\u0000\u0000\u03dc"+ - "\u03de\u0003\u0002\u0001\u0000\u03dd\u03db\u0001\u0000\u0000\u0000\u03de"+ - "\u03e1\u0001\u0000\u0000\u0000\u03df\u03dd\u0001\u0000\u0000\u0000\u03df"+ - "\u03e0\u0001\u0000\u0000\u0000\u03e0\u03e2\u0001\u0000\u0000\u0000\u03e1"+ - "\u03df\u0001\u0000\u0000\u0000\u03e2\u03e3\u0005\u0003\u0000\u0000\u03e3"+ - "\u0713\u0001\u0000\u0000\u0000\u03e4\u03e5\u0005\u00a7\u0000\u0000\u03e5"+ - "\u03e6\u0005\u0002\u0000\u0000\u03e6\u03e7\u0003\u0002\u0001\u0000\u03e7"+ - "\u03e8\u0005\u0004\u0000\u0000\u03e8\u03eb\u0003\u0002\u0001\u0000\u03e9"+ - "\u03ea\u0005\u0004\u0000\u0000\u03ea\u03ec\u0003\u0002\u0001\u0000\u03eb"+ - "\u03e9\u0001\u0000\u0000\u0000\u03eb\u03ec\u0001\u0000\u0000\u0000\u03ec"+ - "\u03ed\u0001\u0000\u0000\u0000\u03ed\u03ee\u0005\u0003\u0000\u0000\u03ee"+ - "\u0713\u0001\u0000\u0000\u0000\u03ef\u03f0\u0005\u00a8\u0000\u0000\u03f0"+ - "\u03f1\u0005\u0002\u0000\u0000\u03f1\u03f6\u0003\u0002\u0001\u0000\u03f2"+ - "\u03f3\u0005\u0004\u0000\u0000\u03f3\u03f5\u0003\u0002\u0001\u0000\u03f4"+ - "\u03f2\u0001\u0000\u0000\u0000\u03f5\u03f8\u0001\u0000\u0000\u0000\u03f6"+ - "\u03f4\u0001\u0000\u0000\u0000\u03f6\u03f7\u0001\u0000\u0000\u0000\u03f7"+ - "\u03f9\u0001\u0000\u0000\u0000\u03f8\u03f6\u0001\u0000\u0000\u0000\u03f9"+ - "\u03fa\u0005\u0003\u0000\u0000\u03fa\u0713\u0001\u0000\u0000\u0000\u03fb"+ - "\u03fc\u0005\u00a9\u0000\u0000\u03fc\u03fd\u0005\u0002\u0000\u0000\u03fd"+ - "\u0402\u0003\u0002\u0001\u0000\u03fe\u03ff\u0005\u0004\u0000\u0000\u03ff"+ - "\u0401\u0003\u0002\u0001\u0000\u0400\u03fe\u0001\u0000\u0000\u0000\u0401"+ - "\u0404\u0001\u0000\u0000\u0000\u0402\u0400\u0001\u0000\u0000\u0000\u0402"+ - "\u0403\u0001\u0000\u0000\u0000\u0403\u0405\u0001\u0000\u0000\u0000\u0404"+ - "\u0402\u0001\u0000\u0000\u0000\u0405\u0406\u0005\u0003\u0000\u0000\u0406"+ - "\u0713\u0001\u0000\u0000\u0000\u0407\u0408\u0005\u00aa\u0000\u0000\u0408"+ - "\u0409\u0005\u0002\u0000\u0000\u0409\u040e\u0003\u0002\u0001\u0000\u040a"+ - "\u040b\u0005\u0004\u0000\u0000\u040b\u040d\u0003\u0002\u0001\u0000\u040c"+ - "\u040a\u0001\u0000\u0000\u0000\u040d\u0410\u0001\u0000\u0000\u0000\u040e"+ - "\u040c\u0001\u0000\u0000\u0000\u040e\u040f\u0001\u0000\u0000\u0000\u040f"+ - "\u0411\u0001\u0000\u0000\u0000\u0410\u040e\u0001\u0000\u0000\u0000\u0411"+ - "\u0412\u0005\u0003\u0000\u0000\u0412\u0713\u0001\u0000\u0000\u0000\u0413"+ - "\u0414\u0005\u00ab\u0000\u0000\u0414\u0415\u0005\u0002\u0000\u0000\u0415"+ - "\u041a\u0003\u0002\u0001\u0000\u0416\u0417\u0005\u0004\u0000\u0000\u0417"+ - "\u0419\u0003\u0002\u0001\u0000\u0418\u0416\u0001\u0000\u0000\u0000\u0419"+ - "\u041c\u0001\u0000\u0000\u0000\u041a\u0418\u0001\u0000\u0000\u0000\u041a"+ - "\u041b\u0001\u0000\u0000\u0000\u041b\u041d\u0001\u0000\u0000\u0000\u041c"+ - "\u041a\u0001\u0000\u0000\u0000\u041d\u041e\u0005\u0003\u0000\u0000\u041e"+ - "\u0713\u0001\u0000\u0000\u0000\u041f\u0420\u0005\u00ac\u0000\u0000\u0420"+ - "\u0421\u0005\u0002\u0000\u0000\u0421\u0426\u0003\u0002\u0001\u0000\u0422"+ - "\u0423\u0005\u0004\u0000\u0000\u0423\u0425\u0003\u0002\u0001\u0000\u0424"+ - "\u0422\u0001\u0000\u0000\u0000\u0425\u0428\u0001\u0000\u0000\u0000\u0426"+ - "\u0424\u0001\u0000\u0000\u0000\u0426\u0427\u0001\u0000\u0000\u0000\u0427"+ - "\u0429\u0001\u0000\u0000\u0000\u0428\u0426\u0001\u0000\u0000\u0000\u0429"+ - "\u042a\u0005\u0003\u0000\u0000\u042a\u0713\u0001\u0000\u0000\u0000\u042b"+ - "\u042c\u0005\u00ad\u0000\u0000\u042c\u042d\u0005\u0002\u0000\u0000\u042d"+ - "\u042e\u0003\u0002\u0001\u0000\u042e\u042f\u0005\u0004\u0000\u0000\u042f"+ - "\u0432\u0003\u0002\u0001\u0000\u0430\u0431\u0005\u0004\u0000\u0000\u0431"+ - "\u0433\u0003\u0002\u0001\u0000\u0432\u0430\u0001\u0000\u0000\u0000\u0432"+ - "\u0433\u0001\u0000\u0000\u0000\u0433\u0434\u0001\u0000\u0000\u0000\u0434"+ - "\u0435\u0005\u0003\u0000\u0000\u0435\u0713\u0001\u0000\u0000\u0000\u0436"+ - "\u0437\u0005\u00ae\u0000\u0000\u0437\u0438\u0005\u0002\u0000\u0000\u0438"+ - "\u043d\u0003\u0002\u0001\u0000\u0439\u043a\u0005\u0004\u0000\u0000\u043a"+ - "\u043c\u0003\u0002\u0001\u0000\u043b\u0439\u0001\u0000\u0000\u0000\u043c"+ - "\u043f\u0001\u0000\u0000\u0000\u043d\u043b\u0001\u0000\u0000\u0000\u043d"+ - "\u043e\u0001\u0000\u0000\u0000\u043e\u0440\u0001\u0000\u0000\u0000\u043f"+ - "\u043d\u0001\u0000\u0000\u0000\u0440\u0441\u0005\u0003\u0000\u0000\u0441"+ - "\u0713\u0001\u0000\u0000\u0000\u0442\u0443\u0005\u00af\u0000\u0000\u0443"+ - "\u0444\u0005\u0002\u0000\u0000\u0444\u0449\u0003\u0002\u0001\u0000\u0445"+ - "\u0446\u0005\u0004\u0000\u0000\u0446\u0448\u0003\u0002\u0001\u0000\u0447"+ - "\u0445\u0001\u0000\u0000\u0000\u0448\u044b\u0001\u0000\u0000\u0000\u0449"+ - "\u0447\u0001\u0000\u0000\u0000\u0449\u044a\u0001\u0000\u0000\u0000\u044a"+ - "\u044c\u0001\u0000\u0000\u0000\u044b\u0449\u0001\u0000\u0000\u0000\u044c"+ - "\u044d\u0005\u0003\u0000\u0000\u044d\u0713\u0001\u0000\u0000\u0000\u044e"+ - "\u044f\u0005\u00b0\u0000\u0000\u044f\u0450\u0005\u0002\u0000\u0000\u0450"+ - "\u0455\u0003\u0002\u0001\u0000\u0451\u0452\u0005\u0004\u0000\u0000\u0452"+ - "\u0454\u0003\u0002\u0001\u0000\u0453\u0451\u0001\u0000\u0000\u0000\u0454"+ - "\u0457\u0001\u0000\u0000\u0000\u0455\u0453\u0001\u0000\u0000\u0000\u0455"+ - "\u0456\u0001\u0000\u0000\u0000\u0456\u0458\u0001\u0000\u0000\u0000\u0457"+ - "\u0455\u0001\u0000\u0000\u0000\u0458\u0459\u0005\u0003\u0000\u0000\u0459"+ - "\u0713\u0001\u0000\u0000\u0000\u045a\u045b\u0005\u00b1\u0000\u0000\u045b"+ - "\u045c\u0005\u0002\u0000\u0000\u045c\u045d\u0003\u0002\u0001\u0000\u045d"+ - "\u045e\u0005\u0004\u0000\u0000\u045e\u045f\u0003\u0002\u0001\u0000\u045f"+ - "\u0460\u0005\u0003\u0000\u0000\u0460\u0713\u0001\u0000\u0000\u0000\u0461"+ - "\u0462\u0005\u00b2\u0000\u0000\u0462\u0463\u0005\u0002\u0000\u0000\u0463"+ - "\u0464\u0003\u0002\u0001\u0000\u0464\u0465\u0005\u0004\u0000\u0000\u0465"+ - "\u0466\u0003\u0002\u0001\u0000\u0466\u0467\u0005\u0003\u0000\u0000\u0467"+ - "\u0713\u0001\u0000\u0000\u0000\u0468\u0469\u0005\u00b3\u0000\u0000\u0469"+ - "\u046a\u0005\u0002\u0000\u0000\u046a\u046f\u0003\u0002\u0001\u0000\u046b"+ - "\u046c\u0005\u0004\u0000\u0000\u046c\u046e\u0003\u0002\u0001\u0000\u046d"+ - "\u046b\u0001\u0000\u0000\u0000\u046e\u0471\u0001\u0000\u0000\u0000\u046f"+ - "\u046d\u0001\u0000\u0000\u0000\u046f\u0470\u0001\u0000\u0000\u0000\u0470"+ - "\u0472\u0001\u0000\u0000\u0000\u0471\u046f\u0001\u0000\u0000\u0000\u0472"+ - "\u0473\u0005\u0003\u0000\u0000\u0473\u0713\u0001\u0000\u0000\u0000\u0474"+ - "\u0475\u0005\u00b4\u0000\u0000\u0475\u0476\u0005\u0002\u0000\u0000\u0476"+ - "\u047b\u0003\u0002\u0001\u0000\u0477\u0478\u0005\u0004\u0000\u0000\u0478"+ - "\u047a\u0003\u0002\u0001\u0000\u0479\u0477\u0001\u0000\u0000\u0000\u047a"+ - "\u047d\u0001\u0000\u0000\u0000\u047b\u0479\u0001\u0000\u0000\u0000\u047b"+ - "\u047c\u0001\u0000\u0000\u0000\u047c\u047e\u0001\u0000\u0000\u0000\u047d"+ - "\u047b\u0001\u0000\u0000\u0000\u047e\u047f\u0005\u0003\u0000\u0000\u047f"+ - "\u0713\u0001\u0000\u0000\u0000\u0480\u0481\u0005\u00b5\u0000\u0000\u0481"+ - "\u0482\u0005\u0002\u0000\u0000\u0482\u0487\u0003\u0002\u0001\u0000\u0483"+ - "\u0484\u0005\u0004\u0000\u0000\u0484\u0486\u0003\u0002\u0001\u0000\u0485"+ - "\u0483\u0001\u0000\u0000\u0000\u0486\u0489\u0001\u0000\u0000\u0000\u0487"+ - "\u0485\u0001\u0000\u0000\u0000\u0487\u0488\u0001\u0000\u0000\u0000\u0488"+ - "\u048a\u0001\u0000\u0000\u0000\u0489\u0487\u0001\u0000\u0000\u0000\u048a"+ - "\u048b\u0005\u0003\u0000\u0000\u048b\u0713\u0001\u0000\u0000\u0000\u048c"+ - "\u048d\u0005\u00b6\u0000\u0000\u048d\u048e\u0005\u0002\u0000\u0000\u048e"+ - "\u048f\u0003\u0002\u0001\u0000\u048f\u0490\u0005\u0004\u0000\u0000\u0490"+ - "\u0491\u0003\u0002\u0001\u0000\u0491\u0492\u0005\u0004\u0000\u0000\u0492"+ - "\u0493\u0003\u0002\u0001\u0000\u0493\u0494\u0005\u0004\u0000\u0000\u0494"+ - "\u0495\u0003\u0002\u0001\u0000\u0495\u0496\u0005\u0003\u0000\u0000\u0496"+ - "\u0713\u0001\u0000\u0000\u0000\u0497\u0498\u0005\u00b7\u0000\u0000\u0498"+ - "\u0499\u0005\u0002\u0000\u0000\u0499\u049a\u0003\u0002\u0001\u0000\u049a"+ - "\u049b\u0005\u0004\u0000\u0000\u049b\u049c\u0003\u0002\u0001\u0000\u049c"+ - "\u049d\u0005\u0004\u0000\u0000\u049d\u049e\u0003\u0002\u0001\u0000\u049e"+ - "\u049f\u0005\u0003\u0000\u0000\u049f\u0713\u0001\u0000\u0000\u0000\u04a0"+ - "\u04a1\u0005\u00b8\u0000\u0000\u04a1\u04a2\u0005\u0002\u0000\u0000\u04a2"+ - "\u04a3\u0003\u0002\u0001\u0000\u04a3\u04a4\u0005\u0003\u0000\u0000\u04a4"+ - "\u0713\u0001\u0000\u0000\u0000\u04a5\u04a6\u0005\u00b9\u0000\u0000\u04a6"+ - "\u04a7\u0005\u0002\u0000\u0000\u04a7\u04a8\u0003\u0002\u0001\u0000\u04a8"+ - "\u04a9\u0005\u0003\u0000\u0000\u04a9\u0713\u0001\u0000\u0000\u0000\u04aa"+ - "\u04ab\u0005\u00ba\u0000\u0000\u04ab\u04ac\u0005\u0002\u0000\u0000\u04ac"+ - "\u04ad\u0003\u0002\u0001\u0000\u04ad\u04ae\u0005\u0004\u0000\u0000\u04ae"+ - "\u04af\u0003\u0002\u0001\u0000\u04af\u04b0\u0005\u0004\u0000\u0000\u04b0"+ - "\u04b1\u0003\u0002\u0001\u0000\u04b1\u04b2\u0005\u0003\u0000\u0000\u04b2"+ - "\u0713\u0001\u0000\u0000\u0000\u04b3\u04b4\u0005\u00bb\u0000\u0000\u04b4"+ - "\u04b5\u0005\u0002\u0000\u0000\u04b5\u04b6\u0003\u0002\u0001\u0000\u04b6"+ - "\u04b7\u0005\u0004\u0000\u0000\u04b7\u04b8\u0003\u0002\u0001\u0000\u04b8"+ - "\u04b9\u0005\u0004\u0000\u0000\u04b9\u04ba\u0003\u0002\u0001\u0000\u04ba"+ - "\u04bb\u0005\u0003\u0000\u0000\u04bb\u0713\u0001\u0000\u0000\u0000\u04bc"+ - "\u04bd\u0005\u00bc\u0000\u0000\u04bd\u04be\u0005\u0002\u0000\u0000\u04be"+ - "\u04bf\u0003\u0002\u0001\u0000\u04bf\u04c0\u0005\u0004\u0000\u0000\u04c0"+ - "\u04c1\u0003\u0002\u0001\u0000\u04c1\u04c2\u0005\u0004\u0000\u0000\u04c2"+ - "\u04c3\u0003\u0002\u0001\u0000\u04c3\u04c4\u0005\u0004\u0000\u0000\u04c4"+ - "\u04c5\u0003\u0002\u0001\u0000\u04c5\u04c6\u0005\u0003\u0000\u0000\u04c6"+ - "\u0713\u0001\u0000\u0000\u0000\u04c7\u04c8\u0005\u00bd\u0000\u0000\u04c8"+ - "\u04c9\u0005\u0002\u0000\u0000\u04c9\u04ca\u0003\u0002\u0001\u0000\u04ca"+ - "\u04cb\u0005\u0004\u0000\u0000\u04cb\u04cc\u0003\u0002\u0001\u0000\u04cc"+ - "\u04cd\u0005\u0004\u0000\u0000\u04cd\u04ce\u0003\u0002\u0001\u0000\u04ce"+ - "\u04cf\u0005\u0003\u0000\u0000\u04cf\u0713\u0001\u0000\u0000\u0000\u04d0"+ - "\u04d1\u0005\u00be\u0000\u0000\u04d1\u04d2\u0005\u0002\u0000\u0000\u04d2"+ - "\u04d3\u0003\u0002\u0001\u0000\u04d3\u04d4\u0005\u0004\u0000\u0000\u04d4"+ - "\u04d5\u0003\u0002\u0001\u0000\u04d5\u04d6\u0005\u0004\u0000\u0000\u04d6"+ - "\u04d7\u0003\u0002\u0001\u0000\u04d7\u04d8\u0005\u0003\u0000\u0000\u04d8"+ - "\u0713\u0001\u0000\u0000\u0000\u04d9\u04da\u0005\u00bf\u0000\u0000\u04da"+ - "\u04db\u0005\u0002\u0000\u0000\u04db\u04dc\u0003\u0002\u0001\u0000\u04dc"+ - "\u04dd\u0005\u0004\u0000\u0000\u04dd\u04de\u0003\u0002\u0001\u0000\u04de"+ - "\u04df\u0005\u0004\u0000\u0000\u04df\u04e0\u0003\u0002\u0001\u0000\u04e0"+ - "\u04e1\u0005\u0003\u0000\u0000\u04e1\u0713\u0001\u0000\u0000\u0000\u04e2"+ - "\u04e3\u0005\u00c0\u0000\u0000\u04e3\u04e4\u0005\u0002\u0000\u0000\u04e4"+ - "\u04e5\u0003\u0002\u0001\u0000\u04e5\u04e6\u0005\u0003\u0000\u0000\u04e6"+ - "\u0713\u0001\u0000\u0000\u0000\u04e7\u04e8\u0005\u00c1\u0000\u0000\u04e8"+ - "\u04e9\u0005\u0002\u0000\u0000\u04e9\u04ea\u0003\u0002\u0001\u0000\u04ea"+ - "\u04eb\u0005\u0003\u0000\u0000\u04eb\u0713\u0001\u0000\u0000\u0000\u04ec"+ - "\u04ed\u0005\u00c2\u0000\u0000\u04ed\u04ee\u0005\u0002\u0000\u0000\u04ee"+ - "\u04ef\u0003\u0002\u0001\u0000\u04ef\u04f0\u0005\u0004\u0000\u0000\u04f0"+ - "\u04f1\u0003\u0002\u0001\u0000\u04f1\u04f2\u0005\u0004\u0000\u0000\u04f2"+ - "\u04f3\u0003\u0002\u0001\u0000\u04f3\u04f4\u0005\u0004\u0000\u0000\u04f4"+ - "\u04f5\u0003\u0002\u0001\u0000\u04f5\u04f6\u0005\u0003\u0000\u0000\u04f6"+ - "\u0713\u0001\u0000\u0000\u0000\u04f7\u04f8\u0005\u00c3\u0000\u0000\u04f8"+ - "\u04f9\u0005\u0002\u0000\u0000\u04f9\u04fa\u0003\u0002\u0001\u0000\u04fa"+ - "\u04fb\u0005\u0004\u0000\u0000\u04fb\u04fc\u0003\u0002\u0001\u0000\u04fc"+ - "\u04fd\u0005\u0004\u0000\u0000\u04fd\u04fe\u0003\u0002\u0001\u0000\u04fe"+ - "\u04ff\u0005\u0003\u0000\u0000\u04ff\u0713\u0001\u0000\u0000\u0000\u0500"+ - "\u0501\u0005\u00c4\u0000\u0000\u0501\u0502\u0005\u0002\u0000\u0000\u0502"+ - "\u0503\u0003\u0002\u0001\u0000\u0503\u0504\u0005\u0003\u0000\u0000\u0504"+ - "\u0713\u0001\u0000\u0000\u0000\u0505\u0506\u0005\u00c5\u0000\u0000\u0506"+ - "\u0507\u0005\u0002\u0000\u0000\u0507\u0508\u0003\u0002\u0001\u0000\u0508"+ - "\u0509\u0005\u0004\u0000\u0000\u0509\u050a\u0003\u0002\u0001\u0000\u050a"+ - "\u050b\u0005\u0004\u0000\u0000\u050b\u050c\u0003\u0002\u0001\u0000\u050c"+ - "\u050d\u0005\u0004\u0000\u0000\u050d\u050e\u0003\u0002\u0001\u0000\u050e"+ - "\u050f\u0005\u0003\u0000\u0000\u050f\u0713\u0001\u0000\u0000\u0000\u0510"+ - "\u0511\u0005\u00c6\u0000\u0000\u0511\u0512\u0005\u0002\u0000\u0000\u0512"+ - "\u0513\u0003\u0002\u0001\u0000\u0513\u0514\u0005\u0004\u0000\u0000\u0514"+ - "\u0515\u0003\u0002\u0001\u0000\u0515\u0516\u0005\u0004\u0000\u0000\u0516"+ - "\u0517\u0003\u0002\u0001\u0000\u0517\u0518\u0005\u0003\u0000\u0000\u0518"+ - "\u0713\u0001\u0000\u0000\u0000\u0519\u051a\u0005\u00c7\u0000\u0000\u051a"+ - "\u051b\u0005\u0002\u0000\u0000\u051b\u051c\u0003\u0002\u0001\u0000\u051c"+ - "\u051d\u0005\u0004\u0000\u0000\u051d\u051e\u0003\u0002\u0001\u0000\u051e"+ - "\u051f\u0005\u0004\u0000\u0000\u051f\u0520\u0003\u0002\u0001\u0000\u0520"+ - "\u0521\u0005\u0003\u0000\u0000\u0521\u0713\u0001\u0000\u0000\u0000\u0522"+ - "\u0523\u0005\u00c8\u0000\u0000\u0523\u0524\u0005\u0002\u0000\u0000\u0524"+ - "\u0525\u0003\u0002\u0001\u0000\u0525\u0526\u0005\u0004\u0000\u0000\u0526"+ - "\u0527\u0003\u0002\u0001\u0000\u0527\u0528\u0005\u0004\u0000\u0000\u0528"+ - "\u0529\u0003\u0002\u0001\u0000\u0529\u052a\u0005\u0003\u0000\u0000\u052a"+ - "\u0713\u0001\u0000\u0000\u0000\u052b\u052c\u0005\u00c9\u0000\u0000\u052c"+ - "\u052d\u0005\u0002\u0000\u0000\u052d\u052e\u0003\u0002\u0001\u0000\u052e"+ - "\u052f\u0005\u0004\u0000\u0000\u052f\u0530\u0003\u0002\u0001\u0000\u0530"+ - "\u0531\u0005\u0004\u0000\u0000\u0531\u0532\u0003\u0002\u0001\u0000\u0532"+ - "\u0533\u0005\u0003\u0000\u0000\u0533\u0713\u0001\u0000\u0000\u0000\u0534"+ - "\u0535\u0005\u00ca\u0000\u0000\u0535\u0536\u0005\u0002\u0000\u0000\u0536"+ - "\u0537\u0003\u0002\u0001\u0000\u0537\u0538\u0005\u0004\u0000\u0000\u0538"+ - "\u0539\u0003\u0002\u0001\u0000\u0539\u053a\u0005\u0004\u0000\u0000\u053a"+ - "\u053b\u0003\u0002\u0001\u0000\u053b\u053c\u0005\u0003\u0000\u0000\u053c"+ - "\u0713\u0001\u0000\u0000\u0000\u053d\u053e\u0005\u00cb\u0000\u0000\u053e"+ - "\u053f\u0005\u0002\u0000\u0000\u053f\u0540\u0003\u0002\u0001\u0000\u0540"+ - "\u0541\u0005\u0004\u0000\u0000\u0541\u0542\u0003\u0002\u0001\u0000\u0542"+ - "\u0543\u0005\u0003\u0000\u0000\u0543\u0713\u0001\u0000\u0000\u0000\u0544"+ - "\u0545\u0005\u00cc\u0000\u0000\u0545\u0546\u0005\u0002\u0000\u0000\u0546"+ - "\u0547\u0003\u0002\u0001\u0000\u0547\u0548\u0005\u0004\u0000\u0000\u0548"+ - "\u0549\u0003\u0002\u0001\u0000\u0549\u054a\u0005\u0004\u0000\u0000\u054a"+ - "\u054b\u0003\u0002\u0001\u0000\u054b\u054c\u0005\u0004\u0000\u0000\u054c"+ - "\u054d\u0003\u0002\u0001\u0000\u054d\u054e\u0005\u0003\u0000\u0000\u054e"+ - "\u0713\u0001\u0000\u0000\u0000\u054f\u0550\u0005\u00cd\u0000\u0000\u0550"+ - "\u0551\u0005\u0002\u0000\u0000\u0551\u0552\u0003\u0002\u0001\u0000\u0552"+ - "\u0553\u0005\u0003\u0000\u0000\u0553\u0713\u0001\u0000\u0000\u0000\u0554"+ - "\u0555\u0005\u00ce\u0000\u0000\u0555\u0556\u0005\u0002\u0000\u0000\u0556"+ - "\u0557\u0003\u0002\u0001\u0000\u0557\u0558\u0005\u0003\u0000\u0000\u0558"+ - "\u0713\u0001\u0000\u0000\u0000\u0559\u055a\u0005\u00cf\u0000\u0000\u055a"+ - "\u055b\u0005\u0002\u0000\u0000\u055b\u055c\u0003\u0002\u0001\u0000\u055c"+ - "\u055d\u0005\u0003\u0000\u0000\u055d\u0713\u0001\u0000\u0000\u0000\u055e"+ - "\u055f\u0005\u00d0\u0000\u0000\u055f\u0560\u0005\u0002\u0000\u0000\u0560"+ - "\u0561\u0003\u0002\u0001\u0000\u0561\u0562\u0005\u0003\u0000\u0000\u0562"+ - "\u0713\u0001\u0000\u0000\u0000\u0563\u0564\u0005\u00d1\u0000\u0000\u0564"+ - "\u0565\u0005\u0002\u0000\u0000\u0565\u0568\u0003\u0002\u0001\u0000\u0566"+ - "\u0567\u0005\u0004\u0000\u0000\u0567\u0569\u0003\u0002\u0001\u0000\u0568"+ - "\u0566\u0001\u0000\u0000\u0000\u0568\u0569\u0001\u0000\u0000\u0000\u0569"+ - "\u056a\u0001\u0000\u0000\u0000\u056a\u056b\u0005\u0003\u0000\u0000\u056b"+ - "\u0713\u0001\u0000\u0000\u0000\u056c\u056d\u0005\u00d2\u0000\u0000\u056d"+ - "\u056e\u0005\u0002\u0000\u0000\u056e\u0571\u0003\u0002\u0001\u0000\u056f"+ - "\u0570\u0005\u0004\u0000\u0000\u0570\u0572\u0003\u0002\u0001\u0000\u0571"+ - "\u056f\u0001\u0000\u0000\u0000\u0571\u0572\u0001\u0000\u0000\u0000\u0572"+ - "\u0573\u0001\u0000\u0000\u0000\u0573\u0574\u0005\u0003\u0000\u0000\u0574"+ - "\u0713\u0001\u0000\u0000\u0000\u0575\u0576\u0005\u00d3\u0000\u0000\u0576"+ - "\u0577\u0005\u0002\u0000\u0000\u0577\u057a\u0003\u0002\u0001\u0000\u0578"+ - "\u0579\u0005\u0004\u0000\u0000\u0579\u057b\u0003\u0002\u0001\u0000\u057a"+ - "\u0578\u0001\u0000\u0000\u0000\u057a\u057b\u0001\u0000\u0000\u0000\u057b"+ - "\u057c\u0001\u0000\u0000\u0000\u057c\u057d\u0005\u0003\u0000\u0000\u057d"+ - "\u0713\u0001\u0000\u0000\u0000\u057e\u057f\u0005\u00d4\u0000\u0000\u057f"+ - "\u0580\u0005\u0002\u0000\u0000\u0580\u0583\u0003\u0002\u0001\u0000\u0581"+ - "\u0582\u0005\u0004\u0000\u0000\u0582\u0584\u0003\u0002\u0001\u0000\u0583"+ - "\u0581\u0001\u0000\u0000\u0000\u0583\u0584\u0001\u0000\u0000\u0000\u0584"+ - "\u0585\u0001\u0000\u0000\u0000\u0585\u0586\u0005\u0003\u0000\u0000\u0586"+ - "\u0713\u0001\u0000\u0000\u0000\u0587\u0588\u0005\u00d5\u0000\u0000\u0588"+ - "\u0589\u0005\u0002\u0000\u0000\u0589\u058a\u0003\u0002\u0001\u0000\u058a"+ - "\u058b\u0005\u0004\u0000\u0000\u058b\u058c\u0003\u0002\u0001\u0000\u058c"+ - "\u058d\u0005\u0003\u0000\u0000\u058d\u0713\u0001\u0000\u0000\u0000\u058e"+ - "\u058f\u0005\u00d6\u0000\u0000\u058f\u0590\u0005\u0002\u0000\u0000\u0590"+ - "\u0591\u0003\u0002\u0001\u0000\u0591\u0592\u0005\u0004\u0000\u0000\u0592"+ - "\u0593\u0003\u0002\u0001\u0000\u0593\u0594\u0005\u0004\u0000\u0000\u0594"+ - "\u0595\u0003\u0002\u0001\u0000\u0595\u0596\u0005\u0003\u0000\u0000\u0596"+ - "\u0713\u0001\u0000\u0000\u0000\u0597\u0598\u0005\u00d7\u0000\u0000\u0598"+ - "\u0599\u0005\u0002\u0000\u0000\u0599\u059a\u0003\u0002\u0001\u0000\u059a"+ - "\u059b\u0005\u0004\u0000\u0000\u059b\u059c\u0003\u0002\u0001\u0000\u059c"+ - "\u059d\u0005\u0003\u0000\u0000\u059d\u0713\u0001\u0000\u0000\u0000\u059e"+ - "\u059f\u0005\u00d8\u0000\u0000\u059f\u05a0\u0005\u0002\u0000\u0000\u05a0"+ - "\u0713\u0005\u0003\u0000\u0000\u05a1\u05a2\u0005\u00d9\u0000\u0000\u05a2"+ - "\u05a3\u0005\u0002\u0000\u0000\u05a3\u05a6\u0003\u0002\u0001\u0000\u05a4"+ - "\u05a5\u0005\u0004\u0000\u0000\u05a5\u05a7\u0003\u0002\u0001\u0000\u05a6"+ - "\u05a4\u0001\u0000\u0000\u0000\u05a6\u05a7\u0001\u0000\u0000\u0000\u05a7"+ - "\u05a8\u0001\u0000\u0000\u0000\u05a8\u05a9\u0005\u0003\u0000\u0000\u05a9"+ - "\u0713\u0001\u0000\u0000\u0000\u05aa\u05ab\u0005\u00da\u0000\u0000\u05ab"+ - "\u05ac\u0005\u0002\u0000\u0000\u05ac\u05af\u0003\u0002\u0001\u0000\u05ad"+ - "\u05ae\u0005\u0004\u0000\u0000\u05ae\u05b0\u0003\u0002\u0001\u0000\u05af"+ - "\u05ad\u0001\u0000\u0000\u0000\u05af\u05b0\u0001\u0000\u0000\u0000\u05b0"+ - "\u05b1\u0001\u0000\u0000\u0000\u05b1\u05b2\u0005\u0003\u0000\u0000\u05b2"+ - "\u0713\u0001\u0000\u0000\u0000\u05b3\u05b4\u0005\u00db\u0000\u0000\u05b4"+ - "\u05b5\u0005\u0002\u0000\u0000\u05b5\u05b8\u0003\u0002\u0001\u0000\u05b6"+ - "\u05b7\u0005\u0004\u0000\u0000\u05b7\u05b9\u0003\u0002\u0001\u0000\u05b8"+ - "\u05b6\u0001\u0000\u0000\u0000\u05b8\u05b9\u0001\u0000\u0000\u0000\u05b9"+ - "\u05ba\u0001\u0000\u0000\u0000\u05ba\u05bb\u0005\u0003\u0000\u0000\u05bb"+ - "\u0713\u0001\u0000\u0000\u0000\u05bc\u05bd\u0005\u00dc\u0000\u0000\u05bd"+ - "\u05be\u0005\u0002\u0000\u0000\u05be\u05c1\u0003\u0002\u0001\u0000\u05bf"+ - "\u05c0\u0005\u0004\u0000\u0000\u05c0\u05c2\u0003\u0002\u0001\u0000\u05c1"+ - "\u05bf\u0001\u0000\u0000\u0000\u05c1\u05c2\u0001\u0000\u0000\u0000\u05c2"+ - "\u05c3\u0001\u0000\u0000\u0000\u05c3\u05c4\u0005\u0003\u0000\u0000\u05c4"+ - "\u0713\u0001\u0000\u0000\u0000\u05c5\u05c6\u0005\u00dd\u0000\u0000\u05c6"+ - "\u05c7\u0005\u0002\u0000\u0000\u05c7\u05c8\u0003\u0002\u0001\u0000\u05c8"+ - "\u05c9\u0005\u0004\u0000\u0000\u05c9\u05cc\u0003\u0002\u0001\u0000\u05ca"+ - "\u05cb\u0005\u0004\u0000\u0000\u05cb\u05cd\u0003\u0002\u0001\u0000\u05cc"+ - "\u05ca\u0001\u0000\u0000\u0000\u05cc\u05cd\u0001\u0000\u0000\u0000\u05cd"+ - "\u05ce\u0001\u0000\u0000\u0000\u05ce\u05cf\u0005\u0003\u0000\u0000\u05cf"+ - "\u0713\u0001\u0000\u0000\u0000\u05d0\u05d1\u0005\u00de\u0000\u0000\u05d1"+ - "\u05d2\u0005\u0002\u0000\u0000\u05d2\u05d3\u0003\u0002\u0001\u0000\u05d3"+ - "\u05d4\u0005\u0004\u0000\u0000\u05d4\u05d7\u0003\u0002\u0001\u0000\u05d5"+ - "\u05d6\u0005\u0004\u0000\u0000\u05d6\u05d8\u0003\u0002\u0001\u0000\u05d7"+ - "\u05d5\u0001\u0000\u0000\u0000\u05d7\u05d8\u0001\u0000\u0000\u0000\u05d8"+ - "\u05d9\u0001\u0000\u0000\u0000\u05d9\u05da\u0005\u0003\u0000\u0000\u05da"+ - "\u0713\u0001\u0000\u0000\u0000\u05db\u05dc\u0005\u00df\u0000\u0000\u05dc"+ - "\u05dd\u0005\u0002\u0000\u0000\u05dd\u05de\u0003\u0002\u0001\u0000\u05de"+ - "\u05df\u0005\u0004\u0000\u0000\u05df\u05e2\u0003\u0002\u0001\u0000\u05e0"+ - "\u05e1\u0005\u0004\u0000\u0000\u05e1\u05e3\u0003\u0002\u0001\u0000\u05e2"+ - "\u05e0\u0001\u0000\u0000\u0000\u05e2\u05e3\u0001\u0000\u0000\u0000\u05e3"+ - "\u05e4\u0001\u0000\u0000\u0000\u05e4\u05e5\u0005\u0003\u0000\u0000\u05e5"+ - "\u0713\u0001\u0000\u0000\u0000\u05e6\u05e7\u0005\u00e0\u0000\u0000\u05e7"+ - "\u05e8\u0005\u0002\u0000\u0000\u05e8\u05e9\u0003\u0002\u0001\u0000\u05e9"+ - "\u05ea\u0005\u0004\u0000\u0000\u05ea\u05ed\u0003\u0002\u0001\u0000\u05eb"+ - "\u05ec\u0005\u0004\u0000\u0000\u05ec\u05ee\u0003\u0002\u0001\u0000\u05ed"+ - "\u05eb\u0001\u0000\u0000\u0000\u05ed\u05ee\u0001\u0000\u0000\u0000\u05ee"+ - "\u05ef\u0001\u0000\u0000\u0000\u05ef\u05f0\u0005\u0003\u0000\u0000\u05f0"+ - "\u0713\u0001\u0000\u0000\u0000\u05f1\u05f2\u0005\u00e1\u0000\u0000\u05f2"+ - "\u05f3\u0005\u0002\u0000\u0000\u05f3\u05f6\u0003\u0002\u0001\u0000\u05f4"+ - "\u05f5\u0005\u0004\u0000\u0000\u05f5\u05f7\u0003\u0002\u0001\u0000\u05f6"+ - "\u05f4\u0001\u0000\u0000\u0000\u05f6\u05f7\u0001\u0000\u0000\u0000\u05f7"+ - "\u05f8\u0001\u0000\u0000\u0000\u05f8\u05f9\u0005\u0003\u0000\u0000\u05f9"+ - "\u0713\u0001\u0000\u0000\u0000\u05fa\u05fb\u0005\u00e2\u0000\u0000\u05fb"+ - "\u05fc\u0005\u0002\u0000\u0000\u05fc\u05ff\u0003\u0002\u0001\u0000\u05fd"+ - "\u05fe\u0005\u0004\u0000\u0000\u05fe\u0600\u0003\u0002\u0001\u0000\u05ff"+ - "\u05fd\u0001\u0000\u0000\u0000\u05ff\u0600\u0001\u0000\u0000\u0000\u0600"+ - "\u0601\u0001\u0000\u0000\u0000\u0601\u0602\u0005\u0003\u0000\u0000\u0602"+ - "\u0713\u0001\u0000\u0000\u0000\u0603\u0604\u0005\u00e3\u0000\u0000\u0604"+ - "\u0605\u0005\u0002\u0000\u0000\u0605\u0606\u0003\u0002\u0001\u0000\u0606"+ - "\u0607\u0005\u0004\u0000\u0000\u0607\u060e\u0003\u0002\u0001\u0000\u0608"+ - "\u0609\u0005\u0004\u0000\u0000\u0609\u060c\u0003\u0002\u0001\u0000\u060a"+ - "\u060b\u0005\u0004\u0000\u0000\u060b\u060d\u0003\u0002\u0001\u0000\u060c"+ - "\u060a\u0001\u0000\u0000\u0000\u060c\u060d\u0001\u0000\u0000\u0000\u060d"+ - "\u060f\u0001\u0000\u0000\u0000\u060e\u0608\u0001\u0000\u0000\u0000\u060e"+ - "\u060f\u0001\u0000\u0000\u0000\u060f\u0610\u0001\u0000\u0000\u0000\u0610"+ - "\u0611\u0005\u0003\u0000\u0000\u0611\u0713\u0001\u0000\u0000\u0000\u0612"+ - "\u0613\u0005\u00e4\u0000\u0000\u0613\u0614\u0005\u0002\u0000\u0000\u0614"+ - "\u0615\u0003\u0002\u0001\u0000\u0615\u0616\u0005\u0004\u0000\u0000\u0616"+ - "\u061d\u0003\u0002\u0001\u0000\u0617\u0618\u0005\u0004\u0000\u0000\u0618"+ - "\u061b\u0003\u0002\u0001\u0000\u0619\u061a\u0005\u0004\u0000\u0000\u061a"+ - "\u061c\u0003\u0002\u0001\u0000\u061b\u0619\u0001\u0000\u0000\u0000\u061b"+ - "\u061c\u0001\u0000\u0000\u0000\u061c\u061e\u0001\u0000\u0000\u0000\u061d"+ - "\u0617\u0001\u0000\u0000\u0000\u061d\u061e\u0001\u0000\u0000\u0000\u061e"+ - "\u061f\u0001\u0000\u0000\u0000\u061f\u0620\u0005\u0003\u0000\u0000\u0620"+ - "\u0713\u0001\u0000\u0000\u0000\u0621\u0622\u0005\u00e5\u0000\u0000\u0622"+ - "\u0623\u0005\u0002\u0000\u0000\u0623\u0624\u0003\u0002\u0001\u0000\u0624"+ - "\u0625\u0005\u0004\u0000\u0000\u0625\u0626\u0003\u0002\u0001\u0000\u0626"+ - "\u0627\u0005\u0003\u0000\u0000\u0627\u0713\u0001\u0000\u0000\u0000\u0628"+ - "\u0629\u0005\u00e6\u0000\u0000\u0629\u062a\u0005\u0002\u0000\u0000\u062a"+ - "\u062d\u0003\u0002\u0001\u0000\u062b\u062c\u0005\u0004\u0000\u0000\u062c"+ - "\u062e\u0003\u0002\u0001\u0000\u062d\u062b\u0001\u0000\u0000\u0000\u062e"+ - "\u062f\u0001\u0000\u0000\u0000\u062f\u062d\u0001\u0000\u0000\u0000\u062f"+ - "\u0630\u0001\u0000\u0000\u0000\u0630\u0631\u0001\u0000\u0000\u0000\u0631"+ - "\u0632\u0005\u0003\u0000\u0000\u0632\u0713\u0001\u0000\u0000\u0000\u0633"+ - "\u0634\u0005\u00e7\u0000\u0000\u0634\u0635\u0005\u0002\u0000\u0000\u0635"+ - "\u0636\u0003\u0002\u0001\u0000\u0636\u0637\u0005\u0004\u0000\u0000\u0637"+ - "\u063a\u0003\u0002\u0001\u0000\u0638\u0639\u0005\u0004\u0000\u0000\u0639"+ - "\u063b\u0003\u0002\u0001\u0000\u063a\u0638\u0001\u0000\u0000\u0000\u063a"+ - "\u063b\u0001\u0000\u0000\u0000\u063b\u063c\u0001\u0000\u0000\u0000\u063c"+ - "\u063d\u0005\u0003\u0000\u0000\u063d\u0713\u0001\u0000\u0000\u0000\u063e"+ - "\u063f\u0005\u00e8\u0000\u0000\u063f\u0640\u0005\u0002\u0000\u0000\u0640"+ - "\u0641\u0003\u0002\u0001\u0000\u0641\u0642\u0005\u0004\u0000\u0000\u0642"+ - "\u0645\u0003\u0002\u0001\u0000\u0643\u0644\u0005\u0004\u0000\u0000\u0644"+ - "\u0646\u0003\u0002\u0001\u0000\u0645\u0643\u0001\u0000\u0000\u0000\u0645"+ - "\u0646\u0001\u0000\u0000\u0000\u0646\u0647\u0001\u0000\u0000\u0000\u0647"+ - "\u0648\u0005\u0003\u0000\u0000\u0648\u0713\u0001\u0000\u0000\u0000\u0649"+ - "\u064a\u0005\u00e9\u0000\u0000\u064a\u064b\u0005\u0002\u0000\u0000\u064b"+ - "\u064c\u0003\u0002\u0001\u0000\u064c\u064d\u0005\u0004\u0000\u0000\u064d"+ - "\u0650\u0003\u0002\u0001\u0000\u064e\u064f\u0005\u0004\u0000\u0000\u064f"+ - "\u0651\u0003\u0002\u0001\u0000\u0650\u064e\u0001\u0000\u0000\u0000\u0650"+ - "\u0651\u0001\u0000\u0000\u0000\u0651\u0652\u0001\u0000\u0000\u0000\u0652"+ - "\u0653\u0005\u0003\u0000\u0000\u0653\u0713\u0001\u0000\u0000\u0000\u0654"+ - "\u0655\u0005\u00ea\u0000\u0000\u0655\u0656\u0005\u0002\u0000\u0000\u0656"+ - "\u0657\u0003\u0002\u0001\u0000\u0657\u0658\u0005\u0003\u0000\u0000\u0658"+ - "\u0713\u0001\u0000\u0000\u0000\u0659\u065a\u0005\u00eb\u0000\u0000\u065a"+ - "\u065b\u0005\u0002\u0000\u0000\u065b\u065c\u0003\u0002\u0001\u0000\u065c"+ - "\u065d\u0005\u0003\u0000\u0000\u065d\u0713\u0001\u0000\u0000\u0000\u065e"+ - "\u065f\u0005\u00ec\u0000\u0000\u065f\u0660\u0005\u0002\u0000\u0000\u0660"+ - "\u0667\u0003\u0002\u0001\u0000\u0661\u0662\u0005\u0004\u0000\u0000\u0662"+ - "\u0665\u0003\u0002\u0001\u0000\u0663\u0664\u0005\u0004\u0000\u0000\u0664"+ - "\u0666\u0003\u0002\u0001\u0000\u0665\u0663\u0001\u0000\u0000\u0000\u0665"+ - "\u0666\u0001\u0000\u0000\u0000\u0666\u0668\u0001\u0000\u0000\u0000\u0667"+ - "\u0661\u0001\u0000\u0000\u0000\u0667\u0668\u0001\u0000\u0000\u0000\u0668"+ - "\u0669\u0001\u0000\u0000\u0000\u0669\u066a\u0005\u0003\u0000\u0000\u066a"+ - "\u0713\u0001\u0000\u0000\u0000\u066b\u066c\u0005\u00ed\u0000\u0000\u066c"+ - "\u066d\u0005\u0002\u0000\u0000\u066d\u0674\u0003\u0002\u0001\u0000\u066e"+ - "\u066f\u0005\u0004\u0000\u0000\u066f\u0672\u0003\u0002\u0001\u0000\u0670"+ - "\u0671\u0005\u0004\u0000\u0000\u0671\u0673\u0003\u0002\u0001\u0000\u0672"+ - "\u0670\u0001\u0000\u0000\u0000\u0672\u0673\u0001\u0000\u0000\u0000\u0673"+ - "\u0675\u0001\u0000\u0000\u0000\u0674\u066e\u0001\u0000\u0000\u0000\u0674"+ - "\u0675\u0001\u0000\u0000\u0000\u0675\u0676\u0001\u0000\u0000\u0000\u0676"+ - "\u0677\u0005\u0003\u0000\u0000\u0677\u0713\u0001\u0000\u0000\u0000\u0678"+ - "\u0679\u0005\u00ee\u0000\u0000\u0679\u067a\u0005\u0002\u0000\u0000\u067a"+ - "\u067b\u0003\u0002\u0001\u0000\u067b\u067c\u0005\u0003\u0000\u0000\u067c"+ - "\u0713\u0001\u0000\u0000\u0000\u067d\u067e\u0005\u00ef\u0000\u0000\u067e"+ - "\u067f\u0005\u0002\u0000\u0000\u067f\u0680\u0003\u0002\u0001\u0000\u0680"+ - "\u0681\u0005\u0004\u0000\u0000\u0681\u0682\u0003\u0002\u0001\u0000\u0682"+ - "\u0683\u0005\u0003\u0000\u0000\u0683\u0713\u0001\u0000\u0000\u0000\u0684"+ - "\u0685\u0005\u00f0\u0000\u0000\u0685\u0686\u0005\u0002\u0000\u0000\u0686"+ - "\u0687\u0003\u0002\u0001\u0000\u0687\u0688\u0005\u0004\u0000\u0000\u0688"+ - "\u0689\u0003\u0002\u0001\u0000\u0689\u068a\u0005\u0003\u0000\u0000\u068a"+ - "\u0713\u0001\u0000\u0000\u0000\u068b\u068c\u0005\u00fd\u0000\u0000\u068c"+ - "\u0695\u0005\u0002\u0000\u0000\u068d\u0692\u0003\u0002\u0001\u0000\u068e"+ - "\u068f\u0005\u0004\u0000\u0000\u068f\u0691\u0003\u0002\u0001\u0000\u0690"+ - "\u068e\u0001\u0000\u0000\u0000\u0691\u0694\u0001\u0000\u0000\u0000\u0692"+ - "\u0690\u0001\u0000\u0000\u0000\u0692\u0693\u0001\u0000\u0000\u0000\u0693"+ - "\u0696\u0001\u0000\u0000\u0000\u0694\u0692\u0001\u0000\u0000\u0000\u0695"+ - "\u068d\u0001\u0000\u0000\u0000\u0695\u0696\u0001\u0000\u0000\u0000\u0696"+ - "\u0697\u0001\u0000\u0000\u0000\u0697\u0713\u0005\u0003\u0000\u0000\u0698"+ - "\u0699\u0005\u00f3\u0000\u0000\u0699\u069a\u0005\u0002\u0000\u0000\u069a"+ - "\u069b\u0003\u0002\u0001\u0000\u069b\u069c\u0005\u0004\u0000\u0000\u069c"+ - "\u069d\u0003\u0002\u0001\u0000\u069d\u069e\u0005\u0003\u0000\u0000\u069e"+ - "\u0713\u0001\u0000\u0000\u0000\u069f\u06a0\u0005\u00f4\u0000\u0000\u06a0"+ - "\u06a1\u0005\u0002\u0000\u0000\u06a1\u06a2\u0003\u0002\u0001\u0000\u06a2"+ - "\u06a3\u0005\u0004\u0000\u0000\u06a3\u06a4\u0003\u0002\u0001\u0000\u06a4"+ - "\u06a5\u0005\u0003\u0000\u0000\u06a5\u0713\u0001\u0000\u0000\u0000\u06a6"+ - "\u06a7\u0005\u00f5\u0000\u0000\u06a7\u06a8\u0005\u0002\u0000\u0000\u06a8"+ - "\u06a9\u0003\u0002\u0001\u0000\u06a9\u06aa\u0005\u0004\u0000\u0000\u06aa"+ - "\u06ab\u0003\u0002\u0001\u0000\u06ab\u06ac\u0005\u0003\u0000\u0000\u06ac"+ - "\u0713\u0001\u0000\u0000\u0000\u06ad\u06ae\u0005\u00f6\u0000\u0000\u06ae"+ - "\u06af\u0005\u0002\u0000\u0000\u06af\u06b0\u0003\u0002\u0001\u0000\u06b0"+ - "\u06b1\u0005\u0004\u0000\u0000\u06b1\u06b2\u0003\u0002\u0001\u0000\u06b2"+ - "\u06b3\u0005\u0003\u0000\u0000\u06b3\u0713\u0001\u0000\u0000\u0000\u06b4"+ - "\u06b5\u0005\u00f7\u0000\u0000\u06b5\u06b6\u0005\u0002\u0000\u0000\u06b6"+ - "\u06b7\u0003\u0002\u0001\u0000\u06b7\u06b8\u0005\u0004\u0000\u0000\u06b8"+ - "\u06b9\u0003\u0002\u0001\u0000\u06b9\u06ba\u0005\u0003\u0000\u0000\u06ba"+ - "\u0713\u0001\u0000\u0000\u0000\u06bb\u06bc\u0005\u00f8\u0000\u0000\u06bc"+ - "\u06bd\u0005\u0002\u0000\u0000\u06bd\u06be\u0003\u0002\u0001\u0000\u06be"+ - "\u06bf\u0005\u0004\u0000\u0000\u06bf\u06c0\u0003\u0002\u0001\u0000\u06c0"+ - "\u06c1\u0005\u0003\u0000\u0000\u06c1\u0713\u0001\u0000\u0000\u0000\u06c2"+ - "\u06c3\u0005\u00f9\u0000\u0000\u06c3\u06c4\u0005\u0002\u0000\u0000\u06c4"+ - "\u06c7\u0003\u0002\u0001\u0000\u06c5\u06c6\u0005\u0004\u0000\u0000\u06c6"+ - "\u06c8\u0003\u0002\u0001\u0000\u06c7\u06c5\u0001\u0000\u0000\u0000\u06c7"+ - "\u06c8\u0001\u0000\u0000\u0000\u06c8\u06c9\u0001\u0000\u0000\u0000\u06c9"+ - "\u06ca\u0005\u0003\u0000\u0000\u06ca\u0713\u0001\u0000\u0000\u0000\u06cb"+ - "\u06cc\u0005\u00fc\u0000\u0000\u06cc\u06cd\u0005\u0002\u0000\u0000\u06cd"+ - "\u06d0\u0003\u0002\u0001\u0000\u06ce\u06cf\u0005\u0004\u0000\u0000\u06cf"+ - "\u06d1\u0003\u0002\u0001\u0000\u06d0\u06ce\u0001\u0000\u0000\u0000\u06d0"+ - "\u06d1\u0001\u0000\u0000\u0000\u06d1\u06d2\u0001\u0000\u0000\u0000\u06d2"+ - "\u06d3\u0005\u0003\u0000\u0000\u06d3\u0713\u0001\u0000\u0000\u0000\u06d4"+ - "\u06d5\u0005!\u0000\u0000\u06d5\u06d7\u0005\u0002\u0000\u0000\u06d6\u06d8"+ - "\u0003\u0002\u0001\u0000\u06d7\u06d6\u0001\u0000\u0000\u0000\u06d7\u06d8"+ - "\u0001\u0000\u0000\u0000\u06d8\u06d9\u0001\u0000\u0000\u0000\u06d9\u0713"+ - "\u0005\u0003\u0000\u0000\u06da\u06db\u0005\u00fa\u0000\u0000\u06db\u06dc"+ - "\u0005\u0002\u0000\u0000\u06dc\u06dd\u0003\u0002\u0001\u0000\u06dd\u06de"+ - "\u0005\u0004\u0000\u0000\u06de\u06df\u0003\u0002\u0001\u0000\u06df\u06e0"+ - "\u0005\u0003\u0000\u0000\u06e0\u0713\u0001\u0000\u0000\u0000\u06e1\u06e2"+ - "\u0005\u00fb\u0000\u0000\u06e2\u06e3\u0005\u0002\u0000\u0000\u06e3\u06e4"+ - "\u0003\u0002\u0001\u0000\u06e4\u06e5\u0005\u0004\u0000\u0000\u06e5\u06e6"+ - "\u0003\u0002\u0001\u0000\u06e6\u06e7\u0005\u0003\u0000\u0000\u06e7\u0713"+ - "\u0001\u0000\u0000\u0000\u06e8\u06e9\u0005\u001b\u0000\u0000\u06e9\u06ee"+ - "\u0003\b\u0004\u0000\u06ea\u06eb\u0005\u0004\u0000\u0000\u06eb\u06ed\u0003"+ - "\b\u0004\u0000\u06ec\u06ea\u0001\u0000\u0000\u0000\u06ed\u06f0\u0001\u0000"+ - "\u0000\u0000\u06ee\u06ec\u0001\u0000\u0000\u0000\u06ee\u06ef\u0001\u0000"+ - "\u0000\u0000\u06ef\u06f4\u0001\u0000\u0000\u0000\u06f0\u06ee\u0001\u0000"+ - "\u0000\u0000\u06f1\u06f3\u0005\u0004\u0000\u0000\u06f2\u06f1\u0001\u0000"+ - "\u0000\u0000\u06f3\u06f6\u0001\u0000\u0000\u0000\u06f4\u06f2\u0001\u0000"+ - "\u0000\u0000\u06f4\u06f5\u0001\u0000\u0000\u0000\u06f5\u06f7\u0001\u0000"+ - "\u0000\u0000\u06f6\u06f4\u0001\u0000\u0000\u0000\u06f7\u06f8\u0005\u001c"+ - "\u0000\u0000\u06f8\u0713\u0001\u0000\u0000\u0000\u06f9\u06fa\u0005\u0005"+ - "\u0000\u0000\u06fa\u06ff\u0003\u0002\u0001\u0000\u06fb\u06fc\u0005\u0004"+ - "\u0000\u0000\u06fc\u06fe\u0003\u0002\u0001\u0000\u06fd\u06fb\u0001\u0000"+ - "\u0000\u0000\u06fe\u0701\u0001\u0000\u0000\u0000\u06ff\u06fd\u0001\u0000"+ - "\u0000\u0000\u06ff\u0700\u0001\u0000\u0000\u0000\u0700\u0705\u0001\u0000"+ - "\u0000\u0000\u0701\u06ff\u0001\u0000\u0000\u0000\u0702\u0704\u0005\u0004"+ - "\u0000\u0000\u0703\u0702\u0001\u0000\u0000\u0000\u0704\u0707\u0001\u0000"+ - "\u0000\u0000\u0705\u0703\u0001\u0000\u0000\u0000\u0705\u0706\u0001\u0000"+ - "\u0000\u0000\u0706\u0708\u0001\u0000\u0000\u0000\u0707\u0705\u0001\u0000"+ - "\u0000\u0000\u0708\u0709\u0005\u0006\u0000\u0000\u0709\u0713\u0001\u0000"+ - "\u0000\u0000\u070a\u0713\u0005\u00f2\u0000\u0000\u070b\u0713\u0005\u00fd"+ - "\u0000\u0000\u070c\u070e\u0003\u0004\u0002\u0000\u070d\u070f\u0003\u0006"+ - "\u0003\u0000\u070e\u070d\u0001\u0000\u0000\u0000\u070e\u070f\u0001\u0000"+ - "\u0000\u0000\u070f\u0713\u0001\u0000\u0000\u0000\u0710\u0713\u0005\u001f"+ - "\u0000\u0000\u0711\u0713\u0005 \u0000\u0000\u0712\u000f\u0001\u0000\u0000"+ - "\u0000\u0712\u0014\u0001\u0000\u0000\u0000\u0712\u0016\u0001\u0000\u0000"+ - "\u0000\u0712\"\u0001\u0000\u0000\u0000\u0712-\u0001\u0000\u0000\u0000"+ - "\u07122\u0001\u0000\u0000\u0000\u07127\u0001\u0000\u0000\u0000\u0712@"+ - "\u0001\u0000\u0000\u0000\u0712E\u0001\u0000\u0000\u0000\u0712J\u0001\u0000"+ - "\u0000\u0000\u0712O\u0001\u0000\u0000\u0000\u0712T\u0001\u0000\u0000\u0000"+ - "\u0712_\u0001\u0000\u0000\u0000\u0712h\u0001\u0000\u0000\u0000\u0712q"+ - "\u0001\u0000\u0000\u0000\u0712}\u0001\u0000\u0000\u0000\u0712\u0089\u0001"+ - "\u0000\u0000\u0000\u0712\u008e\u0001\u0000\u0000\u0000\u0712\u0093\u0001"+ - "\u0000\u0000\u0000\u0712\u0098\u0001\u0000\u0000\u0000\u0712\u009d\u0001"+ - "\u0000\u0000\u0000\u0712\u00a2\u0001\u0000\u0000\u0000\u0712\u00ab\u0001"+ - "\u0000\u0000\u0000\u0712\u00b4\u0001\u0000\u0000\u0000\u0712\u00bd\u0001"+ - "\u0000\u0000\u0000\u0712\u00c6\u0001\u0000\u0000\u0000\u0712\u00cb\u0001"+ - "\u0000\u0000\u0000\u0712\u00d4\u0001\u0000\u0000\u0000\u0712\u00dd\u0001"+ - "\u0000\u0000\u0000\u0712\u00e2\u0001\u0000\u0000\u0000\u0712\u00eb\u0001"+ - "\u0000\u0000\u0000\u0712\u00f4\u0001\u0000\u0000\u0000\u0712\u00f9\u0001"+ - "\u0000\u0000\u0000\u0712\u0102\u0001\u0000\u0000\u0000\u0712\u0107\u0001"+ - "\u0000\u0000\u0000\u0712\u010f\u0001\u0000\u0000\u0000\u0712\u0117\u0001"+ - "\u0000\u0000\u0000\u0712\u011c\u0001\u0000\u0000\u0000\u0712\u0121\u0001"+ - "\u0000\u0000\u0000\u0712\u0126\u0001\u0000\u0000\u0000\u0712\u012b\u0001"+ - "\u0000\u0000\u0000\u0712\u0136\u0001\u0000\u0000\u0000\u0712\u0141\u0001"+ - "\u0000\u0000\u0000\u0712\u0148\u0001\u0000\u0000\u0000\u0712\u014f\u0001"+ - "\u0000\u0000\u0000\u0712\u0154\u0001\u0000\u0000\u0000\u0712\u0159\u0001"+ - "\u0000\u0000\u0000\u0712\u015e\u0001\u0000\u0000\u0000\u0712\u0163\u0001"+ - "\u0000\u0000\u0000\u0712\u0168\u0001\u0000\u0000\u0000\u0712\u016d\u0001"+ - "\u0000\u0000\u0000\u0712\u0172\u0001\u0000\u0000\u0000\u0712\u0177\u0001"+ - "\u0000\u0000\u0000\u0712\u017c\u0001\u0000\u0000\u0000\u0712\u0181\u0001"+ - "\u0000\u0000\u0000\u0712\u0186\u0001\u0000\u0000\u0000\u0712\u018b\u0001"+ - "\u0000\u0000\u0000\u0712\u0190\u0001\u0000\u0000\u0000\u0712\u0195\u0001"+ - "\u0000\u0000\u0000\u0712\u019c\u0001\u0000\u0000\u0000\u0712\u01a5\u0001"+ - "\u0000\u0000\u0000\u0712\u01ac\u0001\u0000\u0000\u0000\u0712\u01b3\u0001"+ - "\u0000\u0000\u0000\u0712\u01bc\u0001\u0000\u0000\u0000\u0712\u01c5\u0001"+ - "\u0000\u0000\u0000\u0712\u01ca\u0001\u0000\u0000\u0000\u0712\u01cf\u0001"+ - "\u0000\u0000\u0000\u0712\u01d6\u0001\u0000\u0000\u0000\u0712\u01d9\u0001"+ - "\u0000\u0000\u0000\u0712\u01e0\u0001\u0000\u0000\u0000\u0712\u01e5\u0001"+ - "\u0000\u0000\u0000\u0712\u01ea\u0001\u0000\u0000\u0000\u0712\u01f1\u0001"+ - "\u0000\u0000\u0000\u0712\u01f6\u0001\u0000\u0000\u0000\u0712\u01fb\u0001"+ - "\u0000\u0000\u0000\u0712\u0204\u0001\u0000\u0000\u0000\u0712\u0209\u0001"+ - "\u0000\u0000\u0000\u0712\u0215\u0001\u0000\u0000\u0000\u0712\u0221\u0001"+ - "\u0000\u0000\u0000\u0712\u0226\u0001\u0000\u0000\u0000\u0712\u0232\u0001"+ - "\u0000\u0000\u0000\u0712\u0237\u0001\u0000\u0000\u0000\u0712\u023c\u0001"+ - "\u0000\u0000\u0000\u0712\u0241\u0001\u0000\u0000\u0000\u0712\u0246\u0001"+ - "\u0000\u0000\u0000\u0712\u024b\u0001\u0000\u0000\u0000\u0712\u0257\u0001"+ - "\u0000\u0000\u0000\u0712\u025e\u0001\u0000\u0000\u0000\u0712\u0269\u0001"+ - "\u0000\u0000\u0000\u0712\u0276\u0001\u0000\u0000\u0000\u0712\u027f\u0001"+ - "\u0000\u0000\u0000\u0712\u0284\u0001\u0000\u0000\u0000\u0712\u0289\u0001"+ - "\u0000\u0000\u0000\u0712\u0292\u0001\u0000\u0000\u0000\u0712\u0297\u0001"+ - "\u0000\u0000\u0000\u0712\u02a4\u0001\u0000\u0000\u0000\u0712\u02ab\u0001"+ - "\u0000\u0000\u0000\u0712\u02b4\u0001\u0000\u0000\u0000\u0712\u02b9\u0001"+ - "\u0000\u0000\u0000\u0712\u02c4\u0001\u0000\u0000\u0000\u0712\u02d1\u0001"+ - "\u0000\u0000\u0000\u0712\u02d6\u0001\u0000\u0000\u0000\u0712\u02dd\u0001"+ - "\u0000\u0000\u0000\u0712\u02e2\u0001\u0000\u0000\u0000\u0712\u02e7\u0001"+ - "\u0000\u0000\u0000\u0712\u02ec\u0001\u0000\u0000\u0000\u0712\u02f5\u0001"+ - "\u0000\u0000\u0000\u0712\u02fa\u0001\u0000\u0000\u0000\u0712\u030f\u0001"+ - "\u0000\u0000\u0000\u0712\u031a\u0001\u0000\u0000\u0000\u0712\u031d\u0001"+ - "\u0000\u0000\u0000\u0712\u0320\u0001\u0000\u0000\u0000\u0712\u0325\u0001"+ - "\u0000\u0000\u0000\u0712\u032a\u0001\u0000\u0000\u0000\u0712\u032f\u0001"+ - "\u0000\u0000\u0000\u0712\u0334\u0001\u0000\u0000\u0000\u0712\u0339\u0001"+ - "\u0000\u0000\u0000\u0712\u033e\u0001\u0000\u0000\u0000\u0712\u0347\u0001"+ - "\u0000\u0000\u0000\u0712\u0350\u0001\u0000\u0000\u0000\u0712\u035b\u0001"+ - "\u0000\u0000\u0000\u0712\u0362\u0001\u0000\u0000\u0000\u0712\u0369\u0001"+ - "\u0000\u0000\u0000\u0712\u0374\u0001\u0000\u0000\u0000\u0712\u037f\u0001"+ - "\u0000\u0000\u0000\u0712\u0388\u0001\u0000\u0000\u0000\u0712\u0393\u0001"+ - "\u0000\u0000\u0000\u0712\u039e\u0001\u0000\u0000\u0000\u0712\u03a9\u0001"+ - "\u0000\u0000\u0000\u0712\u03b0\u0001\u0000\u0000\u0000\u0712\u03bc\u0001"+ - "\u0000\u0000\u0000\u0712\u03c3\u0001\u0000\u0000\u0000\u0712\u03ca\u0001"+ - "\u0000\u0000\u0000\u0712\u03d1\u0001\u0000\u0000\u0000\u0712\u03d8\u0001"+ - "\u0000\u0000\u0000\u0712\u03e4\u0001\u0000\u0000\u0000\u0712\u03ef\u0001"+ - "\u0000\u0000\u0000\u0712\u03fb\u0001\u0000\u0000\u0000\u0712\u0407\u0001"+ - "\u0000\u0000\u0000\u0712\u0413\u0001\u0000\u0000\u0000\u0712\u041f\u0001"+ - "\u0000\u0000\u0000\u0712\u042b\u0001\u0000\u0000\u0000\u0712\u0436\u0001"+ - "\u0000\u0000\u0000\u0712\u0442\u0001\u0000\u0000\u0000\u0712\u044e\u0001"+ - "\u0000\u0000\u0000\u0712\u045a\u0001\u0000\u0000\u0000\u0712\u0461\u0001"+ - "\u0000\u0000\u0000\u0712\u0468\u0001\u0000\u0000\u0000\u0712\u0474\u0001"+ - "\u0000\u0000\u0000\u0712\u0480\u0001\u0000\u0000\u0000\u0712\u048c\u0001"+ - "\u0000\u0000\u0000\u0712\u0497\u0001\u0000\u0000\u0000\u0712\u04a0\u0001"+ - "\u0000\u0000\u0000\u0712\u04a5\u0001\u0000\u0000\u0000\u0712\u04aa\u0001"+ - "\u0000\u0000\u0000\u0712\u04b3\u0001\u0000\u0000\u0000\u0712\u04bc\u0001"+ - "\u0000\u0000\u0000\u0712\u04c7\u0001\u0000\u0000\u0000\u0712\u04d0\u0001"+ - "\u0000\u0000\u0000\u0712\u04d9\u0001\u0000\u0000\u0000\u0712\u04e2\u0001"+ - "\u0000\u0000\u0000\u0712\u04e7\u0001\u0000\u0000\u0000\u0712\u04ec\u0001"+ - "\u0000\u0000\u0000\u0712\u04f7\u0001\u0000\u0000\u0000\u0712\u0500\u0001"+ - "\u0000\u0000\u0000\u0712\u0505\u0001\u0000\u0000\u0000\u0712\u0510\u0001"+ - "\u0000\u0000\u0000\u0712\u0519\u0001\u0000\u0000\u0000\u0712\u0522\u0001"+ - "\u0000\u0000\u0000\u0712\u052b\u0001\u0000\u0000\u0000\u0712\u0534\u0001"+ - "\u0000\u0000\u0000\u0712\u053d\u0001\u0000\u0000\u0000\u0712\u0544\u0001"+ - "\u0000\u0000\u0000\u0712\u054f\u0001\u0000\u0000\u0000\u0712\u0554\u0001"+ - "\u0000\u0000\u0000\u0712\u0559\u0001\u0000\u0000\u0000\u0712\u055e\u0001"+ - "\u0000\u0000\u0000\u0712\u0563\u0001\u0000\u0000\u0000\u0712\u056c\u0001"+ - "\u0000\u0000\u0000\u0712\u0575\u0001\u0000\u0000\u0000\u0712\u057e\u0001"+ - "\u0000\u0000\u0000\u0712\u0587\u0001\u0000\u0000\u0000\u0712\u058e\u0001"+ - "\u0000\u0000\u0000\u0712\u0597\u0001\u0000\u0000\u0000\u0712\u059e\u0001"+ - "\u0000\u0000\u0000\u0712\u05a1\u0001\u0000\u0000\u0000\u0712\u05aa\u0001"+ - "\u0000\u0000\u0000\u0712\u05b3\u0001\u0000\u0000\u0000\u0712\u05bc\u0001"+ - "\u0000\u0000\u0000\u0712\u05c5\u0001\u0000\u0000\u0000\u0712\u05d0\u0001"+ - "\u0000\u0000\u0000\u0712\u05db\u0001\u0000\u0000\u0000\u0712\u05e6\u0001"+ - "\u0000\u0000\u0000\u0712\u05f1\u0001\u0000\u0000\u0000\u0712\u05fa\u0001"+ - "\u0000\u0000\u0000\u0712\u0603\u0001\u0000\u0000\u0000\u0712\u0612\u0001"+ - "\u0000\u0000\u0000\u0712\u0621\u0001\u0000\u0000\u0000\u0712\u0628\u0001"+ - "\u0000\u0000\u0000\u0712\u0633\u0001\u0000\u0000\u0000\u0712\u063e\u0001"+ - "\u0000\u0000\u0000\u0712\u0649\u0001\u0000\u0000\u0000\u0712\u0654\u0001"+ - "\u0000\u0000\u0000\u0712\u0659\u0001\u0000\u0000\u0000\u0712\u065e\u0001"+ - "\u0000\u0000\u0000\u0712\u066b\u0001\u0000\u0000\u0000\u0712\u0678\u0001"+ - "\u0000\u0000\u0000\u0712\u067d\u0001\u0000\u0000\u0000\u0712\u0684\u0001"+ - "\u0000\u0000\u0000\u0712\u068b\u0001\u0000\u0000\u0000\u0712\u0698\u0001"+ - "\u0000\u0000\u0000\u0712\u069f\u0001\u0000\u0000\u0000\u0712\u06a6\u0001"+ - "\u0000\u0000\u0000\u0712\u06ad\u0001\u0000\u0000\u0000\u0712\u06b4\u0001"+ - "\u0000\u0000\u0000\u0712\u06bb\u0001\u0000\u0000\u0000\u0712\u06c2\u0001"+ - "\u0000\u0000\u0000\u0712\u06cb\u0001\u0000\u0000\u0000\u0712\u06d4\u0001"+ - "\u0000\u0000\u0000\u0712\u06da\u0001\u0000\u0000\u0000\u0712\u06e1\u0001"+ - "\u0000\u0000\u0000\u0712\u06e8\u0001\u0000\u0000\u0000\u0712\u06f9\u0001"+ - "\u0000\u0000\u0000\u0712\u070a\u0001\u0000\u0000\u0000\u0712\u070b\u0001"+ - "\u0000\u0000\u0000\u0712\u070c\u0001\u0000\u0000\u0000\u0712\u0710\u0001"+ - "\u0000\u0000\u0000\u0712\u0711\u0001\u0000\u0000\u0000\u0713\u0a22\u0001"+ - "\u0000\u0000\u0000\u0714\u0715\n\u00e9\u0000\u0000\u0715\u0716\u0007\u0000"+ - "\u0000\u0000\u0716\u0a21\u0003\u0002\u0001\u00ea\u0717\u0718\n\u00e8\u0000"+ - "\u0000\u0718\u0719\u0007\u0001\u0000\u0000\u0719\u0a21\u0003\u0002\u0001"+ - "\u00e9\u071a\u071b\n\u00e7\u0000\u0000\u071b\u071c\u0007\u0002\u0000\u0000"+ - "\u071c\u0a21\u0003\u0002\u0001\u00e8\u071d\u071e\n\u00e6\u0000\u0000\u071e"+ - "\u071f\u0007\u0003\u0000\u0000\u071f\u0a21\u0003\u0002\u0001\u00e7\u0720"+ - "\u0721\n\u00e5\u0000\u0000\u0721\u0722\u0007\u0004\u0000\u0000\u0722\u0a21"+ - "\u0003\u0002\u0001\u00e6\u0723\u0724\n\u00e4\u0000\u0000\u0724\u0725\u0007"+ - "\u0005\u0000\u0000\u0725\u0a21\u0003\u0002\u0001\u00e5\u0726\u0727\n\u00e3"+ - "\u0000\u0000\u0727\u0728\u0005\u0019\u0000\u0000\u0728\u0729\u0003\u0002"+ - "\u0001\u0000\u0729\u072a\u0005\u001a\u0000\u0000\u072a\u072b\u0003\u0002"+ - "\u0001\u00e4\u072b\u0a21\u0001\u0000\u0000\u0000\u072c\u072d\n\u0150\u0000"+ - "\u0000\u072d\u072e\u0005\u0001\u0000\u0000\u072e\u072f\u0005%\u0000\u0000"+ - "\u072f\u0730\u0005\u0002\u0000\u0000\u0730\u0a21\u0005\u0003\u0000\u0000"+ - "\u0731\u0732\n\u014f\u0000\u0000\u0732\u0733\u0005\u0001\u0000\u0000\u0733"+ - "\u0734\u0005&\u0000\u0000\u0734\u0735\u0005\u0002\u0000\u0000\u0735\u0a21"+ - "\u0005\u0003\u0000\u0000\u0736\u0737\n\u014e\u0000\u0000\u0737\u0738\u0005"+ - "\u0001\u0000\u0000\u0738\u0739\u0005(\u0000\u0000\u0739\u073a\u0005\u0002"+ - "\u0000\u0000\u073a\u0a21\u0005\u0003\u0000\u0000\u073b\u073c\n\u014d\u0000"+ - "\u0000\u073c\u073d\u0005\u0001\u0000\u0000\u073d\u073e\u0005)\u0000\u0000"+ - "\u073e\u073f\u0005\u0002\u0000\u0000\u073f\u0a21\u0005\u0003\u0000\u0000"+ - "\u0740\u0741\n\u014c\u0000\u0000\u0741\u0742\u0005\u0001\u0000\u0000\u0742"+ - "\u0743\u0005*\u0000\u0000\u0743\u0744\u0005\u0002\u0000\u0000\u0744\u0a21"+ - "\u0005\u0003\u0000\u0000\u0745\u0746\n\u014b\u0000\u0000\u0746\u0747\u0005"+ - "\u0001\u0000\u0000\u0747\u0748\u0005+\u0000\u0000\u0748\u0749\u0005\u0002"+ - "\u0000\u0000\u0749\u0a21\u0005\u0003\u0000\u0000\u074a\u074b\n\u014a\u0000"+ - "\u0000\u074b\u074c\u0005\u0001\u0000\u0000\u074c\u074d\u0005\'\u0000\u0000"+ - "\u074d\u074f\u0005\u0002\u0000\u0000\u074e\u0750\u0003\u0002\u0001\u0000"+ - "\u074f\u074e\u0001\u0000\u0000\u0000\u074f\u0750\u0001\u0000\u0000\u0000"+ - "\u0750\u0751\u0001\u0000\u0000\u0000\u0751\u0a21\u0005\u0003\u0000\u0000"+ - "\u0752\u0753\n\u0149\u0000\u0000\u0753\u0754\u0005\u0001\u0000\u0000\u0754"+ - "\u0755\u0005,\u0000\u0000\u0755\u0757\u0005\u0002\u0000\u0000\u0756\u0758"+ - "\u0003\u0002\u0001\u0000\u0757\u0756\u0001\u0000\u0000\u0000\u0757\u0758"+ - "\u0001\u0000\u0000\u0000\u0758\u0759\u0001\u0000\u0000\u0000\u0759\u0a21"+ - "\u0005\u0003\u0000\u0000\u075a\u075b\n\u0148\u0000\u0000\u075b\u075c\u0005"+ - "\u0001\u0000\u0000\u075c\u075d\u0005-\u0000\u0000\u075d\u075f\u0005\u0002"+ - "\u0000\u0000\u075e\u0760\u0003\u0002\u0001\u0000\u075f\u075e\u0001\u0000"+ - "\u0000\u0000\u075f\u0760\u0001\u0000\u0000\u0000\u0760\u0761\u0001\u0000"+ - "\u0000\u0000\u0761\u0a21\u0005\u0003\u0000\u0000\u0762\u0763\n\u0147\u0000"+ - "\u0000\u0763\u0764\u0005\u0001\u0000\u0000\u0764\u0765\u00055\u0000\u0000"+ - "\u0765\u0767\u0005\u0002\u0000\u0000\u0766\u0768\u0003\u0002\u0001\u0000"+ - "\u0767\u0766\u0001\u0000\u0000\u0000\u0767\u0768\u0001\u0000\u0000\u0000"+ - "\u0768\u0769\u0001\u0000\u0000\u0000\u0769\u0a21\u0005\u0003\u0000\u0000"+ - "\u076a\u076b\n\u0146\u0000\u0000\u076b\u076c\u0005\u0001\u0000\u0000\u076c"+ - "\u076d\u00056\u0000\u0000\u076d\u076f\u0005\u0002\u0000\u0000\u076e\u0770"+ - "\u0003\u0002\u0001\u0000\u076f\u076e\u0001\u0000\u0000\u0000\u076f\u0770"+ - "\u0001\u0000\u0000\u0000\u0770\u0771\u0001\u0000\u0000\u0000\u0771\u0a21"+ - "\u0005\u0003\u0000\u0000\u0772\u0773\n\u0145\u0000\u0000\u0773\u0774\u0005"+ - "\u0001\u0000\u0000\u0774\u0775\u00057\u0000\u0000\u0775\u0777\u0005\u0002"+ - "\u0000\u0000\u0776\u0778\u0003\u0002\u0001\u0000\u0777\u0776\u0001\u0000"+ - "\u0000\u0000\u0777\u0778\u0001\u0000\u0000\u0000\u0778\u0779\u0001\u0000"+ - "\u0000\u0000\u0779\u0a21\u0005\u0003\u0000\u0000\u077a\u077b\n\u0144\u0000"+ - "\u0000\u077b\u077c\u0005\u0001\u0000\u0000\u077c\u077d\u00058\u0000\u0000"+ - "\u077d\u077f\u0005\u0002\u0000\u0000\u077e\u0780\u0003\u0002\u0001\u0000"+ - "\u077f\u077e\u0001\u0000\u0000\u0000\u077f\u0780\u0001\u0000\u0000\u0000"+ - "\u0780\u0781\u0001\u0000\u0000\u0000\u0781\u0a21\u0005\u0003\u0000\u0000"+ - "\u0782\u0783\n\u0143\u0000\u0000\u0783\u0784\u0005\u0001\u0000\u0000\u0784"+ - "\u0785\u00059\u0000\u0000\u0785\u0786\u0005\u0002\u0000\u0000\u0786\u0a21"+ - "\u0005\u0003\u0000\u0000\u0787\u0788\n\u0142\u0000\u0000\u0788\u0789\u0005"+ - "\u0001\u0000\u0000\u0789\u078a\u0005:\u0000\u0000\u078a\u078c\u0005\u0002"+ - "\u0000\u0000\u078b\u078d\u0003\u0002\u0001\u0000\u078c\u078b\u0001\u0000"+ - "\u0000\u0000\u078c\u078d\u0001\u0000\u0000\u0000\u078d\u078e\u0001\u0000"+ - "\u0000\u0000\u078e\u0a21\u0005\u0003\u0000\u0000\u078f\u0790\n\u0141\u0000"+ - "\u0000\u0790\u0791\u0005\u0001\u0000\u0000\u0791\u0792\u0005;\u0000\u0000"+ - "\u0792\u0794\u0005\u0002\u0000\u0000\u0793\u0795\u0003\u0002\u0001\u0000"+ - "\u0794\u0793\u0001\u0000\u0000\u0000\u0794\u0795\u0001\u0000\u0000\u0000"+ - "\u0795\u0796\u0001\u0000\u0000\u0000\u0796\u0a21\u0005\u0003\u0000\u0000"+ - "\u0797\u0798\n\u0140\u0000\u0000\u0798\u0799\u0005\u0001\u0000\u0000\u0799"+ - "\u079a\u0005<\u0000\u0000\u079a\u079b\u0005\u0002\u0000\u0000\u079b\u0a21"+ - "\u0005\u0003\u0000\u0000\u079c\u079d\n\u013f\u0000\u0000\u079d\u079e\u0005"+ - "\u0001\u0000\u0000\u079e\u079f\u0005=\u0000\u0000\u079f\u07a1\u0005\u0002"+ - "\u0000\u0000\u07a0\u07a2\u0003\u0002\u0001\u0000\u07a1\u07a0\u0001\u0000"+ - "\u0000\u0000\u07a1\u07a2\u0001\u0000\u0000\u0000\u07a2\u07a3\u0001\u0000"+ - "\u0000\u0000\u07a3\u0a21\u0005\u0003\u0000\u0000\u07a4\u07a5\n\u013e\u0000"+ - "\u0000\u07a5\u07a6\u0005\u0001\u0000\u0000\u07a6\u07a7\u0005>\u0000\u0000"+ - "\u07a7\u07a9\u0005\u0002\u0000\u0000\u07a8\u07aa\u0003\u0002\u0001\u0000"+ - "\u07a9\u07a8\u0001\u0000\u0000\u0000\u07a9\u07aa\u0001\u0000\u0000\u0000"+ - "\u07aa\u07ab\u0001\u0000\u0000\u0000\u07ab\u0a21\u0005\u0003\u0000\u0000"+ - "\u07ac\u07ad\n\u013d\u0000\u0000\u07ad\u07ae\u0005\u0001\u0000\u0000\u07ae"+ - "\u07af\u0005?\u0000\u0000\u07af\u07b0\u0005\u0002\u0000\u0000\u07b0\u0a21"+ - "\u0005\u0003\u0000\u0000\u07b1\u07b2\n\u013c\u0000\u0000\u07b2\u07b3\u0005"+ - "\u0001\u0000\u0000\u07b3\u07b4\u0005@\u0000\u0000\u07b4\u07b6\u0005\u0002"+ - "\u0000\u0000\u07b5\u07b7\u0003\u0002\u0001\u0000\u07b6\u07b5\u0001\u0000"+ - "\u0000\u0000\u07b6\u07b7\u0001\u0000\u0000\u0000\u07b7\u07b8\u0001\u0000"+ - "\u0000\u0000\u07b8\u0a21\u0005\u0003\u0000\u0000\u07b9\u07ba\n\u013b\u0000"+ - "\u0000\u07ba\u07bb\u0005\u0001\u0000\u0000\u07bb\u07bc\u0005G\u0000\u0000"+ - "\u07bc\u07bd\u0005\u0002\u0000\u0000\u07bd\u0a21\u0005\u0003\u0000\u0000"+ - "\u07be\u07bf\n\u013a\u0000\u0000\u07bf\u07c0\u0005\u0001\u0000\u0000\u07c0"+ - "\u07c1\u0005p\u0000\u0000\u07c1\u07c2\u0005\u0002\u0000\u0000\u07c2\u0a21"+ - "\u0005\u0003\u0000\u0000\u07c3\u07c4\n\u0139\u0000\u0000\u07c4\u07c5\u0005"+ - "\u0001\u0000\u0000\u07c5\u07c6\u0005q\u0000\u0000\u07c6\u07c7\u0005\u0002"+ - "\u0000\u0000\u07c7\u0a21\u0005\u0003\u0000\u0000\u07c8\u07c9\n\u0138\u0000"+ - "\u0000\u07c9\u07ca\u0005\u0001\u0000\u0000\u07ca\u07cb\u0005r\u0000\u0000"+ - "\u07cb\u07cc\u0005\u0002\u0000\u0000\u07cc\u0a21\u0005\u0003\u0000\u0000"+ - "\u07cd\u07ce\n\u0137\u0000\u0000\u07ce\u07cf\u0005\u0001\u0000\u0000\u07cf"+ - "\u07d0\u0005s\u0000\u0000\u07d0\u07d1\u0005\u0002\u0000\u0000\u07d1\u0a21"+ - "\u0005\u0003\u0000\u0000\u07d2\u07d3\n\u0136\u0000\u0000\u07d3\u07d4\u0005"+ - "\u0001\u0000\u0000\u07d4\u07d5\u0005t\u0000\u0000\u07d5\u07d6\u0005\u0002"+ - "\u0000\u0000\u07d6\u0a21\u0005\u0003\u0000\u0000\u07d7\u07d8\n\u0135\u0000"+ - "\u0000\u07d8\u07d9\u0005\u0001\u0000\u0000\u07d9\u07da\u0005u\u0000\u0000"+ - "\u07da\u07e3\u0005\u0002\u0000\u0000\u07db\u07e0\u0003\u0002\u0001\u0000"+ - "\u07dc\u07dd\u0005\u0004\u0000\u0000\u07dd\u07df\u0003\u0002\u0001\u0000"+ - "\u07de\u07dc\u0001\u0000\u0000\u0000\u07df\u07e2\u0001\u0000\u0000\u0000"+ - "\u07e0\u07de\u0001\u0000\u0000\u0000\u07e0\u07e1\u0001\u0000\u0000\u0000"+ - "\u07e1\u07e4\u0001\u0000\u0000\u0000\u07e2\u07e0\u0001\u0000\u0000\u0000"+ - "\u07e3\u07db\u0001\u0000\u0000\u0000\u07e3\u07e4\u0001\u0000\u0000\u0000"+ - "\u07e4\u07e5\u0001\u0000\u0000\u0000\u07e5\u0a21\u0005\u0003\u0000\u0000"+ - "\u07e6\u07e7\n\u0134\u0000\u0000\u07e7\u07e8\u0005\u0001\u0000\u0000\u07e8"+ - "\u07e9\u0005v\u0000\u0000\u07e9\u07ea\u0005\u0002\u0000\u0000\u07ea\u07eb"+ - "\u0003\u0002\u0001\u0000\u07eb\u07ec\u0005\u0003\u0000\u0000\u07ec\u0a21"+ - "\u0001\u0000\u0000\u0000\u07ed\u07ee\n\u0133\u0000\u0000\u07ee\u07ef\u0005"+ - "\u0001\u0000\u0000\u07ef\u07f0\u0005w\u0000\u0000\u07f0\u07f1\u0005\u0002"+ - "\u0000\u0000\u07f1\u07f4\u0003\u0002\u0001\u0000\u07f2\u07f3\u0005\u0004"+ - "\u0000\u0000\u07f3\u07f5\u0003\u0002\u0001\u0000\u07f4\u07f2\u0001\u0000"+ - "\u0000\u0000\u07f4\u07f5\u0001\u0000\u0000\u0000\u07f5\u07f6\u0001\u0000"+ - "\u0000\u0000\u07f6\u07f7\u0005\u0003\u0000\u0000\u07f7\u0a21\u0001\u0000"+ - "\u0000\u0000\u07f8\u07f9\n\u0132\u0000\u0000\u07f9\u07fa\u0005\u0001\u0000"+ - "\u0000\u07fa\u07fb\u0005y\u0000\u0000\u07fb\u07fd\u0005\u0002\u0000\u0000"+ - "\u07fc\u07fe\u0003\u0002\u0001\u0000\u07fd\u07fc\u0001\u0000\u0000\u0000"+ - "\u07fd\u07fe\u0001\u0000\u0000\u0000\u07fe\u07ff\u0001\u0000\u0000\u0000"+ - "\u07ff\u0a21\u0005\u0003\u0000\u0000\u0800\u0801\n\u0131\u0000\u0000\u0801"+ - "\u0802\u0005\u0001\u0000\u0000\u0802\u0803\u0005z\u0000\u0000\u0803\u0804"+ - "\u0005\u0002\u0000\u0000\u0804\u0a21\u0005\u0003\u0000\u0000\u0805\u0806"+ - "\n\u0130\u0000\u0000\u0806\u0807\u0005\u0001\u0000\u0000\u0807\u0808\u0005"+ - "{\u0000\u0000\u0808\u0809\u0005\u0002\u0000\u0000\u0809\u0a21\u0005\u0003"+ - "\u0000\u0000\u080a\u080b\n\u012f\u0000\u0000\u080b\u080c\u0005\u0001\u0000"+ - "\u0000\u080c\u080d\u0005|\u0000\u0000\u080d\u080e\u0005\u0002\u0000\u0000"+ - "\u080e\u080f\u0003\u0002\u0001\u0000\u080f\u0810\u0005\u0004\u0000\u0000"+ - "\u0810\u0811\u0003\u0002\u0001\u0000\u0811\u0812\u0005\u0003\u0000\u0000"+ - "\u0812\u0a21\u0001\u0000\u0000\u0000\u0813\u0814\n\u012e\u0000\u0000\u0814"+ - "\u0815\u0005\u0001\u0000\u0000\u0815\u0816\u0005}\u0000\u0000\u0816\u0817"+ - "\u0005\u0002\u0000\u0000\u0817\u0a21\u0005\u0003\u0000\u0000\u0818\u0819"+ - "\n\u012d\u0000\u0000\u0819\u081a\u0005\u0001\u0000\u0000\u081a\u081b\u0005"+ - "~\u0000\u0000\u081b\u081c\u0005\u0002\u0000\u0000\u081c\u081d\u0003\u0002"+ - "\u0001\u0000\u081d\u081e\u0005\u0004\u0000\u0000\u081e\u0821\u0003\u0002"+ - "\u0001\u0000\u081f\u0820\u0005\u0004\u0000\u0000\u0820\u0822\u0003\u0002"+ - "\u0001\u0000\u0821\u081f\u0001\u0000\u0000\u0000\u0821\u0822\u0001\u0000"+ - "\u0000\u0000\u0822\u0823\u0001\u0000\u0000\u0000\u0823\u0824\u0005\u0003"+ - "\u0000\u0000\u0824\u0a21\u0001\u0000\u0000\u0000\u0825\u0826\n\u012c\u0000"+ - "\u0000\u0826\u0827\u0005\u0001\u0000\u0000\u0827\u0828\u0005\u007f\u0000"+ - "\u0000\u0828\u0829\u0005\u0002\u0000\u0000\u0829\u082a\u0003\u0002\u0001"+ - "\u0000\u082a\u082b\u0005\u0003\u0000\u0000\u082b\u0a21\u0001\u0000\u0000"+ - "\u0000\u082c\u082d\n\u012b\u0000\u0000\u082d\u082e\u0005\u0001\u0000\u0000"+ - "\u082e\u082f\u0005\u0080\u0000\u0000\u082f\u0831\u0005\u0002\u0000\u0000"+ - "\u0830\u0832\u0003\u0002\u0001\u0000\u0831\u0830\u0001\u0000\u0000\u0000"+ - "\u0831\u0832\u0001\u0000\u0000\u0000\u0832\u0833\u0001\u0000\u0000\u0000"+ - "\u0833\u0a21\u0005\u0003\u0000\u0000\u0834\u0835\n\u012a\u0000\u0000\u0835"+ - "\u0836\u0005\u0001\u0000\u0000\u0836\u0837\u0005\u0081\u0000\u0000\u0837"+ - "\u0838\u0005\u0002\u0000\u0000\u0838\u0a21\u0005\u0003\u0000\u0000\u0839"+ - "\u083a\n\u0129\u0000\u0000\u083a\u083b\u0005\u0001\u0000\u0000\u083b\u083c"+ - "\u0005\u0082\u0000\u0000\u083c\u083d\u0005\u0002\u0000\u0000\u083d\u0840"+ - "\u0003\u0002\u0001\u0000\u083e\u083f\u0005\u0004\u0000\u0000\u083f\u0841"+ - "\u0003\u0002\u0001\u0000\u0840\u083e\u0001\u0000\u0000\u0000\u0840\u0841"+ + "\u0000\u0000\u01b2\u08ed\u0001\u0000\u0000\u0000\u01b3\u01b4\u0005W\u0000"+ + "\u0000\u01b4\u01b5\u0005\u0002\u0000\u0000\u01b5\u01b6\u0003\u0002\u0001"+ + "\u0000\u01b6\u01b7\u0005\u0003\u0000\u0000\u01b7\u08ed\u0001\u0000\u0000"+ + "\u0000\u01b8\u01b9\u0005X\u0000\u0000\u01b9\u01ba\u0005\u0002\u0000\u0000"+ + "\u01ba\u01bb\u0003\u0002\u0001\u0000\u01bb\u01bc\u0005\u0003\u0000\u0000"+ + "\u01bc\u08ed\u0001\u0000\u0000\u0000\u01bd\u01be\u0005Y\u0000\u0000\u01be"+ + "\u01bf\u0005\u0002\u0000\u0000\u01bf\u01c0\u0003\u0002\u0001\u0000\u01c0"+ + "\u01c1\u0005\u0003\u0000\u0000\u01c1\u08ed\u0001\u0000\u0000\u0000\u01c2"+ + "\u01c3\u0005Z\u0000\u0000\u01c3\u01c4\u0005\u0002\u0000\u0000\u01c4\u01c5"+ + "\u0003\u0002\u0001\u0000\u01c5\u01c6\u0005\u0003\u0000\u0000\u01c6\u08ed"+ + "\u0001\u0000\u0000\u0000\u01c7\u01c8\u0005[\u0000\u0000\u01c8\u01c9\u0005"+ + "\u0002\u0000\u0000\u01c9\u01ca\u0003\u0002\u0001\u0000\u01ca\u01cb\u0005"+ + "\u0003\u0000\u0000\u01cb\u08ed\u0001\u0000\u0000\u0000\u01cc\u01cd\u0005"+ + "\\\u0000\u0000\u01cd\u01ce\u0005\u0002\u0000\u0000\u01ce\u01cf\u0003\u0002"+ + "\u0001\u0000\u01cf\u01d0\u0005\u0003\u0000\u0000\u01d0\u08ed\u0001\u0000"+ + "\u0000\u0000\u01d1\u01d2\u0005]\u0000\u0000\u01d2\u01d3\u0005\u0002\u0000"+ + "\u0000\u01d3\u01d4\u0003\u0002\u0001\u0000\u01d4\u01d5\u0005\u0003\u0000"+ + "\u0000\u01d5\u08ed\u0001\u0000\u0000\u0000\u01d6\u01d7\u0005^\u0000\u0000"+ + "\u01d7\u01d8\u0005\u0002\u0000\u0000\u01d8\u01d9\u0003\u0002\u0001\u0000"+ + "\u01d9\u01da\u0005\u0003\u0000\u0000\u01da\u08ed\u0001\u0000\u0000\u0000"+ + "\u01db\u01dc\u0005_\u0000\u0000\u01dc\u01dd\u0005\u0002\u0000\u0000\u01dd"+ + "\u01de\u0003\u0002\u0001\u0000\u01de\u01df\u0005\u0003\u0000\u0000\u01df"+ + "\u08ed\u0001\u0000\u0000\u0000\u01e0\u01e1\u0005`\u0000\u0000\u01e1\u01e2"+ + "\u0005\u0002\u0000\u0000\u01e2\u01e3\u0003\u0002\u0001\u0000\u01e3\u01e4"+ + "\u0005\u0003\u0000\u0000\u01e4\u08ed\u0001\u0000\u0000\u0000\u01e5\u01e6"+ + "\u0005a\u0000\u0000\u01e6\u01e7\u0005\u0002\u0000\u0000\u01e7\u01e8\u0003"+ + "\u0002\u0001\u0000\u01e8\u01e9\u0005\u0003\u0000\u0000\u01e9\u08ed\u0001"+ + "\u0000\u0000\u0000\u01ea\u01eb\u0005b\u0000\u0000\u01eb\u01ec\u0005\u0002"+ + "\u0000\u0000\u01ec\u01ed\u0003\u0002\u0001\u0000\u01ed\u01ee\u0005\u0003"+ + "\u0000\u0000\u01ee\u08ed\u0001\u0000\u0000\u0000\u01ef\u01f0\u0005c\u0000"+ + "\u0000\u01f0\u01f1\u0005\u0002\u0000\u0000\u01f1\u01f2\u0003\u0002\u0001"+ + "\u0000\u01f2\u01f3\u0005\u0003\u0000\u0000\u01f3\u08ed\u0001\u0000\u0000"+ + "\u0000\u01f4\u01f5\u0005d\u0000\u0000\u01f5\u01f6\u0005\u0002\u0000\u0000"+ + "\u01f6\u01f7\u0003\u0002\u0001\u0000\u01f7\u01f8\u0005\u0003\u0000\u0000"+ + "\u01f8\u08ed\u0001\u0000\u0000\u0000\u01f9\u01fa\u0005e\u0000\u0000\u01fa"+ + "\u01fb\u0005\u0002\u0000\u0000\u01fb\u01fc\u0003\u0002\u0001\u0000\u01fc"+ + "\u01fd\u0005\u0004\u0000\u0000\u01fd\u01fe\u0003\u0002\u0001\u0000\u01fe"+ + "\u01ff\u0005\u0003\u0000\u0000\u01ff\u08ed\u0001\u0000\u0000\u0000\u0200"+ + "\u0201\u0005f\u0000\u0000\u0201\u0202\u0005\u0002\u0000\u0000\u0202\u0205"+ + "\u0003\u0002\u0001\u0000\u0203\u0204\u0005\u0004\u0000\u0000\u0204\u0206"+ + "\u0003\u0002\u0001\u0000\u0205\u0203\u0001\u0000\u0000\u0000\u0205\u0206"+ + "\u0001\u0000\u0000\u0000\u0206\u0207\u0001\u0000\u0000\u0000\u0207\u0208"+ + "\u0005\u0003\u0000\u0000\u0208\u08ed\u0001\u0000\u0000\u0000\u0209\u020a"+ + "\u0005g\u0000\u0000\u020a\u020b\u0005\u0002\u0000\u0000\u020b\u020c\u0003"+ + "\u0002\u0001\u0000\u020c\u020d\u0005\u0004\u0000\u0000\u020d\u020e\u0003"+ + "\u0002\u0001\u0000\u020e\u020f\u0005\u0003\u0000\u0000\u020f\u08ed\u0001"+ + "\u0000\u0000\u0000\u0210\u0211\u0005h\u0000\u0000\u0211\u0212\u0005\u0002"+ + "\u0000\u0000\u0212\u0213\u0003\u0002\u0001\u0000\u0213\u0214\u0005\u0004"+ + "\u0000\u0000\u0214\u0215\u0003\u0002\u0001\u0000\u0215\u0216\u0005\u0003"+ + "\u0000\u0000\u0216\u08ed\u0001\u0000\u0000\u0000\u0217\u0218\u0005i\u0000"+ + "\u0000\u0218\u0219\u0005\u0002\u0000\u0000\u0219\u021c\u0003\u0002\u0001"+ + "\u0000\u021a\u021b\u0005\u0004\u0000\u0000\u021b\u021d\u0003\u0002\u0001"+ + "\u0000\u021c\u021a\u0001\u0000\u0000\u0000\u021c\u021d\u0001\u0000\u0000"+ + "\u0000\u021d\u021e\u0001\u0000\u0000\u0000\u021e\u021f\u0005\u0003\u0000"+ + "\u0000\u021f\u08ed\u0001\u0000\u0000\u0000\u0220\u0221\u0005j\u0000\u0000"+ + "\u0221\u0222\u0005\u0002\u0000\u0000\u0222\u0225\u0003\u0002\u0001\u0000"+ + "\u0223\u0224\u0005\u0004\u0000\u0000\u0224\u0226\u0003\u0002\u0001\u0000"+ + "\u0225\u0223\u0001\u0000\u0000\u0000\u0225\u0226\u0001\u0000\u0000\u0000"+ + "\u0226\u0227\u0001\u0000\u0000\u0000\u0227\u0228\u0005\u0003\u0000\u0000"+ + "\u0228\u08ed\u0001\u0000\u0000\u0000\u0229\u022a\u0005k\u0000\u0000\u022a"+ + "\u022b\u0005\u0002\u0000\u0000\u022b\u022c\u0003\u0002\u0001\u0000\u022c"+ + "\u022d\u0005\u0003\u0000\u0000\u022d\u08ed\u0001\u0000\u0000\u0000\u022e"+ + "\u022f\u0005l\u0000\u0000\u022f\u0230\u0005\u0002\u0000\u0000\u0230\u0231"+ + "\u0003\u0002\u0001\u0000\u0231\u0232\u0005\u0003\u0000\u0000\u0232\u08ed"+ + "\u0001\u0000\u0000\u0000\u0233\u0234\u0005m\u0000\u0000\u0234\u0235\u0005"+ + "\u0002\u0000\u0000\u0235\u0236\u0003\u0002\u0001\u0000\u0236\u0237\u0005"+ + "\u0004\u0000\u0000\u0237\u0238\u0003\u0002\u0001\u0000\u0238\u0239\u0005"+ + "\u0003\u0000\u0000\u0239\u08ed\u0001\u0000\u0000\u0000\u023a\u023b\u0005"+ + "n\u0000\u0000\u023b\u023c\u0005\u0002\u0000\u0000\u023c\u08ed\u0005\u0003"+ + "\u0000\u0000\u023d\u023e\u0005o\u0000\u0000\u023e\u023f\u0005\u0002\u0000"+ + "\u0000\u023f\u0240\u0003\u0002\u0001\u0000\u0240\u0241\u0005\u0004\u0000"+ + "\u0000\u0241\u0242\u0003\u0002\u0001\u0000\u0242\u0243\u0005\u0003\u0000"+ + "\u0000\u0243\u08ed\u0001\u0000\u0000\u0000\u0244\u0245\u0005p\u0000\u0000"+ + "\u0245\u0246\u0005\u0002\u0000\u0000\u0246\u0247\u0003\u0002\u0001\u0000"+ + "\u0247\u0248\u0005\u0003\u0000\u0000\u0248\u08ed\u0001\u0000\u0000\u0000"+ + "\u0249\u024a\u0005q\u0000\u0000\u024a\u024b\u0005\u0002\u0000\u0000\u024b"+ + "\u024c\u0003\u0002\u0001\u0000\u024c\u024d\u0005\u0003\u0000\u0000\u024d"+ + "\u08ed\u0001\u0000\u0000\u0000\u024e\u024f\u0005r\u0000\u0000\u024f\u0250"+ + "\u0005\u0002\u0000\u0000\u0250\u0251\u0003\u0002\u0001\u0000\u0251\u0252"+ + "\u0005\u0004\u0000\u0000\u0252\u0253\u0003\u0002\u0001\u0000\u0253\u0254"+ + "\u0005\u0003\u0000\u0000\u0254\u08ed\u0001\u0000\u0000\u0000\u0255\u0256"+ + "\u0005s\u0000\u0000\u0256\u0257\u0005\u0002\u0000\u0000\u0257\u0258\u0003"+ + "\u0002\u0001\u0000\u0258\u0259\u0005\u0003\u0000\u0000\u0259\u08ed\u0001"+ + "\u0000\u0000\u0000\u025a\u025b\u0005t\u0000\u0000\u025b\u025c\u0005\u0002"+ + "\u0000\u0000\u025c\u025d\u0003\u0002\u0001\u0000\u025d\u025e\u0005\u0003"+ + "\u0000\u0000\u025e\u08ed\u0001\u0000\u0000\u0000\u025f\u0260\u0005u\u0000"+ + "\u0000\u0260\u0261\u0005\u0002\u0000\u0000\u0261\u0264\u0003\u0002\u0001"+ + "\u0000\u0262\u0263\u0005\u0004\u0000\u0000\u0263\u0265\u0003\u0002\u0001"+ + "\u0000\u0264\u0262\u0001\u0000\u0000\u0000\u0264\u0265\u0001\u0000\u0000"+ + "\u0000\u0265\u0266\u0001\u0000\u0000\u0000\u0266\u0267\u0005\u0003\u0000"+ + "\u0000\u0267\u08ed\u0001\u0000\u0000\u0000\u0268\u0269\u0005v\u0000\u0000"+ + "\u0269\u026a\u0005\u0002\u0000\u0000\u026a\u026b\u0003\u0002\u0001\u0000"+ + "\u026b\u026c\u0005\u0003\u0000\u0000\u026c\u08ed\u0001\u0000\u0000\u0000"+ + "\u026d\u026e\u0005w\u0000\u0000\u026e\u026f\u0005\u0002\u0000\u0000\u026f"+ + "\u0274\u0003\u0002\u0001\u0000\u0270\u0271\u0005\u0004\u0000\u0000\u0271"+ + "\u0273\u0003\u0002\u0001\u0000\u0272\u0270\u0001\u0000\u0000\u0000\u0273"+ + "\u0276\u0001\u0000\u0000\u0000\u0274\u0272\u0001\u0000\u0000\u0000\u0274"+ + "\u0275\u0001\u0000\u0000\u0000\u0275\u0277\u0001\u0000\u0000\u0000\u0276"+ + "\u0274\u0001\u0000\u0000\u0000\u0277\u0278\u0005\u0003\u0000\u0000\u0278"+ + "\u08ed\u0001\u0000\u0000\u0000\u0279\u027a\u0005x\u0000\u0000\u027a\u027b"+ + "\u0005\u0002\u0000\u0000\u027b\u0280\u0003\u0002\u0001\u0000\u027c\u027d"+ + "\u0005\u0004\u0000\u0000\u027d\u027f\u0003\u0002\u0001\u0000\u027e\u027c"+ + "\u0001\u0000\u0000\u0000\u027f\u0282\u0001\u0000\u0000\u0000\u0280\u027e"+ + "\u0001\u0000\u0000\u0000\u0280\u0281\u0001\u0000\u0000\u0000\u0281\u0283"+ + "\u0001\u0000\u0000\u0000\u0282\u0280\u0001\u0000\u0000\u0000\u0283\u0284"+ + "\u0005\u0003\u0000\u0000\u0284\u08ed\u0001\u0000\u0000\u0000\u0285\u0286"+ + "\u0005y\u0000\u0000\u0286\u0287\u0005\u0002\u0000\u0000\u0287\u0288\u0003"+ + "\u0002\u0001\u0000\u0288\u0289\u0005\u0003\u0000\u0000\u0289\u08ed\u0001"+ + "\u0000\u0000\u0000\u028a\u028b\u0005z\u0000\u0000\u028b\u028c\u0005\u0002"+ + "\u0000\u0000\u028c\u028d\u0003\u0002\u0001\u0000\u028d\u028e\u0005\u0003"+ + "\u0000\u0000\u028e\u08ed\u0001\u0000\u0000\u0000\u028f\u0290\u0005{\u0000"+ + "\u0000\u0290\u0291\u0005\u0002\u0000\u0000\u0291\u0292\u0003\u0002\u0001"+ + "\u0000\u0292\u0293\u0005\u0003\u0000\u0000\u0293\u08ed\u0001\u0000\u0000"+ + "\u0000\u0294\u0295\u0005|\u0000\u0000\u0295\u0296\u0005\u0002\u0000\u0000"+ + "\u0296\u0297\u0003\u0002\u0001\u0000\u0297\u0298\u0005\u0004\u0000\u0000"+ + "\u0298\u0299\u0003\u0002\u0001\u0000\u0299\u029a\u0005\u0003\u0000\u0000"+ + "\u029a\u08ed\u0001\u0000\u0000\u0000\u029b\u029c\u0005}\u0000\u0000\u029c"+ + "\u029d\u0005\u0002\u0000\u0000\u029d\u029e\u0003\u0002\u0001\u0000\u029e"+ + "\u029f\u0005\u0004\u0000\u0000\u029f\u02a0\u0003\u0002\u0001\u0000\u02a0"+ + "\u02a1\u0005\u0003\u0000\u0000\u02a1\u08ed\u0001\u0000\u0000\u0000\u02a2"+ + "\u02a3\u0005~\u0000\u0000\u02a3\u02a4\u0005\u0002\u0000\u0000\u02a4\u02a5"+ + "\u0003\u0002\u0001\u0000\u02a5\u02a6\u0005\u0004\u0000\u0000\u02a6\u02a7"+ + "\u0003\u0002\u0001\u0000\u02a7\u02a8\u0005\u0003\u0000\u0000\u02a8\u08ed"+ + "\u0001\u0000\u0000\u0000\u02a9\u02aa\u0005\u007f\u0000\u0000\u02aa\u02ab"+ + "\u0005\u0002\u0000\u0000\u02ab\u02ac\u0003\u0002\u0001\u0000\u02ac\u02ad"+ + "\u0005\u0004\u0000\u0000\u02ad\u02ae\u0003\u0002\u0001\u0000\u02ae\u02af"+ + "\u0005\u0003\u0000\u0000\u02af\u08ed\u0001\u0000\u0000\u0000\u02b0\u02b1"+ + "\u0005\u0080\u0000\u0000\u02b1\u02b2\u0005\u0002\u0000\u0000\u02b2\u02b5"+ + "\u0003\u0002\u0001\u0000\u02b3\u02b4\u0005\u0004\u0000\u0000\u02b4\u02b6"+ + "\u0003\u0002\u0001\u0000\u02b5\u02b3\u0001\u0000\u0000\u0000\u02b5\u02b6"+ + "\u0001\u0000\u0000\u0000\u02b6\u02b7\u0001\u0000\u0000\u0000\u02b7\u02b8"+ + "\u0005\u0003\u0000\u0000\u02b8\u08ed\u0001\u0000\u0000\u0000\u02b9\u02ba"+ + "\u0005\u0081\u0000\u0000\u02ba\u02bb\u0005\u0002\u0000\u0000\u02bb\u02be"+ + "\u0003\u0002\u0001\u0000\u02bc\u02bd\u0005\u0004\u0000\u0000\u02bd\u02bf"+ + "\u0003\u0002\u0001\u0000\u02be\u02bc\u0001\u0000\u0000\u0000\u02be\u02bf"+ + "\u0001\u0000\u0000\u0000\u02bf\u02c0\u0001\u0000\u0000\u0000\u02c0\u02c1"+ + "\u0005\u0003\u0000\u0000\u02c1\u08ed\u0001\u0000\u0000\u0000\u02c2\u02c3"+ + "\u0005\u0082\u0000\u0000\u02c3\u02c4\u0005\u0002\u0000\u0000\u02c4\u02c9"+ + "\u0003\u0002\u0001\u0000\u02c5\u02c6\u0005\u0004\u0000\u0000\u02c6\u02c8"+ + "\u0003\u0002\u0001\u0000\u02c7\u02c5\u0001\u0000\u0000\u0000\u02c8\u02cb"+ + "\u0001\u0000\u0000\u0000\u02c9\u02c7\u0001\u0000\u0000\u0000\u02c9\u02ca"+ + "\u0001\u0000\u0000\u0000\u02ca\u02cc\u0001\u0000\u0000\u0000\u02cb\u02c9"+ + "\u0001\u0000\u0000\u0000\u02cc\u02cd\u0005\u0003\u0000\u0000\u02cd\u08ed"+ + "\u0001\u0000\u0000\u0000\u02ce\u02cf\u0005\u0083\u0000\u0000\u02cf\u02d0"+ + "\u0005\u0002\u0000\u0000\u02d0\u02d5\u0003\u0002\u0001\u0000\u02d1\u02d2"+ + "\u0005\u0004\u0000\u0000\u02d2\u02d4\u0003\u0002\u0001\u0000\u02d3\u02d1"+ + "\u0001\u0000\u0000\u0000\u02d4\u02d7\u0001\u0000\u0000\u0000\u02d5\u02d3"+ + "\u0001\u0000\u0000\u0000\u02d5\u02d6\u0001\u0000\u0000\u0000\u02d6\u02d8"+ + "\u0001\u0000\u0000\u0000\u02d7\u02d5\u0001\u0000\u0000\u0000\u02d8\u02d9"+ + "\u0005\u0003\u0000\u0000\u02d9\u08ed\u0001\u0000\u0000\u0000\u02da\u02db"+ + "\u0005\u0084\u0000\u0000\u02db\u02dc\u0005\u0002\u0000\u0000\u02dc\u02dd"+ + "\u0003\u0002\u0001\u0000\u02dd\u02de\u0005\u0004\u0000\u0000\u02de\u02df"+ + "\u0003\u0002\u0001\u0000\u02df\u02e0\u0005\u0003\u0000\u0000\u02e0\u08ed"+ + "\u0001\u0000\u0000\u0000\u02e1\u02e2\u0005\u0085\u0000\u0000\u02e2\u02e3"+ + "\u0005\u0002\u0000\u0000\u02e3\u02e4\u0003\u0002\u0001\u0000\u02e4\u02e5"+ + "\u0005\u0004\u0000\u0000\u02e5\u02e6\u0003\u0002\u0001\u0000\u02e6\u02e7"+ + "\u0005\u0003\u0000\u0000\u02e7\u08ed\u0001\u0000\u0000\u0000\u02e8\u02e9"+ + "\u0005\u0086\u0000\u0000\u02e9\u02ea\u0005\u0002\u0000\u0000\u02ea\u02eb"+ + "\u0003\u0002\u0001\u0000\u02eb\u02ec\u0005\u0004\u0000\u0000\u02ec\u02ed"+ + "\u0003\u0002\u0001\u0000\u02ed\u02ee\u0005\u0003\u0000\u0000\u02ee\u08ed"+ + "\u0001\u0000\u0000\u0000\u02ef\u02f0\u0005\u0087\u0000\u0000\u02f0\u02f1"+ + "\u0005\u0002\u0000\u0000\u02f1\u02f2\u0003\u0002\u0001\u0000\u02f2\u02f3"+ + "\u0005\u0003\u0000\u0000\u02f3\u08ed\u0001\u0000\u0000\u0000\u02f4\u02f5"+ + "\u0005\u0088\u0000\u0000\u02f5\u02f6\u0005\u0002\u0000\u0000\u02f6\u02f9"+ + "\u0003\u0002\u0001\u0000\u02f7\u02f8\u0005\u0004\u0000\u0000\u02f8\u02fa"+ + "\u0003\u0002\u0001\u0000\u02f9\u02f7\u0001\u0000\u0000\u0000\u02f9\u02fa"+ + "\u0001\u0000\u0000\u0000\u02fa\u02fb\u0001\u0000\u0000\u0000\u02fb\u02fc"+ + "\u0005\u0003\u0000\u0000\u02fc\u08ed\u0001\u0000\u0000\u0000\u02fd\u02fe"+ + "\u0005\u0089\u0000\u0000\u02fe\u02ff\u0005\u0002\u0000\u0000\u02ff\u0300"+ + "\u0003\u0002\u0001\u0000\u0300\u0301\u0005\u0004\u0000\u0000\u0301\u0302"+ + "\u0003\u0002\u0001\u0000\u0302\u0303\u0005\u0004\u0000\u0000\u0303\u0304"+ + "\u0003\u0002\u0001\u0000\u0304\u0305\u0005\u0004\u0000\u0000\u0305\u0306"+ + "\u0003\u0002\u0001\u0000\u0306\u0307\u0005\u0003\u0000\u0000\u0307\u08ed"+ + "\u0001\u0000\u0000\u0000\u0308\u0309\u0005\u008a\u0000\u0000\u0309\u030a"+ + "\u0005\u0002\u0000\u0000\u030a\u030b\u0003\u0002\u0001\u0000\u030b\u030c"+ + "\u0005\u0004\u0000\u0000\u030c\u030f\u0003\u0002\u0001\u0000\u030d\u030e"+ + "\u0005\u0004\u0000\u0000\u030e\u0310\u0003\u0002\u0001\u0000\u030f\u030d"+ + "\u0001\u0000\u0000\u0000\u030f\u0310\u0001\u0000\u0000\u0000\u0310\u0311"+ + "\u0001\u0000\u0000\u0000\u0311\u0312\u0005\u0003\u0000\u0000\u0312\u08ed"+ + "\u0001\u0000\u0000\u0000\u0313\u0314\u0005\u008b\u0000\u0000\u0314\u0315"+ + "\u0005\u0002\u0000\u0000\u0315\u0316\u0003\u0002\u0001\u0000\u0316\u0317"+ + "\u0005\u0004\u0000\u0000\u0317\u0318\u0003\u0002\u0001\u0000\u0318\u0319"+ + "\u0005\u0004\u0000\u0000\u0319\u031a\u0003\u0002\u0001\u0000\u031a\u031b"+ + "\u0005\u0003\u0000\u0000\u031b\u08ed\u0001\u0000\u0000\u0000\u031c\u031d"+ + "\u0005\u008c\u0000\u0000\u031d\u031e\u0005\u0002\u0000\u0000\u031e\u031f"+ + "\u0003\u0002\u0001\u0000\u031f\u0320\u0005\u0004\u0000\u0000\u0320\u0321"+ + "\u0003\u0002\u0001\u0000\u0321\u0322\u0005\u0003\u0000\u0000\u0322\u08ed"+ + "\u0001\u0000\u0000\u0000\u0323\u0324\u0005\u008d\u0000\u0000\u0324\u0325"+ + "\u0005\u0002\u0000\u0000\u0325\u0326\u0003\u0002\u0001\u0000\u0326\u0327"+ + "\u0005\u0004\u0000\u0000\u0327\u0328\u0003\u0002\u0001\u0000\u0328\u0329"+ + "\u0005\u0003\u0000\u0000\u0329\u08ed\u0001\u0000\u0000\u0000\u032a\u032b"+ + "\u0005\u008e\u0000\u0000\u032b\u032c\u0005\u0002\u0000\u0000\u032c\u032d"+ + "\u0003\u0002\u0001\u0000\u032d\u032e\u0005\u0004\u0000\u0000\u032e\u032f"+ + "\u0003\u0002\u0001\u0000\u032f\u0330\u0005\u0003\u0000\u0000\u0330\u08ed"+ + "\u0001\u0000\u0000\u0000\u0331\u0332\u0005\u008f\u0000\u0000\u0332\u0333"+ + "\u0005\u0002\u0000\u0000\u0333\u0334\u0003\u0002\u0001\u0000\u0334\u0335"+ + "\u0005\u0004\u0000\u0000\u0335\u0336\u0003\u0002\u0001\u0000\u0336\u0337"+ + "\u0005\u0003\u0000\u0000\u0337\u08ed\u0001\u0000\u0000\u0000\u0338\u0339"+ + "\u0005\u0090\u0000\u0000\u0339\u033a\u0005\u0002\u0000\u0000\u033a\u033b"+ + "\u0003\u0002\u0001\u0000\u033b\u033c\u0005\u0004\u0000\u0000\u033c\u033f"+ + "\u0003\u0002\u0001\u0000\u033d\u033e\u0005\u0004\u0000\u0000\u033e\u0340"+ + "\u0003\u0002\u0001\u0000\u033f\u033d\u0001\u0000\u0000\u0000\u033f\u0340"+ + "\u0001\u0000\u0000\u0000\u0340\u0341\u0001\u0000\u0000\u0000\u0341\u0342"+ + "\u0005\u0003\u0000\u0000\u0342\u08ed\u0001\u0000\u0000\u0000\u0343\u0344"+ + "\u0005\u0091\u0000\u0000\u0344\u0345\u0005\u0002\u0000\u0000\u0345\u0346"+ + "\u0003\u0002\u0001\u0000\u0346\u0347\u0005\u0003\u0000\u0000\u0347\u08ed"+ + "\u0001\u0000\u0000\u0000\u0348\u0349\u0005\u0092\u0000\u0000\u0349\u034a"+ + "\u0005\u0002\u0000\u0000\u034a\u034b\u0003\u0002\u0001\u0000\u034b\u034c"+ + "\u0005\u0003\u0000\u0000\u034c\u08ed\u0001\u0000\u0000\u0000\u034d\u034e"+ + "\u0005\u0093\u0000\u0000\u034e\u034f\u0005\u0002\u0000\u0000\u034f\u0350"+ + "\u0003\u0002\u0001\u0000\u0350\u0351\u0005\u0003\u0000\u0000\u0351\u08ed"+ + "\u0001\u0000\u0000\u0000\u0352\u0353\u0005\u0094\u0000\u0000\u0353\u0354"+ + "\u0005\u0002\u0000\u0000\u0354\u0355\u0003\u0002\u0001\u0000\u0355\u0356"+ + "\u0005\u0003\u0000\u0000\u0356\u08ed\u0001\u0000\u0000\u0000\u0357\u0358"+ + "\u0005\u0095\u0000\u0000\u0358\u0359\u0005\u0002\u0000\u0000\u0359\u035a"+ + "\u0003\u0002\u0001\u0000\u035a\u035b\u0005\u0003\u0000\u0000\u035b\u08ed"+ + "\u0001\u0000\u0000\u0000\u035c\u035d\u0005\u0096\u0000\u0000\u035d\u035e"+ + "\u0005\u0002\u0000\u0000\u035e\u035f\u0003\u0002\u0001\u0000\u035f\u0360"+ + "\u0005\u0003\u0000\u0000\u0360\u08ed\u0001\u0000\u0000\u0000\u0361\u0362"+ + "\u0005\u0097\u0000\u0000\u0362\u0363\u0005\u0002\u0000\u0000\u0363\u0364"+ + "\u0003\u0002\u0001\u0000\u0364\u0365\u0005\u0003\u0000\u0000\u0365\u08ed"+ + "\u0001\u0000\u0000\u0000\u0366\u0367\u0005\u0098\u0000\u0000\u0367\u0368"+ + "\u0005\u0002\u0000\u0000\u0368\u036d\u0003\u0002\u0001\u0000\u0369\u036a"+ + "\u0005\u0004\u0000\u0000\u036a\u036c\u0003\u0002\u0001\u0000\u036b\u0369"+ + "\u0001\u0000\u0000\u0000\u036c\u036f\u0001\u0000\u0000\u0000\u036d\u036b"+ + "\u0001\u0000\u0000\u0000\u036d\u036e\u0001\u0000\u0000\u0000\u036e\u0370"+ + "\u0001\u0000\u0000\u0000\u036f\u036d\u0001\u0000\u0000\u0000\u0370\u0371"+ + "\u0005\u0003\u0000\u0000\u0371\u08ed\u0001\u0000\u0000\u0000\u0372\u0373"+ + "\u0005\u0099\u0000\u0000\u0373\u0374\u0005\u0002\u0000\u0000\u0374\u0375"+ + "\u0003\u0002\u0001\u0000\u0375\u0376\u0005\u0004\u0000\u0000\u0376\u0377"+ + "\u0003\u0002\u0001\u0000\u0377\u0378\u0005\u0003\u0000\u0000\u0378\u08ed"+ + "\u0001\u0000\u0000\u0000\u0379\u037a\u0005\u009a\u0000\u0000\u037a\u037b"+ + "\u0005\u0002\u0000\u0000\u037b\u037c\u0003\u0002\u0001\u0000\u037c\u037d"+ + "\u0005\u0004\u0000\u0000\u037d\u0380\u0003\u0002\u0001\u0000\u037e\u037f"+ + "\u0005\u0004\u0000\u0000\u037f\u0381\u0003\u0002\u0001\u0000\u0380\u037e"+ + "\u0001\u0000\u0000\u0000\u0380\u0381\u0001\u0000\u0000\u0000\u0381\u0382"+ + "\u0001\u0000\u0000\u0000\u0382\u0383\u0005\u0003\u0000\u0000\u0383\u08ed"+ + "\u0001\u0000\u0000\u0000\u0384\u0385\u0005\u009b\u0000\u0000\u0385\u0386"+ + "\u0005\u0002\u0000\u0000\u0386\u038d\u0003\u0002\u0001\u0000\u0387\u0388"+ + "\u0005\u0004\u0000\u0000\u0388\u038b\u0003\u0002\u0001\u0000\u0389\u038a"+ + "\u0005\u0004\u0000\u0000\u038a\u038c\u0003\u0002\u0001\u0000\u038b\u0389"+ + "\u0001\u0000\u0000\u0000\u038b\u038c\u0001\u0000\u0000\u0000\u038c\u038e"+ + "\u0001\u0000\u0000\u0000\u038d\u0387\u0001\u0000\u0000\u0000\u038d\u038e"+ + "\u0001\u0000\u0000\u0000\u038e\u038f\u0001\u0000\u0000\u0000\u038f\u0390"+ + "\u0005\u0003\u0000\u0000\u0390\u08ed\u0001\u0000\u0000\u0000\u0391\u0392"+ + "\u0005\u009c\u0000\u0000\u0392\u0393\u0005\u0002\u0000\u0000\u0393\u0396"+ + "\u0003\u0002\u0001\u0000\u0394\u0395\u0005\u0004\u0000\u0000\u0395\u0397"+ + "\u0003\u0002\u0001\u0000\u0396\u0394\u0001\u0000\u0000\u0000\u0396\u0397"+ + "\u0001\u0000\u0000\u0000\u0397\u0398\u0001\u0000\u0000\u0000\u0398\u0399"+ + "\u0005\u0003\u0000\u0000\u0399\u08ed\u0001\u0000\u0000\u0000\u039a\u039b"+ + "\u0005\u009d\u0000\u0000\u039b\u039c\u0005\u0002\u0000\u0000\u039c\u039d"+ + "\u0003\u0002\u0001\u0000\u039d\u039e\u0005\u0003\u0000\u0000\u039e\u08ed"+ + "\u0001\u0000\u0000\u0000\u039f\u03a0\u0005\u009e\u0000\u0000\u03a0\u03a1"+ + "\u0005\u0002\u0000\u0000\u03a1\u03a2\u0003\u0002\u0001\u0000\u03a2\u03a3"+ + "\u0005\u0003\u0000\u0000\u03a3\u08ed\u0001\u0000\u0000\u0000\u03a4\u03a5"+ + "\u0005\u009f\u0000\u0000\u03a5\u03a6\u0005\u0002\u0000\u0000\u03a6\u03a7"+ + "\u0003\u0002\u0001\u0000\u03a7\u03a8\u0005\u0004\u0000\u0000\u03a8\u03a9"+ + "\u0003\u0002\u0001\u0000\u03a9\u03aa\u0005\u0004\u0000\u0000\u03aa\u03ab"+ + "\u0003\u0002\u0001\u0000\u03ab\u03ac\u0005\u0003\u0000\u0000\u03ac\u08ed"+ + "\u0001\u0000\u0000\u0000\u03ad\u03ae\u0005\u00a0\u0000\u0000\u03ae\u03af"+ + "\u0005\u0002\u0000\u0000\u03af\u03b0\u0003\u0002\u0001\u0000\u03b0\u03b1"+ + "\u0005\u0003\u0000\u0000\u03b1\u08ed\u0001\u0000\u0000\u0000\u03b2\u03b3"+ + "\u0005\u00a1\u0000\u0000\u03b3\u03b4\u0005\u0002\u0000\u0000\u03b4\u03b5"+ + "\u0003\u0002\u0001\u0000\u03b5\u03b6\u0005\u0004\u0000\u0000\u03b6\u03b7"+ + "\u0003\u0002\u0001\u0000\u03b7\u03b8\u0005\u0004\u0000\u0000\u03b8\u03bb"+ + "\u0003\u0002\u0001\u0000\u03b9\u03ba\u0005\u0004\u0000\u0000\u03ba\u03bc"+ + "\u0003\u0002\u0001\u0000\u03bb\u03b9\u0001\u0000\u0000\u0000\u03bb\u03bc"+ + "\u0001\u0000\u0000\u0000\u03bc\u03bd\u0001\u0000\u0000\u0000\u03bd\u03be"+ + "\u0005\u0003\u0000\u0000\u03be\u08ed\u0001\u0000\u0000\u0000\u03bf\u03c0"+ + "\u0005\u00a2\u0000\u0000\u03c0\u03c1\u0005\u0002\u0000\u0000\u03c1\u03c2"+ + "\u0003\u0002\u0001\u0000\u03c2\u03c3\u0005\u0004\u0000\u0000\u03c3\u03c4"+ + "\u0003\u0002\u0001\u0000\u03c4\u03c5\u0005\u0003\u0000\u0000\u03c5\u08ed"+ + "\u0001\u0000\u0000\u0000\u03c6\u03c7\u0005\u00a3\u0000\u0000\u03c7\u03c8"+ + "\u0005\u0002\u0000\u0000\u03c8\u03cb\u0003\u0002\u0001\u0000\u03c9\u03ca"+ + "\u0005\u0004\u0000\u0000\u03ca\u03cc\u0003\u0002\u0001\u0000\u03cb\u03c9"+ + "\u0001\u0000\u0000\u0000\u03cb\u03cc\u0001\u0000\u0000\u0000\u03cc\u03cd"+ + "\u0001\u0000\u0000\u0000\u03cd\u03ce\u0005\u0003\u0000\u0000\u03ce\u08ed"+ + "\u0001\u0000\u0000\u0000\u03cf\u03d0\u0005\u00a4\u0000\u0000\u03d0\u03d1"+ + "\u0005\u0002\u0000\u0000\u03d1\u03d2\u0003\u0002\u0001\u0000\u03d2\u03d3"+ + "\u0005\u0003\u0000\u0000\u03d3\u08ed\u0001\u0000\u0000\u0000\u03d4\u03d5"+ + "\u0005\u00a5\u0000\u0000\u03d5\u03d6\u0005\u0002\u0000\u0000\u03d6\u03d7"+ + "\u0003\u0002\u0001\u0000\u03d7\u03d8\u0005\u0004\u0000\u0000\u03d8\u03db"+ + "\u0003\u0002\u0001\u0000\u03d9\u03da\u0005\u0004\u0000\u0000\u03da\u03dc"+ + "\u0003\u0002\u0001\u0000\u03db\u03d9\u0001\u0000\u0000\u0000\u03db\u03dc"+ + "\u0001\u0000\u0000\u0000\u03dc\u03dd\u0001\u0000\u0000\u0000\u03dd\u03de"+ + "\u0005\u0003\u0000\u0000\u03de\u08ed\u0001\u0000\u0000\u0000\u03df\u03e0"+ + "\u0005\u00a6\u0000\u0000\u03e0\u03e1\u0005\u0002\u0000\u0000\u03e1\u03e2"+ + "\u0003\u0002\u0001\u0000\u03e2\u03e3\u0005\u0004\u0000\u0000\u03e3\u03e4"+ + "\u0003\u0002\u0001\u0000\u03e4\u03e5\u0005\u0004\u0000\u0000\u03e5\u03e8"+ + "\u0003\u0002\u0001\u0000\u03e6\u03e7\u0005\u0004\u0000\u0000\u03e7\u03e9"+ + "\u0003\u0002\u0001\u0000\u03e8\u03e6\u0001\u0000\u0000\u0000\u03e8\u03e9"+ + "\u0001\u0000\u0000\u0000\u03e9\u03ea\u0001\u0000\u0000\u0000\u03ea\u03eb"+ + "\u0005\u0003\u0000\u0000\u03eb\u08ed\u0001\u0000\u0000\u0000\u03ec\u03ed"+ + "\u0005\u00a7\u0000\u0000\u03ed\u03ee\u0005\u0002\u0000\u0000\u03ee\u03ef"+ + "\u0003\u0002\u0001\u0000\u03ef\u03f0\u0005\u0003\u0000\u0000\u03f0\u08ed"+ + "\u0001\u0000\u0000\u0000\u03f1\u03f2\u0005\u00a8\u0000\u0000\u03f2\u03f3"+ + "\u0005\u0002\u0000\u0000\u03f3\u03f4\u0003\u0002\u0001\u0000\u03f4\u03f5"+ + "\u0005\u0004\u0000\u0000\u03f5\u03f6\u0003\u0002\u0001\u0000\u03f6\u03f7"+ + "\u0005\u0003\u0000\u0000\u03f7\u08ed\u0001\u0000\u0000\u0000\u03f8\u03f9"+ + "\u0005\u00a9\u0000\u0000\u03f9\u03fa\u0005\u0002\u0000\u0000\u03fa\u03fb"+ + "\u0003\u0002\u0001\u0000\u03fb\u03fc\u0005\u0003\u0000\u0000\u03fc\u08ed"+ + "\u0001\u0000\u0000\u0000\u03fd\u03fe\u0005\u00aa\u0000\u0000\u03fe\u03ff"+ + "\u0005\u0002\u0000\u0000\u03ff\u0400\u0003\u0002\u0001\u0000\u0400\u0401"+ + "\u0005\u0003\u0000\u0000\u0401\u08ed\u0001\u0000\u0000\u0000\u0402\u0403"+ + "\u0005\u00ab\u0000\u0000\u0403\u0404\u0005\u0002\u0000\u0000\u0404\u0405"+ + "\u0003\u0002\u0001\u0000\u0405\u0406\u0005\u0003\u0000\u0000\u0406\u08ed"+ + "\u0001\u0000\u0000\u0000\u0407\u0408\u0005\u00ac\u0000\u0000\u0408\u0409"+ + "\u0005\u0002\u0000\u0000\u0409\u040c\u0003\u0002\u0001\u0000\u040a\u040b"+ + "\u0005\u0004\u0000\u0000\u040b\u040d\u0003\u0002\u0001\u0000\u040c\u040a"+ + "\u0001\u0000\u0000\u0000\u040c\u040d\u0001\u0000\u0000\u0000\u040d\u040e"+ + "\u0001\u0000\u0000\u0000\u040e\u040f\u0005\u0003\u0000\u0000\u040f\u08ed"+ + "\u0001\u0000\u0000\u0000\u0410\u0411\u0005\u00ad\u0000\u0000\u0411\u0412"+ + "\u0005\u0002\u0000\u0000\u0412\u0413\u0003\u0002\u0001\u0000\u0413\u0414"+ + "\u0005\u0003\u0000\u0000\u0414\u08ed\u0001\u0000\u0000\u0000\u0415\u0416"+ + "\u0005\u00ae\u0000\u0000\u0416\u0417\u0005\u0002\u0000\u0000\u0417\u0418"+ + "\u0003\u0002\u0001\u0000\u0418\u0419\u0005\u0004\u0000\u0000\u0419\u041a"+ + "\u0003\u0002\u0001\u0000\u041a\u041b\u0005\u0004\u0000\u0000\u041b\u0426"+ + "\u0003\u0002\u0001\u0000\u041c\u041d\u0005\u0004\u0000\u0000\u041d\u0424"+ + "\u0003\u0002\u0001\u0000\u041e\u041f\u0005\u0004\u0000\u0000\u041f\u0422"+ + "\u0003\u0002\u0001\u0000\u0420\u0421\u0005\u0004\u0000\u0000\u0421\u0423"+ + "\u0003\u0002\u0001\u0000\u0422\u0420\u0001\u0000\u0000\u0000\u0422\u0423"+ + "\u0001\u0000\u0000\u0000\u0423\u0425\u0001\u0000\u0000\u0000\u0424\u041e"+ + "\u0001\u0000\u0000\u0000\u0424\u0425\u0001\u0000\u0000\u0000\u0425\u0427"+ + "\u0001\u0000\u0000\u0000\u0426\u041c\u0001\u0000\u0000\u0000\u0426\u0427"+ + "\u0001\u0000\u0000\u0000\u0427\u0428\u0001\u0000\u0000\u0000\u0428\u0429"+ + "\u0005\u0003\u0000\u0000\u0429\u08ed\u0001\u0000\u0000\u0000\u042a\u042b"+ + "\u0005\u00af\u0000\u0000\u042b\u042c\u0005\u0002\u0000\u0000\u042c\u042d"+ + "\u0003\u0002\u0001\u0000\u042d\u042e\u0005\u0004\u0000\u0000\u042e\u0431"+ + "\u0003\u0002\u0001\u0000\u042f\u0430\u0005\u0004\u0000\u0000\u0430\u0432"+ + "\u0003\u0002\u0001\u0000\u0431\u042f\u0001\u0000\u0000\u0000\u0431\u0432"+ + "\u0001\u0000\u0000\u0000\u0432\u0433\u0001\u0000\u0000\u0000\u0433\u0434"+ + "\u0005\u0003\u0000\u0000\u0434\u08ed\u0001\u0000\u0000\u0000\u0435\u0436"+ + "\u0005\u00b0\u0000\u0000\u0436\u0437\u0005\u0002\u0000\u0000\u0437\u08ed"+ + "\u0005\u0003\u0000\u0000\u0438\u0439\u0005\u00b1\u0000\u0000\u0439\u043a"+ + "\u0005\u0002\u0000\u0000\u043a\u08ed\u0005\u0003\u0000\u0000\u043b\u043c"+ + "\u0005\u00b2\u0000\u0000\u043c\u043d\u0005\u0002\u0000\u0000\u043d\u043e"+ + "\u0003\u0002\u0001\u0000\u043e\u043f\u0005\u0003\u0000\u0000\u043f\u08ed"+ + "\u0001\u0000\u0000\u0000\u0440\u0441\u0005\u00b3\u0000\u0000\u0441\u0442"+ + "\u0005\u0002\u0000\u0000\u0442\u0443\u0003\u0002\u0001\u0000\u0443\u0444"+ + "\u0005\u0003\u0000\u0000\u0444\u08ed\u0001\u0000\u0000\u0000\u0445\u0446"+ + "\u0005\u00b4\u0000\u0000\u0446\u0447\u0005\u0002\u0000\u0000\u0447\u0448"+ + "\u0003\u0002\u0001\u0000\u0448\u0449\u0005\u0003\u0000\u0000\u0449\u08ed"+ + "\u0001\u0000\u0000\u0000\u044a\u044b\u0005\u00b5\u0000\u0000\u044b\u044c"+ + "\u0005\u0002\u0000\u0000\u044c\u044d\u0003\u0002\u0001\u0000\u044d\u044e"+ + "\u0005\u0003\u0000\u0000\u044e\u08ed\u0001\u0000\u0000\u0000\u044f\u0450"+ + "\u0005\u00b6\u0000\u0000\u0450\u0451\u0005\u0002\u0000\u0000\u0451\u0452"+ + "\u0003\u0002\u0001\u0000\u0452\u0453\u0005\u0003\u0000\u0000\u0453\u08ed"+ + "\u0001\u0000\u0000\u0000\u0454\u0455\u0005\u00b7\u0000\u0000\u0455\u0456"+ + "\u0005\u0002\u0000\u0000\u0456\u0457\u0003\u0002\u0001\u0000\u0457\u0458"+ + "\u0005\u0003\u0000\u0000\u0458\u08ed\u0001\u0000\u0000\u0000\u0459\u045a"+ + "\u0005\u00b8\u0000\u0000\u045a\u045b\u0005\u0002\u0000\u0000\u045b\u045e"+ + "\u0003\u0002\u0001\u0000\u045c\u045d\u0005\u0004\u0000\u0000\u045d\u045f"+ + "\u0003\u0002\u0001\u0000\u045e\u045c\u0001\u0000\u0000\u0000\u045e\u045f"+ + "\u0001\u0000\u0000\u0000\u045f\u0460\u0001\u0000\u0000\u0000\u0460\u0461"+ + "\u0005\u0003\u0000\u0000\u0461\u08ed\u0001\u0000\u0000\u0000\u0462\u0463"+ + "\u0005\u00b9\u0000\u0000\u0463\u0464\u0005\u0002\u0000\u0000\u0464\u0465"+ + "\u0003\u0002\u0001\u0000\u0465\u0466\u0005\u0004\u0000\u0000\u0466\u0467"+ + "\u0003\u0002\u0001\u0000\u0467\u0468\u0005\u0004\u0000\u0000\u0468\u0469"+ + "\u0003\u0002\u0001\u0000\u0469\u046a\u0005\u0003\u0000\u0000\u046a\u08ed"+ + "\u0001\u0000\u0000\u0000\u046b\u046c\u0005\u00ba\u0000\u0000\u046c\u046d"+ + "\u0005\u0002\u0000\u0000\u046d\u046e\u0003\u0002\u0001\u0000\u046e\u046f"+ + "\u0005\u0004\u0000\u0000\u046f\u0470\u0003\u0002\u0001\u0000\u0470\u0471"+ + "\u0005\u0003\u0000\u0000\u0471\u08ed\u0001\u0000\u0000\u0000\u0472\u0473"+ + "\u0005\u00bb\u0000\u0000\u0473\u0474\u0005\u0002\u0000\u0000\u0474\u0475"+ + "\u0003\u0002\u0001\u0000\u0475\u0476\u0005\u0004\u0000\u0000\u0476\u0479"+ + "\u0003\u0002\u0001\u0000\u0477\u0478\u0005\u0004\u0000\u0000\u0478\u047a"+ + "\u0003\u0002\u0001\u0000\u0479\u0477\u0001\u0000\u0000\u0000\u0479\u047a"+ + "\u0001\u0000\u0000\u0000\u047a\u047b\u0001\u0000\u0000\u0000\u047b\u047c"+ + "\u0005\u0003\u0000\u0000\u047c\u08ed\u0001\u0000\u0000\u0000\u047d\u047e"+ + "\u0005\u00bc\u0000\u0000\u047e\u047f\u0005\u0002\u0000\u0000\u047f\u0480"+ + "\u0003\u0002\u0001\u0000\u0480\u0481\u0005\u0004\u0000\u0000\u0481\u0482"+ + "\u0003\u0002\u0001\u0000\u0482\u0483\u0005\u0003\u0000\u0000\u0483\u08ed"+ + "\u0001\u0000\u0000\u0000\u0484\u0485\u0005\u00bd\u0000\u0000\u0485\u0486"+ + "\u0005\u0002\u0000\u0000\u0486\u0487\u0003\u0002\u0001\u0000\u0487\u0488"+ + "\u0005\u0004\u0000\u0000\u0488\u0489\u0003\u0002\u0001\u0000\u0489\u048a"+ + "\u0005\u0003\u0000\u0000\u048a\u08ed\u0001\u0000\u0000\u0000\u048b\u048c"+ + "\u0005\u00be\u0000\u0000\u048c\u048d\u0005\u0002\u0000\u0000\u048d\u048e"+ + "\u0003\u0002\u0001\u0000\u048e\u048f\u0005\u0004\u0000\u0000\u048f\u0492"+ + "\u0003\u0002\u0001\u0000\u0490\u0491\u0005\u0004\u0000\u0000\u0491\u0493"+ + "\u0003\u0002\u0001\u0000\u0492\u0490\u0001\u0000\u0000\u0000\u0492\u0493"+ + "\u0001\u0000\u0000\u0000\u0493\u0494\u0001\u0000\u0000\u0000\u0494\u0495"+ + "\u0005\u0003\u0000\u0000\u0495\u08ed\u0001\u0000\u0000\u0000\u0496\u0497"+ + "\u0005\u00bf\u0000\u0000\u0497\u0498\u0005\u0002\u0000\u0000\u0498\u0499"+ + "\u0003\u0002\u0001\u0000\u0499\u049a\u0005\u0004\u0000\u0000\u049a\u049d"+ + "\u0003\u0002\u0001\u0000\u049b\u049c\u0005\u0004\u0000\u0000\u049c\u049e"+ + "\u0003\u0002\u0001\u0000\u049d\u049b\u0001\u0000\u0000\u0000\u049d\u049e"+ + "\u0001\u0000\u0000\u0000\u049e\u049f\u0001\u0000\u0000\u0000\u049f\u04a0"+ + "\u0005\u0003\u0000\u0000\u04a0\u08ed\u0001\u0000\u0000\u0000\u04a1\u04a2"+ + "\u0005\u00c0\u0000\u0000\u04a2\u04a3\u0005\u0002\u0000\u0000\u04a3\u04a6"+ + "\u0003\u0002\u0001\u0000\u04a4\u04a5\u0005\u0004\u0000\u0000\u04a5\u04a7"+ + "\u0003\u0002\u0001\u0000\u04a6\u04a4\u0001\u0000\u0000\u0000\u04a6\u04a7"+ + "\u0001\u0000\u0000\u0000\u04a7\u04a8\u0001\u0000\u0000\u0000\u04a8\u04a9"+ + "\u0005\u0003\u0000\u0000\u04a9\u08ed\u0001\u0000\u0000\u0000\u04aa\u04ab"+ + "\u0005\u00c1\u0000\u0000\u04ab\u04ac\u0005\u0002\u0000\u0000\u04ac\u04b1"+ + "\u0003\u0002\u0001\u0000\u04ad\u04ae\u0005\u0004\u0000\u0000\u04ae\u04b0"+ + "\u0003\u0002\u0001\u0000\u04af\u04ad\u0001\u0000\u0000\u0000\u04b0\u04b3"+ + "\u0001\u0000\u0000\u0000\u04b1\u04af\u0001\u0000\u0000\u0000\u04b1\u04b2"+ + "\u0001\u0000\u0000\u0000\u04b2\u04b4\u0001\u0000\u0000\u0000\u04b3\u04b1"+ + "\u0001\u0000\u0000\u0000\u04b4\u04b5\u0005\u0003\u0000\u0000\u04b5\u08ed"+ + "\u0001\u0000\u0000\u0000\u04b6\u04b7\u0005\u00c2\u0000\u0000\u04b7\u04b8"+ + "\u0005\u0002\u0000\u0000\u04b8\u04bd\u0003\u0002\u0001\u0000\u04b9\u04ba"+ + "\u0005\u0004\u0000\u0000\u04ba\u04bc\u0003\u0002\u0001\u0000\u04bb\u04b9"+ + "\u0001\u0000\u0000\u0000\u04bc\u04bf\u0001\u0000\u0000\u0000\u04bd\u04bb"+ + "\u0001\u0000\u0000\u0000\u04bd\u04be\u0001\u0000\u0000\u0000\u04be\u04c0"+ + "\u0001\u0000\u0000\u0000\u04bf\u04bd\u0001\u0000\u0000\u0000\u04c0\u04c1"+ + "\u0005\u0003\u0000\u0000\u04c1\u08ed\u0001\u0000\u0000\u0000\u04c2\u04c3"+ + "\u0005\u00c3\u0000\u0000\u04c3\u04c4\u0005\u0002\u0000\u0000\u04c4\u04c9"+ + "\u0003\u0002\u0001\u0000\u04c5\u04c6\u0005\u0004\u0000\u0000\u04c6\u04c8"+ + "\u0003\u0002\u0001\u0000\u04c7\u04c5\u0001\u0000\u0000\u0000\u04c8\u04cb"+ + "\u0001\u0000\u0000\u0000\u04c9\u04c7\u0001\u0000\u0000\u0000\u04c9\u04ca"+ + "\u0001\u0000\u0000\u0000\u04ca\u04cc\u0001\u0000\u0000\u0000\u04cb\u04c9"+ + "\u0001\u0000\u0000\u0000\u04cc\u04cd\u0005\u0003\u0000\u0000\u04cd\u08ed"+ + "\u0001\u0000\u0000\u0000\u04ce\u04cf\u0005\u00c4\u0000\u0000\u04cf\u04d0"+ + "\u0005\u0002\u0000\u0000\u04d0\u04d1\u0003\u0002\u0001\u0000\u04d1\u04d2"+ + "\u0005\u0004\u0000\u0000\u04d2\u04d3\u0003\u0002\u0001\u0000\u04d3\u04d4"+ + "\u0005\u0003\u0000\u0000\u04d4\u08ed\u0001\u0000\u0000\u0000\u04d5\u04d6"+ + "\u0005\u00c5\u0000\u0000\u04d6\u04d7\u0005\u0002\u0000\u0000\u04d7\u04dc"+ + "\u0003\u0002\u0001\u0000\u04d8\u04d9\u0005\u0004\u0000\u0000\u04d9\u04db"+ + "\u0003\u0002\u0001\u0000\u04da\u04d8\u0001\u0000\u0000\u0000\u04db\u04de"+ + "\u0001\u0000\u0000\u0000\u04dc\u04da\u0001\u0000\u0000\u0000\u04dc\u04dd"+ + "\u0001\u0000\u0000\u0000\u04dd\u04df\u0001\u0000\u0000\u0000\u04de\u04dc"+ + "\u0001\u0000\u0000\u0000\u04df\u04e0\u0005\u0003\u0000\u0000\u04e0\u08ed"+ + "\u0001\u0000\u0000\u0000\u04e1\u04e2\u0005\u00c6\u0000\u0000\u04e2\u04e3"+ + "\u0005\u0002\u0000\u0000\u04e3\u04e4\u0003\u0002\u0001\u0000\u04e4\u04e5"+ + "\u0005\u0004\u0000\u0000\u04e5\u04e6\u0003\u0002\u0001\u0000\u04e6\u04e7"+ + "\u0005\u0003\u0000\u0000\u04e7\u08ed\u0001\u0000\u0000\u0000\u04e8\u04e9"+ + "\u0005\u00c7\u0000\u0000\u04e9\u04ea\u0005\u0002\u0000\u0000\u04ea\u04eb"+ + "\u0003\u0002\u0001\u0000\u04eb\u04ec\u0005\u0004\u0000\u0000\u04ec\u04ed"+ + "\u0003\u0002\u0001\u0000\u04ed\u04ee\u0005\u0003\u0000\u0000\u04ee\u08ed"+ + "\u0001\u0000\u0000\u0000\u04ef\u04f0\u0005\u00c8\u0000\u0000\u04f0\u04f1"+ + "\u0005\u0002\u0000\u0000\u04f1\u04f2\u0003\u0002\u0001\u0000\u04f2\u04f3"+ + "\u0005\u0004\u0000\u0000\u04f3\u04f4\u0003\u0002\u0001\u0000\u04f4\u04f5"+ + "\u0005\u0003\u0000\u0000\u04f5\u08ed\u0001\u0000\u0000\u0000\u04f6\u04f7"+ + "\u0005\u00c9\u0000\u0000\u04f7\u04f8\u0005\u0002\u0000\u0000\u04f8\u04f9"+ + "\u0003\u0002\u0001\u0000\u04f9\u04fa\u0005\u0004\u0000\u0000\u04fa\u04fb"+ + "\u0003\u0002\u0001\u0000\u04fb\u04fc\u0005\u0003\u0000\u0000\u04fc\u08ed"+ + "\u0001\u0000\u0000\u0000\u04fd\u04fe\u0005\u00ca\u0000\u0000\u04fe\u04ff"+ + "\u0005\u0002\u0000\u0000\u04ff\u0504\u0003\u0002\u0001\u0000\u0500\u0501"+ + "\u0005\u0004\u0000\u0000\u0501\u0503\u0003\u0002\u0001\u0000\u0502\u0500"+ + "\u0001\u0000\u0000\u0000\u0503\u0506\u0001\u0000\u0000\u0000\u0504\u0502"+ + "\u0001\u0000\u0000\u0000\u0504\u0505\u0001\u0000\u0000\u0000\u0505\u0507"+ + "\u0001\u0000\u0000\u0000\u0506\u0504\u0001\u0000\u0000\u0000\u0507\u0508"+ + "\u0005\u0003\u0000\u0000\u0508\u08ed\u0001\u0000\u0000\u0000\u0509\u050a"+ + "\u0005\u00cb\u0000\u0000\u050a\u050b\u0005\u0002\u0000\u0000\u050b\u050c"+ + "\u0003\u0002\u0001\u0000\u050c\u050d\u0005\u0004\u0000\u0000\u050d\u0510"+ + "\u0003\u0002\u0001\u0000\u050e\u050f\u0005\u0004\u0000\u0000\u050f\u0511"+ + "\u0003\u0002\u0001\u0000\u0510\u050e\u0001\u0000\u0000\u0000\u0510\u0511"+ + "\u0001\u0000\u0000\u0000\u0511\u0512\u0001\u0000\u0000\u0000\u0512\u0513"+ + "\u0005\u0003\u0000\u0000\u0513\u08ed\u0001\u0000\u0000\u0000\u0514\u0515"+ + "\u0005\u00cc\u0000\u0000\u0515\u0516\u0005\u0002\u0000\u0000\u0516\u051b"+ + "\u0003\u0002\u0001\u0000\u0517\u0518\u0005\u0004\u0000\u0000\u0518\u051a"+ + "\u0003\u0002\u0001\u0000\u0519\u0517\u0001\u0000\u0000\u0000\u051a\u051d"+ + "\u0001\u0000\u0000\u0000\u051b\u0519\u0001\u0000\u0000\u0000\u051b\u051c"+ + "\u0001\u0000\u0000\u0000\u051c\u051e\u0001\u0000\u0000\u0000\u051d\u051b"+ + "\u0001\u0000\u0000\u0000\u051e\u051f\u0005\u0003\u0000\u0000\u051f\u08ed"+ + "\u0001\u0000\u0000\u0000\u0520\u0521\u0005\u00cd\u0000\u0000\u0521\u0522"+ + "\u0005\u0002\u0000\u0000\u0522\u0527\u0003\u0002\u0001\u0000\u0523\u0524"+ + "\u0005\u0004\u0000\u0000\u0524\u0526\u0003\u0002\u0001\u0000\u0525\u0523"+ + "\u0001\u0000\u0000\u0000\u0526\u0529\u0001\u0000\u0000\u0000\u0527\u0525"+ + "\u0001\u0000\u0000\u0000\u0527\u0528\u0001\u0000\u0000\u0000\u0528\u052a"+ + "\u0001\u0000\u0000\u0000\u0529\u0527\u0001\u0000\u0000\u0000\u052a\u052b"+ + "\u0005\u0003\u0000\u0000\u052b\u08ed\u0001\u0000\u0000\u0000\u052c\u052d"+ + "\u0005\u00ce\u0000\u0000\u052d\u052e\u0005\u0002\u0000\u0000\u052e\u0533"+ + "\u0003\u0002\u0001\u0000\u052f\u0530\u0005\u0004\u0000\u0000\u0530\u0532"+ + "\u0003\u0002\u0001\u0000\u0531\u052f\u0001\u0000\u0000\u0000\u0532\u0535"+ + "\u0001\u0000\u0000\u0000\u0533\u0531\u0001\u0000\u0000\u0000\u0533\u0534"+ + "\u0001\u0000\u0000\u0000\u0534\u0536\u0001\u0000\u0000\u0000\u0535\u0533"+ + "\u0001\u0000\u0000\u0000\u0536\u0537\u0005\u0003\u0000\u0000\u0537\u08ed"+ + "\u0001\u0000\u0000\u0000\u0538\u0539\u0005\u00cf\u0000\u0000\u0539\u053a"+ + "\u0005\u0002\u0000\u0000\u053a\u053f\u0003\u0002\u0001\u0000\u053b\u053c"+ + "\u0005\u0004\u0000\u0000\u053c\u053e\u0003\u0002\u0001\u0000\u053d\u053b"+ + "\u0001\u0000\u0000\u0000\u053e\u0541\u0001\u0000\u0000\u0000\u053f\u053d"+ + "\u0001\u0000\u0000\u0000\u053f\u0540\u0001\u0000\u0000\u0000\u0540\u0542"+ + "\u0001\u0000\u0000\u0000\u0541\u053f\u0001\u0000\u0000\u0000\u0542\u0543"+ + "\u0005\u0003\u0000\u0000\u0543\u08ed\u0001\u0000\u0000\u0000\u0544\u0545"+ + "\u0005\u00d0\u0000\u0000\u0545\u0546\u0005\u0002\u0000\u0000\u0546\u054b"+ + "\u0003\u0002\u0001\u0000\u0547\u0548\u0005\u0004\u0000\u0000\u0548\u054a"+ + "\u0003\u0002\u0001\u0000\u0549\u0547\u0001\u0000\u0000\u0000\u054a\u054d"+ + "\u0001\u0000\u0000\u0000\u054b\u0549\u0001\u0000\u0000\u0000\u054b\u054c"+ + "\u0001\u0000\u0000\u0000\u054c\u054e\u0001\u0000\u0000\u0000\u054d\u054b"+ + "\u0001\u0000\u0000\u0000\u054e\u054f\u0005\u0003\u0000\u0000\u054f\u08ed"+ + "\u0001\u0000\u0000\u0000\u0550\u0551\u0005\u00d1\u0000\u0000\u0551\u0552"+ + "\u0005\u0002\u0000\u0000\u0552\u0553\u0003\u0002\u0001\u0000\u0553\u0554"+ + "\u0005\u0004\u0000\u0000\u0554\u0557\u0003\u0002\u0001\u0000\u0555\u0556"+ + "\u0005\u0004\u0000\u0000\u0556\u0558\u0003\u0002\u0001\u0000\u0557\u0555"+ + "\u0001\u0000\u0000\u0000\u0557\u0558\u0001\u0000\u0000\u0000\u0558\u0559"+ + "\u0001\u0000\u0000\u0000\u0559\u055a\u0005\u0003\u0000\u0000\u055a\u08ed"+ + "\u0001\u0000\u0000\u0000\u055b\u055c\u0005\u00d2\u0000\u0000\u055c\u055d"+ + "\u0005\u0002\u0000\u0000\u055d\u0562\u0003\u0002\u0001\u0000\u055e\u055f"+ + "\u0005\u0004\u0000\u0000\u055f\u0561\u0003\u0002\u0001\u0000\u0560\u055e"+ + "\u0001\u0000\u0000\u0000\u0561\u0564\u0001\u0000\u0000\u0000\u0562\u0560"+ + "\u0001\u0000\u0000\u0000\u0562\u0563\u0001\u0000\u0000\u0000\u0563\u0565"+ + "\u0001\u0000\u0000\u0000\u0564\u0562\u0001\u0000\u0000\u0000\u0565\u0566"+ + "\u0005\u0003\u0000\u0000\u0566\u08ed\u0001\u0000\u0000\u0000\u0567\u0568"+ + "\u0005\u00d3\u0000\u0000\u0568\u0569\u0005\u0002\u0000\u0000\u0569\u056e"+ + "\u0003\u0002\u0001\u0000\u056a\u056b\u0005\u0004\u0000\u0000\u056b\u056d"+ + "\u0003\u0002\u0001\u0000\u056c\u056a\u0001\u0000\u0000\u0000\u056d\u0570"+ + "\u0001\u0000\u0000\u0000\u056e\u056c\u0001\u0000\u0000\u0000\u056e\u056f"+ + "\u0001\u0000\u0000\u0000\u056f\u0571\u0001\u0000\u0000\u0000\u0570\u056e"+ + "\u0001\u0000\u0000\u0000\u0571\u0572\u0005\u0003\u0000\u0000\u0572\u08ed"+ + "\u0001\u0000\u0000\u0000\u0573\u0574\u0005\u00d4\u0000\u0000\u0574\u0575"+ + "\u0005\u0002\u0000\u0000\u0575\u057a\u0003\u0002\u0001\u0000\u0576\u0577"+ + "\u0005\u0004\u0000\u0000\u0577\u0579\u0003\u0002\u0001\u0000\u0578\u0576"+ + "\u0001\u0000\u0000\u0000\u0579\u057c\u0001\u0000\u0000\u0000\u057a\u0578"+ + "\u0001\u0000\u0000\u0000\u057a\u057b\u0001\u0000\u0000\u0000\u057b\u057d"+ + "\u0001\u0000\u0000\u0000\u057c\u057a\u0001\u0000\u0000\u0000\u057d\u057e"+ + "\u0005\u0003\u0000\u0000\u057e\u08ed\u0001\u0000\u0000\u0000\u057f\u0580"+ + "\u0005\u00d5\u0000\u0000\u0580\u0581\u0005\u0002\u0000\u0000\u0581\u0582"+ + "\u0003\u0002\u0001\u0000\u0582\u0583\u0005\u0004\u0000\u0000\u0583\u0584"+ + "\u0003\u0002\u0001\u0000\u0584\u0585\u0005\u0003\u0000\u0000\u0585\u08ed"+ + "\u0001\u0000\u0000\u0000\u0586\u0587\u0005\u00d6\u0000\u0000\u0587\u0588"+ + "\u0005\u0002\u0000\u0000\u0588\u0589\u0003\u0002\u0001\u0000\u0589\u058a"+ + "\u0005\u0004\u0000\u0000\u058a\u058b\u0003\u0002\u0001\u0000\u058b\u058c"+ + "\u0005\u0003\u0000\u0000\u058c\u08ed\u0001\u0000\u0000\u0000\u058d\u058e"+ + "\u0005\u00d7\u0000\u0000\u058e\u058f\u0005\u0002\u0000\u0000\u058f\u0594"+ + "\u0003\u0002\u0001\u0000\u0590\u0591\u0005\u0004\u0000\u0000\u0591\u0593"+ + "\u0003\u0002\u0001\u0000\u0592\u0590\u0001\u0000\u0000\u0000\u0593\u0596"+ + "\u0001\u0000\u0000\u0000\u0594\u0592\u0001\u0000\u0000\u0000\u0594\u0595"+ + "\u0001\u0000\u0000\u0000\u0595\u0597\u0001\u0000\u0000\u0000\u0596\u0594"+ + "\u0001\u0000\u0000\u0000\u0597\u0598\u0005\u0003\u0000\u0000\u0598\u08ed"+ + "\u0001\u0000\u0000\u0000\u0599\u059a\u0005\u00d8\u0000\u0000\u059a\u059b"+ + "\u0005\u0002\u0000\u0000\u059b\u05a0\u0003\u0002\u0001\u0000\u059c\u059d"+ + "\u0005\u0004\u0000\u0000\u059d\u059f\u0003\u0002\u0001\u0000\u059e\u059c"+ + "\u0001\u0000\u0000\u0000\u059f\u05a2\u0001\u0000\u0000\u0000\u05a0\u059e"+ + "\u0001\u0000\u0000\u0000\u05a0\u05a1\u0001\u0000\u0000\u0000\u05a1\u05a3"+ + "\u0001\u0000\u0000\u0000\u05a2\u05a0\u0001\u0000\u0000\u0000\u05a3\u05a4"+ + "\u0005\u0003\u0000\u0000\u05a4\u08ed\u0001\u0000\u0000\u0000\u05a5\u05a6"+ + "\u0005\u00d9\u0000\u0000\u05a6\u05a7\u0005\u0002\u0000\u0000\u05a7\u05ac"+ + "\u0003\u0002\u0001\u0000\u05a8\u05a9\u0005\u0004\u0000\u0000\u05a9\u05ab"+ + "\u0003\u0002\u0001\u0000\u05aa\u05a8\u0001\u0000\u0000\u0000\u05ab\u05ae"+ + "\u0001\u0000\u0000\u0000\u05ac\u05aa\u0001\u0000\u0000\u0000\u05ac\u05ad"+ + "\u0001\u0000\u0000\u0000\u05ad\u05af\u0001\u0000\u0000\u0000\u05ae\u05ac"+ + "\u0001\u0000\u0000\u0000\u05af\u05b0\u0005\u0003\u0000\u0000\u05b0\u08ed"+ + "\u0001\u0000\u0000\u0000\u05b1\u05b2\u0005\u00da\u0000\u0000\u05b2\u05b3"+ + "\u0005\u0002\u0000\u0000\u05b3\u05b4\u0003\u0002\u0001\u0000\u05b4\u05b5"+ + "\u0005\u0004\u0000\u0000\u05b5\u05b6\u0003\u0002\u0001\u0000\u05b6\u05b7"+ + "\u0005\u0004\u0000\u0000\u05b7\u05b8\u0003\u0002\u0001\u0000\u05b8\u05b9"+ + "\u0005\u0004\u0000\u0000\u05b9\u05ba\u0003\u0002\u0001\u0000\u05ba\u05bb"+ + "\u0005\u0003\u0000\u0000\u05bb\u08ed\u0001\u0000\u0000\u0000\u05bc\u05bd"+ + "\u0005\u00db\u0000\u0000\u05bd\u05be\u0005\u0002\u0000\u0000\u05be\u05bf"+ + "\u0003\u0002\u0001\u0000\u05bf\u05c0\u0005\u0004\u0000\u0000\u05c0\u05c1"+ + "\u0003\u0002\u0001\u0000\u05c1\u05c2\u0005\u0004\u0000\u0000\u05c2\u05c3"+ + "\u0003\u0002\u0001\u0000\u05c3\u05c4\u0005\u0003\u0000\u0000\u05c4\u08ed"+ + "\u0001\u0000\u0000\u0000\u05c5\u05c6\u0005\u00dc\u0000\u0000\u05c6\u05c7"+ + "\u0005\u0002\u0000\u0000\u05c7\u05c8\u0003\u0002\u0001\u0000\u05c8\u05c9"+ + "\u0005\u0003\u0000\u0000\u05c9\u08ed\u0001\u0000\u0000\u0000\u05ca\u05cb"+ + "\u0005\u00dd\u0000\u0000\u05cb\u05cc\u0005\u0002\u0000\u0000\u05cc\u05cd"+ + "\u0003\u0002\u0001\u0000\u05cd\u05ce\u0005\u0003\u0000\u0000\u05ce\u08ed"+ + "\u0001\u0000\u0000\u0000\u05cf\u05d0\u0005\u00de\u0000\u0000\u05d0\u05d1"+ + "\u0005\u0002\u0000\u0000\u05d1\u05d2\u0003\u0002\u0001\u0000\u05d2\u05d3"+ + "\u0005\u0004\u0000\u0000\u05d3\u05d4\u0003\u0002\u0001\u0000\u05d4\u05d5"+ + "\u0005\u0004\u0000\u0000\u05d5\u05d6\u0003\u0002\u0001\u0000\u05d6\u05d7"+ + "\u0005\u0003\u0000\u0000\u05d7\u08ed\u0001\u0000\u0000\u0000\u05d8\u05d9"+ + "\u0005\u00df\u0000\u0000\u05d9\u05da\u0005\u0002\u0000\u0000\u05da\u05db"+ + "\u0003\u0002\u0001\u0000\u05db\u05dc\u0005\u0004\u0000\u0000\u05dc\u05dd"+ + "\u0003\u0002\u0001\u0000\u05dd\u05de\u0005\u0004\u0000\u0000\u05de\u05df"+ + "\u0003\u0002\u0001\u0000\u05df\u05e0\u0005\u0003\u0000\u0000\u05e0\u08ed"+ + "\u0001\u0000\u0000\u0000\u05e1\u05e2\u0005\u00e0\u0000\u0000\u05e2\u05e3"+ + "\u0005\u0002\u0000\u0000\u05e3\u05e4\u0003\u0002\u0001\u0000\u05e4\u05e5"+ + "\u0005\u0004\u0000\u0000\u05e5\u05e6\u0003\u0002\u0001\u0000\u05e6\u05e7"+ + "\u0005\u0004\u0000\u0000\u05e7\u05e8\u0003\u0002\u0001\u0000\u05e8\u05e9"+ + "\u0005\u0004\u0000\u0000\u05e9\u05ea\u0003\u0002\u0001\u0000\u05ea\u05eb"+ + "\u0005\u0003\u0000\u0000\u05eb\u08ed\u0001\u0000\u0000\u0000\u05ec\u05ed"+ + "\u0005\u00e1\u0000\u0000\u05ed\u05ee\u0005\u0002\u0000\u0000\u05ee\u05ef"+ + "\u0003\u0002\u0001\u0000\u05ef\u05f0\u0005\u0004\u0000\u0000\u05f0\u05f1"+ + "\u0003\u0002\u0001\u0000\u05f1\u05f2\u0005\u0004\u0000\u0000\u05f2\u05f3"+ + "\u0003\u0002\u0001\u0000\u05f3\u05f4\u0005\u0003\u0000\u0000\u05f4\u08ed"+ + "\u0001\u0000\u0000\u0000\u05f5\u05f6\u0005\u00e2\u0000\u0000\u05f6\u05f7"+ + "\u0005\u0002\u0000\u0000\u05f7\u05f8\u0003\u0002\u0001\u0000\u05f8\u05f9"+ + "\u0005\u0004\u0000\u0000\u05f9\u05fa\u0003\u0002\u0001\u0000\u05fa\u05fb"+ + "\u0005\u0004\u0000\u0000\u05fb\u05fc\u0003\u0002\u0001\u0000\u05fc\u05fd"+ + "\u0005\u0003\u0000\u0000\u05fd\u08ed\u0001\u0000\u0000\u0000\u05fe\u05ff"+ + "\u0005\u00e3\u0000\u0000\u05ff\u0600\u0005\u0002\u0000\u0000\u0600\u0601"+ + "\u0003\u0002\u0001\u0000\u0601\u0602\u0005\u0004\u0000\u0000\u0602\u0603"+ + "\u0003\u0002\u0001\u0000\u0603\u0604\u0005\u0004\u0000\u0000\u0604\u0605"+ + "\u0003\u0002\u0001\u0000\u0605\u0606\u0005\u0003\u0000\u0000\u0606\u08ed"+ + "\u0001\u0000\u0000\u0000\u0607\u0608\u0005\u00e4\u0000\u0000\u0608\u0609"+ + "\u0005\u0002\u0000\u0000\u0609\u060a\u0003\u0002\u0001\u0000\u060a\u060b"+ + "\u0005\u0003\u0000\u0000\u060b\u08ed\u0001\u0000\u0000\u0000\u060c\u060d"+ + "\u0005\u00e5\u0000\u0000\u060d\u060e\u0005\u0002\u0000\u0000\u060e\u060f"+ + "\u0003\u0002\u0001\u0000\u060f\u0610\u0005\u0003\u0000\u0000\u0610\u08ed"+ + "\u0001\u0000\u0000\u0000\u0611\u0612\u0005\u00e6\u0000\u0000\u0612\u0613"+ + "\u0005\u0002\u0000\u0000\u0613\u0614\u0003\u0002\u0001\u0000\u0614\u0615"+ + "\u0005\u0004\u0000\u0000\u0615\u0616\u0003\u0002\u0001\u0000\u0616\u0617"+ + "\u0005\u0004\u0000\u0000\u0617\u0618\u0003\u0002\u0001\u0000\u0618\u0619"+ + "\u0005\u0004\u0000\u0000\u0619\u061a\u0003\u0002\u0001\u0000\u061a\u061b"+ + "\u0005\u0003\u0000\u0000\u061b\u08ed\u0001\u0000\u0000\u0000\u061c\u061d"+ + "\u0005\u00e7\u0000\u0000\u061d\u061e\u0005\u0002\u0000\u0000\u061e\u061f"+ + "\u0003\u0002\u0001\u0000\u061f\u0620\u0005\u0004\u0000\u0000\u0620\u0621"+ + "\u0003\u0002\u0001\u0000\u0621\u0622\u0005\u0004\u0000\u0000\u0622\u0623"+ + "\u0003\u0002\u0001\u0000\u0623\u0624\u0005\u0003\u0000\u0000\u0624\u08ed"+ + "\u0001\u0000\u0000\u0000\u0625\u0626\u0005\u00e8\u0000\u0000\u0626\u0627"+ + "\u0005\u0002\u0000\u0000\u0627\u0628\u0003\u0002\u0001\u0000\u0628\u0629"+ + "\u0005\u0003\u0000\u0000\u0629\u08ed\u0001\u0000\u0000\u0000\u062a\u062b"+ + "\u0005\u00e9\u0000\u0000\u062b\u062c\u0005\u0002\u0000\u0000\u062c\u062d"+ + "\u0003\u0002\u0001\u0000\u062d\u062e\u0005\u0004\u0000\u0000\u062e\u062f"+ + "\u0003\u0002\u0001\u0000\u062f\u0630\u0005\u0004\u0000\u0000\u0630\u0631"+ + "\u0003\u0002\u0001\u0000\u0631\u0632\u0005\u0004\u0000\u0000\u0632\u0633"+ + "\u0003\u0002\u0001\u0000\u0633\u0634\u0005\u0003\u0000\u0000\u0634\u08ed"+ + "\u0001\u0000\u0000\u0000\u0635\u0636\u0005\u00ea\u0000\u0000\u0636\u0637"+ + "\u0005\u0002\u0000\u0000\u0637\u0638\u0003\u0002\u0001\u0000\u0638\u0639"+ + "\u0005\u0004\u0000\u0000\u0639\u063a\u0003\u0002\u0001\u0000\u063a\u063b"+ + "\u0005\u0004\u0000\u0000\u063b\u063c\u0003\u0002\u0001\u0000\u063c\u063d"+ + "\u0005\u0003\u0000\u0000\u063d\u08ed\u0001\u0000\u0000\u0000\u063e\u063f"+ + "\u0005\u00eb\u0000\u0000\u063f\u0640\u0005\u0002\u0000\u0000\u0640\u0641"+ + "\u0003\u0002\u0001\u0000\u0641\u0642\u0005\u0004\u0000\u0000\u0642\u0643"+ + "\u0003\u0002\u0001\u0000\u0643\u0644\u0005\u0004\u0000\u0000\u0644\u0645"+ + "\u0003\u0002\u0001\u0000\u0645\u0646\u0005\u0003\u0000\u0000\u0646\u08ed"+ + "\u0001\u0000\u0000\u0000\u0647\u0648\u0005\u00ec\u0000\u0000\u0648\u0649"+ + "\u0005\u0002\u0000\u0000\u0649\u064a\u0003\u0002\u0001\u0000\u064a\u064b"+ + "\u0005\u0004\u0000\u0000\u064b\u064c\u0003\u0002\u0001\u0000\u064c\u064d"+ + "\u0005\u0004\u0000\u0000\u064d\u064e\u0003\u0002\u0001\u0000\u064e\u064f"+ + "\u0005\u0003\u0000\u0000\u064f\u08ed\u0001\u0000\u0000\u0000\u0650\u0651"+ + "\u0005\u00ed\u0000\u0000\u0651\u0652\u0005\u0002\u0000\u0000\u0652\u0653"+ + "\u0003\u0002\u0001\u0000\u0653\u0654\u0005\u0004\u0000\u0000\u0654\u0655"+ + "\u0003\u0002\u0001\u0000\u0655\u0656\u0005\u0004\u0000\u0000\u0656\u0657"+ + "\u0003\u0002\u0001\u0000\u0657\u0658\u0005\u0003\u0000\u0000\u0658\u08ed"+ + "\u0001\u0000\u0000\u0000\u0659\u065a\u0005\u00ee\u0000\u0000\u065a\u065b"+ + "\u0005\u0002\u0000\u0000\u065b\u065c\u0003\u0002\u0001\u0000\u065c\u065d"+ + "\u0005\u0004\u0000\u0000\u065d\u065e\u0003\u0002\u0001\u0000\u065e\u065f"+ + "\u0005\u0004\u0000\u0000\u065f\u0660\u0003\u0002\u0001\u0000\u0660\u0661"+ + "\u0005\u0003\u0000\u0000\u0661\u08ed\u0001\u0000\u0000\u0000\u0662\u0663"+ + "\u0005\u00ef\u0000\u0000\u0663\u0664\u0005\u0002\u0000\u0000\u0664\u0665"+ + "\u0003\u0002\u0001\u0000\u0665\u0666\u0005\u0004\u0000\u0000\u0666\u0667"+ + "\u0003\u0002\u0001\u0000\u0667\u0668\u0005\u0003\u0000\u0000\u0668\u08ed"+ + "\u0001\u0000\u0000\u0000\u0669\u066a\u0005\u00f0\u0000\u0000\u066a\u066b"+ + "\u0005\u0002\u0000\u0000\u066b\u066c\u0003\u0002\u0001\u0000\u066c\u066d"+ + "\u0005\u0004\u0000\u0000\u066d\u066e\u0003\u0002\u0001\u0000\u066e\u066f"+ + "\u0005\u0004\u0000\u0000\u066f\u0670\u0003\u0002\u0001\u0000\u0670\u0671"+ + "\u0005\u0004\u0000\u0000\u0671\u0672\u0003\u0002\u0001\u0000\u0672\u0673"+ + "\u0005\u0003\u0000\u0000\u0673\u08ed\u0001\u0000\u0000\u0000\u0674\u0675"+ + "\u0005\u00f1\u0000\u0000\u0675\u0676\u0005\u0002\u0000\u0000\u0676\u0677"+ + "\u0003\u0002\u0001\u0000\u0677\u0678\u0005\u0004\u0000\u0000\u0678\u0679"+ + "\u0003\u0002\u0001\u0000\u0679\u067a\u0005\u0004\u0000\u0000\u067a\u0681"+ + "\u0003\u0002\u0001\u0000\u067b\u067c\u0005\u0004\u0000\u0000\u067c\u067f"+ + "\u0003\u0002\u0001\u0000\u067d\u067e\u0005\u0004\u0000\u0000\u067e\u0680"+ + "\u0003\u0002\u0001\u0000\u067f\u067d\u0001\u0000\u0000\u0000\u067f\u0680"+ + "\u0001\u0000\u0000\u0000\u0680\u0682\u0001\u0000\u0000\u0000\u0681\u067b"+ + "\u0001\u0000\u0000\u0000\u0681\u0682\u0001\u0000\u0000\u0000\u0682\u0683"+ + "\u0001\u0000\u0000\u0000\u0683\u0684\u0005\u0003\u0000\u0000\u0684\u08ed"+ + "\u0001\u0000\u0000\u0000\u0685\u0686\u0005\u00f2\u0000\u0000\u0686\u0687"+ + "\u0005\u0002\u0000\u0000\u0687\u0688\u0003\u0002\u0001\u0000\u0688\u0689"+ + "\u0005\u0004\u0000\u0000\u0689\u068a\u0003\u0002\u0001\u0000\u068a\u068b"+ + "\u0005\u0004\u0000\u0000\u068b\u068c\u0003\u0002\u0001\u0000\u068c\u068d"+ + "\u0005\u0004\u0000\u0000\u068d\u0694\u0003\u0002\u0001\u0000\u068e\u068f"+ + "\u0005\u0004\u0000\u0000\u068f\u0692\u0003\u0002\u0001\u0000\u0690\u0691"+ + "\u0005\u0004\u0000\u0000\u0691\u0693\u0003\u0002\u0001\u0000\u0692\u0690"+ + "\u0001\u0000\u0000\u0000\u0692\u0693\u0001\u0000\u0000\u0000\u0693\u0695"+ + "\u0001\u0000\u0000\u0000\u0694\u068e\u0001\u0000\u0000\u0000\u0694\u0695"+ + "\u0001\u0000\u0000\u0000\u0695\u0696\u0001\u0000\u0000\u0000\u0696\u0697"+ + "\u0005\u0003\u0000\u0000\u0697\u08ed\u0001\u0000\u0000\u0000\u0698\u0699"+ + "\u0005\u00f3\u0000\u0000\u0699\u069a\u0005\u0002\u0000\u0000\u069a\u069b"+ + "\u0003\u0002\u0001\u0000\u069b\u069c\u0005\u0004\u0000\u0000\u069c\u069d"+ + "\u0003\u0002\u0001\u0000\u069d\u069e\u0005\u0004\u0000\u0000\u069e\u069f"+ + "\u0003\u0002\u0001\u0000\u069f\u06a0\u0005\u0004\u0000\u0000\u06a0\u06a7"+ + "\u0003\u0002\u0001\u0000\u06a1\u06a2\u0005\u0004\u0000\u0000\u06a2\u06a5"+ + "\u0003\u0002\u0001\u0000\u06a3\u06a4\u0005\u0004\u0000\u0000\u06a4\u06a6"+ + "\u0003\u0002\u0001\u0000\u06a5\u06a3\u0001\u0000\u0000\u0000\u06a5\u06a6"+ + "\u0001\u0000\u0000\u0000\u06a6\u06a8\u0001\u0000\u0000\u0000\u06a7\u06a1"+ + "\u0001\u0000\u0000\u0000\u06a7\u06a8\u0001\u0000\u0000\u0000\u06a8\u06a9"+ + "\u0001\u0000\u0000\u0000\u06a9\u06aa\u0005\u0003\u0000\u0000\u06aa\u08ed"+ + "\u0001\u0000\u0000\u0000\u06ab\u06ac\u0005\u00f4\u0000\u0000\u06ac\u06ad"+ + "\u0005\u0002\u0000\u0000\u06ad\u06ae\u0003\u0002\u0001\u0000\u06ae\u06af"+ + "\u0005\u0004\u0000\u0000\u06af\u06b0\u0003\u0002\u0001\u0000\u06b0\u06b1"+ + "\u0005\u0004\u0000\u0000\u06b1\u06b8\u0003\u0002\u0001\u0000\u06b2\u06b3"+ + "\u0005\u0004\u0000\u0000\u06b3\u06b6\u0003\u0002\u0001\u0000\u06b4\u06b5"+ + "\u0005\u0004\u0000\u0000\u06b5\u06b7\u0003\u0002\u0001\u0000\u06b6\u06b4"+ + "\u0001\u0000\u0000\u0000\u06b6\u06b7\u0001\u0000\u0000\u0000\u06b7\u06b9"+ + "\u0001\u0000\u0000\u0000\u06b8\u06b2\u0001\u0000\u0000\u0000\u06b8\u06b9"+ + "\u0001\u0000\u0000\u0000\u06b9\u06ba\u0001\u0000\u0000\u0000\u06ba\u06bb"+ + "\u0005\u0003\u0000\u0000\u06bb\u08ed\u0001\u0000\u0000\u0000\u06bc\u06bd"+ + "\u0005\u00f5\u0000\u0000\u06bd\u06be\u0005\u0002\u0000\u0000\u06be\u06bf"+ + "\u0003\u0002\u0001\u0000\u06bf\u06c0\u0005\u0004\u0000\u0000\u06c0\u06c1"+ + "\u0003\u0002\u0001\u0000\u06c1\u06c2\u0005\u0004\u0000\u0000\u06c2\u06c9"+ + "\u0003\u0002\u0001\u0000\u06c3\u06c4\u0005\u0004\u0000\u0000\u06c4\u06c7"+ + "\u0003\u0002\u0001\u0000\u06c5\u06c6\u0005\u0004\u0000\u0000\u06c6\u06c8"+ + "\u0003\u0002\u0001\u0000\u06c7\u06c5\u0001\u0000\u0000\u0000\u06c7\u06c8"+ + "\u0001\u0000\u0000\u0000\u06c8\u06ca\u0001\u0000\u0000\u0000\u06c9\u06c3"+ + "\u0001\u0000\u0000\u0000\u06c9\u06ca\u0001\u0000\u0000\u0000\u06ca\u06cb"+ + "\u0001\u0000\u0000\u0000\u06cb\u06cc\u0005\u0003\u0000\u0000\u06cc\u08ed"+ + "\u0001\u0000\u0000\u0000\u06cd\u06ce\u0005\u00f6\u0000\u0000\u06ce\u06cf"+ + "\u0005\u0002\u0000\u0000\u06cf\u06d0\u0003\u0002\u0001\u0000\u06d0\u06d1"+ + "\u0005\u0004\u0000\u0000\u06d1\u06d2\u0003\u0002\u0001\u0000\u06d2\u06d3"+ + "\u0005\u0004\u0000\u0000\u06d3\u06da\u0003\u0002\u0001\u0000\u06d4\u06d5"+ + "\u0005\u0004\u0000\u0000\u06d5\u06d8\u0003\u0002\u0001\u0000\u06d6\u06d7"+ + "\u0005\u0004\u0000\u0000\u06d7\u06d9\u0003\u0002\u0001\u0000\u06d8\u06d6"+ + "\u0001\u0000\u0000\u0000\u06d8\u06d9\u0001\u0000\u0000\u0000\u06d9\u06db"+ + "\u0001\u0000\u0000\u0000\u06da\u06d4\u0001\u0000\u0000\u0000\u06da\u06db"+ + "\u0001\u0000\u0000\u0000\u06db\u06dc\u0001\u0000\u0000\u0000\u06dc\u06dd"+ + "\u0005\u0003\u0000\u0000\u06dd\u08ed\u0001\u0000\u0000\u0000\u06de\u06df"+ + "\u0005\u00f7\u0000\u0000\u06df\u06e0\u0005\u0002\u0000\u0000\u06e0\u06e1"+ + "\u0003\u0002\u0001\u0000\u06e1\u06e2\u0005\u0004\u0000\u0000\u06e2\u06e3"+ + "\u0003\u0002\u0001\u0000\u06e3\u06e4\u0005\u0004\u0000\u0000\u06e4\u06ef"+ + "\u0003\u0002\u0001\u0000\u06e5\u06e6\u0005\u0004\u0000\u0000\u06e6\u06ed"+ + "\u0003\u0002\u0001\u0000\u06e7\u06e8\u0005\u0004\u0000\u0000\u06e8\u06eb"+ + "\u0003\u0002\u0001\u0000\u06e9\u06ea\u0005\u0004\u0000\u0000\u06ea\u06ec"+ + "\u0003\u0002\u0001\u0000\u06eb\u06e9\u0001\u0000\u0000\u0000\u06eb\u06ec"+ + "\u0001\u0000\u0000\u0000\u06ec\u06ee\u0001\u0000\u0000\u0000\u06ed\u06e7"+ + "\u0001\u0000\u0000\u0000\u06ed\u06ee\u0001\u0000\u0000\u0000\u06ee\u06f0"+ + "\u0001\u0000\u0000\u0000\u06ef\u06e5\u0001\u0000\u0000\u0000\u06ef\u06f0"+ + "\u0001\u0000\u0000\u0000\u06f0\u06f1\u0001\u0000\u0000\u0000\u06f1\u06f2"+ + "\u0005\u0003\u0000\u0000\u06f2\u08ed\u0001\u0000\u0000\u0000\u06f3\u06f4"+ + "\u0005\u00f8\u0000\u0000\u06f4\u06f5\u0005\u0002\u0000\u0000\u06f5\u06f6"+ + "\u0003\u0002\u0001\u0000\u06f6\u06f7\u0005\u0004\u0000\u0000\u06f7\u06fc"+ + "\u0003\u0002\u0001\u0000\u06f8\u06f9\u0005\u0004\u0000\u0000\u06f9\u06fb"+ + "\u0003\u0002\u0001\u0000\u06fa\u06f8\u0001\u0000\u0000\u0000\u06fb\u06fe"+ + "\u0001\u0000\u0000\u0000\u06fc\u06fa\u0001\u0000\u0000\u0000\u06fc\u06fd"+ + "\u0001\u0000\u0000\u0000\u06fd\u06ff\u0001\u0000\u0000\u0000\u06fe\u06fc"+ + "\u0001\u0000\u0000\u0000\u06ff\u0700\u0005\u0003\u0000\u0000\u0700\u08ed"+ + "\u0001\u0000\u0000\u0000\u0701\u0702\u0005\u00f9\u0000\u0000\u0702\u0703"+ + "\u0005\u0002\u0000\u0000\u0703\u0704\u0003\u0002\u0001\u0000\u0704\u0705"+ + "\u0005\u0004\u0000\u0000\u0705\u0706\u0003\u0002\u0001\u0000\u0706\u0707"+ + "\u0005\u0004\u0000\u0000\u0707\u0708\u0003\u0002\u0001\u0000\u0708\u0709"+ + "\u0005\u0003\u0000\u0000\u0709\u08ed\u0001\u0000\u0000\u0000\u070a\u070b"+ + "\u0005\u00fa\u0000\u0000\u070b\u070c\u0005\u0002\u0000\u0000\u070c\u070f"+ + "\u0003\u0002\u0001\u0000\u070d\u070e\u0005\u0004\u0000\u0000\u070e\u0710"+ + "\u0003\u0002\u0001\u0000\u070f\u070d\u0001\u0000\u0000\u0000\u070f\u0710"+ + "\u0001\u0000\u0000\u0000\u0710\u0711\u0001\u0000\u0000\u0000\u0711\u0712"+ + "\u0005\u0003\u0000\u0000\u0712\u08ed\u0001\u0000\u0000\u0000\u0713\u0714"+ + "\u0005\u00fb\u0000\u0000\u0714\u0715\u0005\u0002\u0000\u0000\u0715\u0716"+ + "\u0003\u0002\u0001\u0000\u0716\u0717\u0005\u0004\u0000\u0000\u0717\u0718"+ + "\u0003\u0002\u0001\u0000\u0718\u0719\u0005\u0004\u0000\u0000\u0719\u071a"+ + "\u0003\u0002\u0001\u0000\u071a\u071b\u0005\u0003\u0000\u0000\u071b\u08ed"+ + "\u0001\u0000\u0000\u0000\u071c\u071d\u0005\u00fc\u0000\u0000\u071d\u071e"+ + "\u0005\u0002\u0000\u0000\u071e\u071f\u0003\u0002\u0001\u0000\u071f\u0720"+ + "\u0005\u0004\u0000\u0000\u0720\u0723\u0003\u0002\u0001\u0000\u0721\u0722"+ + "\u0005\u0004\u0000\u0000\u0722\u0724\u0003\u0002\u0001\u0000\u0723\u0721"+ + "\u0001\u0000\u0000\u0000\u0723\u0724\u0001\u0000\u0000\u0000\u0724\u0725"+ + "\u0001\u0000\u0000\u0000\u0725\u0726\u0005\u0003\u0000\u0000\u0726\u08ed"+ + "\u0001\u0000\u0000\u0000\u0727\u0728\u0005\u00fd\u0000\u0000\u0728\u0729"+ + "\u0005\u0002\u0000\u0000\u0729\u072a\u0003\u0002\u0001\u0000\u072a\u072b"+ + "\u0005\u0004\u0000\u0000\u072b\u072c\u0003\u0002\u0001\u0000\u072c\u072d"+ + "\u0005\u0004\u0000\u0000\u072d\u072e\u0003\u0002\u0001\u0000\u072e\u072f"+ + "\u0005\u0003\u0000\u0000\u072f\u08ed\u0001\u0000\u0000\u0000\u0730\u0731"+ + "\u0005\u00fe\u0000\u0000\u0731\u0732\u0005\u0002\u0000\u0000\u0732\u0733"+ + "\u0003\u0002\u0001\u0000\u0733\u0734\u0005\u0004\u0000\u0000\u0734\u0735"+ + "\u0003\u0002\u0001\u0000\u0735\u0736\u0005\u0004\u0000\u0000\u0736\u0737"+ + "\u0003\u0002\u0001\u0000\u0737\u0738\u0005\u0004\u0000\u0000\u0738\u073b"+ + "\u0003\u0002\u0001\u0000\u0739\u073a\u0005\u0004\u0000\u0000\u073a\u073c"+ + "\u0003\u0002\u0001\u0000\u073b\u0739\u0001\u0000\u0000\u0000\u073b\u073c"+ + "\u0001\u0000\u0000\u0000\u073c\u073d\u0001\u0000\u0000\u0000\u073d\u073e"+ + "\u0005\u0003\u0000\u0000\u073e\u08ed\u0001\u0000\u0000\u0000\u073f\u0740"+ + "\u0005\u00ff\u0000\u0000\u0740\u0741\u0005\u0002\u0000\u0000\u0741\u0742"+ + "\u0003\u0002\u0001\u0000\u0742\u0743\u0005\u0004\u0000\u0000\u0743\u0744"+ + "\u0003\u0002\u0001\u0000\u0744\u0745\u0005\u0004\u0000\u0000\u0745\u0746"+ + "\u0003\u0002\u0001\u0000\u0746\u0747\u0005\u0004\u0000\u0000\u0747\u074a"+ + "\u0003\u0002\u0001\u0000\u0748\u0749\u0005\u0004\u0000\u0000\u0749\u074b"+ + "\u0003\u0002\u0001\u0000\u074a\u0748\u0001\u0000\u0000\u0000\u074a\u074b"+ + "\u0001\u0000\u0000\u0000\u074b\u074c\u0001\u0000\u0000\u0000\u074c\u074d"+ + "\u0005\u0003\u0000\u0000\u074d\u08ed\u0001\u0000\u0000\u0000\u074e\u074f"+ + "\u0005\u0100\u0000\u0000\u074f\u0750\u0005\u0002\u0000\u0000\u0750\u0751"+ + "\u0003\u0002\u0001\u0000\u0751\u0752\u0005\u0004\u0000\u0000\u0752\u0753"+ + "\u0003\u0002\u0001\u0000\u0753\u0754\u0005\u0004\u0000\u0000\u0754\u0755"+ + "\u0003\u0002\u0001\u0000\u0755\u0756\u0005\u0004\u0000\u0000\u0756\u0757"+ + "\u0003\u0002\u0001\u0000\u0757\u0758\u0005\u0003\u0000\u0000\u0758\u08ed"+ + "\u0001\u0000\u0000\u0000\u0759\u075a\u0005\u0101\u0000\u0000\u075a\u075b"+ + "\u0005\u0002\u0000\u0000\u075b\u075c\u0003\u0002\u0001\u0000\u075c\u075d"+ + "\u0005\u0003\u0000\u0000\u075d\u08ed\u0001\u0000\u0000\u0000\u075e\u075f"+ + "\u0005\u0102\u0000\u0000\u075f\u0760\u0005\u0002\u0000\u0000\u0760\u0761"+ + "\u0003\u0002\u0001\u0000\u0761\u0762\u0005\u0003\u0000\u0000\u0762\u08ed"+ + "\u0001\u0000\u0000\u0000\u0763\u0764\u0005\u0103\u0000\u0000\u0764\u0765"+ + "\u0005\u0002\u0000\u0000\u0765\u0766\u0003\u0002\u0001\u0000\u0766\u0767"+ + "\u0005\u0003\u0000\u0000\u0767\u08ed\u0001\u0000\u0000\u0000\u0768\u0769"+ + "\u0005\u0104\u0000\u0000\u0769\u076a\u0005\u0002\u0000\u0000\u076a\u076b"+ + "\u0003\u0002\u0001\u0000\u076b\u076c\u0005\u0003\u0000\u0000\u076c\u08ed"+ + "\u0001\u0000\u0000\u0000\u076d\u076e\u0005\u0105\u0000\u0000\u076e\u076f"+ + "\u0005\u0002\u0000\u0000\u076f\u0770\u0003\u0002\u0001\u0000\u0770\u0771"+ + "\u0005\u0003\u0000\u0000\u0771\u08ed\u0001\u0000\u0000\u0000\u0772\u0773"+ + "\u0005\u0106\u0000\u0000\u0773\u0774\u0005\u0002\u0000\u0000\u0774\u0775"+ + "\u0003\u0002\u0001\u0000\u0775\u0776\u0005\u0003\u0000\u0000\u0776\u08ed"+ + "\u0001\u0000\u0000\u0000\u0777\u0778\u0005\u0107\u0000\u0000\u0778\u0779"+ + "\u0005\u0002\u0000\u0000\u0779\u077a\u0003\u0002\u0001\u0000\u077a\u077b"+ + "\u0005\u0003\u0000\u0000\u077b\u08ed\u0001\u0000\u0000\u0000\u077c\u077d"+ + "\u0005\u0108\u0000\u0000\u077d\u077e\u0005\u0002\u0000\u0000\u077e\u077f"+ + "\u0003\u0002\u0001\u0000\u077f\u0780\u0005\u0003\u0000\u0000\u0780\u08ed"+ + "\u0001\u0000\u0000\u0000\u0781\u0782\u0005\u0109\u0000\u0000\u0782\u0783"+ + "\u0005\u0002\u0000\u0000\u0783\u0784\u0003\u0002\u0001\u0000\u0784\u0785"+ + "\u0005\u0004\u0000\u0000\u0785\u0786\u0003\u0002\u0001\u0000\u0786\u0787"+ + "\u0005\u0003\u0000\u0000\u0787\u08ed\u0001\u0000\u0000\u0000\u0788\u0789"+ + "\u0005\u010a\u0000\u0000\u0789\u078a\u0005\u0002\u0000\u0000\u078a\u078b"+ + "\u0003\u0002\u0001\u0000\u078b\u078c\u0005\u0004\u0000\u0000\u078c\u078d"+ + "\u0003\u0002\u0001\u0000\u078d\u078e\u0005\u0004\u0000\u0000\u078e\u078f"+ + "\u0003\u0002\u0001\u0000\u078f\u0790\u0005\u0003\u0000\u0000\u0790\u08ed"+ + "\u0001\u0000\u0000\u0000\u0791\u0792\u0005\u010b\u0000\u0000\u0792\u0793"+ + "\u0005\u0002\u0000\u0000\u0793\u0794\u0003\u0002\u0001\u0000\u0794\u0795"+ + "\u0005\u0004\u0000\u0000\u0795\u0796\u0003\u0002\u0001\u0000\u0796\u0797"+ + "\u0005\u0003\u0000\u0000\u0797\u08ed\u0001\u0000\u0000\u0000\u0798\u0799"+ + "\u0005\u010c\u0000\u0000\u0799\u079a\u0005\u0002\u0000\u0000\u079a\u08ed"+ + "\u0005\u0003\u0000\u0000\u079b\u079c\u0005\u010d\u0000\u0000\u079c\u079d"+ + "\u0005\u0002\u0000\u0000\u079d\u079e\u0003\u0002\u0001\u0000\u079e\u079f"+ + "\u0005\u0003\u0000\u0000\u079f\u08ed\u0001\u0000\u0000\u0000\u07a0\u07a1"+ + "\u0005\u010e\u0000\u0000\u07a1\u07a2\u0005\u0002\u0000\u0000\u07a2\u07a3"+ + "\u0003\u0002\u0001\u0000\u07a3\u07a4\u0005\u0003\u0000\u0000\u07a4\u08ed"+ + "\u0001\u0000\u0000\u0000\u07a5\u07a6\u0005\u010f\u0000\u0000\u07a6\u07a7"+ + "\u0005\u0002\u0000\u0000\u07a7\u07a8\u0003\u0002\u0001\u0000\u07a8\u07a9"+ + "\u0005\u0003\u0000\u0000\u07a9\u08ed\u0001\u0000\u0000\u0000\u07aa\u07ab"+ + "\u0005\u0110\u0000\u0000\u07ab\u07ac\u0005\u0002\u0000\u0000\u07ac\u07ad"+ + "\u0003\u0002\u0001\u0000\u07ad\u07ae\u0005\u0003\u0000\u0000\u07ae\u08ed"+ + "\u0001\u0000\u0000\u0000\u07af\u07b0\u0005\u0111\u0000\u0000\u07b0\u07b1"+ + "\u0005\u0002\u0000\u0000\u07b1\u07b2\u0003\u0002\u0001\u0000\u07b2\u07b3"+ + "\u0005\u0004\u0000\u0000\u07b3\u07b4\u0003\u0002\u0001\u0000\u07b4\u07b5"+ + "\u0005\u0003\u0000\u0000\u07b5\u08ed\u0001\u0000\u0000\u0000\u07b6\u07b7"+ + "\u0005\u0112\u0000\u0000\u07b7\u07b8\u0005\u0002\u0000\u0000\u07b8\u07b9"+ + "\u0003\u0002\u0001\u0000\u07b9\u07ba\u0005\u0004\u0000\u0000\u07ba\u07bb"+ + "\u0003\u0002\u0001\u0000\u07bb\u07bc\u0005\u0003\u0000\u0000\u07bc\u08ed"+ + "\u0001\u0000\u0000\u0000\u07bd\u07be\u0005\u0113\u0000\u0000\u07be\u07bf"+ + "\u0005\u0002\u0000\u0000\u07bf\u07c0\u0003\u0002\u0001\u0000\u07c0\u07c1"+ + "\u0005\u0004\u0000\u0000\u07c1\u07c2\u0003\u0002\u0001\u0000\u07c2\u07c3"+ + "\u0005\u0003\u0000\u0000\u07c3\u08ed\u0001\u0000\u0000\u0000\u07c4\u07c5"+ + "\u0005\u0114\u0000\u0000\u07c5\u07c6\u0005\u0002\u0000\u0000\u07c6\u07c7"+ + "\u0003\u0002\u0001\u0000\u07c7\u07c8\u0005\u0004\u0000\u0000\u07c8\u07c9"+ + "\u0003\u0002\u0001\u0000\u07c9\u07ca\u0005\u0003\u0000\u0000\u07ca\u08ed"+ + "\u0001\u0000\u0000\u0000\u07cb\u07cc\u0005\u0115\u0000\u0000\u07cc\u07cd"+ + "\u0005\u0002\u0000\u0000\u07cd\u07d0\u0003\u0002\u0001\u0000\u07ce\u07cf"+ + "\u0005\u0004\u0000\u0000\u07cf\u07d1\u0003\u0002\u0001\u0000\u07d0\u07ce"+ + "\u0001\u0000\u0000\u0000\u07d0\u07d1\u0001\u0000\u0000\u0000\u07d1\u07d2"+ + "\u0001\u0000\u0000\u0000\u07d2\u07d3\u0005\u0003\u0000\u0000\u07d3\u08ed"+ + "\u0001\u0000\u0000\u0000\u07d4\u07d5\u0005\u0116\u0000\u0000\u07d5\u07d6"+ + "\u0005\u0002\u0000\u0000\u07d6\u07d9\u0003\u0002\u0001\u0000\u07d7\u07d8"+ + "\u0005\u0004\u0000\u0000\u07d8\u07da\u0003\u0002\u0001\u0000\u07d9\u07d7"+ + "\u0001\u0000\u0000\u0000\u07d9\u07da\u0001\u0000\u0000\u0000\u07da\u07db"+ + "\u0001\u0000\u0000\u0000\u07db\u07dc\u0005\u0003\u0000\u0000\u07dc\u08ed"+ + "\u0001\u0000\u0000\u0000\u07dd\u07de\u0005\u0117\u0000\u0000\u07de\u07df"+ + "\u0005\u0002\u0000\u0000\u07df\u07e0\u0003\u0002\u0001\u0000\u07e0\u07e1"+ + "\u0005\u0004\u0000\u0000\u07e1\u07e8\u0003\u0002\u0001\u0000\u07e2\u07e3"+ + "\u0005\u0004\u0000\u0000\u07e3\u07e6\u0003\u0002\u0001\u0000\u07e4\u07e5"+ + "\u0005\u0004\u0000\u0000\u07e5\u07e7\u0003\u0002\u0001\u0000\u07e6\u07e4"+ + "\u0001\u0000\u0000\u0000\u07e6\u07e7\u0001\u0000\u0000\u0000\u07e7\u07e9"+ + "\u0001\u0000\u0000\u0000\u07e8\u07e2\u0001\u0000\u0000\u0000\u07e8\u07e9"+ + "\u0001\u0000\u0000\u0000\u07e9\u07ea\u0001\u0000\u0000\u0000\u07ea\u07eb"+ + "\u0005\u0003\u0000\u0000\u07eb\u08ed\u0001\u0000\u0000\u0000\u07ec\u07ed"+ + "\u0005\u0118\u0000\u0000\u07ed\u07ee\u0005\u0002\u0000\u0000\u07ee\u07ef"+ + "\u0003\u0002\u0001\u0000\u07ef\u07f0\u0005\u0004\u0000\u0000\u07f0\u07f7"+ + "\u0003\u0002\u0001\u0000\u07f1\u07f2\u0005\u0004\u0000\u0000\u07f2\u07f5"+ + "\u0003\u0002\u0001\u0000\u07f3\u07f4\u0005\u0004\u0000\u0000\u07f4\u07f6"+ + "\u0003\u0002\u0001\u0000\u07f5\u07f3\u0001\u0000\u0000\u0000\u07f5\u07f6"+ + "\u0001\u0000\u0000\u0000\u07f6\u07f8\u0001\u0000\u0000\u0000\u07f7\u07f1"+ + "\u0001\u0000\u0000\u0000\u07f7\u07f8\u0001\u0000\u0000\u0000\u07f8\u07f9"+ + "\u0001\u0000\u0000\u0000\u07f9\u07fa\u0005\u0003\u0000\u0000\u07fa\u08ed"+ + "\u0001\u0000\u0000\u0000\u07fb\u07fc\u0005\u0119\u0000\u0000\u07fc\u07fd"+ + "\u0005\u0002\u0000\u0000\u07fd\u07fe\u0003\u0002\u0001\u0000\u07fe\u07ff"+ + "\u0005\u0004\u0000\u0000\u07ff\u0800\u0003\u0002\u0001\u0000\u0800\u0801"+ + "\u0005\u0003\u0000\u0000\u0801\u08ed\u0001\u0000\u0000\u0000\u0802\u0803"+ + "\u0005\u011a\u0000\u0000\u0803\u0804\u0005\u0002\u0000\u0000\u0804\u0807"+ + "\u0003\u0002\u0001\u0000\u0805\u0806\u0005\u0004\u0000\u0000\u0806\u0808"+ + "\u0003\u0002\u0001\u0000\u0807\u0805\u0001\u0000\u0000\u0000\u0808\u0809"+ + "\u0001\u0000\u0000\u0000\u0809\u0807\u0001\u0000\u0000\u0000\u0809\u080a"+ + "\u0001\u0000\u0000\u0000\u080a\u080b\u0001\u0000\u0000\u0000\u080b\u080c"+ + "\u0005\u0003\u0000\u0000\u080c\u08ed\u0001\u0000\u0000\u0000\u080d\u080e"+ + "\u0005\u011b\u0000\u0000\u080e\u080f\u0005\u0002\u0000\u0000\u080f\u0810"+ + "\u0003\u0002\u0001\u0000\u0810\u0811\u0005\u0004\u0000\u0000\u0811\u0814"+ + "\u0003\u0002\u0001\u0000\u0812\u0813\u0005\u0004\u0000\u0000\u0813\u0815"+ + "\u0003\u0002\u0001\u0000\u0814\u0812\u0001\u0000\u0000\u0000\u0814\u0815"+ + "\u0001\u0000\u0000\u0000\u0815\u0816\u0001\u0000\u0000\u0000\u0816\u0817"+ + "\u0005\u0003\u0000\u0000\u0817\u08ed\u0001\u0000\u0000\u0000\u0818\u0819"+ + "\u0005\u011c\u0000\u0000\u0819\u081a\u0005\u0002\u0000\u0000\u081a\u081b"+ + "\u0003\u0002\u0001\u0000\u081b\u081c\u0005\u0004\u0000\u0000\u081c\u081f"+ + "\u0003\u0002\u0001\u0000\u081d\u081e\u0005\u0004\u0000\u0000\u081e\u0820"+ + "\u0003\u0002\u0001\u0000\u081f\u081d\u0001\u0000\u0000\u0000\u081f\u0820"+ + "\u0001\u0000\u0000\u0000\u0820\u0821\u0001\u0000\u0000\u0000\u0821\u0822"+ + "\u0005\u0003\u0000\u0000\u0822\u08ed\u0001\u0000\u0000\u0000\u0823\u0824"+ + "\u0005\u011d\u0000\u0000\u0824\u0825\u0005\u0002\u0000\u0000\u0825\u0826"+ + "\u0003\u0002\u0001\u0000\u0826\u0827\u0005\u0004\u0000\u0000\u0827\u082a"+ + "\u0003\u0002\u0001\u0000\u0828\u0829\u0005\u0004\u0000\u0000\u0829\u082b"+ + "\u0003\u0002\u0001\u0000\u082a\u0828\u0001\u0000\u0000\u0000\u082a\u082b"+ + "\u0001\u0000\u0000\u0000\u082b\u082c\u0001\u0000\u0000\u0000\u082c\u082d"+ + "\u0005\u0003\u0000\u0000\u082d\u08ed\u0001\u0000\u0000\u0000\u082e\u082f"+ + "\u0005\u011e\u0000\u0000\u082f\u0830\u0005\u0002\u0000\u0000\u0830\u0831"+ + "\u0003\u0002\u0001\u0000\u0831\u0832\u0005\u0003\u0000\u0000\u0832\u08ed"+ + "\u0001\u0000\u0000\u0000\u0833\u0834\u0005\u011f\u0000\u0000\u0834\u0835"+ + "\u0005\u0002\u0000\u0000\u0835\u0836\u0003\u0002\u0001\u0000\u0836\u0837"+ + "\u0005\u0003\u0000\u0000\u0837\u08ed\u0001\u0000\u0000\u0000\u0838\u0839"+ + "\u0005\u0120\u0000\u0000\u0839\u083a\u0005\u0002\u0000\u0000\u083a\u0841"+ + "\u0003\u0002\u0001\u0000\u083b\u083c\u0005\u0004\u0000\u0000\u083c\u083f"+ + "\u0003\u0002\u0001\u0000\u083d\u083e\u0005\u0004\u0000\u0000\u083e\u0840"+ + "\u0003\u0002\u0001\u0000\u083f\u083d\u0001\u0000\u0000\u0000\u083f\u0840"+ + "\u0001\u0000\u0000\u0000\u0840\u0842\u0001\u0000\u0000\u0000\u0841\u083b"+ "\u0001\u0000\u0000\u0000\u0841\u0842\u0001\u0000\u0000\u0000\u0842\u0843"+ - "\u0005\u0003\u0000\u0000\u0843\u0a21\u0001\u0000\u0000\u0000\u0844\u0845"+ - "\n\u0128\u0000\u0000\u0845\u0846\u0005\u0001\u0000\u0000\u0846\u0847\u0005"+ - "\u0083\u0000\u0000\u0847\u0848\u0005\u0002\u0000\u0000\u0848\u0849\u0003"+ - "\u0002\u0001\u0000\u0849\u084a\u0005\u0004\u0000\u0000\u084a\u084d\u0003"+ - "\u0002\u0001\u0000\u084b\u084c\u0005\u0004\u0000\u0000\u084c\u084e\u0003"+ - "\u0002\u0001\u0000\u084d\u084b\u0001\u0000\u0000\u0000\u084d\u084e\u0001"+ - "\u0000\u0000\u0000\u084e\u084f\u0001\u0000\u0000\u0000\u084f\u0850\u0005"+ - "\u0003\u0000\u0000\u0850\u0a21\u0001\u0000\u0000\u0000\u0851\u0852\n\u0127"+ - "\u0000\u0000\u0852\u0853\u0005\u0001\u0000\u0000\u0853\u0854\u0005\u0084"+ - "\u0000\u0000\u0854\u0855\u0005\u0002\u0000\u0000\u0855\u0a21\u0005\u0003"+ - "\u0000\u0000\u0856\u0857\n\u0126\u0000\u0000\u0857\u0858\u0005\u0001\u0000"+ - "\u0000\u0858\u0859\u0005\u0085\u0000\u0000\u0859\u085a\u0005\u0002\u0000"+ - "\u0000\u085a\u085b\u0003\u0002\u0001\u0000\u085b\u085c\u0005\u0003\u0000"+ - "\u0000\u085c\u0a21\u0001\u0000\u0000\u0000\u085d\u085e\n\u0125\u0000\u0000"+ - "\u085e\u085f\u0005\u0001\u0000\u0000\u085f\u0860\u0005\u0086\u0000\u0000"+ - "\u0860\u0861\u0005\u0002\u0000\u0000\u0861\u0a21\u0005\u0003\u0000\u0000"+ - "\u0862\u0863\n\u0124\u0000\u0000\u0863\u0864\u0005\u0001\u0000\u0000\u0864"+ - "\u0865\u0005\u0087\u0000\u0000\u0865\u0866\u0005\u0002\u0000\u0000\u0866"+ - "\u0a21\u0005\u0003\u0000\u0000\u0867\u0868\n\u0123\u0000\u0000\u0868\u0869"+ - "\u0005\u0001\u0000\u0000\u0869\u086a\u0005\u0088\u0000\u0000\u086a\u086b"+ - "\u0005\u0002\u0000\u0000\u086b\u0a21\u0005\u0003\u0000\u0000\u086c\u086d"+ - "\n\u0122\u0000\u0000\u086d\u086e\u0005\u0001\u0000\u0000\u086e\u086f\u0005"+ - "\u0089\u0000\u0000\u086f\u0871\u0005\u0002\u0000\u0000\u0870\u0872\u0003"+ - "\u0002\u0001\u0000\u0871\u0870\u0001\u0000\u0000\u0000\u0871\u0872\u0001"+ - "\u0000\u0000\u0000\u0872\u0873\u0001\u0000\u0000\u0000\u0873\u0a21\u0005"+ - "\u0003\u0000\u0000\u0874\u0875\n\u0121\u0000\u0000\u0875\u0876\u0005\u0001"+ - "\u0000\u0000\u0876\u0877\u0005\u008a\u0000\u0000\u0877\u0878\u0005\u0002"+ - "\u0000\u0000\u0878\u0a21\u0005\u0003\u0000\u0000\u0879\u087a\n\u0120\u0000"+ - "\u0000\u087a\u087b\u0005\u0001\u0000\u0000\u087b\u087e\u0005\u008f\u0000"+ - "\u0000\u087c\u087d\u0005\u0002\u0000\u0000\u087d\u087f\u0005\u0003\u0000"+ - "\u0000\u087e\u087c\u0001\u0000\u0000\u0000\u087e\u087f\u0001\u0000\u0000"+ - "\u0000\u087f\u0a21\u0001\u0000\u0000\u0000\u0880\u0881\n\u011f\u0000\u0000"+ - "\u0881\u0882\u0005\u0001\u0000\u0000\u0882\u0885\u0005\u0090\u0000\u0000"+ - "\u0883\u0884\u0005\u0002\u0000\u0000\u0884\u0886\u0005\u0003\u0000\u0000"+ - "\u0885\u0883\u0001\u0000\u0000\u0000\u0885\u0886\u0001\u0000\u0000\u0000"+ - "\u0886\u0a21\u0001\u0000\u0000\u0000\u0887\u0888\n\u011e\u0000\u0000\u0888"+ - "\u0889\u0005\u0001\u0000\u0000\u0889\u088c\u0005\u0091\u0000\u0000\u088a"+ - "\u088b\u0005\u0002\u0000\u0000\u088b\u088d\u0005\u0003\u0000\u0000\u088c"+ - "\u088a\u0001\u0000\u0000\u0000\u088c\u088d\u0001\u0000\u0000\u0000\u088d"+ - "\u0a21\u0001\u0000\u0000\u0000\u088e\u088f\n\u011d\u0000\u0000\u088f\u0890"+ - "\u0005\u0001\u0000\u0000\u0890\u0893\u0005\u0092\u0000\u0000\u0891\u0892"+ - "\u0005\u0002\u0000\u0000\u0892\u0894\u0005\u0003\u0000\u0000\u0893\u0891"+ - "\u0001\u0000\u0000\u0000\u0893\u0894\u0001\u0000\u0000\u0000\u0894\u0a21"+ - "\u0001\u0000\u0000\u0000\u0895\u0896\n\u011c\u0000\u0000\u0896\u0897\u0005"+ - "\u0001\u0000\u0000\u0897\u089a\u0005\u0093\u0000\u0000\u0898\u0899\u0005"+ - "\u0002\u0000\u0000\u0899\u089b\u0005\u0003\u0000\u0000\u089a\u0898\u0001"+ - "\u0000\u0000\u0000\u089a\u089b\u0001\u0000\u0000\u0000\u089b\u0a21\u0001"+ - "\u0000\u0000\u0000\u089c\u089d\n\u011b\u0000\u0000\u089d\u089e\u0005\u0001"+ - "\u0000\u0000\u089e\u08a1\u0005\u0094\u0000\u0000\u089f\u08a0\u0005\u0002"+ - "\u0000\u0000\u08a0\u08a2\u0005\u0003\u0000\u0000\u08a1\u089f\u0001\u0000"+ - "\u0000\u0000\u08a1\u08a2\u0001\u0000\u0000\u0000\u08a2\u0a21\u0001\u0000"+ - "\u0000\u0000\u08a3\u08a4\n\u011a\u0000\u0000\u08a4\u08a5\u0005\u0001\u0000"+ - "\u0000\u08a5\u08a6\u0005\u00cd\u0000\u0000\u08a6\u08a7\u0005\u0002\u0000"+ - "\u0000\u08a7\u0a21\u0005\u0003\u0000\u0000\u08a8\u08a9\n\u0119\u0000\u0000"+ - "\u08a9\u08aa\u0005\u0001\u0000\u0000\u08aa\u08ab\u0005\u00ce\u0000\u0000"+ - "\u08ab\u08ac\u0005\u0002\u0000\u0000\u08ac\u0a21\u0005\u0003\u0000\u0000"+ - "\u08ad\u08ae\n\u0118\u0000\u0000\u08ae\u08af\u0005\u0001\u0000\u0000\u08af"+ - "\u08b0\u0005\u00cf\u0000\u0000\u08b0\u08b1\u0005\u0002\u0000\u0000\u08b1"+ - "\u0a21\u0005\u0003\u0000\u0000\u08b2\u08b3\n\u0117\u0000\u0000\u08b3\u08b4"+ - "\u0005\u0001\u0000\u0000\u08b4\u08b5\u0005\u00d0\u0000\u0000\u08b5\u08b6"+ - "\u0005\u0002\u0000\u0000\u08b6\u0a21\u0005\u0003\u0000\u0000\u08b7\u08b8"+ - "\n\u0116\u0000\u0000\u08b8\u08b9\u0005\u0001\u0000\u0000\u08b9\u08ba\u0005"+ - "\u00d1\u0000\u0000\u08ba\u08bc\u0005\u0002\u0000\u0000\u08bb\u08bd\u0003"+ - "\u0002\u0001\u0000\u08bc\u08bb\u0001\u0000\u0000\u0000\u08bc\u08bd\u0001"+ - "\u0000\u0000\u0000\u08bd\u08be\u0001\u0000\u0000\u0000\u08be\u0a21\u0005"+ - "\u0003\u0000\u0000\u08bf\u08c0\n\u0115\u0000\u0000\u08c0\u08c1\u0005\u0001"+ - "\u0000\u0000\u08c1\u08c2\u0005\u00d2\u0000\u0000\u08c2\u08c4\u0005\u0002"+ - "\u0000\u0000\u08c3\u08c5\u0003\u0002\u0001\u0000\u08c4\u08c3\u0001\u0000"+ - "\u0000\u0000\u08c4\u08c5\u0001\u0000\u0000\u0000\u08c5\u08c6\u0001\u0000"+ - "\u0000\u0000\u08c6\u0a21\u0005\u0003\u0000\u0000\u08c7\u08c8\n\u0114\u0000"+ - "\u0000\u08c8\u08c9\u0005\u0001\u0000\u0000\u08c9\u08ca\u0005\u00d3\u0000"+ - "\u0000\u08ca\u08cc\u0005\u0002\u0000\u0000\u08cb\u08cd\u0003\u0002\u0001"+ - "\u0000\u08cc\u08cb\u0001\u0000\u0000\u0000\u08cc\u08cd\u0001\u0000\u0000"+ - "\u0000\u08cd\u08ce\u0001\u0000\u0000\u0000\u08ce\u0a21\u0005\u0003\u0000"+ - "\u0000\u08cf\u08d0\n\u0113\u0000\u0000\u08d0\u08d1\u0005\u0001\u0000\u0000"+ - "\u08d1\u08d2\u0005\u00d4\u0000\u0000\u08d2\u08d4\u0005\u0002\u0000\u0000"+ - "\u08d3\u08d5\u0003\u0002\u0001\u0000\u08d4\u08d3\u0001\u0000\u0000\u0000"+ - "\u08d4\u08d5\u0001\u0000\u0000\u0000\u08d5\u08d6\u0001\u0000\u0000\u0000"+ - "\u08d6\u0a21\u0005\u0003\u0000\u0000\u08d7\u08d8\n\u0112\u0000\u0000\u08d8"+ - "\u08d9\u0005\u0001\u0000\u0000\u08d9\u08da\u0005\u00d5\u0000\u0000\u08da"+ - "\u08db\u0005\u0002\u0000\u0000\u08db\u08dc\u0003\u0002\u0001\u0000\u08dc"+ - "\u08dd\u0005\u0003\u0000\u0000\u08dd\u0a21\u0001\u0000\u0000\u0000\u08de"+ - "\u08df\n\u0111\u0000\u0000\u08df\u08e0\u0005\u0001\u0000\u0000\u08e0\u08e1"+ - "\u0005\u00d6\u0000\u0000\u08e1\u08e2\u0005\u0002\u0000\u0000\u08e2\u08e3"+ - "\u0003\u0002\u0001\u0000\u08e3\u08e4\u0005\u0004\u0000\u0000\u08e4\u08e5"+ - "\u0003\u0002\u0001\u0000\u08e5\u08e6\u0005\u0003\u0000\u0000\u08e6\u0a21"+ - "\u0001\u0000\u0000\u0000\u08e7\u08e8\n\u0110\u0000\u0000\u08e8\u08e9\u0005"+ - "\u0001\u0000\u0000\u08e9\u08ea\u0005\u00d7\u0000\u0000\u08ea\u08eb\u0005"+ - "\u0002\u0000\u0000\u08eb\u08ec\u0003\u0002\u0001\u0000\u08ec\u08ed\u0005"+ - "\u0003\u0000\u0000\u08ed\u0a21\u0001\u0000\u0000\u0000\u08ee\u08ef\n\u010f"+ - "\u0000\u0000\u08ef\u08f0\u0005\u0001\u0000\u0000\u08f0\u08f1\u0005\u00d9"+ - "\u0000\u0000\u08f1\u08f3\u0005\u0002\u0000\u0000\u08f2\u08f4\u0003\u0002"+ - "\u0001\u0000\u08f3\u08f2\u0001\u0000\u0000\u0000\u08f3\u08f4\u0001\u0000"+ - "\u0000\u0000\u08f4\u08f5\u0001\u0000\u0000\u0000\u08f5\u0a21\u0005\u0003"+ - "\u0000\u0000\u08f6\u08f7\n\u010e\u0000\u0000\u08f7\u08f8\u0005\u0001\u0000"+ - "\u0000\u08f8\u08f9\u0005\u00da\u0000\u0000\u08f9\u08fb\u0005\u0002\u0000"+ - "\u0000\u08fa\u08fc\u0003\u0002\u0001\u0000\u08fb\u08fa\u0001\u0000\u0000"+ - "\u0000\u08fb\u08fc\u0001\u0000\u0000\u0000\u08fc\u08fd\u0001\u0000\u0000"+ - "\u0000\u08fd\u0a21\u0005\u0003\u0000\u0000\u08fe\u08ff\n\u010d\u0000\u0000"+ - "\u08ff\u0900\u0005\u0001\u0000\u0000\u0900\u0901\u0005\u00db\u0000\u0000"+ - "\u0901\u0903\u0005\u0002\u0000\u0000\u0902\u0904\u0003\u0002\u0001\u0000"+ - "\u0903\u0902\u0001\u0000\u0000\u0000\u0903\u0904\u0001\u0000\u0000\u0000"+ - "\u0904\u0905\u0001\u0000\u0000\u0000\u0905\u0a21\u0005\u0003\u0000\u0000"+ - "\u0906\u0907\n\u010c\u0000\u0000\u0907\u0908\u0005\u0001\u0000\u0000\u0908"+ - "\u0909\u0005\u00dc\u0000\u0000\u0909\u090b\u0005\u0002\u0000\u0000\u090a"+ - "\u090c\u0003\u0002\u0001\u0000\u090b\u090a\u0001\u0000\u0000\u0000\u090b"+ - "\u090c\u0001\u0000\u0000\u0000\u090c\u090d\u0001\u0000\u0000\u0000\u090d"+ - "\u0a21\u0005\u0003\u0000\u0000\u090e\u090f\n\u010b\u0000\u0000\u090f\u0910"+ - "\u0005\u0001\u0000\u0000\u0910\u0911\u0005\u00dd\u0000\u0000\u0911\u0912"+ - "\u0005\u0002\u0000\u0000\u0912\u0915\u0003\u0002\u0001\u0000\u0913\u0914"+ - "\u0005\u0004\u0000\u0000\u0914\u0916\u0003\u0002\u0001\u0000\u0915\u0913"+ - "\u0001\u0000\u0000\u0000\u0915\u0916\u0001\u0000\u0000\u0000\u0916\u0917"+ - "\u0001\u0000\u0000\u0000\u0917\u0918\u0005\u0003\u0000\u0000\u0918\u0a21"+ - "\u0001\u0000\u0000\u0000\u0919\u091a\n\u010a\u0000\u0000\u091a\u091b\u0005"+ - "\u0001\u0000\u0000\u091b\u091c\u0005\u00de\u0000\u0000\u091c\u091d\u0005"+ - "\u0002\u0000\u0000\u091d\u0920\u0003\u0002\u0001\u0000\u091e\u091f\u0005"+ - "\u0004\u0000\u0000\u091f\u0921\u0003\u0002\u0001\u0000\u0920\u091e\u0001"+ - "\u0000\u0000\u0000\u0920\u0921\u0001\u0000\u0000\u0000\u0921\u0922\u0001"+ - "\u0000\u0000\u0000\u0922\u0923\u0005\u0003\u0000\u0000\u0923\u0a21\u0001"+ - "\u0000\u0000\u0000\u0924\u0925\n\u0109\u0000\u0000\u0925\u0926\u0005\u0001"+ - "\u0000\u0000\u0926\u0927\u0005\u00df\u0000\u0000\u0927\u0928\u0005\u0002"+ - "\u0000\u0000\u0928\u092b\u0003\u0002\u0001\u0000\u0929\u092a\u0005\u0004"+ - "\u0000\u0000\u092a\u092c\u0003\u0002\u0001\u0000\u092b\u0929\u0001\u0000"+ - "\u0000\u0000\u092b\u092c\u0001\u0000\u0000\u0000\u092c\u092d\u0001\u0000"+ - "\u0000\u0000\u092d\u092e\u0005\u0003\u0000\u0000\u092e\u0a21\u0001\u0000"+ - "\u0000\u0000\u092f\u0930\n\u0108\u0000\u0000\u0930\u0931\u0005\u0001\u0000"+ - "\u0000\u0931\u0932\u0005\u00e0\u0000\u0000\u0932\u0933\u0005\u0002\u0000"+ - "\u0000\u0933\u0936\u0003\u0002\u0001\u0000\u0934\u0935\u0005\u0004\u0000"+ - "\u0000\u0935\u0937\u0003\u0002\u0001\u0000\u0936\u0934\u0001\u0000\u0000"+ - "\u0000\u0936\u0937\u0001\u0000\u0000\u0000\u0937\u0938\u0001\u0000\u0000"+ - "\u0000\u0938\u0939\u0005\u0003\u0000\u0000\u0939\u0a21\u0001\u0000\u0000"+ - "\u0000\u093a\u093b\n\u0107\u0000\u0000\u093b\u093c\u0005"; + "\u0001\u0000\u0000\u0000\u0843\u0844\u0005\u0003\u0000\u0000\u0844\u08ed"+ + "\u0001\u0000\u0000\u0000\u0845\u0846\u0005\u0121\u0000\u0000\u0846\u0847"+ + "\u0005\u0002\u0000\u0000\u0847\u084e\u0003\u0002\u0001\u0000\u0848\u0849"+ + "\u0005\u0004\u0000\u0000\u0849\u084c\u0003\u0002\u0001\u0000\u084a\u084b"+ + "\u0005\u0004\u0000\u0000\u084b\u084d\u0003\u0002\u0001\u0000\u084c\u084a"+ + "\u0001\u0000\u0000\u0000\u084c\u084d\u0001\u0000\u0000\u0000\u084d\u084f"+ + "\u0001\u0000\u0000\u0000\u084e\u0848\u0001\u0000\u0000\u0000\u084e\u084f"+ + "\u0001\u0000\u0000\u0000\u084f\u0850\u0001\u0000\u0000\u0000\u0850\u0851"+ + "\u0005\u0003\u0000\u0000\u0851\u08ed\u0001\u0000\u0000\u0000\u0852\u0853"+ + "\u0005\u0122\u0000\u0000\u0853\u0854\u0005\u0002\u0000\u0000\u0854\u0855"+ + "\u0003\u0002\u0001\u0000\u0855\u0856\u0005\u0003\u0000\u0000\u0856\u08ed"+ + "\u0001\u0000\u0000\u0000\u0857\u0858\u0005\u0123\u0000\u0000\u0858\u0859"+ + "\u0005\u0002\u0000\u0000\u0859\u085a\u0003\u0002\u0001\u0000\u085a\u085b"+ + "\u0005\u0004\u0000\u0000\u085b\u085c\u0003\u0002\u0001\u0000\u085c\u085d"+ + "\u0005\u0003\u0000\u0000\u085d\u08ed\u0001\u0000\u0000\u0000\u085e\u085f"+ + "\u0005\u0124\u0000\u0000\u085f\u0860\u0005\u0002\u0000\u0000\u0860\u0861"+ + "\u0003\u0002\u0001\u0000\u0861\u0862\u0005\u0004\u0000\u0000\u0862\u0863"+ + "\u0003\u0002\u0001\u0000\u0863\u0864\u0005\u0003\u0000\u0000\u0864\u08ed"+ + "\u0001\u0000\u0000\u0000\u0865\u0866\u0005\u0131\u0000\u0000\u0866\u086f"+ + "\u0005\u0002\u0000\u0000\u0867\u086c\u0003\u0002\u0001\u0000\u0868\u0869"+ + "\u0005\u0004\u0000\u0000\u0869\u086b\u0003\u0002\u0001\u0000\u086a\u0868"+ + "\u0001\u0000\u0000\u0000\u086b\u086e\u0001\u0000\u0000\u0000\u086c\u086a"+ + "\u0001\u0000\u0000\u0000\u086c\u086d\u0001\u0000\u0000\u0000\u086d\u0870"+ + "\u0001\u0000\u0000\u0000\u086e\u086c\u0001\u0000\u0000\u0000\u086f\u0867"+ + "\u0001\u0000\u0000\u0000\u086f\u0870\u0001\u0000\u0000\u0000\u0870\u0871"+ + "\u0001\u0000\u0000\u0000\u0871\u08ed\u0005\u0003\u0000\u0000\u0872\u0873"+ + "\u0005\u0127\u0000\u0000\u0873\u0874\u0005\u0002\u0000\u0000\u0874\u0875"+ + "\u0003\u0002\u0001\u0000\u0875\u0876\u0005\u0004\u0000\u0000\u0876\u0877"+ + "\u0003\u0002\u0001\u0000\u0877\u0878\u0005\u0003\u0000\u0000\u0878\u08ed"+ + "\u0001\u0000\u0000\u0000\u0879\u087a\u0005\u0128\u0000\u0000\u087a\u087b"+ + "\u0005\u0002\u0000\u0000\u087b\u087c\u0003\u0002\u0001\u0000\u087c\u087d"+ + "\u0005\u0004\u0000\u0000\u087d\u087e\u0003\u0002\u0001\u0000\u087e\u087f"+ + "\u0005\u0003\u0000\u0000\u087f\u08ed\u0001\u0000\u0000\u0000\u0880\u0881"+ + "\u0005\u0129\u0000\u0000\u0881\u0882\u0005\u0002\u0000\u0000\u0882\u0883"+ + "\u0003\u0002\u0001\u0000\u0883\u0884\u0005\u0004\u0000\u0000\u0884\u0885"+ + "\u0003\u0002\u0001\u0000\u0885\u0886\u0005\u0003\u0000\u0000\u0886\u08ed"+ + "\u0001\u0000\u0000\u0000\u0887\u0888\u0005\u012a\u0000\u0000\u0888\u0889"+ + "\u0005\u0002\u0000\u0000\u0889\u088a\u0003\u0002\u0001\u0000\u088a\u088b"+ + "\u0005\u0004\u0000\u0000\u088b\u088c\u0003\u0002\u0001\u0000\u088c\u088d"+ + "\u0005\u0003\u0000\u0000\u088d\u08ed\u0001\u0000\u0000\u0000\u088e\u088f"+ + "\u0005\u012b\u0000\u0000\u088f\u0890\u0005\u0002\u0000\u0000\u0890\u0891"+ + "\u0003\u0002\u0001\u0000\u0891\u0892\u0005\u0004\u0000\u0000\u0892\u0893"+ + "\u0003\u0002\u0001\u0000\u0893\u0894\u0005\u0003\u0000\u0000\u0894\u08ed"+ + "\u0001\u0000\u0000\u0000\u0895\u0896\u0005\u012c\u0000\u0000\u0896\u0897"+ + "\u0005\u0002\u0000\u0000\u0897\u0898\u0003\u0002\u0001\u0000\u0898\u0899"+ + "\u0005\u0004\u0000\u0000\u0899\u089a\u0003\u0002\u0001\u0000\u089a\u089b"+ + "\u0005\u0003\u0000\u0000\u089b\u08ed\u0001\u0000\u0000\u0000\u089c\u089d"+ + "\u0005\u012d\u0000\u0000\u089d\u089e\u0005\u0002\u0000\u0000\u089e\u08a1"+ + "\u0003\u0002\u0001\u0000\u089f\u08a0\u0005\u0004\u0000\u0000\u08a0\u08a2"+ + "\u0003\u0002\u0001\u0000\u08a1\u089f\u0001\u0000\u0000\u0000\u08a1\u08a2"+ + "\u0001\u0000\u0000\u0000\u08a2\u08a3\u0001\u0000\u0000\u0000\u08a3\u08a4"+ + "\u0005\u0003\u0000\u0000\u08a4\u08ed\u0001\u0000\u0000\u0000\u08a5\u08a6"+ + "\u0005\u0130\u0000\u0000\u08a6\u08a7\u0005\u0002\u0000\u0000\u08a7\u08aa"+ + "\u0003\u0002\u0001\u0000\u08a8\u08a9\u0005\u0004\u0000\u0000\u08a9\u08ab"+ + "\u0003\u0002\u0001\u0000\u08aa\u08a8\u0001\u0000\u0000\u0000\u08aa\u08ab"+ + "\u0001\u0000\u0000\u0000\u08ab\u08ac\u0001\u0000\u0000\u0000\u08ac\u08ad"+ + "\u0005\u0003\u0000\u0000\u08ad\u08ed\u0001\u0000\u0000\u0000\u08ae\u08af"+ + "\u0005!\u0000\u0000\u08af\u08b1\u0005\u0002\u0000\u0000\u08b0\u08b2\u0003"+ + "\u0002\u0001\u0000\u08b1\u08b0\u0001\u0000\u0000\u0000\u08b1\u08b2\u0001"+ + "\u0000\u0000\u0000\u08b2\u08b3\u0001\u0000\u0000\u0000\u08b3\u08ed\u0005"+ + "\u0003\u0000\u0000\u08b4\u08b5\u0005\u012e\u0000\u0000\u08b5\u08b6\u0005"+ + "\u0002\u0000\u0000\u08b6\u08b7\u0003\u0002\u0001\u0000\u08b7\u08b8\u0005"+ + "\u0004\u0000\u0000\u08b8\u08b9\u0003\u0002\u0001\u0000\u08b9\u08ba\u0005"+ + "\u0003\u0000\u0000\u08ba\u08ed\u0001\u0000\u0000\u0000\u08bb\u08bc\u0005"+ + "\u012f\u0000\u0000\u08bc\u08bd\u0005\u0002\u0000\u0000\u08bd\u08be\u0003"+ + "\u0002\u0001\u0000\u08be\u08bf\u0005\u0004\u0000\u0000\u08bf\u08c0\u0003"+ + "\u0002\u0001\u0000\u08c0\u08c1\u0005\u0003\u0000\u0000\u08c1\u08ed\u0001"+ + "\u0000\u0000\u0000\u08c2\u08c3\u0005\u001b\u0000\u0000\u08c3\u08c8\u0003"+ + "\u0006\u0003\u0000\u08c4\u08c5\u0005\u0004\u0000\u0000\u08c5\u08c7\u0003"+ + "\u0006\u0003\u0000\u08c6\u08c4\u0001\u0000\u0000\u0000\u08c7\u08ca\u0001"+ + "\u0000\u0000\u0000\u08c8\u08c6\u0001\u0000\u0000\u0000\u08c8\u08c9\u0001"+ + "\u0000\u0000\u0000\u08c9\u08ce\u0001\u0000\u0000\u0000\u08ca\u08c8\u0001"+ + "\u0000\u0000\u0000\u08cb\u08cd\u0005\u0004\u0000\u0000\u08cc\u08cb\u0001"+ + "\u0000\u0000\u0000\u08cd\u08d0\u0001\u0000\u0000\u0000\u08ce\u08cc\u0001"+ + "\u0000\u0000\u0000\u08ce\u08cf\u0001\u0000\u0000\u0000\u08cf\u08d1\u0001"+ + "\u0000\u0000\u0000\u08d0\u08ce\u0001\u0000\u0000\u0000\u08d1\u08d2\u0005"+ + "\u001c\u0000\u0000\u08d2\u08ed\u0001\u0000\u0000\u0000\u08d3\u08d4\u0005"+ + "\u0005\u0000\u0000\u08d4\u08d9\u0003\u0002\u0001\u0000\u08d5\u08d6\u0005"+ + "\u0004\u0000\u0000\u08d6\u08d8\u0003\u0002\u0001\u0000\u08d7\u08d5\u0001"+ + "\u0000\u0000\u0000\u08d8\u08db\u0001\u0000\u0000\u0000\u08d9\u08d7\u0001"+ + "\u0000\u0000\u0000\u08d9\u08da\u0001\u0000\u0000\u0000\u08da\u08df\u0001"+ + "\u0000\u0000\u0000\u08db\u08d9\u0001\u0000\u0000\u0000\u08dc\u08de\u0005"+ + "\u0004\u0000\u0000\u08dd\u08dc\u0001\u0000\u0000\u0000\u08de\u08e1\u0001"+ + "\u0000\u0000\u0000\u08df\u08dd\u0001\u0000\u0000\u0000\u08df\u08e0\u0001"+ + "\u0000\u0000\u0000\u08e0\u08e2\u0001\u0000\u0000\u0000\u08e1\u08df\u0001"+ + "\u0000\u0000\u0000\u08e2\u08e3\u0005\u0006\u0000\u0000\u08e3\u08ed\u0001"+ + "\u0000\u0000\u0000\u08e4\u08ed\u0005\u0126\u0000\u0000\u08e5\u08ed\u0005"+ + "\u0131\u0000\u0000\u08e6\u08e8\u0003\u0004\u0002\u0000\u08e7\u08e9\u0007"+ + "\u0000\u0000\u0000\u08e8\u08e7\u0001\u0000\u0000\u0000\u08e8\u08e9\u0001"+ + "\u0000\u0000\u0000\u08e9\u08ed\u0001\u0000\u0000\u0000\u08ea\u08ed\u0005"+ + "\u001f\u0000\u0000\u08eb\u08ed\u0005 \u0000\u0000\u08ec\r\u0001\u0000"+ + "\u0000\u0000\u08ec\u0012\u0001\u0000\u0000\u0000\u08ec\u0014\u0001\u0000"+ + "\u0000\u0000\u08ec \u0001\u0000\u0000\u0000\u08ec+\u0001\u0000\u0000\u0000"+ + "\u08ec<\u0001\u0000\u0000\u0000\u08ecO\u0001\u0000\u0000\u0000\u08ecT"+ + "\u0001\u0000\u0000\u0000\u08ecY\u0001\u0000\u0000\u0000\u08ecb\u0001\u0000"+ + "\u0000\u0000\u08ecg\u0001\u0000\u0000\u0000\u08ecl\u0001\u0000\u0000\u0000"+ + "\u08ecq\u0001\u0000\u0000\u0000\u08ecv\u0001\u0000\u0000\u0000\u08ec\u0081"+ + "\u0001\u0000\u0000\u0000\u08ec\u008a\u0001\u0000\u0000\u0000\u08ec\u0093"+ + "\u0001\u0000\u0000\u0000\u08ec\u009f\u0001\u0000\u0000\u0000\u08ec\u00ab"+ + "\u0001\u0000\u0000\u0000\u08ec\u00b7\u0001\u0000\u0000\u0000\u08ec\u00bc"+ + "\u0001\u0000\u0000\u0000\u08ec\u00c1\u0001\u0000\u0000\u0000\u08ec\u00c6"+ + "\u0001\u0000\u0000\u0000\u08ec\u00cb\u0001\u0000\u0000\u0000\u08ec\u00d0"+ + "\u0001\u0000\u0000\u0000\u08ec\u00d9\u0001\u0000\u0000\u0000\u08ec\u00e2"+ + "\u0001\u0000\u0000\u0000\u08ec\u00eb\u0001\u0000\u0000\u0000\u08ec\u00f4"+ + "\u0001\u0000\u0000\u0000\u08ec\u00fd\u0001\u0000\u0000\u0000\u08ec\u0106"+ + "\u0001\u0000\u0000\u0000\u08ec\u010f\u0001\u0000\u0000\u0000\u08ec\u0118"+ + "\u0001\u0000\u0000\u0000\u08ec\u0121\u0001\u0000\u0000\u0000\u08ec\u012a"+ + "\u0001\u0000\u0000\u0000\u08ec\u0133\u0001\u0000\u0000\u0000\u08ec\u013c"+ + "\u0001\u0000\u0000\u0000\u08ec\u0141\u0001\u0000\u0000\u0000\u08ec\u0149"+ + "\u0001\u0000\u0000\u0000\u08ec\u0151\u0001\u0000\u0000\u0000\u08ec\u0156"+ + "\u0001\u0000\u0000\u0000\u08ec\u015b\u0001\u0000\u0000\u0000\u08ec\u0160"+ + "\u0001\u0000\u0000\u0000\u08ec\u0165\u0001\u0000\u0000\u0000\u08ec\u0171"+ + "\u0001\u0000\u0000\u0000\u08ec\u017d\u0001\u0000\u0000\u0000\u08ec\u0184"+ + "\u0001\u0000\u0000\u0000\u08ec\u018b\u0001\u0000\u0000\u0000\u08ec\u0190"+ + "\u0001\u0000\u0000\u0000\u08ec\u0195\u0001\u0000\u0000\u0000\u08ec\u019a"+ + "\u0001\u0000\u0000\u0000\u08ec\u019f\u0001\u0000\u0000\u0000\u08ec\u01a4"+ + "\u0001\u0000\u0000\u0000\u08ec\u01a9\u0001\u0000\u0000\u0000\u08ec\u01ae"+ + "\u0001\u0000\u0000\u0000\u08ec\u01b3\u0001\u0000\u0000\u0000\u08ec\u01b8"+ + "\u0001\u0000\u0000\u0000\u08ec\u01bd\u0001\u0000\u0000\u0000\u08ec\u01c2"+ + "\u0001\u0000\u0000\u0000\u08ec\u01c7\u0001\u0000\u0000\u0000\u08ec\u01cc"+ + "\u0001\u0000\u0000\u0000\u08ec\u01d1\u0001\u0000\u0000\u0000\u08ec\u01d6"+ + "\u0001\u0000\u0000\u0000\u08ec\u01db\u0001\u0000\u0000\u0000\u08ec\u01e0"+ + "\u0001\u0000\u0000\u0000\u08ec\u01e5\u0001\u0000\u0000\u0000\u08ec\u01ea"+ + "\u0001\u0000\u0000\u0000\u08ec\u01ef\u0001\u0000\u0000\u0000\u08ec\u01f4"+ + "\u0001\u0000\u0000\u0000\u08ec\u01f9\u0001\u0000\u0000\u0000\u08ec\u0200"+ + "\u0001\u0000\u0000\u0000\u08ec\u0209\u0001\u0000\u0000\u0000\u08ec\u0210"+ + "\u0001\u0000\u0000\u0000\u08ec\u0217\u0001\u0000\u0000\u0000\u08ec\u0220"+ + "\u0001\u0000\u0000\u0000\u08ec\u0229\u0001\u0000\u0000\u0000\u08ec\u022e"+ + "\u0001\u0000\u0000\u0000\u08ec\u0233\u0001\u0000\u0000\u0000\u08ec\u023a"+ + "\u0001\u0000\u0000\u0000\u08ec\u023d\u0001\u0000\u0000\u0000\u08ec\u0244"+ + "\u0001\u0000\u0000\u0000\u08ec\u0249\u0001\u0000\u0000\u0000\u08ec\u024e"+ + "\u0001\u0000\u0000\u0000\u08ec\u0255\u0001\u0000\u0000\u0000\u08ec\u025a"+ + "\u0001\u0000\u0000\u0000\u08ec\u025f\u0001\u0000\u0000\u0000\u08ec\u0268"+ + "\u0001\u0000\u0000\u0000\u08ec\u026d\u0001\u0000\u0000\u0000\u08ec\u0279"+ + "\u0001\u0000\u0000\u0000\u08ec\u0285\u0001\u0000\u0000\u0000\u08ec\u028a"+ + "\u0001\u0000\u0000\u0000\u08ec\u028f\u0001\u0000\u0000\u0000\u08ec\u0294"+ + "\u0001\u0000\u0000\u0000\u08ec\u029b\u0001\u0000\u0000\u0000\u08ec\u02a2"+ + "\u0001\u0000\u0000\u0000\u08ec\u02a9\u0001\u0000\u0000\u0000\u08ec\u02b0"+ + "\u0001\u0000\u0000\u0000\u08ec\u02b9\u0001\u0000\u0000\u0000\u08ec\u02c2"+ + "\u0001\u0000\u0000\u0000\u08ec\u02ce\u0001\u0000\u0000\u0000\u08ec\u02da"+ + "\u0001\u0000\u0000\u0000\u08ec\u02e1\u0001\u0000\u0000\u0000\u08ec\u02e8"+ + "\u0001\u0000\u0000\u0000\u08ec\u02ef\u0001\u0000\u0000\u0000\u08ec\u02f4"+ + "\u0001\u0000\u0000\u0000\u08ec\u02fd\u0001\u0000\u0000\u0000\u08ec\u0308"+ + "\u0001\u0000\u0000\u0000\u08ec\u0313\u0001\u0000\u0000\u0000\u08ec\u031c"+ + "\u0001\u0000\u0000\u0000\u08ec\u0323\u0001\u0000\u0000\u0000\u08ec\u032a"+ + "\u0001\u0000\u0000\u0000\u08ec\u0331\u0001\u0000\u0000\u0000\u08ec\u0338"+ + "\u0001\u0000\u0000\u0000\u08ec\u0343\u0001\u0000\u0000\u0000\u08ec\u0348"+ + "\u0001\u0000\u0000\u0000\u08ec\u034d\u0001\u0000\u0000\u0000\u08ec\u0352"+ + "\u0001\u0000\u0000\u0000\u08ec\u0357\u0001\u0000\u0000\u0000\u08ec\u035c"+ + "\u0001\u0000\u0000\u0000\u08ec\u0361\u0001\u0000\u0000\u0000\u08ec\u0366"+ + "\u0001\u0000\u0000\u0000\u08ec\u0372\u0001\u0000\u0000\u0000\u08ec\u0379"+ + "\u0001\u0000\u0000\u0000\u08ec\u0384\u0001\u0000\u0000\u0000\u08ec\u0391"+ + "\u0001\u0000\u0000\u0000\u08ec\u039a\u0001\u0000\u0000\u0000\u08ec\u039f"+ + "\u0001\u0000\u0000\u0000\u08ec\u03a4\u0001\u0000\u0000\u0000\u08ec\u03ad"+ + "\u0001\u0000\u0000\u0000\u08ec\u03b2\u0001\u0000\u0000\u0000\u08ec\u03bf"+ + "\u0001\u0000\u0000\u0000\u08ec\u03c6\u0001\u0000\u0000\u0000\u08ec\u03cf"+ + "\u0001\u0000\u0000\u0000\u08ec\u03d4\u0001\u0000\u0000\u0000\u08ec\u03df"+ + "\u0001\u0000\u0000\u0000\u08ec\u03ec\u0001\u0000\u0000\u0000\u08ec\u03f1"+ + "\u0001\u0000\u0000\u0000\u08ec\u03f8\u0001\u0000\u0000\u0000\u08ec\u03fd"+ + "\u0001\u0000\u0000\u0000\u08ec\u0402\u0001\u0000\u0000\u0000\u08ec\u0407"+ + "\u0001\u0000\u0000\u0000\u08ec\u0410\u0001\u0000\u0000\u0000\u08ec\u0415"+ + "\u0001\u0000\u0000\u0000\u08ec\u042a\u0001\u0000\u0000\u0000\u08ec\u0435"+ + "\u0001\u0000\u0000\u0000\u08ec\u0438\u0001\u0000\u0000\u0000\u08ec\u043b"+ + "\u0001\u0000\u0000\u0000\u08ec\u0440\u0001\u0000\u0000\u0000\u08ec\u0445"+ + "\u0001\u0000\u0000\u0000\u08ec\u044a\u0001\u0000\u0000\u0000\u08ec\u044f"+ + "\u0001\u0000\u0000\u0000\u08ec\u0454\u0001\u0000\u0000\u0000\u08ec\u0459"+ + "\u0001\u0000\u0000\u0000\u08ec\u0462\u0001\u0000\u0000\u0000\u08ec\u046b"+ + "\u0001\u0000\u0000\u0000\u08ec\u0472\u0001\u0000\u0000\u0000\u08ec\u047d"+ + "\u0001\u0000\u0000\u0000\u08ec\u0484\u0001\u0000\u0000\u0000\u08ec\u048b"+ + "\u0001\u0000\u0000\u0000\u08ec\u0496\u0001\u0000\u0000\u0000\u08ec\u04a1"+ + "\u0001\u0000\u0000\u0000\u08ec\u04aa\u0001\u0000\u0000\u0000\u08ec\u04b6"+ + "\u0001\u0000\u0000\u0000\u08ec\u04c2\u0001\u0000\u0000\u0000\u08ec\u04ce"+ + "\u0001\u0000\u0000\u0000\u08ec\u04d5\u0001\u0000\u0000\u0000\u08ec\u04e1"+ + "\u0001\u0000\u0000\u0000\u08ec\u04e8\u0001\u0000\u0000\u0000\u08ec\u04ef"+ + "\u0001\u0000\u0000\u0000\u08ec\u04f6\u0001\u0000\u0000\u0000\u08ec\u04fd"+ + "\u0001\u0000\u0000\u0000\u08ec\u0509\u0001\u0000\u0000\u0000\u08ec\u0514"+ + "\u0001\u0000\u0000\u0000\u08ec\u0520\u0001\u0000\u0000\u0000\u08ec\u052c"+ + "\u0001\u0000\u0000\u0000\u08ec\u0538\u0001\u0000\u0000\u0000\u08ec\u0544"+ + "\u0001\u0000\u0000\u0000\u08ec\u0550\u0001\u0000\u0000\u0000\u08ec\u055b"+ + "\u0001\u0000\u0000\u0000\u08ec\u0567\u0001\u0000\u0000\u0000\u08ec\u0573"+ + "\u0001\u0000\u0000\u0000\u08ec\u057f\u0001\u0000\u0000\u0000\u08ec\u0586"+ + "\u0001\u0000\u0000\u0000\u08ec\u058d\u0001\u0000\u0000\u0000\u08ec\u0599"+ + "\u0001\u0000\u0000\u0000\u08ec\u05a5\u0001\u0000\u0000\u0000\u08ec\u05b1"+ + "\u0001\u0000\u0000\u0000\u08ec\u05bc\u0001\u0000\u0000\u0000\u08ec\u05c5"+ + "\u0001\u0000\u0000\u0000\u08ec\u05ca\u0001\u0000\u0000\u0000\u08ec\u05cf"+ + "\u0001\u0000\u0000\u0000\u08ec\u05d8\u0001\u0000\u0000\u0000\u08ec\u05e1"+ + "\u0001\u0000\u0000\u0000\u08ec\u05ec\u0001\u0000\u0000\u0000\u08ec\u05f5"+ + "\u0001\u0000\u0000\u0000\u08ec\u05fe\u0001\u0000\u0000\u0000\u08ec\u0607"+ + "\u0001\u0000\u0000\u0000\u08ec\u060c\u0001\u0000\u0000\u0000\u08ec\u0611"+ + "\u0001\u0000\u0000\u0000\u08ec\u061c\u0001\u0000\u0000\u0000\u08ec\u0625"+ + "\u0001\u0000\u0000\u0000\u08ec\u062a\u0001\u0000\u0000\u0000\u08ec\u0635"+ + "\u0001\u0000\u0000\u0000\u08ec\u063e\u0001\u0000\u0000\u0000\u08ec\u0647"+ + "\u0001\u0000\u0000\u0000\u08ec\u0650\u0001\u0000\u0000\u0000\u08ec\u0659"+ + "\u0001\u0000\u0000\u0000\u08ec\u0662\u0001\u0000\u0000\u0000\u08ec\u0669"+ + "\u0001\u0000\u0000\u0000\u08ec\u0674\u0001\u0000\u0000\u0000\u08ec\u0685"+ + "\u0001\u0000\u0000\u0000\u08ec\u0698\u0001\u0000\u0000\u0000\u08ec\u06ab"+ + "\u0001\u0000\u0000\u0000\u08ec\u06bc\u0001\u0000\u0000\u0000\u08ec\u06cd"+ + "\u0001\u0000\u0000\u0000\u08ec\u06de\u0001\u0000\u0000\u0000\u08ec\u06f3"+ + "\u0001\u0000\u0000\u0000\u08ec\u0701\u0001\u0000\u0000\u0000\u08ec\u070a"+ + "\u0001\u0000\u0000\u0000\u08ec\u0713\u0001\u0000\u0000\u0000\u08ec\u071c"+ + "\u0001\u0000\u0000\u0000\u08ec\u0727\u0001\u0000\u0000\u0000\u08ec\u0730"+ + "\u0001\u0000\u0000\u0000\u08ec\u073f\u0001\u0000\u0000\u0000\u08ec\u074e"+ + "\u0001\u0000\u0000\u0000\u08ec\u0759\u0001\u0000\u0000\u0000\u08ec\u075e"+ + "\u0001\u0000\u0000\u0000\u08ec\u0763\u0001\u0000\u0000\u0000\u08ec\u0768"+ + "\u0001\u0000\u0000\u0000\u08ec\u076d\u0001\u0000\u0000\u0000\u08ec\u0772"+ + "\u0001\u0000\u0000\u0000\u08ec\u0777\u0001\u0000\u0000\u0000\u08ec\u077c"+ + "\u0001\u0000\u0000\u0000\u08ec\u0781\u0001\u0000\u0000\u0000\u08ec\u0788"+ + "\u0001\u0000\u0000\u0000\u08ec\u0791\u0001\u0000\u0000\u0000\u08ec\u0798"+ + "\u0001\u0000\u0000\u0000\u08ec\u079b\u0001\u0000\u0000\u0000\u08ec\u07a0"+ + "\u0001\u0000\u0000\u0000\u08ec\u07a5\u0001\u0000\u0000\u0000\u08ec\u07aa"+ + "\u0001\u0000\u0000\u0000\u08ec\u07af\u0001\u0000\u0000\u0000\u08ec\u07b6"+ + "\u0001\u0000\u0000\u0000\u08ec\u07bd\u0001\u0000\u0000\u0000\u08ec\u07c4"+ + "\u0001\u0000\u0000\u0000\u08ec\u07cb\u0001\u0000\u0000\u0000\u08ec\u07d4"+ + "\u0001\u0000\u0000\u0000\u08ec\u07dd\u0001\u0000\u0000\u0000\u08ec\u07ec"+ + "\u0001\u0000\u0000\u0000\u08ec\u07fb\u0001\u0000\u0000\u0000\u08ec\u0802"+ + "\u0001\u0000\u0000\u0000\u08ec\u080d\u0001\u0000\u0000\u0000\u08ec\u0818"+ + "\u0001\u0000\u0000\u0000\u08ec\u0823\u0001\u0000\u0000\u0000\u08ec\u082e"+ + "\u0001\u0000\u0000\u0000\u08ec\u0833\u0001\u0000\u0000\u0000\u08ec\u0838"+ + "\u0001\u0000\u0000\u0000\u08ec\u0845\u0001\u0000\u0000\u0000\u08ec\u0852"+ + "\u0001\u0000\u0000\u0000\u08ec\u0857\u0001\u0000\u0000\u0000\u08ec\u085e"+ + "\u0001\u0000\u0000\u0000\u08ec\u0865\u0001\u0000\u0000\u0000\u08ec\u0872"+ + "\u0001\u0000"; private static final String _serializedATNSegment1 = - "\u0001\u0000\u0000\u093c\u093d\u0005\u00e1\u0000\u0000\u093d\u093f\u0005"+ - "\u0002\u0000\u0000\u093e\u0940\u0003\u0002\u0001\u0000\u093f\u093e\u0001"+ - "\u0000\u0000\u0000\u093f\u0940\u0001\u0000\u0000\u0000\u0940\u0941\u0001"+ - "\u0000\u0000\u0000\u0941\u0a21\u0005\u0003\u0000\u0000\u0942\u0943\n\u0106"+ - "\u0000\u0000\u0943\u0944\u0005\u0001\u0000\u0000\u0944\u0945\u0005\u00e2"+ - "\u0000\u0000\u0945\u0947\u0005\u0002\u0000\u0000\u0946\u0948\u0003\u0002"+ - "\u0001\u0000\u0947\u0946\u0001\u0000\u0000\u0000\u0947\u0948\u0001\u0000"+ - "\u0000\u0000\u0948\u0949\u0001\u0000\u0000\u0000\u0949\u0a21\u0005\u0003"+ - "\u0000\u0000\u094a\u094b\n\u0105\u0000\u0000\u094b\u094c\u0005\u0001\u0000"+ - "\u0000\u094c\u094d\u0005\u00e3\u0000\u0000\u094d\u094e\u0005\u0002\u0000"+ - "\u0000\u094e\u0955\u0003\u0002\u0001\u0000\u094f\u0950\u0005\u0004\u0000"+ - "\u0000\u0950\u0953\u0003\u0002\u0001\u0000\u0951\u0952\u0005\u0004\u0000"+ - "\u0000\u0952\u0954\u0003\u0002\u0001\u0000\u0953\u0951\u0001\u0000\u0000"+ - "\u0000\u0953\u0954\u0001\u0000\u0000\u0000\u0954\u0956\u0001\u0000\u0000"+ - "\u0000\u0955\u094f\u0001\u0000\u0000\u0000\u0955\u0956\u0001\u0000\u0000"+ - "\u0000\u0956\u0957\u0001\u0000\u0000\u0000\u0957\u0958\u0005\u0003\u0000"+ - "\u0000\u0958\u0a21\u0001\u0000\u0000\u0000\u0959\u095a\n\u0104\u0000\u0000"+ - "\u095a\u095b\u0005\u0001\u0000\u0000\u095b\u095c\u0005\u00e4\u0000\u0000"+ - "\u095c\u095d\u0005\u0002\u0000\u0000\u095d\u0964\u0003\u0002\u0001\u0000"+ - "\u095e\u095f\u0005\u0004\u0000\u0000\u095f\u0962\u0003\u0002\u0001\u0000"+ - "\u0960\u0961\u0005\u0004\u0000\u0000\u0961\u0963\u0003\u0002\u0001\u0000"+ - "\u0962\u0960\u0001\u0000\u0000\u0000\u0962\u0963\u0001\u0000\u0000\u0000"+ - "\u0963\u0965\u0001\u0000\u0000\u0000\u0964\u095e\u0001\u0000\u0000\u0000"+ - "\u0964\u0965\u0001\u0000\u0000\u0000\u0965\u0966\u0001\u0000\u0000\u0000"+ - "\u0966\u0967\u0005\u0003\u0000\u0000\u0967\u0a21\u0001\u0000\u0000\u0000"+ - "\u0968\u0969\n\u0103\u0000\u0000\u0969\u096a\u0005\u0001\u0000\u0000\u096a"+ - "\u096b\u0005\u00e5\u0000\u0000\u096b\u096c\u0005\u0002\u0000\u0000\u096c"+ - "\u096d\u0003\u0002\u0001\u0000\u096d\u096e\u0005\u0003\u0000\u0000\u096e"+ - "\u0a21\u0001\u0000\u0000\u0000\u096f\u0970\n\u0102\u0000\u0000\u0970\u0971"+ - "\u0005\u0001\u0000\u0000\u0971\u0972\u0005\u00e6\u0000\u0000\u0972\u0973"+ - "\u0005\u0002\u0000\u0000\u0973\u0978\u0003\u0002\u0001\u0000\u0974\u0975"+ - "\u0005\u0004\u0000\u0000\u0975\u0977\u0003\u0002\u0001\u0000\u0976\u0974"+ - "\u0001\u0000\u0000\u0000\u0977\u097a\u0001\u0000\u0000\u0000\u0978\u0976"+ - "\u0001\u0000\u0000\u0000\u0978\u0979\u0001\u0000\u0000\u0000\u0979\u097b"+ - "\u0001\u0000\u0000\u0000\u097a\u0978\u0001\u0000\u0000\u0000\u097b\u097c"+ - "\u0005\u0003\u0000\u0000\u097c\u0a21\u0001\u0000\u0000\u0000\u097d\u097e"+ - "\n\u0101\u0000\u0000\u097e\u097f\u0005\u0001\u0000\u0000\u097f\u0980\u0005"+ - "\u00e7\u0000\u0000\u0980\u0981\u0005\u0002\u0000\u0000\u0981\u0984\u0003"+ - "\u0002\u0001\u0000\u0982\u0983\u0005\u0004\u0000\u0000\u0983\u0985\u0003"+ - "\u0002\u0001\u0000\u0984\u0982\u0001\u0000\u0000\u0000\u0984\u0985\u0001"+ - "\u0000\u0000\u0000\u0985\u0986\u0001\u0000\u0000\u0000\u0986\u0987\u0005"+ - "\u0003\u0000\u0000\u0987\u0a21\u0001\u0000\u0000\u0000\u0988\u0989\n\u0100"+ - "\u0000\u0000\u0989\u098a\u0005\u0001\u0000\u0000\u098a\u098b\u0005\u00e8"+ - "\u0000\u0000\u098b\u098c\u0005\u0002\u0000\u0000\u098c\u098f\u0003\u0002"+ - "\u0001\u0000\u098d\u098e\u0005\u0004\u0000\u0000\u098e\u0990\u0003\u0002"+ - "\u0001\u0000\u098f\u098d\u0001\u0000\u0000\u0000\u098f\u0990\u0001\u0000"+ - "\u0000\u0000\u0990\u0991\u0001\u0000\u0000\u0000\u0991\u0992\u0005\u0003"+ - "\u0000\u0000\u0992\u0a21\u0001\u0000\u0000\u0000\u0993\u0994\n\u00ff\u0000"+ - "\u0000\u0994\u0995\u0005\u0001\u0000\u0000\u0995\u0996\u0005\u00e9\u0000"+ - "\u0000\u0996\u0997\u0005\u0002\u0000\u0000\u0997\u099a\u0003\u0002\u0001"+ - "\u0000\u0998\u0999\u0005\u0004\u0000\u0000\u0999\u099b\u0003\u0002\u0001"+ - "\u0000\u099a\u0998\u0001\u0000\u0000\u0000\u099a\u099b\u0001\u0000\u0000"+ - "\u0000\u099b\u099c\u0001\u0000\u0000\u0000\u099c\u099d\u0005\u0003\u0000"+ - "\u0000\u099d\u0a21\u0001\u0000\u0000\u0000\u099e\u099f\n\u00fe\u0000\u0000"+ - "\u099f\u09a0\u0005\u0001\u0000\u0000\u09a0\u09a1\u0005\u00ea\u0000\u0000"+ - "\u09a1\u09a2\u0005\u0002\u0000\u0000\u09a2\u0a21\u0005\u0003\u0000\u0000"+ - "\u09a3\u09a4\n\u00fd\u0000\u0000\u09a4\u09a5\u0005\u0001\u0000\u0000\u09a5"+ - "\u09a6\u0005\u00eb\u0000\u0000\u09a6\u09a7\u0005\u0002\u0000\u0000\u09a7"+ - "\u0a21\u0005\u0003\u0000\u0000\u09a8\u09a9\n\u00fc\u0000\u0000\u09a9\u09aa"+ - "\u0005\u0001\u0000\u0000\u09aa\u09ab\u0005\u00ec\u0000\u0000\u09ab\u09ac"+ - "\u0005\u0002\u0000\u0000\u09ac\u09af\u0003\u0002\u0001\u0000\u09ad\u09ae"+ - "\u0005\u0004\u0000\u0000\u09ae\u09b0\u0003\u0002\u0001\u0000\u09af\u09ad"+ - "\u0001\u0000\u0000\u0000\u09af\u09b0\u0001\u0000\u0000\u0000\u09b0\u09b1"+ - "\u0001\u0000\u0000\u0000\u09b1\u09b2\u0005\u0003\u0000\u0000\u09b2\u0a21"+ - "\u0001\u0000\u0000\u0000\u09b3\u09b4\n\u00fb\u0000\u0000\u09b4\u09b5\u0005"+ - "\u0001\u0000\u0000\u09b5\u09b6\u0005\u00ed\u0000\u0000\u09b6\u09b7\u0005"+ - "\u0002\u0000\u0000\u09b7\u09ba\u0003\u0002\u0001\u0000\u09b8\u09b9\u0005"+ - "\u0004\u0000\u0000\u09b9\u09bb\u0003\u0002\u0001\u0000\u09ba\u09b8\u0001"+ - "\u0000\u0000\u0000\u09ba\u09bb\u0001\u0000\u0000\u0000\u09bb\u09bc\u0001"+ - "\u0000\u0000\u0000\u09bc\u09bd\u0005\u0003\u0000\u0000\u09bd\u0a21\u0001"+ - "\u0000\u0000\u0000\u09be\u09bf\n\u00fa\u0000\u0000\u09bf\u09c0\u0005\u0001"+ - "\u0000\u0000\u09c0\u09c1\u0005\u00ee\u0000\u0000\u09c1\u09c2\u0005\u0002"+ - "\u0000\u0000\u09c2\u0a21\u0005\u0003\u0000\u0000\u09c3\u09c4\n\u00f9\u0000"+ - "\u0000\u09c4\u09c5\u0005\u0001\u0000\u0000\u09c5\u09c6\u0005\u00fd\u0000"+ - "\u0000\u09c6\u09cf\u0005\u0002\u0000\u0000\u09c7\u09cc\u0003\u0002\u0001"+ - "\u0000\u09c8\u09c9\u0005\u0004\u0000\u0000\u09c9\u09cb\u0003\u0002\u0001"+ - "\u0000\u09ca\u09c8\u0001\u0000\u0000\u0000\u09cb\u09ce\u0001\u0000\u0000"+ - "\u0000\u09cc\u09ca\u0001\u0000\u0000\u0000\u09cc\u09cd\u0001\u0000\u0000"+ - "\u0000\u09cd\u09d0\u0001\u0000\u0000\u0000\u09ce\u09cc\u0001\u0000\u0000"+ - "\u0000\u09cf\u09c7\u0001\u0000\u0000\u0000\u09cf\u09d0\u0001\u0000\u0000"+ - "\u0000\u09d0\u09d1\u0001\u0000\u0000\u0000\u09d1\u0a21\u0005\u0003\u0000"+ - "\u0000\u09d2\u09d3\n\u00f8\u0000\u0000\u09d3\u09d4\u0005\u0001\u0000\u0000"+ - "\u09d4\u09d5\u0005\u00f3\u0000\u0000\u09d5\u09d6\u0005\u0002\u0000\u0000"+ - "\u09d6\u09d7\u0003\u0002\u0001\u0000\u09d7\u09d8\u0005\u0003\u0000\u0000"+ - "\u09d8\u0a21\u0001\u0000\u0000\u0000\u09d9\u09da\n\u00f7\u0000\u0000\u09da"+ - "\u09db\u0005\u0001\u0000\u0000\u09db\u09dc\u0005\u00f4\u0000\u0000\u09dc"+ - "\u09dd\u0005\u0002\u0000\u0000\u09dd\u09de\u0003\u0002\u0001\u0000\u09de"+ - "\u09df\u0005\u0003\u0000\u0000\u09df\u0a21\u0001\u0000\u0000\u0000\u09e0"+ - "\u09e1\n\u00f6\u0000\u0000\u09e1\u09e2\u0005\u0001\u0000\u0000\u09e2\u09e3"+ - "\u0005\u00f5\u0000\u0000\u09e3\u09e4\u0005\u0002\u0000\u0000\u09e4\u09e5"+ - "\u0003\u0002\u0001\u0000\u09e5\u09e6\u0005\u0003\u0000\u0000\u09e6\u0a21"+ - "\u0001\u0000\u0000\u0000\u09e7\u09e8\n\u00f5\u0000\u0000\u09e8\u09e9\u0005"+ - "\u0001\u0000\u0000\u09e9\u09ea\u0005\u00f6\u0000\u0000\u09ea\u09eb\u0005"+ - "\u0002\u0000\u0000\u09eb\u09ec\u0003\u0002\u0001\u0000\u09ec\u09ed\u0005"+ - "\u0003\u0000\u0000\u09ed\u0a21\u0001\u0000\u0000\u0000\u09ee\u09ef\n\u00f4"+ - "\u0000\u0000\u09ef\u09f0\u0005\u0001\u0000\u0000\u09f0\u09f1\u0005\u00f7"+ - "\u0000\u0000\u09f1\u09f2\u0005\u0002\u0000\u0000\u09f2\u09f3\u0003\u0002"+ - "\u0001\u0000\u09f3\u09f4\u0005\u0003\u0000\u0000\u09f4\u0a21\u0001\u0000"+ - "\u0000\u0000\u09f5\u09f6\n\u00f3\u0000\u0000\u09f6\u09f7\u0005\u0001\u0000"+ - "\u0000\u09f7\u09f8\u0005\u00f8\u0000\u0000\u09f8\u09f9\u0005\u0002\u0000"+ - "\u0000\u09f9\u09fa\u0003\u0002\u0001\u0000\u09fa\u09fb\u0005\u0003\u0000"+ - "\u0000\u09fb\u0a21\u0001\u0000\u0000\u0000\u09fc\u09fd\n\u00f2\u0000\u0000"+ - "\u09fd\u09fe\u0005\u0001\u0000\u0000\u09fe\u09ff\u0005\u00f9\u0000\u0000"+ - "\u09ff\u0a01\u0005\u0002\u0000\u0000\u0a00\u0a02\u0003\u0002\u0001\u0000"+ - "\u0a01\u0a00\u0001\u0000\u0000\u0000\u0a01\u0a02\u0001\u0000\u0000\u0000"+ - "\u0a02\u0a03\u0001\u0000\u0000\u0000\u0a03\u0a21\u0005\u0003\u0000\u0000"+ - "\u0a04\u0a05\n\u00f1\u0000\u0000\u0a05\u0a06\u0005\u0001\u0000\u0000\u0a06"+ - "\u0a07\u0005\u00fa\u0000\u0000\u0a07\u0a08\u0005\u0002\u0000\u0000\u0a08"+ - "\u0a09\u0003\u0002\u0001\u0000\u0a09\u0a0a\u0005\u0003\u0000\u0000\u0a0a"+ - "\u0a21\u0001\u0000\u0000\u0000\u0a0b\u0a0c\n\u00f0\u0000\u0000\u0a0c\u0a0d"+ - "\u0005\u0001\u0000\u0000\u0a0d\u0a0e\u0005\u00fb\u0000\u0000\u0a0e\u0a0f"+ - "\u0005\u0002\u0000\u0000\u0a0f\u0a10\u0003\u0002\u0001\u0000\u0a10\u0a11"+ - "\u0005\u0003\u0000\u0000\u0a11\u0a21\u0001\u0000\u0000\u0000\u0a12\u0a13"+ - "\n\u00ef\u0000\u0000\u0a13\u0a14\u0005\u0005\u0000\u0000\u0a14\u0a15\u0005"+ - "\u00fd\u0000\u0000\u0a15\u0a21\u0005\u0006\u0000\u0000\u0a16\u0a17\n\u00ee"+ - "\u0000\u0000\u0a17\u0a18\u0005\u0005\u0000\u0000\u0a18\u0a19\u0003\u0002"+ - "\u0001\u0000\u0a19\u0a1a\u0005\u0006\u0000\u0000\u0a1a\u0a21\u0001\u0000"+ - "\u0000\u0000\u0a1b\u0a1c\n\u00ed\u0000\u0000\u0a1c\u0a1d\u0005\u0001\u0000"+ - "\u0000\u0a1d\u0a21\u0003\n\u0005\u0000\u0a1e\u0a1f\n\u00ea\u0000\u0000"+ - "\u0a1f\u0a21\u0005\b\u0000\u0000\u0a20\u0714\u0001\u0000\u0000\u0000\u0a20"+ - "\u0717\u0001\u0000\u0000\u0000\u0a20\u071a\u0001\u0000\u0000\u0000\u0a20"+ - "\u071d\u0001\u0000\u0000\u0000\u0a20\u0720\u0001\u0000\u0000\u0000\u0a20"+ - "\u0723\u0001\u0000\u0000\u0000\u0a20\u0726\u0001\u0000\u0000\u0000\u0a20"+ - "\u072c\u0001\u0000\u0000\u0000\u0a20\u0731\u0001\u0000\u0000\u0000\u0a20"+ - "\u0736\u0001\u0000\u0000\u0000\u0a20\u073b\u0001\u0000\u0000\u0000\u0a20"+ - "\u0740\u0001\u0000\u0000\u0000\u0a20\u0745\u0001\u0000\u0000\u0000\u0a20"+ - "\u074a\u0001\u0000\u0000\u0000\u0a20\u0752\u0001\u0000\u0000\u0000\u0a20"+ - "\u075a\u0001\u0000\u0000\u0000\u0a20\u0762\u0001\u0000\u0000\u0000\u0a20"+ - "\u076a\u0001\u0000\u0000\u0000\u0a20\u0772\u0001\u0000\u0000\u0000\u0a20"+ - "\u077a\u0001\u0000\u0000\u0000\u0a20\u0782\u0001\u0000\u0000\u0000\u0a20"+ - "\u0787\u0001\u0000\u0000\u0000\u0a20\u078f\u0001\u0000\u0000\u0000\u0a20"+ - "\u0797\u0001\u0000\u0000\u0000\u0a20\u079c\u0001\u0000\u0000\u0000\u0a20"+ - "\u07a4\u0001\u0000\u0000\u0000\u0a20\u07ac\u0001\u0000\u0000\u0000\u0a20"+ - "\u07b1\u0001\u0000\u0000\u0000\u0a20\u07b9\u0001\u0000\u0000\u0000\u0a20"+ - "\u07be\u0001\u0000\u0000\u0000\u0a20\u07c3\u0001\u0000\u0000\u0000\u0a20"+ - "\u07c8\u0001\u0000\u0000\u0000\u0a20\u07cd\u0001\u0000\u0000\u0000\u0a20"+ - "\u07d2\u0001\u0000\u0000\u0000\u0a20\u07d7\u0001\u0000\u0000\u0000\u0a20"+ - "\u07e6\u0001\u0000\u0000\u0000\u0a20\u07ed\u0001\u0000\u0000\u0000\u0a20"+ - "\u07f8\u0001\u0000\u0000\u0000\u0a20\u0800\u0001\u0000\u0000\u0000\u0a20"+ - "\u0805\u0001\u0000\u0000\u0000\u0a20\u080a\u0001\u0000\u0000\u0000\u0a20"+ - "\u0813\u0001\u0000\u0000\u0000\u0a20\u0818\u0001\u0000\u0000\u0000\u0a20"+ - "\u0825\u0001\u0000\u0000\u0000\u0a20\u082c\u0001\u0000\u0000\u0000\u0a20"+ - "\u0834\u0001\u0000\u0000\u0000\u0a20\u0839\u0001\u0000\u0000\u0000\u0a20"+ - "\u0844\u0001\u0000\u0000\u0000\u0a20\u0851\u0001\u0000\u0000\u0000\u0a20"+ - "\u0856\u0001\u0000\u0000\u0000\u0a20\u085d\u0001\u0000\u0000\u0000\u0a20"+ - "\u0862\u0001\u0000\u0000\u0000\u0a20\u0867\u0001\u0000\u0000\u0000\u0a20"+ - "\u086c\u0001\u0000\u0000\u0000\u0a20\u0874\u0001\u0000\u0000\u0000\u0a20"+ - "\u0879\u0001\u0000\u0000\u0000\u0a20\u0880\u0001\u0000\u0000\u0000\u0a20"+ - "\u0887\u0001\u0000\u0000\u0000\u0a20\u088e\u0001\u0000\u0000\u0000\u0a20"+ - "\u0895\u0001\u0000\u0000\u0000\u0a20\u089c\u0001\u0000\u0000\u0000\u0a20"+ - "\u08a3\u0001\u0000\u0000\u0000\u0a20\u08a8\u0001\u0000\u0000\u0000\u0a20"+ - "\u08ad\u0001\u0000\u0000\u0000\u0a20\u08b2\u0001\u0000\u0000\u0000\u0a20"+ - "\u08b7\u0001\u0000\u0000\u0000\u0a20\u08bf\u0001\u0000\u0000\u0000\u0a20"+ - "\u08c7\u0001\u0000\u0000\u0000\u0a20\u08cf\u0001\u0000\u0000\u0000\u0a20"+ - "\u08d7\u0001\u0000\u0000\u0000\u0a20\u08de\u0001\u0000\u0000\u0000\u0a20"+ - "\u08e7\u0001\u0000\u0000\u0000\u0a20\u08ee\u0001\u0000\u0000\u0000\u0a20"+ - "\u08f6\u0001\u0000\u0000\u0000\u0a20\u08fe\u0001\u0000\u0000\u0000\u0a20"+ - "\u0906\u0001\u0000\u0000\u0000\u0a20\u090e\u0001\u0000\u0000\u0000\u0a20"+ - "\u0919\u0001\u0000\u0000\u0000\u0a20\u0924\u0001\u0000\u0000\u0000\u0a20"+ - "\u092f\u0001\u0000\u0000\u0000\u0a20\u093a\u0001\u0000\u0000\u0000\u0a20"+ - "\u0942\u0001\u0000\u0000\u0000\u0a20\u094a\u0001\u0000\u0000\u0000\u0a20"+ - "\u0959\u0001\u0000\u0000\u0000\u0a20\u0968\u0001\u0000\u0000\u0000\u0a20"+ - "\u096f\u0001\u0000\u0000\u0000\u0a20\u097d\u0001\u0000\u0000\u0000\u0a20"+ - "\u0988\u0001\u0000\u0000\u0000\u0a20\u0993\u0001\u0000\u0000\u0000\u0a20"+ - "\u099e\u0001\u0000\u0000\u0000\u0a20\u09a3\u0001\u0000\u0000\u0000\u0a20"+ - "\u09a8\u0001\u0000\u0000\u0000\u0a20\u09b3\u0001\u0000\u0000\u0000\u0a20"+ - "\u09be\u0001\u0000\u0000\u0000\u0a20\u09c3\u0001\u0000\u0000\u0000\u0a20"+ - "\u09d2\u0001\u0000\u0000\u0000\u0a20\u09d9\u0001\u0000\u0000\u0000\u0a20"+ - "\u09e0\u0001\u0000\u0000\u0000\u0a20\u09e7\u0001\u0000\u0000\u0000\u0a20"+ - "\u09ee\u0001\u0000\u0000\u0000\u0a20\u09f5\u0001\u0000\u0000\u0000\u0a20"+ - "\u09fc\u0001\u0000\u0000\u0000\u0a20\u0a04\u0001\u0000\u0000\u0000\u0a20"+ - "\u0a0b\u0001\u0000\u0000\u0000\u0a20\u0a12\u0001\u0000\u0000\u0000\u0a20"+ - "\u0a16\u0001\u0000\u0000\u0000\u0a20\u0a1b\u0001\u0000\u0000\u0000\u0a20"+ - "\u0a1e\u0001\u0000\u0000\u0000\u0a21\u0a24\u0001\u0000\u0000\u0000\u0a22"+ + "\u0000\u0000\u08ec\u0879\u0001\u0000\u0000\u0000\u08ec\u0880\u0001\u0000"+ + "\u0000\u0000\u08ec\u0887\u0001\u0000\u0000\u0000\u08ec\u088e\u0001\u0000"+ + "\u0000\u0000\u08ec\u0895\u0001\u0000\u0000\u0000\u08ec\u089c\u0001\u0000"+ + "\u0000\u0000\u08ec\u08a5\u0001\u0000\u0000\u0000\u08ec\u08ae\u0001\u0000"+ + "\u0000\u0000\u08ec\u08b4\u0001\u0000\u0000\u0000\u08ec\u08bb\u0001\u0000"+ + "\u0000\u0000\u08ec\u08c2\u0001\u0000\u0000\u0000\u08ec\u08d3\u0001\u0000"+ + "\u0000\u0000\u08ec\u08e4\u0001\u0000\u0000\u0000\u08ec\u08e5\u0001\u0000"+ + "\u0000\u0000\u08ec\u08e6\u0001\u0000\u0000\u0000\u08ec\u08ea\u0001\u0000"+ + "\u0000\u0000\u08ec\u08eb\u0001\u0000\u0000\u0000\u08ed\u0ae2\u0001\u0000"+ + "\u0000\u0000\u08ee\u08ef\n\u011d\u0000\u0000\u08ef\u08f0\u0007\u0001\u0000"+ + "\u0000\u08f0\u0ae1\u0003\u0002\u0001\u011e\u08f1\u08f2\n\u011c\u0000\u0000"+ + "\u08f2\u08f3\u0007\u0002\u0000\u0000\u08f3\u0ae1\u0003\u0002\u0001\u011d"+ + "\u08f4\u08f5\n\u011b\u0000\u0000\u08f5\u08f6\u0007\u0003\u0000\u0000\u08f6"+ + "\u0ae1\u0003\u0002\u0001\u011c\u08f7\u08f8\n\u011a\u0000\u0000\u08f8\u08f9"+ + "\u0007\u0004\u0000\u0000\u08f9\u0ae1\u0003\u0002\u0001\u011b\u08fa\u08fb"+ + "\n\u0119\u0000\u0000\u08fb\u08fc\u0005\u0017\u0000\u0000\u08fc\u0ae1\u0003"+ + "\u0002\u0001\u011a\u08fd\u08fe\n\u0118\u0000\u0000\u08fe\u08ff\u0005\u0018"+ + "\u0000\u0000\u08ff\u0ae1\u0003\u0002\u0001\u0119\u0900\u0901\n\u0117\u0000"+ + "\u0000\u0901\u0902\u0005\u0019\u0000\u0000\u0902\u0903\u0003\u0002\u0001"+ + "\u0000\u0903\u0904\u0005\u001a\u0000\u0000\u0904\u0905\u0003\u0002\u0001"+ + "\u0118\u0905\u0ae1\u0001\u0000\u0000\u0000\u0906\u0907\n\u0161\u0000\u0000"+ + "\u0907\u0908\u0005\u0001\u0000\u0000\u0908\u0909\u0005\'\u0000\u0000\u0909"+ + "\u090a\u0005\u0002\u0000\u0000\u090a\u0ae1\u0005\u0003\u0000\u0000\u090b"+ + "\u090c\n\u0160\u0000\u0000\u090c\u090d\u0005\u0001\u0000\u0000\u090d\u090e"+ + "\u0005(\u0000\u0000\u090e\u090f\u0005\u0002\u0000\u0000\u090f\u0ae1\u0005"+ + "\u0003\u0000\u0000\u0910\u0911\n\u015f\u0000\u0000\u0911\u0912\u0005\u0001"+ + "\u0000\u0000\u0912\u0913\u0005*\u0000\u0000\u0913\u0914\u0005\u0002\u0000"+ + "\u0000\u0914\u0ae1\u0005\u0003\u0000\u0000\u0915\u0916\n\u015e\u0000\u0000"+ + "\u0916\u0917\u0005\u0001\u0000\u0000\u0917\u0918\u0005+\u0000\u0000\u0918"+ + "\u0919\u0005\u0002\u0000\u0000\u0919\u0ae1\u0005\u0003\u0000\u0000\u091a"+ + "\u091b\n\u015d\u0000\u0000\u091b\u091c\u0005\u0001\u0000\u0000\u091c\u091d"+ + "\u0005)\u0000\u0000\u091d\u091f\u0005\u0002\u0000\u0000\u091e\u0920\u0003"+ + "\u0002\u0001\u0000\u091f\u091e\u0001\u0000\u0000\u0000\u091f\u0920\u0001"+ + "\u0000\u0000\u0000\u0920\u0921\u0001\u0000\u0000\u0000\u0921\u0ae1\u0005"+ + "\u0003\u0000\u0000\u0922\u0923\n\u015c\u0000\u0000\u0923\u0924\u0005\u0001"+ + "\u0000\u0000\u0924\u0925\u0005.\u0000\u0000\u0925\u0927\u0005\u0002\u0000"+ + "\u0000\u0926\u0928\u0003\u0002\u0001\u0000\u0927\u0926\u0001\u0000\u0000"+ + "\u0000\u0927\u0928\u0001\u0000\u0000\u0000\u0928\u0929\u0001\u0000\u0000"+ + "\u0000\u0929\u0ae1\u0005\u0003\u0000\u0000\u092a\u092b\n\u015b\u0000\u0000"+ + "\u092b\u092c\u0005\u0001\u0000\u0000\u092c\u092d\u0005/\u0000\u0000\u092d"+ + "\u092f\u0005\u0002\u0000\u0000\u092e\u0930\u0003\u0002\u0001\u0000\u092f"+ + "\u092e\u0001\u0000\u0000\u0000\u092f\u0930\u0001\u0000\u0000\u0000\u0930"+ + "\u0931\u0001\u0000\u0000\u0000\u0931\u0ae1\u0005\u0003\u0000\u0000\u0932"+ + "\u0933\n\u015a\u0000\u0000\u0933\u0934\u0005\u0001\u0000\u0000\u0934\u0935"+ + "\u0005J\u0000\u0000\u0935\u0936\u0005\u0002\u0000\u0000\u0936\u0ae1\u0005"+ + "\u0003\u0000\u0000\u0937\u0938\n\u0159\u0000\u0000\u0938\u0939\u0005\u0001"+ + "\u0000\u0000\u0939\u093a\u0005\u0099\u0000\u0000\u093a\u093b\u0005\u0002"+ + "\u0000\u0000\u093b\u093c\u0003\u0002\u0001\u0000\u093c\u093d\u0005\u0003"+ + "\u0000\u0000\u093d\u0ae1\u0001\u0000\u0000\u0000\u093e\u093f\n\u0158\u0000"+ + "\u0000\u093f\u0940\u0005\u0001\u0000\u0000\u0940\u0941\u0005\u009c\u0000"+ + "\u0000\u0941\u0943\u0005\u0002\u0000\u0000\u0942\u0944\u0003\u0002\u0001"+ + "\u0000\u0943\u0942\u0001\u0000\u0000\u0000\u0943\u0944\u0001\u0000\u0000"+ + "\u0000\u0944\u0945\u0001\u0000\u0000\u0000\u0945\u0ae1\u0005\u0003\u0000"+ + "\u0000\u0946\u0947\n\u0157\u0000\u0000\u0947\u0948\u0005\u0001\u0000\u0000"+ + "\u0948\u0949\u0005\u009d\u0000\u0000\u0949\u094a\u0005\u0002\u0000\u0000"+ + "\u094a\u0ae1\u0005\u0003\u0000\u0000\u094b\u094c\n\u0156\u0000\u0000\u094c"+ + "\u094d\u0005\u0001\u0000\u0000\u094d\u094e\u0005\u009e\u0000\u0000\u094e"+ + "\u094f\u0005\u0002\u0000\u0000\u094f\u0ae1\u0005\u0003\u0000\u0000\u0950"+ + "\u0951\n\u0155\u0000\u0000\u0951\u0952\u0005\u0001\u0000\u0000\u0952\u0953"+ + "\u0005\u009f\u0000\u0000\u0953\u0954\u0005\u0002\u0000\u0000\u0954\u0955"+ + "\u0003\u0002\u0001\u0000\u0955\u0956\u0005\u0004\u0000\u0000\u0956\u0957"+ + "\u0003\u0002\u0001\u0000\u0957\u0958\u0005\u0003\u0000\u0000\u0958\u0ae1"+ + "\u0001\u0000\u0000\u0000\u0959\u095a\n\u0154\u0000\u0000\u095a\u095b\u0005"+ + "\u0001\u0000\u0000\u095b\u095c\u0005\u00a1\u0000\u0000\u095c\u095d\u0005"+ + "\u0002\u0000\u0000\u095d\u095e\u0003\u0002\u0001\u0000\u095e\u095f\u0005"+ + "\u0004\u0000\u0000\u095f\u0962\u0003\u0002\u0001\u0000\u0960\u0961\u0005"+ + "\u0004\u0000\u0000\u0961\u0963\u0003\u0002\u0001\u0000\u0962\u0960\u0001"+ + "\u0000\u0000\u0000\u0962\u0963\u0001\u0000\u0000\u0000\u0963\u0964\u0001"+ + "\u0000\u0000\u0000\u0964\u0965\u0005\u0003\u0000\u0000\u0965\u0ae1\u0001"+ + "\u0000\u0000\u0000\u0966\u0967\n\u0153\u0000\u0000\u0967\u0968\u0005\u0001"+ + "\u0000\u0000\u0968\u0969\u0005\u00a3\u0000\u0000\u0969\u096b\u0005\u0002"+ + "\u0000\u0000\u096a\u096c\u0003\u0002\u0001\u0000\u096b\u096a\u0001\u0000"+ + "\u0000\u0000\u096b\u096c\u0001\u0000\u0000\u0000\u096c\u096d\u0001\u0000"+ + "\u0000\u0000\u096d\u0ae1\u0005\u0003\u0000\u0000\u096e\u096f\n\u0152\u0000"+ + "\u0000\u096f\u0970\u0005\u0001\u0000\u0000\u0970\u0971\u0005\u00a4\u0000"+ + "\u0000\u0971\u0972\u0005\u0002\u0000\u0000\u0972\u0ae1\u0005\u0003\u0000"+ + "\u0000\u0973\u0974\n\u0151\u0000\u0000\u0974\u0975\u0005\u0001\u0000\u0000"+ + "\u0975\u0976\u0005\u00a7\u0000\u0000\u0976\u0977\u0005\u0002\u0000\u0000"+ + "\u0977\u0ae1\u0005\u0003\u0000\u0000\u0978\u0979\n\u0150\u0000\u0000\u0979"+ + "\u097a\u0005\u0001\u0000\u0000\u097a\u097b\u0005\u00a8\u0000\u0000\u097b"+ + "\u097c\u0005\u0002\u0000\u0000\u097c\u097d\u0003\u0002\u0001\u0000\u097d"+ + "\u097e\u0005\u0003\u0000\u0000\u097e\u0ae1\u0001\u0000\u0000\u0000\u097f"+ + "\u0980\n\u014f\u0000\u0000\u0980\u0981\u0005\u0001\u0000\u0000\u0981\u0982"+ + "\u0005\u00a9\u0000\u0000\u0982\u0983\u0005\u0002\u0000\u0000\u0983\u0ae1"+ + "\u0005\u0003\u0000\u0000\u0984\u0985\n\u014e\u0000\u0000\u0985\u0986\u0005"+ + "\u0001\u0000\u0000\u0986\u0987\u0005\u00aa\u0000\u0000\u0987\u0988\u0005"+ + "\u0002\u0000\u0000\u0988\u0ae1\u0005\u0003\u0000\u0000\u0989\u098a\n\u014d"+ + "\u0000\u0000\u098a\u098b\u0005\u0001\u0000\u0000\u098b\u098c\u0005\u00ab"+ + "\u0000\u0000\u098c\u098d\u0005\u0002\u0000\u0000\u098d\u0ae1\u0005\u0003"+ + "\u0000\u0000\u098e\u098f\n\u014c\u0000\u0000\u098f\u0990\u0005\u0001\u0000"+ + "\u0000\u0990\u0991\u0005\u00ac\u0000\u0000\u0991\u0993\u0005\u0002\u0000"+ + "\u0000\u0992\u0994\u0003\u0002\u0001\u0000\u0993\u0992\u0001\u0000\u0000"+ + "\u0000\u0993\u0994\u0001\u0000\u0000\u0000\u0994\u0995\u0001\u0000\u0000"+ + "\u0000\u0995\u0ae1\u0005\u0003\u0000\u0000\u0996\u0997\n\u014b\u0000\u0000"+ + "\u0997\u0998\u0005\u0001\u0000\u0000\u0998\u0999\u0005\u00ad\u0000\u0000"+ + "\u0999\u099a\u0005\u0002\u0000\u0000\u099a\u0ae1\u0005\u0003\u0000\u0000"+ + "\u099b\u099c\n\u014a\u0000\u0000\u099c\u099d\u0005\u0001\u0000\u0000\u099d"+ + "\u09a0\u0005\u00b2\u0000\u0000\u099e\u099f\u0005\u0002\u0000\u0000\u099f"+ + "\u09a1\u0005\u0003\u0000\u0000\u09a0\u099e\u0001\u0000\u0000\u0000\u09a0"+ + "\u09a1\u0001\u0000\u0000\u0000\u09a1\u0ae1\u0001\u0000\u0000\u0000\u09a2"+ + "\u09a3\n\u0149\u0000\u0000\u09a3\u09a4\u0005\u0001\u0000\u0000\u09a4\u09a7"+ + "\u0005\u00b3\u0000\u0000\u09a5\u09a6\u0005\u0002\u0000\u0000\u09a6\u09a8"+ + "\u0005\u0003\u0000\u0000\u09a7\u09a5\u0001\u0000\u0000\u0000\u09a7\u09a8"+ + "\u0001\u0000\u0000\u0000\u09a8\u0ae1\u0001\u0000\u0000\u0000\u09a9\u09aa"+ + "\n\u0148\u0000\u0000\u09aa\u09ab\u0005\u0001\u0000\u0000\u09ab\u09ae\u0005"+ + "\u00b4\u0000\u0000\u09ac\u09ad\u0005\u0002\u0000\u0000\u09ad\u09af\u0005"+ + "\u0003\u0000\u0000\u09ae\u09ac\u0001\u0000\u0000\u0000\u09ae\u09af\u0001"+ + "\u0000\u0000\u0000\u09af\u0ae1\u0001\u0000\u0000\u0000\u09b0\u09b1\n\u0147"+ + "\u0000\u0000\u09b1\u09b2\u0005\u0001\u0000\u0000\u09b2\u09b5\u0005\u00b5"+ + "\u0000\u0000\u09b3\u09b4\u0005\u0002\u0000\u0000\u09b4\u09b6\u0005\u0003"+ + "\u0000\u0000\u09b5\u09b3\u0001\u0000\u0000\u0000\u09b5\u09b6\u0001\u0000"+ + "\u0000\u0000\u09b6\u0ae1\u0001\u0000\u0000\u0000\u09b7\u09b8\n\u0146\u0000"+ + "\u0000\u09b8\u09b9\u0005\u0001\u0000\u0000\u09b9\u09bc\u0005\u00b6\u0000"+ + "\u0000\u09ba\u09bb\u0005\u0002\u0000\u0000\u09bb\u09bd\u0005\u0003\u0000"+ + "\u0000\u09bc\u09ba\u0001\u0000\u0000\u0000\u09bc\u09bd\u0001\u0000\u0000"+ + "\u0000\u09bd\u0ae1\u0001\u0000\u0000\u0000\u09be\u09bf\n\u0145\u0000\u0000"+ + "\u09bf\u09c0\u0005\u0001\u0000\u0000\u09c0\u09c3\u0005\u00b7\u0000\u0000"+ + "\u09c1\u09c2\u0005\u0002\u0000\u0000\u09c2\u09c4\u0005\u0003\u0000\u0000"+ + "\u09c3\u09c1\u0001\u0000\u0000\u0000\u09c3\u09c4\u0001\u0000\u0000\u0000"+ + "\u09c4\u0ae1\u0001\u0000\u0000\u0000\u09c5\u09c6\n\u0144\u0000\u0000\u09c6"+ + "\u09c7\u0005\u0001\u0000\u0000\u09c7\u09c8\u0005\u0101\u0000\u0000\u09c8"+ + "\u09c9\u0005\u0002\u0000\u0000\u09c9\u0ae1\u0005\u0003\u0000\u0000\u09ca"+ + "\u09cb\n\u0143\u0000\u0000\u09cb\u09cc\u0005\u0001\u0000\u0000\u09cc\u09cd"+ + "\u0005\u0102\u0000\u0000\u09cd\u09ce\u0005\u0002\u0000\u0000\u09ce\u0ae1"+ + "\u0005\u0003\u0000\u0000\u09cf\u09d0\n\u0142\u0000\u0000\u09d0\u09d1\u0005"+ + "\u0001\u0000\u0000\u09d1\u09d2\u0005\u0109\u0000\u0000\u09d2\u09d3\u0005"+ + "\u0002\u0000\u0000\u09d3\u09d4\u0003\u0002\u0001\u0000\u09d4\u09d5\u0005"+ + "\u0003\u0000\u0000\u09d5\u0ae1\u0001\u0000\u0000\u0000\u09d6\u09d7\n\u0141"+ + "\u0000\u0000\u09d7\u09d8\u0005\u0001\u0000\u0000\u09d8\u09d9\u0005\u010a"+ + "\u0000\u0000\u09d9\u09da\u0005\u0002\u0000\u0000\u09da\u09db\u0003\u0002"+ + "\u0001\u0000\u09db\u09dc\u0005\u0004\u0000\u0000\u09dc\u09dd\u0003\u0002"+ + "\u0001\u0000\u09dd\u09de\u0005\u0003\u0000\u0000\u09de\u0ae1\u0001\u0000"+ + "\u0000\u0000\u09df\u09e0\n\u0140\u0000\u0000\u09e0\u09e1\u0005\u0001\u0000"+ + "\u0000\u09e1\u09e2\u0005\u010b\u0000\u0000\u09e2\u09e3\u0005\u0002\u0000"+ + "\u0000\u09e3\u09e4\u0003\u0002\u0001\u0000\u09e4\u09e5\u0005\u0003\u0000"+ + "\u0000\u09e5\u0ae1\u0001\u0000\u0000\u0000\u09e6\u09e7\n\u013f\u0000\u0000"+ + "\u09e7\u09e8\u0005\u0001\u0000\u0000\u09e8\u09e9\u0005\u010d\u0000\u0000"+ + "\u09e9\u09ea\u0005\u0002\u0000\u0000\u09ea\u0ae1\u0005\u0003\u0000\u0000"+ + "\u09eb\u09ec\n\u013e\u0000\u0000\u09ec\u09ed\u0005\u0001\u0000\u0000\u09ed"+ + "\u09ee\u0005\u010e\u0000\u0000\u09ee\u09ef\u0005\u0002\u0000\u0000\u09ef"+ + "\u0ae1\u0005\u0003\u0000\u0000\u09f0\u09f1\n\u013d\u0000\u0000\u09f1\u09f2"+ + "\u0005\u0001\u0000\u0000\u09f2\u09f3\u0005\u010f\u0000\u0000\u09f3\u09f4"+ + "\u0005\u0002\u0000\u0000\u09f4\u0ae1\u0005\u0003\u0000\u0000\u09f5\u09f6"+ + "\n\u013c\u0000\u0000\u09f6\u09f7\u0005\u0001\u0000\u0000\u09f7\u09f8\u0005"+ + "\u0110\u0000\u0000\u09f8\u09f9\u0005\u0002\u0000\u0000\u09f9\u0ae1\u0005"+ + "\u0003\u0000\u0000\u09fa\u09fb\n\u013b\u0000\u0000\u09fb\u09fc\u0005\u0001"+ + "\u0000\u0000\u09fc\u09fd\u0005\u0115\u0000\u0000\u09fd\u09ff\u0005\u0002"+ + "\u0000\u0000\u09fe\u0a00\u0003\u0002\u0001\u0000\u09ff\u09fe\u0001\u0000"+ + "\u0000\u0000\u09ff\u0a00\u0001\u0000\u0000\u0000\u0a00\u0a01\u0001\u0000"+ + "\u0000\u0000\u0a01\u0ae1\u0005\u0003\u0000\u0000\u0a02\u0a03\n\u013a\u0000"+ + "\u0000\u0a03\u0a04\u0005\u0001\u0000\u0000\u0a04\u0a05\u0005\u0116\u0000"+ + "\u0000\u0a05\u0a07\u0005\u0002\u0000\u0000\u0a06\u0a08\u0003\u0002\u0001"+ + "\u0000\u0a07\u0a06\u0001\u0000\u0000\u0000\u0a07\u0a08\u0001\u0000\u0000"+ + "\u0000\u0a08\u0a09\u0001\u0000\u0000\u0000\u0a09\u0ae1\u0005\u0003\u0000"+ + "\u0000\u0a0a\u0a0b\n\u0139\u0000\u0000\u0a0b\u0a0c\u0005\u0001\u0000\u0000"+ + "\u0a0c\u0a0d\u0005\u0117\u0000\u0000\u0a0d\u0a0e\u0005\u0002\u0000\u0000"+ + "\u0a0e\u0a15\u0003\u0002\u0001\u0000\u0a0f\u0a10\u0005\u0004\u0000\u0000"+ + "\u0a10\u0a13\u0003\u0002\u0001\u0000\u0a11\u0a12\u0005\u0004\u0000\u0000"+ + "\u0a12\u0a14\u0003\u0002\u0001\u0000\u0a13\u0a11\u0001\u0000\u0000\u0000"+ + "\u0a13\u0a14\u0001\u0000\u0000\u0000\u0a14\u0a16\u0001\u0000\u0000\u0000"+ + "\u0a15\u0a0f\u0001\u0000\u0000\u0000\u0a15\u0a16\u0001\u0000\u0000\u0000"+ + "\u0a16\u0a17\u0001\u0000\u0000\u0000\u0a17\u0a18\u0005\u0003\u0000\u0000"+ + "\u0a18\u0ae1\u0001\u0000\u0000\u0000\u0a19\u0a1a\n\u0138\u0000\u0000\u0a1a"+ + "\u0a1b\u0005\u0001\u0000\u0000\u0a1b\u0a1c\u0005\u0118\u0000\u0000\u0a1c"+ + "\u0a1d\u0005\u0002\u0000\u0000\u0a1d\u0a24\u0003\u0002\u0001\u0000\u0a1e"+ + "\u0a1f\u0005\u0004\u0000\u0000\u0a1f\u0a22\u0003\u0002\u0001\u0000\u0a20"+ + "\u0a21\u0005\u0004\u0000\u0000\u0a21\u0a23\u0003\u0002\u0001\u0000\u0a22"+ "\u0a20\u0001\u0000\u0000\u0000\u0a22\u0a23\u0001\u0000\u0000\u0000\u0a23"+ - "\u0003\u0001\u0000\u0000\u0000\u0a24\u0a22\u0001\u0000\u0000\u0000\u0a25"+ - "\u0a27\u0005\u001d\u0000\u0000\u0a26\u0a25\u0001\u0000\u0000\u0000\u0a26"+ - "\u0a27\u0001\u0000\u0000\u0000\u0a27\u0a28\u0001\u0000\u0000\u0000\u0a28"+ - "\u0a29\u0005\u001e\u0000\u0000\u0a29\u0005\u0001\u0000\u0000\u0000\u0a2a"+ - "\u0a2b\u0007\u0006\u0000\u0000\u0a2b\u0007\u0001\u0000\u0000\u0000\u0a2c"+ - "\u0a30\u0005\u001e\u0000\u0000\u0a2d\u0a30\u0005\u001f\u0000\u0000\u0a2e"+ - "\u0a30\u0003\n\u0005\u0000\u0a2f\u0a2c\u0001\u0000\u0000\u0000\u0a2f\u0a2d"+ - "\u0001\u0000\u0000\u0000\u0a2f\u0a2e\u0001\u0000\u0000\u0000\u0a30\u0a31"+ - "\u0001\u0000\u0000\u0000\u0a31\u0a32\u0005\u001a\u0000\u0000\u0a32\u0a33"+ - "\u0003\u0002\u0001\u0000\u0a33\t\u0001\u0000\u0000\u0000\u0a34\u0a35\u0007"+ - "\u0007\u0000\u0000\u0a35\u000b\u0001\u0000\u0000\u0000\u00a2\u001d)<["+ - "dmx\u0084\u0091\u0096\u009b\u00a0\u00a7\u00b0\u00b9\u00c2\u00d0\u00d9"+ - "\u00e7\u00f0\u00fe\u0132\u013d\u01a1\u01b8\u01c1\u0200\u0210\u021c\u022d"+ - "\u0252\u0265\u0270\u0272\u027b\u02a0\u02b0\u02c0\u02cd\u02f1\u0307\u0309"+ - "\u030b\u0316\u0343\u0357\u0370\u037b\u0384\u038f\u039a\u03a5\u03b7\u03df"+ - "\u03eb\u03f6\u0402\u040e\u041a\u0426\u0432\u043d\u0449\u0455\u046f\u047b"+ - "\u0487\u0568\u0571\u057a\u0583\u05a6\u05af\u05b8\u05c1\u05cc\u05d7\u05e2"+ - "\u05ed\u05f6\u05ff\u060c\u060e\u061b\u061d\u062f\u063a\u0645\u0650\u0665"+ - "\u0667\u0672\u0674\u0692\u0695\u06c7\u06d0\u06d7\u06ee\u06f4\u06ff\u0705"+ - "\u070e\u0712\u074f\u0757\u075f\u0767\u076f\u0777\u077f\u078c\u0794\u07a1"+ - "\u07a9\u07b6\u07e0\u07e3\u07f4\u07fd\u0821\u0831\u0840\u084d\u0871\u087e"+ - "\u0885\u088c\u0893\u089a\u08a1\u08bc\u08c4\u08cc\u08d4\u08f3\u08fb\u0903"+ - "\u090b\u0915\u0920\u092b\u0936\u093f\u0947\u0953\u0955\u0962\u0964\u0978"+ - "\u0984\u098f\u099a\u09af\u09ba\u09cc\u09cf\u0a01\u0a20\u0a22\u0a26\u0a2f"; + "\u0a25\u0001\u0000\u0000\u0000\u0a24\u0a1e\u0001\u0000\u0000\u0000\u0a24"+ + "\u0a25\u0001\u0000\u0000\u0000\u0a25\u0a26\u0001\u0000\u0000\u0000\u0a26"+ + "\u0a27\u0005\u0003\u0000\u0000\u0a27\u0ae1\u0001\u0000\u0000\u0000\u0a28"+ + "\u0a29\n\u0137\u0000\u0000\u0a29\u0a2a\u0005\u0001\u0000\u0000\u0a2a\u0a2b"+ + "\u0005\u0119\u0000\u0000\u0a2b\u0a2c\u0005\u0002\u0000\u0000\u0a2c\u0a2d"+ + "\u0003\u0002\u0001\u0000\u0a2d\u0a2e\u0005\u0003\u0000\u0000\u0a2e\u0ae1"+ + "\u0001\u0000\u0000\u0000\u0a2f\u0a30\n\u0136\u0000\u0000\u0a30\u0a31\u0005"+ + "\u0001\u0000\u0000\u0a31\u0a32\u0005\u011a\u0000\u0000\u0a32\u0a33\u0005"+ + "\u0002\u0000\u0000\u0a33\u0a38\u0003\u0002\u0001\u0000\u0a34\u0a35\u0005"+ + "\u0004\u0000\u0000\u0a35\u0a37\u0003\u0002\u0001\u0000\u0a36\u0a34\u0001"+ + "\u0000\u0000\u0000\u0a37\u0a3a\u0001\u0000\u0000\u0000\u0a38\u0a36\u0001"+ + "\u0000\u0000\u0000\u0a38\u0a39\u0001\u0000\u0000\u0000\u0a39\u0a3b\u0001"+ + "\u0000\u0000\u0000\u0a3a\u0a38\u0001\u0000\u0000\u0000\u0a3b\u0a3c\u0005"+ + "\u0003\u0000\u0000\u0a3c\u0ae1\u0001\u0000\u0000\u0000\u0a3d\u0a3e\n\u0135"+ + "\u0000\u0000\u0a3e\u0a3f\u0005\u0001\u0000\u0000\u0a3f\u0a40\u0005\u011b"+ + "\u0000\u0000\u0a40\u0a41\u0005\u0002\u0000\u0000\u0a41\u0a44\u0003\u0002"+ + "\u0001\u0000\u0a42\u0a43\u0005\u0004\u0000\u0000\u0a43\u0a45\u0003\u0002"+ + "\u0001\u0000\u0a44\u0a42\u0001\u0000\u0000\u0000\u0a44\u0a45\u0001\u0000"+ + "\u0000\u0000\u0a45\u0a46\u0001\u0000\u0000\u0000\u0a46\u0a47\u0005\u0003"+ + "\u0000\u0000\u0a47\u0ae1\u0001\u0000\u0000\u0000\u0a48\u0a49\n\u0134\u0000"+ + "\u0000\u0a49\u0a4a\u0005\u0001\u0000\u0000\u0a4a\u0a4b\u0005\u011c\u0000"+ + "\u0000\u0a4b\u0a4c\u0005\u0002\u0000\u0000\u0a4c\u0a4f\u0003\u0002\u0001"+ + "\u0000\u0a4d\u0a4e\u0005\u0004\u0000\u0000\u0a4e\u0a50\u0003\u0002\u0001"+ + "\u0000\u0a4f\u0a4d\u0001\u0000\u0000\u0000\u0a4f\u0a50\u0001\u0000\u0000"+ + "\u0000\u0a50\u0a51\u0001\u0000\u0000\u0000\u0a51\u0a52\u0005\u0003\u0000"+ + "\u0000\u0a52\u0ae1\u0001\u0000\u0000\u0000\u0a53\u0a54\n\u0133\u0000\u0000"+ + "\u0a54\u0a55\u0005\u0001\u0000\u0000\u0a55\u0a56\u0005\u011d\u0000\u0000"+ + "\u0a56\u0a57\u0005\u0002\u0000\u0000\u0a57\u0a5a\u0003\u0002\u0001\u0000"+ + "\u0a58\u0a59\u0005\u0004\u0000\u0000\u0a59\u0a5b\u0003\u0002\u0001\u0000"+ + "\u0a5a\u0a58\u0001\u0000\u0000\u0000\u0a5a\u0a5b\u0001\u0000\u0000\u0000"+ + "\u0a5b\u0a5c\u0001\u0000\u0000\u0000\u0a5c\u0a5d\u0005\u0003\u0000\u0000"+ + "\u0a5d\u0ae1\u0001\u0000\u0000\u0000\u0a5e\u0a5f\n\u0132\u0000\u0000\u0a5f"+ + "\u0a60\u0005\u0001\u0000\u0000\u0a60\u0a61\u0005\u011e\u0000\u0000\u0a61"+ + "\u0a62\u0005\u0002\u0000\u0000\u0a62\u0ae1\u0005\u0003\u0000\u0000\u0a63"+ + "\u0a64\n\u0131\u0000\u0000\u0a64\u0a65\u0005\u0001\u0000\u0000\u0a65\u0a66"+ + "\u0005\u011f\u0000\u0000\u0a66\u0a67\u0005\u0002\u0000\u0000\u0a67\u0ae1"+ + "\u0005\u0003\u0000\u0000\u0a68\u0a69\n\u0130\u0000\u0000\u0a69\u0a6a\u0005"+ + "\u0001\u0000\u0000\u0a6a\u0a6b\u0005\u0120\u0000\u0000\u0a6b\u0a6c\u0005"+ + "\u0002\u0000\u0000\u0a6c\u0a6f\u0003\u0002\u0001\u0000\u0a6d\u0a6e\u0005"+ + "\u0004\u0000\u0000\u0a6e\u0a70\u0003\u0002\u0001\u0000\u0a6f\u0a6d\u0001"+ + "\u0000\u0000\u0000\u0a6f\u0a70\u0001\u0000\u0000\u0000\u0a70\u0a71\u0001"+ + "\u0000\u0000\u0000\u0a71\u0a72\u0005\u0003\u0000\u0000\u0a72\u0ae1\u0001"+ + "\u0000\u0000\u0000\u0a73\u0a74\n\u012f\u0000\u0000\u0a74\u0a75\u0005\u0001"+ + "\u0000\u0000\u0a75\u0a76\u0005\u0121\u0000\u0000\u0a76\u0a77\u0005\u0002"+ + "\u0000\u0000\u0a77\u0a7a\u0003\u0002\u0001\u0000\u0a78\u0a79\u0005\u0004"+ + "\u0000\u0000\u0a79\u0a7b\u0003\u0002\u0001\u0000\u0a7a\u0a78\u0001\u0000"+ + "\u0000\u0000\u0a7a\u0a7b\u0001\u0000\u0000\u0000\u0a7b\u0a7c\u0001\u0000"+ + "\u0000\u0000\u0a7c\u0a7d\u0005\u0003\u0000\u0000\u0a7d\u0ae1\u0001\u0000"+ + "\u0000\u0000\u0a7e\u0a7f\n\u012e\u0000\u0000\u0a7f\u0a80\u0005\u0001\u0000"+ + "\u0000\u0a80\u0a81\u0005\u0122\u0000\u0000\u0a81\u0a82\u0005\u0002\u0000"+ + "\u0000\u0a82\u0ae1\u0005\u0003\u0000\u0000\u0a83\u0a84\n\u012d\u0000\u0000"+ + "\u0a84\u0a85\u0005\u0001\u0000\u0000\u0a85\u0a86\u0005\u0131\u0000\u0000"+ + "\u0a86\u0a8f\u0005\u0002\u0000\u0000\u0a87\u0a8c\u0003\u0002\u0001\u0000"+ + "\u0a88\u0a89\u0005\u0004\u0000\u0000\u0a89\u0a8b\u0003\u0002\u0001\u0000"+ + "\u0a8a\u0a88\u0001\u0000\u0000\u0000\u0a8b\u0a8e\u0001\u0000\u0000\u0000"+ + "\u0a8c\u0a8a\u0001\u0000\u0000\u0000\u0a8c\u0a8d\u0001\u0000\u0000\u0000"+ + "\u0a8d\u0a90\u0001\u0000\u0000\u0000\u0a8e\u0a8c\u0001\u0000\u0000\u0000"+ + "\u0a8f\u0a87\u0001\u0000\u0000\u0000\u0a8f\u0a90\u0001\u0000\u0000\u0000"+ + "\u0a90\u0a91\u0001\u0000\u0000\u0000\u0a91\u0ae1\u0005\u0003\u0000\u0000"+ + "\u0a92\u0a93\n\u012c\u0000\u0000\u0a93\u0a94\u0005\u0001\u0000\u0000\u0a94"+ + "\u0a95\u0005\u0127\u0000\u0000\u0a95\u0a96\u0005\u0002\u0000\u0000\u0a96"+ + "\u0a97\u0003\u0002\u0001\u0000\u0a97\u0a98\u0005\u0003\u0000\u0000\u0a98"+ + "\u0ae1\u0001\u0000\u0000\u0000\u0a99\u0a9a\n\u012b\u0000\u0000\u0a9a\u0a9b"+ + "\u0005\u0001\u0000\u0000\u0a9b\u0a9c\u0005\u0128\u0000\u0000\u0a9c\u0a9d"+ + "\u0005\u0002\u0000\u0000\u0a9d\u0a9e\u0003\u0002\u0001\u0000\u0a9e\u0a9f"+ + "\u0005\u0003\u0000\u0000\u0a9f\u0ae1\u0001\u0000\u0000\u0000\u0aa0\u0aa1"+ + "\n\u012a\u0000\u0000\u0aa1\u0aa2\u0005\u0001\u0000\u0000\u0aa2\u0aa3\u0005"+ + "\u0129\u0000\u0000\u0aa3\u0aa4\u0005\u0002\u0000\u0000\u0aa4\u0aa5\u0003"+ + "\u0002\u0001\u0000\u0aa5\u0aa6\u0005\u0003\u0000\u0000\u0aa6\u0ae1\u0001"+ + "\u0000\u0000\u0000\u0aa7\u0aa8\n\u0129\u0000\u0000\u0aa8\u0aa9\u0005\u0001"+ + "\u0000\u0000\u0aa9\u0aaa\u0005\u012a\u0000\u0000\u0aaa\u0aab\u0005\u0002"+ + "\u0000\u0000\u0aab\u0aac\u0003\u0002\u0001\u0000\u0aac\u0aad\u0005\u0003"+ + "\u0000\u0000\u0aad\u0ae1\u0001\u0000\u0000\u0000\u0aae\u0aaf\n\u0128\u0000"+ + "\u0000\u0aaf\u0ab0\u0005\u0001\u0000\u0000\u0ab0\u0ab1\u0005\u012b\u0000"+ + "\u0000\u0ab1\u0ab2\u0005\u0002\u0000\u0000\u0ab2\u0ab3\u0003\u0002\u0001"+ + "\u0000\u0ab3\u0ab4\u0005\u0003\u0000\u0000\u0ab4\u0ae1\u0001\u0000\u0000"+ + "\u0000\u0ab5\u0ab6\n\u0127\u0000\u0000\u0ab6\u0ab7\u0005\u0001\u0000\u0000"+ + "\u0ab7\u0ab8\u0005\u012c\u0000\u0000\u0ab8\u0ab9\u0005\u0002\u0000\u0000"+ + "\u0ab9\u0aba\u0003\u0002\u0001\u0000\u0aba\u0abb\u0005\u0003\u0000\u0000"+ + "\u0abb\u0ae1\u0001\u0000\u0000\u0000\u0abc\u0abd\n\u0126\u0000\u0000\u0abd"+ + "\u0abe\u0005\u0001\u0000\u0000\u0abe\u0abf\u0005\u012d\u0000\u0000\u0abf"+ + "\u0ac1\u0005\u0002\u0000\u0000\u0ac0\u0ac2\u0003\u0002\u0001\u0000\u0ac1"+ + "\u0ac0\u0001\u0000\u0000\u0000\u0ac1\u0ac2\u0001\u0000\u0000\u0000\u0ac2"+ + "\u0ac3\u0001\u0000\u0000\u0000\u0ac3\u0ae1\u0005\u0003\u0000\u0000\u0ac4"+ + "\u0ac5\n\u0125\u0000\u0000\u0ac5\u0ac6\u0005\u0001\u0000\u0000\u0ac6\u0ac7"+ + "\u0005\u012e\u0000\u0000\u0ac7\u0ac8\u0005\u0002\u0000\u0000\u0ac8\u0ac9"+ + "\u0003\u0002\u0001\u0000\u0ac9\u0aca\u0005\u0003\u0000\u0000\u0aca\u0ae1"+ + "\u0001\u0000\u0000\u0000\u0acb\u0acc\n\u0124\u0000\u0000\u0acc\u0acd\u0005"+ + "\u0001\u0000\u0000\u0acd\u0ace\u0005\u012f\u0000\u0000\u0ace\u0acf\u0005"+ + "\u0002\u0000\u0000\u0acf\u0ad0\u0003\u0002\u0001\u0000\u0ad0\u0ad1\u0005"+ + "\u0003\u0000\u0000\u0ad1\u0ae1\u0001\u0000\u0000\u0000\u0ad2\u0ad3\n\u0123"+ + "\u0000\u0000\u0ad3\u0ad4\u0005\u0005\u0000\u0000\u0ad4\u0ad5\u0005\u0131"+ + "\u0000\u0000\u0ad5\u0ae1\u0005\u0006\u0000\u0000\u0ad6\u0ad7\n\u0122\u0000"+ + "\u0000\u0ad7\u0ad8\u0005\u0005\u0000\u0000\u0ad8\u0ad9\u0003\u0002\u0001"+ + "\u0000\u0ad9\u0ada\u0005\u0006\u0000\u0000\u0ada\u0ae1\u0001\u0000\u0000"+ + "\u0000\u0adb\u0adc\n\u0121\u0000\u0000\u0adc\u0add\u0005\u0001\u0000\u0000"+ + "\u0add\u0ae1\u0003\b\u0004\u0000\u0ade\u0adf\n\u011e\u0000\u0000\u0adf"+ + "\u0ae1\u0005\b\u0000\u0000\u0ae0\u08ee\u0001\u0000\u0000\u0000\u0ae0\u08f1"+ + "\u0001\u0000\u0000\u0000\u0ae0\u08f4\u0001\u0000\u0000\u0000\u0ae0\u08f7"+ + "\u0001\u0000\u0000\u0000\u0ae0\u08fa\u0001\u0000\u0000\u0000\u0ae0\u08fd"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0900\u0001\u0000\u0000\u0000\u0ae0\u0906"+ + "\u0001\u0000\u0000\u0000\u0ae0\u090b\u0001\u0000\u0000\u0000\u0ae0\u0910"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0915\u0001\u0000\u0000\u0000\u0ae0\u091a"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0922\u0001\u0000\u0000\u0000\u0ae0\u092a"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0932\u0001\u0000\u0000\u0000\u0ae0\u0937"+ + "\u0001\u0000\u0000\u0000\u0ae0\u093e\u0001\u0000\u0000\u0000\u0ae0\u0946"+ + "\u0001\u0000\u0000\u0000\u0ae0\u094b\u0001\u0000\u0000\u0000\u0ae0\u0950"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0959\u0001\u0000\u0000\u0000\u0ae0\u0966"+ + "\u0001\u0000\u0000\u0000\u0ae0\u096e\u0001\u0000\u0000\u0000\u0ae0\u0973"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0978\u0001\u0000\u0000\u0000\u0ae0\u097f"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0984\u0001\u0000\u0000\u0000\u0ae0\u0989"+ + "\u0001\u0000\u0000\u0000\u0ae0\u098e\u0001\u0000\u0000\u0000\u0ae0\u0996"+ + "\u0001\u0000\u0000\u0000\u0ae0\u099b\u0001\u0000\u0000\u0000\u0ae0\u09a2"+ + "\u0001\u0000\u0000\u0000\u0ae0\u09a9\u0001\u0000\u0000\u0000\u0ae0\u09b0"+ + "\u0001\u0000\u0000\u0000\u0ae0\u09b7\u0001\u0000\u0000\u0000\u0ae0\u09be"+ + "\u0001\u0000\u0000\u0000\u0ae0\u09c5\u0001\u0000\u0000\u0000\u0ae0\u09ca"+ + "\u0001\u0000\u0000\u0000\u0ae0\u09cf\u0001\u0000\u0000\u0000\u0ae0\u09d6"+ + "\u0001\u0000\u0000\u0000\u0ae0\u09df\u0001\u0000\u0000\u0000\u0ae0\u09e6"+ + "\u0001\u0000\u0000\u0000\u0ae0\u09eb\u0001\u0000\u0000\u0000\u0ae0\u09f0"+ + "\u0001\u0000\u0000\u0000\u0ae0\u09f5\u0001\u0000\u0000\u0000\u0ae0\u09fa"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0a02\u0001\u0000\u0000\u0000\u0ae0\u0a0a"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0a19\u0001\u0000\u0000\u0000\u0ae0\u0a28"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0a2f\u0001\u0000\u0000\u0000\u0ae0\u0a3d"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0a48\u0001\u0000\u0000\u0000\u0ae0\u0a53"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0a5e\u0001\u0000\u0000\u0000\u0ae0\u0a63"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0a68\u0001\u0000\u0000\u0000\u0ae0\u0a73"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0a7e\u0001\u0000\u0000\u0000\u0ae0\u0a83"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0a92\u0001\u0000\u0000\u0000\u0ae0\u0a99"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0aa0\u0001\u0000\u0000\u0000\u0ae0\u0aa7"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0aae\u0001\u0000\u0000\u0000\u0ae0\u0ab5"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0abc\u0001\u0000\u0000\u0000\u0ae0\u0ac4"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0acb\u0001\u0000\u0000\u0000\u0ae0\u0ad2"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0ad6\u0001\u0000\u0000\u0000\u0ae0\u0adb"+ + "\u0001\u0000\u0000\u0000\u0ae0\u0ade\u0001\u0000\u0000\u0000\u0ae1\u0ae4"+ + "\u0001\u0000\u0000\u0000\u0ae2\u0ae0\u0001\u0000\u0000\u0000\u0ae2\u0ae3"+ + "\u0001\u0000\u0000\u0000\u0ae3\u0003\u0001\u0000\u0000\u0000\u0ae4\u0ae2"+ + "\u0001\u0000\u0000\u0000\u0ae5\u0ae7\u0005\u001d\u0000\u0000\u0ae6\u0ae5"+ + "\u0001\u0000\u0000\u0000\u0ae6\u0ae7\u0001\u0000\u0000\u0000\u0ae7\u0ae8"+ + "\u0001\u0000\u0000\u0000\u0ae8\u0ae9\u0005\u001e\u0000\u0000\u0ae9\u0005"+ + "\u0001\u0000\u0000\u0000\u0aea\u0aeb\u0007\u0005\u0000\u0000\u0aeb\u0aec"+ + "\u0005\u001a\u0000\u0000\u0aec\u0af2\u0003\u0002\u0001\u0000\u0aed\u0aee"+ + "\u0003\b\u0004\u0000\u0aee\u0aef\u0005\u001a\u0000\u0000\u0aef\u0af0\u0003"+ + "\u0002\u0001\u0000\u0af0\u0af2\u0001\u0000\u0000\u0000\u0af1\u0aea\u0001"+ + "\u0000\u0000\u0000\u0af1\u0aed\u0001\u0000\u0000\u0000\u0af2\u0007\u0001"+ + "\u0000\u0000\u0000\u0af3\u0af4\u0007\u0006\u0000\u0000\u0af4\t\u0001\u0000"+ + "\u0000\u0000\u009c\u001b\'7J^}\u0086\u008f\u009a\u00a6\u00b2\u00bf\u00c4"+ + "\u00c9\u00ce\u00d5\u00de\u00e7\u00f0\u00f9\u0102\u010b\u0114\u011d\u0126"+ + "\u012f\u0138\u016c\u0178\u0205\u021c\u0225\u0264\u0274\u0280\u02b5\u02be"+ + "\u02c9\u02d5\u02f9\u030f\u033f\u036d\u0380\u038b\u038d\u0396\u03bb\u03cb"+ + "\u03db\u03e8\u040c\u0422\u0424\u0426\u0431\u045e\u0479\u0492\u049d\u04a6"+ + "\u04b1\u04bd\u04c9\u04dc\u0504\u0510\u051b\u0527\u0533\u053f\u054b\u0557"+ + "\u0562\u056e\u057a\u0594\u05a0\u05ac\u067f\u0681\u0692\u0694\u06a5\u06a7"+ + "\u06b6\u06b8\u06c7\u06c9\u06d8\u06da\u06eb\u06ed\u06ef\u06fc\u070f\u0723"+ + "\u073b\u074a\u07d0\u07d9\u07e6\u07e8\u07f5\u07f7\u0809\u0814\u081f\u082a"+ + "\u083f\u0841\u084c\u084e\u086c\u086f\u08a1\u08aa\u08b1\u08c8\u08ce\u08d9"+ + "\u08df\u08e8\u08ec\u091f\u0927\u092f\u0943\u0962\u096b\u0993\u09a0\u09a7"+ + "\u09ae\u09b5\u09bc\u09c3\u09ff\u0a07\u0a13\u0a15\u0a22\u0a24\u0a38\u0a44"+ + "\u0a4f\u0a5a\u0a6f\u0a7a\u0a8c\u0a8f\u0ac1\u0ae0\u0ae2\u0ae6\u0af1"; public static final String _serializedATN = Utils.join( new String[] { _serializedATNSegment0, diff --git a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java index d107918d4..c3c45f7d1 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java +++ b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java @@ -1,5 +1,4 @@ // Generated from math.g4 by ANTLR 4.13.2 -package toolgood.algorithm.math; import org.antlr.v4.runtime.tree.ParseTreeVisitor; /** @@ -31,12 +30,12 @@ public interface mathVisitor extends ParseTreeVisitor { */ T visitFACT_fun(mathParser.FACT_funContext ctx); /** - * Visit a parse tree produced by the {@code REGEXREPALCE_fun} + * Visit a parse tree produced by the {@code NPV_fun} * labeled alternative in {@link mathParser#expr}. * @param ctx the parse tree * @return the visitor result */ - T visitREGEXREPALCE_fun(mathParser.REGEXREPALCE_funContext ctx); + T visitNPV_fun(mathParser.NPV_funContext ctx); /** * Visit a parse tree produced by the {@code LOOKFLOOR_fun} * labeled alternative in {@link mathParser#expr}. @@ -86,6 +85,20 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitRIGHT_fun(mathParser.RIGHT_funContext ctx); + /** + * Visit a parse tree produced by the {@code BESSELI_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBESSELI_fun(mathParser.BESSELI_funContext ctx); + /** + * Visit a parse tree produced by the {@code CSCH_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCSCH_fun(mathParser.CSCH_funContext ctx); /** * Visit a parse tree produced by the {@code OCT2BIN_fun} * labeled alternative in {@link mathParser#expr}. @@ -100,6 +113,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitQUARTILE_fun(mathParser.QUARTILE_funContext ctx); + /** + * Visit a parse tree produced by the {@code UNICODE_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUNICODE_fun(mathParser.UNICODE_funContext ctx); /** * Visit a parse tree produced by the {@code FINV_fun} * labeled alternative in {@link mathParser#expr}. @@ -107,6 +127,20 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitFINV_fun(mathParser.FINV_funContext ctx); + /** + * Visit a parse tree produced by the {@code SEC_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSEC_fun(mathParser.SEC_funContext ctx); + /** + * Visit a parse tree produced by the {@code SYD_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSYD_fun(mathParser.SYD_funContext ctx); /** * Visit a parse tree produced by the {@code NOT_fun} * labeled alternative in {@link mathParser#expr}. @@ -121,6 +155,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitDAYS360_fun(mathParser.DAYS360_funContext ctx); + /** + * Visit a parse tree produced by the {@code ACOTH_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitACOTH_fun(mathParser.ACOTH_funContext ctx); /** * Visit a parse tree produced by the {@code LOOKCEILING_fun} * labeled alternative in {@link mathParser#expr}. @@ -163,6 +204,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitPERCENTILE_fun(mathParser.PERCENTILE_funContext ctx); + /** + * Visit a parse tree produced by the {@code RATE_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRATE_fun(mathParser.RATE_funContext ctx); /** * Visit a parse tree produced by the {@code DiyFunction_fun} * labeled alternative in {@link mathParser#expr}. @@ -219,6 +267,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitDEC2HEX_fun(mathParser.DEC2HEX_funContext ctx); + /** + * Visit a parse tree produced by the {@code SLOPE_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSLOPE_fun(mathParser.SLOPE_funContext ctx); /** * Visit a parse tree produced by the {@code CLEAN_fun} * labeled alternative in {@link mathParser#expr}. @@ -275,6 +330,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitLOGINV_fun(mathParser.LOGINV_funContext ctx); + /** + * Visit a parse tree produced by the {@code PPMT_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPPMT_fun(mathParser.PPMT_funContext ctx); /** * Visit a parse tree produced by the {@code WORKDAY_fun} * labeled alternative in {@link mathParser#expr}. @@ -310,6 +372,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitLCM_fun(mathParser.LCM_funContext ctx); + /** + * Visit a parse tree produced by the {@code BESSELJ_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBESSELJ_fun(mathParser.BESSELJ_funContext ctx); /** * Visit a parse tree produced by the {@code HARMEAN_fun} * labeled alternative in {@link mathParser#expr}. @@ -380,6 +449,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitINT_fun(mathParser.INT_funContext ctx); + /** + * Visit a parse tree produced by the {@code DDB_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDDB_fun(mathParser.DDB_funContext ctx); /** * Visit a parse tree produced by the {@code SUMIF_fun} * labeled alternative in {@link mathParser#expr}. @@ -457,6 +533,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitLOG10_fun(mathParser.LOG10_funContext ctx); + /** + * Visit a parse tree produced by the {@code XIRR_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitXIRR_fun(mathParser.XIRR_funContext ctx); /** * Visit a parse tree produced by the {@code ISTEXT_fun} * labeled alternative in {@link mathParser#expr}. @@ -506,6 +589,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitGUID_fun(mathParser.GUID_funContext ctx); + /** + * Visit a parse tree produced by the {@code PV_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPV_fun(mathParser.PV_funContext ctx); /** * Visit a parse tree produced by the {@code JSON_fun} * labeled alternative in {@link mathParser#expr}. @@ -618,6 +708,27 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitCOSH_fun(mathParser.COSH_funContext ctx); + /** + * Visit a parse tree produced by the {@code CORREL_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCORREL_fun(mathParser.CORREL_funContext ctx); + /** + * Visit a parse tree produced by the {@code GESTEP_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitGESTEP_fun(mathParser.GESTEP_funContext ctx); + /** + * Visit a parse tree produced by the {@code XNPV_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitXNPV_fun(mathParser.XNPV_funContext ctx); /** * Visit a parse tree produced by the {@code QUOTIENT_fun} * labeled alternative in {@link mathParser#expr}. @@ -625,6 +736,20 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitQUOTIENT_fun(mathParser.QUOTIENT_funContext ctx); + /** + * Visit a parse tree produced by the {@code FORECAST_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFORECAST_fun(mathParser.FORECAST_funContext ctx); + /** + * Visit a parse tree produced by the {@code BESSELY_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBESSELY_fun(mathParser.BESSELY_funContext ctx); /** * Visit a parse tree produced by the {@code OCT2DEC_fun} * labeled alternative in {@link mathParser#expr}. @@ -639,6 +764,20 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitSEARCH_fun(mathParser.SEARCH_funContext ctx); + /** + * Visit a parse tree produced by the {@code IRR_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIRR_fun(mathParser.IRR_funContext ctx); + /** + * Visit a parse tree produced by the {@code ACOT_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitACOT_fun(mathParser.ACOT_funContext ctx); /** * Visit a parse tree produced by the {@code ROUNDUP_fun} * labeled alternative in {@link mathParser#expr}. @@ -660,6 +799,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitCODE_fun(mathParser.CODE_funContext ctx); + /** + * Visit a parse tree produced by the {@code CSC_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCSC_fun(mathParser.CSC_funContext ctx); /** * Visit a parse tree produced by the {@code ASINH_fun} * labeled alternative in {@link mathParser#expr}. @@ -667,6 +813,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitASINH_fun(mathParser.ASINH_funContext ctx); + /** + * Visit a parse tree produced by the {@code COTH_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCOTH_fun(mathParser.COTH_funContext ctx); /** * Visit a parse tree produced by the {@code SIN_fun} * labeled alternative in {@link mathParser#expr}. @@ -793,6 +946,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitPARAMETER_fun(mathParser.PARAMETER_funContext ctx); + /** + * Visit a parse tree produced by the {@code BESSELK_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitBESSELK_fun(mathParser.BESSELK_funContext ctx); /** * Visit a parse tree produced by the {@code SPLIT_fun} * labeled alternative in {@link mathParser#expr}. @@ -800,6 +960,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitSPLIT_fun(mathParser.SPLIT_funContext ctx); + /** + * Visit a parse tree produced by the {@code REGEXREPLACE_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitREGEXREPLACE_fun(mathParser.REGEXREPLACE_funContext ctx); /** * Visit a parse tree produced by the {@code COVAR_fun} * labeled alternative in {@link mathParser#expr}. @@ -821,6 +988,20 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitLARGE_fun(mathParser.LARGE_funContext ctx); + /** + * Visit a parse tree produced by the {@code SUMXMY2_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSUMXMY2_fun(mathParser.SUMXMY2_funContext ctx); + /** + * Visit a parse tree produced by the {@code SERIESSUM_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSERIESSUM_fun(mathParser.SERIESSUM_funContext ctx); /** * Visit a parse tree produced by the {@code TIMESTAMP_fun} * labeled alternative in {@link mathParser#expr}. @@ -828,6 +1009,34 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitTIMESTAMP_fun(mathParser.TIMESTAMP_funContext ctx); + /** + * Visit a parse tree produced by the {@code RANK_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitRANK_fun(mathParser.RANK_funContext ctx); + /** + * Visit a parse tree produced by the {@code PMT_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPMT_fun(mathParser.PMT_funContext ctx); + /** + * Visit a parse tree produced by the {@code ROMAN_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitROMAN_fun(mathParser.ROMAN_funContext ctx); + /** + * Visit a parse tree produced by the {@code DELTA_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDELTA_fun(mathParser.DELTA_funContext ctx); /** * Visit a parse tree produced by the {@code VALUE_fun} * labeled alternative in {@link mathParser#expr}. @@ -849,6 +1058,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitWEIBULL_fun(mathParser.WEIBULL_funContext ctx); + /** + * Visit a parse tree produced by the {@code PEARSON_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitPEARSON_fun(mathParser.PEARSON_funContext ctx); /** * Visit a parse tree produced by the {@code HMACSHA256_fun} * labeled alternative in {@link mathParser#expr}. @@ -877,6 +1093,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitDEVSQ_fun(mathParser.DEVSQ_funContext ctx); + /** + * Visit a parse tree produced by the {@code ERFC_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitERFC_fun(mathParser.ERFC_funContext ctx); /** * Visit a parse tree produced by the {@code MODE_fun} * labeled alternative in {@link mathParser#expr}. @@ -975,6 +1198,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitSMALL_fun(mathParser.SMALL_funContext ctx); + /** + * Visit a parse tree produced by the {@code IFS_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIFS_fun(mathParser.IFS_funContext ctx); /** * Visit a parse tree produced by the {@code ODD_fun} * labeled alternative in {@link mathParser#expr}. @@ -989,6 +1219,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitTEXTTOBASE64_fun(mathParser.TEXTTOBASE64_funContext ctx); + /** + * Visit a parse tree produced by the {@code SUMPRODUCT_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSUMPRODUCT_fun(mathParser.SUMPRODUCT_funContext ctx); /** * Visit a parse tree produced by the {@code MID_fun} * labeled alternative in {@link mathParser#expr}. @@ -1087,6 +1324,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitISODD_fun(mathParser.ISODD_funContext ctx); + /** + * Visit a parse tree produced by the {@code MIRR_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitMIRR_fun(mathParser.MIRR_funContext ctx); /** * Visit a parse tree produced by the {@code ASC_fun} * labeled alternative in {@link mathParser#expr}. @@ -1164,6 +1408,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitSECOND_fun(mathParser.SECOND_funContext ctx); + /** + * Visit a parse tree produced by the {@code DAYS_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDAYS_fun(mathParser.DAYS_funContext ctx); /** * Visit a parse tree produced by the {@code GAMMADIST_fun} * labeled alternative in {@link mathParser#expr}. @@ -1199,6 +1450,20 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitATAN_fun(mathParser.ATAN_funContext ctx); + /** + * Visit a parse tree produced by the {@code ERF_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitERF_fun(mathParser.ERF_funContext ctx); + /** + * Visit a parse tree produced by the {@code SUMX2PY2_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSUMX2PY2_fun(mathParser.SUMX2PY2_funContext ctx); /** * Visit a parse tree produced by the {@code E_fun} * labeled alternative in {@link mathParser#expr}. @@ -1290,6 +1555,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitNORMDIST_fun(mathParser.NORMDIST_funContext ctx); + /** + * Visit a parse tree produced by the {@code IPMT_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitIPMT_fun(mathParser.IPMT_funContext ctx); /** * Visit a parse tree produced by the {@code HMACSHA1_fun} * labeled alternative in {@link mathParser#expr}. @@ -1311,6 +1583,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitBracket_fun(mathParser.Bracket_funContext ctx); + /** + * Visit a parse tree produced by the {@code SLN_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSLN_fun(mathParser.SLN_funContext ctx); /** * Visit a parse tree produced by the {@code BETADIST_fun} * labeled alternative in {@link mathParser#expr}. @@ -1416,6 +1695,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitADDDAYS_fun(mathParser.ADDDAYS_funContext ctx); + /** + * Visit a parse tree produced by the {@code SWITCH_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSWITCH_fun(mathParser.SWITCH_funContext ctx); /** * Visit a parse tree produced by the {@code ISNONTEXT_fun} * labeled alternative in {@link mathParser#expr}. @@ -1486,6 +1772,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitISNULL_fun(mathParser.ISNULL_funContext ctx); + /** + * Visit a parse tree produced by the {@code FV_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFV_fun(mathParser.FV_funContext ctx); /** * Visit a parse tree produced by the {@code ASIN_fun} * labeled alternative in {@link mathParser#expr}. @@ -1493,6 +1786,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitASIN_fun(mathParser.ASIN_funContext ctx); + /** + * Visit a parse tree produced by the {@code SUMX2MY2_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSUMX2MY2_fun(mathParser.SUMX2MY2_funContext ctx); /** * Visit a parse tree produced by the {@code MulDiv_fun} * labeled alternative in {@link mathParser#expr}. @@ -1500,6 +1800,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitMulDiv_fun(mathParser.MulDiv_funContext ctx); + /** + * Visit a parse tree produced by the {@code NPER_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNPER_fun(mathParser.NPER_funContext ctx); /** * Visit a parse tree produced by the {@code REMOVESTART_fun} * labeled alternative in {@link mathParser#expr}. @@ -1507,6 +1814,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitREMOVESTART_fun(mathParser.REMOVESTART_funContext ctx); + /** + * Visit a parse tree produced by the {@code XOR_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitXOR_fun(mathParser.XOR_funContext ctx); /** * Visit a parse tree produced by the {@code T_fun} * labeled alternative in {@link mathParser#expr}. @@ -1577,6 +1891,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitLOGNORMDIST_fun(mathParser.LOGNORMDIST_funContext ctx); + /** + * Visit a parse tree produced by the {@code DB_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDB_fun(mathParser.DB_funContext ctx); /** * Visit a parse tree produced by the {@code ISNULLOREMPTY_fun} * labeled alternative in {@link mathParser#expr}. @@ -1591,6 +1912,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitTRUE_fun(mathParser.TRUE_funContext ctx); + /** + * Visit a parse tree produced by the {@code INTERCEPT_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitINTERCEPT_fun(mathParser.INTERCEPT_funContext ctx); /** * Visit a parse tree produced by the {@code FISHERINV_fun} * labeled alternative in {@link mathParser#expr}. @@ -1612,6 +1940,13 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitTIME_fun(mathParser.TIME_funContext ctx); + /** + * Visit a parse tree produced by the {@code ARABIC_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitARABIC_fun(mathParser.ARABIC_funContext ctx); /** * Visit a parse tree produced by the {@code ATAN2_fun} * labeled alternative in {@link mathParser#expr}. @@ -1619,6 +1954,27 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitATAN2_fun(mathParser.ATAN2_funContext ctx); + /** + * Visit a parse tree produced by the {@code SECH_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSECH_fun(mathParser.SECH_funContext ctx); + /** + * Visit a parse tree produced by the {@code COT_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitCOT_fun(mathParser.COT_funContext ctx); + /** + * Visit a parse tree produced by the {@code UNICHAR_fun} + * labeled alternative in {@link mathParser#expr}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUNICHAR_fun(mathParser.UNICHAR_funContext ctx); /** * Visit a parse tree produced by the {@code ADDHOURS_fun} * labeled alternative in {@link mathParser#expr}. @@ -1634,24 +1990,25 @@ public interface mathVisitor extends ParseTreeVisitor { */ T visitVersion_fun(mathParser.Version_funContext ctx); /** - * Visit a parse tree produced by the {@code RAND_fun} + * Visit a parse tree produced by the {@code YEARFRAC_fun} * labeled alternative in {@link mathParser#expr}. * @param ctx the parse tree * @return the visitor result */ - T visitRAND_fun(mathParser.RAND_funContext ctx); + T visitYEARFRAC_fun(mathParser.YEARFRAC_funContext ctx); /** - * Visit a parse tree produced by {@link mathParser#num}. + * Visit a parse tree produced by the {@code RAND_fun} + * labeled alternative in {@link mathParser#expr}. * @param ctx the parse tree * @return the visitor result */ - T visitNum(mathParser.NumContext ctx); + T visitRAND_fun(mathParser.RAND_funContext ctx); /** - * Visit a parse tree produced by {@link mathParser#unit}. + * Visit a parse tree produced by {@link mathParser#num}. * @param ctx the parse tree * @return the visitor result */ - T visitUnit(mathParser.UnitContext ctx); + T visitNum(mathParser.NumContext ctx); /** * Visit a parse tree produced by {@link mathParser#arrayJson}. * @param ctx the parse tree From 857b2218a619b253a0d7ce5e423f783e01f284b5 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 12:50:07 +0800 Subject: [PATCH 32/98] fix --- .../toolgood/algorithm/AlgorithmEngineEx.java | 253 +++++++++++++ .../algorithm/AlgorithmEngineHelper.java | 347 ++++++++++++++++++ .../internals/functions/FunctionUtil.java | 101 +++++ .../functions/datetimes/Function_DAYS.java | 46 +++ .../datetimes/Function_YEARFRAC.java | 133 +++++++ .../functions/financial/Function_DB.java | 89 +++++ .../functions/financial/Function_DDB.java | 76 ++++ .../functions/financial/Function_FV.java | 67 ++++ .../functions/financial/Function_IPMT.java | 80 ++++ .../functions/financial/Function_IRR.java | 85 +++++ .../functions/financial/Function_MIRR.java | 64 ++++ .../functions/financial/Function_NPER.java | 64 ++++ .../functions/financial/Function_NPV.java | 41 +++ .../functions/financial/Function_PMT.java | 66 ++++ .../functions/financial/Function_PPMT.java | 78 ++++ .../functions/financial/Function_PV.java | 67 ++++ .../functions/financial/Function_RATE.java | 96 +++++ .../functions/financial/Function_SLN.java | 42 +++ .../functions/financial/Function_SYD.java | 49 +++ .../functions/financial/Function_XIRR.java | 92 +++++ .../functions/financial/Function_XNPV.java | 68 ++++ .../functions/flow/Function_IFS.java | 67 ++++ .../functions/flow/Function_SWITCH.java | 92 +++++ .../functions/mathbase/Function_ARABIC.java | 81 ++++ .../functions/mathbase/Function_DELTA.java | 73 ++++ .../functions/mathbase/Function_GESTEP.java | 73 ++++ .../functions/mathbase/Function_LOG10.java | 31 ++ .../mathbase/Function_Percentage.java | 37 +- .../functions/mathbase/Function_ROMAN.java | 94 +++++ .../functions/mathsum/Function_CORREL.java | 86 +++++ .../functions/mathsum/Function_FORECAST.java | 89 +++++ .../functions/mathsum/Function_INTERCEPT.java | 83 +++++ .../functions/mathsum/Function_PEARSON.java | 86 +++++ .../functions/mathsum/Function_RANK.java | 75 ++++ .../functions/mathsum/Function_SERIESSUM.java | 71 ++++ .../functions/mathsum/Function_SLOPE.java | 79 ++++ .../mathsum/Function_SUMPRODUCT.java | 75 ++++ .../functions/mathsum/Function_SUMX2MY2.java | 66 ++++ .../functions/mathsum/Function_SUMX2PY2.java | 66 ++++ .../functions/mathsum/Function_SUMXMY2.java | 65 ++++ .../functions/mathsum2/Function_BESSELI.java | 193 ++++++++++ .../functions/mathsum2/Function_BESSELJ.java | 133 +++++++ .../functions/mathsum2/Function_BESSELK.java | 124 +++++++ .../functions/mathsum2/Function_BESSELY.java | 154 ++++++++ .../functions/mathsum2/Function_ERF.java | 62 ++++ .../functions/mathsum2/Function_ERFC.java | 65 ++++ .../mathtrigonometric/Function_ACOT.java | 33 ++ .../mathtrigonometric/Function_ACOTH.java | 36 ++ .../mathtrigonometric/Function_COTH.java | 37 ++ .../mathtrigonometric/Function_CSCH.java | 37 ++ .../mathtrigonometric/Function_SECH.java | 37 ++ .../functions/string/Function_UNICHAR.java | 35 ++ .../functions/string/Function_UNICODE.java | 31 ++ .../visitors/MathFunctionVisitor.java | 298 ++++++++++++++- 54 files changed, 4662 insertions(+), 6 deletions(-) create mode 100644 java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java create mode 100644 java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DB.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IRR.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_MIRR.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPER.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PMT.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG10.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_CORREL.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FORECAST.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_INTERCEPT.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PEARSON.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_RANK.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SERIESSUM.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SLOPE.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMPRODUCT.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2MY2.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2PY2.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMXMY2.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOT.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOTH.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COTH.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSCH.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SECH.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICHAR.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICODE.java diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java new file mode 100644 index 000000000..98e616e9f --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java @@ -0,0 +1,253 @@ +package toolgood.algorithm; + +import java.math.BigDecimal; +import java.util.Collection; +import java.util.List; +import java.util.concurrent.ConcurrentHashMap; + +import toolgood.algorithm.internals.MyDate; + +/** + * AlgorithmEngine 扩展类 + * 增加自定义参数缓存功能 + */ +public class AlgorithmEngineEx extends AlgorithmEngine { + + private final ConcurrentHashMap _tempdict; + + /** + * 是否忽略大小写 + */ + public final boolean IgnoreCase; + + /** + * 保存到临时文档 + */ + public boolean UseTempDict = false; + + // ------------------------------------------------------------------------- + // 构造函数 + // ------------------------------------------------------------------------- + + /** + * 默认不带缓存(区分大小写) + */ + public AlgorithmEngineEx() { + IgnoreCase = false; + _tempdict = new ConcurrentHashMap<>(); + } + + /** + * 带缓存关键字大小写参数 + * + * @param ignoreCase 是否忽略大小写 + */ + public AlgorithmEngineEx(boolean ignoreCase) { + IgnoreCase = ignoreCase; + // Java 的 ConcurrentHashMap 本身不支持自定义 key 比较器, + // 忽略大小写时需在 put/get 时统一转小写。 + _tempdict = new ConcurrentHashMap<>(); + } + + // ------------------------------------------------------------------------- + // 内部 key 规范化 + // ------------------------------------------------------------------------- + + private String normalizeKey(String key) { + return IgnoreCase ? key.toLowerCase() : key; + } + + // ------------------------------------------------------------------------- + // getParameter 重写 + // ------------------------------------------------------------------------- + + /** + * AlgorithmEngineEx 请重写 getParameterEx + */ + @Override + public Operand getParameter(String parameter) { + String key = normalizeKey(parameter); + Operand operand = _tempdict.get(key); + if (operand != null) { + return operand; + } + Operand result = getParameterEx(parameter); + if (UseTempDict) { + _tempdict.putIfAbsent(key, result); + } + return result; + } + + /** + * 获取参数扩展方法,子类可重写 + */ + public Operand getParameterEx(String parameter) { + return Operand.Error("Parameter [" + parameter + "] is missing."); + } + + // ------------------------------------------------------------------------- + // Parameter 管理 + // ------------------------------------------------------------------------- + + /** + * 清理所有参数 + */ + public void ClearParameters() { + _tempdict.clear(); + } + + /** + * 添加自定义参数 + */ + public void AddParameter(String key, Operand obj) { + _tempdict.put(normalizeKey(key), obj); + } + + /** + * 添加自定义参数(boolean) + */ + public void AddParameter(String key, boolean obj) { + _tempdict.put(normalizeKey(key), Operand.Create(obj)); + } + + // ------ number ------ + + /** + * 添加自定义参数(short) + */ + public void AddParameter(String key, short obj) { + _tempdict.put(normalizeKey(key), Operand.Create((int) obj)); + } + + /** + * 添加自定义参数(int) + */ + public void AddParameter(String key, int obj) { + _tempdict.put(normalizeKey(key), Operand.Create(obj)); + } + + /** + * 添加自定义参数(long) + */ + public void AddParameter(String key, long obj) { + _tempdict.put(normalizeKey(key), Operand.Create(obj)); + } + + /** + * 添加自定义参数(float) + */ + public void AddParameter(String key, float obj) { + _tempdict.put(normalizeKey(key), Operand.Create((double) obj)); + } + + /** + * 添加自定义参数(double) + */ + public void AddParameter(String key, double obj) { + _tempdict.put(normalizeKey(key), Operand.Create(obj)); + } + + /** + * 添加自定义参数(BigDecimal,对应 C# decimal) + */ + public void AddParameter(String key, BigDecimal obj) { + _tempdict.put(normalizeKey(key), Operand.Create(obj)); + } + + // ------ string ------ + + /** + * 添加自定义参数(String) + */ + public void AddParameter(String key, String obj) { + _tempdict.put(normalizeKey(key), Operand.Create(obj)); + } + + // ------ MyDate / date ------ + + /** + * 添加自定义参数(MyDate) + */ + public void AddParameter(String key, MyDate obj) { + _tempdict.put(normalizeKey(key), Operand.Create(obj)); + } + + // ------ array ------ + + /** + * 添加自定义参数(List<Operand>) + */ + public void AddParameter(String key, List obj) { + _tempdict.put(normalizeKey(key), Operand.Create(obj)); + } + + /** + * 添加自定义参数(Collection<String>) + */ + public void AddParameter(String key, Collection obj) { + _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new String[0]))); + } + + /** + * 添加自定义参数(Collection<Double>) + */ + public void AddParameterDoubles(String key, Collection obj) { + _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Double[0]))); + } + + /** + * 添加自定义参数(Collection<Integer>) + */ + public void AddParameterIntegers(String key, Collection obj) { + _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Integer[0]))); + } + + /** + * 添加自定义参数(Collection<Boolean>) + */ + public void AddParameterBooleans(String key, Collection obj) { + _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Boolean[0]))); + } + + // ------------------------------------------------------------------------- + // AddParameterFromJson + // ------------------------------------------------------------------------- + + /** + * 从 JSON 字符串批量添加参数。 + * JSON 必须是 {...} 对象格式。 + * + * @param json JSON 字符串 + * @throws Exception 若不是合法 JSON 对象 + */ + public void AddParameterFromJson(String json) throws Exception { + if (json == null) { + throw new Exception("Parameter is not json string."); + } + String trimmed = json.trim(); + if (trimmed.startsWith("{") && trimmed.endsWith("}")) { + // 使用项目内置的 LitJson 解析 + toolgood.algorithm.litJson.JsonData jo = toolgood.algorithm.litJson.JsonMapper.ToObject(trimmed); + if (jo.IsObject()) { + for (java.util.Map.Entry item : jo.inst_object.entrySet()) { + toolgood.algorithm.litJson.JsonData v = item.getValue(); + Operand operand; + if (v.IsString()) { + operand = Operand.Create(v.StringValue()); + } else if (v.IsBoolean()) { + operand = Operand.Create(v.BooleanValue()); + } else if (v.IsDouble()) { + operand = Operand.Create(v.NumberValue()); + } else if (v.IsNull()) { + operand = Operand.NULL_OPERAND; + } else { + operand = Operand.Create(v); + } + _tempdict.put(normalizeKey(item.getKey()), operand); + } + return; + } + } + throw new Exception("Parameter is not json string."); + } +} diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java new file mode 100644 index 000000000..7232c9d4b --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java @@ -0,0 +1,347 @@ +package toolgood.algorithm; + +import java.math.BigDecimal; +import java.util.regex.Pattern; + +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CommonTokenStream; + +import toolgood.algorithm.enums.CalculateTreeType; +import toolgood.algorithm.enums.ConditionTreeType; +import toolgood.algorithm.internals.CalculateTree; +import toolgood.algorithm.internals.ConditionTree; +import toolgood.algorithm.internals.DiyNameInfo; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.operator.Function_AND; +import toolgood.algorithm.internals.functions.operator.Function_OR; +import toolgood.algorithm.internals.functions.operator.Function_Add; +import toolgood.algorithm.internals.functions.operator.Function_Sub; +import toolgood.algorithm.internals.functions.operator.Function_Mul; +import toolgood.algorithm.internals.functions.operator.Function_Div; +import toolgood.algorithm.internals.functions.operator.Function_Mod; +import toolgood.algorithm.internals.functions.operator.Function_Connect; +import toolgood.algorithm.internals.visitors.AntlrErrorTextWriter; +import toolgood.algorithm.internals.visitors.DiyNameVisitor; +import toolgood.algorithm.internals.visitors.MathFunctionVisitor; +import toolgood.algorithm.internals.visitors.MathSplitVisitor; +import toolgood.algorithm.internals.visitors.MathSplitVisitor2; +import toolgood.algorithm.math.mathLexer; +import toolgood.algorithm.math.mathParser; +import toolgood.algorithm.unitConversion.AreaConverter; +import toolgood.algorithm.unitConversion.DistanceConverter; +import toolgood.algorithm.unitConversion.MassConverter; +import toolgood.algorithm.unitConversion.VolumeConverter; + +/** + * 算法引擎助手(静态工具类) + */ +public final class AlgorithmEngineHelper { + + private static final Pattern UNIT_REGEX = Pattern.compile("[\\s\\(\\)()\\[\\]<>]"); + + /** 工具类,不可实例化 */ + private AlgorithmEngineHelper() { + } + + // ------------------------------------------------------------------------- + // 内部:创建解析上下文 + // ------------------------------------------------------------------------- + + /** + * 创建 ANTLR 解析上下文 + * + * @param exp 表达式字符串 + * @return [0] AntlrErrorTextWriter,[1] mathParser.ProgContext + */ + static Object[] createParserContext(String exp) { + AntlrErrorTextWriter errorWriter = new AntlrErrorTextWriter(); + org.antlr.v4.runtime.CharStream stream = CharStreams.fromString(exp); + mathLexer lexer = new mathLexer(stream); + CommonTokenStream tokens = new CommonTokenStream(lexer); + mathParser parser = new mathParser(tokens); + mathParser.ProgContext context = parser.prog(); + return new Object[]{errorWriter, context}; + } + + // ------------------------------------------------------------------------- + // 公共 API + // ------------------------------------------------------------------------- + + /** + * 判断字符串是否是合法单参数名(既不包含函数调用,又只包含一个参数且与原字符串相同) + * + * @param parameter 待检测字符串 + * @return 是否是参数 + */ + public static boolean IsParameter(String parameter) { + if (parameter == null || parameter.trim().isEmpty()) { + return false; + } + try { + DiyNameInfo diy = GetDiyNames(parameter); + if (!diy.Functions.isEmpty()) { + return false; + } + if (diy.Parameters.size() == 1) { + DiyNameInfo.KeyInfo p = diy.Parameters.get(0); + return parameter.equals(p.Name); + } + } catch (Exception ignored) { + } + return false; + } + + /** + * 获取表达式中使用到的 DIY 名称(参数名和函数名) + * + * @param exp 表达式字符串 + * @return DiyNameInfo + * @throws Exception 解析失败时抛出 + */ + public static DiyNameInfo GetDiyNames(String exp) throws Exception { + if (exp == null || exp.trim().isEmpty()) { + throw new Exception("Parameter exp invalid !"); + } + Object[] result = createParserContext(exp); + AntlrErrorTextWriter errorWriter = (AntlrErrorTextWriter) result[0]; + if (errorWriter.IsError()) { + throw new Exception(errorWriter.ErrorMsg()); + } + mathParser.ProgContext context = (mathParser.ProgContext) result[1]; + DiyNameVisitor visitor = new DiyNameVisitor(); + visitor.visit(context); + return visitor.diy; + } + + /** + * 单位转换 + * + * @param src 原始数值 + * @param oldSrcUnit 源单位 + * @param oldTarUnit 目标单位 + * @return 转换后的 BigDecimal + * @throws Exception 单位不兼容时抛出 + */ + public static BigDecimal UnitConversion(BigDecimal src, String oldSrcUnit, String oldTarUnit) throws Exception { + return UnitConversion(src, oldSrcUnit, oldTarUnit, null); + } + + /** + * 单位转换(带名称提示) + * + * @param src 原始数值 + * @param oldSrcUnit 源单位 + * @param oldTarUnit 目标单位 + * @param name 输入项名称(用于错误信息,可为 null) + * @return 转换后的 BigDecimal + * @throws Exception 单位不兼容时抛出 + */ + public static BigDecimal UnitConversion(BigDecimal src, String oldSrcUnit, String oldTarUnit, String name) throws Exception { + if (oldSrcUnit == null || oldSrcUnit.trim().isEmpty() + || oldTarUnit == null || oldTarUnit.trim().isEmpty()) { + return src; + } + if (oldSrcUnit.equals(oldTarUnit)) { + return src; + } + + BigDecimal result = tryConvert(src, oldSrcUnit, oldTarUnit); + if (result != null) { + return result; + } + + String cleanedSrcUnit = UNIT_REGEX.matcher(oldSrcUnit).replaceAll(""); + result = tryConvert(src, cleanedSrcUnit, oldTarUnit); + if (result != null) { + return result; + } + + if (name == null || name.isEmpty()) { + throw new Exception( + "The input item has different units and cannot be converted from [" + oldSrcUnit + "] to [" + oldTarUnit + "]"); + } + throw new Exception( + "The input item [" + name + "] has different units and cannot be converted from [" + oldSrcUnit + "] to [" + oldTarUnit + "]"); + } + + private static BigDecimal tryConvert(BigDecimal src, String srcUnit, String tarUnit) { + try { + if (DistanceConverter.Exists(srcUnit, tarUnit)) { + return new DistanceConverter(srcUnit, tarUnit).LeftToRight(src); + } + if (MassConverter.Exists(srcUnit, tarUnit)) { + return new MassConverter(srcUnit, tarUnit).LeftToRight(src); + } + if (AreaConverter.Exists(srcUnit, tarUnit)) { + return new AreaConverter(srcUnit, tarUnit).LeftToRight(src); + } + if (VolumeConverter.Exists(srcUnit, tarUnit)) { + return new VolumeConverter(srcUnit, tarUnit).LeftToRight(src); + } + } catch (Exception ignored) { + } + return null; + } + + /** + * 编译公式,返回可执行的 FunctionBase + * + * @param exp 公式字符串 + * @return 编译后的 FunctionBase + * @throws Exception 解析失败时抛出 + */ + public static FunctionBase ParseFormula(String exp) throws Exception { + if (exp == null || exp.trim().isEmpty()) { + throw new Exception("Parameter exp invalid !"); + } + Object[] result = createParserContext(exp); + AntlrErrorTextWriter errorWriter = (AntlrErrorTextWriter) result[0]; + if (errorWriter.IsError()) { + throw new Exception(errorWriter.ErrorMsg()); + } + mathParser.ProgContext context = (mathParser.ProgContext) result[1]; + MathFunctionVisitor visitor = new MathFunctionVisitor(); + return visitor.visit(context); + } + + /** + * 检查公式语法是否正确 + * + * @param exp 公式字符串 + * @return 是否正确 + */ + public static boolean CheckFormula(String exp) { + if (exp == null || exp.trim().isEmpty()) { + return false; + } + Object[] result = createParserContext(exp); + AntlrErrorTextWriter errorWriter = (AntlrErrorTextWriter) result[0]; + return !errorWriter.IsError(); + } + + /** + * 解析条件表达式,生成 ConditionTree + * + * @param condition 条件字符串 + * @return ConditionTree + */ + public static ConditionTree ParseCondition(String condition) { + ConditionTree tree = new ConditionTree(); + if (condition == null || condition.trim().isEmpty()) { + tree.Type = ConditionTreeType.Error; + tree.ErrorMessage = "condition is null"; + return tree; + } + try { + Object[] result = createParserContext(condition); + AntlrErrorTextWriter errorWriter = (AntlrErrorTextWriter) result[0]; + if (errorWriter.IsError()) { + tree.Type = ConditionTreeType.Error; + tree.ErrorMessage = errorWriter.ErrorMsg(); + return tree; + } + mathParser.ProgContext context = (mathParser.ProgContext) result[1]; + MathSplitVisitor visitor = new MathSplitVisitor(); + return visitor.visit(context); + } catch (Exception ex) { + tree.Type = ConditionTreeType.Error; + tree.ErrorMessage = ex.getMessage(); + } + return tree; + } + + /** + * 创建 AND 逻辑函数(左 AND 右) + * + * @param left 左操作数函数 + * @param right 右操作数函数 + * @return AND 函数 + */ + public static FunctionBase Condition_And(FunctionBase left, FunctionBase right) { + return new Function_AND(left, right); + } + + /** + * 创建 OR 逻辑函数(左 OR 右) + * + * @param left 左操作数函数 + * @param right 右操作数函数 + * @return OR 函数 + */ + public static FunctionBase Condition_Or(FunctionBase left, FunctionBase right) { + return new Function_OR(left, right); + } + + /** + * 解析计算表达式,生成 CalculateTree + * + * @param exp 表达式字符串 + * @return CalculateTree + */ + public static CalculateTree ParseCalculate(String exp) { + CalculateTree tree = new CalculateTree(); + if (exp == null || exp.trim().isEmpty()) { + tree.Type = CalculateTreeType.Error; + tree.ErrorMessage = "exp is null"; + return tree; + } + try { + Object[] result = createParserContext(exp); + AntlrErrorTextWriter errorWriter = (AntlrErrorTextWriter) result[0]; + if (errorWriter.IsError()) { + tree.Type = CalculateTreeType.Error; + tree.ErrorMessage = errorWriter.ErrorMsg(); + return tree; + } + mathParser.ProgContext context = (mathParser.ProgContext) result[1]; + MathSplitVisitor2 visitor = new MathSplitVisitor2(); + return visitor.visit(context); + } catch (Exception ex) { + tree.Type = CalculateTreeType.Error; + tree.ErrorMessage = ex.getMessage(); + } + return tree; + } + + /** + * 创建加法运算函数 + */ + public static FunctionBase Calculate_Add(FunctionBase left, FunctionBase right) { + return new Function_Add(left, right); + } + + /** + * 创建减法运算函数 + */ + public static FunctionBase Calculate_Subtract(FunctionBase left, FunctionBase right) { + return new Function_Sub(left, right); + } + + /** + * 创建乘法运算函数 + */ + public static FunctionBase Calculate_Multiply(FunctionBase left, FunctionBase right) { + return new Function_Mul(left, right); + } + + /** + * 创建除法运算函数 + */ + public static FunctionBase Calculate_Divide(FunctionBase left, FunctionBase right) { + return new Function_Div(left, right); + } + + /** + * 创建取模运算函数 + */ + public static FunctionBase Calculate_Mod(FunctionBase left, FunctionBase right) { + return new Function_Mod(left, right); + } + + /** + * 创建字符串连接函数 + */ + public static FunctionBase Calculate_Connect(FunctionBase left, FunctionBase right) { + return new Function_Connect(left, right); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java index 1901254b3..e617b13e2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java @@ -365,4 +365,105 @@ public S getSecond() { return second; } } + + // ----------------------------------------------------------------------- + // BigDecimal 版统计辅助方法(供 RANK / LARGE / SMALL 等函数使用) + // ----------------------------------------------------------------------- + + /** + * 快速选择:从 BigDecimal 列表中找第 k 小(largest=false)或第 k 大(largest=true)的值。 + * k 从 0 开始计数(即 largest=true,k=0 表示最大值)。 + * + * @param list 输入列表(会被修改,调用方应传副本) + * @param k 目标位次(0-based) + * @param largest true=找第k大,false=找第k小 + * @return 目标值 + */ + public static BigDecimal QuickSelect(List list, int k, boolean largest) { + if (list.size() == 1) return list.get(0); + int targetIndex = largest ? list.size() - 1 - k : k; + return quickSelectCore(list, 0, list.size() - 1, targetIndex); + } + + private static BigDecimal quickSelectCore(List list, int left, int right, int k) { + while (left < right) { + int pivotIndex = partition(list, left, right); + if (k == pivotIndex) { + return list.get(k); + } else if (k < pivotIndex) { + right = pivotIndex - 1; + } else { + left = pivotIndex + 1; + } + } + return list.get(left); + } + + private static int partition(List list, int left, int right) { + BigDecimal pivot = list.get(right); + int i = left; + for (int j = left; j < right; j++) { + if (list.get(j).compareTo(pivot) <= 0) { + swap(list, i, j); + i++; + } + } + swap(list, i, right); + return i; + } + + private static void swap(List list, int i, int j) { + if (i != j) { + BigDecimal temp = list.get(i); + list.set(i, list.get(j)); + list.set(j, temp); + } + } + + /** + * 获取 num 在 values 中的排名。 + * descending=true 表示降序排名(最大值排名第1)。 + * + * @param values 数值列表 + * @param num 待排名的值 + * @param descending true=降序,false=升序 + * @return 排名(1-based),若 num 不在列表中返回 0 + */ + public static int GetRank(List values, BigDecimal num, boolean descending) { + int rank = 1; + int count = 0; + for (BigDecimal v : values) { + int cmp = v.compareTo(num); + if (cmp == 0) { + count++; + } else if ((descending && cmp > 0) || (!descending && cmp < 0)) { + rank++; + } + } + return count > 0 ? rank : 0; + } + + /** + * 获取 num 在 values 列表中的 F_base_GetList 辅助(BigDecimal 单个 Operand) + */ + public static boolean F_base_GetList(List args, List list) { + for (Operand item : args) { + if (item.IsNumber()) { + list.add(item.NumberValue()); + } else if (item.IsArray()) { + boolean o = F_base_GetList(item.ArrayValue(), list); + if (!o) return false; + } else if (item.IsJson()) { + Operand i = item.ToArray(null); + if (i.IsError()) return false; + boolean o = F_base_GetList(i.ArrayValue(), list); + if (!o) return false; + } else { + Operand o = item.ToNumber(null); + if (o.IsError()) return false; + list.add(o.NumberValue()); + } + } + return true; + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS.java new file mode 100644 index 000000000..0fc663e4a --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS.java @@ -0,0 +1,46 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; + +public class Function_DAYS extends Function_2 { + public Function_DAYS(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotDate()) { + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "Days", 1); + if (args1.IsError()) { + return args1; + } + } + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotDate()) { + args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "Days", 2); + if (args2.IsError()) { + return args2; + } + } + + MyDate endMyDate = args1.DateValue(); + MyDate startMyDate = args2.DateValue(); + + // 计算两个日期之间的天数差(仅比较日期部分) + long endMillis = endMyDate.ToDateTime().withTimeAtStartOfDay().getMillis(); + long startMillis = startMyDate.ToDateTime().withTimeAtStartOfDay().getMillis(); + long days = (endMillis - startMillis) / (1000L * 60 * 60 * 24); + + return Operand.Create((int) days); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Days"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java new file mode 100644 index 000000000..cf23e98ce --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java @@ -0,0 +1,133 @@ +package toolgood.algorithm.internals.functions.datetimes; + +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; + +public class Function_YEARFRAC extends Function_3 { + public Function_YEARFRAC(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + if (func1 == null || func2 == null) { + return ParameterError(1); + } + + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotDate()) { + args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "YEARFRAC", 1); + if (args1.IsError()) return args1; + } + + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotDate()) { + args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "YEARFRAC", 2); + if (args2.IsError()) return args2; + } + + int basis = 0; + if (func3 != null) { + Operand args3 = func3.Evaluate(work, tempParameter); + if (!args3.IsNumber()) { + args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "YEARFRAC", 3); + if (args3.IsError()) return args3; + } + basis = (int) args3.DoubleValue(); + if (basis < 0 || basis > 4) { + return ParameterError(3); + } + } + + MyDate startMyDate = args1.DateValue(); + MyDate endMyDate = args2.DateValue(); + + double result = calculateYearFrac(startMyDate, endMyDate, basis); + return Operand.Create(result); + } + + private double calculateYearFrac(MyDate startDate, MyDate endDate, int basis) { + // 确保 startDate <= endDate + if (startDate.ToDateTime().isAfter(endDate.ToDateTime())) { + MyDate temp = startDate; + startDate = endDate; + endDate = temp; + } + + switch (basis) { + case 0: + return calculate30_360(startDate, endDate); + case 1: + return calculateActualActual(startDate, endDate); + case 2: + return daysBetween(startDate, endDate) / 360.0; + case 3: + return daysBetween(startDate, endDate) / 365.0; + case 4: + return calculate30_360E(startDate, endDate); + default: + return calculate30_360(startDate, endDate); + } + } + + private double calculate30_360(MyDate startDate, MyDate endDate) { + int d1 = Math.min(30, startDate.Day); + int d2 = endDate.Day; + if (d1 == 30) d2 = Math.min(30, d2); + return (360.0 * (endDate.Year - startDate.Year) + + 30.0 * (endDate.Month - startDate.Month) + + (d2 - d1)) / 360.0; + } + + private double calculate30_360E(MyDate startDate, MyDate endDate) { + int d1 = Math.min(30, startDate.Day); + int d2 = Math.min(30, endDate.Day); + return (360.0 * (endDate.Year - startDate.Year) + + 30.0 * (endDate.Month - startDate.Month) + + (d2 - d1)) / 360.0; + } + + private double calculateActualActual(MyDate startDate, MyDate endDate) { + int startYear = startDate.Year; + int endYear = endDate.Year; + + if (startYear == endYear) { + int daysInYear = isLeapYear(startYear) ? 366 : 365; + return daysBetween(startDate, endDate) / (double) daysInYear; + } + + int daysInStartYear = isLeapYear(startYear) ? 366 : 365; + int daysInEndYear = isLeapYear(endYear) ? 366 : 365; + + // 从 startDate 到当年年底 + MyDate endOfStartYear = new MyDate(startYear, 12, 31, 0, 0, 0); + double result = daysBetween(startDate, endOfStartYear) / (double) daysInStartYear; + + // 从 endYear 年初到 endDate + MyDate startOfEndYear = new MyDate(endYear, 1, 1, 0, 0, 0); + result += daysBetween(startOfEndYear, endDate) / (double) daysInEndYear; + + // 中间完整年份 + result += endYear - startYear - 1; + + return result; + } + + private long daysBetween(MyDate d1, MyDate d2) { + long millis1 = d1.ToDateTime().withTimeAtStartOfDay().getMillis(); + long millis2 = d2.ToDateTime().withTimeAtStartOfDay().getMillis(); + return (millis2 - millis1) / (1000L * 60 * 60 * 24); + } + + private boolean isLeapYear(int year) { + return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "YEARFRAC"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DB.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DB.java new file mode 100644 index 000000000..4c97d4053 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DB.java @@ -0,0 +1,89 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_5; + +/** + * DB: 使用固定余额递减法,计算一笔资产在给定期间内的折旧值 + * DB(cost, salvage, life, period, [month]) + */ +public class Function_DB extends Function_5 { + public Function_DB(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand costArg = GetNumber_1(engine, tempParameter); + if (costArg.IsError()) return costArg; + double cost = costArg.DoubleValue(); + + Operand salvageArg = GetNumber_2(engine, tempParameter); + if (salvageArg.IsError()) return salvageArg; + double salvage = salvageArg.DoubleValue(); + + Operand lifeArg = GetNumber_3(engine, tempParameter); + if (lifeArg.IsError()) return lifeArg; + double life = lifeArg.DoubleValue(); + + Operand periodArg = GetNumber_4(engine, tempParameter); + if (periodArg.IsError()) return periodArg; + double period = periodArg.DoubleValue(); + + int month = 12; + if (func5 != null) { + Operand monthArg = GetNumber_5(engine, tempParameter); + if (monthArg.IsError()) return monthArg; + month = monthArg.IntValue(); + if (month < 1 || month > 12) { + return ParameterError(5); + } + } + + if (life == 0 || cost == 0) return Div0Error(); + if (period < 1 || period > life + 1) return ParameterError(4); + if (life < 1) return ParameterError(3); + + // rate 保留3位小数 + double rate = 1 - Math.pow(salvage / cost, 1.0 / life); + rate = Math.round(rate * 1000.0) / 1000.0; + + double depreciation = 0; + if (period == 1) { + depreciation = cost * rate * month / 12.0; + } else if ((int) period == (int) life) { + double remainingCost = cost; + for (int i = 1; i < (int) life; i++) { + remainingCost -= depreciation; + if (i == 1) { + depreciation = cost * rate * month / 12.0; + } else if (i < (int) life) { + depreciation = remainingCost * rate; + } + } + remainingCost -= depreciation; + depreciation = remainingCost * rate * (12 - month) / 12.0; + } else { + double remainingCost = cost; + for (int i = 1; i <= (int) period; i++) { + if (i == 1) { + depreciation = cost * rate * month / 12.0; + } else { + remainingCost -= depreciation; + depreciation = remainingCost * rate; + } + } + } + + return Operand.Create(depreciation); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "DB"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java new file mode 100644 index 000000000..b0bdc29ae --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java @@ -0,0 +1,76 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_5; + +/** + * DDB: 使用双倍余额递减法或其他指定方法,计算一笔资产在给定期间内的折旧值 + * DDB(cost, salvage, life, period, [factor]) + */ +public class Function_DDB extends Function_5 { + public Function_DDB(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand costArg = GetNumber_1(engine, tempParameter); + if (costArg.IsError()) return costArg; + double cost = costArg.DoubleValue(); + + Operand salvageArg = GetNumber_2(engine, tempParameter); + if (salvageArg.IsError()) return salvageArg; + double salvage = salvageArg.DoubleValue(); + + Operand lifeArg = GetNumber_3(engine, tempParameter); + if (lifeArg.IsError()) return lifeArg; + double life = lifeArg.DoubleValue(); + + Operand periodArg = GetNumber_4(engine, tempParameter); + if (periodArg.IsError()) return periodArg; + double period = periodArg.DoubleValue(); + + double factor = 2; + if (func5 != null) { + Operand factorArg = GetNumber_5(engine, tempParameter); + if (factorArg.IsError()) return factorArg; + factor = factorArg.DoubleValue(); + } + + if (life == 0 || factor == 0) return Div0Error(); + if (period < 1 || period > life) return ParameterError(4); + if (life < 1) return ParameterError(3); + + double depreciation = 0; + double remainingCost = cost; + + for (int i = 1; i <= (int) period; i++) { + double ddb = remainingCost * factor / life; + double maxDepreciation = remainingCost - salvage; + if (ddb > maxDepreciation) { + ddb = maxDepreciation; + } + if (i == (int) period) { + depreciation = ddb; + } + remainingCost -= ddb; + if (remainingCost <= salvage) { + if (i == (int) period) { + depreciation = remainingCost + ddb - salvage; + } + break; + } + } + + return Operand.Create(depreciation); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "DDB"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java new file mode 100644 index 000000000..b01b65f7f --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java @@ -0,0 +1,67 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_5; + +/** + * FV: 基于固定利率及等额分期付款方式,返回某项投资的未来值 + * FV(rate, nper, pmt, [pv], [type]) + */ +public class Function_FV extends Function_5 { + public Function_FV(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand rateArg = GetNumber_1(engine, tempParameter); + if (rateArg.IsError()) return rateArg; + double rate = rateArg.DoubleValue(); + + Operand nperArg = GetNumber_2(engine, tempParameter); + if (nperArg.IsError()) return nperArg; + double nper = nperArg.DoubleValue(); + + Operand pmtArg = GetNumber_3(engine, tempParameter); + if (pmtArg.IsError()) return pmtArg; + double pmt = pmtArg.DoubleValue(); + + double pv = 0; + if (func4 != null) { + Operand pvArg = GetNumber_4(engine, tempParameter); + if (pvArg.IsError()) return pvArg; + pv = pvArg.DoubleValue(); + } + + int type = 0; + if (func5 != null) { + Operand typeArg = GetNumber_5(engine, tempParameter); + if (typeArg.IsError()) return typeArg; + type = typeArg.IntValue(); + if (type != 0 && type != 1) return ParameterError(5); + } + + if (rate == 0) { + return Operand.Create(-pmt * nper - pv); + } + + double factor = Math.pow(1 + rate, nper); + double fv; + if (type == 1) { + fv = -pv * factor - pmt * (1 + rate) * (factor - 1) / rate; + } else { + fv = -pv * factor - pmt * (factor - 1) / rate; + } + + return Operand.Create(fv); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "FV"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java new file mode 100644 index 000000000..a712875e5 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java @@ -0,0 +1,80 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_6; + +/** + * IPMT: 返回在给定期数内对投资的利息偿还额 + * IPMT(rate, per, nper, pv, [fv], [type]) + */ +public class Function_IPMT extends Function_6 { + public Function_IPMT(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand rateArg = GetNumber_1(engine, tempParameter); + if (rateArg.IsError()) return rateArg; + double rate = rateArg.DoubleValue(); + + Operand perArg = GetNumber_2(engine, tempParameter); + if (perArg.IsError()) return perArg; + double per = perArg.DoubleValue(); + + Operand nperArg = GetNumber_3(engine, tempParameter); + if (nperArg.IsError()) return nperArg; + double nper = nperArg.DoubleValue(); + + Operand pvArg = GetNumber_4(engine, tempParameter); + if (pvArg.IsError()) return pvArg; + double pv = pvArg.DoubleValue(); + + double fv = 0; + if (func5 != null) { + Operand fvArg = GetNumber_5(engine, tempParameter); + if (fvArg.IsError()) return fvArg; + fv = fvArg.DoubleValue(); + } + + int type = 0; + if (func6 != null) { + Operand typeArg = GetNumber_6(engine, tempParameter); + if (typeArg.IsError()) return typeArg; + type = typeArg.IntValue(); + if (type != 0 && type != 1) return ParameterError(6); + } + + if (rate == 0) { + return Operand.Create(0.0); + } + + double pmt = calculatePMT(rate, nper, pv, fv, type); + double factor = Math.pow(1 + rate, per - 1); + double ipmt = -(pv * factor + pmt * (factor - 1) / rate) * rate; + + if (type == 1 && per == 1) { + ipmt = 0; + } + + return Operand.Create(ipmt); + } + + private double calculatePMT(double rate, double nper, double pv, double fv, int type) { + double factor = Math.pow(1 + rate, nper); + double pmt = -(pv * factor + fv) * rate / (factor - 1); + if (type == 1) { + pmt = pmt / (1 + rate); + } + return pmt; + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IPMT"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IRR.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IRR.java new file mode 100644 index 000000000..0d6b4556f --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IRR.java @@ -0,0 +1,85 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; + +/** + * IRR: 返回一组现金流的内部收益率 + * IRR(values, [guess]) + */ +public class Function_IRR extends Function_2 { + public Function_IRR(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand valuesArg = GetArray_1(engine, tempParameter); + if (valuesArg.IsError()) return valuesArg; + + List values = new ArrayList<>(); + for (Operand v : valuesArg.ArrayValue()) { + if (v.IsNumber()) { + values.add(v.DoubleValue()); + } else { + Operand v2 = v.ToNumber("Function 'IRR' parameter 1 is error!"); + if (v2.IsError()) return v2; + values.add(v2.DoubleValue()); + } + } + + if (values.isEmpty()) return ParameterError(1); + + boolean hasPositive = false; + boolean hasNegative = false; + for (double v : values) { + if (v > 0) hasPositive = true; + if (v < 0) hasNegative = true; + } + if (!hasPositive || !hasNegative) return ParameterError(1); + + double guess = 0.1; + if (func2 != null) { + Operand guessArg = GetNumber_2(engine, tempParameter); + if (guessArg.IsError()) return guessArg; + guess = guessArg.DoubleValue(); + } + + double irr = newtonRaphsonIRR(values, guess); + return Operand.Create(irr); + } + + private double newtonRaphsonIRR(List values, double guess) { + double rate = guess; + for (int iter = 0; iter < 100; iter++) { + double npv = 0; + double dnpv = 0; + + for (int i = 0; i < values.size(); i++) { + double factor = Math.pow(1 + rate, i); + npv += values.get(i) / factor; + dnpv -= i * values.get(i) / (factor * (1 + rate)); + } + + if (Math.abs(dnpv) < 1e-12) break; + double newRate = rate - npv / dnpv; + + if (Math.abs(newRate - rate) < 1e-10) { + return newRate; + } + rate = newRate; + } + return rate; + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IRR"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_MIRR.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_MIRR.java new file mode 100644 index 000000000..72ee8f26d --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_MIRR.java @@ -0,0 +1,64 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; + +/** + * MIRR: 返回一组定期现金流的修正内部收益率 + * MIRR(values, finance_rate, reinvest_rate) + */ +public class Function_MIRR extends Function_3 { + public Function_MIRR(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand valuesArg = GetArray_1(engine, tempParameter); + if (valuesArg.IsError()) return valuesArg; + + List values = new ArrayList<>(); + for (Operand v : valuesArg.ArrayValue()) { + values.add(v.IsNumber() ? v.DoubleValue() : 0.0); + } + + Operand financeRateArg = GetNumber_2(engine, tempParameter); + if (financeRateArg.IsError()) return financeRateArg; + double financeRate = financeRateArg.DoubleValue(); + + Operand reinvestRateArg = GetNumber_3(engine, tempParameter); + if (reinvestRateArg.IsError()) return reinvestRateArg; + double reinvestRate = reinvestRateArg.DoubleValue(); + + int n = values.size(); + if (n == 0) return ParameterError(1); + if (n == 1) return Div0Error(); + + double npvNegative = 0; + double npvPositive = 0; + + for (int i = 0; i < n; i++) { + if (values.get(i) < 0) { + npvNegative += values.get(i) / Math.pow(1 + financeRate, i); + } else { + npvPositive += values.get(i) * Math.pow(1 + reinvestRate, n - 1 - i); + } + } + + if (npvNegative == 0) return Div0Error(); + + double mirr = Math.pow(-npvPositive / npvNegative, 1.0 / (n - 1)) - 1; + return Operand.Create(mirr); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "MIRR"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPER.java new file mode 100644 index 000000000..5d15942ee --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPER.java @@ -0,0 +1,64 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_5; + +/** + * NPER: 基于固定利率及等额分期付款方式,返回某项投资(或贷款)的期数 + * NPER(rate, pmt, pv, [fv], [type]) + */ +public class Function_NPER extends Function_5 { + public Function_NPER(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand rateArg = GetNumber_1(engine, tempParameter); + if (rateArg.IsError()) return rateArg; + double rate = rateArg.DoubleValue(); + + Operand pmtArg = GetNumber_2(engine, tempParameter); + if (pmtArg.IsError()) return pmtArg; + double pmt = pmtArg.DoubleValue(); + + Operand pvArg = GetNumber_3(engine, tempParameter); + if (pvArg.IsError()) return pvArg; + double pv = pvArg.DoubleValue(); + + double fv = 0; + if (func4 != null) { + Operand fvArg = GetNumber_4(engine, tempParameter); + if (fvArg.IsError()) return fvArg; + fv = fvArg.DoubleValue(); + } + + int type = 0; + if (func5 != null) { + Operand typeArg = GetNumber_5(engine, tempParameter); + if (typeArg.IsError()) return typeArg; + type = typeArg.IntValue(); + } + + if (rate == 0) { + if (pmt == 0) return Div0Error(); + return Operand.Create(-(pv + fv) / pmt); + } + if (rate == -1) { + return Div0Error(); + } + + double factor = (type == 1) ? pmt * (1 + rate) : pmt; + double nper = Math.log((-fv * rate + factor) / (pv * rate + factor)) / Math.log(1 + rate); + return Operand.Create(nper); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "NPER"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java new file mode 100644 index 000000000..3d5872f64 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java @@ -0,0 +1,41 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; + +/** + * NPV: 基于一系列定期的现金流和贴现率,返回一项投资的净现值 + * NPV(rate, value1, value2, ...) + */ +public class Function_NPV extends Function_N { + public Function_NPV(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand rateArg = GetNumber(engine, tempParameter, 0); + if (rateArg.IsError()) return rateArg; + double rate = rateArg.DoubleValue(); + + if (rate == -1) return Div0Error(); + + double npv = 0; + for (int i = 1; i < funcs.length; i++) { + Operand arg = GetNumber(engine, tempParameter, i); + if (arg.IsError()) return arg; + npv += arg.DoubleValue() / Math.pow(1 + rate, i); + } + + return Operand.Create(npv); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "NPV"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PMT.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PMT.java new file mode 100644 index 000000000..ca600773e --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PMT.java @@ -0,0 +1,66 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_5; + +/** + * PMT: 基于固定利率及等额分期付款方式,返回贷款的每期付款额 + * PMT(rate, nper, pv, [fv], [type]) + */ +public class Function_PMT extends Function_5 { + public Function_PMT(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand rateArg = GetNumber_1(engine, tempParameter); + if (rateArg.IsError()) return rateArg; + double rate = rateArg.DoubleValue(); + + Operand nperArg = GetNumber_2(engine, tempParameter); + if (nperArg.IsError()) return nperArg; + double nper = nperArg.DoubleValue(); + + Operand pvArg = GetNumber_3(engine, tempParameter); + if (pvArg.IsError()) return pvArg; + double pv = pvArg.DoubleValue(); + + if (nper == 0) return Div0Error(); + + double fv = 0; + if (func4 != null) { + Operand fvArg = GetNumber_4(engine, tempParameter); + if (fvArg.IsError()) return fvArg; + fv = fvArg.DoubleValue(); + } + + int type = 0; + if (func5 != null) { + Operand typeArg = GetNumber_5(engine, tempParameter); + if (typeArg.IsError()) return typeArg; + type = typeArg.IntValue(); + } + + if (rate == 0) { + return Operand.Create(-(pv + fv) / nper); + } + + double factor = Math.pow(1 + rate, nper); + double pmt = -(pv * factor + fv) * rate / (factor - 1); + if (type == 1) { + pmt = pmt / (1 + rate); + } + + return Operand.Create(pmt); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "PMT"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java new file mode 100644 index 000000000..d964f8a39 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java @@ -0,0 +1,78 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_6; + +/** + * PPMT: 返回在给定期数内对贷款本金的偿还额 + * PPMT(rate, per, nper, pv, [fv], [type]) + */ +public class Function_PPMT extends Function_6 { + public Function_PPMT(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand rateArg = GetNumber_1(engine, tempParameter); + if (rateArg.IsError()) return rateArg; + double rate = rateArg.DoubleValue(); + + Operand perArg = GetNumber_2(engine, tempParameter); + if (perArg.IsError()) return perArg; + double per = perArg.DoubleValue(); + + Operand nperArg = GetNumber_3(engine, tempParameter); + if (nperArg.IsError()) return nperArg; + double nper = nperArg.DoubleValue(); + + Operand pvArg = GetNumber_4(engine, tempParameter); + if (pvArg.IsError()) return pvArg; + double pv = pvArg.DoubleValue(); + + double fv = 0; + if (func5 != null) { + Operand fvArg = GetNumber_5(engine, tempParameter); + if (fvArg.IsError()) return fvArg; + fv = fvArg.DoubleValue(); + } + + int type = 0; + if (func6 != null) { + Operand typeArg = GetNumber_6(engine, tempParameter); + if (typeArg.IsError()) return typeArg; + type = typeArg.IntValue(); + if (type != 0 && type != 1) return ParameterError(6); + } + + double pmtResult = calculatePMT(rate, nper, pv, fv, type); + double ipmtResult = calculateIPMT(rate, per, nper, pv, fv, type); + return Operand.Create(pmtResult - ipmtResult); + } + + private double calculatePMT(double rate, double nper, double pv, double fv, int type) { + if (rate == 0) return -(pv + fv) / nper; + double factor = Math.pow(1 + rate, nper); + double pmt = -(pv * factor + fv) * rate / (factor - 1); + if (type == 1) pmt = pmt / (1 + rate); + return pmt; + } + + private double calculateIPMT(double rate, double per, double nper, double pv, double fv, int type) { + if (rate == 0) return 0; + double pmt = calculatePMT(rate, nper, pv, fv, type); + double factor = Math.pow(1 + rate, per - 1); + double ipmt = -(pv * factor + pmt * (factor - 1) / rate) * rate; + if (type == 1 && per == 1) ipmt = 0; + return ipmt; + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "PPMT"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java new file mode 100644 index 000000000..18ec1f163 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java @@ -0,0 +1,67 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_5; + +/** + * PV: 返回投资的现值 + * PV(rate, nper, pmt, [fv], [type]) + */ +public class Function_PV extends Function_5 { + public Function_PV(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand rateArg = GetNumber_1(engine, tempParameter); + if (rateArg.IsError()) return rateArg; + double rate = rateArg.DoubleValue(); + + Operand nperArg = GetNumber_2(engine, tempParameter); + if (nperArg.IsError()) return nperArg; + double nper = nperArg.DoubleValue(); + + Operand pmtArg = GetNumber_3(engine, tempParameter); + if (pmtArg.IsError()) return pmtArg; + double pmt = pmtArg.DoubleValue(); + + double fv = 0; + if (func4 != null) { + Operand fvArg = GetNumber_4(engine, tempParameter); + if (fvArg.IsError()) return fvArg; + fv = fvArg.DoubleValue(); + } + + int type = 0; + if (func5 != null) { + Operand typeArg = GetNumber_5(engine, tempParameter); + if (typeArg.IsError()) return typeArg; + type = typeArg.IntValue(); + if (type != 0 && type != 1) return ParameterError(5); + } + + if (rate == 0) { + return Operand.Create(-pmt * nper - fv); + } + + double factor = Math.pow(1 + rate, nper); + double pv; + if (type == 1) { + pv = -(fv + pmt * (1 + rate) * (factor - 1) / rate) / factor; + } else { + pv = -(fv + pmt * (factor - 1) / rate) / factor; + } + + return Operand.Create(pv); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "PV"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java new file mode 100644 index 000000000..9c1e5d8cb --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java @@ -0,0 +1,96 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_6; + +/** + * RATE: 返回年金的各期利率 + * RATE(nper, pmt, pv, [fv], [type], [guess]) + */ +public class Function_RATE extends Function_6 { + public Function_RATE(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand nperArg = GetNumber_1(engine, tempParameter); + if (nperArg.IsError()) return nperArg; + double nper = nperArg.DoubleValue(); + + Operand pmtArg = GetNumber_2(engine, tempParameter); + if (pmtArg.IsError()) return pmtArg; + double pmt = pmtArg.DoubleValue(); + + Operand pvArg = GetNumber_3(engine, tempParameter); + if (pvArg.IsError()) return pvArg; + double pv = pvArg.DoubleValue(); + + if (nper <= 0) return ParameterError(1); + + double fv = 0; + if (func4 != null) { + Operand fvArg = GetNumber_4(engine, tempParameter); + if (fvArg.IsError()) return fvArg; + fv = fvArg.DoubleValue(); + } + + int type = 0; + if (func5 != null) { + Operand typeArg = GetNumber_5(engine, tempParameter); + if (typeArg.IsError()) return typeArg; + type = typeArg.IntValue(); + if (type != 0 && type != 1) return ParameterError(5); + } + + double guess = 0.1; + if (func6 != null) { + Operand guessArg = GetNumber_6(engine, tempParameter); + if (guessArg.IsError()) return guessArg; + guess = guessArg.DoubleValue(); + } + + double rate = newtonRaphson(nper, pmt, pv, fv, type, guess); + return Operand.Create(rate); + } + + private double newtonRaphson(double n, double p, double v, double f, double type, double rate) { + for (int i = 0; i < 100; i++) { + double factor = Math.pow(1 + rate, n); + double fn; + if (type == 1) { + fn = v * factor + p * (1 + rate) * (factor - 1) / rate + f; + } else { + fn = v * factor + p * (factor - 1) / rate + f; + } + + double dfn; + if (type == 1) { + dfn = v * n * Math.pow(1 + rate, n - 1) + + p * (1 + rate) * (n * rate * Math.pow(1 + rate, n - 1) - (factor - 1)) / (rate * rate) + + p * (factor - 1) / rate; + } else { + dfn = v * n * Math.pow(1 + rate, n - 1) + + p * (n * rate * Math.pow(1 + rate, n - 1) - (factor - 1)) / (rate * rate); + } + + if (Math.abs(dfn) < 1e-12) break; + double newRate = rate - fn / dfn; + + if (Math.abs(newRate - rate) < 1e-10) { + return newRate; + } + rate = newRate; + } + return rate; + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "RATE"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java new file mode 100644 index 000000000..81e3d7e10 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java @@ -0,0 +1,42 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; + +/** + * SLN: 返回某项资产在一个期间中的线性折旧值 + * SLN(cost, salvage, life) + */ +public class Function_SLN extends Function_3 { + public Function_SLN(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand costArg = GetNumber_1(engine, tempParameter); + if (costArg.IsError()) return costArg; + double cost = costArg.DoubleValue(); + + Operand salvageArg = GetNumber_2(engine, tempParameter); + if (salvageArg.IsError()) return salvageArg; + double salvage = salvageArg.DoubleValue(); + + Operand lifeArg = GetNumber_3(engine, tempParameter); + if (lifeArg.IsError()) return lifeArg; + double life = lifeArg.DoubleValue(); + + if (life == 0) return Div0Error(); + + return Operand.Create((cost - salvage) / life); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "SLN"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java new file mode 100644 index 000000000..2fce94cde --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java @@ -0,0 +1,49 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_4; + +/** + * SYD: 返回某项资产按年数总和折旧法计算的指定期间的折旧值 + * SYD(cost, salvage, life, period) + */ +public class Function_SYD extends Function_4 { + public Function_SYD(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { + super(func1, func2, func3, func4); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand costArg = GetNumber_1(engine, tempParameter); + if (costArg.IsError()) return costArg; + double cost = costArg.DoubleValue(); + + Operand salvageArg = GetNumber_2(engine, tempParameter); + if (salvageArg.IsError()) return salvageArg; + double salvage = salvageArg.DoubleValue(); + + Operand lifeArg = GetNumber_3(engine, tempParameter); + if (lifeArg.IsError()) return lifeArg; + double life = lifeArg.DoubleValue(); + + Operand periodArg = GetNumber_4(engine, tempParameter); + if (periodArg.IsError()) return periodArg; + double period = periodArg.DoubleValue(); + + if (life == 0) return Div0Error(); + if (period < 1 || period > life) return ParameterError(4); + if (life < 1) return ParameterError(3); + + double syd = (cost - salvage) * (life - period + 1) * 2 / (life * (life + 1)); + return Operand.Create(syd); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "SYD"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java new file mode 100644 index 000000000..72ec054d2 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java @@ -0,0 +1,92 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; + +/** + * XIRR: 返回一组不定期发生的现金流的内部收益率 + * XIRR(values, dates, [guess]) + */ +public class Function_XIRR extends Function_3 { + public Function_XIRR(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand valuesArg = GetArray_1(engine, tempParameter); + if (valuesArg.IsError()) return valuesArg; + + List values = new ArrayList<>(); + for (Operand v : valuesArg.ArrayValue()) { + values.add(v.IsNumber() ? v.DoubleValue() : 0.0); + } + + Operand datesArg = GetArray_2(engine, tempParameter); + if (datesArg.IsError()) return datesArg; + + List dateMillis = new ArrayList<>(); + for (Operand d : datesArg.ArrayValue()) { + if (d.IsDate()) { + dateMillis.add(d.DateValue().ToDateTime().getMillis()); + } else if (d.IsText()) { + MyDate myDate = MyDate.Parse(d.TextValue()); + if (myDate == null) return ParameterError(2); + dateMillis.add(myDate.ToDateTime().getMillis()); + } else { + return ParameterError(2); + } + } + + if (values.size() != dateMillis.size() || values.size() < 2) return FunctionError(); + + double guess = 0.1; + if (func3 != null) { + Operand guessArg = GetNumber_3(engine, tempParameter); + if (guessArg.IsError()) return guessArg; + guess = guessArg.DoubleValue(); + } + + double xirr = newtonRaphsonXIRR(values, dateMillis, guess); + return Operand.Create(xirr); + } + + private double newtonRaphsonXIRR(List values, List dateMillis, double rate) { + long baseMillis = dateMillis.get(0); + final long MILLIS_PER_DAY = 1000L * 60 * 60 * 24; + + for (int iter = 0; iter < 100; iter++) { + double npv = 0; + double dnpv = 0; + + for (int i = 0; i < values.size(); i++) { + double days = (dateMillis.get(i) - baseMillis) / (double) MILLIS_PER_DAY; + double exp = days / 365.0; + double factor = Math.pow(1 + rate, exp); + npv += values.get(i) / factor; + dnpv -= values.get(i) * exp / (factor * (1 + rate)); + } + + if (Math.abs(dnpv) < 1e-12) break; + double newRate = rate - npv / dnpv; + + if (Math.abs(newRate - rate) < 1e-10) { + return newRate; + } + rate = newRate; + } + return rate; + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "XIRR"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java new file mode 100644 index 000000000..b24aa89a7 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java @@ -0,0 +1,68 @@ +package toolgood.algorithm.internals.functions.financial; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; + +/** + * XNPV: 返回一组不定期发生的现金流的净现值 + * XNPV(rate, values, dates) + */ +public class Function_XNPV extends Function_3 { + public Function_XNPV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { + super(func1, func2, func3); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand rateArg = GetNumber_1(engine, tempParameter); + if (rateArg.IsError()) return rateArg; + double rate = rateArg.DoubleValue(); + if (rate == -1) return Div0Error(); + + Operand valuesArg = GetArray_2(engine, tempParameter); + if (valuesArg.IsError()) return valuesArg; + List values = valuesArg.ArrayValue(); + + Operand datesArg = GetArray_3(engine, tempParameter); + if (datesArg.IsError()) return datesArg; + List dates = datesArg.ArrayValue(); + + if (values.size() != dates.size()) return FunctionError(); + if (values.isEmpty()) return ParameterError(1); + + List dateMillis = new ArrayList<>(); + final long MILLIS_PER_DAY = 1000L * 60 * 60 * 24; + for (Operand d : dates) { + if (d.IsDate()) { + dateMillis.add(d.DateValue().ToDateTime().getMillis()); + } else if (d.IsText()) { + MyDate myDate = MyDate.Parse(d.TextValue()); + if (myDate == null) return ParameterError(3); + dateMillis.add(myDate.ToDateTime().getMillis()); + } else { + return ParameterError(3); + } + } + + long baseMillis = dateMillis.get(0); + double xnpv = 0; + for (int i = 0; i < values.size(); i++) { + double days = (dateMillis.get(i) - baseMillis) / (double) MILLIS_PER_DAY; + xnpv += values.get(i).DoubleValue() / Math.pow(1 + rate, days / 365.0); + } + + return Operand.Create(xnpv); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "XNPV"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java new file mode 100644 index 000000000..abb795e77 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java @@ -0,0 +1,67 @@ +package toolgood.algorithm.internals.functions.flow; + +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +/** + * IFS 函数:依次检测多个条件,返回第一个为 true 的条件对应的值。 + * 参数格式:IFS(condition1, value1, condition2, value2, ...) + */ +public class Function_IFS extends Function_N { + + public Function_IFS(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, + BiFunction tempParameter) { + for (int i = 0; i < funcs.length - 1; i += 2) { + Operand condition = funcs[i].Evaluate(work, tempParameter); + if (condition.IsNotBoolean()) { + condition = condition.ToBoolean( + "Function '%s' parameter %d is error!", Name(), i + 1); + } + if (condition.IsError()) { + return condition; + } + if (condition.BooleanValue()) { + return funcs[i + 1].Evaluate(work, tempParameter); + } + } + return FunctionError(); + } + + @Override + public OperandType GetResultType() { + for (int i = 0; i < funcs.length - 1; i += 2) { + OperandType t = funcs[i + 1].GetResultType(); + if (t != OperandType.NONE) { + return t; + } + } + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + for (int i = 0; i < funcs.length - 1; i += 2) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.BOOLEAN, op, val); + funcs[i + 1].GetParameterTypes(noneEngine, result, OperandType.NONE, op, val); + } + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "IFS"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java new file mode 100644 index 000000000..f4cc0c11f --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java @@ -0,0 +1,92 @@ +package toolgood.algorithm.internals.functions.flow; + +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +/** + * SWITCH 函数:对表达式求值,与后续候选值逐一比较,返回第一个匹配的结果。 + * 参数格式:SWITCH(expr, val1, result1, val2, result2, ...[, default]) + */ +public class Function_SWITCH extends Function_N { + + public Function_SWITCH(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, + BiFunction tempParameter) { + Operand exprValue = funcs[0].Evaluate(work, tempParameter); + if (exprValue.IsError()) { + return exprValue; + } + + int i = 1; + while (i < funcs.length - 1) { + Operand compareValue = funcs[i].Evaluate(work, tempParameter); + if (compareValue.IsError()) { + return compareValue; + } + if (equalsOperand(exprValue, compareValue)) { + return funcs[i + 1].Evaluate(work, tempParameter); + } + i += 2; + } + return FunctionError(); + } + + private boolean equalsOperand(Operand a, Operand b) { + if (a.IsNumber() && b.IsNumber()) { + return a.NumberValue().compareTo(b.NumberValue()) == 0; + } + if (a.IsText() && b.IsText()) { + return a.TextValue().equals(b.TextValue()); + } + if (a.IsBoolean() && b.IsBoolean()) { + return a.BooleanValue() == b.BooleanValue(); + } + if (a.IsNull() && b.IsNull()) { + return true; + } + return false; + } + + @Override + public OperandType GetResultType() { + int i = 1; + while (i < funcs.length - 1) { + OperandType t = funcs[i + 1].GetResultType(); + if (t != OperandType.NONE) { + return t; + } + i += 2; + } + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.NONE, op, val); + int i = 1; + while (i < funcs.length - 1) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NONE, op, val); + funcs[i + 1].GetParameterTypes(noneEngine, result, OperandType.NONE, op, val); + i += 2; + } + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "SWITCH"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java new file mode 100644 index 000000000..8ce02294e --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java @@ -0,0 +1,81 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; + +/** + * ARABIC 函数:将罗马数字字符串转换为阿拉伯数字。 + * 参数:ARABIC(text) + */ +public class Function_ARABIC extends Function_1 { + + public Function_ARABIC(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, + BiFunction tempParameter) { + Operand arg = func1.Evaluate(work, tempParameter); + if (arg.IsNotText()) { + arg = ConvertToText(arg, 1); + if (arg.IsError()) { + return arg; + } + } + String text = arg.TextValue().toUpperCase(); + return Operand.Create(romanToArabic(text)); + } + + private int romanToArabic(String roman) { + int result = 0; + int prevValue = 0; + for (int i = roman.length() - 1; i >= 0; i--) { + int value = getRomanValue(roman.charAt(i)); + if (value < prevValue) { + result -= value; + } else { + result += value; + } + prevValue = value; + } + return result; + } + + private int getRomanValue(char c) { + switch (c) { + case 'I': return 1; + case 'V': return 5; + case 'X': return 10; + case 'L': return 50; + case 'C': return 100; + case 'D': return 500; + case 'M': return 1000; + default: return 0; + } + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, op, val); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "ARABIC"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java new file mode 100644 index 000000000..51f76e585 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java @@ -0,0 +1,73 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +/** + * DELTA 函数:若两数相等返回 1,否则返回 0。第二参数省略时默认为 0。 + * 参数:DELTA(number1 [, number2]) + */ +public class Function_DELTA extends Function_2 { + + public Function_DELTA(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, + BiFunction tempParameter) { + if (func1 == null) { + return ParameterError(1); + } + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = ConvertToNumber(args1, 1); + if (args1.IsError()) { + return args1; + } + } + BigDecimal num1 = args1.NumberValue(); + + BigDecimal num2 = BigDecimal.ZERO; + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = ConvertToNumber(args2, 2); + if (args2.IsError()) { + return args2; + } + } + num2 = args2.NumberValue(); + } + + return Operand.Create(num1.compareTo(num2) == 0 ? 1 : 0); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + } + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "DELTA"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java new file mode 100644 index 000000000..e5d57a9dc --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java @@ -0,0 +1,73 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +/** + * GESTEP 函数:若 number >= step 返回 1,否则返回 0。第二参数省略时 step 默认为 0。 + * 参数:GESTEP(number [, step]) + */ +public class Function_GESTEP extends Function_2 { + + public Function_GESTEP(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, + BiFunction tempParameter) { + if (func1 == null) { + return ParameterError(1); + } + Operand args1 = func1.Evaluate(work, tempParameter); + if (args1.IsNotNumber()) { + args1 = ConvertToNumber(args1, 1); + if (args1.IsError()) { + return args1; + } + } + BigDecimal number = args1.NumberValue(); + + BigDecimal step = BigDecimal.ZERO; + if (func2 != null) { + Operand args2 = func2.Evaluate(work, tempParameter); + if (args2.IsNotNumber()) { + args2 = ConvertToNumber(args2, 2); + if (args2.IsError()) { + return args2; + } + } + step = args2.NumberValue(); + } + + return Operand.Create(number.compareTo(step) >= 0 ? 1 : 0); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + } + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "GESTEP"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG10.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG10.java new file mode 100644 index 000000000..01f01ad6d --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG10.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_LOG10 extends Function_1 { + public Function_LOG10(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsError()) return args1; + + double z = args1.DoubleValue(); + if (z <= 0) { + return ParameterError(1); + } + return Operand.Create(Math.log10(z)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Log10"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java index 26895d1f4..ad4472540 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java @@ -1,29 +1,56 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +/** + * Percentage 函数:将数值除以 100(百分比运算),对应 C# 中的 % 运算符。 + * 参数:number% → Percentage(number) + */ public class Function_Percentage extends Function_1 { + + private static final BigDecimal HUNDRED = new BigDecimal("100"); + public Function_Percentage(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine work, + BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Percentage"); + args1 = ConvertToNumber(args1, 1); if (args1.IsError()) { return args1; } } - return Operand.Create(args1.DoubleValue() / 100.0); + return Operand.Create(args1.NumberValue().divide(HUNDRED)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + // 百分比的 toString 格式:原参数后加 %,不加括号 func1.toString(stringBuilder, false); stringBuilder.append('%'); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java new file mode 100644 index 000000000..ebf5beb4c --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java @@ -0,0 +1,94 @@ +package toolgood.algorithm.internals.functions.mathbase; + +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +/** + * ROMAN 函数:将阿拉伯数字转换为罗马数字字符串。 + * 第二参数 form 保留(兼容 Excel),当前实现仅使用经典形式。 + * 参数:ROMAN(number [, form]) + */ +public class Function_ROMAN extends Function_2 { + + private static final int[] VALUES = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; + private static final String[] NUMERALS = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; + + public Function_ROMAN(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, + BiFunction tempParameter) { + if (func1 == null) { + return ParameterError(1); + } + Operand numArg = func1.Evaluate(work, tempParameter); + if (numArg.IsNotNumber()) { + numArg = ConvertToNumber(numArg, 1); + if (numArg.IsError()) { + return numArg; + } + } + int num = numArg.IntValue(); + + if (num < 0 || num > 3999) { + return Operand.Create(""); + } + + // form 参数(暂不影响输出,保留读取以兼容调用形式) + if (func2 != null) { + Operand formArg = func2.Evaluate(work, tempParameter); + if (formArg.IsNotNumber()) { + formArg = ConvertToNumber(formArg, 2); + if (formArg.IsError()) { + return formArg; + } + } + // form 值已读取,可扩展为简化罗马数字逻辑;目前经典形式已足够 + } + + return Operand.Create(arabicToRoman(num)); + } + + private String arabicToRoman(int num) { + if (num == 0) { + return ""; + } + StringBuilder sb = new StringBuilder(16); + for (int i = 0; i < VALUES.length; i++) { + while (num >= VALUES[i]) { + sb.append(NUMERALS[i]); + num -= VALUES[i]; + } + } + return sb.toString(); + } + + @Override + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + } + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "ROMAN"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_CORREL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_CORREL.java new file mode 100644 index 000000000..eea301552 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_CORREL.java @@ -0,0 +1,86 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_CORREL extends Function_N { + public Function_CORREL(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "CORREL"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (funcs.length < 2) return ParameterError(1); + + Operand array1Arg = GetArray(engine, tempParameter, 0); + if (array1Arg.IsError()) return array1Arg; + + Operand array2Arg = GetArray(engine, tempParameter, 1); + if (array2Arg.IsError()) return array2Arg; + + List xValues = new ArrayList<>(); + for (Operand item : array1Arg.ArrayValue()) { + if (item.IsNumber()) xValues.add(item.NumberValue()); + } + + List yValues = new ArrayList<>(); + for (Operand item : array2Arg.ArrayValue()) { + if (item.IsNumber()) yValues.add(item.NumberValue()); + } + + if (xValues.size() != yValues.size() || xValues.size() < 2) return FunctionError(); + + int n = xValues.size(); + BigDecimal sumX = BigDecimal.ZERO, sumY = BigDecimal.ZERO; + + for (int i = 0; i < n; i++) { + sumX = sumX.add(xValues.get(i)); + sumY = sumY.add(yValues.get(i)); + } + + BigDecimal meanX = sumX.divide(new BigDecimal(n), 20, java.math.RoundingMode.HALF_UP); + BigDecimal meanY = sumY.divide(new BigDecimal(n), 20, java.math.RoundingMode.HALF_UP); + + BigDecimal numerator = BigDecimal.ZERO, denomX = BigDecimal.ZERO, denomY = BigDecimal.ZERO; + + for (int i = 0; i < n; i++) { + BigDecimal dx = xValues.get(i).subtract(meanX); + BigDecimal dy = yValues.get(i).subtract(meanY); + numerator = numerator.add(dx.multiply(dy)); + denomX = denomX.add(dx.multiply(dx)); + denomY = denomY.add(dy.multiply(dy)); + } + + if (denomX.compareTo(BigDecimal.ZERO) == 0 || denomY.compareTo(BigDecimal.ZERO) == 0) return Div0Error(); + + double denomD = Math.sqrt(denomX.multiply(denomY).doubleValue()); + BigDecimal result = numerator.divide(new BigDecimal(denomD), 20, java.math.RoundingMode.HALF_UP); + return Operand.Create(result); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FORECAST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FORECAST.java new file mode 100644 index 000000000..9e507e1dd --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FORECAST.java @@ -0,0 +1,89 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_FORECAST extends Function_N { + public Function_FORECAST(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "FORECAST"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (funcs.length < 3) return ParameterError(1); + + Operand xArg = GetNumber(engine, tempParameter, 0); + if (xArg.IsError()) return xArg; + BigDecimal x = xArg.NumberValue(); + + Operand yArrayArg = GetArray(engine, tempParameter, 1); + if (yArrayArg.IsError()) return yArrayArg; + + Operand xArrayArg = GetArray(engine, tempParameter, 2); + if (xArrayArg.IsError()) return xArrayArg; + + List yValues = new ArrayList<>(); + for (Operand item : yArrayArg.ArrayValue()) { + if (item.IsNumber()) yValues.add(item.NumberValue()); + } + + List xValues = new ArrayList<>(); + for (Operand item : xArrayArg.ArrayValue()) { + if (item.IsNumber()) xValues.add(item.NumberValue()); + } + + if (yValues.size() != xValues.size() || yValues.size() < 2) return FunctionError(); + + BigDecimal sumX = BigDecimal.ZERO, sumY = BigDecimal.ZERO; + BigDecimal sumXY = BigDecimal.ZERO, sumX2 = BigDecimal.ZERO; + int n = yValues.size(); + + for (int i = 0; i < n; i++) { + sumX = sumX.add(xValues.get(i)); + sumY = sumY.add(yValues.get(i)); + sumXY = sumXY.add(xValues.get(i).multiply(yValues.get(i))); + sumX2 = sumX2.add(xValues.get(i).multiply(xValues.get(i))); + } + + BigDecimal bn = new BigDecimal(n); + BigDecimal meanX = sumX.divide(bn, 20, java.math.RoundingMode.HALF_UP); + BigDecimal meanY = sumY.divide(bn, 20, java.math.RoundingMode.HALF_UP); + + // denominator = n * sumX2 - sumX * sumX + BigDecimal denominator = bn.multiply(sumX2).subtract(sumX.multiply(sumX)); + if (denominator.compareTo(BigDecimal.ZERO) == 0) return Div0Error(); + + BigDecimal slope = bn.multiply(sumXY).subtract(sumX.multiply(sumY)) + .divide(denominator, 20, java.math.RoundingMode.HALF_UP); + BigDecimal intercept = meanY.subtract(slope.multiply(meanX)); + + return Operand.Create(intercept.add(slope.multiply(x))); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + funcs[2].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_INTERCEPT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_INTERCEPT.java new file mode 100644 index 000000000..7b0ea1982 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_INTERCEPT.java @@ -0,0 +1,83 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_INTERCEPT extends Function_N { + public Function_INTERCEPT(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "INTERCEPT"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (funcs.length < 2) return ParameterError(1); + + Operand yArrayArg = GetArray(engine, tempParameter, 0); + if (yArrayArg.IsError()) return yArrayArg; + + Operand xArrayArg = GetArray(engine, tempParameter, 1); + if (xArrayArg.IsError()) return xArrayArg; + + List yValues = new ArrayList<>(); + for (Operand item : yArrayArg.ArrayValue()) { + if (item.IsNumber()) yValues.add(item.NumberValue()); + } + + List xValues = new ArrayList<>(); + for (Operand item : xArrayArg.ArrayValue()) { + if (item.IsNumber()) xValues.add(item.NumberValue()); + } + + if (yValues.size() != xValues.size() || yValues.size() < 2) return FunctionError(); + + BigDecimal sumX = BigDecimal.ZERO, sumY = BigDecimal.ZERO; + BigDecimal sumXY = BigDecimal.ZERO, sumX2 = BigDecimal.ZERO; + int n = yValues.size(); + + for (int i = 0; i < n; i++) { + sumX = sumX.add(xValues.get(i)); + sumY = sumY.add(yValues.get(i)); + sumXY = sumXY.add(xValues.get(i).multiply(yValues.get(i))); + sumX2 = sumX2.add(xValues.get(i).multiply(xValues.get(i))); + } + + BigDecimal bn = new BigDecimal(n); + BigDecimal meanX = sumX.divide(bn, 20, java.math.RoundingMode.HALF_UP); + BigDecimal meanY = sumY.divide(bn, 20, java.math.RoundingMode.HALF_UP); + + BigDecimal denominator = bn.multiply(sumX2).subtract(sumX.multiply(sumX)); + if (denominator.compareTo(BigDecimal.ZERO) == 0) return Div0Error(); + + BigDecimal slope = bn.multiply(sumXY).subtract(sumX.multiply(sumY)) + .divide(denominator, 20, java.math.RoundingMode.HALF_UP); + BigDecimal intercept = meanY.subtract(slope.multiply(meanX)); + + return Operand.Create(intercept); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PEARSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PEARSON.java new file mode 100644 index 000000000..eee251057 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PEARSON.java @@ -0,0 +1,86 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_PEARSON extends Function_N { + public Function_PEARSON(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "PEARSON"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (funcs.length < 2) return ParameterError(1); + + Operand array1Arg = GetArray(engine, tempParameter, 0); + if (array1Arg.IsError()) return array1Arg; + + Operand array2Arg = GetArray(engine, tempParameter, 1); + if (array2Arg.IsError()) return array2Arg; + + List xValues = new ArrayList<>(); + for (Operand item : array1Arg.ArrayValue()) { + if (item.IsNumber()) xValues.add(item.NumberValue()); + } + + List yValues = new ArrayList<>(); + for (Operand item : array2Arg.ArrayValue()) { + if (item.IsNumber()) yValues.add(item.NumberValue()); + } + + if (xValues.size() != yValues.size() || xValues.size() < 2) return FunctionError(); + + int n = xValues.size(); + BigDecimal sumX = BigDecimal.ZERO, sumY = BigDecimal.ZERO; + + for (int i = 0; i < n; i++) { + sumX = sumX.add(xValues.get(i)); + sumY = sumY.add(yValues.get(i)); + } + + BigDecimal meanX = sumX.divide(new BigDecimal(n), 20, java.math.RoundingMode.HALF_UP); + BigDecimal meanY = sumY.divide(new BigDecimal(n), 20, java.math.RoundingMode.HALF_UP); + + BigDecimal numerator = BigDecimal.ZERO, denomX = BigDecimal.ZERO, denomY = BigDecimal.ZERO; + + for (int i = 0; i < n; i++) { + BigDecimal dx = xValues.get(i).subtract(meanX); + BigDecimal dy = yValues.get(i).subtract(meanY); + numerator = numerator.add(dx.multiply(dy)); + denomX = denomX.add(dx.multiply(dx)); + denomY = denomY.add(dy.multiply(dy)); + } + + if (denomX.compareTo(BigDecimal.ZERO) == 0 || denomY.compareTo(BigDecimal.ZERO) == 0) return Div0Error(); + + double denomD = Math.sqrt(denomX.multiply(denomY).doubleValue()); + BigDecimal result = numerator.divide(new BigDecimal(denomD), 20, java.math.RoundingMode.HALF_UP); + return Operand.Create(result); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_RANK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_RANK.java new file mode 100644 index 000000000..50698bc99 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_RANK.java @@ -0,0 +1,75 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_RANK extends Function_N { + public Function_RANK(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "RANK"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (funcs.length < 2) return ParameterError(1); + + Operand numArg = GetNumber(engine, tempParameter, 0); + if (numArg.IsError()) return numArg; + BigDecimal num = numArg.NumberValue(); + + Operand arrayArg = GetArray(engine, tempParameter, 1); + if (arrayArg.IsError()) return arrayArg; + + int order = 0; + if (funcs.length > 2) { + Operand orderArg = GetNumber(engine, tempParameter, 2); + if (orderArg.IsError()) return orderArg; + order = orderArg.IntValue(); + } + + List values = new ArrayList<>(); + for (Operand item : arrayArg.ArrayValue()) { + if (item.IsNumber()) { + values.add(item.NumberValue()); + } + } + + if (values.isEmpty()) return ParameterError(2); + + boolean descending = (order == 0); + int rank = FunctionUtil.GetRank(values, num, descending); + + if (rank == 0) return ParameterError(1); + + return Operand.Create(rank); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + if (funcs.length > 2) { + funcs[2].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + } + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SERIESSUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SERIESSUM.java new file mode 100644 index 000000000..dfc9796e8 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SERIESSUM.java @@ -0,0 +1,71 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_SERIESSUM extends Function_N { + public Function_SERIESSUM(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "SERIESSUM"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (funcs.length < 4) return ParameterError(1); + + Operand xArg = GetNumber(engine, tempParameter, 0); + if (xArg.IsError()) return xArg; + BigDecimal x = xArg.NumberValue(); + + Operand nArg = GetNumber(engine, tempParameter, 1); + if (nArg.IsError()) return nArg; + BigDecimal n = nArg.NumberValue(); + + Operand mArg = GetNumber(engine, tempParameter, 2); + if (mArg.IsError()) return mArg; + BigDecimal m = mArg.NumberValue(); + + Operand coefficientsArg = GetArray(engine, tempParameter, 3); + if (coefficientsArg.IsError()) return coefficientsArg; + + BigDecimal result = BigDecimal.ZERO; + int i = 0; + for (Operand coef : coefficientsArg.ArrayValue()) { + if (coef.IsNumber()) { + // power = n + i * m + BigDecimal power = n.add(new BigDecimal(i).multiply(m)); + double powD = Math.pow(x.doubleValue(), power.doubleValue()); + result = result.add(coef.NumberValue().multiply(new BigDecimal(powD))); + i++; + } + } + + return Operand.Create(result); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + funcs[1].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + funcs[2].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + funcs[3].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SLOPE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SLOPE.java new file mode 100644 index 000000000..ab62358b7 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SLOPE.java @@ -0,0 +1,79 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_SLOPE extends Function_N { + public Function_SLOPE(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "SLOPE"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (funcs.length < 2) return ParameterError(1); + + Operand yArrayArg = GetArray(engine, tempParameter, 0); + if (yArrayArg.IsError()) return yArrayArg; + + Operand xArrayArg = GetArray(engine, tempParameter, 1); + if (xArrayArg.IsError()) return xArrayArg; + + List yValues = new ArrayList<>(); + for (Operand item : yArrayArg.ArrayValue()) { + if (item.IsNumber()) yValues.add(item.NumberValue()); + } + + List xValues = new ArrayList<>(); + for (Operand item : xArrayArg.ArrayValue()) { + if (item.IsNumber()) xValues.add(item.NumberValue()); + } + + if (yValues.size() != xValues.size() || yValues.size() < 2) return FunctionError(); + + BigDecimal sumX = BigDecimal.ZERO, sumY = BigDecimal.ZERO; + BigDecimal sumXY = BigDecimal.ZERO, sumX2 = BigDecimal.ZERO; + int n = yValues.size(); + + for (int i = 0; i < n; i++) { + sumX = sumX.add(xValues.get(i)); + sumY = sumY.add(yValues.get(i)); + sumXY = sumXY.add(xValues.get(i).multiply(yValues.get(i))); + sumX2 = sumX2.add(xValues.get(i).multiply(xValues.get(i))); + } + + BigDecimal bn = new BigDecimal(n); + // denominator = n * sumX2 - sumX * sumX + BigDecimal denominator = bn.multiply(sumX2).subtract(sumX.multiply(sumX)); + if (denominator.compareTo(BigDecimal.ZERO) == 0) return Div0Error(); + + BigDecimal slope = bn.multiply(sumXY).subtract(sumX.multiply(sumY)) + .divide(denominator, 20, java.math.RoundingMode.HALF_UP); + return Operand.Create(slope); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMPRODUCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMPRODUCT.java new file mode 100644 index 000000000..2a1a16050 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMPRODUCT.java @@ -0,0 +1,75 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_SUMPRODUCT extends Function_N { + public Function_SUMPRODUCT(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "SUMPRODUCT"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (funcs.length < 2) return ParameterError(1); + + List> arrays = new ArrayList<>(); + for (int i = 0; i < funcs.length; i++) { + Operand arg = GetArray(engine, tempParameter, i); + if (arg.IsError()) return arg; + List list = new ArrayList<>(); + for (Operand item : arg.ArrayValue()) { + if (item.IsNumber()) { + list.add(item.NumberValue()); + } + } + arrays.add(list); + } + + int minLength = arrays.get(0).size(); + for (int i = 1; i < arrays.size(); i++) { + if (arrays.get(i).size() < minLength) { + minLength = arrays.get(i).size(); + } + } + + if (minLength == 0) return Operand.Zero; + + BigDecimal result = BigDecimal.ZERO; + for (int i = 0; i < minLength; i++) { + BigDecimal product = BigDecimal.ONE; + for (int j = 0; j < arrays.size(); j++) { + product = product.multiply(arrays.get(j).get(i)); + } + result = result.add(product); + } + + return Operand.Create(result); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + for (int i = 0; i < funcs.length; i++) { + funcs[i].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + } + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2MY2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2MY2.java new file mode 100644 index 000000000..e01606a5a --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2MY2.java @@ -0,0 +1,66 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_SUMX2MY2 extends Function_N { + public Function_SUMX2MY2(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "SUMX2MY2"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (funcs.length < 2) return ParameterError(1); + + Operand arrayXArg = GetArray(engine, tempParameter, 0); + if (arrayXArg.IsError()) return arrayXArg; + List arrayX = new ArrayList<>(); + for (Operand item : arrayXArg.ArrayValue()) { + if (item.IsNumber()) arrayX.add(item.NumberValue()); + } + + Operand arrayYArg = GetArray(engine, tempParameter, 1); + if (arrayYArg.IsError()) return arrayYArg; + List arrayY = new ArrayList<>(); + for (Operand item : arrayYArg.ArrayValue()) { + if (item.IsNumber()) arrayY.add(item.NumberValue()); + } + + int minLength = Math.min(arrayX.size(), arrayY.size()); + + BigDecimal result = BigDecimal.ZERO; + for (int i = 0; i < minLength; i++) { + // X² - Y² + result = result.add(arrayX.get(i).multiply(arrayX.get(i))) + .subtract(arrayY.get(i).multiply(arrayY.get(i))); + } + + return Operand.Create(result); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2PY2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2PY2.java new file mode 100644 index 000000000..734d04c6e --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2PY2.java @@ -0,0 +1,66 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_SUMX2PY2 extends Function_N { + public Function_SUMX2PY2(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "SUMX2PY2"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (funcs.length < 2) return ParameterError(1); + + Operand arrayXArg = GetArray(engine, tempParameter, 0); + if (arrayXArg.IsError()) return arrayXArg; + List arrayX = new ArrayList<>(); + for (Operand item : arrayXArg.ArrayValue()) { + if (item.IsNumber()) arrayX.add(item.NumberValue()); + } + + Operand arrayYArg = GetArray(engine, tempParameter, 1); + if (arrayYArg.IsError()) return arrayYArg; + List arrayY = new ArrayList<>(); + for (Operand item : arrayYArg.ArrayValue()) { + if (item.IsNumber()) arrayY.add(item.NumberValue()); + } + + int minLength = Math.min(arrayX.size(), arrayY.size()); + + BigDecimal result = BigDecimal.ZERO; + for (int i = 0; i < minLength; i++) { + // X² + Y² + result = result.add(arrayX.get(i).multiply(arrayX.get(i))) + .add(arrayY.get(i).multiply(arrayY.get(i))); + } + + return Operand.Create(result); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMXMY2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMXMY2.java new file mode 100644 index 000000000..43e8ae67a --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMXMY2.java @@ -0,0 +1,65 @@ +package toolgood.algorithm.internals.functions.mathsum; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_SUMXMY2 extends Function_N { + public Function_SUMXMY2(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "SUMXMY2"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (funcs.length < 2) return ParameterError(1); + + Operand arrayXArg = GetArray(engine, tempParameter, 0); + if (arrayXArg.IsError()) return arrayXArg; + List arrayX = new ArrayList<>(); + for (Operand item : arrayXArg.ArrayValue()) { + if (item.IsNumber()) arrayX.add(item.NumberValue()); + } + + Operand arrayYArg = GetArray(engine, tempParameter, 1); + if (arrayYArg.IsError()) return arrayYArg; + List arrayY = new ArrayList<>(); + for (Operand item : arrayYArg.ArrayValue()) { + if (item.IsNumber()) arrayY.add(item.NumberValue()); + } + + int minLength = Math.min(arrayX.size(), arrayY.size()); + + BigDecimal result = BigDecimal.ZERO; + for (int i = 0; i < minLength; i++) { + BigDecimal diff = arrayX.get(i).subtract(arrayY.get(i)); + result = result.add(diff.multiply(diff)); + } + + return Operand.Create(result); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java new file mode 100644 index 000000000..4210f8cd4 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java @@ -0,0 +1,193 @@ +package toolgood.algorithm.internals.functions.mathsum2; + +import java.math.BigDecimal; +import java.math.MathContext; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_BESSELI extends Function_2 { + public Function_BESSELI(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + public Function_BESSELI(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "BesselI"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber(engine, tempParameter, 0); + if (args1.IsError()) return args1; + + Operand args2 = GetNumber(engine, tempParameter, 1); + if (args2.IsError()) return args2; + + BigDecimal x = args1.NumberValue(); + int n = (int) args2.DoubleValue(); + + return Operand.Create(besselI(n, x)); + } + + private static BigDecimal besselI(int n, BigDecimal x) { + // 处理 x < 0 的情况 + if (x.compareTo(BigDecimal.ZERO) < 0) { + int sign = (n % 2 == 0) ? 1 : -1; + return besselI(n, x.negate()).multiply(BigDecimal.valueOf(sign)); + } + // x == 0 的情况 + if (x.compareTo(BigDecimal.ZERO) == 0) { + return n == 0 ? BigDecimal.ONE : BigDecimal.ZERO; + } + + BigDecimal ax = x.abs(); + BigDecimal epsilon = new BigDecimal("1e-10"); + if (ax.compareTo(epsilon) < 0) { + return n == 0 ? BigDecimal.ONE : BigDecimal.ZERO; + } + + if (n < 0) n = -n; + + // x > 700 时使用近似公式 + if (ax.compareTo(new BigDecimal("700")) > 0) { + BigDecimal exp = new BigDecimal(Math.exp(ax.doubleValue())); + BigDecimal sqrtTerm = new BigDecimal(Math.sqrt(2 * Math.PI * ax.doubleValue())); + BigDecimal factor = exp.divide(sqrtTerm, MathContext.DECIMAL128); + BigDecimal correction = BigDecimal.ONE.subtract( + new BigDecimal("4.0").multiply(new BigDecimal(n * n)).subtract(new BigDecimal("1.0")) + .divide(new BigDecimal("8.0").multiply(ax), MathContext.DECIMAL128) + ); + return factor.multiply(correction); + } + + if (n == 0) return besselI0(x); + if (n == 1) return besselI1(x); + + BigDecimal I0 = besselI0(x); + BigDecimal I1 = besselI1(x); + BigDecimal In = BigDecimal.ZERO; + + for (int k = 1; k < n; k++) { + In = I1.add(new BigDecimal("2.0").multiply(new BigDecimal(k)).divide(x, MathContext.DECIMAL128).multiply(I0)); + I0 = I1; + I1 = In; + } + + return I1; + } + + private static BigDecimal besselI0(BigDecimal x) { + BigDecimal ax = x.abs(); + BigDecimal threePoint75 = new BigDecimal("3.75"); + + if (ax.compareTo(threePoint75) < 0) { + BigDecimal y1 = x.divide(threePoint75, MathContext.DECIMAL128); + y1 = y1.multiply(y1); + return BigDecimal.ONE.add(y1.multiply( + new BigDecimal("3.515622965380465").add(y1.multiply( + new BigDecimal("3.089942465562116").add(y1.multiply( + new BigDecimal("1.206749160761352").add(y1.multiply( + new BigDecimal("0.265973256598487").add(y1.multiply( + new BigDecimal("0.036076845538912").add(y1.multiply(new BigDecimal("0.004581327358717"))) + )) + )) + )) + )) + )); + } + + BigDecimal y2 = threePoint75.divide(ax, MathContext.DECIMAL128); + BigDecimal exp = new BigDecimal(Math.exp(ax.doubleValue())); + BigDecimal sqrtTerm = new BigDecimal(Math.sqrt(2.0 * Math.PI * ax.doubleValue())); + BigDecimal factor = exp.divide(sqrtTerm, MathContext.DECIMAL128); + + return factor.multiply( + new BigDecimal("0.398942280401433").add(y2.multiply( + new BigDecimal("0.013285921344730").add(y2.multiply( + new BigDecimal("0.002253193626842").add(y2.multiply( + new BigDecimal("-0.001575649875251").add(y2.multiply( + new BigDecimal("0.009162816703917").add(y2.multiply( + new BigDecimal("-0.020577062932649").add(y2.multiply( + new BigDecimal("0.026355373177924").add(y2.multiply( + new BigDecimal("-0.016476329612910").add(y2.multiply(new BigDecimal("0.003923769605236"))) + )) + )) + )) + )) + )) + )) + )) + ); + } + + private static BigDecimal besselI1(BigDecimal x) { + BigDecimal ax = x.abs(); + BigDecimal threePoint75 = new BigDecimal("3.75"); + + if (ax.compareTo(threePoint75) < 0) { + BigDecimal y1 = x.divide(threePoint75, MathContext.DECIMAL128); + y1 = y1.multiply(y1); + return x.multiply( + new BigDecimal("0.5").add(y1.multiply( + new BigDecimal("0.878905941521392").add(y1.multiply( + new BigDecimal("0.514988692842374").add(y1.multiply( + new BigDecimal("0.150849342225664").add(y1.multiply( + new BigDecimal("0.026587328231117").add(y1.multiply( + new BigDecimal("0.003015319414231").add(y1.multiply(new BigDecimal("0.000324111013968"))) + )) + )) + )) + )) + )) + ); + } + + BigDecimal y2 = threePoint75.divide(ax, MathContext.DECIMAL128); + BigDecimal exp = new BigDecimal(Math.exp(ax.doubleValue())); + BigDecimal sqrtTerm = new BigDecimal(Math.sqrt(2.0 * Math.PI * ax.doubleValue())); + BigDecimal factor = exp.divide(sqrtTerm, MathContext.DECIMAL128); + + BigDecimal ans = factor.multiply( + new BigDecimal("0.398942280401433").add(y2.multiply( + new BigDecimal("-0.039880242337502").add(y2.multiply( + new BigDecimal("-0.003620182649157").add(y2.multiply( + new BigDecimal("0.001638105403528").add(y2.multiply( + new BigDecimal("-0.010315550635288").add(y2.multiply( + new BigDecimal("0.022829679456897").add(y2.multiply( + new BigDecimal("-0.028953129286367").add(y2.multiply( + new BigDecimal("0.017876545768998").subtract(y2.multiply(new BigDecimal("0.004200596567986"))) + )) + )) + )) + )) + )) + )) + )) + ); + + return x.compareTo(BigDecimal.ZERO) < 0 ? ans.negate() : ans; + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + funcs[1].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java new file mode 100644 index 000000000..04cf2faf5 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java @@ -0,0 +1,133 @@ +package toolgood.algorithm.internals.functions.mathsum2; + +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_BESSELJ extends Function_2 { + public Function_BESSELJ(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public String Name() { + return "BesselJ"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsError()) return args1; + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsError()) return args2; + + double x = args1.DoubleValue(); + int n = (int) args2.DoubleValue(); + + return Operand.Create(besselJ(n, x)); + } + + private static double besselJ(int n, double x) { + if (x == 0.0) { + return (n == 0) ? 1.0 : 0.0; + } + + if (n < 0) n = -n; + + double ax = Math.abs(x); + if (ax < 1e-10) { + return (n == 0) ? 1.0 : 0.0; + } + + if (n == 0) return besselJ0(x); + if (n == 1) return besselJ1(x); + + if (ax > n) { + double J0 = besselJ0(x); + double J1 = besselJ1(x); + double Jn = 0.0; + for (int k = 1; k < n; k++) { + Jn = (2.0 * k / x) * J1 - J0; + J0 = J1; + J1 = Jn; + } + return J1; + } + + int m = (int) (1.5 * n + 10); + double[] J = new double[m + 2]; + J[m + 1] = 0.0; + J[m] = 1.0; + for (int k = m; k >= 1; k--) { + J[k - 1] = (2.0 * k / x) * J[k] - J[k + 1]; + } + double sum = 0.0; + for (int k = 0; k <= m; k += 2) { + sum += 2.0 * J[k]; + } + sum -= J[0]; + return J[n] / sum; + } + + private static double besselJ0(double x) { + double ax = Math.abs(x); + if (ax < 8.0) { + double y1 = x * x; + double ans1 = 57568490574.0 + y1 * (-13362590354.0 + y1 * (651619640.7 + + y1 * (-11214424.18 + y1 * (77392.33017 + y1 * (-184.9052456))))); + double ans2 = 57568490411.0 + y1 * (1029532985.0 + y1 * (9494680.718 + + y1 * (59272.64853 + y1 * (267.8532712 + y1 * 1.0)))); + return ans1 / ans2; + } + double z = 8.0 / ax; + double y2 = z * z; + double xx = ax - 0.7853981633974483; + double ans3 = 1.0 + y2 * (-0.1098628627e-2 + y2 * (0.2734510407e-4 + + y2 * (-0.2073370639e-5 + y2 * 0.2093887211e-6))); + double ans4 = -0.1562499995e-1 + y2 * (0.1430488765e-3 + + y2 * (-0.6911147651e-5 + y2 * (0.7621095161e-6 + - y2 * 0.934935152e-7))); + return Math.sqrt(0.6366197723675814 / ax) * (Math.cos(xx) * ans3 - z * Math.sin(xx) * ans4); + } + + private static double besselJ1(double x) { + double ax = Math.abs(x); + if (ax < 8.0) { + double y1 = x * x; + double ans1 = x * (72362614232.0 + y1 * (-7895059235.0 + y1 * (242396853.1 + + y1 * (-2972611.439 + y1 * (15704.48260 + y1 * (-30.16036606)))))); + double ans2 = 144725228442.0 + y1 * (2300535178.0 + y1 * (18583304.74 + + y1 * (99447.43394 + y1 * (376.9991397 + y1 * 1.0)))); + return ans1 / ans2; + } + double z = 8.0 / ax; + double y2 = z * z; + double xx = ax - 2.356194490192345; + double ans3 = 1.0 + y2 * (0.183105e-2 + y2 * (-0.3516396496e-4 + + y2 * (0.2457520174e-5 + y2 * (-0.240337019e-6)))); + double ans4 = 0.04687499995 + y2 * (-0.2002690873e-3 + + y2 * (0.8449199096e-5 + y2 * (-0.88228987e-6 + + y2 * 0.105787412e-6))); + double ans = Math.sqrt(0.6366197723675814 / ax) * (Math.cos(xx) * ans3 - z * Math.sin(xx) * ans4); + return (x < 0) ? -ans : ans; + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java new file mode 100644 index 000000000..e7e5a5932 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java @@ -0,0 +1,124 @@ +package toolgood.algorithm.internals.functions.mathsum2; + +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_BESSELK extends Function_2 { + public Function_BESSELK(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public String Name() { + return "BesselK"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsError()) return args1; + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsError()) return args2; + + double x = args1.DoubleValue(); + int n = (int) args2.DoubleValue(); + + if (x <= 0) { + return ParameterError(1); + } + + return Operand.Create(besselK(n, x)); + } + + private static double besselK(int n, double x) { + if (n < 0) n = -n; + + if (n == 0) return besselK0(x); + if (n == 1) return besselK1(x); + + double K0 = besselK0(x); + double K1 = besselK1(x); + double Kn = 0.0; + for (int k = 1; k < n; k++) { + Kn = K1 + 2.0 * k / x * K0; + K0 = K1; + K1 = Kn; + } + return K1; + } + + private static double besselK0(double x) { + if (x <= 2.0) { + double y1 = x * x / 4.0; + return -Math.log(x / 2.0) * besselI0(x) + (-0.5772156649015329 + + y1 * (0.4227843350984671 + y1 * (0.230697567077446 + y1 * (0.034885890266341 + + y1 * (0.002626979711643 + y1 * (0.000107502176243 + y1 * 0.000007400456812)))))); + } + double y2 = 2.0 / x; + return Math.exp(-x) / Math.sqrt(x) * (1.2533141373155 + + y2 * (-0.07832358285526 + y2 * (0.021895687854228 + y2 * (-0.01062462809774 + + y2 * (0.005878072214632 + y2 * (-0.00251540161764 + y2 * 0.000532080305632)))))); + } + + private static double besselK1(double x) { + if (x <= 2.0) { + double y1 = x * x / 4.0; + return Math.log(x / 2.0) * besselI1(x) + (1.0 / x) * (1.0 + + y1 * (0.154431442036717 + y1 * (-0.672785797513523 + y1 * (-0.181568943578864 + + y1 * (-0.019194020400716 + y1 * (0.001104044918568 + y1 * 0.000046862429868)))))); + } + double y2 = 2.0 / x; + return Math.exp(-x) / Math.sqrt(x) * (1.2533141373155 + + y2 * (0.234986192707248 + y2 * (-0.03655620203402 + y2 * (0.015042680553908 + + y2 * (-0.007803534366237 + y2 * (0.003256142832609 + y2 * (-0.000682450383692))))))); + } + + private static double besselI0(double x) { + double ax = Math.abs(x); + if (ax < 3.75) { + double y1 = x / 3.75; + y1 *= y1; + return 1.0 + y1 * (3.515622965380465 + y1 * (3.089942465562116 + y1 * (1.206749160761352 + + y1 * (0.265973256598487 + y1 * (0.036076845538912 + y1 * 0.004581327358717))))); + } + double y2 = 3.75 / ax; + return (Math.exp(ax) / Math.sqrt(2.0 * Math.PI * ax)) * (0.398942280401433 + y2 * (0.01328592134473 + + y2 * (0.002253193626842 + y2 * (-0.001575649875251 + y2 * (0.009162816703917 + + y2 * (-0.020577062932649 + y2 * (0.026355373177924 + y2 * (-0.01647632961291 + y2 * 0.003923769605236)))))))); + } + + private static double besselI1(double x) { + double ax = Math.abs(x); + if (ax < 3.75) { + double y1 = x / 3.75; + y1 *= y1; + return x * (0.5 + y1 * (0.878905941521392 + y1 * (0.514988692842374 + y1 * (0.150849342225664 + + y1 * (0.026587328231117 + y1 * (0.003015319414231 + y1 * 0.000324111013968)))))); + } + double y2 = 3.75 / ax; + double ans = (Math.exp(ax) / Math.sqrt(2.0 * Math.PI * ax)) * (0.398942280401433 + y2 * (-0.039880242337502 + + y2 * (-0.003620182649157 + y2 * (0.001638105403528 + y2 * (-0.010315550635288 + + y2 * (0.022829679456897 + y2 * (-0.028953129286367 + y2 * (0.017876545768998 - y2 * 0.004200596567986)))))))); + return (x < 0) ? -ans : ans; + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java new file mode 100644 index 000000000..b99cb4899 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java @@ -0,0 +1,154 @@ +package toolgood.algorithm.internals.functions.mathsum2; + +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_BESSELY extends Function_2 { + public Function_BESSELY(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } + + @Override + public String Name() { + return "BesselY"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsError()) return args1; + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsError()) return args2; + + double x = args1.DoubleValue(); + int n = (int) args2.DoubleValue(); + + if (x <= 0) { + return ParameterError(1); + } + + return Operand.Create(besselY(n, x)); + } + + private static double besselY(int n, double x) { + if (n < 0) n = -n; + + if (n == 0) return besselY0(x); + if (n == 1) return besselY1(x); + + double Y0 = besselY0(x); + double Y1 = besselY1(x); + double Yn = 0.0; + for (int k = 1; k < n; k++) { + Yn = (2.0 * k / x) * Y1 - Y0; + Y0 = Y1; + Y1 = Yn; + } + return Y1; + } + + private static double besselY0(double x) { + if (x < 8.0) { + double y1 = x * x; + double ans1 = -2957821389.0 + y1 * (7062834065.0 + y1 * (-512359803.6 + + y1 * (10879881.29 + y1 * (-86327.92757 + y1 * 228.4622733)))); + double ans2 = 40076544269.0 + y1 * (745249964.8 + y1 * (7189466.438 + + y1 * (47447.2647 + y1 * (226.1030244 + y1 * 1.0)))); + return (ans1 / ans2) + 0.6366197723675814 * besselJ0(x) * Math.log(x); + } + double z = 8.0 / x; + double y2 = z * z; + double xx = x - 0.7853981633974483; + double ans3 = 1.0 + y2 * (-0.1098628627e-2 + y2 * (0.2734510407e-4 + + y2 * (-0.2073370639e-5 + y2 * 0.2093887211e-6))); + double ans4 = -0.1562499995e-1 + y2 * (0.1430488765e-3 + + y2 * (-0.6911147651e-5 + y2 * (0.7621095161e-6 + + y2 * (-0.934935152e-7)))); + return Math.sqrt(0.6366197723675814 / x) * (Math.sin(xx) * ans3 + z * Math.cos(xx) * ans4); + } + + private static double besselY1(double x) { + if (x < 8.0) { + double y1 = x * x; + double ans1 = x * (-0.4900604943e13 + y1 * (0.127527439e13 + + y1 * (-0.5153438139e11 + y1 * (0.7349264551e9 + + y1 * (-0.4237922726e7 + y1 * 0.8511937935e4))))); + double ans2 = 0.249958057e14 + y1 * (0.4244419664e12 + + y1 * (0.3733650367e10 + y1 * (0.2245904002e8 + + y1 * (0.1020426050e6 + y1 * (0.3549632885e3 + y1))))); + return (ans1 / ans2) + 0.6366197723675814 * (besselJ1(x) * Math.log(x) - 1.0 / x); + } + double z = 8.0 / x; + double y2 = z * z; + double xx = x - 2.356194490192345; + double ans3 = 1.0 + y2 * (0.183105e-2 + y2 * (-0.3516396496e-4 + + y2 * (0.2457520174e-5 + y2 * (-0.240337019e-6)))); + double ans4 = 0.04687499995 + y2 * (-0.2002690873e-3 + + y2 * (0.8449199096e-5 + y2 * (-0.88228987e-6 + + y2 * 0.105787412e-6))); + return Math.sqrt(0.6366197723675814 / x) * (Math.sin(xx) * ans3 + z * Math.cos(xx) * ans4); + } + + private static double besselJ0(double x) { + double ax = Math.abs(x); + if (ax < 8.0) { + double y1 = x * x; + double ans1 = 57568490574.0 + y1 * (-13362590354.0 + y1 * (651619640.7 + + y1 * (-11214424.18 + y1 * (77392.33017 + y1 * (-184.9052456))))); + double ans2 = 57568490411.0 + y1 * (1029532985.0 + y1 * (9494680.718 + + y1 * (59272.64853 + y1 * (267.8532712 + y1 * 1.0)))); + return ans1 / ans2; + } + double z = 8.0 / ax; + double y2 = z * z; + double xx = ax - 0.7853981633974483; + double ans3 = 1.0 + y2 * (-0.1098628627e-2 + y2 * (0.2734510407e-4 + + y2 * (-0.2073370639e-5 + y2 * 0.2093887211e-6))); + double ans4 = -0.1562499995e-1 + y2 * (0.1430488765e-3 + + y2 * (-0.6911147651e-5 + y2 * (0.7621095161e-6 + - y2 * 0.934935152e-7))); + return Math.sqrt(0.6366197723675814 / ax) * (Math.cos(xx) * ans3 - z * Math.sin(xx) * ans4); + } + + private static double besselJ1(double x) { + double ax = Math.abs(x); + if (ax < 8.0) { + double y1 = x * x; + double ans1 = x * (72362614232.0 + y1 * (-7895059235.0 + y1 * (242396853.1 + + y1 * (-2972611.439 + y1 * (15704.4826 + y1 * (-30.16036606)))))); + double ans2 = 144725228442.0 + y1 * (2300535178.0 + y1 * (18583304.74 + + y1 * (99447.43394 + y1 * (376.9991397 + y1 * 1.0)))); + return ans1 / ans2; + } + double z = 8.0 / ax; + double y2 = z * z; + double xx = ax - 2.356194490192345; + double ans3 = 1.0 + y2 * (0.183105e-2 + y2 * (-0.3516396496e-4 + + y2 * (0.2457520174e-5 + y2 * (-0.240337019e-6)))); + double ans4 = 0.04687499995 + y2 * (-0.2002690873e-3 + + y2 * (0.8449199096e-5 + y2 * (-0.88228987e-6 + + y2 * 0.105787412e-6))); + double ans = Math.sqrt(0.6366197723675814 / ax) * (Math.cos(xx) * ans3 - z * Math.sin(xx) * ans4); + return (x < 0) ? -ans : ans; + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java new file mode 100644 index 000000000..be75cf6ab --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java @@ -0,0 +1,62 @@ +package toolgood.algorithm.internals.functions.mathsum2; + +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_ERF extends Function_1 { + public Function_ERF(FunctionBase func) { + super(func); + } + + @Override + public String Name() { + return "Erf"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsError()) return args1; + double x = args1.DoubleValue(); + return Operand.Create(erf(x)); + } + + private static double erf(double x) { + final double a1 = 0.254829592; + final double a2 = -0.284496736; + final double a3 = 1.421413741; + final double a4 = -1.453152027; + final double a5 = 1.061405429; + final double p = 0.3275911; + + int sign = (x < 0) ? -1 : 1; + x = Math.abs(x); + + if (x > 6.0) { + return sign * 1.0; + } + + double t = 1.0 / (1.0 + p * x); + double y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x); + + return sign * y; + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java new file mode 100644 index 000000000..c59226c40 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java @@ -0,0 +1,65 @@ +package toolgood.algorithm.internals.functions.mathsum2; + +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; + +public class Function_ERFC extends Function_1 { + public Function_ERFC(FunctionBase func) { + super(func); + } + + @Override + public String Name() { + return "Erfc"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsError()) return args1; + double x = args1.DoubleValue(); + return Operand.Create(erfc(x)); + } + + private static double erfc(double x) { + if (x < 0) { + return 2.0 - erfc(-x); + } + if (x > 6.0) { + return 0.0; + } + return 1.0 - erf(x); + } + + private static double erf(double x) { + final double a1 = 0.254829592; + final double a2 = -0.284496736; + final double a3 = 1.421413741; + final double a4 = -1.453152027; + final double a5 = 1.061405429; + final double p = 0.3275911; + + double t = 1.0 / (1.0 + p * x); + double y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x); + + return y; + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOT.java new file mode 100644 index 000000000..2a57f3b86 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOT.java @@ -0,0 +1,33 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.BiFunction; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_ACOT extends Function_1 { + public Function_ACOT(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (!args1.IsNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Acot"); + if (args1.IsError()) { + return args1; + } + } + double value = args1.DoubleValue(); + return Operand.Create(Math.PI / 2.0 - Math.atan(value)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Acot"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOTH.java new file mode 100644 index 000000000..9c79216a5 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOTH.java @@ -0,0 +1,36 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.BiFunction; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_ACOTH extends Function_1 { + public Function_ACOTH(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (!args1.IsNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Acoth"); + if (args1.IsError()) { + return args1; + } + } + double d = args1.DoubleValue(); + if (Math.abs(d) <= 1) { + return ParameterError(1); + } + return Operand.Create(0.5 * Math.log((d + 1) / (d - 1))); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Acoth"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COTH.java new file mode 100644 index 000000000..45a873891 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COTH.java @@ -0,0 +1,37 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.BiFunction; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_COTH extends Function_1 { + public Function_COTH(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (!args1.IsNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Coth"); + if (args1.IsError()) { + return args1; + } + } + double value = args1.DoubleValue(); + double sinhValue = Math.sinh(value); + if (sinhValue == 0) { + return Operand.Create(Double.POSITIVE_INFINITY); + } + return Operand.Create(Math.cosh(value) / sinhValue); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Coth"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSCH.java new file mode 100644 index 000000000..3fcb4637c --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSCH.java @@ -0,0 +1,37 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.BiFunction; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_CSCH extends Function_1 { + public Function_CSCH(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (!args1.IsNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Csch"); + if (args1.IsError()) { + return args1; + } + } + double value = args1.DoubleValue(); + double sinhValue = Math.sinh(value); + if (sinhValue == 0) { + return Operand.Create(Double.POSITIVE_INFINITY); + } + return Operand.Create(1.0 / sinhValue); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Csch"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SECH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SECH.java new file mode 100644 index 000000000..54b5fcde2 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SECH.java @@ -0,0 +1,37 @@ +package toolgood.algorithm.internals.functions.mathtrigonometric; + +import java.lang.StringBuilder; +import java.util.function.BiFunction; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; + +class Function_SECH extends Function_1 { + public Function_SECH(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(work, tempParameter); + if (!args1.IsNumber()) { + args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sech"); + if (args1.IsError()) { + return args1; + } + } + double value = args1.DoubleValue(); + double coshValue = Math.cosh(value); + if (coshValue == 0) { + return Operand.Create(Double.POSITIVE_INFINITY); + } + return Operand.Create(1.0 / coshValue); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Sech"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICHAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICHAR.java new file mode 100644 index 000000000..298230974 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICHAR.java @@ -0,0 +1,35 @@ +package toolgood.algorithm.internals.functions.string; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_UNICHAR extends Function_1 { + public Function_UNICHAR(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsError()) return args1; + + int code = args1.IntValue(); + if (code < 0 || code > 0x10FFFF || (code >= 0xD800 && code <= 0xDFFF)) { + return ParameterError(1); + } + try { + return Operand.Create(new String(Character.toChars(code))); + } catch (Exception e) { + return ParameterError(1); + } + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "UniChar"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICODE.java new file mode 100644 index 000000000..2cb2441f8 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICODE.java @@ -0,0 +1,31 @@ +package toolgood.algorithm.internals.functions.string; + +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; + +public class Function_UNICODE extends Function_1 { + public Function_UNICODE(FunctionBase func1) { + super(func1); + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError()) return args1; + + String text = args1.TextValue(); + if (text == null || text.isEmpty()) { + return ParameterError(1); + } + return Operand.Create(Character.codePointAt(text, 0)); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "Unicode"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java index 42786e867..78bc3f5ad 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java @@ -63,7 +63,9 @@ import toolgood.algorithm.internals.functions.datetimes.Function_DATEDIF; import toolgood.algorithm.internals.functions.datetimes.Function_DATEVALUE; import toolgood.algorithm.internals.functions.datetimes.Function_DAY; +import toolgood.algorithm.internals.functions.datetimes.Function_DAYS; import toolgood.algorithm.internals.functions.datetimes.Function_DAYS360; +import toolgood.algorithm.internals.functions.datetimes.Function_YEARFRAC; import toolgood.algorithm.internals.functions.datetimes.Function_EDATE; import toolgood.algorithm.internals.functions.datetimes.Function_EOMONTH; import toolgood.algorithm.internals.functions.datetimes.Function_HOUR; @@ -96,8 +98,10 @@ import toolgood.algorithm.internals.functions.flow.Function_NOT; import toolgood.algorithm.internals.functions.operator.Function_OR; import toolgood.algorithm.internals.functions.operator.Function_OR_N; +import toolgood.algorithm.internals.functions.financial.*; import toolgood.algorithm.internals.functions.mathbase.*; import toolgood.algorithm.internals.functions.mathsum.*; +import toolgood.algorithm.internals.functions.mathsum2.*; import toolgood.algorithm.internals.functions.mathtransformation.*; import toolgood.algorithm.internals.functions.mathtrigonometric.*; import toolgood.algorithm.internals.functions.operator.Function_Connect; @@ -515,6 +519,54 @@ public FunctionBase visitATAN2_fun(mathParser.ATAN2_funContext context) return new Function_ATAN2(args1, args2); } + public FunctionBase visitCOT_fun(mathParser.COT_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_COT(args1); + } + + public FunctionBase visitCSC_fun(mathParser.CSC_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_CSC(args1); + } + + public FunctionBase visitSEC_fun(mathParser.SEC_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_SEC(args1); + } + + public FunctionBase visitACOT_fun(mathParser.ACOT_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ACOT(args1); + } + + public FunctionBase visitACOTH_fun(mathParser.ACOTH_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ACOTH(args1); + } + + public FunctionBase visitCOTH_fun(mathParser.COTH_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_COTH(args1); + } + + public FunctionBase visitCSCH_fun(mathParser.CSCH_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_CSCH(args1); + } + + public FunctionBase visitSECH_fun(mathParser.SECH_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_SECH(args1); + } + public FunctionBase visitFIXED_fun(mathParser.FIXED_funContext context) { List exprs = context.expr(); @@ -785,7 +837,7 @@ public FunctionBase visitLOG_fun(mathParser.LOG_funContext context) public FunctionBase visitLOG10_fun(mathParser.LOG10_funContext context) { FunctionBase args1 = context.expr().accept(this); - return new Function_LOG(args1, null); + return new Function_LOG10(args1); } public FunctionBase visitMULTINOMIAL_fun(mathParser.MULTINOMIAL_funContext context) @@ -1028,6 +1080,18 @@ public FunctionBase visitVALUE_fun(mathParser.VALUE_funContext context) return new Function_VALUE(args1); } + public FunctionBase visitUNICHAR_fun(mathParser.UNICHAR_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_UNICHAR(args1); + } + + public FunctionBase visitUNICODE_fun(mathParser.UNICODE_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_UNICODE(args1); + } + //#endregion string //#region MyDate time @@ -1153,6 +1217,26 @@ public FunctionBase visitDAYS360_fun(mathParser.DAYS360_funContext context) return new Function_DAYS360(args1, args2, null); } + public FunctionBase visitDAYS_fun(mathParser.DAYS_funContext context) + { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + return new Function_DAYS(args1, args2); + } + + public FunctionBase visitYEARFRAC_fun(mathParser.YEARFRAC_funContext context) + { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 3) { + FunctionBase args3 = exprs.get(2).accept(this); + return new Function_YEARFRAC(args1, args2, args3); + } + return new Function_YEARFRAC(args1, args2, null); + } + public FunctionBase visitEDATE_fun(mathParser.EDATE_funContext context) { List exprs = context.expr(); @@ -1668,6 +1752,218 @@ public FunctionBase visitWEIBULL_fun(mathParser.WEIBULL_funContext context) //#endregion sum + //#region mathsum2 + + public FunctionBase visitBESSELI_fun(mathParser.BESSELI_funContext context) + { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + return new Function_BESSELI(args1, args2); + } + + public FunctionBase visitBESSELJ_fun(mathParser.BESSELJ_funContext context) + { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + return new Function_BESSELJ(args1, args2); + } + + public FunctionBase visitBESSELK_fun(mathParser.BESSELK_funContext context) + { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + return new Function_BESSELK(args1, args2); + } + + public FunctionBase visitBESSELY_fun(mathParser.BESSELY_funContext context) + { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + return new Function_BESSELY(args1, args2); + } + + public FunctionBase visitERF_fun(mathParser.ERF_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ERF(args1); + } + + public FunctionBase visitERFC_fun(mathParser.ERFC_funContext context) + { + FunctionBase args1 = context.expr().accept(this); + return new Function_ERFC(args1); + } + + //#endregion mathsum2 + + //#region financial + + public FunctionBase visitDB_fun(mathParser.DB_funContext context) + { + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); + } + return new Function_DB(args); + } + + public FunctionBase visitDDB_fun(mathParser.DDB_funContext context) + { + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); + } + return new Function_DDB(args); + } + + public FunctionBase visitFV_fun(mathParser.FV_funContext context) + { + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); + } + return new Function_FV(args); + } + + public FunctionBase visitIPMT_fun(mathParser.IPMT_funContext context) + { + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); + } + return new Function_IPMT(args); + } + + public FunctionBase visitIRR_fun(mathParser.IRR_funContext context) + { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + if (exprs.size() == 1) { + return new Function_IRR(args1, null); + } + FunctionBase args2 = exprs.get(1).accept(this); + return new Function_IRR(args1, args2); + } + + public FunctionBase visitMIRR_fun(mathParser.MIRR_funContext context) + { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); + return new Function_MIRR(args1, args2, args3); + } + + public FunctionBase visitNPER_fun(mathParser.NPER_funContext context) + { + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); + } + return new Function_NPER(args); + } + + public FunctionBase visitNPV_fun(mathParser.NPV_funContext context) + { + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); + } + return new Function_NPV(args); + } + + public FunctionBase visitPMT_fun(mathParser.PMT_funContext context) + { + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); + } + return new Function_PMT(args); + } + + public FunctionBase visitPPMT_fun(mathParser.PPMT_funContext context) + { + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); + } + return new Function_PPMT(args); + } + + public FunctionBase visitPV_fun(mathParser.PV_funContext context) + { + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); + } + return new Function_PV(args); + } + + public FunctionBase visitRATE_fun(mathParser.RATE_funContext context) + { + List exprs = context.expr(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); + } + return new Function_RATE(args); + } + + public FunctionBase visitSLN_fun(mathParser.SLN_funContext context) + { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); + return new Function_SLN(args1, args2, args3); + } + + public FunctionBase visitSYD_fun(mathParser.SYD_funContext context) + { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); + FunctionBase args4 = exprs.get(3).accept(this); + return new Function_SYD(args1, args2, args3, args4); + } + + public FunctionBase visitXIRR_fun(mathParser.XIRR_funContext context) + { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + if (exprs.size() == 2) { + return new Function_XIRR(args1, args2, null); + } + FunctionBase args3 = exprs.get(2).accept(this); + return new Function_XIRR(args1, args2, args3); + } + + public FunctionBase visitXNPV_fun(mathParser.XNPV_funContext context) + { + List exprs = context.expr(); + FunctionBase args1 = exprs.get(0).accept(this); + FunctionBase args2 = exprs.get(1).accept(this); + FunctionBase args3 = exprs.get(2).accept(this); + return new Function_XNPV(args1, args2, args3); + } + + //#endregion financial + //#region csharp public FunctionBase visitURLENCODE_fun(mathParser.URLENCODE_funContext context) From 5a35bfca8a011dd638d0c92e5cb45efd57c744bf Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 13:13:15 +0800 Subject: [PATCH 33/98] fix --- .../main/java/toolgood/algorithm/Operand.java | 32 ++++++++++++------- .../toolgood/algorithm/math/mathLexer.java | 2 ++ .../toolgood/algorithm/math/mathParser.java | 2 ++ .../toolgood/algorithm/math/mathVisitor.java | 2 ++ 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/Operand.java b/java/src/main/java/toolgood/algorithm/Operand.java index b99e92bcb..0fc5b1b24 100644 --- a/java/src/main/java/toolgood/algorithm/Operand.java +++ b/java/src/main/java/toolgood/algorithm/Operand.java @@ -47,6 +47,17 @@ public abstract class Operand { */ public static final Operand None = new OperandNone(); + // 整数缓存范围: -1000 ~ 1000,共2001个值 + private static final int INT_CACHE_OFFSET = 1000; + private static final int INT_CACHE_SIZE = 2001; + private static final Operand[] INT_CACHE = new Operand[INT_CACHE_SIZE]; + + static { + for (int i = 0; i < INT_CACHE_SIZE; i++) { + INT_CACHE[i] = new OperandInt(i - INT_CACHE_OFFSET); + } + // ONE和ZERO已经在初始化时设置,不需要在这里重新设置 + } /** * 是否为空值 @@ -143,11 +154,6 @@ public abstract class Operand { */ public double DoubleValue() { throw new UnsupportedOperationException(); } - /** - * BigDecimal值 - */ - public Double DoubleValue() { throw new UnsupportedOperationException(); } - /** * int值 */ @@ -198,6 +204,9 @@ public static Operand Create(boolean obj) { * 创建操作数 */ public static Operand Create(short obj) { + if (obj >= -INT_CACHE_OFFSET && obj <= INT_CACHE_OFFSET) { + return INT_CACHE[obj + INT_CACHE_OFFSET]; + } return new OperandInt(obj); } @@ -205,6 +214,9 @@ public static Operand Create(short obj) { * 创建操作数 */ public static Operand Create(int obj) { + if (obj >= -INT_CACHE_OFFSET && obj <= INT_CACHE_OFFSET) { + return INT_CACHE[obj + INT_CACHE_OFFSET]; + } return new OperandInt(obj); } @@ -212,6 +224,9 @@ public static Operand Create(int obj) { * 创建操作数 */ public static Operand Create(long obj) { + if (obj >= -INT_CACHE_OFFSET && obj <= INT_CACHE_OFFSET) { + return INT_CACHE[(int)obj + INT_CACHE_OFFSET]; + } return new OperandBigDecimal(new BigDecimal(obj)); } @@ -269,12 +284,7 @@ public static Operand Create(MyDate obj) { return new OperandMyDate(obj); } - /** - * 创建操作数 - */ - public static Operand Create(long timestamp) { - return new OperandMyDate(new MyDate(timestamp)); - } + /** * 创建操作数 diff --git a/java/src/main/java/toolgood/algorithm/math/mathLexer.java b/java/src/main/java/toolgood/algorithm/math/mathLexer.java index 8507890b2..f5e2de651 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathLexer.java +++ b/java/src/main/java/toolgood/algorithm/math/mathLexer.java @@ -1,4 +1,6 @@ // Generated from math.g4 by ANTLR 4.13.2 +package toolgood.algorithm.math; + import org.antlr.v4.runtime.Lexer; import org.antlr.v4.runtime.CharStream; import org.antlr.v4.runtime.Token; diff --git a/java/src/main/java/toolgood/algorithm/math/mathParser.java b/java/src/main/java/toolgood/algorithm/math/mathParser.java index 90a9851d5..2ebfab52f 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathParser.java +++ b/java/src/main/java/toolgood/algorithm/math/mathParser.java @@ -1,4 +1,6 @@ // Generated from math.g4 by ANTLR 4.13.2 +package toolgood.algorithm.math; + import org.antlr.v4.runtime.atn.*; import org.antlr.v4.runtime.dfa.DFA; import org.antlr.v4.runtime.*; diff --git a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java index c3c45f7d1..a81021cb2 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java +++ b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java @@ -1,4 +1,6 @@ // Generated from math.g4 by ANTLR 4.13.2 +package toolgood.algorithm.math; + import org.antlr.v4.runtime.tree.ParseTreeVisitor; /** From 3844c5351e1fd746d7f0a92e03618e8e56dd4865 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 13:21:54 +0800 Subject: [PATCH 34/98] fix --- .../internals/functions/FunctionUtil.java | 24 +------------------ .../algorithm/mathNet/RootFinding/Brent.java | 3 +-- 2 files changed, 2 insertions(+), 25 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java index e617b13e2..97f8caf20 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java @@ -443,27 +443,5 @@ public static int GetRank(List values, BigDecimal num, boolean desce return count > 0 ? rank : 0; } - /** - * 获取 num 在 values 列表中的 F_base_GetList 辅助(BigDecimal 单个 Operand) - */ - public static boolean F_base_GetList(List args, List list) { - for (Operand item : args) { - if (item.IsNumber()) { - list.add(item.NumberValue()); - } else if (item.IsArray()) { - boolean o = F_base_GetList(item.ArrayValue(), list); - if (!o) return false; - } else if (item.IsJson()) { - Operand i = item.ToArray(null); - if (i.IsError()) return false; - boolean o = F_base_GetList(i.ArrayValue(), list); - if (!o) return false; - } else { - Operand o = item.ToNumber(null); - if (o.IsError()) return false; - list.add(o.NumberValue()); - } - } - return true; - } + } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java index 0c63c0ae3..52bb2805d 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java @@ -1,7 +1,6 @@ package toolgood.algorithm.mathNet.RootFinding; - - +import java.util.function.Function; import toolgood.algorithm.mathNet.Precision; From 5326e91773b913ab0332d8798a0c814143ae916d Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 14:01:14 +0800 Subject: [PATCH 35/98] fix --- .../toolgood/algorithm/AlgorithmEngine.java | 30 +- .../toolgood/algorithm/AlgorithmEngineEx.java | 66 +- .../algorithm/AlgorithmEngineHelper.java | 38 +- .../main/java/toolgood/algorithm/Operand.java | 128 +-- .../java/toolgood/algorithm/OperandImpl.java | 757 ------------------ .../algorithm/enums/AreaUnitType.java | 2 +- .../algorithm/enums/CalculateTreeType.java | 10 +- .../algorithm/enums/ConditionTreeType.java | 6 +- .../algorithm/enums/DistanceUnitType.java | 2 +- .../algorithm/enums/MassUnitType.java | 4 +- .../toolgood/algorithm/enums/OperandType.java | 4 +- .../algorithm/enums/VolumeUnitType.java | 2 +- .../algorithm/internals/CalculateTree.java | 6 +- .../algorithm/internals/ConditionTree.java | 6 +- .../algorithm/internals/DiyNameInfo.java | 12 +- .../algorithm/internals/DiyNameKeyInfo.java | 4 +- .../toolgood/algorithm/internals/MyDate.java | 2 +- .../algorithm/internals/ParameterType.java | 6 +- .../algorithm/internals/RegexHelper.java | 18 +- .../internals/functions/FunctionBase.java | 34 +- .../internals/functions/FunctionUtil.java | 50 +- .../functions/csharp/Function_HAS.java | 2 +- .../functions/csharp/Function_HASVALUE.java | 2 +- .../csharp/Function_REGEXREPALCE.java | 4 +- .../internals/functions/csharpweb/Base64.java | 2 +- .../csharpweb/Function_BASE64TOTEXT.java | 2 +- .../csharpweb/Function_BASE64URLTOTEXT.java | 2 +- .../csharpweb/Function_HTMLDECODE.java | 2 +- .../csharpweb/Function_HTMLENCODE.java | 2 +- .../csharpweb/Function_TEXTTOBASE64.java | 2 +- .../csharpweb/Function_TEXTTOBASE64URL.java | 2 +- .../csharpweb/Function_URLDECODE.java | 4 +- .../csharpweb/Function_URLENCODE.java | 4 +- .../functions/datetimes/Function_ADDDAYS.java | 4 +- .../datetimes/Function_ADDHOURS.java | 4 +- .../datetimes/Function_ADDMINUTES.java | 4 +- .../datetimes/Function_ADDMONTHS.java | 4 +- .../datetimes/Function_ADDSECONDS.java | 4 +- .../datetimes/Function_ADDYEARS.java | 4 +- .../functions/datetimes/Function_DATE.java | 2 +- .../functions/datetimes/Function_DATEDIF.java | 2 +- .../datetimes/Function_DATEVALUE.java | 14 +- .../functions/datetimes/Function_DAY.java | 2 +- .../functions/datetimes/Function_DAYS.java | 2 +- .../functions/datetimes/Function_DAYS360.java | 6 +- .../functions/datetimes/Function_EDATE.java | 4 +- .../functions/datetimes/Function_EOMONTH.java | 10 +- .../functions/datetimes/Function_HOUR.java | 2 +- .../functions/datetimes/Function_MINUTE.java | 2 +- .../functions/datetimes/Function_MONTH.java | 2 +- .../datetimes/Function_NETWORKDAYS.java | 4 +- .../functions/datetimes/Function_NOW.java | 2 +- .../functions/datetimes/Function_SECOND.java | 2 +- .../functions/datetimes/Function_TIME.java | 2 +- .../datetimes/Function_TIMESTAMP.java | 6 +- .../datetimes/Function_TIMEVALUE.java | 4 +- .../functions/datetimes/Function_TODAY.java | 2 +- .../functions/datetimes/Function_WEEKDAY.java | 10 +- .../functions/datetimes/Function_WEEKNUM.java | 6 +- .../functions/datetimes/Function_WORKDAY.java | 6 +- .../datetimes/Function_YEARFRAC.java | 4 +- .../functions/financial/Function_DB.java | 4 +- .../functions/financial/Function_DDB.java | 2 +- .../functions/financial/Function_FV.java | 2 +- .../functions/financial/Function_IPMT.java | 2 +- .../functions/financial/Function_NPV.java | 2 +- .../functions/financial/Function_PPMT.java | 2 +- .../functions/financial/Function_PV.java | 2 +- .../functions/financial/Function_RATE.java | 2 +- .../functions/financial/Function_SLN.java | 2 +- .../functions/financial/Function_SYD.java | 2 +- .../functions/financial/Function_XNPV.java | 2 +- .../functions/flow/Function_IFS.java | 2 +- .../functions/flow/Function_SWITCH.java | 2 +- .../functions/mathbase/Function_ARABIC.java | 2 +- .../functions/mathbase/Function_DELTA.java | 2 +- .../functions/mathbase/Function_GESTEP.java | 2 +- .../mathbase/Function_MULTINOMIAL.java | 2 +- .../mathbase/Function_Percentage.java | 6 +- .../functions/mathbase/Function_ROMAN.java | 4 +- .../functions/mathsum/Function_SMALL.java | 6 +- .../functions/mathsum/Function_SUMIF.java | 4 +- .../functions/mathsum2/Function_BESSELI.java | 6 +- .../functions/operator/Function_AND.java | 6 +- .../functions/operator/Function_OR.java | 6 +- .../string/Function_CONCATENATE.java | 2 +- .../functions/string/Function_RMB.java | 22 +- .../internals/visitors/AntlrCharStream.java | 2 +- .../internals/visitors/CharUtil.java | 20 +- .../internals/visitors/DiyNameVisitor.java | 8 +- .../visitors/MathFunctionVisitor.java | 8 +- .../internals/visitors/MathSplitVisitor.java | 8 +- .../internals/visitors/MathSplitVisitor2.java | 4 +- .../algorithm/litJson/FsmContext.java | 2 +- .../algorithm/litJson/IJsonWrapper.java | 2 +- .../toolgood/algorithm/litJson/JsonData.java | 2 +- .../algorithm/litJson/JsonException.java | 2 +- .../algorithm/litJson/JsonMapper.java | 2 +- .../toolgood/algorithm/litJson/JsonToken.java | 2 +- .../toolgood/algorithm/litJson/JsonType.java | 4 +- .../toolgood/algorithm/litJson/Lexer.java | 2 +- .../algorithm/litJson/ParserToken.java | 2 +- .../algorithm/math/mathBaseVisitor.java | 2 +- .../toolgood/algorithm/math/mathLexer.java | 2 +- .../toolgood/algorithm/math/mathParser.java | 2 +- .../toolgood/algorithm/math/mathVisitor.java | 2 +- .../toolgood/algorithm/mathNet/Constants.java | 2 +- .../algorithm/mathNet/Distributions/Beta.java | 2 +- .../mathNet/Distributions/Binomial.java | 12 +- .../mathNet/Distributions/Exponential.java | 10 +- .../mathNet/Distributions/FisherSnedecor.java | 2 +- .../mathNet/Distributions/Gamma.java | 2 +- .../mathNet/Distributions/Hypergeometric.java | 2 +- .../mathNet/Distributions/LogNormal.java | 2 +- .../Distributions/NegativeBinomial.java | 10 +- .../mathNet/Distributions/Normal.java | 2 +- .../mathNet/Distributions/Poisson.java | 4 +- .../mathNet/Distributions/StudentT.java | 2 +- .../mathNet/Distributions/Weibull.java | 6 +- .../toolgood/algorithm/mathNet/Evaluate.java | 2 +- .../algorithm/mathNet/ExcelFunctions.java | 2 +- .../toolgood/algorithm/mathNet/Precision.java | 2 +- .../algorithm/mathNet/RootFinding/Brent.java | 2 +- .../mathNet/RootFinding/RootNumber.java | 2 +- .../algorithm/mathNet/SpecialFunctions.java | 2 +- .../mathNet/Statistics/ArrayStatistics.java | 2 +- .../Statistics/QuantileDefinition.java | 2 +- .../Statistics/SortedArrayStatistics.java | 2 +- .../mathNet/Statistics/Statistics.java | 2 +- .../toolgood/algorithm/operands/KeyValue.java | 16 + .../algorithm/operands/OperandArray.java | 72 ++ .../algorithm/operands/OperandBigDecimal.java | 68 ++ .../algorithm/operands/OperandBoolean.java | 52 ++ .../algorithm/operands/OperandError.java | 58 ++ .../algorithm/operands/OperandInt.java | 68 ++ .../algorithm/operands/OperandJson.java | 95 +++ .../algorithm/operands/OperandKeyValue.java | 30 + .../operands/OperandKeyValueList.java | 124 +++ .../algorithm/operands/OperandMyDate.java | 58 ++ .../algorithm/operands/OperandNone.java | 29 + .../algorithm/operands/OperandNull.java | 25 + .../algorithm/operands/OperandString.java | 187 +++++ .../unitConversion/AreaConverter.java | 6 +- .../unitConversion/DistanceConverter.java | 4 +- .../unitConversion/MassConverter.java | 6 +- .../unitConversion/VolumeConverter.java | 4 +- 146 files changed, 1309 insertions(+), 1184 deletions(-) delete mode 100644 java/src/main/java/toolgood/algorithm/OperandImpl.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/KeyValue.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/OperandArray.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/OperandBigDecimal.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/OperandBoolean.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/OperandError.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/OperandInt.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/OperandJson.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/OperandKeyValue.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/OperandKeyValueList.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/OperandMyDate.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/OperandNone.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/OperandNull.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/OperandString.java diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java index ded0591d7..cfd126479 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java @@ -21,7 +21,7 @@ public class AlgorithmEngine { public int ExcelIndex = 1; /** - * 使用 本地时间, 影响 时间截转化 + * 使用 本地时间�?影响 时间截转�? */ public boolean UseLocalTime = true; @@ -46,19 +46,19 @@ public class AlgorithmEngine { public MassUnitType MassUnit = MassUnitType.KG; /** - * 最后一个错误 + * 最后一个错�? */ private String LastError; /** - * 获取最后一个错误 + * 获取最后一个错�? */ public String getLastError() { return LastError; } /** - * 设置最后一个错误 + * 设置最后一个错�? */ public void SetLastError(String error) { LastError = error; @@ -72,21 +72,21 @@ public void setUseExcelIndex(boolean value) { } /** - * 自定义参数 请重写此方法 + * 自定义参�?请重写此方法 */ public Operand getParameter(String parameter) { return Operand.Error("Parameter [" + parameter + "] is missing."); } /** - * 自定义函数 请重写此方法 + * 自定义函�?请重写此方法 */ public Operand executeDiyFunction(String parameter, List args) { return Operand.Error("DiyFunction [" + parameter + "] is missing."); } /** - * 编译公式,默认 + * 编译公式,默�? */ public FunctionBase Parse(String exp) throws Exception { LastError = null; @@ -117,7 +117,7 @@ public Operand Evaluate(FunctionBase function) { } /** - * 执行函数,如果异常,返回默认值 + * 执行函数,如果异常,返回默认�? */ public short TryEvaluate(String exp, short def) { try { @@ -138,7 +138,7 @@ public short TryEvaluate(String exp, short def) { } /** - * 执行函数,如果异常,返回默认值 + * 执行函数,如果异常,返回默认�? */ public int TryEvaluate(String exp, int def) { try { @@ -159,7 +159,7 @@ public int TryEvaluate(String exp, int def) { } /** - * 执行函数,如果异常,返回默认值 + * 执行函数,如果异常,返回默认�? */ public long TryEvaluate(String exp, long def) { try { @@ -180,7 +180,7 @@ public long TryEvaluate(String exp, long def) { } /** - * 执行函数,如果异常,返回默认值 + * 执行函数,如果异常,返回默认�? */ public float TryEvaluate(String exp, float def) { try { @@ -201,7 +201,7 @@ public float TryEvaluate(String exp, float def) { } /** - * 执行函数,如果异常,返回默认值 + * 执行函数,如果异常,返回默认�? */ public double TryEvaluate(String exp, double def) { try { @@ -222,7 +222,7 @@ public double TryEvaluate(String exp, double def) { } /** - * 执行函数,如果异常,返回默认值 + * 执行函数,如果异常,返回默认�? */ public String TryEvaluate(String exp, String def) { try { @@ -243,7 +243,7 @@ public String TryEvaluate(String exp, String def) { } /** - * 执行函数,如果异常,返回默认值 + * 执行函数,如果异常,返回默认�? */ public boolean TryEvaluate(String exp, boolean def) { try { @@ -264,7 +264,7 @@ public boolean TryEvaluate(String exp, boolean def) { } /** - * 执行函数,如果异常,返回默认值 + * 执行函数,如果异常,返回默认�? */ public MyDate TryEvaluate_MyDate(String exp, MyDate def) { try { diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java index 98e616e9f..37f75b969 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java @@ -8,29 +8,29 @@ import toolgood.algorithm.internals.MyDate; /** - * AlgorithmEngine 扩展类 - * 增加自定义参数缓存功能 + * AlgorithmEngine 扩展�? + * 增加自定义参数缓存功�? */ public class AlgorithmEngineEx extends AlgorithmEngine { private final ConcurrentHashMap _tempdict; /** - * 是否忽略大小写 + * 是否忽略大小�? */ public final boolean IgnoreCase; /** - * 保存到临时文档 + * 保存到临时文�? */ public boolean UseTempDict = false; // ------------------------------------------------------------------------- - // 构造函数 + // 构造函�? // ------------------------------------------------------------------------- /** - * 默认不带缓存(区分大小写) + * 默认不带缓存(区分大小写�? */ public AlgorithmEngineEx() { IgnoreCase = false; @@ -38,19 +38,19 @@ public AlgorithmEngineEx() { } /** - * 带缓存关键字大小写参数 + * 带缓存关键字大小写参�? * - * @param ignoreCase 是否忽略大小写 + * @param ignoreCase 是否忽略大小�? */ public AlgorithmEngineEx(boolean ignoreCase) { IgnoreCase = ignoreCase; - // Java 的 ConcurrentHashMap 本身不支持自定义 key 比较器, - // 忽略大小写时需在 put/get 时统一转小写。 + // Java �?ConcurrentHashMap 本身不支持自定义 key 比较器, + // 忽略大小写时需�?put/get 时统一转小写�? _tempdict = new ConcurrentHashMap<>(); } // ------------------------------------------------------------------------- - // 内部 key 规范化 + // 内部 key 规范�? // ------------------------------------------------------------------------- private String normalizeKey(String key) { @@ -62,7 +62,7 @@ private String normalizeKey(String key) { // ------------------------------------------------------------------------- /** - * AlgorithmEngineEx 请重写 getParameterEx + * AlgorithmEngineEx 请重�?getParameterEx */ @Override public Operand getParameter(String parameter) { @@ -90,21 +90,21 @@ public Operand getParameterEx(String parameter) { // ------------------------------------------------------------------------- /** - * 清理所有参数 + * 清理所有参�? */ public void ClearParameters() { _tempdict.clear(); } /** - * 添加自定义参数 + * 添加自定义参�? */ public void AddParameter(String key, Operand obj) { _tempdict.put(normalizeKey(key), obj); } /** - * 添加自定义参数(boolean) + * 添加自定义参数(boolean�? */ public void AddParameter(String key, boolean obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); @@ -113,42 +113,42 @@ public void AddParameter(String key, boolean obj) { // ------ number ------ /** - * 添加自定义参数(short) + * 添加自定义参数(short�? */ public void AddParameter(String key, short obj) { _tempdict.put(normalizeKey(key), Operand.Create((int) obj)); } /** - * 添加自定义参数(int) + * 添加自定义参数(int�? */ public void AddParameter(String key, int obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } /** - * 添加自定义参数(long) + * 添加自定义参数(long�? */ public void AddParameter(String key, long obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } /** - * 添加自定义参数(float) + * 添加自定义参数(float�? */ public void AddParameter(String key, float obj) { _tempdict.put(normalizeKey(key), Operand.Create((double) obj)); } /** - * 添加自定义参数(double) + * 添加自定义参数(double�? */ public void AddParameter(String key, double obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } /** - * 添加自定义参数(BigDecimal,对应 C# decimal) + * 添加自定义参数(BigDecimal,对�?C# decimal�? */ public void AddParameter(String key, BigDecimal obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); @@ -157,7 +157,7 @@ public void AddParameter(String key, BigDecimal obj) { // ------ string ------ /** - * 添加自定义参数(String) + * 添加自定义参数(String�? */ public void AddParameter(String key, String obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); @@ -166,7 +166,7 @@ public void AddParameter(String key, String obj) { // ------ MyDate / date ------ /** - * 添加自定义参数(MyDate) + * 添加自定义参数(MyDate�? */ public void AddParameter(String key, MyDate obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); @@ -175,35 +175,35 @@ public void AddParameter(String key, MyDate obj) { // ------ array ------ /** - * 添加自定义参数(List<Operand>) + * 添加自定义参数(List<Operand>�? */ public void AddParameter(String key, List obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } /** - * 添加自定义参数(Collection<String>) + * 添加自定义参数(Collection<String>�? */ public void AddParameter(String key, Collection obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new String[0]))); } /** - * 添加自定义参数(Collection<Double>) + * 添加自定义参数(Collection<Double>�? */ public void AddParameterDoubles(String key, Collection obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Double[0]))); } /** - * 添加自定义参数(Collection<Integer>) + * 添加自定义参数(Collection<Integer>�? */ public void AddParameterIntegers(String key, Collection obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Integer[0]))); } /** - * 添加自定义参数(Collection<Boolean>) + * 添加自定义参数(Collection<Boolean>�? */ public void AddParameterBooleans(String key, Collection obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Boolean[0]))); @@ -214,11 +214,11 @@ public void AddParameterBooleans(String key, Collection obj) { // ------------------------------------------------------------------------- /** - * 从 JSON 字符串批量添加参数。 - * JSON 必须是 {...} 对象格式。 + * �?JSON 字符串批量添加参数�? + * JSON 必须�?{...} 对象格式�? * - * @param json JSON 字符串 - * @throws Exception 若不是合法 JSON 对象 + * @param json JSON 字符�? + * @throws Exception 若不是合�?JSON 对象 */ public void AddParameterFromJson(String json) throws Exception { if (json == null) { @@ -226,7 +226,7 @@ public void AddParameterFromJson(String json) throws Exception { } String trimmed = json.trim(); if (trimmed.startsWith("{") && trimmed.endsWith("}")) { - // 使用项目内置的 LitJson 解析 + // 使用项目内置�?LitJson 解析 toolgood.algorithm.litJson.JsonData jo = toolgood.algorithm.litJson.JsonMapper.ToObject(trimmed); if (jo.IsObject()) { for (java.util.Map.Entry item : jo.inst_object.entrySet()) { diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java index 7232c9d4b..c6875e0f2 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java @@ -33,13 +33,13 @@ import toolgood.algorithm.unitConversion.VolumeConverter; /** - * 算法引擎助手(静态工具类) + * 算法引擎助手(静态工具类�? */ public final class AlgorithmEngineHelper { private static final Pattern UNIT_REGEX = Pattern.compile("[\\s\\(\\)()\\[\\]<>]"); - /** 工具类,不可实例化 */ + /** 工具类,不可实例�?*/ private AlgorithmEngineHelper() { } @@ -48,7 +48,7 @@ private AlgorithmEngineHelper() { // ------------------------------------------------------------------------- /** - * 创建 ANTLR 解析上下文 + * 创建 ANTLR 解析上下�? * * @param exp 表达式字符串 * @return [0] AntlrErrorTextWriter,[1] mathParser.ProgContext @@ -71,7 +71,7 @@ static Object[] createParserContext(String exp) { * 判断字符串是否是合法单参数名(既不包含函数调用,又只包含一个参数且与原字符串相同) * * @param parameter 待检测字符串 - * @return 是否是参数 + * @return 是否是参�? */ public static boolean IsParameter(String parameter) { if (parameter == null || parameter.trim().isEmpty()) { @@ -92,11 +92,11 @@ public static boolean IsParameter(String parameter) { } /** - * 获取表达式中使用到的 DIY 名称(参数名和函数名) + * 获取表达式中使用到的 DIY 名称(参数名和函数名�? * * @param exp 表达式字符串 * @return DiyNameInfo - * @throws Exception 解析失败时抛出 + * @throws Exception 解析失败时抛�? */ public static DiyNameInfo GetDiyNames(String exp) throws Exception { if (exp == null || exp.trim().isEmpty()) { @@ -116,8 +116,8 @@ public static DiyNameInfo GetDiyNames(String exp) throws Exception { /** * 单位转换 * - * @param src 原始数值 - * @param oldSrcUnit 源单位 + * @param src 原始数�? + * @param oldSrcUnit 源单�? * @param oldTarUnit 目标单位 * @return 转换后的 BigDecimal * @throws Exception 单位不兼容时抛出 @@ -127,12 +127,12 @@ public static BigDecimal UnitConversion(BigDecimal src, String oldSrcUnit, Strin } /** - * 单位转换(带名称提示) + * 单位转换(带名称提示�? * - * @param src 原始数值 - * @param oldSrcUnit 源单位 + * @param src 原始数�? + * @param oldSrcUnit 源单�? * @param oldTarUnit 目标单位 - * @param name 输入项名称(用于错误信息,可为 null) + * @param name 输入项名称(用于错误信息,可�?null�? * @return 转换后的 BigDecimal * @throws Exception 单位不兼容时抛出 */ @@ -184,11 +184,11 @@ private static BigDecimal tryConvert(BigDecimal src, String srcUnit, String tarU } /** - * 编译公式,返回可执行的 FunctionBase + * 编译公式,返回可执行�?FunctionBase * - * @param exp 公式字符串 + * @param exp 公式字符�? * @return 编译后的 FunctionBase - * @throws Exception 解析失败时抛出 + * @throws Exception 解析失败时抛�? */ public static FunctionBase ParseFormula(String exp) throws Exception { if (exp == null || exp.trim().isEmpty()) { @@ -205,9 +205,9 @@ public static FunctionBase ParseFormula(String exp) throws Exception { } /** - * 检查公式语法是否正确 + * 检查公式语法是否正�? * - * @param exp 公式字符串 + * @param exp 公式字符�? * @return 是否正确 */ public static boolean CheckFormula(String exp) { @@ -222,7 +222,7 @@ public static boolean CheckFormula(String exp) { /** * 解析条件表达式,生成 ConditionTree * - * @param condition 条件字符串 + * @param condition 条件字符�? * @return ConditionTree */ public static ConditionTree ParseCondition(String condition) { @@ -339,7 +339,7 @@ public static FunctionBase Calculate_Mod(FunctionBase left, FunctionBase right) } /** - * 创建字符串连接函数 + * 创建字符串连接函�? */ public static FunctionBase Calculate_Connect(FunctionBase left, FunctionBase right) { return new Function_Connect(left, right); diff --git a/java/src/main/java/toolgood/algorithm/Operand.java b/java/src/main/java/toolgood/algorithm/Operand.java index 0fc5b1b24..4f9c0ce39 100644 --- a/java/src/main/java/toolgood/algorithm/Operand.java +++ b/java/src/main/java/toolgood/algorithm/Operand.java @@ -1,5 +1,5 @@ /** - * 操作数 + * 閹垮秳缍旈弫? */ package toolgood.algorithm; @@ -13,7 +13,7 @@ public abstract class Operand { /** - * 版本号 + * 閻楀牊婀伴崣? */ public static final Operand VERSION = new OperandString("ToolGood.Algorithm 6.1"); @@ -43,11 +43,11 @@ public abstract class Operand { public static final Operand NULL_OPERAND = new OperandNull(); /** - * None(用于参数类型推断,NoneEngine 返回此值) + * None閿涘牏鏁ゆ禍搴″棘閺佹壆琚崹瀣腹閺傤叏绱漀oneEngine 鏉╂柨娲栧銈咃拷纭风礆 */ public static final Operand None = new OperandNone(); - // 整数缓存范围: -1000 ~ 1000,共2001个值 + // 閺佸瓨鏆熺紓鎾崇摠閼煎啫娲�: -1000 ~ 1000閿涘苯鍙�2001娑擃亜锟�? private static final int INT_CACHE_OFFSET = 1000; private static final int INT_CACHE_SIZE = 2001; private static final Operand[] INT_CACHE = new Operand[INT_CACHE_SIZE]; @@ -56,143 +56,143 @@ public abstract class Operand { for (int i = 0; i < INT_CACHE_SIZE; i++) { INT_CACHE[i] = new OperandInt(i - INT_CACHE_OFFSET); } - // ONE和ZERO已经在初始化时设置,不需要在这里重新设置 + // ONE閸滃ERO瀹歌尙绮¢崷銊ュ灥婵瀵查弮鎯邦啎缂冾噯绱濇稉宥夋付鐟曚礁婀潻娆撳櫡闁插秵鏌婄拋鍓х枂 } /** - * 是否为空值 + * 閺勵垰鎯佹稉铏光敄閸�? */ public boolean IsNull() { return false; } /** - * 是否为非空值 + * 閺勵垰鎯佹稉娲姜缁屽搫锟�? */ public boolean IsNotNull() { return true; } /** - * 是否数字 + * 閺勵垰鎯侀弫鏉跨摟 */ public boolean IsNumber() { return false; } /** - * 是否非数字 + * 閺勵垰鎯侀棃鐐存殶鐎�? */ public boolean IsNotNumber() { return true; } /** - * 是否字符串 + * 閺勵垰鎯佺�涙顑佹稉? */ public boolean IsText() { return false; } /** - * 是否非字符串 + * 閺勵垰鎯侀棃鐐茬摟缁楋缚瑕� */ public boolean IsNotText() { return true; } /** - * 是否布尔值 + * 閺勵垰鎯佺敮鍐ㄧ毜閸�? */ public boolean IsBoolean() { return false; } /** - * 是否非布尔值 + * 閺勵垰鎯侀棃鐐茬鐏忔柨锟�? */ public boolean IsNotBoolean() { return true; } /** - * 是否数组 + * 閺勵垰鎯侀弫鎵矋 */ public boolean IsArray() { return false; } /** - * 是否非数组 + * 閺勵垰鎯侀棃鐐存殶缂�? */ public boolean IsNotArray() { return true; } /** - * 是否日期 + * 閺勵垰鎯侀弮銉︽埂 */ public boolean IsDate() { return false; } /** - * 是否非日期 + * 閺勵垰鎯侀棃鐐存)閺�? */ public boolean IsNotDate() { return true; } /** - * 是否Json对象 + * 閺勵垰鎯丣son鐎电钖� */ public boolean IsJson() { return false; } /** - * 是否非Json对象 + * 閺勵垰鎯侀棃婵瞫on鐎电钖� */ public boolean IsNotJson() { return true; } /** - * 是否Json数组 + * 閺勵垰鎯丣son閺佹壆绮� */ public boolean IsArrayJson() { return false; } /** - * 是否非Json数组 + * 閺勵垰鎯侀棃婵瞫on閺佹壆绮� */ public boolean IsNotArrayJson() { return true; } /** - * 是否出错 + * 閺勵垰鎯侀崙娲晩 */ public boolean IsError() { return false; } /** - * 错误信息 + * 闁挎瑨顕ゆ穱鈩冧紖 */ public String ErrorMsg() { return null; } /** - * 操作数类型 + * 閹垮秳缍旈弫鎵閸�? */ public abstract OperandType Type(); /** - * 数字值 + * 閺佹澘鐡ч崐? */ public BigDecimal NumberValue() { throw new UnsupportedOperationException(); } /** - * double值 + * double閸�? */ public double DoubleValue() { throw new UnsupportedOperationException(); } /** - * int值 + * int閸�? */ public int IntValue() { throw new UnsupportedOperationException(); } /** - * long值 + * long閸�? */ public long LongValue() { throw new UnsupportedOperationException(); } /** - * 字符串值 + * 鐎涙顑佹稉鎻掞拷? */ public String TextValue() { throw new UnsupportedOperationException(); } /** - * 布尔值 + * 鐢啫鐨甸崐? */ public boolean BooleanValue() { throw new UnsupportedOperationException(); } /** - * 数组值 + * 閺佹壆绮嶉崐? */ public List ArrayValue() { throw new UnsupportedOperationException(); } /** - * Json值 + * Json閸�? */ JsonData JsonValue() { throw new UnsupportedOperationException(); } /** - * 时间值 + * 閺冨爼妫块崐? */ public MyDate DateValue() { throw new UnsupportedOperationException(); } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(boolean obj) { return obj ? TRUE : FALSE; @@ -201,7 +201,7 @@ public static Operand Create(boolean obj) { /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(short obj) { if (obj >= -INT_CACHE_OFFSET && obj <= INT_CACHE_OFFSET) { @@ -211,7 +211,7 @@ public static Operand Create(short obj) { } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(int obj) { if (obj >= -INT_CACHE_OFFSET && obj <= INT_CACHE_OFFSET) { @@ -221,7 +221,7 @@ public static Operand Create(int obj) { } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(long obj) { if (obj >= -INT_CACHE_OFFSET && obj <= INT_CACHE_OFFSET) { @@ -231,21 +231,21 @@ public static Operand Create(long obj) { } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(float obj) { return new OperandBigDecimal(new BigDecimal(obj)); } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(double obj) { return new OperandBigDecimal(new BigDecimal(obj)); } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(BigDecimal obj) { return new OperandBigDecimal(obj); @@ -254,7 +254,7 @@ public static Operand Create(BigDecimal obj) { /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(String obj) { if (obj == null) { @@ -264,7 +264,7 @@ public static Operand Create(String obj) { } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand CreateJson(String txt) { if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { @@ -278,7 +278,7 @@ public static Operand CreateJson(String txt) { } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(MyDate obj) { return new OperandMyDate(obj); @@ -287,21 +287,21 @@ public static Operand Create(MyDate obj) { /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(JsonData obj) { return new OperandJson(obj); } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(List obj) { return new OperandArray(obj); } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(String[] obj) { List array = new ArrayList<>(); @@ -312,7 +312,7 @@ public static Operand Create(String[] obj) { } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(Double[] obj) { List array = new ArrayList<>(); @@ -323,7 +323,7 @@ public static Operand Create(Double[] obj) { } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(BigDecimal[] obj) { List array = new ArrayList<>(); @@ -334,7 +334,7 @@ public static Operand Create(BigDecimal[] obj) { } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(Integer[] obj) { List array = new ArrayList<>(); @@ -345,7 +345,7 @@ public static Operand Create(Integer[] obj) { } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Create(Boolean[] obj) { List array = new ArrayList<>(); @@ -356,21 +356,21 @@ public static Operand Create(Boolean[] obj) { } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Error(String msg) { return new OperandError(msg); } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand Error(String msg, Object... args) { return new OperandError(String.format(msg, args)); } /** - * 创建操作数 + * 閸掓稑缂撻幙宥勭稊閺�? */ public static Operand CreateNull() { return new OperandNull(); @@ -381,77 +381,77 @@ public static Operand CreateNull() { /** - * 转数值类型 + * 鏉烆剚鏆熼崐鑲╄閸�? */ public Operand ToNumber(String errorMessage) { return Error(errorMessage != null ? errorMessage : "Convert to number Error!"); } /** - * 转数值类型 + * 鏉烆剚鏆熼崐鑲╄閸�? */ public Operand ToNumber(String errorMessage, Object... args) { return Error(String.format(errorMessage, args)); } /** - * 转bool类型 + * 鏉炵悿ool缁鐎� */ public Operand ToBoolean(String errorMessage) { return Error(errorMessage != null ? errorMessage : "Convert to bool Error!"); } /** - * 转bool类型 + * 鏉炵悿ool缁鐎� */ public Operand ToBoolean(String errorMessage, Object... args) { return Error(String.format(errorMessage, args)); } /** - * 转string类型 + * 鏉炵憘tring缁鐎� */ public Operand ToText(String errorMessage) { return Error(errorMessage != null ? errorMessage : "Convert to string Error!"); } /** - * 转string类型 + * 鏉炵憘tring缁鐎� */ public Operand ToText(String errorMessage, Object... args) { return Error(String.format(errorMessage, args)); } /** - * 转MyDate类型 + * 鏉炵悎yDate缁鐎� */ public Operand ToMyDate(String errorMessage) { return Error(errorMessage != null ? errorMessage : "Convert to date Error!"); } /** - * 转MyDate类型 + * 鏉炵悎yDate缁鐎� */ public Operand ToMyDate(String errorMessage, Object... args) { return Error(String.format(errorMessage, args)); } /** - * 转Array类型 + * 鏉炵徆rray缁鐎� */ public Operand ToArray(String errorMessage) { return Error(errorMessage != null ? errorMessage : "Convert to array Error!"); } /** - * 转Array类型 + * 鏉炵徆rray缁鐎� */ public Operand ToArray(String errorMessage, Object... args) { return Error(String.format(errorMessage, args)); } /** - * 转Json类型 + * 鏉炵悅son缁鐎� */ public Operand ToJson(String errorMessage) { return Error(errorMessage != null ? errorMessage : "Convert to json Error!"); diff --git a/java/src/main/java/toolgood/algorithm/OperandImpl.java b/java/src/main/java/toolgood/algorithm/OperandImpl.java deleted file mode 100644 index 4efadf31b..000000000 --- a/java/src/main/java/toolgood/algorithm/OperandImpl.java +++ /dev/null @@ -1,757 +0,0 @@ -package toolgood.algorithm; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; - -class OperandInt extends Operand { - private final int value; - - public OperandInt(int obj) { - value = obj; - } - - @Override - public boolean IsNumber() { return true; } - - @Override - public boolean IsNotNumber() { return false; } - - @Override - public OperandType Type() { return OperandType.NUMBER; } - - @Override - public int IntValue() { return value; } - - @Override - public BigDecimal NumberValue() { return BigDecimal.valueOf(value); } - - @Override - public long LongValue() { return value; } - - @Override - public double DoubleValue() { return value; } - - - @Override - public Operand ToNumber(String errorMessage) { return this; } - - @Override - public Operand ToNumber(String errorMessage, Object... args) { return this; } - - @Override - public Operand ToBoolean(String errorMessage) { return IntValue() != 0 ? TRUE : FALSE; } - - @Override - public Operand ToBoolean(String errorMessage, Object... args) { return IntValue() != 0 ? TRUE : FALSE; } - - @Override - public Operand ToText(String errorMessage) { return Create(Integer.toString(value)); } - - @Override - public Operand ToText(String errorMessage, Object... args) { return Create(Integer.toString(value)); } - - @Override - public Operand ToMyDate(String errorMessage) { return Create(new MyDate(value)); } - - @Override - public Operand ToMyDate(String errorMessage, Object... args) { return Create(new MyDate(value)); } - - @Override - public String toString() { return NumberValue().toString(); } -} - -class OperandBigDecimal extends Operand { - private final BigDecimal value; - - public OperandBigDecimal(BigDecimal obj) { - value = obj; - } - - @Override - public boolean IsNumber() { return true; } - - @Override - public boolean IsNotNumber() { return false; } - - @Override - public OperandType Type() { return OperandType.NUMBER; } - - @Override - public int IntValue() { return value.intValue(); } - - @Override - public BigDecimal NumberValue() { return value; } - - @Override - public long LongValue() { return value.longValue(); } - - @Override - public double DoubleValue() { return value.doubleValue(); } - - - @Override - public Operand ToNumber(String errorMessage) { return this; } - - @Override - public Operand ToNumber(String errorMessage, Object... args) { return this; } - - @Override - public Operand ToBoolean(String errorMessage) { return value.compareTo(BigDecimal.ZERO) != 0 ? TRUE : FALSE; } - - @Override - public Operand ToBoolean(String errorMessage, Object... args) { return value.compareTo(BigDecimal.ZERO) != 0 ? TRUE : FALSE; } - - @Override - public Operand ToText(String errorMessage) { return Create(value.toString()); } - - @Override - public Operand ToText(String errorMessage, Object... args) { return Create(value.toString()); } - - @Override - public Operand ToMyDate(String errorMessage) { return Create(new MyDate(value.longValue())); } - - @Override - public Operand ToMyDate(String errorMessage, Object... args) { return Create(new MyDate(value.longValue())); } - - @Override - public String toString() { return NumberValue().toString(); } -} - - - -class OperandBoolean extends Operand { - private final boolean value; - - public OperandBoolean(boolean obj) { - value = obj; - } - - @Override - public boolean IsBoolean() { return true; } - - @Override - public boolean IsNotBoolean() { return false; } - - @Override - public OperandType Type() { return OperandType.BOOLEAN; } - - @Override - public boolean BooleanValue() { return value; } - - @Override - public Operand ToNumber(String errorMessage) { return value ? ONE : ZERO; } - - @Override - public Operand ToNumber(String errorMessage, Object... args) { return value ? ONE : ZERO; } - - @Override - public Operand ToBoolean(String errorMessage) { return this; } - - @Override - public Operand ToBoolean(String errorMessage, Object... args) { return this; } - - @Override - public Operand ToText(String errorMessage) { return Create(value ? "TRUE" : "FALSE"); } - - @Override - public Operand ToText(String errorMessage, Object... args) { return Create(value ? "TRUE" : "FALSE"); } - - @Override - public String toString() { return value ? "true" : "false"; } -} - -class OperandString extends Operand { - private final String value; - - public OperandString(String obj) { - value = obj; - } - - @Override - public boolean IsText() { return true; } - - @Override - public boolean IsNotText() { return false; } - - @Override - public OperandType Type() { return OperandType.TEXT; } - - @Override - public String TextValue() { return value; } - - @Override - public Operand ToNumber(String errorMessage) { - try { - BigDecimal bd = new BigDecimal(value); - return Operand.Create(bd); - } catch (NumberFormatException e) { - if (errorMessage == null) { - return Error("Convert to number error!"); - } - return Error(errorMessage); - } - } - - @Override - public Operand ToNumber(String errorMessage, Object... args) { - try { - BigDecimal bd = new BigDecimal(value); - return Operand.Create(bd); - } catch (NumberFormatException e) { - if (errorMessage == null) { - return Error("Convert to number error!"); - } - return Error(String.format(errorMessage, args)); - } - } - - @Override - public Operand ToText(String errorMessage) { return this; } - - @Override - public Operand ToText(String errorMessage, Object... args) { return this; } - - @Override - public Operand ToBoolean(String errorMessage) { - FunctionUtil.BooleanHolder boolHolder = new FunctionUtil.BooleanHolder(); - if (FunctionUtil.tryParseBoolean(value, boolHolder)) { - return boolHolder.value ? Operand.TRUE : Operand.FALSE; - } - if (errorMessage == null) { - return Error("Convert to bool error!"); - } - return Error(errorMessage); - } - - @Override - public Operand ToBoolean(String errorMessage, Object... args) { - FunctionUtil.BooleanHolder boolHolder = new FunctionUtil.BooleanHolder(); - if (FunctionUtil.tryParseBoolean(value, boolHolder)) { - return boolHolder.value ? Operand.TRUE : Operand.FALSE; - } - if (errorMessage == null) { - return Error("Convert to bool error!"); - } - return Error(String.format(errorMessage, args)); - } - - @Override - public Operand ToMyDate(String errorMessage) { - try { - // 尝试解析为时间戳 - long timestamp = Long.parseLong(value); - return Create(new MyDate(timestamp)); - } catch (NumberFormatException e) { - // 尝试解析为日期字符串 - try { - MyDate date = MyDate.parse(value); - return Create(date); - } catch (Exception ex) { - if (errorMessage == null) { - return Error("Convert to date error!"); - } - return Error(errorMessage); - } - } - } - - @Override - public Operand ToMyDate(String errorMessage, Object... args) { - try { - // 尝试解析为时间戳 - long timestamp = Long.parseLong(value); - return Create(new MyDate(timestamp)); - } catch (NumberFormatException e) { - // 尝试解析为日期字符串 - try { - MyDate date = MyDate.parse(value); - return Create(date); - } catch (Exception ex) { - if (errorMessage == null) { - return Error("Convert to date error!"); - } - return Error(String.format(errorMessage, args)); - } - } - } - - @Override - public Operand ToArray(String errorMessage) { - return Error(errorMessage != null ? errorMessage : "Convert to array error!"); - } - - @Override - public Operand ToJson(String errorMessage) { - String txt = value.trim(); - if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { - try { - JsonData json = JsonData.Parse(txt); - return Operand.Create(json); - } catch (Exception e) { - } - } - return Error(errorMessage != null ? errorMessage : "Convert to json error!"); - } - - @Override - public String toString() { - StringBuilder sb = new StringBuilder(); - sb.append('"'); - for (char c : value.toCharArray()) { - switch (c) { - case '"': - sb.append("\\\""); - break; - case '\n': - sb.append("\\n"); - break; - case '\r': - sb.append("\\r"); - break; - case '\t': - sb.append("\\t"); - break; - case '\0': - sb.append("\\0"); - break; - case '\u000b': - sb.append("\\v"); - break; - case '\u0007': - sb.append("\\a"); - break; - case '\b': - sb.append("\\b"); - break; - case '\f': - sb.append("\\f"); - break; - default: - sb.append(c); - break; - } - } - sb.append('"'); - return sb.toString(); - } -} - -class OperandMyDate extends Operand { - private final MyDate value; - - public OperandMyDate(MyDate obj) { - value = obj; - } - - @Override - public boolean IsDate() { return true; } - - @Override - public boolean IsNotDate() { return false; } - - @Override - public OperandType Type() { return OperandType.DATE; } - - @Override - public MyDate DateValue() { return value; } - - @Override - public Operand ToNumber(String errorMessage) { return Create(value.ToNumber -()); } - - @Override - public Operand ToNumber(String errorMessage, Object... args) { return Create(value.ToNumber -()); } - - @Override - public Operand ToBoolean(String errorMessage) { return value.ToNumber -() != 0 ? TRUE : FALSE; } - - @Override - public Operand ToBoolean(String errorMessage, Object... args) { return value.ToNumber -() != 0 ? TRUE : FALSE; } - - @Override - public Operand ToText(String errorMessage) { return Create(value.toString()); } - - @Override - public Operand ToText(String errorMessage, Object... args) { return Create(value.toString()); } - - @Override - public Operand ToMyDate(String errorMessage) { return this; } - - @Override - public Operand ToMyDate(String errorMessage, Object... args) { return this; } - - @Override - public String toString() { return '"' + value.toString() + '"'; } -} - -class OperandJson extends Operand { - private final JsonData value; - - public OperandJson(JsonData obj) { - value = obj; - } - - @Override - public boolean IsJson() { return true; } - - @Override - public boolean IsNotJson() { return false; } - - @Override - public OperandType Type() { return OperandType.JSON; } - - @Override - JsonData JsonValue() { return value; } - - @Override - public Operand ToText(String errorMessage) { - return Create(value.toString()); - } - - @Override - public Operand ToText(String errorMessage, Object... args) { - return Create(value.toString()); - } - - @Override - public Operand ToArray(String errorMessage) { - if (value.IsArray()) { - List list = new ArrayList<>(); - for (JsonData v : value.getArray()) { - if (v.isString()) { - list.add(Operand.Create(v.getString())); - } else if (v.IsBoolean()) { - list.add(Operand.Create(v.getBoolean())); - } else if (v.IsNumber()) { - list.add(Operand.Create(new BigDecimal(v.getNumber().toString()))); - } else if (v.IsNull()) { - list.add(Operand.CreateNull()); - } else { - list.add(Operand.Create(v)); - } - } - return Operand.Create(list); - } - return Error(errorMessage != null ? errorMessage : "Convert to array error!"); - } - - @Override - public Operand ToArray(String errorMessage, Object... args) { - if (value.IsArray()) { - List list = new ArrayList<>(); - for (JsonData v : value.getArray()) { - if (v.IsString()) { - list.add(Operand.Create(v.getString())); - } else if (v.IsBoolean()) { - list.add(Operand.Create(v.getBoolean())); - } else if (v.IsNumber()) { - list.add(Operand.Create(new BigDecimal(v.getNumber().toString()))); - } else if (v.IsNull()) { - list.add(Operand.CreateNull()); - } else { - list.add(Operand.Create(v)); - } - } - return Operand.Create(list); - } - return Error(String.format(errorMessage, args)); - } - - @Override - public Operand ToJson(String errorMessage) { - return this; - } - - @Override - public String toString() { - return value.toString(); - } -} - -class OperandArray extends Operand { - private final List value; - - public OperandArray(List obj) { - value = obj; - } - - @Override - public boolean IsArray() { return true; } - - @Override - public boolean IsNotArray() { return false; } - - @Override - public OperandType Type() { return OperandType.ARRARY; } - - @Override - public List ArrayValue() { return value; } - - @Override - public Operand ToText(String errorMessage) { - return Create(this.toString()); - } - - @Override - public Operand ToText(String errorMessage, Object... args) { - return Create(this.toString()); - } - - @Override - public Operand ToArray(String errorMessage) { return this; } - - @Override - public Operand ToArray(String errorMessage, Object... args) { return this; } - - @Override - public Operand ToJson(String errorMessage) { - String txt = this.toString(); - try { - JsonData json = JsonData.Parse(txt); - return Operand.Create(json); - } catch (Exception e) { - return Error(errorMessage != null ? errorMessage : "Convert to json error!"); - } - } - - @Override - public String toString() { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append('['); - for (int i = 0; i < value.size(); i++) { - if (i > 0) { - stringBuilder.append(','); - } - stringBuilder.append(value.get(i).toString()); - } - stringBuilder.append(']'); - return stringBuilder.toString(); - } -} - -class OperandError extends Operand { - private final String errorMsg; - - public OperandError(String msg) { - errorMsg = msg; - } - - @Override - public OperandType Type() { return OperandType.ERROR; } - - @Override - public boolean IsError() { return true; } - - @Override - public String ErrorMsg() { return errorMsg; } - - @Override - public Operand ToNumber(String errorMessage) { return this; } - - @Override - public Operand ToNumber(String errorMessage, Object... args) { return this; } - - @Override - public Operand ToBoolean(String errorMessage) { return this; } - - @Override - public Operand ToBoolean(String errorMessage, Object... args) { return this; } - - @Override - public Operand ToText(String errorMessage) { return this; } - - @Override - public Operand ToText(String errorMessage, Object... args) { return this; } - - @Override - public Operand ToArray(String errorMessage) { return this; } - - @Override - public Operand ToArray(String errorMessage, Object... args) { return this; } - - @Override - public Operand ToMyDate(String errorMessage) { return this; } - - @Override - public Operand ToMyDate(String errorMessage, Object... args) { return this; } -} - -class OperandNull extends Operand { - @Override - public boolean IsNull() { return true; } - - @Override - public boolean IsNotNull() { return false; } - - @Override - public OperandType Type() { return OperandType.NULL; } - - @Override - public String toString() { return "null"; } -} - -class KeyValue { - public String key; - public Operand value; -} - -class OperandKeyValueList extends Operand { - private final List textList; - - public OperandKeyValueList() { - textList = new ArrayList<>(); - } - - @Override - public boolean IsArrayJson() { return true; } - - @Override - public boolean IsNotArrayJson() { return false; } - - @Override - public OperandType Type() { return OperandType.ARRARYJSON; } - - @Override - public List ArrayValue() { - List result = new ArrayList<>(); - for (KeyValue kv : textList) { - result.add(kv.value); - } - return result; - } - - @Override - public Operand ToText(String errorMessage) { - return Create(this.toString()); - } - - @Override - public Operand ToText(String errorMessage, Object... args) { - return Create(this.toString()); - } - - @Override - public Operand ToArray(String errorMessage) { - return Create(this.ArrayValue()); - } - - @Override - public Operand ToArray(String errorMessage, Object... args) { - return Create(this.ArrayValue()); - } - - @Override - public Operand ToJson(String errorMessage) { - String txt = this.toString(); - try { - JsonData json = JsonData.Parse(txt); - return Operand.Create(json); - } catch (Exception e) { - return Error(errorMessage != null ? errorMessage : "Convert to json error!"); - } - } - - public void addValue(KeyValue keyValue) { - textList.add(keyValue); - } - - public boolean tryGetValue(String key, Operand[] value) { - for (KeyValue item : textList) { - if (item.key.equals(key)) { - value[0] = item.value; - return true; - } - } - return false; - } - - public boolean containsKey(Operand value) { - for (KeyValue item : textList) { - if (value.TextValue().equals(item.key)) { - return true; - } - } - return false; - } - - public boolean containsValue(Operand value) { - for (KeyValue item : textList) { - Operand op = item.value; - if (value.Type() != op.Type()) { - continue; - } - if (value.IsText()) { - if (value.TextValue().equals(op.TextValue())) { - return true; - } - } - } - return false; - } - - @Override - public String toString() { - StringBuilder stringBuilder = new StringBuilder(); - stringBuilder.append('{'); - for (int i = 0; i < textList.size(); i++) { - if (i > 0) { - stringBuilder.append(','); - } - stringBuilder.append('"'); - stringBuilder.append(textList.get(i).key); - stringBuilder.append('"'); - stringBuilder.append(':'); - stringBuilder.append(textList.get(i).value.toString()); - } - stringBuilder.append('}'); - return stringBuilder.toString(); - } -} - -class OperandKeyValue extends Operand { - private final KeyValue value; - - public OperandKeyValue(KeyValue obj) { - value = obj; - } - - @Override - public boolean IsArrayJson() { return true; } - - @Override - public boolean IsNotArrayJson() { return false; } - - @Override - public OperandType Type() { return OperandType.ARRARYJSON; } - - public KeyValue Value() { return value; } -} - -/** - * NONE 类型操作数,用于参数类型推断(NoneEngine 返回此值) - */ -class OperandNone extends Operand { - - @Override - public OperandType Type() { return OperandType.NONE; } - - @Override - public boolean IsError() { return true; } - - @Override - public String ErrorMsg() { return "NONE"; } - - @Override - public String toString() { return "NONE"; } -} - - diff --git a/java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java b/java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java index db69109e2..d0ff8bb4b 100644 --- a/java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java +++ b/java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java @@ -20,7 +20,7 @@ public enum AreaUnitType { DM2(13), /** - * 平方米 + * 平方�? */ M2(14), diff --git a/java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java b/java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java index 3d8262ee6..4978982c0 100644 --- a/java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java +++ b/java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java @@ -1,5 +1,5 @@ /** - * 计算树类型 + * 计算树类�? */ package toolgood.algorithm.enums; @@ -9,19 +9,19 @@ public enum CalculateTreeType { */ String, /** - * 加 + * �? */ Add, /** - * 减 + * �? */ Sub, /** - * 乘 + * �? */ Mul, /** - * 除 + * �? */ Div, /** diff --git a/java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java b/java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java index 6123a1c98..77cf59dcb 100644 --- a/java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java +++ b/java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java @@ -1,5 +1,5 @@ /** - * 条件树类型 + * 条件树类�? */ package toolgood.algorithm.enums; @@ -10,12 +10,12 @@ public enum ConditionTreeType { String, /** - * 并 + * �? */ And, /** - * 或 + * �? */ Or, diff --git a/java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java b/java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java index a73f485af..36da863b4 100644 --- a/java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java +++ b/java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java @@ -20,7 +20,7 @@ public enum DistanceUnitType { DM(3), /** - * 米 + * �? */ M(4), diff --git a/java/src/main/java/toolgood/algorithm/enums/MassUnitType.java b/java/src/main/java/toolgood/algorithm/enums/MassUnitType.java index 9e28d9d8e..a4d97e3ef 100644 --- a/java/src/main/java/toolgood/algorithm/enums/MassUnitType.java +++ b/java/src/main/java/toolgood/algorithm/enums/MassUnitType.java @@ -5,7 +5,7 @@ public enum MassUnitType { /** - * 克 + * �? */ G(31), @@ -15,7 +15,7 @@ public enum MassUnitType { KG(32), /** - * 吨 + * �? */ T(33); diff --git a/java/src/main/java/toolgood/algorithm/enums/OperandType.java b/java/src/main/java/toolgood/algorithm/enums/OperandType.java index d2db1f3de..181452052 100644 --- a/java/src/main/java/toolgood/algorithm/enums/OperandType.java +++ b/java/src/main/java/toolgood/algorithm/enums/OperandType.java @@ -1,5 +1,5 @@ /** - * 操作数类型 + * 操作数类�? */ package toolgood.algorithm.enums; @@ -40,7 +40,7 @@ public enum OperandType { BOOLEAN, /** - * 字符串 + * 字符�? */ TEXT, diff --git a/java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java b/java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java index 62b397030..e12961cda 100644 --- a/java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java +++ b/java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java @@ -20,7 +20,7 @@ public enum VolumeUnitType { DM3(23), /** - * 立方米 + * 立方�? */ M3(24), diff --git a/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java b/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java index b13128306..8be043981 100644 --- a/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java +++ b/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java @@ -1,5 +1,5 @@ /** - * 计算树 + * 计算�? */ package toolgood.algorithm.internals; @@ -9,11 +9,11 @@ public final class CalculateTree { /** - * 子节点 + * 子节�? */ public List Nodes; /** - * 开始位置 + * 开始位�? */ public int Start; diff --git a/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java b/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java index 10d04663f..a580c4181 100644 --- a/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java +++ b/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java @@ -1,5 +1,5 @@ /** - * 条件树 + * 条件�? */ package toolgood.algorithm.internals; @@ -9,11 +9,11 @@ public final class ConditionTree { /** - * 子节点 + * 子节�? */ public List Nodes; /** - * 开始位置 + * 开始位�? */ public int Start; diff --git a/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java b/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java index d43782dfd..8360ea699 100644 --- a/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java +++ b/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java @@ -1,5 +1,5 @@ /** - * 自定义类型 + * 自定义类�? */ package toolgood.algorithm.internals; @@ -8,17 +8,17 @@ public final class DiyNameInfo { /** - * 自定义 参数 + * 自定�?参数 */ public final List Parameters; /** - * 自定义方法 + * 自定义方�? */ public final List Functions; /** - * 自定义类型 + * 自定义类�? */ public DiyNameInfo() { Parameters = new ArrayList<>(); @@ -27,7 +27,7 @@ public DiyNameInfo() { /** - * 关键字信息 + * 关键字信�? */ public class KeyInfo { /** @@ -35,7 +35,7 @@ public class KeyInfo { */ public String Name; /** - * 开始位置 + * 开始位�? */ public int Start; /** diff --git a/java/src/main/java/toolgood/algorithm/internals/DiyNameKeyInfo.java b/java/src/main/java/toolgood/algorithm/internals/DiyNameKeyInfo.java index 6fff2b0ca..c66111131 100644 --- a/java/src/main/java/toolgood/algorithm/internals/DiyNameKeyInfo.java +++ b/java/src/main/java/toolgood/algorithm/internals/DiyNameKeyInfo.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals; /** - * 关键字信息 + * 关键字信�? */ public class DiyNameKeyInfo { /** @@ -10,7 +10,7 @@ public class DiyNameKeyInfo { public String Name; /** - * 开始位置 + * 开始位�? */ public int Start; diff --git a/java/src/main/java/toolgood/algorithm/internals/MyDate.java b/java/src/main/java/toolgood/algorithm/internals/MyDate.java index 77a82c76d..2ab94a59f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/MyDate.java +++ b/java/src/main/java/toolgood/algorithm/internals/MyDate.java @@ -383,4 +383,4 @@ public MyDate DIV(BigDecimal num) { return new MyDate(this.ToNumber().divide(num, MathContext.DECIMAL32)); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/internals/ParameterType.java b/java/src/main/java/toolgood/algorithm/internals/ParameterType.java index 970e40710..dbe3e47a0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/ParameterType.java +++ b/java/src/main/java/toolgood/algorithm/internals/ParameterType.java @@ -3,7 +3,7 @@ import toolgood.algorithm.enums.OperandType; /** - * 参数类型类 + * 参数类型�? */ public class ParameterType { /** @@ -17,12 +17,12 @@ public class ParameterType { public OperandType Type; /** - * 操作符,可为空 + * 操作符,可为�? */ public String Operator; /** - * 操作值,可为空 + * 操作值,可为�? */ public String Value; } diff --git a/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java b/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java index d0fa556ef..4e382bf8a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java +++ b/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java @@ -7,7 +7,7 @@ public class RegexHelper { /** - * 十六进制正则表达式 + * 十六进制正则表达�? */ public static final Pattern HexRegex = Pattern.compile("^[0-9A-Fa-f]+$"); @@ -22,32 +22,32 @@ public class RegexHelper { public static final Pattern BinRegex = Pattern.compile("^[01]+$"); /** - * 日期时间正则表达式 (yyyy-MM-dd HH:mm:ss) + * 日期时间正则表达�?(yyyy-MM-dd HH:mm:ss) */ public static final Pattern dateTimeRegex = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$"); /** - * 日期时间正则表达式 (yyyy/MM/dd HH:mm:ss) + * 日期时间正则表达�?(yyyy/MM/dd HH:mm:ss) */ public static final Pattern dateTimeRegex2 = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$"); /** - * 日期时间正则表达式 (yyyy-MM-dd HH:mm) + * 日期时间正则表达�?(yyyy-MM-dd HH:mm) */ public static final Pattern dateTimeRegex3 = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)$"); /** - * 日期时间正则表达式 (yyyy/MM/dd HH:mm) + * 日期时间正则表达�?(yyyy/MM/dd HH:mm) */ public static final Pattern dateTimeRegex4 = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)$"); /** - * 日期正则表达式 (yyyy-MM-dd) + * 日期正则表达�?(yyyy-MM-dd) */ public static final Pattern dateRegex = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)$"); /** - * 日期正则表达式 (yyyy-MM-dd) + * 日期正则表达�?(yyyy-MM-dd) */ public static final Pattern dateRegex2 = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)$"); @@ -62,12 +62,12 @@ public class RegexHelper { public static final Pattern dayTimeRegex2 = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d)$"); /** - * 时间正则表达式 (HH:mm:ss) + * 时间正则表达�?(HH:mm:ss) */ public static final Pattern timeRegex = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$"); /** - * 时间正则表达式 (HH:mm) + * 时间正则表达�?(HH:mm) */ public static final Pattern timeRegex2 = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d)$"); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index f09db0688..ef369ec7e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -36,14 +36,14 @@ public String Name() { public abstract Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter); /** - * 进行计算(无临时参数) + * 进行计算(无临时参数�? */ public Operand Evaluate(AlgorithmEngine work) { return Evaluate(work, null); } /** - * 获取结果类型(默认返回 NONE,子类可覆盖) + * 获取结果类型(默认返�?NONE,子类可覆盖�? */ public OperandType GetResultType() { return OperandType.NONE; @@ -73,35 +73,35 @@ public void GetParameterTypes(NoneEngine noneEngine, List result, // region ConvertToXxx helpers /** - * 转换为文本类型 + * 转换为文本类�? */ protected Operand ConvertToText(Operand arg, int paramIndex) { return arg.ToText("Function '%s' parameter %d is error!", Name(), paramIndex); } /** - * 转换为布尔类型 + * 转换为布尔类�? */ protected Operand ConvertToBoolean(Operand arg, int paramIndex) { return arg.ToBoolean("Function '%s' parameter %d is error!", Name(), paramIndex); } /** - * 转换为数字类型 + * 转换为数字类�? */ protected Operand ConvertToNumber(Operand arg, int paramIndex) { return arg.ToNumber("Function '%s' parameter %d is error!", Name(), paramIndex); } /** - * 转换为数组类型 + * 转换为数组类�? */ protected Operand ConvertToArray(Operand arg, int paramIndex) { return arg.ToArray("Function '%s' parameter %d is error!", Name(), paramIndex); } /** - * 转换为日期类型 + * 转换为日期类�? */ protected Operand ConvertToDate(Operand arg, int paramIndex) { return arg.ToMyDate("Function '%s' parameter %d is error!", Name(), paramIndex); @@ -144,7 +144,7 @@ protected Operand Div0Error() { //region TryEvaluate /** - * 执行函数,如果异常,返回默认值 + * 执行函数,如果异常,返回默认�? * * @param work * @param def @@ -169,7 +169,7 @@ public short TryEvaluate(AlgorithmEngine work, short def, BiFunction sumifMatch(String s) { return null; } char c = s.charAt(0); - if (c == '>' || c == '>') { - if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '=')) { + if (c == '>' || c == '�?) { + if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '�?)) { try { double d = Double.parseDouble(s.substring(2).trim()); return new Pair<>(">=", d); @@ -248,15 +248,15 @@ public static Pair sumifMatch(String s) { return null; } } - } else if (c == '<' || c == '<') { - if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '=')) { + } else if (c == '<' || c == '�?) { + if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '�?)) { try { double d = Double.parseDouble(s.substring(2).trim()); return new Pair<>("<=", d); } catch (NumberFormatException e) { return null; } - } else if (s.length() > 1 && (s.charAt(1) == '>' || s.charAt(1) == '>')) { + } else if (s.length() > 1 && (s.charAt(1) == '>' || s.charAt(1) == '�?)) { try { double d = Double.parseDouble(s.substring(2).trim()); return new Pair<>("!=", d); @@ -271,11 +271,11 @@ public static Pair sumifMatch(String s) { return null; } } - } else if (c == '=' || c == '=') { + } else if (c == '=' || c == '�?) { int index = 1; - if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '=')) { + if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '�?)) { index = 2; - if (s.length() > 2 && (s.charAt(2) == '=' || s.charAt(2) == '=')) { + if (s.length() > 2 && (s.charAt(2) == '=' || s.charAt(2) == '�?)) { index = 3; } } @@ -285,11 +285,11 @@ public static Pair sumifMatch(String s) { } catch (NumberFormatException e) { return null; } - } else if (c == '!' || c == '!') { + } else if (c == '!' || c == '�?) { int index = 1; - if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '=')) { + if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '�?)) { index = 2; - if (s.length() > 2 && (s.charAt(2) == '=' || s.charAt(2) == '=')) { + if (s.length() > 2 && (s.charAt(2) == '=' || s.charAt(2) == '�?)) { index = 3; } } @@ -330,11 +330,11 @@ public static boolean tryParseBoolean(String textValue, BooleanHolder boolValue) boolValue.value = false; return true; } - if (textValue.equals("1") || textValue.equals("是") || textValue.equals("有")) { + if (textValue.equals("1") || textValue.equals("�?) || textValue.equals("�?)) { boolValue.value = true; return true; } - if (textValue.equals("0") || textValue.equals("否") || textValue.equals("不是") || textValue.equals("无") || textValue.equals("没有")) { + if (textValue.equals("0") || textValue.equals("�?) || textValue.equals("不是") || textValue.equals("�?) || textValue.equals("没有")) { boolValue.value = false; return true; } @@ -342,7 +342,7 @@ public static boolean tryParseBoolean(String textValue, BooleanHolder boolValue) return false; } - // 辅助类,用于在tryParseBoolean中返回布尔值 + // 辅助类,用于在tryParseBoolean中返回布尔�? public static class BooleanHolder { public boolean value; } @@ -367,17 +367,17 @@ public S getSecond() { } // ----------------------------------------------------------------------- - // BigDecimal 版统计辅助方法(供 RANK / LARGE / SMALL 等函数使用) + // BigDecimal 版统计辅助方法(�?RANK / LARGE / SMALL 等函数使用) // ----------------------------------------------------------------------- /** - * 快速选择:从 BigDecimal 列表中找第 k 小(largest=false)或第 k 大(largest=true)的值。 - * k 从 0 开始计数(即 largest=true,k=0 表示最大值)。 + * 快速选择:从 BigDecimal 列表中找�?k 小(largest=false)或�?k 大(largest=true)的值�? + * k �?0 开始计数(�?largest=true,k=0 表示最大值)�? * * @param list 输入列表(会被修改,调用方应传副本) - * @param k 目标位次(0-based) - * @param largest true=找第k大,false=找第k小 - * @return 目标值 + * @param k 目标位次�?-based�? + * @param largest true=找第k大,false=找第k�? + * @return 目标�? */ public static BigDecimal QuickSelect(List list, int k, boolean largest) { if (list.size() == 1) return list.get(0); @@ -421,13 +421,13 @@ private static void swap(List list, int i, int j) { } /** - * 获取 num 在 values 中的排名。 - * descending=true 表示降序排名(最大值排名第1)。 + * 获取 num �?values 中的排名�? + * descending=true 表示降序排名(最大值排名第1)�? * - * @param values 数值列表 - * @param num 待排名的值 + * @param values 数值列�? + * @param num 待排名的�? * @param descending true=降序,false=升序 - * @return 排名(1-based),若 num 不在列表中返回 0 + * @return 排名�?-based),�?num 不在列表中返�?0 */ public static int GetRank(List values, BigDecimal num, boolean descending) { int rank = 1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java index 6e5a32186..fba9178b2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java @@ -31,7 +31,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction 0) { startMyDate = startMyDate.AddDays(1); int dayOfWeek = startMyDate.DayOfWeek(); - // 检查是否是周末(1 是星期日,7 是星期六) + // 检查是否是周末�? 是星期日�? 是星期六�? if (dayOfWeek == 1 || dayOfWeek == 7) { continue; } - // 检查是否是节假日 + // 检查是否是节假�? String dateStr = startMyDate.Year + "-" + startMyDate.Month + "-" + startMyDate.Day; if (holidaySet.contains(dateStr)) { continue; @@ -67,4 +67,4 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction life + 1) return ParameterError(4); if (life < 1) return ParameterError(3); - // rate 保留3位小数 + // rate 保留3位小�? double rate = 1 - Math.pow(salvage / cost, 1.0 / life); rate = Math.round(rate * 1000.0) / 1000.0; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java index b0bdc29ae..aaa928f89 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java @@ -8,7 +8,7 @@ import toolgood.algorithm.internals.functions.Function_5; /** - * DDB: 使用双倍余额递减法或其他指定方法,计算一笔资产在给定期间内的折旧值 + * DDB: 使用双倍余额递减法或其他指定方法,计算一笔资产在给定期间内的折旧�? * DDB(cost, salvage, life, period, [factor]) */ public class Function_DDB extends Function_5 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java index b01b65f7f..6e8fd69ea 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java @@ -8,7 +8,7 @@ import toolgood.algorithm.internals.functions.Function_5; /** - * FV: 基于固定利率及等额分期付款方式,返回某项投资的未来值 + * FV: 基于固定利率及等额分期付款方式,返回某项投资的未来�? * FV(rate, nper, pmt, [pv], [type]) */ public class Function_FV extends Function_5 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java index a712875e5..498f157a1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java @@ -8,7 +8,7 @@ import toolgood.algorithm.internals.functions.Function_6; /** - * IPMT: 返回在给定期数内对投资的利息偿还额 + * IPMT: 返回在给定期数内对投资的利息偿还�? * IPMT(rate, per, nper, pv, [fv], [type]) */ public class Function_IPMT extends Function_6 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java index 3d5872f64..4b9804c88 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java @@ -8,7 +8,7 @@ import toolgood.algorithm.internals.functions.Function_N; /** - * NPV: 基于一系列定期的现金流和贴现率,返回一项投资的净现值 + * NPV: 基于一系列定期的现金流和贴现率,返回一项投资的净现�? * NPV(rate, value1, value2, ...) */ public class Function_NPV extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java index d964f8a39..c0929a243 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java @@ -8,7 +8,7 @@ import toolgood.algorithm.internals.functions.Function_6; /** - * PPMT: 返回在给定期数内对贷款本金的偿还额 + * PPMT: 返回在给定期数内对贷款本金的偿还�? * PPMT(rate, per, nper, pv, [fv], [type]) */ public class Function_PPMT extends Function_6 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java index 18ec1f163..127a863dd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java @@ -8,7 +8,7 @@ import toolgood.algorithm.internals.functions.Function_5; /** - * PV: 返回投资的现值 + * PV: 返回投资的现�? * PV(rate, nper, pmt, [fv], [type]) */ public class Function_PV extends Function_5 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java index 9c1e5d8cb..3fe4c47b5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java @@ -8,7 +8,7 @@ import toolgood.algorithm.internals.functions.Function_6; /** - * RATE: 返回年金的各期利率 + * RATE: 返回年金的各期利�? * RATE(nper, pmt, pv, [fv], [type], [guess]) */ public class Function_RATE extends Function_6 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java index 81e3d7e10..f9cd2230f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java @@ -8,7 +8,7 @@ import toolgood.algorithm.internals.functions.Function_3; /** - * SLN: 返回某项资产在一个期间中的线性折旧值 + * SLN: 返回某项资产在一个期间中的线性折旧�? * SLN(cost, salvage, life) */ public class Function_SLN extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java index 2fce94cde..fd3ea23ae 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java @@ -8,7 +8,7 @@ import toolgood.algorithm.internals.functions.Function_4; /** - * SYD: 返回某项资产按年数总和折旧法计算的指定期间的折旧值 + * SYD: 返回某项资产按年数总和折旧法计算的指定期间的折旧�? * SYD(cost, salvage, life, period) */ public class Function_SYD extends Function_4 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java index b24aa89a7..2f4cbd277 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java @@ -11,7 +11,7 @@ import toolgood.algorithm.internals.functions.Function_3; /** - * XNPV: 返回一组不定期发生的现金流的净现值 + * XNPV: 返回一组不定期发生的现金流的净现�? * XNPV(rate, values, dates) */ public class Function_XNPV extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java index abb795e77..0ab4ce233 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java @@ -12,7 +12,7 @@ import toolgood.algorithm.internals.functions.NoneEngine; /** - * IFS 函数:依次检测多个条件,返回第一个为 true 的条件对应的值。 + * IFS 函数:依次检测多个条件,返回第一个为 true 的条件对应的值�? * 参数格式:IFS(condition1, value1, condition2, value2, ...) */ public class Function_IFS extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java index f4cc0c11f..e2460a08e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java @@ -13,7 +13,7 @@ import toolgood.algorithm.internals.functions.NoneEngine; /** - * SWITCH 函数:对表达式求值,与后续候选值逐一比较,返回第一个匹配的结果。 + * SWITCH 函数:对表达式求值,与后续候选值逐一比较,返回第一个匹配的结果�? * 参数格式:SWITCH(expr, val1, result1, val2, result2, ...[, default]) */ public class Function_SWITCH extends Function_N { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java index 8ce02294e..9499fe252 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java @@ -12,7 +12,7 @@ import toolgood.algorithm.internals.functions.NoneEngine; /** - * ARABIC 函数:将罗马数字字符串转换为阿拉伯数字。 + * ARABIC 函数:将罗马数字字符串转换为阿拉伯数字�? * 参数:ARABIC(text) */ public class Function_ARABIC extends Function_1 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java index 51f76e585..787d503d9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java @@ -13,7 +13,7 @@ import toolgood.algorithm.internals.functions.NoneEngine; /** - * DELTA 函数:若两数相等返回 1,否则返回 0。第二参数省略时默认为 0。 + * DELTA 函数:若两数相等返回 1,否则返�?0。第二参数省略时默认�?0�? * 参数:DELTA(number1 [, number2]) */ public class Function_DELTA extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java index e5d57a9dc..426eeba98 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java @@ -13,7 +13,7 @@ import toolgood.algorithm.internals.functions.NoneEngine; /** - * GESTEP 函数:若 number >= step 返回 1,否则返回 0。第二参数省略时 step 默认为 0。 + * GESTEP 函数:若 number >= step 返回 1,否则返�?0。第二参数省略时 step 默认�?0�? * 参数:GESTEP(number [, step]) */ public class Function_GESTEP extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java index 21e58431c..109066bed 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java @@ -33,7 +33,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - // 百分比的 toString 格式:原参数后加 %,不加括号 + // 百分比的 toString 格式:原参数后加 %,不加括�? func1.toString(stringBuilder, false); stringBuilder.append('%'); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java index ebf5beb4c..46d963422 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java @@ -12,8 +12,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; /** - * ROMAN 函数:将阿拉伯数字转换为罗马数字字符串。 - * 第二参数 form 保留(兼容 Excel),当前实现仅使用经典形式。 + * ROMAN 函数:将阿拉伯数字转换为罗马数字字符串�? + * 第二参数 form 保留(兼�?Excel),当前实现仅使用经典形式�? * 参数:ROMAN(number [, form]) */ public class Function_ROMAN extends Function_2 { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java index 6f2fd296d..90be78951 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -41,13 +41,13 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction list.size() - excelIndex) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java index 27d3227e7..16a133348 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java @@ -59,11 +59,11 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction matchResult = FunctionUtil.sumifMatch(sunif); if (matchResult != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java index 4210f8cd4..2bb9d8aab 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java @@ -42,12 +42,12 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction 700 时使用近似公式 + // x > 700 时使用近似公�? if (ax.compareTo(new BigDecimal("700")) > 0) { BigDecimal exp = new BigDecimal(Math.exp(ax.doubleValue())); BigDecimal sqrtTerm = new BigDecimal(Math.sqrt(2 * Math.PI * ax.doubleValue())); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java index 11af2b435..d199a8c92 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java @@ -12,9 +12,9 @@ public Function_AND(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - // 程序 && and || or 与 excel的 AND(x,y) OR(x,y) 有区别 - // 在excel内 AND(x,y) OR(x,y) 先报错, - // 在程序中,&& and 有true 直接返回true 就不会检测下一个会不会报错 + // 程序 && and || or �?excel�? AND(x,y) OR(x,y) 有区�? + // 在excel�?AND(x,y) OR(x,y) 先报错, + // 在程序中�?& and 有true 直接返回true 就不会检测下一个会不会报错 // 在程序中,|| or 有false 直接返回false 就不会检测下一个会不会报错 Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotBoolean()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java index 70eb04c6c..24169cbc2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java @@ -12,9 +12,9 @@ public Function_OR(FunctionBase func1, FunctionBase func2) { @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - // 程序 && and || or 与 excel的 AND(x,y) OR(x,y) 有区别 - // 在excel内 AND(x,y) OR(x,y) 先报错, - // 在程序中,&& and 有true 直接返回true 就不会检测下一个会不会报错 + // 程序 && and || or �?excel�? AND(x,y) OR(x,y) 有区�? + // 在excel�?AND(x,y) OR(x,y) 先报错, + // 在程序中�?& and 有true 直接返回true 就不会检测下一个会不会报错 // 在程序中,|| or 有false 直接返回false 就不会检测下一个会不会报错 Operand args1 = func1.Evaluate(work, tempParameter); if (args1.IsNotBoolean()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java index dc5850e3d..9006c95b4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java @@ -23,7 +23,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction 0) { if (needZero) { - result.insert(0, "零"); + result.insert(0, "�?); } StringBuilder sectionResult = new StringBuilder(); int sectionUnitIndex = 0; @@ -72,7 +72,7 @@ private static String convertToChineseRMB(double x) { if (digit > 0) { sectionResult.insert(0, digits[digit] + units[sectionUnitIndex]); } else if (sectionResult.length() > 0) { - sectionResult.insert(0, "零"); + sectionResult.insert(0, "�?); } section /= 10; sectionUnitIndex++; @@ -84,7 +84,7 @@ private static String convertToChineseRMB(double x) { integerPart /= 10000; bigUnitIndex++; } - result.append("元"); + result.append("�?); } if (decimalPart > 0) { @@ -97,7 +97,7 @@ private static String convertToChineseRMB(double x) { result.append(digits[fen]).append(decimalUnits[1]); } } else { - result.append("整"); + result.append("�?); } return result.toString(); diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java index 844ab097a..23c408d5d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrCharStream.java @@ -58,4 +58,4 @@ public int size() { public String getSourceName() { return stream.getSourceName(); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java b/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java index fb0da7bed..cfe9160fa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java @@ -8,29 +8,29 @@ public static char StandardChar(char c) { if (c <= 0) return c; char o = (char) c; - if (o == '‘') + if (o == '�?) return '\''; - if (o == '’') + if (o == '�?) return '\''; - if (o == '“') + if (o == '�?) return '"'; - if (o == '”') + if (o == '�?) return '"'; - if (o == '〔') + if (o == '�?) return '('; - if (o == '〕') + if (o == '�?) return ')'; - if (o == '=') + if (o == '�?) return '='; - if (o == '+') + if (o == '�?) return '+'; - if (o == '-') + if (o == '�?) return '-'; if (o == '×') return '*'; if (o == '÷') return '/'; - if (o == '/') + if (o == '�?) return '/'; if (c == 12288) { diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java index c0d2b1f0c..f021187e5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java @@ -71,7 +71,7 @@ public Object visitFACT_fun(FACT_funContext context) { } @Override - public Object visitREGEXREPALCE_fun(REGEXREPALCE_funContext context) { + public Object visitREGEXREPLACE_fun(REGEXREPLACE_funContext context) { return visitChildren(context); } @@ -253,7 +253,7 @@ public Object visitWORKDAY_fun(WORKDAY_funContext context) { } @Override - public Object visitIsError_fun(IsError_funContext context) { + public Object visitIsError_fun(ISERROR_funContext context) { return visitChildren(context); } @@ -403,7 +403,7 @@ public Object visitLOG10_fun(LOG10_funContext context) { } @Override - public Object visitIsText_fun(IsText_funContext context) { + public Object visitIsText_fun(ISTEXT_funContext context) { return visitChildren(context); } @@ -862,7 +862,7 @@ public Object visitNORMSDIST_fun(NORMSDIST_funContext context) { } @Override - public Object visitIsNumber_fun(IsNumber_funContext context) { + public Object visitIsNumber_fun(ISNUMBER_funContext context) { return visitChildren(context); } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java index 78bc3f5ad..15ae101b5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java @@ -29,7 +29,7 @@ import toolgood.algorithm.internals.functions.csharp.Function_LOOKCEILING; import toolgood.algorithm.internals.functions.csharp.Function_LOOKFLOOR; import toolgood.algorithm.internals.functions.csharp.Function_REGEX; -import toolgood.algorithm.internals.functions.csharp.Function_REGEXREPALCE; +import toolgood.algorithm.internals.functions.csharp.Function_REGEXREPLACE; import toolgood.algorithm.internals.functions.csharp.Function_REMOVEEND; import toolgood.algorithm.internals.functions.csharp.Function_REMOVESTART; import toolgood.algorithm.internals.functions.csharp.Function_SPLIT; @@ -220,7 +220,7 @@ public FunctionBase visitISNUMBER_fun(mathParser.ISNUMBER_funContext context) return new Function_ISNUMBER(args1); } - public FunctionBase visitIsText_fun(mathParser.IsText_funContext context) + public FunctionBase visitIsText_fun(mathParser.ISTEXT_funContext context) { FunctionBase args1 = this.visit(context.expr()); return new Function_IsText(args1); @@ -2034,13 +2034,13 @@ public FunctionBase visitREGEX_fun(mathParser.REGEX_funContext context) return new Function_REGEX(args1, args2); } - public FunctionBase visitREGEXREPALCE_fun(mathParser.REGEXREPALCE_funContext context) + public FunctionBase visitREGEXREPLACE_fun(mathParser.REGEXREPLACE_funContext context) { List exprs = context.expr(); FunctionBase args1 = exprs.get(0).accept(this); FunctionBase args2 = exprs.get(1).accept(this); FunctionBase args3 = exprs.get(2).accept(this); - return new Function_REGEXREPALCE(args1, args2, args3); + return new Function_REGEXREPLACE(args1, args2, args3); } public FunctionBase visitISREGEX_fun(mathParser.ISREGEX_funContext context) diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java index 34057d46a..6e15039fa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java @@ -60,7 +60,7 @@ public ConditionTree visitFACT_fun(mathParser.FACT_funContext context) { } @Override - public ConditionTree visitREGEXREPALCE_fun(mathParser.REGEXREPALCE_funContext context) { + public ConditionTree visitREGEXREPLACE_fun(mathParser.REGEXREPLACE_funContext context) { return visit_fun(context); } @@ -215,7 +215,7 @@ public ConditionTree visitWORKDAY_fun(mathParser.WORKDAY_funContext context) { } @Override - public ConditionTree visitIsError_fun(mathParser.IsError_funContext context) { + public ConditionTree visitIsError_fun(mathParser.ISERROR_funContext context) { return visit_fun(context); } @@ -341,7 +341,7 @@ public ConditionTree visitLOG10_fun(mathParser.LOG10_funContext context) { } @Override - public ConditionTree visitIsText_fun(mathParser.IsText_funContext context) { + public ConditionTree visitIsText_fun(mathParser.ISTEXT_funContext context) { return visit_fun(context); } @@ -732,7 +732,7 @@ public ConditionTree visitNORMSDIST_fun(mathParser.NORMSDIST_funContext context) } @Override - public ConditionTree visitIsNumber_fun(mathParser.IsNumber_funContext context) { + public ConditionTree visitIsNumber_fun(mathParser.ISNUMBER_funContext context) { return visit_fun(context); } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java index 6913ac825..3661d3ce4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java @@ -620,7 +620,7 @@ public CalculateTree visitISREGEX_fun(mathParser.ISREGEX_funContext context) { } @Override - public CalculateTree visitIsText_fun(mathParser.IsText_funContext context) { + public CalculateTree visitIsText_fun(mathParser.ISTEXT_funContext context) { return visit_fun(context); } @@ -920,7 +920,7 @@ public CalculateTree visitRAND_fun(mathParser.RAND_funContext context) { } @Override - public CalculateTree visitREGEXREPALCE_fun(mathParser.REGEXREPALCE_funContext context) { + public CalculateTree visitREGEXREPLACE_fun(mathParser.REGEXREPLACE_funContext context) { return visit_fun(context); } diff --git a/java/src/main/java/toolgood/algorithm/litJson/FsmContext.java b/java/src/main/java/toolgood/algorithm/litJson/FsmContext.java index ac4d1cc26..3f1be09c1 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/FsmContext.java +++ b/java/src/main/java/toolgood/algorithm/litJson/FsmContext.java @@ -5,4 +5,4 @@ public class FsmContext { public int NextState; public Lexer L; public int StateStack; -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java b/java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java index 6f33b25fa..0b239a5da 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java +++ b/java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java @@ -22,4 +22,4 @@ public interface IJsonWrapper { void Set(String key, IJsonWrapper val); -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java index 582d182ee..50a6df619 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java @@ -164,4 +164,4 @@ public String StringValue() { return inst_string; } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonException.java b/java/src/main/java/toolgood/algorithm/litJson/JsonException.java index c47b409d4..9a7afc6d7 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonException.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonException.java @@ -20,4 +20,4 @@ public JsonException(int c) { public JsonException(String message) { // : base(message) } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java b/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java index 893d57b9b..8877a39f1 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java @@ -63,4 +63,4 @@ public static JsonData ToObject(String json) throws JsonException JsonReader reader = new JsonReader(json); return (JsonData)ReadValue(reader) ; } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java b/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java index 84d56fdea..b3f821713 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java @@ -19,7 +19,7 @@ public enum JsonToken { public int value; - // 构造方法 + // 构造方�? private JsonToken( int index) { this.value = index; } diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonType.java b/java/src/main/java/toolgood/algorithm/litJson/JsonType.java index a1f6513d0..352212c7e 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonType.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonType.java @@ -14,8 +14,8 @@ public enum JsonType { Null(7); public int value; - // 构造方法 + // 构造方�? private JsonType( int index) { this.value = index; } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/litJson/Lexer.java b/java/src/main/java/toolgood/algorithm/litJson/Lexer.java index 134f42a7c..816297e88 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/Lexer.java +++ b/java/src/main/java/toolgood/algorithm/litJson/Lexer.java @@ -819,4 +819,4 @@ public boolean NextToken() throws JsonException { private void UngetChar() { input_buffer = input_char; } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java b/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java index fed359e2c..81a1f773b 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java +++ b/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java @@ -30,7 +30,7 @@ public enum ParserToken { public int value; - // 构造方法 + // 构造方�? private ParserToken( int index) { this.value = index; } diff --git a/java/src/main/java/toolgood/algorithm/math/mathBaseVisitor.java b/java/src/main/java/toolgood/algorithm/math/mathBaseVisitor.java index 7dbe62f09..0e56e67a0 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathBaseVisitor.java +++ b/java/src/main/java/toolgood/algorithm/math/mathBaseVisitor.java @@ -2027,4 +2027,4 @@ public class mathBaseVisitor extends AbstractParseTreeVisitor implements m * {@link #visitChildren} on {@code ctx}.

*/ @Override public T visitParameter2(mathParser.Parameter2Context ctx) { return visitChildren(ctx); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/math/mathLexer.java b/java/src/main/java/toolgood/algorithm/math/mathLexer.java index f5e2de651..1a3668e51 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathLexer.java +++ b/java/src/main/java/toolgood/algorithm/math/mathLexer.java @@ -2315,4 +2315,4 @@ public mathLexer(CharStream input) { _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); } } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/math/mathParser.java b/java/src/main/java/toolgood/algorithm/math/mathParser.java index 2ebfab52f..4a89e665c 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathParser.java +++ b/java/src/main/java/toolgood/algorithm/math/mathParser.java @@ -15476,4 +15476,4 @@ private boolean expr_sempred(ExprContext _localctx, int predIndex) { _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); } } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java index a81021cb2..42b7d07d1 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathVisitor.java +++ b/java/src/main/java/toolgood/algorithm/math/mathVisitor.java @@ -2023,4 +2023,4 @@ public interface mathVisitor extends ParseTreeVisitor { * @return the visitor result */ T visitParameter2(mathParser.Parameter2Context ctx); -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Constants.java b/java/src/main/java/toolgood/algorithm/mathNet/Constants.java index 4042e5a5a..a1f37cdae 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Constants.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Constants.java @@ -16,4 +16,4 @@ public class Constants { /// The number 2 * sqrt(e / pi) public final static double TwoSqrtEOverPi = 1.8603827342052657173362492472666631120594218414085755; -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java index 14dc11cbe..9da03e83d 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java @@ -69,4 +69,4 @@ public static double InvCDF(double a, double b, double p) throws Exception return Brent.FindRoot(f, 0.0, 1.0, 1e-12); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java index e46e0a677..b5b6ad0a2 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java @@ -17,9 +17,9 @@ public class Binomial { /// /// The location in the domain where we want to Evaluate the /// probability mass function. - /// The success probability (p) in each trial. Range: 0 ≤ p ≤ + /// The success probability (p) in each trial. Range: 0 �?p �? /// 1. - /// The number of trials (n). Range: n ≥ 0. + /// The number of trials (n). Range: n �?0. /// the probability mass at location . public static double PMF(double p, int n, int k) { // if (!(p >= 0.0 && p <= 1.0 && n >= 0)) { @@ -43,13 +43,13 @@ public static double PMF(double p, int n, int k) { /// /// Computes the cumulative distribution (CDF) of the distribution at x, i.e. - /// P(X ≤ x). + /// P(X �?x). /// /// The location at which to compute the cumulative distribution /// function. - /// The success probability (p) in each trial. Range: 0 ≤ p ≤ + /// The success probability (p) in each trial. Range: 0 �?p �? /// 1. - /// The number of trials (n). Range: n ≥ 0. + /// The number of trials (n). Range: n �?0. /// the cumulative distribution at location . ///// @@ -70,4 +70,4 @@ public static double CDF(double p, int n, double x) { return SpecialFunctions.BetaRegularized(n - k, k + 1, 1 - p); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java index 14ddb602c..4249c59a0 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java @@ -2,9 +2,9 @@ public class Exponential { /// - /// Computes the probability density of the distribution (PDF) at x, i.e. ∂P(X ≤ x)/∂x. + /// Computes the probability density of the distribution (PDF) at x, i.e. ∂P(X �?x)/∂x. /// - /// The rate (λ) parameter of the distribution. Range: λ ≥ 0. + /// The rate (λ) parameter of the distribution. Range: λ �?0. /// The location at which to compute the density. /// the density at . ///// @@ -18,10 +18,10 @@ public static double PDF(double rate, double x) } /// - /// Computes the cumulative distribution (CDF) of the distribution at x, i.e. P(X ≤ x). + /// Computes the cumulative distribution (CDF) of the distribution at x, i.e. P(X �?x). /// /// The location at which to compute the cumulative distribution function. - /// The rate (λ) parameter of the distribution. Range: λ ≥ 0. + /// The rate (λ) parameter of the distribution. Range: λ �?0. /// the cumulative distribution at location . ///// public static double CDF(double rate, double x) @@ -32,4 +32,4 @@ public static double CDF(double rate, double x) return x < 0.0 ? 0.0 : 1.0 - Math.exp(-rate * x); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java index 2e95e44ff..fe93d93a5 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java @@ -26,4 +26,4 @@ public static double InvCDF(double d1, double d2, double p) throws Exception return Brent.FindRoot(f, 0, 1000, 1e-12); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java index 6136c63f8..8656534d8 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java @@ -80,4 +80,4 @@ public static double InvCDF(double shape, double rate, double p) return SpecialFunctions.GammaLowerRegularizedInv(shape, p) / rate; } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java index 4b16a75a2..fda6c4a08 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java @@ -20,4 +20,4 @@ public static double PMF(int population, int success, int draws, int k) return SpecialFunctions.Binomial(success, k) * SpecialFunctions.Binomial(population - success, draws - k) / SpecialFunctions.Binomial(population, draws); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java index 4e5e61216..dc37c4587 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java @@ -23,4 +23,4 @@ public static double InvCDF(double mu, double sigma, double p) return p <= 0.0 ? 0.0 : p >= 1.0 ? Double.POSITIVE_INFINITY : Math.exp(mu - sigma * Constants.Sqrt2 * SpecialFunctions.ErfcInv(2.0 * p)); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java index fa47c277a..f5143c64d 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java @@ -7,8 +7,8 @@ public class NegativeBinomial { /// Computes the probability mass (PMF) at k, i.e. P(X = k). /// /// The location in the domain where we want to Evaluate the probability mass function. - /// The number of failures (r) until the experiment stopped. Range: r ≥ 0. - /// The probability (p) of a trial resulting in success. Range: 0 ≤ p ≤ 1. + /// The number of failures (r) until the experiment stopped. Range: r �?0. + /// The probability (p) of a trial resulting in success. Range: 0 �?p �?1. /// the probability mass at location . public static double PMF(double r, double p, int k) { @@ -19,8 +19,8 @@ public static double PMF(double r, double p, int k) /// Computes the log probability mass (lnPMF) at k, i.e. ln(P(X = k)). /// /// The location in the domain where we want to Evaluate the log probability mass function. - /// The number of failures (r) until the experiment stopped. Range: r ≥ 0. - /// The probability (p) of a trial resulting in success. Range: 0 ≤ p ≤ 1. + /// The number of failures (r) until the experiment stopped. Range: r �?0. + /// The probability (p) of a trial resulting in success. Range: 0 �?p �?1. /// the log probability mass at location . public static double PMFLn(double r, double p, int k) { @@ -35,4 +35,4 @@ public static double PMFLn(double r, double p, int k) + (k * Math.log(1.0 - p)); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java index df88bf90a..459bb00c1 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java @@ -31,4 +31,4 @@ public static double PDF(double mean, double stddev, double x) return Math.exp(-0.5 * d * d) / (Constants.Sqrt2Pi * stddev); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java index 9c0cb72f2..9b9f52d5c 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java @@ -19,7 +19,7 @@ public static double PMF(double lambda, int k) } /// - /// Computes the cumulative distribution (CDF) of the distribution at x, i.e. P(X ≤ x). + /// Computes the cumulative distribution (CDF) of the distribution at x, i.e. P(X �?x). /// /// The location at which to compute the cumulative distribution function. /// The lambda (λ) parameter of the Poisson distribution. Range: λ > 0. @@ -33,4 +33,4 @@ public static double CDF(double lambda, double x) return 1.0 - SpecialFunctions.GammaLowerRegularized(x + 1, lambda); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java index 766af4654..7ecdacf09 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java @@ -44,4 +44,4 @@ public static double InvCDF(double location, double scale, double freedom, doubl return Brent.FindRoot(f, -800, 800, 1e-12); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java index 151452ac7..439856f61 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java @@ -4,7 +4,7 @@ public class Weibull { /// - /// Computes the probability density of the distribution (PDF) at x, i.e. ∂P(X ≤ x)/∂x. + /// Computes the probability density of the distribution (PDF) at x, i.e. ∂P(X �?x)/∂x. /// /// The shape (k) of the Weibull distribution. Range: k > 0. /// The scale (λ) of the Weibull distribution. Range: λ > 0. @@ -33,7 +33,7 @@ public static double PDF(double shape, double scale, double x) /// - /// Computes the cumulative distribution (CDF) of the distribution at x, i.e. P(X ≤ x). + /// Computes the cumulative distribution (CDF) of the distribution at x, i.e. P(X �?x). /// /// The location at which to compute the cumulative distribution function. /// The shape (k) of the Weibull distribution. Range: k > 0. @@ -52,4 +52,4 @@ public static double CDF(double shape, double scale, double x) return -SpecialFunctions.ExponentialMinusOne(-Math.pow(x, shape) * Math.pow(scale, -shape)); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java b/java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java index 8a1c7868b..d22e232cf 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java @@ -33,4 +33,4 @@ public static double Polynomial(double z, double[] coefficients) { // return sum; // } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java b/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java index 03f654d30..dac61dd17 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java @@ -174,4 +174,4 @@ public static double WEIBULL(double x, double shape, double scale, boolean state return Weibull.CDF(shape, scale, x); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Precision.java b/java/src/main/java/toolgood/algorithm/mathNet/Precision.java index e5184a44f..8520f8e5e 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Precision.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Precision.java @@ -163,4 +163,4 @@ public static boolean AlmostEqualNorm(double a, double b, double diff, double ma return Math.abs(diff) < maximumAbsoluteError; } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java index 52bb2805d..53afc017c 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java @@ -134,4 +134,4 @@ static double Sign(double a, double b) return b >= 0 ? (a >= 0 ? a : -a) : (a >= 0 ? -a : a); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java index 929e7be8d..3b98a86f2 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java @@ -5,4 +5,4 @@ public class RootNumber { public RootNumber(){ root=0.0; } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java b/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java index 57955e4e7..b18a3acb2 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java @@ -874,4 +874,4 @@ public static double Series(double power) { return sum; } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java index 2c35dbd74..d79b156cb 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java @@ -205,4 +205,4 @@ static double SelectInplace(double[] workingData, int rank) } } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java index d98354cee..534d3d444 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java @@ -10,4 +10,4 @@ public enum QuantileDefinition { R7 ,//= 7, Excel,// = 7,// Mode = 7, S = 7, R8,// = 8, //Median = 8, Default = 8, R9,// = 9, //Normal = 9, -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java index 2ce1e38c5..8d41aa27a 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java @@ -48,4 +48,4 @@ private static int binarySearch(double[] array, double key) { } return -1; } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java index bbb86d91f..4cb7a275c 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java @@ -52,4 +52,4 @@ private static List ShellSort(List array) { } return array; } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/operands/KeyValue.java b/java/src/main/java/toolgood/algorithm/operands/KeyValue.java new file mode 100644 index 000000000..8475d6a35 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/KeyValue.java @@ -0,0 +1,16 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +class KeyValue { + public String key; + public Operand value; +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandArray.java b/java/src/main/java/toolgood/algorithm/operands/OperandArray.java new file mode 100644 index 000000000..6f48ee810 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/OperandArray.java @@ -0,0 +1,72 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +class OperandArray extends Operand { + private final List value; + + public OperandArray(List obj) { + value = obj; + } + + @Override + public boolean IsArray() { return true; } + + @Override + public boolean IsNotArray() { return false; } + + @Override + public OperandType Type() { return OperandType.ARRARY; } + + @Override + public List ArrayValue() { return value; } + + @Override + public Operand ToText(String errorMessage) { + return Create(this.toString()); + } + + @Override + public Operand ToText(String errorMessage, Object... args) { + return Create(this.toString()); + } + + @Override + public Operand ToArray(String errorMessage) { return this; } + + @Override + public Operand ToArray(String errorMessage, Object... args) { return this; } + + @Override + public Operand ToJson(String errorMessage) { + String txt = this.toString(); + try { + JsonData json = JsonData.Parse(txt); + return Operand.Create(json); + } catch (Exception e) { + return Error(errorMessage != null ? errorMessage : "Convert to json error!"); + } + } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append('['); + for (int i = 0; i < value.size(); i++) { + if (i > 0) { + stringBuilder.append(','); + } + stringBuilder.append(value.get(i).toString()); + } + stringBuilder.append(']'); + return stringBuilder.toString(); + } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandBigDecimal.java b/java/src/main/java/toolgood/algorithm/operands/OperandBigDecimal.java new file mode 100644 index 000000000..bae4b4f04 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/OperandBigDecimal.java @@ -0,0 +1,68 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +class OperandBigDecimal extends Operand { + private final BigDecimal value; + + public OperandBigDecimal(BigDecimal obj) { + value = obj; + } + + @Override + public boolean IsNumber() { return true; } + + @Override + public boolean IsNotNumber() { return false; } + + @Override + public OperandType Type() { return OperandType.NUMBER; } + + @Override + public int IntValue() { return value.intValue(); } + + @Override + public BigDecimal NumberValue() { return value; } + + @Override + public long LongValue() { return value.longValue(); } + + @Override + public double DoubleValue() { return value.doubleValue(); } + + + @Override + public Operand ToNumber(String errorMessage) { return this; } + + @Override + public Operand ToNumber(String errorMessage, Object... args) { return this; } + + @Override + public Operand ToBoolean(String errorMessage) { return value.compareTo(BigDecimal.ZERO) != 0 ? TRUE : FALSE; } + + @Override + public Operand ToBoolean(String errorMessage, Object... args) { return value.compareTo(BigDecimal.ZERO) != 0 ? TRUE : FALSE; } + + @Override + public Operand ToText(String errorMessage) { return Create(value.toString()); } + + @Override + public Operand ToText(String errorMessage, Object... args) { return Create(value.toString()); } + + @Override + public Operand ToMyDate(String errorMessage) { return Create(new MyDate(value.longValue())); } + + @Override + public Operand ToMyDate(String errorMessage, Object... args) { return Create(new MyDate(value.longValue())); } + + @Override + public String toString() { return NumberValue().toString(); } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandBoolean.java b/java/src/main/java/toolgood/algorithm/operands/OperandBoolean.java new file mode 100644 index 000000000..b38cd32d5 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/OperandBoolean.java @@ -0,0 +1,52 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +class OperandBoolean extends Operand { + private final boolean value; + + public OperandBoolean(boolean obj) { + value = obj; + } + + @Override + public boolean IsBoolean() { return true; } + + @Override + public boolean IsNotBoolean() { return false; } + + @Override + public OperandType Type() { return OperandType.BOOLEAN; } + + @Override + public boolean BooleanValue() { return value; } + + @Override + public Operand ToNumber(String errorMessage) { return value ? ONE : ZERO; } + + @Override + public Operand ToNumber(String errorMessage, Object... args) { return value ? ONE : ZERO; } + + @Override + public Operand ToBoolean(String errorMessage) { return this; } + + @Override + public Operand ToBoolean(String errorMessage, Object... args) { return this; } + + @Override + public Operand ToText(String errorMessage) { return Create(value ? "TRUE" : "FALSE"); } + + @Override + public Operand ToText(String errorMessage, Object... args) { return Create(value ? "TRUE" : "FALSE"); } + + @Override + public String toString() { return value ? "true" : "false"; } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandError.java b/java/src/main/java/toolgood/algorithm/operands/OperandError.java new file mode 100644 index 000000000..2b884c8cb --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/OperandError.java @@ -0,0 +1,58 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +class OperandError extends Operand { + private final String errorMsg; + + public OperandError(String msg) { + errorMsg = msg; + } + + @Override + public OperandType Type() { return OperandType.ERROR; } + + @Override + public boolean IsError() { return true; } + + @Override + public String ErrorMsg() { return errorMsg; } + + @Override + public Operand ToNumber(String errorMessage) { return this; } + + @Override + public Operand ToNumber(String errorMessage, Object... args) { return this; } + + @Override + public Operand ToBoolean(String errorMessage) { return this; } + + @Override + public Operand ToBoolean(String errorMessage, Object... args) { return this; } + + @Override + public Operand ToText(String errorMessage) { return this; } + + @Override + public Operand ToText(String errorMessage, Object... args) { return this; } + + @Override + public Operand ToArray(String errorMessage) { return this; } + + @Override + public Operand ToArray(String errorMessage, Object... args) { return this; } + + @Override + public Operand ToMyDate(String errorMessage) { return this; } + + @Override + public Operand ToMyDate(String errorMessage, Object... args) { return this; } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandInt.java b/java/src/main/java/toolgood/algorithm/operands/OperandInt.java new file mode 100644 index 000000000..c288a492a --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/OperandInt.java @@ -0,0 +1,68 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +class OperandInt extends Operand { + private final int value; + + public OperandInt(int obj) { + value = obj; + } + + @Override + public boolean IsNumber() { return true; } + + @Override + public boolean IsNotNumber() { return false; } + + @Override + public OperandType Type() { return OperandType.NUMBER; } + + @Override + public int IntValue() { return value; } + + @Override + public BigDecimal NumberValue() { return BigDecimal.valueOf(value); } + + @Override + public long LongValue() { return value; } + + @Override + public double DoubleValue() { return value; } + + + @Override + public Operand ToNumber(String errorMessage) { return this; } + + @Override + public Operand ToNumber(String errorMessage, Object... args) { return this; } + + @Override + public Operand ToBoolean(String errorMessage) { return IntValue() != 0 ? TRUE : FALSE; } + + @Override + public Operand ToBoolean(String errorMessage, Object... args) { return IntValue() != 0 ? TRUE : FALSE; } + + @Override + public Operand ToText(String errorMessage) { return Create(Integer.toString(value)); } + + @Override + public Operand ToText(String errorMessage, Object... args) { return Create(Integer.toString(value)); } + + @Override + public Operand ToMyDate(String errorMessage) { return Create(new MyDate(value)); } + + @Override + public Operand ToMyDate(String errorMessage, Object... args) { return Create(new MyDate(value)); } + + @Override + public String toString() { return NumberValue().toString(); } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandJson.java b/java/src/main/java/toolgood/algorithm/operands/OperandJson.java new file mode 100644 index 000000000..b91553c44 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/OperandJson.java @@ -0,0 +1,95 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +class OperandJson extends Operand { + private final JsonData value; + + public OperandJson(JsonData obj) { + value = obj; + } + + @Override + public boolean IsJson() { return true; } + + @Override + public boolean IsNotJson() { return false; } + + @Override + public OperandType Type() { return OperandType.JSON; } + + @Override + JsonData JsonValue() { return value; } + + @Override + public Operand ToText(String errorMessage) { + return Create(value.toString()); + } + + @Override + public Operand ToText(String errorMessage, Object... args) { + return Create(value.toString()); + } + + @Override + public Operand ToArray(String errorMessage) { + if (value.IsArray()) { + List list = new ArrayList<>(); + for (JsonData v : value.getArray()) { + if (v.IsString()) { + list.add(Operand.Create(v.getString())); + } else if (v.IsBoolean()) { + list.add(Operand.Create(v.getBoolean())); + } else if (v.IsNumber()) { + list.add(Operand.Create(new BigDecimal(v.getNumber().toString()))); + } else if (v.IsNull()) { + list.add(Operand.CreateNull()); + } else { + list.add(Operand.Create(v)); + } + } + return Operand.Create(list); + } + return Error(errorMessage != null ? errorMessage : "Convert to array error!"); + } + + @Override + public Operand ToArray(String errorMessage, Object... args) { + if (value.IsArray()) { + List list = new ArrayList<>(); + for (JsonData v : value.getArray()) { + if (v.IsString()) { + list.add(Operand.Create(v.getString())); + } else if (v.IsBoolean()) { + list.add(Operand.Create(v.getBoolean())); + } else if (v.IsNumber()) { + list.add(Operand.Create(new BigDecimal(v.getNumber().toString()))); + } else if (v.IsNull()) { + list.add(Operand.CreateNull()); + } else { + list.add(Operand.Create(v)); + } + } + return Operand.Create(list); + } + return Error(String.format(errorMessage, args)); + } + + @Override + public Operand ToJson(String errorMessage) { + return this; + } + + @Override + public String toString() { + return value.toString(); + } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandKeyValue.java b/java/src/main/java/toolgood/algorithm/operands/OperandKeyValue.java new file mode 100644 index 000000000..9b01f98ce --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/OperandKeyValue.java @@ -0,0 +1,30 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +class OperandKeyValue extends Operand { + private final KeyValue value; + + public OperandKeyValue(KeyValue obj) { + value = obj; + } + + @Override + public boolean IsArrayJson() { return true; } + + @Override + public boolean IsNotArrayJson() { return false; } + + @Override + public OperandType Type() { return OperandType.ARRARYJSON; } + + public KeyValue Value() { return value; } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandKeyValueList.java b/java/src/main/java/toolgood/algorithm/operands/OperandKeyValueList.java new file mode 100644 index 000000000..a14ca62b0 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/OperandKeyValueList.java @@ -0,0 +1,124 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +class OperandKeyValueList extends Operand { + private final List textList; + + public OperandKeyValueList() { + textList = new ArrayList<>(); + } + + @Override + public boolean IsArrayJson() { return true; } + + @Override + public boolean IsNotArrayJson() { return false; } + + @Override + public OperandType Type() { return OperandType.ARRARYJSON; } + + @Override + public List ArrayValue() { + List result = new ArrayList<>(); + for (KeyValue kv : textList) { + result.add(kv.value); + } + return result; + } + + @Override + public Operand ToText(String errorMessage) { + return Create(this.toString()); + } + + @Override + public Operand ToText(String errorMessage, Object... args) { + return Create(this.toString()); + } + + @Override + public Operand ToArray(String errorMessage) { + return Create(this.ArrayValue()); + } + + @Override + public Operand ToArray(String errorMessage, Object... args) { + return Create(this.ArrayValue()); + } + + @Override + public Operand ToJson(String errorMessage) { + String txt = this.toString(); + try { + JsonData json = JsonData.Parse(txt); + return Operand.Create(json); + } catch (Exception e) { + return Error(errorMessage != null ? errorMessage : "Convert to json error!"); + } + } + + public void addValue(KeyValue keyValue) { + textList.add(keyValue); + } + + public boolean tryGetValue(String key, Operand[] value) { + for (KeyValue item : textList) { + if (item.key.equals(key)) { + value[0] = item.value; + return true; + } + } + return false; + } + + public boolean containsKey(Operand value) { + for (KeyValue item : textList) { + if (value.TextValue().equals(item.key)) { + return true; + } + } + return false; + } + + public boolean containsValue(Operand value) { + for (KeyValue item : textList) { + Operand op = item.value; + if (value.Type() != op.Type()) { + continue; + } + if (value.IsText()) { + if (value.TextValue().equals(op.TextValue())) { + return true; + } + } + } + return false; + } + + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(); + stringBuilder.append('{'); + for (int i = 0; i < textList.size(); i++) { + if (i > 0) { + stringBuilder.append(','); + } + stringBuilder.append('"'); + stringBuilder.append(textList.get(i).key); + stringBuilder.append('"'); + stringBuilder.append(':'); + stringBuilder.append(textList.get(i).value.toString()); + } + stringBuilder.append('}'); + return stringBuilder.toString(); + } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandMyDate.java b/java/src/main/java/toolgood/algorithm/operands/OperandMyDate.java new file mode 100644 index 000000000..2165909bb --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/OperandMyDate.java @@ -0,0 +1,58 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +class OperandMyDate extends Operand { + private final MyDate value; + + public OperandMyDate(MyDate obj) { + value = obj; + } + + @Override + public boolean IsDate() { return true; } + + @Override + public boolean IsNotDate() { return false; } + + @Override + public OperandType Type() { return OperandType.DATE; } + + @Override + public MyDate DateValue() { return value; } + + @Override + public Operand ToNumber(String errorMessage) { return Create(value.ToNumber()); } + + @Override + public Operand ToNumber(String errorMessage, Object... args) { return Create(value.ToNumber()); } + + @Override + public Operand ToBoolean(String errorMessage) { return value.ToNumber() != 0 ? TRUE : FALSE; } + + @Override + public Operand ToBoolean(String errorMessage, Object... args) { return value.ToNumber() != 0 ? TRUE : FALSE; } + + @Override + public Operand ToText(String errorMessage) { return Create(value.toString()); } + + @Override + public Operand ToText(String errorMessage, Object... args) { return Create(value.toString()); } + + @Override + public Operand ToMyDate(String errorMessage) { return this; } + + @Override + public Operand ToMyDate(String errorMessage, Object... args) { return this; } + + @Override + public String toString() { return '"' + value.toString() + '"'; } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandNone.java b/java/src/main/java/toolgood/algorithm/operands/OperandNone.java new file mode 100644 index 000000000..39474dd7d --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/OperandNone.java @@ -0,0 +1,29 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +/** + * NONE 类型操作数,用于参数类型推断(NoneEngine 返回此值) + */ +class OperandNone extends Operand { + + @Override + public OperandType Type() { return OperandType.NONE; } + + @Override + public boolean IsError() { return true; } + + @Override + public String ErrorMsg() { return "NONE"; } + + @Override + public String toString() { return "NONE"; } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandNull.java b/java/src/main/java/toolgood/algorithm/operands/OperandNull.java new file mode 100644 index 000000000..7eaefc1cb --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/OperandNull.java @@ -0,0 +1,25 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +class OperandNull extends Operand { + @Override + public boolean IsNull() { return true; } + + @Override + public boolean IsNotNull() { return false; } + + @Override + public OperandType Type() { return OperandType.NULL; } + + @Override + public String toString() { return "null"; } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandString.java b/java/src/main/java/toolgood/algorithm/operands/OperandString.java new file mode 100644 index 000000000..644dd414d --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/OperandString.java @@ -0,0 +1,187 @@ +package toolgood.algorithm.operands; + +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.internals.functions.FunctionUtil; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +class OperandString extends Operand { + private final String value; + + public OperandString(String obj) { + value = obj; + } + + @Override + public boolean IsText() { return true; } + + @Override + public boolean IsNotText() { return false; } + + @Override + public OperandType Type() { return OperandType.TEXT; } + + @Override + public String TextValue() { return value; } + + @Override + public Operand ToNumber(String errorMessage) { + try { + BigDecimal bd = new BigDecimal(value); + return Operand.Create(bd); + } catch (NumberFormatException e) { + if (errorMessage == null) { + return Error("Convert to number error!"); + } + return Error(errorMessage); + } + } + + @Override + public Operand ToNumber(String errorMessage, Object... args) { + try { + BigDecimal bd = new BigDecimal(value); + return Operand.Create(bd); + } catch (NumberFormatException e) { + if (errorMessage == null) { + return Error("Convert to number error!"); + } + return Error(String.format(errorMessage, args)); + } + } + + @Override + public Operand ToText(String errorMessage) { return this; } + + @Override + public Operand ToText(String errorMessage, Object... args) { return this; } + + @Override + public Operand ToBoolean(String errorMessage) { + FunctionUtil.BooleanHolder boolHolder = new FunctionUtil.BooleanHolder(); + if (FunctionUtil.tryParseBoolean(value, boolHolder)) { + return boolHolder.value ? Operand.TRUE : Operand.FALSE; + } + if (errorMessage == null) { + return Error("Convert to bool error!"); + } + return Error(errorMessage); + } + + @Override + public Operand ToBoolean(String errorMessage, Object... args) { + FunctionUtil.BooleanHolder boolHolder = new FunctionUtil.BooleanHolder(); + if (FunctionUtil.tryParseBoolean(value, boolHolder)) { + return boolHolder.value ? Operand.TRUE : Operand.FALSE; + } + if (errorMessage == null) { + return Error("Convert to bool error!"); + } + return Error(String.format(errorMessage, args)); + } + + @Override + public Operand ToMyDate(String errorMessage) { + try { + // 尝试解析为时间戳 + long timestamp = Long.parseLong(value); + return Create(new MyDate(timestamp)); + } catch (NumberFormatException e) { + // 尝试解析为日期字符串 + try { + MyDate date = MyDate.parse(value); + return Create(date); + } catch (Exception ex) { + if (errorMessage == null) { + return Error("Convert to date error!"); + } + return Error(errorMessage); + } + } + } + + @Override + public Operand ToMyDate(String errorMessage, Object... args) { + try { + // 尝试解析为时间戳 + long timestamp = Long.parseLong(value); + return Create(new MyDate(timestamp)); + } catch (NumberFormatException e) { + // 尝试解析为日期字符串 + try { + MyDate date = MyDate.parse(value); + return Create(date); + } catch (Exception ex) { + if (errorMessage == null) { + return Error("Convert to date error!"); + } + return Error(String.format(errorMessage, args)); + } + } + } + + @Override + public Operand ToArray(String errorMessage) { + return Error(errorMessage != null ? errorMessage : "Convert to array error!"); + } + + @Override + public Operand ToJson(String errorMessage) { + String txt = value.trim(); + if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { + try { + JsonData json = JsonData.Parse(txt); + return Operand.Create(json); + } catch (Exception e) { + } + } + return Error(errorMessage != null ? errorMessage : "Convert to json error!"); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append('"'); + for (char c : value.toCharArray()) { + switch (c) { + case '"': + sb.append("\\\""); + break; + case '\n': + sb.append("\\n"); + break; + case '\r': + sb.append("\\r"); + break; + case '\t': + sb.append("\\t"); + break; + case '\0': + sb.append("\\0"); + break; + case '\u000b': + sb.append("\\v"); + break; + case '\u0007': + sb.append("\\a"); + break; + case '\b': + sb.append("\\b"); + break; + case '\f': + sb.append("\\f"); + break; + default: + sb.append(c); + break; + } + } + sb.append('"'); + return sb.toString(); + } +} \ No newline at end of file diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java index 4b795f065..be3ef886a 100644 --- a/java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java +++ b/java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java @@ -8,18 +8,18 @@ public class AreaConverter extends BaseUnitConverter { static { units = new UnitFactors(); - units.put(new UnitFactorSynonyms(new String[]{"m²", "m2", "square metre","square meter", "centiare", "平方米", "平方公尺"}), new BigDecimal(1)); + units.put(new UnitFactorSynonyms(new String[]{"m²", "m2", "square metre","square meter", "centiare", "平方�?, "平方公尺"}), new BigDecimal(1)); units.put(new UnitFactorSynonyms(new String[]{"km²", "km2", "square kilometre","square kilometer", "平方千米"}), new BigDecimal("0.000001")); units.put(new UnitFactorSynonyms(new String[]{"dm²", "dm2", "square centimetre", "square centimeter","平方分米"}), new BigDecimal("100")); units.put(new UnitFactorSynonyms(new String[]{"cm²", "cm2", "square centimetre","square centimeter", "平方厘米"}), new BigDecimal("10000")); units.put(new UnitFactorSynonyms(new String[]{"mm²", "mm2", "square millimetre", "square millimeter", "平方毫米"}), new BigDecimal("1000000")); units.put(new UnitFactorSynonyms(new String[]{"ft²", "ft2", "square foot", "square feet", "sq ft", "平方英尺"}), BigDecimal.valueOf(1d / 0.3048d / 0.3048d)); - units.put(new UnitFactorSynonyms(new String[]{"yd²", "yd2", "sq yd", "square yard", "平方码"}), BigDecimal.valueOf(1d / 0.9144d / 0.9144d)); + units.put(new UnitFactorSynonyms(new String[]{"yd²", "yd2", "sq yd", "square yard", "平方�?}), BigDecimal.valueOf(1d / 0.9144d / 0.9144d)); units.put(new UnitFactorSynonyms(new String[]{"a", "are"}), new BigDecimal("0.01")); units.put(new UnitFactorSynonyms(new String[]{"ha", "hectare", "公顷"}), new BigDecimal("0.0001")); units.put(new UnitFactorSynonyms(new String[]{"in²", "in2", "sq in", "square inch", "平方英寸"}), BigDecimal.valueOf(1d / 0.00064516d)); units.put(new UnitFactorSynonyms(new String[]{"mi²", "mi2", "sq mi", "square mile", "平方英里"}), BigDecimal.valueOf(1d / 2589988.110336d)); - units.put(new UnitFactorSynonyms(new String[]{"亩"}), BigDecimal.valueOf(1d / 666.667d)); + units.put(new UnitFactorSynonyms(new String[]{"�?}), BigDecimal.valueOf(1d / 666.667d)); } diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java index 755ca1f19..546c2fbfd 100644 --- a/java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java +++ b/java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java @@ -8,13 +8,13 @@ public class DistanceConverter extends BaseUnitConverter { static { units = new UnitFactors(); - units.put(new UnitFactorSynonyms(new String[]{"m", "metre", "meter", "米"}), new BigDecimal("1")); + units.put(new UnitFactorSynonyms(new String[]{"m", "metre", "meter", "�?}), new BigDecimal("1")); units.put(new UnitFactorSynonyms(new String[]{"km", "kilometre", "kilometer", "千米"}), new BigDecimal("0.001")); units.put(new UnitFactorSynonyms(new String[]{"dm", "decimetre", "decimeter", "分米"}), new BigDecimal("10")); units.put(new UnitFactorSynonyms(new String[]{"cm", "centimetre", "centimeter", "厘米"}), new BigDecimal("100")); units.put(new UnitFactorSynonyms(new String[]{"mm", "millimetre", "millimeter", "毫米"}), new BigDecimal("1000")); units.put(new UnitFactorSynonyms(new String[]{"ft", "foot", "feet", "英尺"}), BigDecimal.valueOf(1250d / 381)); - units.put(new UnitFactorSynonyms(new String[]{"yd", "yard", "码"}), BigDecimal.valueOf(1250d / 1143)); + units.put(new UnitFactorSynonyms(new String[]{"yd", "yard", "�?}), BigDecimal.valueOf(1250d / 1143)); units.put(new UnitFactorSynonyms(new String[]{"mile", "英里"}), BigDecimal.valueOf(125d / 201168)); units.put(new UnitFactorSynonyms(new String[]{"in", "inch", "英寸"}), BigDecimal.valueOf(5000d / 127)); units.put(new UnitFactorSynonyms(new String[]{"au"}), BigDecimal.valueOf(1d / 149600000000d)); diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java index 1800f14df..85e9d9a24 100644 --- a/java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java +++ b/java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java @@ -11,10 +11,10 @@ public class MassConverter extends BaseUnitConverter { static { units = new UnitFactors(); units.put(new UnitFactorSynonyms(new String[]{"kg", "kilogram", "千克"}), new BigDecimal("1")); - units.put(new UnitFactorSynonyms(new String[]{"gram", "g", "克"}), new BigDecimal("1000")); - units.put(new UnitFactorSynonyms(new String[]{"ton", "t", "吨"}), BigDecimal.valueOf(1 / 1000d)); + units.put(new UnitFactorSynonyms(new String[]{"gram", "g", "�?}), new BigDecimal("1000")); + units.put(new UnitFactorSynonyms(new String[]{"ton", "t", "�?}), BigDecimal.valueOf(1 / 1000d)); units.put(new UnitFactorSynonyms(new String[]{"lb", "lbs", "pound", "pounds", "英镑"}), BigDecimal.valueOf(100000000d / 45359237)); - units.put(new UnitFactorSynonyms(new String[]{"st", "stone", "石"}), BigDecimal.valueOf(50000000d / 317514659)); + units.put(new UnitFactorSynonyms(new String[]{"st", "stone", "�?}), BigDecimal.valueOf(50000000d / 317514659)); units.put(new UnitFactorSynonyms(new String[]{"oz", "ounce", "盎司"}), BigDecimal.valueOf(1600000000d / 45359237)); units.put(new UnitFactorSynonyms(new String[]{"quintal", "英担"}), new BigDecimal("0.01")); units.put(new UnitFactorSynonyms(new String[]{"short ton", "net ton", "us ton", "短吨", "美吨"}), new BigDecimal("0.00110231")); diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java index 9368bac78..a292450c0 100644 --- a/java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java +++ b/java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java @@ -8,8 +8,8 @@ public class VolumeConverter extends BaseUnitConverter { static { units = new UnitFactors(); - units.put(new UnitFactorSynonyms(new String[]{"l", "L", "lt", "ltr", "liter", "litre", "dm³", "dm3", "cubic decimetre","cubic decimeter", "升", "立方分米"}), new BigDecimal("1")); - units.put(new UnitFactorSynonyms(new String[]{"m³", "m3", "cubic metre","cubic meter", "立方米"}), new BigDecimal("0.001")); + units.put(new UnitFactorSynonyms(new String[]{"l", "L", "lt", "ltr", "liter", "litre", "dm³", "dm3", "cubic decimetre","cubic decimeter", "�?, "立方分米"}), new BigDecimal("1")); + units.put(new UnitFactorSynonyms(new String[]{"m³", "m3", "cubic metre","cubic meter", "立方�?}), new BigDecimal("0.001")); units.put(new UnitFactorSynonyms(new String[]{"km³", "km3", "cubic kilometre","cubic kilometer", "立方千米"}), new BigDecimal("0.000000000001")); units.put(new UnitFactorSynonyms(new String[]{"cm³", "cm3", "cubic centimetre","cubic centimeter", "立方厘米", "毫升"}), new BigDecimal("1000")); units.put(new UnitFactorSynonyms(new String[]{"mm³", "mm3", "cubic millimetre","cubic millimeter", "立方毫米"}), new BigDecimal("1000000")); From f81760f1eb4179c10ef25a566d978f2a96d6cfb0 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 14:06:49 +0800 Subject: [PATCH 36/98] fix --- java/pom.xml | 5 +++++ .../toolgood/algorithm/DemoApplication.java | 2 +- .../algorithm/Tests/AlgorithmEngineTest.java | 18 +++++++++--------- .../Tests/AlgorithmEngineTest_csharp.java | 4 ++-- .../Tests/AlgorithmEngineTest_dateTime.java | 2 +- .../Tests/AlgorithmEngineTest_flow.java | 2 +- .../Tests/AlgorithmEngineTest_math.java | 2 +- .../Tests/AlgorithmEngineTest_string.java | 8 ++++---- .../Tests/AlgorithmEngineTest_sum.java | 6 +++--- .../Tests/AlgorithmEngineTest_v3_5.java | 16 ++++++++-------- .../Tests/AlgorithmEngineTest_vlookup.java | 4 ++-- .../toolgood/algorithm/Tests/Cylinder.java | 6 +++--- .../Tests3/AlgorithmEngineHelperTest.java | 18 +++++++++--------- 13 files changed, 49 insertions(+), 44 deletions(-) diff --git a/java/pom.xml b/java/pom.xml index 93fdf28ec..8692eef3f 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -92,6 +92,11 @@ maven-compiler-plugin 3.8.0 + + UTF-8 + 1.8 + 1.8 + maven-surefire-plugin diff --git a/java/src/test/java/toolgood/algorithm/DemoApplication.java b/java/src/test/java/toolgood/algorithm/DemoApplication.java index e76e7fd49..27214020f 100644 --- a/java/src/test/java/toolgood/algorithm/DemoApplication.java +++ b/java/src/test/java/toolgood/algorithm/DemoApplication.java @@ -25,4 +25,4 @@ public static void main(String[] args) throws Exception { System.out.println(t); } } -} \ No newline at end of file +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java index f4a04786f..265fac56a 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java @@ -83,7 +83,7 @@ public void Test() throws Exception { boolean value = engine.TryEvaluate("1 > (-2)", false); assertEquals(value, true); - value = engine.TryEvaluate("(-1) > (-2)", false); + value = engine.TryEvaluate("(-1) > (-2�?, false); assertEquals(value, true); value = engine.TryEvaluate("-1 > (-2)", false); @@ -202,12 +202,12 @@ public void Cylinder_Test() throws Exception { double t = c.TryEvaluate("[半径]*[半径]*pi()", 0.0); // 圆底面积 double t2 = c.TryEvaluate("半径*半径*pi()", 0.0); // 圆底面积 - // 3.5版本 取消了这种设置 + // 3.5版本 取消了这种设�? //double t3 = c.TryEvaluate("{半径}*{半径}*pi()", 0.0); // 圆底面积 double t4 = c.TryEvaluate("@半径*@半径*pi()", 0.0); // 圆底面积 double t5 = c.TryEvaluate("#半径#*#半径#*pi()", 0.0); // 圆底面积 - double t6 = c.TryEvaluate("【半径】*【半径】*pi()", 0.0); // 圆底面积 - double t7 = c.TryEvaluate("【半径】*【半径】*pi()", 0.0); // 圆底面积 + double t6 = c.TryEvaluate("【半径�?【半径�?pi()", 0.0); // 圆底面积 + double t7 = c.TryEvaluate("【半径�?【半径�?pi()", 0.0); // 圆底面积 assertEquals(t, t2, 0.001); //assertEquals(t, t3, 0.001); @@ -217,7 +217,7 @@ public void Cylinder_Test() throws Exception { assertEquals(t, t7, 0.001); assertEquals(3 * 3 * Math.PI, t, 0.001); - t = c.TryEvaluate("[直径]*pi()", 0.0); // 圆的长 + t = c.TryEvaluate("[直径]*pi()", 0.0); // 圆的�? assertEquals(2 * 3 * Math.PI, t, 0.001); t = c.TryEvaluate("[半径]*[半径]*pi()*[高]", 0.0); // 圆的体积 assertEquals(3 * 3 * Math.PI * 10, t, 0.001); @@ -229,7 +229,7 @@ public void Cylinder_Test() throws Exception { t = c.TryEvaluate("['半径']*[半径]*pi()*[高]", 0.0); // 圆的体积 assertEquals(3 * 3 * Math.PI * 10, t, 0.001); - t = c.TryEvaluate("求面积(10)", 0.0); // 圆的体积 + t = c.TryEvaluate("求面积(10�?, 0.0); // 圆的体积 assertEquals(10 * 10 * Math.PI, t, 0.001); String json = "{'灰色':'L','canBookCount':905,'saleCount':91,'specId':'43b0e72e98731aed69e1f0cc7d64bf4d'}"; @@ -238,8 +238,8 @@ public void Cylinder_Test() throws Exception { String tt = c.TryEvaluate("['灰色']", ""); // 圆的体积 assertEquals("L", tt); - String tt2 = c.EvaluateFormula("'圆'-[半径]-高", '-'); - assertEquals("圆-3-10", tt2); + String tt2 = c.EvaluateFormula("'�?-[半径]-�?, '-'); + assertEquals("�?3-10", tt2); } @@ -267,4 +267,4 @@ public void Year_test_withType() throws Exception { assertEquals(Long.valueOf(DateTime.now().getYear()).longValue(), operand.LongValue()); } -} \ No newline at end of file +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java index 54017ba23..98d329ea7 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java @@ -90,7 +90,7 @@ public void Regex_test() String r = engine.TryEvaluate("Regex('abcd','a.*c')", ""); assertEquals(r, "abc"); - // 下面代码不支持 + // 下面代码不支�? // r = engine.TryEvaluate("Regex('abcd,abbcd','a.*?c',1)", ""); // assertEquals(r, "abbc"); // r = engine.TryEvaluate("Regex('abcd,abbcd','a(.*?)c',1,1)", ""); @@ -305,4 +305,4 @@ public void Json() dt = engine.TryEvaluate("json('22[1,2,3,4,5,6]')[1].Trim()", ""); assertEquals(dt, ""); } -} \ No newline at end of file +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java index c1cb85b3c..b831b097d 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java @@ -287,4 +287,4 @@ public void ADD_test() { dt = engine.TryEvaluate("'2000-02-01 12:05:06'.AddSeconds(1).Second()", 0); assertEquals(dt, 7); } -} \ No newline at end of file +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java index 9b189c16a..4d8c30ec0 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java @@ -267,4 +267,4 @@ public void andor_Test() } -} \ No newline at end of file +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java index 79af42a26..aa6c23618 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java @@ -462,4 +462,4 @@ private double round(final double value, final int p) { final BigDecimal bigD = new BigDecimal(value); return bigD.setScale(p, BigDecimal.ROUND_HALF_UP).doubleValue(); } -} \ No newline at end of file +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java index 6f10745f5..710ac6f06 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java @@ -11,7 +11,7 @@ public class AlgorithmEngineTest_string { public void ASC_test() { AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("asc('abcABC123')", ""); + String t = engine.TryEvaluate("asc('abcABC12�?)", ""); assertEquals(t, "abcABC123"); } @Test @@ -19,9 +19,9 @@ public void Jis_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("jis('abcABC123')", ""); - assertEquals(t, "abcABC123"); + assertEquals(t, "abcABC12�?); t = engine.TryEvaluate("WIDECHAR('abcABC123')", ""); - assertEquals(t, "abcABC123"); + assertEquals(t, "abcABC12�?); } @Test @@ -213,4 +213,4 @@ public void VALUE_test() int t = engine.TryEvaluate("VALUE(\"123\")", 0); assertEquals(t, 123); } -} \ No newline at end of file +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java index cdc41a92a..5b821d1ae 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java @@ -56,14 +56,14 @@ public void MODE_test() { @Test public void PERCENTILE_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("PERCENTILE(array(1,2,3,4,2,2,1,4),0.4)", 0.0); + double t = engine.TryEvaluate("PERCENTILE(array(1,2,3,4,2,2,1,4)�?.4)", 0.0); assertEquals(t, 2.0, 0.001); } @Test public void PERCENTRANK_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("PERCENTRANK(array(1,2,3,4,2,2,1,4),3)", 0.0); + double t = engine.TryEvaluate("PERCENTRANK(array(1,2,3,4,2,2,1,4)�?)", 0.0); assertEquals(t, 0.714, 0.001); } @@ -378,4 +378,4 @@ private double round(final double value, final int p) { final BigDecimal bigD = new BigDecimal(value); return bigD.setScale(p, BigDecimal.ROUND_HALF_UP).doubleValue(); } -} \ No newline at end of file +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java index 6f8ff3e3e..80d1dc374 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java @@ -11,11 +11,11 @@ public class AlgorithmEngineTest_v3_5 { // 取消参数格式 {格式} 改成 {key:val,key2:v2} {1,2,3,} - // 由于 BigDecimal 精度问题 (java版本问题) 公式 1=0.001*1000 返回 false, 为了绝大部分的正确, 比较前将精度缩小到12位再进行比较 + // 由于 BigDecimal 精度问题 (java版本问题�? 公式 1=0.001*1000 返回 false�?为了绝大部分的正确, 比较前将精度缩小�?2位再进行比较 @Test public void PARAM_test() { - // PARAM 动态获取参数 + // PARAM 动态获取参�? Cylinder engine = new Cylinder(10, 15); int num = engine.TryEvaluate("PARAM('半径')", 0); assertEquals(num, 10); @@ -24,7 +24,7 @@ public void PARAM_test() { num = engine.TryEvaluate("GETPARAMETER('半径')", 0); assertEquals(num, 10); - // 参数名称没有限制了 + // 参数名称没有限制�? num = engine.TryEvaluate("半径", 0); assertEquals(num, 10); } @@ -32,9 +32,9 @@ public void PARAM_test() { @Test public void Error_test() { AlgorithmEngine engine = new AlgorithmEngine(); - String num = engine.TryEvaluate("Error('出错了')", ""); + String num = engine.TryEvaluate("Error('出错�?)", ""); assertEquals(num, ""); - assertEquals(engine.LastError, "出错了"); + assertEquals(engine.LastError, "出错�?); } @Test @@ -46,7 +46,7 @@ public void Json_test() { str = engine.TryEvaluate("{name:'toolgood', age:'12',other:{work:'IT'}}['other']['work']", ""); assertEquals(str, "IT"); - // 使用json 方法 使用比较标准的 json格式, 不然会出错 + // 使用json 方法 使用比较标准�?json格式�?不然会出�? str = engine.TryEvaluate("json(\"{'name':'toolgood', 'age':'12','other':{'work':'IT'}}\")['name']", ""); assertEquals(str, "toolgood"); @@ -62,7 +62,7 @@ public void Json_test() { b = engine.TryEvaluate("json(\"{'name':'toolgood', 'age':'12','other':{'work':'IT'}}\").has('age')", false); assertEquals(b, true); - // 注意只能获取第一层 + // 注意只能获取第一�? b = engine.TryEvaluate("{name:'toolgood', age:'12',other:{work:'IT'}}.has('work')", true); assertEquals(b, false); @@ -444,7 +444,7 @@ public void Mass_Test() { @Test public void Unit_Error_Test() { - // 下面是错误 演示, 因为计算时不会考虑单位,所以下面是正常通过的 + // 下面是错�?演示�?因为计算时不会考虑单位,所以下面是正常通过�? AlgorithmEngine engine = new AlgorithmEngine(); boolean b = engine.TryEvaluate("1m=1kg", false); assertEquals(b, true); diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java index a7a984c96..69d032b46 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java +++ b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java @@ -30,7 +30,7 @@ public void lookup_test() String json = "[{'灰色':'L','canBookCount':905,'saleCount':91,'specId':'43b0e72e98731aed69e1f0cc7d64bf4d'},{'灰色':'XL','canBookCount':929,'saleCount':70,'specId':'893746f5330dc3273d24aa1ac1a9a8b5'},{'灰色':'XXL','canBookCount':942,'saleCount':57,'specId':'42d994cba0210528142a743d4069700f'},{'白色':'L','canBookCount':862,'saleCount':136,'specId':'82114cbd2c10b5e97b01af1510807e2d'},{'白色':'XL','canBookCount':881,'saleCount':118,'specId':'c45d8408137e34adf8e695250c42a2e9'},{'白色':'XXL','canBookCount':917,'saleCount':82,'specId':'df78564262818d6eb0c428a37ab4a251'},{'蓝色':'L','canBookCount':962,'saleCount':35,'specId':'e959b6ab7c355e403a3312c75bd3d5b4','key':null},{'蓝色':'XL','canBookCount':973,'saleCount':26,'specId':'27402e07efd89afa50733afa94cd6976'},{'蓝色':'XXL','canBookCount':985,'saleCount':14,'specId':'358b6c3b52bf711ac8ecfe7513a4f3ad'}]"; AlgorithmEngine engine = new AlgorithmEngine(); engine.AddParameter("jsonArray", json); - // 第二种方法 + // 第二种方�? //engine.AddParameter("jsonArray",Operand.CreateJson( json)); String num = engine.TryEvaluate("lookup([jsonArray].Json(),'[saleCount]=91','specId')", ""); @@ -46,4 +46,4 @@ public void lookup_test() assertEquals(null, num); } -} \ No newline at end of file +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java b/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java index be2f9a4d2..b64ef8cea 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java +++ b/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java @@ -24,7 +24,7 @@ protected Operand GetParameter(MyParameter parameter) { { return Operand.Create(_radius * 2); } - if (parameter.Name.equals("高")) + if (parameter.Name.equals("�?)) { return Operand.Create(_height); } @@ -34,7 +34,7 @@ protected Operand GetParameter(MyParameter parameter) { @Override protected Operand ExecuteDiyFunction(String funcName, List operands) { - if (funcName.equals("求面积")) + if (funcName.equals("求面�?)) { if (operands.size() == 1) { @@ -44,4 +44,4 @@ protected Operand ExecuteDiyFunction(String funcName, List operands) } return super.ExecuteDiyFunction(funcName, operands); } -} \ No newline at end of file +} diff --git a/java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java b/java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java index 00dc38911..9f43843b3 100644 --- a/java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java @@ -22,13 +22,13 @@ public void Test() throws Exception { p = AlgorithmEngineHelper.GetDiyNames("dd"); assertEquals("dd", p.Parameters.get(0)); - // 注,这里的 ddd 是数组内有 ddd + // 注,这里�?ddd 是数组内�?ddd DiyNameInfo p2 = AlgorithmEngineHelper.GetDiyNames("{ddd}"); assertEquals("ddd", p2.Parameters.get(0)); - DiyNameInfo p3 = AlgorithmEngineHelper.GetDiyNames("【dd】"); + DiyNameInfo p3 = AlgorithmEngineHelper.GetDiyNames("【dd�?); assertEquals("dd", p3.Parameters.get(0)); - p3 = AlgorithmEngineHelper.GetDiyNames("【dd.1】"); + p3 = AlgorithmEngineHelper.GetDiyNames("【dd.1�?); assertEquals("dd.1", p3.Parameters.get(0)); DiyNameInfo p4 = AlgorithmEngineHelper.GetDiyNames("@ddd+2"); @@ -41,8 +41,8 @@ public void Test() throws Exception { assertEquals("ddd", p5.Functions.get(0)); assertEquals("d1", p5.Parameters.get(0)); - DiyNameInfo p6 = AlgorithmEngineHelper.GetDiyNames("长"); - assertEquals("长", p6.Parameters.get(0)); + DiyNameInfo p6 = AlgorithmEngineHelper.GetDiyNames("�?); + assertEquals("�?, p6.Parameters.get(0)); DiyNameInfo p7 = AlgorithmEngineHelper.GetDiyNames("#ddd#+2"); assertEquals("ddd", p7.Parameters.get(0)); @@ -58,13 +58,13 @@ public void Test2() { @Test public void Test3() throws Exception { - BigDecimal b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1),"米","千米","测试" ); + BigDecimal b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1),"�?,"千米","测试" ); assertEquals(new BigDecimal(0.001).setScale(12,4),b.setScale(12,4)); - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "米", "分米", "测试"); + b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "�?, "分米", "测试"); assertEquals(new BigDecimal(10).setScale(12,4), b.setScale(12,4)); - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "米", "厘米", "测试"); + b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "�?, "厘米", "测试"); assertEquals(new BigDecimal(100).setScale(12,4), b.setScale(12,4)); - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "米", "mm", "测试"); + b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "�?, "mm", "测试"); assertEquals(new BigDecimal(1000).setScale(12,4), b.setScale(12,4)); From 078c7ab6e440d92e8f08bb77fcfa683175e4d5f3 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 14:30:08 +0800 Subject: [PATCH 37/98] fix --- java/pom.xml | 2 +- .../internals/functions/Function_N.java | 33 ++++ .../functions/operator/Function_XOR.java | 55 +++++++ .../functions/string/Function_RMB.java | 145 ++++++++++-------- .../functions/value/Function_NULL.java | 32 ++++ .../value/Function_ValueBoolean.java | 34 ++++ .../functions/value/Function_ValueNumber.java | 36 +++++ .../functions/value/Function_ValueText.java | 58 +++++++ .../internals/visitors/CharUtil.java | 52 +++---- 9 files changed, 349 insertions(+), 98 deletions(-) create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_XOR.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NULL.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueBoolean.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueNumber.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueText.java diff --git a/java/pom.xml b/java/pom.xml index 8692eef3f..0fd8591cc 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -93,7 +93,7 @@ maven-compiler-plugin 3.8.0 - UTF-8 + GBK 1.8 1.8 diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java index 0b8779c5a..afd6a1eaf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java @@ -2,7 +2,10 @@ import java.lang.StringBuilder; import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.ParameterType; @@ -34,4 +37,34 @@ public OperandType GetResultType() { public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { } + + protected Operand GetBoolean(AlgorithmEngine engine, BiFunction tempParameter, int idx) { + Operand args1 = funcs[idx].Evaluate(engine, tempParameter); + if (args1.IsBoolean()) return args1; + return ConvertToBoolean(args1, idx); + } + + protected Operand GetNumber(AlgorithmEngine engine, BiFunction tempParameter, int idx) { + Operand args1 = funcs[idx].Evaluate(engine, tempParameter); + if (args1.IsNumber()) return args1; + return ConvertToNumber(args1, idx); + } + + protected Operand GetText(AlgorithmEngine engine, BiFunction tempParameter, int idx) { + Operand args1 = funcs[idx].Evaluate(engine, tempParameter); + if (args1.IsText()) return args1; + return ConvertToText(args1, idx); + } + + protected Operand GetDate(AlgorithmEngine engine, BiFunction tempParameter, int idx) { + Operand args1 = funcs[idx].Evaluate(engine, tempParameter); + if (args1.IsDate()) return args1; + return ConvertToDate(args1, idx); + } + + protected Operand GetArray(AlgorithmEngine engine, BiFunction tempParameter, int idx) { + Operand args1 = funcs[idx].Evaluate(engine, tempParameter); + if (args1.IsArray()) return args1; + return ConvertToArray(args1, idx); + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_XOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_XOR.java new file mode 100644 index 000000000..487c9299d --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_XOR.java @@ -0,0 +1,55 @@ +package toolgood.algorithm.internals.functions.operator; + +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.FunctionBase; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.NoneEngine; +import toolgood.algorithm.internals.functions.Function_N; + +public class Function_XOR extends Function_N { + public Function_XOR(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String getName() { + return "XOR"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + int trueCount = 0; + for (int i = 0; i < funcs.length; i++) { + Operand a = GetBoolean(engine, tempParameter, i); + if (a.IsErrorOrNone()) { + return a; + } + if (a.BooleanValue()) { + trueCount++; + } + } + return (trueCount % 2 == 1) ? Operand.True : Operand.False; + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.BOOLEAN, op, val); + } + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, "XOR"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java index 3bd50dccf..291829db8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java @@ -1,106 +1,121 @@ package toolgood.algorithm.internals.functions.string; -import java.util.Locale; import java.util.regex.Matcher; import java.util.regex.Pattern; -import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; public class Function_RMB extends Function_1 { + private static final Pattern Regex1 = Pattern.compile("((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\\.]|$))))"); + private static final Pattern Regex2 = Pattern.compile("."); + public Function_RMB(FunctionBase func1) { super(func1); } + @Override + public String getName() { + return "RMB"; + } + @Override public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "RMB"); - if (args1.IsError()) { - return args1; + if (args1.isNumber() == false) { + return Operand.CreateError("Function 'RMB' parameter is error!"); + } + return Operand.Create(F_base_ToChineseRMB(args1.numberValue())); + } + + private static String F_base_ToChineseRMB(double x) { + String s = formatWithScale(x); + String d = Regex1.matcher(s).replaceAll("${b}${z}"); + Matcher m = Regex2.matcher(d); + StringBuilder result = new StringBuilder(); + String chars = "\u8d1f\u5143\u7a7a\u96f6\u58f9\u8d30\u53c1\u8086\u4e94\u9646\u67d2\u4e03\u634c\u4e5d\u7a7a\u7a7a\u7a7a\u7a7a\u7a7a\u7a7a\u7a7a\u5206\u89d2\u62fe\u4f70\u4edf\u4e07\u4ebf\u5147\u4eac\u57ab\u79cd\u7a37"; + while (m.find()) { + char c = m.group().charAt(0); + int idx = c - '-'; + if (idx >= 0 && idx < chars.length()) { + result.append(chars.charAt(idx)); + } else { + result.append(c); } } - return Operand.Create(F_base_ToChineseRMB(args1.NumberValue())); + return result.toString(); } + private static String formatWithScale(double x) { + if (x == 0) return "0"; + StringBuilder sb = new StringBuilder(); + boolean negative = x < 0; + if (negative) x = -x; - private static String F_base_ToChineseRMB(double x) { - String s = String.format(Locale.US, "%#.2f", x); - // 这里需要实现与 C# 相同的转换逻辑 - // 由于 Java 正则表达式不支持命名捕获组的条件替换,需要使用其他方法实�? - // 简化实现,直接返回数字的人民币大写形式 - return convertToChineseRMB(x); - } + long intPart = (long) x; + int decimalPart = (int) Math.round((x - intPart) * 100); - private static String convertToChineseRMB(double x) { - if (x == 0) { - return "零元�?; - } - String[] digits = {"�?, "�?, "�?, "�?, "�?, "�?, "�?, "�?, "�?, "�?}; - String[] units = {"", "�?, "�?, "�?}; - String[] bigUnits = {"", "�?, "�?}; - String[] decimalUnits = {"�?, "�?}; - - StringBuilder result = new StringBuilder(); - if (x < 0) { - result.append("�?); - x = -x; - } - - long integerPart = (long) x; - int decimalPart = (int) Math.round((x - integerPart) * 100); - - if (integerPart > 0) { - int unitIndex = 0; - int bigUnitIndex = 0; - boolean needZero = false; - - while (integerPart > 0) { - long section = integerPart % 10000; - if (section > 0) { - if (needZero) { - result.insert(0, "�?); + if (intPart == 0) { + sb.append("0"); + } else { + String intStr = Long.toString(intPart); + for (int i = 0; i < intStr.length(); i++) { + char c = intStr.charAt(i); + if (c >= '0' && c <= '9') { + int digit = c - '0'; + if (digit == 0) { + sb.append('A'); + } else { + sb.append((char) ('A' + digit - 1)); } - StringBuilder sectionResult = new StringBuilder(); - int sectionUnitIndex = 0; - while (section > 0) { - int digit = (int) (section % 10); - if (digit > 0) { - sectionResult.insert(0, digits[digit] + units[sectionUnitIndex]); - } else if (sectionResult.length() > 0) { - sectionResult.insert(0, "�?); - } - section /= 10; - sectionUnitIndex++; + } + int scalePos = intStr.length() - 1 - i; + if (scalePos > 0) { + int scale = scalePos % 4; + if (scale == 0) { + if (scalePos == 4) sb.append('J'); + else if (scalePos == 8) sb.append('K'); + else if (scalePos == 12) sb.append('L'); + else if (scalePos == 16) sb.append('M'); + else if (scalePos == 20) sb.append('N'); + } else if (scale == 1) { + if (scalePos == 1) sb.append('B'); + else if (scalePos == 5) sb.append('F'); + else if (scalePos == 9) sb.append('J'); + else if (scalePos == 13) sb.append('N'); + } else if (scale == 2) { + if (scalePos == 2) sb.append('C'); + else if (scalePos == 6) sb.append('G'); + else if (scalePos == 10) sb.append('K'); + else if (scalePos == 14) sb.append('O'); + } else if (scale == 3) { + if (scalePos == 3) sb.append('D'); + else if (scalePos == 7) sb.append('H'); + else if (scalePos == 11) sb.append('L'); + else if (scalePos == 15) sb.append('P'); } - sectionResult.append(bigUnits[bigUnitIndex]); - result.insert(0, sectionResult); - needZero = true; } - integerPart /= 10000; - bigUnitIndex++; } - result.append("�?); } - + if (decimalPart > 0) { + sb.append('.'); int jiao = decimalPart / 10; int fen = decimalPart % 10; if (jiao > 0) { - result.append(digits[jiao]).append(decimalUnits[0]); + sb.append((char) ('A' + jiao - 1)); } if (fen > 0) { - result.append(digits[fen]).append(decimalUnits[1]); + sb.append((char) ('A' + fen - 1)); } } else { - result.append("�?); + sb.append(".0B0A"); } - - return result.toString(); + + return negative ? "-" + sb.toString() : sb.toString(); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NULL.java new file mode 100644 index 000000000..779135c5e --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NULL.java @@ -0,0 +1,32 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.enums.OperandType; + +public class Function_NULL extends FunctionBase { + + public Function_NULL() { + } + + @Override + public String getName() { + return "NULL"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + return Operand.NULL_OPERAND; + } + + @Override + public OperandType GetResultType() { + return OperandType.NULL; + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + stringBuilder.append("NULL"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueBoolean.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueBoolean.java new file mode 100644 index 000000000..dd259da3f --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueBoolean.java @@ -0,0 +1,34 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.enums.OperandType; + +public class Function_ValueBoolean extends FunctionBase { + private final boolean _value; + + public Function_ValueBoolean(boolean value) { + this._value = value; + } + + @Override + public String getName() { + return _value ? "True" : "False"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + return _value ? Operand.True : Operand.False; + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + stringBuilder.append(getName()); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueNumber.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueNumber.java new file mode 100644 index 000000000..3dc15aab6 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueNumber.java @@ -0,0 +1,36 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.enums.OperandType; + +public class Function_ValueNumber extends FunctionBase { + private final Operand _value; + private final String _showName; + + public Function_ValueNumber(Operand value, String showName) { + this._value = value; + this._showName = showName; + } + + @Override + public String getName() { + return _showName; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + return _value; + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + stringBuilder.append(_showName); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueText.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueText.java new file mode 100644 index 000000000..f52c6cd23 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueText.java @@ -0,0 +1,58 @@ +package toolgood.algorithm.internals.functions.value; + +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.Operand; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.enums.OperandType; + +public class Function_ValueText extends FunctionBase { + private final Operand _value; + private final String _showName; + + public Function_ValueText(Operand value) { + this._value = value; + this._showName = null; + } + + public Function_ValueText(Operand value, String showName) { + this._value = value; + this._showName = showName; + } + + @Override + public String getName() { + return "Value"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + return _value; + } + + @Override + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + if (_showName != null && !_showName.isEmpty()) { + stringBuilder.append(_showName); + return; + } + stringBuilder.append('"'); + String stringValue = _value.TextValue(); + stringValue = stringValue.replace("\\", "\\\\"); + stringValue = stringValue.replace("\r", "\\r"); + stringValue = stringValue.replace("\n", "\\n"); + stringValue = stringValue.replace("\t", "\\t"); + stringValue = stringValue.replace("\0", "\\0"); + stringValue = stringValue.replace("\u000b", "\\v"); + stringValue = stringValue.replace("\u0007", "\\a"); + stringValue = stringValue.replace("\b", "\\b"); + stringValue = stringValue.replace("\f", "\\f"); + stringValue = stringValue.replace("\"", "\\\""); + stringBuilder.append(stringValue); + stringBuilder.append('"'); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java b/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java index cfe9160fa..f39409c91 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/CharUtil.java @@ -5,40 +5,28 @@ public class CharUtil { public static char StandardChar(char c) { - if (c <= 0) - return c; - char o = (char) c; - if (o == '�?) - return '\''; - if (o == '�?) - return '\''; - if (o == '�?) - return '"'; - if (o == '�?) - return '"'; - if (o == '�?) - return '('; - if (o == '�?) - return ')'; - if (o == '�?) - return '='; - if (o == '�?) - return '+'; - if (o == '�?) - return '-'; - if (o == '×') - return '*'; - if (o == '÷') - return '/'; - if (o == '�?) - return '/'; + if (c < 'a') return c; + if (c <= 'z') return (char) (c - 32); + if (c < 127) return c; - if (c == 12288) { - o = (char) 32; - } else if (c > 65280 && c < 65375) { - o = (char) (c - 65248); + switch (c) { + case '\u00D7': return '*'; + case '\u00F7': return '/'; + case '\u2018': + case '\u2019': return '\''; + case '\u201C': + case '\u201D': return '"'; + case '\u3000': return ' '; + case '\u3010': return '['; + case '\u3011': return ']'; + case '\uFF08': return '('; + case '\uFF09': return ')'; } - return Character.toUpperCase(o); + + if (c > 65280 && c < 65375) { + return (char) (c - 65248); + } + return Character.toUpperCase(c); } public static String StandardString(String s) { From 5db71ea47508650a636b6a7d5b52e54fd01584d6 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 14:52:59 +0800 Subject: [PATCH 38/98] fix --- .../toolgood/algorithm/mathNet/Constants.java | 24 +- .../algorithm/mathNet/Distributions/Beta.java | 65 +- .../mathNet/Distributions/Binomial.java | 77 +- .../mathNet/Distributions/Exponential.java | 35 - .../mathNet/Distributions/FisherSnedecor.java | 35 +- .../mathNet/Distributions/Gamma.java | 88 +- .../mathNet/Distributions/Hypergeometric.java | 34 +- .../mathNet/Distributions/LogNormal.java | 34 +- .../Distributions/NegativeBinomial.java | 45 +- .../mathNet/Distributions/Normal.java | 93 +- .../mathNet/Distributions/Poisson.java | 39 +- .../mathNet/Distributions/StudentT.java | 58 +- .../mathNet/Distributions/Weibull.java | 55 - .../toolgood/algorithm/mathNet/Evaluate.java | 36 - .../algorithm/mathNet/ExcelFunctions.java | 156 +-- .../toolgood/algorithm/mathNet/Precision.java | 165 +-- .../algorithm/mathNet/RootFinding/Brent.java | 124 +- .../mathNet/RootFinding/RootNumber.java | 8 - .../algorithm/mathNet/SpecialFunctions.java | 1011 ++++++----------- .../Statistics/QuantileDefinition.java | 13 - .../mathNet/Statistics/Statistics.java | 55 - .../toolgood/algorithm/system/MathEx.java | 438 +++++++ 22 files changed, 1153 insertions(+), 1535 deletions(-) delete mode 100644 java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java delete mode 100644 java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java delete mode 100644 java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java delete mode 100644 java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java delete mode 100644 java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java delete mode 100644 java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java create mode 100644 java/src/main/java/toolgood/algorithm/system/MathEx.java diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Constants.java b/java/src/main/java/toolgood/algorithm/mathNet/Constants.java index a1f37cdae..33826a5b1 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Constants.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Constants.java @@ -1,19 +1,15 @@ package toolgood.algorithm.mathNet; +import java.math.BigDecimal; + public class Constants { - /// The number log[e](pi) - public final static double LnPi = 1.1447298858494001741434273513530587116472948129153d; + public static final BigDecimal LnPi = new BigDecimal("1.1447298858494001741434273513530587116472948129153"); + + public static final BigDecimal Sqrt2 = new BigDecimal("1.4142135623730950488016887242096980785696718753769"); + + public static final BigDecimal Sqrt2Pi = new BigDecimal("2.5066282746310005024157652848110452530069867406099"); + + public static final BigDecimal LogTwoSqrtEOverPi = new BigDecimal("0.6207822376352452223455184457816472122518527279025978"); - /// The number sqrt(2) - public final static double Sqrt2 = 1.4142135623730950488016887242096980785696718753769d; - - /// The number sqrt(2pi) - public final static double Sqrt2Pi = 2.5066282746310005024157652848110452530069867406099d; - - /// The number log(2 * sqrt(e / pi)) - public final static double LogTwoSqrtEOverPi = 0.6207822376352452223455184457816472122518527279025978; - - /// The number 2 * sqrt(e / pi) - public final static double TwoSqrtEOverPi = 1.8603827342052657173362492472666631120594218414085755; - + public static final BigDecimal TwoSqrtEOverPi = new BigDecimal("1.8603827342052657173362492472666631120594218414085755"); } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java index 9da03e83d..7ff2c12dd 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Beta.java @@ -1,72 +1,49 @@ package toolgood.algorithm.mathNet.Distributions; - +import java.math.BigDecimal; +import java.math.MathContext; import toolgood.algorithm.mathNet.SpecialFunctions; import toolgood.algorithm.mathNet.RootFinding.Brent; public class Beta { - - public static double CDF(double a, double b, double x) - { - //if (a < 0.0 || b < 0.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} - - if (x < 0.0) { - return 0.0; - } - if (x >= 1.0) { - return 1.0; - } - - if (Double.isInfinite(a) && Double.isInfinite(b)) { - return x < 0.5 ? 0.0 : 1.0; - } + public static BigDecimal CDF(BigDecimal a, BigDecimal b, BigDecimal x) { + BigDecimal zero = BigDecimal.ZERO; + BigDecimal one = BigDecimal.ONE; - if (Double.isInfinite(a)) { - return x < 1.0 ? 0.0 : 1.0; + if (x.compareTo(zero) < 0) { + return zero; } - if (Double.isInfinite(b)) { - return x >= 0.0 ? 1.0 : 0.0; + if (x.compareTo(one) >= 0) { + return one; } - if (a == 0.0 && b == 0.0) { - if (x >= 0.0 && x < 1.0) { - return 0.5; + if (a.compareTo(zero) == 0 && b.compareTo(zero) == 0) { + if (x.compareTo(zero) >= 0 && x.compareTo(one) < 0) { + return new BigDecimal("0.5"); } - - return 1.0; + return one; } - if (a == 0.0) { - return 1.0; + if (a.compareTo(zero) == 0) { + return one; } - if (b == 0.0) { - return x >= 1.0 ? 1.0 : 0.0; + if (b.compareTo(zero) == 0) { + return x.compareTo(one) >= 0 ? one : zero; } - if (a == 1.0 && b == 1.0) { + if (a.compareTo(one) == 0 && b.compareTo(one) == 0) { return x; } return SpecialFunctions.BetaRegularized(a, b, x); } - public static double InvCDF(double a, double b, double p) throws Exception - { - - //if (a < 0.0 || b < 0.0 || p < 0.0 || p > 1.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} - Function f= x->{ - return SpecialFunctions.BetaRegularized(a, b, x) - p; - }; - - return Brent.FindRoot(f, 0.0, 1.0, 1e-12); + public static BigDecimal InvCDF(BigDecimal a, BigDecimal b, BigDecimal p) throws Exception { + return Brent.FindRoot(x -> SpecialFunctions.BetaRegularized(a, b, x).subtract(p), + BigDecimal.ZERO, BigDecimal.ONE, new BigDecimal("1e-12")); } - } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java index b5b6ad0a2..02ef8f158 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java @@ -1,73 +1,44 @@ package toolgood.algorithm.mathNet.Distributions; +import java.math.BigDecimal; +import java.math.MathContext; + +import toolgood.algorithm.system.MathEx; import toolgood.algorithm.mathNet.SpecialFunctions; -/// -/// Discrete Univariate Binomial distribution. -/// For details about this distribution, see -/// Wikipedia - Binomial distribution. -/// -/// -/// The distribution is parameterized by a probability (between 0.0 and 1.0). -/// public class Binomial { - - /// - /// Computes the probability mass (PMF) at k, i.e. P(X = k). - /// - /// The location in the domain where we want to Evaluate the - /// probability mass function. - /// The success probability (p) in each trial. Range: 0 �?p �? - /// 1. - /// The number of trials (n). Range: n �?0. - /// the probability mass at location . - public static double PMF(double p, int n, int k) { - // if (!(p >= 0.0 && p <= 1.0 && n >= 0)) { - // throw new ArgumentException("InvalidDistributionParameters"); - // } - + public static BigDecimal PMF(BigDecimal p, int n, int k) { if (k < 0 || k > n) { - return 0.0; + return BigDecimal.ZERO; } - if (p == 0.0) { - return k == 0 ? 1.0 : 0.0; + if (p.compareTo(BigDecimal.ZERO) == 0) { + return k == 0 ? BigDecimal.ONE : BigDecimal.ZERO; } - if (p == 1.0) { - return k == n ? 1.0 : 0.0; + if (p.compareTo(BigDecimal.ONE) == 0) { + return k == n ? BigDecimal.ONE : BigDecimal.ZERO; } - return Math.exp(SpecialFunctions.BinomialLn(n, k) + (k * Math.log(p)) + ((n - k) * Math.log(1.0 - p))); - } + BigDecimal binomialLn = SpecialFunctions.GammaLn(new BigDecimal(n + 1)) + .subtract(SpecialFunctions.GammaLn(new BigDecimal(k + 1))) + .subtract(SpecialFunctions.GammaLn(new BigDecimal(n - k + 1))); - /// - /// Computes the cumulative distribution (CDF) of the distribution at x, i.e. - /// P(X �?x). - /// - /// The location at which to compute the cumulative distribution - /// function. - /// The success probability (p) in each trial. Range: 0 �?p �? - /// 1. - /// The number of trials (n). Range: n �?0. - /// the cumulative distribution at location . - ///// - public static double CDF(double p, int n, double x) { - // if (!(p >= 0.0 && p <= 1.0 && n >= 0)) { - // throw new ArgumentException("InvalidDistributionParameters"); - // } + return MathEx.Exp(binomialLn + .add(new BigDecimal(k).multiply(MathEx.Log(p))) + .add(new BigDecimal(n - k).multiply(MathEx.Log(BigDecimal.ONE.subtract(p))))); + } - if (x < 0.0) { - return 0.0; + public static BigDecimal CDF(BigDecimal p, int n, BigDecimal x) { + if (x.compareTo(BigDecimal.ZERO) < 0) { + return BigDecimal.ZERO; } - if (x > n) { - return 1.0; + if (x.compareTo(new BigDecimal(n)) > 0) { + return BigDecimal.ONE; } - double k = Math.floor(x); - return SpecialFunctions.BetaRegularized(n - k, k + 1, 1 - p); + BigDecimal k = new BigDecimal(Math.floor(x.doubleValue())); + return SpecialFunctions.BetaRegularized(n - k.intValue(), k.intValue() + 1, BigDecimal.ONE.subtract(p)); } - } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java deleted file mode 100644 index 4249c59a0..000000000 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Exponential.java +++ /dev/null @@ -1,35 +0,0 @@ -package toolgood.algorithm.mathNet.Distributions; - -public class Exponential { - /// - /// Computes the probability density of the distribution (PDF) at x, i.e. ∂P(X �?x)/∂x. - /// - /// The rate (λ) parameter of the distribution. Range: λ �?0. - /// The location at which to compute the density. - /// the density at . - ///// - public static double PDF(double rate, double x) - { - //if (rate < 0.0) { - // throw new ArgumentException("InvalidDistributionParameters"); - //} - - return x < 0.0 ? 0.0 : rate * Math.exp(-rate * x); - } - - /// - /// Computes the cumulative distribution (CDF) of the distribution at x, i.e. P(X �?x). - /// - /// The location at which to compute the cumulative distribution function. - /// The rate (λ) parameter of the distribution. Range: λ �?0. - /// the cumulative distribution at location . - ///// - public static double CDF(double rate, double x) - { - //if (rate < 0.0) { - // throw new ArgumentException("InvalidDistributionParameters"); - //} - - return x < 0.0 ? 0.0 : 1.0 - Math.exp(-rate * x); - } -} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java index fe93d93a5..acca74231 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/FisherSnedecor.java @@ -1,29 +1,26 @@ package toolgood.algorithm.mathNet.Distributions; +import java.math.BigDecimal; +import java.math.MathContext; - -import toolgood.algorithm.mathNet.SpecialFunctions; import toolgood.algorithm.mathNet.RootFinding.Brent; +import toolgood.algorithm.mathNet.SpecialFunctions; public class FisherSnedecor { - public static double CDF(double d1, double d2, double x) - { - //if (d1 <= 0.0 || d2 <= 0.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} - - return SpecialFunctions.BetaRegularized(d1 / 2.0, d2 / 2.0, d1 * x / (d1 * x + d2)); + public static BigDecimal CDF(int d1, int d2, BigDecimal x) { + return SpecialFunctions.BetaRegularized( + new BigDecimal(d1).divide(new BigDecimal("2"), MathContext.DECIMAL128), + new BigDecimal(d2).divide(new BigDecimal("2"), MathContext.DECIMAL128), + new BigDecimal(d1).multiply(x).divide(new BigDecimal(d1).multiply(x).add(new BigDecimal(d2)), MathContext.DECIMAL128)); } - public static double InvCDF(double d1, double d2, double p) throws Exception - { - //if (d1 <= 0.0 || d2 <= 0.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} - Function f= x->{ - return SpecialFunctions.BetaRegularized(d1 / 2.0, d2 / 2.0, d1 * x / (d1 * x + d2)) - p; - }; - - return Brent.FindRoot(f, 0, 1000, 1e-12); + public static BigDecimal InvCDF(int d1, int d2, BigDecimal p) throws Exception { + return Brent.FindRoot( + x -> SpecialFunctions.BetaRegularized( + new BigDecimal(d1).divide(new BigDecimal("2"), MathContext.DECIMAL128), + new BigDecimal(d2).divide(new BigDecimal("2"), MathContext.DECIMAL128), + new BigDecimal(d1).multiply(x).divide(new BigDecimal(d1).multiply(x).add(new BigDecimal(d2)), MathContext.DECIMAL128)) + .subtract(p), + BigDecimal.ZERO, new BigDecimal("1000"), new BigDecimal("1e-12")); } } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java index 8656534d8..b246b1585 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Gamma.java @@ -1,83 +1,55 @@ package toolgood.algorithm.mathNet.Distributions; +import java.math.BigDecimal; +import java.math.MathContext; + +import toolgood.algorithm.system.MathEx; import toolgood.algorithm.mathNet.SpecialFunctions; public class Gamma { - public static double CDF(double shape, double rate, double x) - { - //if (shape < 0.0 || rate < 0.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} - - if (Double.isInfinite(rate)) { - return x >= shape ? 1.0 : 0.0; - } - - if (shape == 0.0 && rate == 0.0) { - return 0.0; + public static BigDecimal CDF(BigDecimal shape, BigDecimal rate, BigDecimal x) { + if (shape.compareTo(BigDecimal.ZERO) == 0 && rate.compareTo(BigDecimal.ZERO) == 0) { + return BigDecimal.ZERO; } - return SpecialFunctions.GammaLowerRegularized(shape, x * rate); + return SpecialFunctions.GammaLowerRegularized(shape, x.multiply(rate)); } - public static double PDF(double shape, double rate, double x) - { - //if (shape < 0.0 || rate < 0.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} - - if (Double.isInfinite(rate)) { - return x == shape ? Double.POSITIVE_INFINITY : 0.0; + public static BigDecimal PDF(BigDecimal shape, BigDecimal rate, BigDecimal x) { + if (shape.compareTo(BigDecimal.ZERO) == 0 && rate.compareTo(BigDecimal.ZERO) == 0) { + return BigDecimal.ZERO; } - if (shape == 0.0 && rate == 0.0) { - return 0.0; + if (shape.compareTo(BigDecimal.ONE) == 0) { + return rate.multiply(MathEx.Exp(rate.multiply(x).negate())); } - if (shape == 1.0) { - return rate * Math.exp(-rate * x); + if (shape.compareTo(new BigDecimal("160")) > 0) { + return MathEx.Exp(PDFLn(shape, rate, x)); } - if (shape > 160.0) { - return Math.exp(PDFLn(shape, rate, x)); - } - - return Math.pow(rate, shape) * Math.pow(x, shape - 1.0) * Math.exp(-rate * x) / SpecialFunctions.Gamma(shape); + return MathEx.Pow(rate, shape) + .multiply(MathEx.Pow(x, shape.subtract(BigDecimal.ONE))) + .multiply(MathEx.Exp(rate.multiply(x).negate())) + .divide(SpecialFunctions.Gamma(shape), MathContext.DECIMAL128); } - public static double PDFLn(double shape, double rate, double x) - { - //if (shape < 0.0 || rate < 0.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} - - if (Double.isInfinite(rate)) { - return x == shape ? Double.POSITIVE_INFINITY : Double.NEGATIVE_INFINITY; - } - if (shape == 0.0 && rate == 0.0) { - return Double.NEGATIVE_INFINITY; + public static BigDecimal PDFLn(BigDecimal shape, BigDecimal rate, BigDecimal x) { + if (shape.compareTo(BigDecimal.ZERO) == 0 && rate.compareTo(BigDecimal.ZERO) == 0) { + return new BigDecimal("-79228162514264337593543950335"); } - if (shape == 1.0) { - return Math.log(rate) - (rate * x); + if (shape.compareTo(BigDecimal.ONE) == 0) { + return MathEx.Log(rate).subtract(rate.multiply(x)); } - return (shape * Math.log(rate)) + ((shape - 1.0) * Math.log(x)) - (rate * x) - SpecialFunctions.GammaLn(shape); + return shape.multiply(MathEx.Log(rate)) + .add(shape.subtract(BigDecimal.ONE).multiply(MathEx.Log(x))) + .subtract(rate.multiply(x)) + .subtract(SpecialFunctions.GammaLn(shape)); } - public static double InvCDF(double shape, double rate, double p) - { - //if (shape < 0.0 || rate < 0.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} - //if (a < 0 || a.AlmostEqual(0.0)) { - // throw new ArgumentOutOfRangeException("a"); - //} - - //if (y0 < 0 || y0 > 1) { - // throw new ArgumentOutOfRangeException("y0"); - //} - - return SpecialFunctions.GammaLowerRegularizedInv(shape, p) / rate; + public static BigDecimal InvCDF(BigDecimal shape, BigDecimal rate, BigDecimal p) { + return SpecialFunctions.GammaLowerRegularizedInv(shape, p).divide(rate, MathContext.DECIMAL128); } } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java index fda6c4a08..d7f0775d6 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java @@ -1,23 +1,27 @@ package toolgood.algorithm.mathNet.Distributions; +import java.math.BigDecimal; +import java.math.MathContext; + +import toolgood.algorithm.system.MathEx; import toolgood.algorithm.mathNet.SpecialFunctions; public class Hypergeometric { - /// - /// Computes the probability mass (PMF) at k, i.e. P(X = k). - /// - /// The location in the domain where we want to Evaluate the probability mass function. - /// The size of the population (N). - /// The number successes within the population (K, M). - /// The number of draws without replacement (n). - /// the probability mass at location . - public static double PMF(int population, int success, int draws, int k) - { - //if (!(population >= 0 && success >= 0 && draws >= 0 && success <= population && draws <= population)) { - // throw new ArgumentException("InvalidDistributionParameters"); - //} - - return SpecialFunctions.Binomial(success, k) * SpecialFunctions.Binomial(population - success, draws - k) / SpecialFunctions.Binomial(population, draws); + public static BigDecimal PMF(int population, int success, int draws, int k) { + if (k < 0 || k > draws || k > success || k < draws + success - population) { + return BigDecimal.ZERO; } + BigDecimal binomialLn = SpecialFunctions.GammaLn(new BigDecimal(success + 1)) + .subtract(SpecialFunctions.GammaLn(new BigDecimal(k + 1))) + .subtract(SpecialFunctions.GammaLn(new BigDecimal(success - k + 1))) + .add(SpecialFunctions.GammaLn(new BigDecimal(population - success + 1))) + .subtract(SpecialFunctions.GammaLn(new BigDecimal(draws - k + 1))) + .subtract(SpecialFunctions.GammaLn(new BigDecimal(population - success - draws + k + 1))) + .subtract(SpecialFunctions.GammaLn(new BigDecimal(population + 1))) + .add(SpecialFunctions.GammaLn(new BigDecimal(draws + 1))) + .add(SpecialFunctions.GammaLn(new BigDecimal(population - draws + 1))); + + return MathEx.Exp(binomialLn); + } } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java index dc37c4587..a46b4e7a4 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/LogNormal.java @@ -1,26 +1,32 @@ package toolgood.algorithm.mathNet.Distributions; +import java.math.BigDecimal; +import java.math.MathContext; + import toolgood.algorithm.mathNet.Constants; +import toolgood.algorithm.system.MathEx; import toolgood.algorithm.mathNet.SpecialFunctions; public class LogNormal { - public static double CDF(double mu, double sigma, double x) - { - //if (sigma < 0.0) { - // throw new ArgumentException("InvalidDistributionParameters"); - //} + public static BigDecimal CDF(BigDecimal mu, BigDecimal sigma, BigDecimal x) { + if (x.compareTo(BigDecimal.ZERO) < 0) { + return BigDecimal.ZERO; + } - return x < 0.0 ? 0.0 - : 0.5 * (1.0 + SpecialFunctions.Erf((Math.log(x) - mu) / (sigma * Constants.Sqrt2))); + return new BigDecimal("0.5").multiply( + BigDecimal.ONE.add(SpecialFunctions.Erf( + MathEx.Log(x).subtract(mu) + .divide(sigma.multiply(Constants.Sqrt2), MathContext.DECIMAL128)))); } - public static double InvCDF(double mu, double sigma, double p) - { - //if (sigma < 0.0) { - // throw new ArgumentException("InvalidDistributionParameters"); - //} + public static BigDecimal InvCDF(BigDecimal mu, BigDecimal sigma, BigDecimal p) { + if (p.compareTo(BigDecimal.ZERO) <= 0) { + return BigDecimal.ZERO; + } + if (p.compareTo(BigDecimal.ONE) >= 0) { + return new BigDecimal("79228162514264337593543950335"); + } - return p <= 0.0 ? 0.0 : p >= 1.0 ? Double.POSITIVE_INFINITY - : Math.exp(mu - sigma * Constants.Sqrt2 * SpecialFunctions.ErfcInv(2.0 * p)); + return MathEx.Exp(mu.subtract(sigma.multiply(Constants.Sqrt2).multiply(SpecialFunctions.ErfInv(new BigDecimal("2").multiply(p)).negate()))); } } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java index f5143c64d..fc350d755 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java @@ -1,38 +1,21 @@ package toolgood.algorithm.mathNet.Distributions; +import java.math.BigDecimal; +import java.math.MathContext; + +import toolgood.algorithm.system.MathEx; import toolgood.algorithm.mathNet.SpecialFunctions; public class NegativeBinomial { - /// - /// Computes the probability mass (PMF) at k, i.e. P(X = k). - /// - /// The location in the domain where we want to Evaluate the probability mass function. - /// The number of failures (r) until the experiment stopped. Range: r �?0. - /// The probability (p) of a trial resulting in success. Range: 0 �?p �?1. - /// the probability mass at location . - public static double PMF(double r, double p, int k) - { - return Math.exp(PMFLn(r, p, k)); - } - - /// - /// Computes the log probability mass (lnPMF) at k, i.e. ln(P(X = k)). - /// - /// The location in the domain where we want to Evaluate the log probability mass function. - /// The number of failures (r) until the experiment stopped. Range: r �?0. - /// The probability (p) of a trial resulting in success. Range: 0 �?p �?1. - /// the log probability mass at location . - public static double PMFLn(double r, double p, int k) - { - //if (!(r >= 0.0 && p >= 0.0 && p <= 1.0)) { - // throw new ArgumentException("InvalidDistributionParameters"); - //} - - return SpecialFunctions.GammaLn(r + k) - - SpecialFunctions.GammaLn(r) - - SpecialFunctions.GammaLn(k + 1.0) - + (r * Math.log(p)) - + (k * Math.log(1.0 - p)); - } + public static BigDecimal PMF(BigDecimal r, BigDecimal p, int k) { + return MathEx.Exp(PMFLn(r, p, k)); + } + public static BigDecimal PMFLn(BigDecimal r, BigDecimal p, int k) { + return SpecialFunctions.GammaLn(r.add(new BigDecimal(k))) + .subtract(SpecialFunctions.GammaLn(r)) + .subtract(SpecialFunctions.GammaLn(new BigDecimal(k + 1))) + .add(r.multiply(MathEx.Log(p))) + .add(new BigDecimal(k).multiply(MathEx.Log(BigDecimal.ONE.subtract(p)))); + } } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java index 459bb00c1..52050852e 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java @@ -1,34 +1,89 @@ package toolgood.algorithm.mathNet.Distributions; +import java.math.BigDecimal; +import java.math.MathContext; + import toolgood.algorithm.mathNet.Constants; +import toolgood.algorithm.system.MathEx; import toolgood.algorithm.mathNet.SpecialFunctions; public class Normal { - public static double CDF(double mean, double stddev, double x) - { - //if (stddev < 0.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} + private static final BigDecimal Sqrt2 = Constants.Sqrt2; + private static final BigDecimal Sqrt2Pi = Constants.Sqrt2Pi; + + public static BigDecimal PDF(BigDecimal mean, BigDecimal standardDev, BigDecimal x) { + return PDF(mean, standardDev, x, MathContext.DECIMAL128); + } + + public static BigDecimal PDF(BigDecimal mean, BigDecimal standardDev, BigDecimal x, MathContext mc) { + BigDecimal zero = BigDecimal.ZERO; + if (standardDev.compareTo(zero) <= 0) { + throw new IllegalArgumentException("standardDev must be greater than zero"); + } - return 0.5 * SpecialFunctions.Erfc((mean - x) / (stddev * Constants.Sqrt2)); + BigDecimal num = MathEx.Expi( + x.subtract(mean) + .pow(2) + .divide( + new BigDecimal("-2").multiply(standardDev.pow(2)), + mc) + ); + + BigDecimal den = standardDev.multiply(Sqrt2Pi); + + return num.divide(den, mc); } - public static double InvCDF(double mean, double stddev, double p) - { - //if (stddev < 0.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} - return mean - (stddev * Constants.Sqrt2 * SpecialFunctions.ErfcInv(2.0 * p)); + public static BigDecimal CDF(BigDecimal mean, BigDecimal standardDev, BigDecimal x) { + return CDF(mean, standardDev, x, MathContext.DECIMAL128); } - public static double PDF(double mean, double stddev, double x) - { - //if (stddev < 0.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} + public static BigDecimal CDF(BigDecimal mean, BigDecimal standardDev, BigDecimal x, MathContext mc) { + if (standardDev.compareTo(BigDecimal.ZERO) <= 0) { + throw new IllegalArgumentException("standardDev must be greater than zero"); + } - double d = (x - mean) / stddev; - return Math.exp(-0.5 * d * d) / (Constants.Sqrt2Pi * stddev); + return new BigDecimal("0.5").multiply( + BigDecimal.ONE.add(SpecialFunctions.Erf( + x.subtract(mean) + .divide(standardDev.multiply(Sqrt2), mc) + )) + ); } + public static BigDecimal InvCDF(BigDecimal mean, BigDecimal standardDev, BigDecimal probability) { + if (probability.compareTo(BigDecimal.ZERO) < 0 || probability.compareTo(BigDecimal.ONE) > 0) { + throw new IllegalArgumentException("probability must be between 0 and 1"); + } + + if (standardDev.compareTo(BigDecimal.ZERO) <= 0) { + throw new IllegalArgumentException("standardDev must be greater than zero"); + } + + if (probability.compareTo(BigDecimal.ZERO) == 0) { + return new BigDecimal("-79228162514264337593543950335"); + } + + if (probability.compareTo(BigDecimal.ONE) == 0) { + return new BigDecimal("79228162514264337593543950335"); + } + + BigDecimal p = probability.subtract(new BigDecimal("0.5")); + + BigDecimal t = MathEx.Sqrt(new BigDecimal("-2").multiply(MathEx.Log(p.pow(2)))); + + BigDecimal c0 = new BigDecimal("2.515517"); + BigDecimal c1 = new BigDecimal("0.802853"); + BigDecimal c2 = new BigDecimal("0.010328"); + BigDecimal d1 = new BigDecimal("1.432788"); + BigDecimal d2 = new BigDecimal("0.189269"); + BigDecimal d3 = new BigDecimal("0.001308"); + + BigDecimal num = c0.add(c1.multiply(t)).add(c2.multiply(t.pow(2))); + BigDecimal den = BigDecimal.ONE.add(d1.multiply(t)).add(d2.multiply(t.pow(2))).add(d3.multiply(t.pow(3))); + + BigDecimal x = t.subtract(num.divide(den, MathContext.DECIMAL128)); + + return mean.add(standardDev.multiply(x)); + } } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java index 9b9f52d5c..633926986 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Poisson.java @@ -1,36 +1,17 @@ package toolgood.algorithm.mathNet.Distributions; +import java.math.BigDecimal; +import java.math.MathContext; + +import toolgood.algorithm.system.MathEx; import toolgood.algorithm.mathNet.SpecialFunctions; public class Poisson { - /// - /// Computes the probability mass (PMF) at k, i.e. P(X = k). - /// - /// The location in the domain where we want to Evaluate the probability mass function. - /// The lambda (λ) parameter of the Poisson distribution. Range: λ > 0. - /// the probability mass at location . - public static double PMF(double lambda, int k) - { - //if (!(lambda > 0.0)) { - // throw new ArgumentException("InvalidDistributionParameters"); - //} - - return Math.exp(-lambda + (k * Math.log(lambda)) - SpecialFunctions.FactorialLn(k)); - } - - /// - /// Computes the cumulative distribution (CDF) of the distribution at x, i.e. P(X �?x). - /// - /// The location at which to compute the cumulative distribution function. - /// The lambda (λ) parameter of the Poisson distribution. Range: λ > 0. - /// the cumulative distribution at location . - ///// - public static double CDF(double lambda, double x) - { - //if (!(lambda > 0.0)) { - // throw new ArgumentException("InvalidDistributionParameters"); - //} + public static BigDecimal PMF(BigDecimal lambda, int k) { + return SpecialFunctions.Expi(lambda.negate().add(new BigDecimal(k).multiply(MathEx.Log(lambda)).subtract(SpecialFunctions.GammaLn(new BigDecimal(k + 1))))); + } - return 1.0 - SpecialFunctions.GammaLowerRegularized(x + 1, lambda); - } + public static BigDecimal CDF(BigDecimal lambda, BigDecimal x) { + return BigDecimal.ONE.subtract(SpecialFunctions.GammaLowerRegularized(x.add(BigDecimal.ONE), lambda)); + } } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java index 7ecdacf09..a45771061 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java @@ -1,47 +1,39 @@ package toolgood.algorithm.mathNet.Distributions; - +import java.math.BigDecimal; +import java.math.MathContext; import toolgood.algorithm.mathNet.SpecialFunctions; import toolgood.algorithm.mathNet.RootFinding.Brent; public class StudentT { - public static double CDF(double location, double scale, double freedom, double x) - { - //if (scale <= 0.0 || freedom <= 0.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} - - if (Double.isInfinite(freedom)) { - return Normal.CDF(location, scale, x); - } - - double k = (x - location) / scale; - double h = freedom / (freedom + (k * k)); - double ib = 0.5 * SpecialFunctions.BetaRegularized(freedom / 2.0, 0.5, h); - return x <= location ? ib : 1.0 - ib; + public static BigDecimal CDF(BigDecimal location, BigDecimal scale, int freedom, BigDecimal x) throws Exception { + BigDecimal k = x.subtract(location).divide(scale, MathContext.DECIMAL128); + BigDecimal h = new BigDecimal(freedom).divide(freedom + k.multiply(k), MathContext.DECIMAL128); + BigDecimal ib = new BigDecimal("0.5").multiply(SpecialFunctions.BetaRegularized( + new BigDecimal(freedom).divide(new BigDecimal("2"), MathContext.DECIMAL128), + new BigDecimal("0.5"), + h)); + return x.compareTo(location) <= 0 ? ib : BigDecimal.ONE.subtract(ib); } - public static double InvCDF(double location, double scale, double freedom, double p) throws Exception - { - //if (scale <= 0.0 || freedom <= 0.0) { - // throw new ArgumentException(Resources.InvalidDistributionParameters); - //} - if (Double.isInfinite(freedom)) { - return Normal.InvCDF(location, scale, p); - } - - if (p == 0.5d) { + public static BigDecimal InvCDF(BigDecimal location, BigDecimal scale, int freedom, BigDecimal p) throws Exception { + if (p.compareTo(new BigDecimal("0.5")) == 0) { return location; } - Function f=x->{ - double k = (x - location) / scale; - double h = freedom / (freedom + (k * k)); - double ib = 0.5 * SpecialFunctions.BetaRegularized(freedom / 2.0, 0.5, h); - return x <= location ? ib - p : 1.0 - ib - p; - }; - return Brent.FindRoot(f, -800, 800, 1e-12); + return Brent.FindRoot(x -> { + BigDecimal k = x.subtract(location).divide(scale, MathContext.DECIMAL128); + BigDecimal h = new BigDecimal(freedom).divide(freedom + k.multiply(k), MathContext.DECIMAL128); + try { + BigDecimal ib = new BigDecimal("0.5").multiply(SpecialFunctions.BetaRegularized( + new BigDecimal(freedom).divide(new BigDecimal("2"), MathContext.DECIMAL128), + new BigDecimal("0.5"), + h)); + return x.compareTo(location) <= 0 ? ib.subtract(p) : BigDecimal.ONE.subtract(ib).subtract(p); + } catch (Exception e) { + return BigDecimal.ZERO; + } + }, new BigDecimal("-800"), new BigDecimal("800"), new BigDecimal("1e-12")); } - } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java deleted file mode 100644 index 439856f61..000000000 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Weibull.java +++ /dev/null @@ -1,55 +0,0 @@ -package toolgood.algorithm.mathNet.Distributions; - -import toolgood.algorithm.mathNet.SpecialFunctions; - -public class Weibull { - /// - /// Computes the probability density of the distribution (PDF) at x, i.e. ∂P(X �?x)/∂x. - /// - /// The shape (k) of the Weibull distribution. Range: k > 0. - /// The scale (λ) of the Weibull distribution. Range: λ > 0. - /// The location at which to compute the density. - /// the density at . - ///// - public static double PDF(double shape, double scale, double x) - { - //if (shape <= 0.0 || scale <= 0.0) { - // throw new ArgumentException("InvalidDistributionParameters"); - //} - - if (x >= 0.0) { - if (x == 0.0 && shape == 1.0) { - return shape / scale; - } - - return shape - * Math.pow(x / scale, shape - 1.0) - * Math.exp(-Math.pow(x, shape) * Math.pow(scale, -shape)) - / scale; - } - - return 0.0; - } - - - /// - /// Computes the cumulative distribution (CDF) of the distribution at x, i.e. P(X �?x). - /// - /// The location at which to compute the cumulative distribution function. - /// The shape (k) of the Weibull distribution. Range: k > 0. - /// The scale (λ) of the Weibull distribution. Range: λ > 0. - /// the cumulative distribution at location . - ///// - public static double CDF(double shape, double scale, double x) - { - //if (shape <= 0.0 || scale <= 0.0) { - // throw new ArgumentException("InvalidDistributionParameters"); - //} - - if (x < 0.0) { - return 0.0; - } - - return -SpecialFunctions.ExponentialMinusOne(-Math.pow(x, shape) * Math.pow(scale, -shape)); - } -} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java b/java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java deleted file mode 100644 index d22e232cf..000000000 --- a/java/src/main/java/toolgood/algorithm/mathNet/Evaluate.java +++ /dev/null @@ -1,36 +0,0 @@ -package toolgood.algorithm.mathNet; - - -public class Evaluate { - public static double Polynomial(double z, double[] coefficients) { - double sum = coefficients[coefficients.length - 1]; - for (int i = coefficients.length - 2; i >= 0; --i) { - sum *= z; - sum += coefficients[i]; - } - - return sum; - } - - // public static double Series(Function f) { - // double compensation = 0.0; - // double current; - // double factor = 1 << 16; - - // double sum = f.apply(0.0); - - // do { - // // Kahan Summation - // // NOTE (ruegg): do NOT optimize. Now, how to tell that the compiler? - // current = f.apply(0.0); - // double y = current - compensation; - // double t = sum + y; - // compensation = t - sum; - // compensation -= y; - // sum = t; - // } while (Math.abs(sum) < Math.abs(factor * current)); - - // return sum; - // } - -} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java b/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java index dac61dd17..b433f078a 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java @@ -1,10 +1,11 @@ package toolgood.algorithm.mathNet; -import java.util.List; +import java.math.BigDecimal; +import java.math.MathContext; +import java.util.Arrays; import toolgood.algorithm.mathNet.Distributions.Beta; import toolgood.algorithm.mathNet.Distributions.Binomial; -import toolgood.algorithm.mathNet.Distributions.Exponential; import toolgood.algorithm.mathNet.Distributions.FisherSnedecor; import toolgood.algorithm.mathNet.Distributions.Gamma; import toolgood.algorithm.mathNet.Distributions.Hypergeometric; @@ -13,165 +14,130 @@ import toolgood.algorithm.mathNet.Distributions.Normal; import toolgood.algorithm.mathNet.Distributions.Poisson; import toolgood.algorithm.mathNet.Distributions.StudentT; -import toolgood.algorithm.mathNet.Distributions.Weibull; import toolgood.algorithm.mathNet.Statistics.ArrayStatistics; -import toolgood.algorithm.mathNet.Statistics.QuantileDefinition; -import toolgood.algorithm.mathNet.Statistics.Statistics; +import toolgood.algorithm.mathNet.Statistics.SortedArrayStatistics; public class ExcelFunctions { - public static double NormSDist(double z) { - return Normal.CDF(0d, 1d, z); + public static BigDecimal NormSDist(BigDecimal z) { + return Normal.CDF(BigDecimal.ZERO, BigDecimal.ONE, z); } - public static double NormSInv(double probability) { - return Normal.InvCDF(0d, 1d, probability); + public static BigDecimal NormSInv(BigDecimal probability) { + return Normal.InvCDF(BigDecimal.ZERO, BigDecimal.ONE, probability); } - public static double NormDist(double x, double mean, double standardDev, boolean cumulative) { + public static BigDecimal NormDist(BigDecimal x, BigDecimal mean, BigDecimal standardDev, boolean cumulative) { return cumulative ? Normal.CDF(mean, standardDev, x) : Normal.PDF(mean, standardDev, x); } - public static double NormInv(double probability, double mean, double standardDev) { + public static BigDecimal NormInv(BigDecimal probability, BigDecimal mean, BigDecimal standardDev) { return Normal.InvCDF(mean, standardDev, probability); } - public static double TDist(double x, int degreesFreedom, int tails) throws Exception { + public static BigDecimal TDist(BigDecimal x, int degreesFreedom, int tails) throws Exception { switch (tails) { case 1: - return 1d - StudentT.CDF(0d, 1d, degreesFreedom, x); + return BigDecimal.ONE.subtract(StudentT.CDF(BigDecimal.ZERO, BigDecimal.ONE, degreesFreedom, x)); case 2: - return 1d - StudentT.CDF(0d, 1d, degreesFreedom, x) + StudentT.CDF(0d, 1d, degreesFreedom, -x); + return BigDecimal.ONE.subtract(StudentT.CDF(BigDecimal.ZERO, BigDecimal.ONE, degreesFreedom, x)) + .add(StudentT.CDF(BigDecimal.ZERO, BigDecimal.ONE, degreesFreedom, x.negate())); default: throw new Exception("tails"); } } - public static double TInv(double probability, int degreesFreedom) throws Exception { - return -StudentT.InvCDF(0d, 1d, degreesFreedom, probability / 2); + public static BigDecimal TInv(BigDecimal probability, int degreesFreedom) throws Exception { + return StudentT.InvCDF(BigDecimal.ZERO, BigDecimal.ONE, degreesFreedom, probability.divide(new BigDecimal("2"), MathContext.DECIMAL128)).negate(); } - public static double FDist(double x, int degreesFreedom1, int degreesFreedom2) { - return 1d - FisherSnedecor.CDF(degreesFreedom1, degreesFreedom2, x); + public static BigDecimal FDist(BigDecimal x, int degreesFreedom1, int degreesFreedom2) { + return BigDecimal.ONE.subtract(FisherSnedecor.CDF(degreesFreedom1, degreesFreedom2, x)); } - public static double FInv(double probability, int degreesFreedom1, int degreesFreedom2) throws Exception { - return FisherSnedecor.InvCDF(degreesFreedom1, degreesFreedom2, 1d - probability); + public static BigDecimal FInv(BigDecimal probability, int degreesFreedom1, int degreesFreedom2) throws Exception { + return FisherSnedecor.InvCDF(degreesFreedom1, degreesFreedom2, BigDecimal.ONE.subtract(probability)); } - public static double BetaDist(double x, double alpha, double beta) { + public static BigDecimal BetaDist(BigDecimal x, BigDecimal alpha, BigDecimal beta) { return Beta.CDF(alpha, beta, x); } - public static double BetaInv(double probability, double alpha, double beta) throws Exception { + public static BigDecimal BetaInv(BigDecimal probability, BigDecimal alpha, BigDecimal beta) throws Exception { return Beta.InvCDF(alpha, beta, probability); } - public static double GammaDist(double x, double alpha, double beta, boolean cumulative) { - return cumulative ? Gamma.CDF(alpha, 1 / beta, x) : Gamma.PDF(alpha, 1 / beta, x); + public static BigDecimal GammaDist(BigDecimal x, BigDecimal alpha, BigDecimal beta, boolean cumulative) { + return cumulative ? Gamma.CDF(alpha, new BigDecimal("1").divide(beta, MathContext.DECIMAL128), x) + : Gamma.PDF(alpha, new BigDecimal("1").divide(beta, MathContext.DECIMAL128), x); } - public static double GammaInv(double probability, double alpha, double beta) { - return Gamma.InvCDF(alpha, 1 / beta, probability); - } - public static double Quartile(List data, int quant) throws Exception { - double[] array=new double[data.size()]; - for (int i = 0; i < data.size(); i++) { - array[i]=data.get(i); - } - return Quartile(array,quant); - } - public static double Quartile(double[] array, int quant) throws Exception { - switch (quant) { - case 0: - return ArrayStatistics.Minimum(array); - case 1: - return Statistics.QuantileCustom(array,0.25, QuantileDefinition.R7); - case 2: - return Statistics.QuantileCustom(array,0.5, QuantileDefinition.R7); - case 3: - return Statistics.QuantileCustom(array,0.75, QuantileDefinition.R7); - case 4: - return ArrayStatistics.Maximum(array); - default: - throw new Exception("quant"); - } - } - public static double Percentile(List data, double quant) throws Exception { - double[] array=new double[data.size()]; - for (int i = 0; i < data.size(); i++) { - array[i]=data.get(i); - } - return Percentile(array,quant); - } - public static double Percentile(double[] array, double k) throws Exception { - return Statistics.QuantileCustom(array,k, QuantileDefinition.R7); - } - public static double PercentRank(List data, double x) { - double[] array=new double[data.size()]; - for (int i = 0; i < data.size(); i++) { - array[i]=data.get(i); - } - return Statistics.QuantileRank(array,x); - } - public static double PercentRank(double[] array, double x) { - return Statistics.QuantileRank(array,x); - // return array.QuantileRank(x); + public static BigDecimal GammaInv(BigDecimal probability, BigDecimal alpha, BigDecimal beta) { + return Gamma.InvCDF(alpha, new BigDecimal("1").divide(beta, MathContext.DECIMAL128), probability); } - public static double GAMMALN(double z) { + public static BigDecimal GAMMALN(BigDecimal z) { return SpecialFunctions.GammaLn(z); } - // public static double ChiDist(double x, double freedom) - // { - // return Chi.PDF(x, freedom);//Is Error - // } - - public static double ExponDist(double x, double rate, boolean state) { - if (state) { - return Exponential.CDF(rate, x); - } - return Exponential.PDF(rate, x); - - } - - public static double HypgeomDist(int k, int draws, int success, int population) { + public static BigDecimal HypgeomDist(int k, int draws, int success, int population) { return Hypergeometric.PMF(population, success, draws, k); } - public static double NegbinomDist(int k, double r, double p) { + public static BigDecimal NegbinomDist(int k, BigDecimal r, BigDecimal p) { return NegativeBinomial.PMF(r, p, k); - } - public static double LognormDist(double x, double mu, double sigma) { + public static BigDecimal LognormDist(BigDecimal x, BigDecimal mu, BigDecimal sigma) { return LogNormal.CDF(mu, sigma, x); } - public static double LogInv(double p, double mu, double sigma) { + public static BigDecimal LogInv(BigDecimal p, BigDecimal mu, BigDecimal sigma) { return LogNormal.InvCDF(mu, sigma, p); } - public static double BinomDist(int k, int n, double p, boolean state) { + public static BigDecimal BinomDist(int k, int n, BigDecimal p, boolean state) { if (state == false) { return Binomial.PMF(p, n, k); } return Binomial.CDF(p, n, k); } - public static double POISSON(int k, double lambda, boolean state) { + public static BigDecimal Poisson(int k, BigDecimal lambda, boolean state) { if (state == false) { return Poisson.PMF(lambda, k); } return Poisson.CDF(lambda, k); } - public static double WEIBULL(double x, double shape, double scale, boolean state) { - if (state == false) { - return Weibull.PDF(shape, scale, x); + public static BigDecimal Quartile(BigDecimal[] array, int quant) throws Exception { + switch (quant) { + case 0: + return ArrayStatistics.Minimum(array); + case 1: + return QuantileCustom(array, new BigDecimal("0.25")); + case 2: + return QuantileCustom(array, new BigDecimal("0.5")); + case 3: + return QuantileCustom(array, new BigDecimal("0.75")); + case 4: + return ArrayStatistics.Maximum(array); + default: + throw new Exception("quant"); } - return Weibull.CDF(shape, scale, x); } + public static BigDecimal Percentile(BigDecimal[] array, BigDecimal k) throws Exception { + return QuantileCustom(array, k); + } + + public static BigDecimal PercentRank(BigDecimal[] array, BigDecimal x) { + BigDecimal[] sorted = array.clone(); + Arrays.sort(sorted, (a, b) -> a.compareTo(b)); + return SortedArrayStatistics.QuantileRank(sorted, x); + } + + private static BigDecimal QuantileCustom(BigDecimal[] data, BigDecimal tau) throws Exception { + return ArrayStatistics.QuantileCustomInplace(data, tau); + } } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Precision.java b/java/src/main/java/toolgood/algorithm/mathNet/Precision.java index 8520f8e5e..48778edde 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Precision.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Precision.java @@ -1,166 +1,37 @@ package toolgood.algorithm.mathNet; -public class Precision { - /// - /// Standard epsilon, the maximum relative precision of IEEE 754 - /// double-precision floating numbers (64 bit). - /// According to the definition of Prof. Demmel and used in LAPACK and Scilab. - /// - public final static double DoublePrecision = Math.pow(2, -53); - - /// - /// Standard epsilon, the maximum relative precision of IEEE 754 - /// double-precision floating numbers (64 bit). - /// According to the definition of Prof. Higham and used in the ISO C standard - /// and MATLAB. - /// - public final static double PositiveDoublePrecision = 2 * DoublePrecision; - - /// - /// Value representing 10 * 2^(-53) = 1.11022302462516E-15 - /// - final static double DefaultDoubleAccuracy = DoublePrecision * 10; - - public static double Increment(double value) { - return Increment(value, -1); - } - - /// - /// Increments a floating point number to the next bigger number representable - /// by the data type. - /// - /// The value which needs to be incremented. - /// How many times the number should be incremented. - /// - /// The incrementation step length depends on the provided value. - /// Increment(double.MaxValue) will return positive infinity. - /// - /// The next larger floating point value. - public static double Increment(double value, int count) { - if (Double.isInfinite(value) || Double.isNaN(value) || count == 0) { - return value; - } - - // Translate the bit pattern of the double to an integer. - // Note that this leads to: - // double > 0 --> long > 0, growing as the double value grows - // double < 0 --> long < 0, increasing in absolute magnitude as the double - // gets closer to zero! - // i.e. 0 - double.epsilon will give the largest long value! - long intValue = (long)value; - // long intValue = BitConverter.DoubleToInt64Bits(value); - if (intValue < 0) { - intValue -= count; - } else { - intValue += count; - } - - // Note that long.MinValue has the same bit pattern as -0.0. - if (intValue == Long.MIN_VALUE) { - return 0; - } - return intValue; - // Note that not all long values can be translated into double values. There's a - // whole bunch of them - // which return weird values like infinity and NaN - // return BitConverter.Int64BitsToDouble(intValue); - } - - /// - /// Evaluates the minimum distance to the next distinguishable number near the - /// argument value. - /// - /// The value used to determine the minimum - /// distance. - /// - /// Relative Epsilon (positive double or NaN). - /// - /// Evaluates the negative epsilon. The more common positive - /// epsilon is equal to two times this negative epsilon. - ///// - public static double EpsilonOf(double value) { - if (Double.isInfinite(value) || Double.isNaN(value)) { - return Double.NaN; - } +import java.math.BigDecimal; +import java.math.MathContext; - long signed64 = (long)value; - // long signed64 = BitConverter.DoubleToInt64Bits(value); - if (signed64 == 0) { - signed64++; - return signed64 - value; - // return BitConverter.Int64BitsToDouble(signed64) - value; - } - if (signed64-- < 0) { - return signed64 - value; - // return BitConverter.Int64BitsToDouble(signed64) - value; - } - return value - signed64; - // return value - BitConverter.Int64BitsToDouble(signed64); - } +public class Precision { + public static final BigDecimal DecimalPrecision = new BigDecimal("0.0000000000000000000000000001"); - /// - /// Evaluates the minimum distance to the next distinguishable number near the - /// argument value. - /// - /// The value used to determine the minimum - /// distance. - /// Relative Epsilon (positive double or NaN) - /// Evaluates the positive epsilon. See also - ///// - public static double PositiveEpsilonOf(double value) { - return 2 * EpsilonOf(value); - } + public static final BigDecimal PositiveDecimalPrecision = new BigDecimal("2").multiply(DecimalPrecision); - public static boolean AlmostEqualNormRelative(double a, double b, double diff, double maximumError) { - // If A or B are infinity (positive or negative) then - // only return true if they are exactly equal to each other - - // that is, if they are both infinities of the same sign. - if (Double.isInfinite(a) || Double.isInfinite(b)) { - return a == b; - } + private static final BigDecimal DefaultDecimalAccuracy = DecimalPrecision.multiply(new BigDecimal("10")); - // If A or B are a NAN, return false. NANs are equal to nothing, - // not even themselves. - if (Double.isNaN(a) || Double.isNaN(b)) { - return false; + public static boolean AlmostEqualNormRelative(BigDecimal a, BigDecimal b, BigDecimal diff, BigDecimal maximumError) { + if (a.abs().compareTo(DecimalPrecision) < 0 || b.abs().compareTo(DecimalPrecision) < 0) { + return diff.abs().compareTo(maximumError) < 0; } - // If one is almost zero, fall back to absolute equality - if (Math.abs(a) < DoublePrecision || Math.abs(b) < DoublePrecision) { - return Math.abs(diff) < maximumError; - } - - if ((a == 0 && Math.abs(b) < maximumError) || (b == 0 && Math.abs(a) < maximumError)) { + if ((a.compareTo(BigDecimal.ZERO) == 0 && b.abs().compareTo(maximumError) < 0) + || (b.compareTo(BigDecimal.ZERO) == 0 && a.abs().compareTo(maximumError) < 0)) { return true; } - return Math.abs(diff) < maximumError * Math.max(Math.abs(a), Math.abs(b)); + return diff.abs().compareTo(maximumError.multiply(a.abs().max(b.abs()))) < 0; } - public static boolean AlmostEqualRelative(double a, double b) { - return AlmostEqualNormRelative(a, b, a - b, DefaultDoubleAccuracy); + public static boolean AlmostEqualRelative(BigDecimal a, BigDecimal b) { + return AlmostEqualNormRelative(a, b, a.subtract(b), DefaultDecimalAccuracy); } - public static boolean AlmostEqual(double a, double b) { - return AlmostEqualNorm(a, b, a - b, DefaultDoubleAccuracy); + public static boolean AlmostEqual(BigDecimal a, BigDecimal b) { + return AlmostEqualNorm(a, b, a.subtract(b), DefaultDecimalAccuracy); } - public static boolean AlmostEqualNorm(double a, double b, double diff, double maximumAbsoluteError) { - // If A or B are infinity (positive or negative) then - // only return true if they are exactly equal to each other - - // that is, if they are both infinities of the same sign. - if (Double.isInfinite(a) || Double.isInfinite(b)) { - return a == b; - } - - // If A or B are a NAN, return false. NANs are equal to nothing, - // not even themselves. - if (Double.isNaN(a) || Double.isNaN(b)) { - return false; - } - - return Math.abs(diff) < maximumAbsoluteError; + public static boolean AlmostEqualNorm(BigDecimal a, BigDecimal b, BigDecimal diff, BigDecimal maximumAbsoluteError) { + return diff.abs().compareTo(maximumAbsoluteError) < 0; } - } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java index 53afc017c..bd5134b4e 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/Brent.java @@ -1,137 +1,127 @@ package toolgood.algorithm.mathNet.RootFinding; +import java.math.BigDecimal; +import java.math.MathContext; import java.util.function.Function; + import toolgood.algorithm.mathNet.Precision; - public class Brent { - public static double FindRoot(Function f, double lowerBound, double upperBound, double accuracy) - throws Exception { + public static BigDecimal FindRoot(Function f, BigDecimal lowerBound, BigDecimal upperBound, BigDecimal accuracy) throws Exception { return FindRoot(f, lowerBound, upperBound, accuracy, 100); } - public static double FindRoot(Function f, double lowerBound, double upperBound, double accuracy, - int maxIterations) throws Exception - { - RootNumber root=new RootNumber(); - if (TryFindRoot(f, lowerBound, upperBound, accuracy, maxIterations,root)) { - return root.root; + public static BigDecimal FindRoot(Function f, BigDecimal lowerBound, BigDecimal upperBound, BigDecimal accuracy, int maxIterations) throws Exception { + BigDecimal[] root = new BigDecimal[1]; + if (TryFindRoot(f, lowerBound, upperBound, accuracy, maxIterations, root)) { + return root[0]; } throw new Exception("RootFindingFailed"); } + public static boolean TryFindRoot(Function f, BigDecimal lowerBound, BigDecimal upperBound, BigDecimal accuracy, int maxIterations, BigDecimal[] root) { + BigDecimal fmin = f.apply(lowerBound); + BigDecimal fmax = f.apply(upperBound); + BigDecimal froot = fmax; + BigDecimal d = BigDecimal.ZERO, e = BigDecimal.ZERO; - public static boolean TryFindRoot(Function f, double lowerBound, double upperBound, double accuracy, - int maxIterations, RootNumber root) - { - double fmin = f.apply(lowerBound); - double fmax = f.apply(upperBound); - double froot = fmax; - double d = 0.0, e = 0.0; - - root.root = upperBound; - double xMid = Double.NaN; + root[0] = upperBound; + BigDecimal xMid = null; - // Root must be bracketed. if (sign(fmin) == sign(fmax)) { return false; } for (int i = 0; i <= maxIterations; i++) { - // adjust bounds if (sign(froot) == sign(fmax)) { upperBound = lowerBound; fmax = fmin; - e = d = root.root - lowerBound; + e = d = root[0].subtract(lowerBound); } - if (Math.abs(fmax) < Math.abs(froot)) { - lowerBound = root.root; - root.root = upperBound; + if (fmax.abs().compareTo(froot.abs()) < 0) { + lowerBound = root[0]; + root[0] = upperBound; upperBound = lowerBound; fmin = froot; froot = fmax; fmax = fmin; } - // convergence check - double xAcc1 = Precision.PositiveDoublePrecision * Math.abs(root.root) + 0.5 * accuracy; - double xMidOld = xMid; - xMid = (upperBound - root.root) / 2.0; + BigDecimal xAcc1 = Precision.PositiveDecimalPrecision.multiply(root[0].abs()).add(new BigDecimal("0.5").multiply(accuracy)); + BigDecimal xMidOld = xMid; + xMid = upperBound.subtract(root[0]).divide(new BigDecimal("2"), MathContext.DECIMAL128); - if (Math.abs(xMid) <= xAcc1 || Precision.AlmostEqualNormRelative(froot,0, froot, accuracy)) { + if (xMid.abs().compareTo(xAcc1) <= 0 || Precision.AlmostEqualNormRelative(BigDecimal.ZERO, froot, froot, accuracy)) { return true; } - if (xMid == xMidOld) { - // accuracy not sufficient, but cannot be improved further + if (xMidOld != null && xMid.compareTo(xMidOld) == 0) { return false; } - if (Math.abs(e) >= xAcc1 && Math.abs(fmin) > Math.abs(froot)) { - // Attempt inverse quadratic interpolation - double s = froot / fmin; - double p; - double q; - if (Precision.AlmostEqualRelative(lowerBound,upperBound)) { - p = 2.0 * xMid * s; - q = 1.0 - s; + if (e.abs().compareTo(xAcc1) >= 0 && fmin.abs().compareTo(froot.abs()) > 0) { + BigDecimal s = froot.divide(fmin, MathContext.DECIMAL128); + BigDecimal p; + BigDecimal q; + if (Precision.AlmostEqualRelative(lowerBound, upperBound)) { + p = new BigDecimal("2").multiply(xMid).multiply(s); + q = BigDecimal.ONE.subtract(s); } else { - q = fmin / fmax; - double r = froot / fmax; - p = s * (2.0 * xMid * q * (q - r) - (root.root - lowerBound) * (r - 1.0)); - q = (q - 1.0) * (r - 1.0) * (s - 1.0); + q = fmin.divide(fmax, MathContext.DECIMAL128); + BigDecimal r = froot.divide(fmax, MathContext.DECIMAL128); + p = s.multiply(new BigDecimal("2").multiply(xMid).multiply(q).multiply(q.subtract(r)) + .subtract(root[0].subtract(lowerBound).multiply(r.subtract(BigDecimal.ONE)))); + q = q.subtract(BigDecimal.ONE).multiply(r.subtract(BigDecimal.ONE)).multiply(s.subtract(BigDecimal.ONE)); } - if (p > 0.0) { - // Check whether in bounds - q = -q; + if (p.compareTo(BigDecimal.ZERO) > 0) { + q = q.negate(); } - p = Math.abs(p); - if (2.0 * p < Math.min(3.0 * xMid * q - Math.abs(xAcc1 * q), Math.abs(e * q))) { - // Accept interpolation + p = p.abs(); + if (new BigDecimal("2").multiply(p).compareTo(xAcc1.multiply(new BigDecimal("3").multiply(xMid).multiply(q).abs()) + .min(e.multiply(q).abs())) < 0) { e = d; - d = p / q; + d = p.divide(q, MathContext.DECIMAL128); } else { - // Interpolation failed, use bisection d = xMid; e = d; } } else { - // Bounds decreasing too slowly, use bisection d = xMid; e = d; } - lowerBound = root.root; + lowerBound = root[0]; fmin = froot; - if (Math.abs(d) > xAcc1) { - root.root += d; + if (d.abs().compareTo(xAcc1) > 0) { + root[0] = root[0].add(d); } else { - root.root += Sign(xAcc1, xMid); + root[0] = root[0].add(Sign(xAcc1, xMid)); } - froot = f.apply(root.root); + froot = f.apply(root[0]); } return false; } - static int sign(double a){ - if(a==0.0){ + + static int sign(BigDecimal a) { + if (a.compareTo(BigDecimal.ZERO) == 0) { return 0; } - if(a<0){ + if (a.compareTo(BigDecimal.ZERO) < 0) { return -1; } return 1; } - /// Helper method useful for preventing rounding errors. - /// a*sign(b) - static double Sign(double a, double b) - { - return b >= 0 ? (a >= 0 ? a : -a) : (a >= 0 ? -a : a); + static BigDecimal Sign(BigDecimal a, BigDecimal b) { + if (b.compareTo(BigDecimal.ZERO) >= 0) { + return a.compareTo(BigDecimal.ZERO) >= 0 ? a : a.negate(); + } else { + return a.compareTo(BigDecimal.ZERO) >= 0 ? a.negate() : a; + } } - } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java b/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java deleted file mode 100644 index 3b98a86f2..000000000 --- a/java/src/main/java/toolgood/algorithm/mathNet/RootFinding/RootNumber.java +++ /dev/null @@ -1,8 +0,0 @@ -package toolgood.algorithm.mathNet.RootFinding; - -public class RootNumber { - public Double root; - public RootNumber(){ - root=0.0; - } -} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java b/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java index b18a3acb2..e6ee222f1 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java @@ -1,316 +1,320 @@ package toolgood.algorithm.mathNet; -public class SpecialFunctions { - static double[] _factorialCache; - - /// - /// Initializes static members of the SpecialFunctions class. - /// - static { - InitializeFactorial(); - } - - static void InitializeFactorial() { - _factorialCache = new double[171]; - _factorialCache[0] = 1.0; - for (int i = 1; i < _factorialCache.length; i++) { - _factorialCache[i] = _factorialCache[i - 1] * i; - } - } - - public static double Binomial(int n, int k) { - if (k < 0 || n < 0 || k > n) { - return 0.0; - } - - return Math.floor(0.5 + Math.exp(FactorialLn(n) - FactorialLn(k) - FactorialLn(n - k))); - } - - public static double FactorialLn(int x) { - // if (x < 0) { - // throw new ArgumentOutOfRangeException("x", "ArgumentPositive"); - // } - - if (x <= 1) { - return 0d; - } +import java.math.BigDecimal; +import java.math.MathContext; - if (x < _factorialCache.length) { - return Math.log(_factorialCache[x]); - } - - return GammaLn(x + 1.0); - } - - public static double BinomialLn(int n, int k) { - if (k < 0 || n < 0 || k > n) { - return Double.NEGATIVE_INFINITY; - } - - return FactorialLn(n) - FactorialLn(k) - FactorialLn(n - k); - } - - public static double GammaLn(double z) { - if (z < 0.5) { - double s = GammaDk[0]; +public class SpecialFunctions { + private static final int GammaN = 10; + private static final BigDecimal GammaR = new BigDecimal("10.900511"); + + private static final BigDecimal[] GammaDk = { + new BigDecimal("2.48574089138753565546e-5"), + new BigDecimal("1.05142378581721974210"), + new BigDecimal("-3.45687097222016235469"), + new BigDecimal("4.51227709466894823700"), + new BigDecimal("-2.98285225323576655721"), + new BigDecimal("1.05639711577126713077"), + new BigDecimal("-1.95428773191645869583e-1"), + new BigDecimal("1.70970543404441224307e-2"), + new BigDecimal("-5.71926117404305781283e-4"), + new BigDecimal("4.63399473359905636708e-6"), + new BigDecimal("-2.71994908488607703910e-9") + }; + + public static BigDecimal GammaLn(BigDecimal z) { + BigDecimal half = new BigDecimal("0.5"); + if (z.compareTo(half) < 0) { + BigDecimal s = GammaDk[0]; for (int i = 1; i <= GammaN; i++) { - s += GammaDk[i] / (i - z); + s = s.add(GammaDk[i].divide(new BigDecimal(i).subtract(z), MathContext.DECIMAL128)); } - return Constants.LnPi - Math.log(Math.sin(Math.PI * z)) - Math.log(s) - Constants.LogTwoSqrtEOverPi - - ((0.5 - z) * Math.log((0.5 - z + GammaR) / Math.E)); + return Constants.LnPi + .subtract(MathEx.Log(MathEx.Sin(MathEx.PI.multiply(z)))) + .subtract(MathEx.Log(s)) + .subtract(Constants.LogTwoSqrtEOverPi) + .subtract(half.subtract(z).multiply(MathEx.Log(half.subtract(z).add(GammaR).divide(MathEx.E, MathContext.DECIMAL128)))); } else { - double s = GammaDk[0]; + BigDecimal s = GammaDk[0]; for (int i = 1; i <= GammaN; i++) { - s += GammaDk[i] / (z + i - 1.0); + s = s.add(GammaDk[i].divide(z.add(new BigDecimal(i - 1)), MathContext.DECIMAL128)); } - return Math.log(s) + Constants.LogTwoSqrtEOverPi + ((z - 0.5) * Math.log((z - 0.5 + GammaR) / Math.E)); + return MathEx.Log(s) + .add(Constants.LogTwoSqrtEOverPi) + .add(z.subtract(half).multiply(MathEx.Log(z.subtract(half).add(GammaR).divide(MathEx.E, MathContext.DECIMAL128)))); } } - public static double BetaRegularized(double a, double b, double x) { - // if (a < 0.0) { - // throw new ArgumentOutOfRangeException("a", Resources.ArgumentNotNegative); - // } + public static BigDecimal BetaRegularized(BigDecimal a, BigDecimal b, BigDecimal x) { + BigDecimal zero = BigDecimal.ZERO; + BigDecimal one = BigDecimal.ONE; - // if (b < 0.0) { - // throw new ArgumentOutOfRangeException("b", Resources.ArgumentNotNegative); - // } + BigDecimal bt = (x.compareTo(zero) == 0 || x.compareTo(one) == 0) + ? zero + : MathEx.Exp(GammaLn(a.add(b)).subtract(GammaLn(a)).subtract(GammaLn(b)) + .add(a.multiply(MathEx.Log(x))).add(b.multiply(MathEx.Log(one.subtract(x)))))); - // if (x < 0.0 || x > 1.0) { - // throw new ArgumentOutOfRangeException("x", - // Resources.ArgumentInIntervalXYInclusive); - // } + boolean symmetryTransformation = x.compareTo(a.add(one).divide(a.add(b).add(new BigDecimal("2")), MathContext.DECIMAL128)) >= 0; - double bt = (x == 0.0 || x == 1.0) ? 0.0 - : Math.exp(GammaLn(a + b) - GammaLn(a) - GammaLn(b) + (a * Math.log(x)) + (b * Math.log(1.0 - x))); - - boolean symmetryTransformation = x >= (a + 1.0) / (a + b + 2.0); - - /* Continued fraction representation */ - double eps = Precision.DoublePrecision; - double fpmin = Precision.Increment(0.0) / eps; + BigDecimal eps = Precision.DecimalPrecision; if (symmetryTransformation) { - x = 1.0 - x; - double swap = a; + x = one.subtract(x); + BigDecimal swap = a; a = b; b = swap; } - double qab = a + b; - double qap = a + 1.0; - double qam = a - 1.0; - double c = 1.0; - double d = 1.0 - (qab * x / qap); + BigDecimal qab = a.add(b); + BigDecimal qap = a.add(one); + BigDecimal qam = a.subtract(one); + BigDecimal c = one; + BigDecimal d = one.subtract(qab.multiply(x).divide(qap, MathContext.DECIMAL128)); - if (Math.abs(d) < fpmin) { - d = fpmin; + if (d.abs().compareTo(eps) < 0) { + d = eps; } - d = 1.0 / d; - double h = d; + d = one.divide(d, MathContext.DECIMAL128); + BigDecimal h = d; for (int m = 1, m2 = 2; m <= 140; m++, m2 += 2) { - double aa = m * (b - m) * x / ((qam + m2) * (a + m2)); - d = 1.0 + (aa * d); + BigDecimal aa = new BigDecimal(m).multiply(b.subtract(new BigDecimal(m))).multiply(x) + .divide(qam.add(new BigDecimal(m2)).multiply(a.add(new BigDecimal(m2))), MathContext.DECIMAL128); + d = one.add(aa.multiply(d)); - if (Math.abs(d) < fpmin) { - d = fpmin; + if (d.abs().compareTo(eps) < 0) { + d = eps; } - c = 1.0 + (aa / c); - if (Math.abs(c) < fpmin) { - c = fpmin; + c = one.add(aa.divide(c, MathContext.DECIMAL128)); + if (c.abs().compareTo(eps) < 0) { + c = eps; } - d = 1.0 / d; - h *= d * c; - aa = -(a + m) * (qab + m) * x / ((a + m2) * (qap + m2)); - d = 1.0 + (aa * d); + d = one.divide(d, MathContext.DECIMAL128); + h = h.multiply(d).multiply(c); - if (Math.abs(d) < fpmin) { - d = fpmin; - } + aa = a.add(new BigDecimal(m)).negate().multiply(qab.add(new BigDecimal(m))).multiply(x) + .divide(a.add(new BigDecimal(m2)).multiply(qap.add(new BigDecimal(m2))), MathContext.DECIMAL128); + d = one.add(aa.multiply(d)); - c = 1.0 + (aa / c); + if (d.abs().compareTo(eps) < 0) { + d = eps; + } - if (Math.abs(c) < fpmin) { - c = fpmin; + c = one.add(aa.divide(c, MathContext.DECIMAL128)); + if (c.abs().compareTo(eps) < 0) { + c = eps; } - d = 1.0 / d; - double del = d * c; - h *= del; + d = one.divide(d, MathContext.DECIMAL128); + BigDecimal del = d.multiply(c); + h = h.multiply(del); - if (Math.abs(del - 1.0) <= eps) { - return symmetryTransformation ? 1.0 - (bt * h / a) : bt * h / a; + if (del.subtract(one).abs().compareTo(eps) <= 0) { + return symmetryTransformation ? one.subtract(bt.multiply(h).divide(a, MathContext.DECIMAL128)) + : bt.multiply(h).divide(a, MathContext.DECIMAL128); } } - return symmetryTransformation ? 1.0 - (bt * h / a) : bt * h / a; + return symmetryTransformation ? one.subtract(bt.multiply(h).divide(a, MathContext.DECIMAL128)) + : bt.multiply(h).divide(a, MathContext.DECIMAL128); } - final static int GammaN = 10; - - /// - /// Auxiliary variable when evaluating the function. - /// - final static double GammaR = 10.900511; - - static double[] GammaDk = { 2.48574089138753565546e-5, 1.05142378581721974210, -3.45687097222016235469, - 4.51227709466894823700, -2.98285225323576655721, 1.05639711577126713077, -1.95428773191645869583e-1, - 1.70970543404441224307e-2, -5.71926117404305781283e-4, 4.63399473359905636708e-6, - -2.71994908488607703910e-9 }; - - public static double GammaLowerRegularized(double a, double x) { - final double epsilon = 0.000000000000001; - final double big = 4503599627370496.0; - final double bigInv = 2.22044604925031308085e-16; - - // if (a < 0d) { - // throw new ArgumentOutOfRangeException("a", - // Properties.Resources.ArgumentNotNegative); - // } - - // if (x < 0d) { - // throw new ArgumentOutOfRangeException("x", - // Properties.Resources.ArgumentNotNegative); - // } - - if (Precision.AlmostEqual(a, 0.0)) { - if (Precision.AlmostEqual(x, 0.0)) { - // use right hand limit value because so that regularized upper/lower gamma - // definition holds. - return 1d; - } + public static BigDecimal GammaLowerRegularized(BigDecimal a, BigDecimal x) { + BigDecimal epsilon = new BigDecimal("0.000000000000001"); + BigDecimal big = new BigDecimal("4503599627370496.0"); + BigDecimal bigInv = new BigDecimal("2.22044604925031308085e-16"); - return 1d; + if (a.compareTo(BigDecimal.ZERO) == 0) { + if (x.compareTo(BigDecimal.ZERO) == 0) { + return BigDecimal.ONE; + } + return BigDecimal.ONE; } - if (Precision.AlmostEqual(x, 0.0)) { - return 0d; + if (x.compareTo(BigDecimal.ZERO) == 0) { + return BigDecimal.ZERO; } - double ax = (a * Math.log(x)) - x - GammaLn(a); - if (ax < -709.78271289338399) { - return a < x ? 1d : 0d; + BigDecimal ax = a.multiply(MathEx.Log(x)).subtract(x).subtract(GammaLn(a)); + if (ax.compareTo(new BigDecimal("-709.78271289338399")) < 0) { + return a.compareTo(x) > 0 ? BigDecimal.ONE : BigDecimal.ZERO; } - if (x <= 1 || x <= a) { - double r2 = a; - double c2 = 1; - double ans2 = 1; + if (x.compareTo(BigDecimal.ONE) <= 0 || x.compareTo(a) <= 0) { + BigDecimal r2 = a; + BigDecimal c2 = BigDecimal.ONE; + BigDecimal ans2 = BigDecimal.ONE; do { - r2 = r2 + 1; - c2 = c2 * x / r2; - ans2 += c2; - } while ((c2 / ans2) > epsilon); + r2 = r2.add(BigDecimal.ONE); + c2 = c2.multiply(x).divide(r2, MathContext.DECIMAL128); + ans2 = ans2.add(c2); + } while (c2.divide(ans2, MathContext.DECIMAL128).compareTo(epsilon) > 0); - return Math.exp(ax) * ans2 / a; + return MathEx.Exp(ax).multiply(ans2).divide(a, MathContext.DECIMAL128); } int c = 0; - double y = 1 - a; - double z = x + y + 1; + BigDecimal y = a.subtract(BigDecimal.ONE); + BigDecimal z = x.add(y).add(BigDecimal.ONE); - double p3 = 1; - double q3 = x; - double p2 = x + 1; - double q2 = z * x; - double ans = p2 / q2; + BigDecimal p3 = BigDecimal.ONE; + BigDecimal q3 = x; + BigDecimal p2 = x.add(BigDecimal.ONE); + BigDecimal q2 = z.multiply(x); + BigDecimal ans = p2.divide(q2, MathContext.DECIMAL128); - double error; + BigDecimal error; do { c++; - y += 1; - z += 2; - double yc = y * c; + y = y.add(BigDecimal.ONE); + z = z.add(new BigDecimal("2")); + BigDecimal yc = y.multiply(new BigDecimal(c)); - double p = (p2 * z) - (p3 * yc); - double q = (q2 * z) - (q3 * yc); + BigDecimal p = p2.multiply(z).subtract(p3.multiply(yc)); + BigDecimal q = q2.multiply(z).subtract(q3.multiply(yc)); - if (q != 0) { - double nextans = p / q; - error = Math.abs((ans - nextans) / nextans); + if (q.compareTo(BigDecimal.ZERO) != 0) { + BigDecimal nextans = p.divide(q, MathContext.DECIMAL128); + error = ans.subtract(nextans).abs().divide(nextans.abs(), MathContext.DECIMAL128); ans = nextans; } else { - // zero div, skip - error = 1; + error = BigDecimal.ONE; } - // shift p3 = p2; p2 = p; q3 = q2; q2 = q; - // normalize fraction when the numerator becomes large - if (Math.abs(p) > big) { - p3 *= bigInv; - p2 *= bigInv; - q3 *= bigInv; - q2 *= bigInv; + if (p.abs().compareTo(big) > 0) { + p3 = p3.multiply(bigInv); + p2 = p2.multiply(bigInv); + q3 = q3.multiply(bigInv); + q2 = q2.multiply(bigInv); } - } while (error > epsilon); + } while (error.compareTo(epsilon) > 0); - return 1d - (Math.exp(ax) * ans); + return BigDecimal.ONE.subtract(MathEx.Exp(ax).multiply(ans)); } - public static double GammaLowerRegularizedInv(double a, double y0) { - final double epsilon = 0.000000000000001; - final double big = 4503599627370496.0; - final double threshold = 5 * epsilon; - - if (Double.isNaN(a) || Double.isNaN(y0)) { - return Double.NaN; + public static BigDecimal ErfInv(BigDecimal x) { + BigDecimal zero = BigDecimal.ZERO; + BigDecimal one = BigDecimal.ONE; + BigDecimal two = new BigDecimal("2"); + BigDecimal half = new BigDecimal("0.5"); + + if (x.compareTo(zero) < 0 || x.compareTo(one) > 0) { + throw new IllegalArgumentException("x must be in [0,1]"); + } + + if (x.compareTo(zero) == 0) { + return zero; + } + if (x.compareTo(one) == 0) { + return new BigDecimal("100"); + } + + BigDecimal a1 = new BigDecimal("-3.969683028665376e+01"); + BigDecimal a2 = new BigDecimal("2.209460984245205e+02"); + BigDecimal a3 = new BigDecimal("-2.759285104469687e+02"); + BigDecimal a4 = new BigDecimal("1.383577518672690e+02"); + BigDecimal a5 = new BigDecimal("-3.066479806614716e+01"); + BigDecimal a6 = new BigDecimal("2.506628277459239e+00"); + + BigDecimal b1 = new BigDecimal("-5.447609879822406e+01"); + BigDecimal b2 = new BigDecimal("1.615858368580409e+02"); + BigDecimal b3 = new BigDecimal("-1.556989798598866e+02"); + BigDecimal b4 = new BigDecimal("6.680131188771972e+01"); + BigDecimal b5 = new BigDecimal("-1.328068155288572e+01"); + + BigDecimal c1 = new BigDecimal("-7.784894002430293e-03"); + BigDecimal c2 = new BigDecimal("-3.223964580411365e-01"); + BigDecimal c3 = new BigDecimal("-2.400758277161838e+00"); + BigDecimal c4 = new BigDecimal("-2.549732539343734e+00"); + BigDecimal c5 = new BigDecimal("4.374664141464968e+00"); + BigDecimal c6 = new BigDecimal("2.938163982698783e+00"); + + BigDecimal d1 = new BigDecimal("7.784695709041462e-03"); + BigDecimal d2 = new BigDecimal("3.224671290700398e-01"); + BigDecimal d3 = new BigDecimal("2.445134137142996e+00"); + BigDecimal d4 = new BigDecimal("3.754408661907416e+00"); + + BigDecimal p = x; + BigDecimal q; + + BigDecimal x_low = new BigDecimal("0.02425"); + BigDecimal x_high = one.subtract(x_low); + + if (p.compareTo(x_low) <= 0) { + q = MathEx.Sqrt(two.multiply(MathEx.Log(p))); + BigDecimal num = c1.multiply(q).pow(5).add(c2.multiply(q).pow(4)).add(c3.multiply(q).pow(3)) + .add(c4.multiply(q).pow(2)).add(c5.multiply(q)).add(c6); + BigDecimal den = d1.multiply(q).pow(5).add(d2.multiply(q).pow(4)).add(d3.multiply(q).pow(3)) + .add(d4.multiply(q).pow(2)).add(one).multiply(q).add(one); + return num.divide(den, MathContext.DECIMAL128).negate(); + } else if (p.compareTo(x_high) < 0) { + q = p.subtract(half).multiply(two); + BigDecimal num = a1.multiply(q).pow(5).add(a2.multiply(q).pow(4)).add(a3.multiply(q).pow(3)) + .add(a4.multiply(q).pow(2)).add(a5.multiply(q)).add(a6); + BigDecimal den = b1.multiply(q).pow(5).add(b2.multiply(q).pow(4)).add(b3.multiply(q).pow(3)) + .add(b4.multiply(q).pow(2)).add(b5.multiply(q)).add(one); + return num.divide(den, MathContext.DECIMAL128); + } else { + q = MathEx.Sqrt(two.multiply(MathEx.Log(one.subtract(p)))); + BigDecimal num = c1.multiply(q).pow(5).add(c2.multiply(q).pow(4)).add(c3.multiply(q).pow(3)) + .add(c4.multiply(q).pow(2)).add(c5.multiply(q)).add(c6); + BigDecimal den = d1.multiply(q).pow(5).add(d2.multiply(q).pow(4)).add(d3.multiply(q).pow(3)) + .add(d4.multiply(q).pow(2)).add(one).multiply(q).add(one); + return num.divide(den, MathContext.DECIMAL128); } + } - // if (a < 0 || a.AlmostEqual(0.0)) { - // throw new ArgumentOutOfRangeException("a"); - // } - - // if (y0 < 0 || y0 > 1) { - // throw new ArgumentOutOfRangeException("y0"); - // } + public static BigDecimal GammaLowerRegularizedInv(BigDecimal a, BigDecimal y0) { + BigDecimal epsilon = new BigDecimal("0.000000000000001"); + BigDecimal big = new BigDecimal("4503599627370496.0"); + BigDecimal threshold = new BigDecimal("5").multiply(epsilon); - if (Precision.AlmostEqual(y0, 0.0)) { - return 0d; + if (y0.compareTo(BigDecimal.ZERO) == 0) { + return BigDecimal.ZERO; } - if (Precision.AlmostEqual(y0, 1.0)) { - return Double.POSITIVE_INFINITY; + if (y0.compareTo(BigDecimal.ONE) == 0) { + return new BigDecimal("79228162514264337593543950335"); } - y0 = 1 - y0; + y0 = BigDecimal.ONE.subtract(y0); - double xUpper = big; - double xLower = 0; - double yUpper = 1; - double yLower = 0; + BigDecimal xUpper = big; + BigDecimal xLower = BigDecimal.ZERO; + BigDecimal yUpper = BigDecimal.ONE; + BigDecimal yLower = BigDecimal.ZERO; - // Initial Guess - double d = 1 / (9 * a); - double y = 1 - d - (0.98 * Constants.Sqrt2 * ErfInv((2.0 * y0) - 1.0) * Math.sqrt(d)); - double x = a * y * y * y; - double lgm = GammaLn(a); + BigDecimal d = BigDecimal.ONE.divide(new BigDecimal("9").multiply(a), MathContext.DECIMAL128); + BigDecimal y = BigDecimal.ONE.subtract(d).subtract(new BigDecimal("0.98").multiply(Constants.Sqrt2) + .multiply(ErfInv(new BigDecimal("2").multiply(y0).subtract(BigDecimal.ONE))) + .multiply(MathEx.Sqrt(d))); + BigDecimal x = a.multiply(y).multiply(y).multiply(y); + BigDecimal lgm = GammaLn(a); for (int i = 0; i < 10; i++) { - if (x < xLower || x > xUpper) { - d = 0.0625; + if (x.compareTo(xLower) < 0 || x.compareTo(xUpper) > 0) { + d = new BigDecimal("0.0625"); break; } - y = 1 - GammaLowerRegularized(a, x); - if (y < yLower || y > yUpper) { - d = 0.0625; + y = BigDecimal.ONE.subtract(GammaLowerRegularized(a, x)); + if (y.compareTo(yLower) < 0 || y.compareTo(yUpper) > 0) { + d = new BigDecimal("0.0625"); break; } - if (y < y0) { + if (y.compareTo(y0) < 0) { xUpper = x; yLower = y; } else { @@ -318,74 +322,73 @@ public static double GammaLowerRegularizedInv(double a, double y0) { yUpper = y; } - d = ((a - 1) * Math.log(x)) - x - lgm; - if (d < -709.78271289338399) { - d = 0.0625; + d = a.subtract(BigDecimal.ONE).multiply(MathEx.Log(x)).subtract(x).subtract(lgm); + if (d.compareTo(new BigDecimal("-709.78271289338399")) < 0) { + d = new BigDecimal("0.0625"); break; } - d = -Math.exp(d); - d = (y - y0) / d; - if (Math.abs(d / x) < epsilon) { + d = MathEx.Exp(d.negate()); + d = y.subtract(y0).divide(d, MathContext.DECIMAL128); + if (d.divide(x, MathContext.DECIMAL128).abs().compareTo(epsilon) < 0) { return x; } - if ((d > (x / 4)) && (y0 < 0.05)) { - // Naive heuristics for cases near the singularity - d = x / 10; + if (d.compareTo(x.divide(new BigDecimal("4"), MathContext.DECIMAL128)) > 0 && y0.compareTo(new BigDecimal("0.05")) < 0) { + d = x.divide(new BigDecimal("10"), MathContext.DECIMAL128); } - x -= d; + x = x.subtract(d); } - if (xUpper == big) { - if (x <= 0) { - x = 1; + if (xUpper.compareTo(big) == 0) { + if (x.compareTo(BigDecimal.ZERO) <= 0) { + x = BigDecimal.ONE; } - while (xUpper == big) { - x = (1 + d) * x; - y = 1 - GammaLowerRegularized(a, x); - if (y < y0) { + while (xUpper.compareTo(big) == 0) { + x = BigDecimal.ONE.add(d).multiply(x); + y = BigDecimal.ONE.subtract(GammaLowerRegularized(a, x)); + if (y.compareTo(y0) < 0) { xUpper = x; yLower = y; break; } - d = d + d; + d = d.add(d); } } int dir = 0; - d = 0.5; + d = new BigDecimal("0.5"); for (int i = 0; i < 400; i++) { - x = xLower + (d * (xUpper - xLower)); - y = 1 - GammaLowerRegularized(a, x); - lgm = (xUpper - xLower) / (xLower + xUpper); - if (Math.abs(lgm) < threshold) { + x = xLower.add(d.multiply(xUpper.subtract(xLower))); + y = BigDecimal.ONE.subtract(GammaLowerRegularized(a, x)); + lgm = xUpper.subtract(xLower).divide(xLower.add(xUpper), MathContext.DECIMAL128); + if (lgm.abs().compareTo(threshold) < 0) { return x; } - lgm = (y - y0) / y0; - if (Math.abs(lgm) < threshold) { + lgm = y.subtract(y0).divide(y0, MathContext.DECIMAL128); + if (lgm.abs().compareTo(threshold) < 0) { return x; } - if (x <= 0d) { - return 0d; + if (x.compareTo(BigDecimal.ZERO) <= 0) { + return BigDecimal.ZERO; } - if (y >= y0) { + if (y.compareTo(y0) >= 0) { xLower = x; yUpper = y; if (dir < 0) { dir = 0; - d = 0.5; + d = new BigDecimal("0.5"); } else { if (dir > 1) { - d = (0.5 * d) + 0.5; + d = new BigDecimal("0.5").multiply(d).add(new BigDecimal("0.5")); } else { - d = (y0 - yLower) / (yUpper - yLower); + d = y0.subtract(yLower).divide(yUpper.subtract(yLower), MathContext.DECIMAL128); } } @@ -395,12 +398,12 @@ public static double GammaLowerRegularizedInv(double a, double y0) { yLower = y; if (dir > 0) { dir = 0; - d = 0.5; + d = new BigDecimal("0.5"); } else { if (dir < -1) { - d = 0.5 * d; + d = new BigDecimal("0.5").multiply(d); } else { - d = (y0 - yLower) / (yUpper - yLower); + d = y0.subtract(yLower).divide(yUpper.subtract(yLower), MathContext.DECIMAL128); } } @@ -411,467 +414,85 @@ public static double GammaLowerRegularizedInv(double a, double y0) { return x; } - public static double Gamma(double z) { - if (z < 0.5) { - double s = GammaDk[0]; + public static BigDecimal Gamma(BigDecimal z) { + BigDecimal half = new BigDecimal("0.5"); + if (z.compareTo(half) < 0) { + BigDecimal s = GammaDk[0]; for (int i = 1; i <= GammaN; i++) { - s += GammaDk[i] / (i - z); + s = s.add(GammaDk[i].divide(new BigDecimal(i).subtract(z), MathContext.DECIMAL128)); } - return Math.PI / (Math.sin(Math.PI * z) * s * Constants.TwoSqrtEOverPi - * Math.pow((0.5 - z + GammaR) / Math.E, 0.5 - z)); + return MathEx.PI.divide(MathEx.Sin(MathEx.PI.multiply(z)) + .multiply(s) + .multiply(Constants.TwoSqrtEOverPi) + .multiply(MathEx.Pow(half.subtract(z).add(GammaR).divide(MathEx.E, MathContext.DECIMAL128), half.subtract(z))), MathContext.DECIMAL128); } else { - double s = GammaDk[0]; + BigDecimal s = GammaDk[0]; for (int i = 1; i <= GammaN; i++) { - s += GammaDk[i] / (z + i - 1.0); + s = s.add(GammaDk[i].divide(z.add(new BigDecimal(i - 1)), MathContext.DECIMAL128)); } - return s * Constants.TwoSqrtEOverPi * Math.pow((z - 0.5 + GammaR) / Math.E, z - 0.5); + return s.multiply(Constants.TwoSqrtEOverPi) + .multiply(MathEx.Pow(z.subtract(half).add(GammaR).divide(MathEx.E, MathContext.DECIMAL128), z.subtract(half))); } } - private static double[] ErfImpAn = { 0.00337916709551257388990745, -0.00073695653048167948530905, - -0.374732337392919607868241, 0.0817442448733587196071743, -0.0421089319936548595203468, - 0.0070165709512095756344528, -0.00495091255982435110337458, 0.000871646599037922480317225 }; - private static double[] ErfImpAd = { 1, -0.218088218087924645390535, 0.412542972725442099083918, - -0.0841891147873106755410271, 0.0655338856400241519690695, -0.0120019604454941768171266, - 0.00408165558926174048329689, -0.000615900721557769691924509 }; - private static double[] ErfImpBn = { -0.0361790390718262471360258, 0.292251883444882683221149, - 0.281447041797604512774415, 0.125610208862766947294894, 0.0274135028268930549240776, - 0.00250839672168065762786937 }; - private static double[] ErfImpBd = { 1, 1.8545005897903486499845, 1.43575803037831418074962, - 0.582827658753036572454135, 0.124810476932949746447682, 0.0113724176546353285778481 }; - private static double[] ErfImpCn = { -0.0397876892611136856954425, 0.153165212467878293257683, - 0.191260295600936245503129, 0.10276327061989304213645, 0.029637090615738836726027, - 0.0046093486780275489468812, 0.000307607820348680180548455 }; - private static double[] ErfImpCd = { 1, 1.95520072987627704987886, 1.64762317199384860109595, - 0.768238607022126250082483, 0.209793185936509782784315, 0.0319569316899913392596356, - 0.00213363160895785378615014 }; - private static double[] ErfImpDn = { -0.0300838560557949717328341, 0.0538578829844454508530552, - 0.0726211541651914182692959, 0.0367628469888049348429018, 0.00964629015572527529605267, - 0.00133453480075291076745275, 0.778087599782504251917881e-4 }; - private static double[] ErfImpDd = { 1, 1.75967098147167528287343, 1.32883571437961120556307, - 0.552528596508757581287907, 0.133793056941332861912279, 0.0179509645176280768640766, - 0.00104712440019937356634038, -0.106640381820357337177643e-7 }; - private static double[] ErfImpEn = { -0.0117907570137227847827732, 0.014262132090538809896674, - 0.0202234435902960820020765, 0.00930668299990432009042239, 0.00213357802422065994322516, - 0.00025022987386460102395382, 0.120534912219588189822126e-4 }; - private static double[] ErfImpEd = { 1, 1.50376225203620482047419, 0.965397786204462896346934, - 0.339265230476796681555511, 0.0689740649541569716897427, 0.00771060262491768307365526, - 0.000371421101531069302990367 }; - private static double[] ErfImpFn = { -0.00546954795538729307482955, 0.00404190278731707110245394, - 0.0054963369553161170521356, 0.00212616472603945399437862, 0.000394984014495083900689956, - 0.365565477064442377259271e-4, 0.135485897109932323253786e-5 }; - private static double[] ErfImpFd = { 1, 1.21019697773630784832251, 0.620914668221143886601045, - 0.173038430661142762569515, 0.0276550813773432047594539, 0.00240625974424309709745382, - 0.891811817251336577241006e-4, -0.465528836283382684461025e-11 }; - private static double[] ErfImpGn = { -0.00270722535905778347999196, 0.0013187563425029400461378, - 0.00119925933261002333923989, 0.00027849619811344664248235, 0.267822988218331849989363e-4, - 0.923043672315028197865066e-6 }; - private static double[] ErfImpGd = { 1, 0.814632808543141591118279, 0.268901665856299542168425, - 0.0449877216103041118694989, 0.00381759663320248459168994, 0.000131571897888596914350697, - 0.404815359675764138445257e-11 }; - private static double[] ErfImpHn = { -0.00109946720691742196814323, 0.000406425442750422675169153, - 0.000274499489416900707787024, 0.465293770646659383436343e-4, 0.320955425395767463401993e-5, - 0.778286018145020892261936e-7 }; - private static double[] ErfImpHd = { 1, 0.588173710611846046373373, 0.139363331289409746077541, - 0.0166329340417083678763028, 0.00100023921310234908642639, 0.24254837521587225125068e-4 }; - private static double[] ErfImpIn = { -0.00056907993601094962855594, 0.000169498540373762264416984, - 0.518472354581100890120501e-4, 0.382819312231928859704678e-5, 0.824989931281894431781794e-7 }; - private static double[] ErfImpId = { 1, 0.339637250051139347430323, 0.043472647870310663055044, - 0.00248549335224637114641629, 0.535633305337152900549536e-4, -0.117490944405459578783846e-12 }; - private static double[] ErfImpJn = { -0.000241313599483991337479091, 0.574224975202501512365975e-4, - 0.115998962927383778460557e-4, 0.581762134402593739370875e-6, 0.853971555085673614607418e-8 }; - private static double[] ErfImpJd = { 1, 0.233044138299687841018015, 0.0204186940546440312625597, - 0.000797185647564398289151125, 0.117019281670172327758019e-4 }; - private static double[] ErfImpKn = { -0.000146674699277760365803642, 0.162666552112280519955647e-4, - 0.269116248509165239294897e-5, 0.979584479468091935086972e-7, 0.101994647625723465722285e-8 }; - private static double[] ErfImpKd = { 1, 0.165907812944847226546036, 0.0103361716191505884359634, - 0.000286593026373868366935721, 0.298401570840900340874568e-5 }; - private static double[] ErfImpLn = { -0.583905797629771786720406e-4, 0.412510325105496173512992e-5, - 0.431790922420250949096906e-6, 0.993365155590013193345569e-8, 0.653480510020104699270084e-10 }; - private static double[] ErfImpLd = { 1, 0.105077086072039915406159, 0.00414278428675475620830226, - 0.726338754644523769144108e-4, 0.477818471047398785369849e-6 }; - private static double[] ErfImpMn = { -0.196457797609229579459841e-4, 0.157243887666800692441195e-5, - 0.543902511192700878690335e-7, 0.317472492369117710852685e-9 }; - private static double[] ErfImpMd = { 1, 0.052803989240957632204885, 0.000926876069151753290378112, - 0.541011723226630257077328e-5, 0.535093845803642394908747e-15 }; - private static double[] ErfImpNn = { -0.789224703978722689089794e-5, 0.622088451660986955124162e-6, - 0.145728445676882396797184e-7, 0.603715505542715364529243e-10 }; - private static double[] ErfImpNd = { 1, 0.0375328846356293715248719, 0.000467919535974625308126054, - 0.193847039275845656900547e-5 }; - - private static double[] ErvInvImpAn = { -0.000508781949658280665617, -0.00836874819741736770379, - 0.0334806625409744615033, -0.0126926147662974029034, -0.0365637971411762664006, 0.0219878681111168899165, - 0.00822687874676915743155, -0.00538772965071242932965 }; - private static double[] ErvInvImpAd = { 1, -0.970005043303290640362, -1.56574558234175846809, - 1.56221558398423026363, 0.662328840472002992063, -0.71228902341542847553, -0.0527396382340099713954, - 0.0795283687341571680018, -0.00233393759374190016776, 0.000886216390456424707504 }; - private static double[] ErvInvImpBn = { -0.202433508355938759655, 0.105264680699391713268, 8.37050328343119927838, - 17.6447298408374015486, -18.8510648058714251895, -44.6382324441786960818, 17.445385985570866523, - 21.1294655448340526258, -3.67192254707729348546 }; - private static double[] ErvInvImpBd = { 1, 6.24264124854247537712, 3.9713437953343869095, -28.6608180499800029974, - -20.1432634680485188801, 48.5609213108739935468, 10.8268667355460159008, -22.6436933413139721736, - 1.72114765761200282724 }; - private static double[] ErvInvImpCn = { -0.131102781679951906451, -0.163794047193317060787, 0.117030156341995252019, - 0.387079738972604337464, 0.337785538912035898924, 0.142869534408157156766, 0.0290157910005329060432, - 0.00214558995388805277169, -0.679465575181126350155e-6, 0.285225331782217055858e-7, - -0.681149956853776992068e-9 }; - private static double[] ErvInvImpCd = { 1, 3.46625407242567245975, 5.38168345707006855425, 4.77846592945843778382, - 2.59301921623620271374, 0.848854343457902036425, 0.152264338295331783612, 0.01105924229346489121 }; - private static double[] ErvInvImpDn = { -0.0350353787183177984712, -0.00222426529213447927281, - 0.0185573306514231072324, 0.00950804701325919603619, 0.00187123492819559223345, 0.000157544617424960554631, - 0.460469890584317994083e-5, -0.230404776911882601748e-9, 0.266339227425782031962e-11 }; - private static double[] ErvInvImpDd = { 1, 1.3653349817554063097, 0.762059164553623404043, 0.220091105764131249824, - 0.0341589143670947727934, 0.00263861676657015992959, 0.764675292302794483503e-4 }; - private static double[] ErvInvImpEn = { -0.0167431005076633737133, -0.00112951438745580278863, - 0.00105628862152492910091, 0.000209386317487588078668, 0.149624783758342370182e-4, - 0.449696789927706453732e-6, 0.462596163522878599135e-8, -0.281128735628831791805e-13, - 0.99055709973310326855e-16 }; - private static double[] ErvInvImpEd = { 1, 0.591429344886417493481, 0.138151865749083321638, - 0.0160746087093676504695, 0.000964011807005165528527, 0.275335474764726041141e-4, - 0.282243172016108031869e-6 }; - private static double[] ErvInvImpFn = { -0.0024978212791898131227, -0.779190719229053954292e-5, - 0.254723037413027451751e-4, 0.162397777342510920873e-5, 0.396341011304801168516e-7, - 0.411632831190944208473e-9, 0.145596286718675035587e-11, -0.116765012397184275695e-17 }; - private static double[] ErvInvImpFd = { 1, 0.207123112214422517181, 0.0169410838120975906478, - 0.000690538265622684595676, 0.145007359818232637924e-4, 0.144437756628144157666e-6, - 0.509761276599778486139e-9 }; - private static double[] ErvInvImpGn = { -0.000539042911019078575891, -0.28398759004727721098e-6, - 0.899465114892291446442e-6, 0.229345859265920864296e-7, 0.225561444863500149219e-9, - 0.947846627503022684216e-12, 0.135880130108924861008e-14, -0.348890393399948882918e-21 }; - private static double[] ErvInvImpGd = { 1, 0.0845746234001899436914, 0.00282092984726264681981, - 0.468292921940894236786e-4, 0.399968812193862100054e-6, 0.161809290887904476097e-8, - 0.231558608310259605225e-11 }; - - public static double Erfc(double x) { - if (x == 0) { - return 1; - } - - if (Double.isInfinite(x) && x > 0) { - return 0; - } + public static BigDecimal Erf(BigDecimal x) { + BigDecimal one = BigDecimal.ONE; + BigDecimal two = new BigDecimal("2"); + BigDecimal a1 = new BigDecimal("0.254829592"); + BigDecimal a2 = new BigDecimal("-0.284496736"); + BigDecimal a3 = new BigDecimal("1.421413741"); + BigDecimal a4 = new BigDecimal("-1.453152027"); + BigDecimal a5 = new BigDecimal("1.061405429"); + BigDecimal p = new BigDecimal("0.3275911"); - if (Double.isInfinite(x) && x < 0) { - return 2; - } + BigDecimal sign = x.compareTo(BigDecimal.ZERO) < 0 ? one.negate() : one; + x = x.abs(); - if (Double.isNaN(x)) { - return Double.NaN; - } + BigDecimal t = one.divide(one.add(p.multiply(x)), MathContext.DECIMAL128); + BigDecimal y = one.subtract(((((a5.multiply(t).add(a4.multiply(t))).multiply(t)).add(a3.multiply(t))).multiply(t)).add(a2.multiply(t))).multiply(t)).add(a1.multiply(t)).multiply(MathEx.Expi(-x.multiply(x))); - return ErfImp(x, true); + return sign.multiply(y); } - static double ErfImp(double z, boolean invert) { - if (z < 0) { - if (!invert) { - return -ErfImp(-z, false); - } - - if (z < -0.5) { - return 2 - ErfImp(-z, true); - } - - return 1 + ErfImp(-z, false); - } - - double result; - - // Big bunch of selection statements now to pick which - // implementation to use, try to put most likely options - // first: - if (z < 0.5) { - // We're going to calculate erf: - if (z < 1e-10) { - result = (z * 1.125) + (z * 0.003379167095512573896158903121545171688); - } else { - // Worst case absolute error found: 6.688618532e-21 - result = (z * 1.125) + (z * Evaluate.Polynomial(z, ErfImpAn) / Evaluate.Polynomial(z, ErfImpAd)); - } - } else if ((z < 110) || ((z < 110) && invert)) { - // We'll be calculating erfc: - invert = !invert; - double r, b; - if (z < 0.75) { - // Worst case absolute error found: 5.582813374e-21 - r = Evaluate.Polynomial(z - 0.5, ErfImpBn) / Evaluate.Polynomial(z - 0.5, ErfImpBd); - b = 0.3440242112F; - } else if (z < 1.25) { - // Worst case absolute error found: 4.01854729e-21 - r = Evaluate.Polynomial(z - 0.75, ErfImpCn) / Evaluate.Polynomial(z - 0.75, ErfImpCd); - b = 0.419990927F; - } else if (z < 2.25) { - // Worst case absolute error found: 2.866005373e-21 - r = Evaluate.Polynomial(z - 1.25, ErfImpDn) / Evaluate.Polynomial(z - 1.25, ErfImpDd); - b = 0.4898625016F; - } else if (z < 3.5) { - // Worst case absolute error found: 1.045355789e-21 - r = Evaluate.Polynomial(z - 2.25, ErfImpEn) / Evaluate.Polynomial(z - 2.25, ErfImpEd); - b = 0.5317370892F; - } else if (z < 5.25) { - // Worst case absolute error found: 8.300028706e-22 - r = Evaluate.Polynomial(z - 3.5, ErfImpFn) / Evaluate.Polynomial(z - 3.5, ErfImpFd); - b = 0.5489973426F; - } else if (z < 8) { - // Worst case absolute error found: 1.700157534e-21 - r = Evaluate.Polynomial(z - 5.25, ErfImpGn) / Evaluate.Polynomial(z - 5.25, ErfImpGd); - b = 0.5571740866F; - } else if (z < 11.5) { - // Worst case absolute error found: 3.002278011e-22 - r = Evaluate.Polynomial(z - 8, ErfImpHn) / Evaluate.Polynomial(z - 8, ErfImpHd); - b = 0.5609807968F; - } else if (z < 17) { - // Worst case absolute error found: 6.741114695e-21 - r = Evaluate.Polynomial(z - 11.5, ErfImpIn) / Evaluate.Polynomial(z - 11.5, ErfImpId); - b = 0.5626493692F; - } else if (z < 24) { - // Worst case absolute error found: 7.802346984e-22 - r = Evaluate.Polynomial(z - 17, ErfImpJn) / Evaluate.Polynomial(z - 17, ErfImpJd); - b = 0.5634598136F; - } else if (z < 38) { - // Worst case absolute error found: 2.414228989e-22 - r = Evaluate.Polynomial(z - 24, ErfImpKn) / Evaluate.Polynomial(z - 24, ErfImpKd); - b = 0.5638477802F; - } else if (z < 60) { - // Worst case absolute error found: 5.896543869e-24 - r = Evaluate.Polynomial(z - 38, ErfImpLn) / Evaluate.Polynomial(z - 38, ErfImpLd); - b = 0.5640528202F; - } else if (z < 85) { - // Worst case absolute error found: 3.080612264e-21 - r = Evaluate.Polynomial(z - 60, ErfImpMn) / Evaluate.Polynomial(z - 60, ErfImpMd); - b = 0.5641309023F; - } else { - // Worst case absolute error found: 8.094633491e-22 - r = Evaluate.Polynomial(z - 85, ErfImpNn) / Evaluate.Polynomial(z - 85, ErfImpNd); - b = 0.5641584396F; - } - - double g = Math.exp(-z * z) / z; - result = (g * b) + (g * r); - } else { - // Any value of z larger than 28 will underflow to zero: - result = 0; - invert = !invert; - } - - if (invert) { - result = 1 - result; - } - - return result; - } - - public static double ErfcInv(double z) { - if (z <= 0.0) { - return Double.POSITIVE_INFINITY; - } - - if (z >= 2.0) { - return Double.NEGATIVE_INFINITY; - } - - double p, q, s; - if (z > 1) { - q = 2 - z; - p = 1 - q; - s = -1; - } else { - p = 1 - z; - q = z; - s = 1; - } - - return ErfInvImpl(p, q, s); + public static BigDecimal Erfc(BigDecimal x) { + return BigDecimal.ONE.subtract(Erf(x)); } - static double ErfInvImpl(double p, double q, double s) { - double result; - - if (p <= 0.5) { - // Evaluate inverse erf using the rational approximation: - // - // x = p(p+10)(Y+R(p)) - // - // Where Y is a constant, and R(p) is optimized for a low - // absolute error compared to |Y|. - // - // double: Max error found: 2.001849e-18 - // long double: Max error found: 1.017064e-20 - // Maximum Deviation Found (actual error term at infinite precision) 8.030e-21 - final float y = 0.0891314744949340820313f; - double g = p * (p + 10); - double r = Evaluate.Polynomial(p, ErvInvImpAn) / Evaluate.Polynomial(p, ErvInvImpAd); - result = (g * y) + (g * r); - } else if (q >= 0.25) { - // Rational approximation for 0.5 > q >= 0.25 - // - // x = sqrt(-2*log(q)) / (Y + R(q)) - // - // Where Y is a constant, and R(q) is optimized for a low - // absolute error compared to Y. - // - // double : Max error found: 7.403372e-17 - // long double : Max error found: 6.084616e-20 - // Maximum Deviation Found (error term) 4.811e-20 - final float y = 2.249481201171875f; - double g = Math.sqrt(-2 * Math.log(q)); - double xs = q - 0.25; - double r = Evaluate.Polynomial(xs, ErvInvImpBn) / Evaluate.Polynomial(xs, ErvInvImpBd); - result = g / (y + r); - } else { - // For q < 0.25 we have a series of rational approximations all - // of the general form: - // - // let: x = sqrt(-log(q)) - // - // Then the result is given by: - // - // x(Y+R(x-B)) - // - // where Y is a constant, B is the lowest value of x for which - // the approximation is valid, and R(x-B) is optimized for a low - // absolute error compared to Y. - // - // Note that almost all code will really go through the first - // or maybe second approximation. After than we're dealing with very - // small input values indeed: 80 and 128 bit long double's go all the - // way down to ~ 1e-5000 so the "tail" is rather long... - double x = Math.sqrt(-Math.log(q)); - if (x < 3) { - // Max error found: 1.089051e-20 - final float y = 0.807220458984375f; - double xs = x - 1.125; - double r = Evaluate.Polynomial(xs, ErvInvImpCn) / Evaluate.Polynomial(xs, ErvInvImpCd); - result = (y * x) + (r * x); - } else if (x < 6) { - // Max error found: 8.389174e-21 - final float y = 0.93995571136474609375f; - double xs = x - 3; - double r = Evaluate.Polynomial(xs, ErvInvImpDn) / Evaluate.Polynomial(xs, ErvInvImpDd); - result = (y * x) + (r * x); - } else if (x < 18) { - // Max error found: 1.481312e-19 - final float y = 0.98362827301025390625f; - double xs = x - 6; - double r = Evaluate.Polynomial(xs, ErvInvImpEn) / Evaluate.Polynomial(xs, ErvInvImpEd); - result = (y * x) + (r * x); - } else if (x < 44) { - // Max error found: 5.697761e-20 - final float y = 0.99714565277099609375f; - double xs = x - 18; - double r = Evaluate.Polynomial(xs, ErvInvImpFn) / Evaluate.Polynomial(xs, ErvInvImpFd); - result = (y * x) + (r * x); - } else { - // Max error found: 1.279746e-20 - final float y = 0.99941349029541015625f; - double xs = x - 44; - double r = Evaluate.Polynomial(xs, ErvInvImpGn) / Evaluate.Polynomial(xs, ErvInvImpGd); - result = (y * x) + (r * x); + public static BigDecimal Expi(BigDecimal x) { + BigDecimal one = BigDecimal.ONE; + BigDecimal zero = BigDecimal.ZERO; + BigDecimal epsilon = new BigDecimal("1e-16"); + + if (x.compareTo(zero) == 0) { + return zero; + } + + if (x.compareTo(zero) > 0) { + BigDecimal sum = one; + BigDecimal term = one; + BigDecimal n = one; + + while (term.abs().compareTo(epsilon) > 0) { + term = term.multiply(x).divide(n, MathContext.DECIMAL128); + sum = sum.add(term); + n = n.add(one); } - } - - return s * result; - } - - public static double ErfInv(double z) { - if (z == 0.0) { - return 0.0; - } - - if (z >= 1.0) { - return Double.POSITIVE_INFINITY; - } - - if (z <= -1.0) { - return Double.NEGATIVE_INFINITY; - } - - double p, q, s; - if (z < 0) { - p = -z; - q = 1 - p; - s = -1; + + return sum; } else { - p = z; - q = 1 - z; - s = 1; - } - - return ErfInvImpl(p, q, s); - } - - public static double Erf(double x) { - if (x == 0) { - return 0; - } - - if (Double.isInfinite(x) && x > 0) { - return 1; - } - - if (Double.isInfinite(x) && x < 0) { - return -1; - } - - if (Double.isNaN(x)) { - return Double.NaN; - } - - return ErfImp(x, false); - } - - public static double ExponentialMinusOne(double power) - { - double x = Math.abs(power); - if (x > 0.1) { - return Math.exp(power) - 1.0; - } - - if (x 0) { + term = term.multiply(x).divide(n, MathContext.DECIMAL128); + sum = sum.add(term); + n = n.add(one); } - - // Series Expansion to x^k / k! - // int k = 0; - // double term = 1.0; - // Function f= (yyy)->{ - // k++; - // term *= power; - // term /= k; - // return term; - // }; - - return Series(power); - } - public static double Series(double power) { - double compensation = 0.0; - double current; - double factor = 1 << 16; - int k = 0; - double term = 1.0; - - k++; - term *= power; - term /= k; - double sum = term; - - do { - k++; - term *= power; - term /= k; - current=term; - // Kahan Summation - // NOTE (ruegg): do NOT optimize. Now, how to tell that the compiler? - // current = f.apply(0.0); - double y = current - compensation; - double t = sum + y; - compensation = t - sum; - compensation -= y; - sum = t; - } while (Math.abs(sum) < Math.abs(factor * current)); - + return sum; } + } } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java deleted file mode 100644 index 534d3d444..000000000 --- a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/QuantileDefinition.java +++ /dev/null @@ -1,13 +0,0 @@ -package toolgood.algorithm.mathNet.Statistics; - -public enum QuantileDefinition { - R1,// = 1,// SAS3 = 1, EmpiricalInvCDF = 1, - R2,// = 2,// SAS5 = 2, EmpiricalInvCDFAverage = 2, - R3,// = 3, //SAS2 = 3, Nearest = 3, - R4,// = 4, //SAS1 = 4, California = 4, - R5,// = 5, //Hydrology = 5, Hazen = 5, - R6,// = 6, //SAS4 = 6, Nist = 6, Weibull = 6, SPSS = 6, - R7 ,//= 7, Excel,// = 7,// Mode = 7, S = 7, - R8,// = 8, //Median = 8, Default = 8, - R9,// = 9, //Normal = 9, -} diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java deleted file mode 100644 index 4cb7a275c..000000000 --- a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/Statistics.java +++ /dev/null @@ -1,55 +0,0 @@ -package toolgood.algorithm.mathNet.Statistics; - -import java.util.ArrayList; -import java.util.List; - -public class Statistics { - public static double QuantileCustom(final List data, final double tau, - final QuantileDefinition definition) throws Exception { - double[] array = new double[data.size()]; - for (int i = 0; i < data.size(); i++) { - array[i]=data.get(i); - } - return ArrayStatistics.QuantileCustomInplace(array, tau, definition); - } - public static double QuantileCustom(final double[] data, final double tau, final QuantileDefinition definition) throws Exception { - return ArrayStatistics.QuantileCustomInplace(data, tau, definition); - } - public static double QuantileRank(final double[] data, final double x) { - List dt= new ArrayList(); - for (int i = 0; i < data.length; i++) { - dt.add(data[i]); - } - return QuantileRank(dt, x); - } - - public static double QuantileRank(final List data, final double x) { - List dt=ShellSort(data); - double[] array = new double[dt.size()]; - for (int i = 0; i < dt.size(); i++) { - array[i]=dt.get(i); - } - return SortedArrayStatistics.QuantileRank(array, x); - } - - private static List ShellSort(List array) { - int len = array.size(); - double temp; - int gap = len / 2; - while (gap > 0) { - for (int i = gap; i < len; i++) { - temp = array.get(i); - int preIndex = i - gap; - while (preIndex >= 0 && array.get(preIndex) > temp) { - array.set(preIndex + gap, array.get(preIndex)); - // array[preIndex + gap] = array[preIndex]; - preIndex -= gap; - } - array.set(preIndex + gap, temp); - // array[preIndex + gap] = temp; - } - gap /= 2; - } - return array; - } -} diff --git a/java/src/main/java/toolgood/algorithm/system/MathEx.java b/java/src/main/java/toolgood/algorithm/system/MathEx.java new file mode 100644 index 000000000..c358d8232 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/system/MathEx.java @@ -0,0 +1,438 @@ +package toolgood.algorithm.mathNet; + +import java.math.BigDecimal; +import java.math.MathContext; +import java.math.RoundingMode; + +public class MathEx { + public static final BigDecimal E = new BigDecimal("2.7182818284590452353602874713526624977572470936999595749"); + + public static final BigDecimal Epsilon = new BigDecimal("0.0000000000000000001"); + + public static final BigDecimal One = new BigDecimal("1.0"); + + public static final BigDecimal PI = new BigDecimal("3.14159265358979323846264338327950288419716939937510"); + + public static final BigDecimal Zero = new BigDecimal("0.0"); + + private static final BigDecimal EInverted = new BigDecimal("0.3678794411714423215955237701614608674458111310317678"); + + private static final BigDecimal Half = new BigDecimal("0.5"); + + private static final BigDecimal Log10Inv = new BigDecimal("0.434294481903251827651128918916605082294397005803666566114"); + + private static final int MaximumIterations = 100; + + private static final BigDecimal HalfPi = new BigDecimal("1.570796326794896619231321691639751442098584699687552910487"); + + private static final BigDecimal QuarterPi = new BigDecimal("0.785398163397448309615660845819875721049292349843776455243"); + + private static final BigDecimal TwoPi = new BigDecimal("6.28318530717958647692528676655900576839433879875021"); + + public static BigDecimal Acos(BigDecimal x) { + if (x.compareTo(Zero) == 0) { + return HalfPi; + } + if (x.compareTo(One) == 0) { + return Zero; + } + + if (x.compareTo(Zero) < 0) { + return PI.subtract(Acos(x.negate())); + } + + return HalfPi.subtract(Asin(x)); + } + + public static BigDecimal Acosh(BigDecimal x) { + if (x.compareTo(One) < 0) { + throw new IllegalArgumentException("x must be >= 1"); + } + return Log(x.add(Sqrt(x.multiply(x).subtract(One)))); + } + + public static BigDecimal Asin(BigDecimal x) { + if (x.compareTo(One) > 0 || x.compareTo(One.negate()) < 0) { + throw new IllegalArgumentException("x must be in [-1,1]"); + } + + if (x.compareTo(Zero) == 0) { + return Zero; + } + if (x.compareTo(One) == 0) { + return HalfPi; + } + + if (x.compareTo(Zero) < 0) { + return Asin(x.negate()).negate(); + } + + BigDecimal newX = One.subtract(x.multiply(x).multiply(new BigDecimal("2"))); + + if (x.abs().compareTo(newX.abs()) > 0) { + BigDecimal t = Asin(newX); + return Half.multiply(HalfPi.subtract(t)); + } + + BigDecimal y = Zero; + BigDecimal result = x; + BigDecimal cachedResult; + int i = 1; + y = y.add(result); + BigDecimal xx = x.multiply(x); + do { + cachedResult = result; + result = result.multiply(xx).multiply(One.subtract(Half.divide(new BigDecimal(i), MathContext.DECIMAL128))); + y = y.add(result.divide(new BigDecimal(2 * i + 1), MathContext.DECIMAL128)); + i++; + } while (cachedResult.compareTo(result) != 0); + + return y; + } + + public static BigDecimal Asinh(BigDecimal x) { + return Log(x.add(Sqrt(x.multiply(x).add(One)))); + } + + public static BigDecimal Atan(BigDecimal x) { + if (x.compareTo(Zero) == 0) { + return Zero; + } + if (x.compareTo(One) == 0) { + return QuarterPi; + } + return Asin(x.divide(Sqrt(One.add(x.multiply(x))), MathContext.DECIMAL128)); + } + + public static BigDecimal Atan2(BigDecimal y, BigDecimal x) { + if (x.compareTo(Zero) > 0) { + return Atan(y.divide(x, MathContext.DECIMAL128)); + } + + if (x.compareTo(Zero) < 0 && y.compareTo(Zero) >= 0) { + return Atan(y.divide(x, MathContext.DECIMAL128)).add(PI); + } + + if (x.compareTo(Zero) < 0 && y.compareTo(Zero) < 0) { + return Atan(y.divide(x, MathContext.DECIMAL128)).subtract(PI); + } + + if (x.compareTo(Zero) == 0 && y.compareTo(Zero) > 0) { + return HalfPi; + } + if (x.compareTo(Zero) == 0 && y.compareTo(Zero) < 0) { + return HalfPi.negate(); + } + + throw new IllegalArgumentException("invalid atan2 arguments"); + } + + public static BigDecimal Atanh(BigDecimal x) { + if (x.abs().compareTo(One) >= 0) { + throw new IllegalArgumentException("x must be |x|<1"); + } + return Log(One.add(x).divide(One.subtract(x), MathContext.DECIMAL128)).multiply(Half); + } + + public static BigDecimal Cos(BigDecimal x) { + BigDecimal xCopy = x; + while (xCopy.compareTo(TwoPi) > 0) { + xCopy = xCopy.subtract(TwoPi); + } + + while (xCopy.compareTo(TwoPi.negate()) < 0) { + xCopy = xCopy.add(TwoPi); + } + + if (xCopy.compareTo(PI) >= 0 && xCopy.compareTo(TwoPi) <= 0) { + return Cos(xCopy.subtract(PI)).negate(); + } + + if (xCopy.compareTo(TwoPi.negate()) >= 0 && xCopy.compareTo(PI.negate()) <= 0) { + return Cos(xCopy.add(PI)).negate(); + } + + BigDecimal xx = xCopy.multiply(xCopy); + + BigDecimal yy = xx.multiply(Half.negate()); + BigDecimal y = One.add(yy); + BigDecimal cachedY = y.subtract(One); + for (int i = 1; cachedY.compareTo(y) != 0 && i < MaximumIterations; i++) { + cachedY = y; + + BigDecimal factor = new BigDecimal(i * (i + i + 3) + 1); + factor = Half.divide(factor, MathContext.DECIMAL128).negate(); + xx = xx.multiply(xCopy).multiply(xCopy).multiply(factor); + y = y.add(xx); + } + + return y; + } + + public static BigDecimal Cosh(BigDecimal x) { + BigDecimal y = Exp(x); + BigDecimal yy = One.divide(y, MathContext.DECIMAL128); + return y.add(yy).multiply(Half); + } + + public static BigDecimal Exp(BigDecimal x) { + int count = 0; + BigDecimal xCopy = x; + while (xCopy.compareTo(One) > 0) { + xCopy = xCopy.subtract(One); + count++; + } + + while (xCopy.compareTo(Zero) < 0) { + xCopy = xCopy.add(One); + count--; + } + + int iteration = 1; + BigDecimal result = One; + BigDecimal factor = One; + BigDecimal cachedResult; + do { + cachedResult = result; + factor = factor.multiply(xCopy.divide(new BigDecimal(iteration++), MathContext.DECIMAL128)); + result = result.add(factor); + } while (cachedResult.compareTo(result) != 0); + + if (count != 0) { + result = result.multiply(PowerN(E, count)); + } + + return result; + } + + public static BigDecimal Log(BigDecimal x) { + if (x.compareTo(Zero) <= 0) { + throw new IllegalArgumentException("x must be greater than zero"); + } + + int count = 0; + BigDecimal xCopy = x; + while (xCopy.compareTo(One) >= 0) { + xCopy = xCopy.multiply(EInverted); + count++; + } + + while (xCopy.compareTo(EInverted) <= 0) { + xCopy = xCopy.multiply(E); + count--; + } + + xCopy = xCopy.subtract(One); + + if (xCopy.compareTo(Zero) == 0) { + return new BigDecimal(count); + } + + BigDecimal result = Zero; + int iteration = 0; + BigDecimal y = One; + BigDecimal cacheResult = result.subtract(One); + while (cacheResult.compareTo(result) != 0 && iteration < MaximumIterations) { + iteration++; + cacheResult = result; + y = y.multiply(xCopy.negate()); + result = result.add(y.divide(new BigDecimal(iteration), MathContext.DECIMAL128)); + } + + return new BigDecimal(count).subtract(result); + } + + public static BigDecimal Log(BigDecimal d, BigDecimal newBase) { + if (d.compareTo(One) == 0) { + return Zero; + } + + if (newBase.compareTo(One) == 0) { + throw new IllegalArgumentException("Logarithm for base 1 is undefined."); + } + if (d.compareTo(Zero) < 0) { + throw new IllegalArgumentException("Logarithm is a complex number for values less than zero!"); + } + if (d.compareTo(Zero) == 0) { + throw new ArithmeticException("Logarithm is defined as negative infinity at zero which the Decimal data type can't represent!"); + } + if (newBase.compareTo(Zero) < 0) { + throw new IllegalArgumentException("Logarithm base would be a complex number for values less than zero!"); + } + if (newBase.compareTo(Zero) == 0) { + throw new ArithmeticException("Logarithm base would be negative infinity at zero which the Decimal data type can't represent!"); + } + + return Log(d).divide(Log(newBase), MathContext.DECIMAL128); + } + + public static BigDecimal Log10(BigDecimal x) { + return Log(x).multiply(Log10Inv); + } + + public static BigDecimal Pow(BigDecimal value, BigDecimal pow) { + if (pow.compareTo(Zero) == 0) { + return One; + } + if (pow.compareTo(One) == 0) { + return value; + } + + if (value.compareTo(One) == 0) { + return One; + } + if (value.compareTo(Zero) == 0 && pow.compareTo(Zero) == 0) { + return One; + } + if (value.compareTo(Zero) == 0 && pow.compareTo(Zero) > 0) { + return Zero; + } + if (value.compareTo(Zero) == 0) { + throw new ArithmeticException("Invalid Operation: zero base and negative power"); + } + + if (pow.compareTo(One.negate()) == 0) { + return One.divide(value, MathContext.DECIMAL128); + } + + boolean isPowerInteger = IsInteger(pow); + if (value.compareTo(Zero) < 0 && !isPowerInteger) { + throw new ArithmeticException("Invalid Operation: negative base and non-integer power"); + } + + if (isPowerInteger && value.compareTo(Zero) > 0) { + int powerInt = pow.intValue(); + return PowerN(value, powerInt); + } + + if (!isPowerInteger || value.compareTo(Zero) >= 0) { + return Exp(pow.multiply(Log(value))); + } + + int powerInt2 = pow.intValue(); + if (powerInt2 % 2 == 0) { + return Exp(pow.multiply(Log(value.negate()))); + } + + return Exp(pow.multiply(Log(value.negate()))).negate(); + } + + public static BigDecimal PowerN(BigDecimal value, int power) { + while (true) { + if (power == 0) { + return One; + } + + if (power < 0) { + value = One.divide(value, MathContext.DECIMAL128); + power = -power; + continue; + } + + int q = power; + BigDecimal prod = One; + BigDecimal current = value; + + while (q > 0) { + if (q % 2 == 1) { + prod = current.multiply(prod); + q--; + } + + current = current.multiply(current); + q /= 2; + } + + return prod; + } + } + + public static BigDecimal Sin(BigDecimal x) { + BigDecimal cos = Cos(x); + BigDecimal moduleOfSin = Sqrt(One.subtract(cos.multiply(cos))); + boolean sineIsPositive = IsSignOfSinusPositive(x); + if (sineIsPositive) { + return moduleOfSin; + } + + return moduleOfSin.negate(); + } + + public static BigDecimal Sinh(BigDecimal x) { + BigDecimal y = Exp(x); + BigDecimal yy = One.divide(y, MathContext.DECIMAL128); + return y.subtract(yy).multiply(Half); + } + + public static BigDecimal Sqrt(BigDecimal x) { + return Sqrt(x, Zero); + } + + public static BigDecimal Sqrt(BigDecimal x, BigDecimal epsilon) { + if (x.compareTo(Zero) < 0) { + throw new ArithmeticException("Cannot calculate square root from a negative number"); + } + + BigDecimal current = BigDecimal.valueOf(Math.sqrt(x.doubleValue())); + BigDecimal previous; + do { + previous = current; + if (previous.compareTo(Zero) == 0) { + return Zero; + } + + current = previous.add(x.divide(previous, MathContext.DECIMAL128)).multiply(Half); + } while (previous.subtract(current).abs().compareTo(epsilon) > 0); + + return current; + } + + public static BigDecimal Tan(BigDecimal x) { + BigDecimal cos = Cos(x); + if (cos.compareTo(Zero) == 0) { + throw new IllegalArgumentException("x"); + } + + return Sin(x).divide(cos, MathContext.DECIMAL128); + } + + public static BigDecimal Tanh(BigDecimal x) { + BigDecimal y = Exp(x); + BigDecimal yy = One.divide(y, MathContext.DECIMAL128); + return y.subtract(yy).divide(y.add(yy), MathContext.DECIMAL128); + } + + private static boolean IsInteger(BigDecimal x) { + long longValue = x.longValue(); + return x.subtract(BigDecimal.valueOf(longValue)).abs().compareTo(Epsilon) <= 0; + } + + private static boolean IsSignOfSinusPositive(BigDecimal x) { + BigDecimal xCopy = x; + while (xCopy.compareTo(TwoPi) >= 0) { + xCopy = xCopy.subtract(TwoPi); + } + + while (xCopy.compareTo(TwoPi.negate()) <= 0) { + xCopy = xCopy.add(TwoPi); + } + + if (xCopy.compareTo(TwoPi.negate()) >= 0 && xCopy.compareTo(PI.negate()) <= 0) { + return true; + } + + if (xCopy.compareTo(PI.negate()) >= 0 && xCopy.compareTo(Zero) <= 0) { + return false; + } + + if (xCopy.compareTo(Zero) >= 0 && xCopy.compareTo(PI) <= 0) { + return true; + } + + if (xCopy.compareTo(PI) >= 0 && xCopy.compareTo(TwoPi) <= 0) { + return false; + } + + throw new IllegalArgumentException("x"); + } +} From 27f6cd3188a44346901cd8189c9a792a07792d3d Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 15:01:59 +0800 Subject: [PATCH 39/98] fix --- .../algorithm/mathNet/SpecialFunctions.java | 4 +- .../mathNet/Statistics/ArrayStatistics.java | 143 +++++------------- .../Statistics/SortedArrayStatistics.java | 33 ++-- 3 files changed, 60 insertions(+), 120 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java b/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java index e6ee222f1..b7134fe1b 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java @@ -53,7 +53,7 @@ public static BigDecimal BetaRegularized(BigDecimal a, BigDecimal b, BigDecimal BigDecimal bt = (x.compareTo(zero) == 0 || x.compareTo(one) == 0) ? zero : MathEx.Exp(GammaLn(a.add(b)).subtract(GammaLn(a)).subtract(GammaLn(b)) - .add(a.multiply(MathEx.Log(x))).add(b.multiply(MathEx.Log(one.subtract(x)))))); + .add(a.multiply(MathEx.Log(x))).add(b.multiply(MathEx.Log(one.subtract(x))))); boolean symmetryTransformation = x.compareTo(a.add(one).divide(a.add(b).add(new BigDecimal("2")), MathContext.DECIMAL128)) >= 0; @@ -451,7 +451,7 @@ public static BigDecimal Erf(BigDecimal x) { x = x.abs(); BigDecimal t = one.divide(one.add(p.multiply(x)), MathContext.DECIMAL128); - BigDecimal y = one.subtract(((((a5.multiply(t).add(a4.multiply(t))).multiply(t)).add(a3.multiply(t))).multiply(t)).add(a2.multiply(t))).multiply(t)).add(a1.multiply(t)).multiply(MathEx.Expi(-x.multiply(x))); + BigDecimal y = one.subtract(((((a5.multiply(t).add(a4.multiply(t))).multiply(t)).add(a3.multiply(t))).multiply(t)).add(a2.multiply(t)).multiply(t)).add(a1.multiply(t)).multiply(MathEx.Expi(-x.multiply(x))); return sign.multiply(y); } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java index d79b156cb..a81fb68b9 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/ArrayStatistics.java @@ -1,30 +1,34 @@ package toolgood.algorithm.mathNet.Statistics; +import java.math.BigDecimal; +import java.math.MathContext; + public class ArrayStatistics { - public static double Minimum(double[] data) - { + private static final BigDecimal MIN_VALUE = new BigDecimal("-79228162514264337593543950335"); + + public static BigDecimal Minimum(BigDecimal[] data) { if (data.length == 0) { - return Double.NaN; + return MIN_VALUE; } - double min = Double.POSITIVE_INFINITY; + BigDecimal min = MIN_VALUE.negate(); for (int i = 0; i < data.length; i++) { - if (data[i] < min || Double.isNaN(data[i])) { + if (data[i].compareTo(min) < 0) { min = data[i]; } } return min; } - public static double Maximum(double[] data) - { + + public static BigDecimal Maximum(BigDecimal[] data) { if (data.length == 0) { - return Double.NaN; + return MIN_VALUE; } - double max = Double.NEGATIVE_INFINITY; + BigDecimal max = MIN_VALUE; for (int i = 0; i < data.length; i++) { - if (data[i] > max || Double.isNaN(data[i])) { + if (data[i].compareTo(max) > 0) { max = data[i]; } } @@ -32,95 +36,27 @@ public static double Maximum(double[] data) return max; } - - public static double QuantileCustomInplace(double[] data, double tau, QuantileDefinition definition) - throws Exception - { - if (tau < 0d || tau > 1d || data.length == 0) { - return Double.NaN; + public static BigDecimal QuantileCustomInplace(BigDecimal[] data, BigDecimal tau) { + if (tau.compareTo(BigDecimal.ZERO) < 0 || tau.compareTo(BigDecimal.ONE) > 0 || data.length == 0) { + return MIN_VALUE; } - if (tau == 0d || data.length == 1) { + if (tau.compareTo(BigDecimal.ZERO) == 0 || data.length == 1) { return Minimum(data); } - if (tau == 1d) { + if (tau.compareTo(BigDecimal.ONE) == 0) { return Maximum(data); } - switch (definition) { - case R1: { - double h = data.length * tau + 0.5d; - return SelectInplace(data, (int)Math.ceil(h - 0.5d) - 1); - } - - case R2: { - double h = data.length * tau + 0.5d; - return (SelectInplace(data, (int)Math.ceil(h - 0.5d) - 1) + SelectInplace(data, (int)(h + 0.5d) - 1)) * 0.5d; - } - - case R3: { - double h = data.length * tau; - return SelectInplace(data, (int)Math.round(h) - 1); - } - - case R4: { - double h = data.length * tau; - int hf = (int)h; - double lower = SelectInplace(data, hf - 1); - double upper = SelectInplace(data, hf); - return lower + (h - hf) * (upper - lower); - } - - case R5: { - double h = data.length * tau + 0.5d; - int hf = (int)h; - double lower = SelectInplace(data, hf - 1); - double upper = SelectInplace(data, hf); - return lower + (h - hf) * (upper - lower); - } - - case R6: { - double h = (data.length + 1) * tau; - int hf = (int)h; - double lower = SelectInplace(data, hf - 1); - double upper = SelectInplace(data, hf); - return lower + (h - hf) * (upper - lower); - } - - case R7: { - double h = (data.length - 1) * tau + 1d; - int hf = (int)h; - double lower = SelectInplace(data, hf - 1); - double upper = SelectInplace(data, hf); - return lower + (h - hf) * (upper - lower); - } - - case R8: { - double h = (data.length + 1 / 3d) * tau + 1 / 3d; - int hf = (int)h; - double lower = SelectInplace(data, hf - 1); - double upper = SelectInplace(data, hf); - return lower + (h - hf) * (upper - lower); - } - - case R9: { - double h = (data.length + 0.25d) * tau + 0.375d; - int hf = (int)h; - double lower = SelectInplace(data, hf - 1); - double upper = SelectInplace(data, hf); - return lower + (h - hf) * (upper - lower); - } - - default: - throw new Exception(); - } + BigDecimal h = new BigDecimal(data.length - 1).multiply(tau).add(BigDecimal.ONE); + int hf = (int) h.doubleValue(); + BigDecimal lower = SelectInplace(data.clone(), hf - 1); + BigDecimal upper = SelectInplace(data.clone(), hf); + return lower.add(h.subtract(new BigDecimal(hf)).multiply(upper.subtract(lower))); } - static double SelectInplace(double[] workingData, int rank) - { - // Numerical Recipes: select - // http://en.wikipedia.org/wiki/Selection_algorithm + private static BigDecimal SelectInplace(BigDecimal[] workingData, int rank) { if (rank <= 0) { return Minimum(workingData); } @@ -129,14 +65,14 @@ static double SelectInplace(double[] workingData, int rank) return Maximum(workingData); } - double[] a = workingData; + BigDecimal[] a = workingData; int low = 0; int high = a.length - 1; while (true) { if (high <= low + 1) { - if (high == low + 1 && a[high] < a[low]) { - double tmp = a[low]; + if (high == low + 1 && a[high].compareTo(a[low]) < 0) { + BigDecimal tmp = a[low]; a[low] = a[high]; a[high] = tmp; } @@ -146,48 +82,48 @@ static double SelectInplace(double[] workingData, int rank) int middle = (low + high) >> 1; - double tmp1 = a[middle]; + BigDecimal tmp1 = a[middle]; a[middle] = a[low + 1]; a[low + 1] = tmp1; - if (a[low] > a[high]) { - double tmp = a[low]; + if (a[low].compareTo(a[high]) > 0) { + BigDecimal tmp = a[low]; a[low] = a[high]; a[high] = tmp; } - if (a[low + 1] > a[high]) { - double tmp = a[low + 1]; + if (a[low + 1].compareTo(a[high]) > 0) { + BigDecimal tmp = a[low + 1]; a[low + 1] = a[high]; a[high] = tmp; } - if (a[low] > a[low + 1]) { - double tmp = a[low]; + if (a[low].compareTo(a[low + 1]) > 0) { + BigDecimal tmp = a[low]; a[low] = a[low + 1]; a[low + 1] = tmp; } int begin = low + 1; int end = high; - double pivot = a[begin]; + BigDecimal pivot = a[begin]; while (true) { do { begin++; } - while (a[begin] < pivot); + while (a[begin].compareTo(pivot) < 0); do { end--; } - while (a[end] > pivot); + while (a[end].compareTo(pivot) > 0); if (end < begin) { break; } - double tmp = a[begin]; + BigDecimal tmp = a[begin]; a[begin] = a[end]; a[end] = tmp; } @@ -204,5 +140,4 @@ static double SelectInplace(double[] workingData, int rank) } } } - } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java index 8d41aa27a..0d6c2af6f 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Statistics/SortedArrayStatistics.java @@ -1,46 +1,51 @@ package toolgood.algorithm.mathNet.Statistics; +import java.math.BigDecimal; +import java.math.MathContext; + public class SortedArrayStatistics { - public static double QuantileRank(double[] data, double x) { - if (x < data[0]) { - return 0.0; + public static BigDecimal QuantileRank(BigDecimal[] data, BigDecimal x) { + if (x.compareTo(data[0]) < 0) { + return BigDecimal.ZERO; } - if (x >= data[data.length - 1]) { - return 1.0; + if (x.compareTo(data[data.length - 1]) >= 0) { + return BigDecimal.ONE; } int right = binarySearch(data, x); if (right >= 0) { int left = right; - while (left > 0 && data[left - 1] == data[left]) { + while (left > 0 && data[left - 1].compareTo(data[left]) == 0) { left--; } - while (right < data.length - 1 && data[right + 1] == data[right]) { + while (right < data.length - 1 && data[right + 1].compareTo(data[right]) == 0) { right++; } - return left / (double) (data.length - 1); + return new BigDecimal(left).divide(new BigDecimal(data.length - 1), MathContext.DECIMAL128); } else { right = ~right; int left = right - 1; - double a = left / (double) (data.length - 1); - double b = right / (double) (data.length - 1); - return ((data[right] - x) * a + (x - data[left]) * b) / (data[right] - data[left]); + BigDecimal a = new BigDecimal(left).divide(new BigDecimal(data.length - 1), MathContext.DECIMAL128); + BigDecimal b = new BigDecimal(right).divide(new BigDecimal(data.length - 1), MathContext.DECIMAL128); + return data[right].subtract(x).multiply(a).add(x.subtract(data[left]).multiply(b)) + .divide(data[right].subtract(data[left]), MathContext.DECIMAL128); } } - private static int binarySearch(double[] array, double key) { + + private static int binarySearch(BigDecimal[] array, BigDecimal key) { int low = 0; int high = array.length - 1; while (low <= high) { int mid = (low + high) >>> 1; - if (key < array[mid]) { + if (key.compareTo(array[mid]) < 0) { high = mid - 1; - } else if (key > array[mid]) { + } else if (key.compareTo(array[mid]) > 0) { low = mid + 1; } else { return mid; From 8598fd385a0237b09da3efc0a1a2ed5c40b5fbad Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 15:11:33 +0800 Subject: [PATCH 40/98] fix --- .../algorithm/litJson/IJsonWrapper.java | 25 -- .../toolgood/algorithm/litJson/JsonData.java | 132 +++++---- .../algorithm/litJson/JsonException.java | 22 +- .../algorithm/litJson/JsonMapper.java | 33 +-- .../algorithm/litJson/JsonReader.java | 243 +++++++--------- .../toolgood/algorithm/litJson/JsonToken.java | 27 +- .../toolgood/algorithm/litJson/JsonType.java | 23 +- .../toolgood/algorithm/litJson/Lexer.java | 263 ++++++++---------- .../algorithm/litJson/ParserToken.java | 52 ++-- 9 files changed, 354 insertions(+), 466 deletions(-) delete mode 100644 java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java diff --git a/java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java b/java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java deleted file mode 100644 index 0b239a5da..000000000 --- a/java/src/main/java/toolgood/algorithm/litJson/IJsonWrapper.java +++ /dev/null @@ -1,25 +0,0 @@ -package toolgood.algorithm.litJson; - -import java.math.BigDecimal; - -public interface IJsonWrapper { - - boolean IsArray(); - boolean IsBoolean(); - boolean IsDouble(); - boolean IsObject(); - boolean IsString(); - boolean IsNull(); - - void SetBoolean(boolean val); - void SetDouble(BigDecimal val); - void SetJsonType(JsonType type); - void SetString(String val); - void SetNull(); - - void Add(IJsonWrapper val); - - void Set(String key, IJsonWrapper val); - - -} diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java index 50a6df619..5b3cef43c 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java @@ -1,24 +1,22 @@ package toolgood.algorithm.litJson; -import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collection; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; -public class JsonData implements IJsonWrapper { - - public ArrayList inst_array; +public class JsonData implements Iterable { + private List inst_array; private boolean inst_boolean; - private BigDecimal inst_double; - public Map inst_object; + private double inst_double; + private Map inst_object; private String inst_string; private JsonType type; - // private IList> object_list; public int Count() { - return EnsureCollection().size(); + if (type == JsonType.Array) return inst_array.size(); + return inst_object.size(); } public boolean IsArray() { @@ -45,16 +43,15 @@ public boolean IsNull() { return type == JsonType.Null; } - public JsonData GetChild(final String prop_name) { - EnsureDictionary(); - if (inst_object.containsKey(prop_name)) { - return inst_object.get(prop_name); + public JsonData get(String prop_name) { + if (inst_object != null) { + JsonData data = inst_object.get(prop_name); + return data; } return null; } - public JsonData GetChild(final int index) { - EnsureCollection(); + public JsonData get(int index) { if (type == JsonType.Array) return inst_array.get(index); return null; @@ -63,17 +60,17 @@ public JsonData GetChild(final int index) { public JsonData() { } - public void SetBoolean(final boolean val) { + public void SetBoolean(boolean val) { type = JsonType.Boolean; inst_boolean = val; } - public void SetDouble(final BigDecimal val) { + public void SetDouble(double val) { type = JsonType.Double; inst_double = val; } - public void SetString(final String val) { + public void SetString(String val) { type = JsonType.String; inst_string = val; } @@ -82,43 +79,29 @@ public void SetNull() { type = JsonType.Null; } - public void Add(final IJsonWrapper val) { - EnsureList().add((JsonData) val); + public void Add(JsonData val) { + EnsureList().add(val); } - public void Set(final String key, final IJsonWrapper val) { - final JsonData data = (JsonData) val; - EnsureDictionary().put(key, data); - // KeyValuePair entry = new KeyValuePair((string)key, data); - // object_list.Add(entry); - } - - @SuppressWarnings("rawtypes") - private Collection EnsureCollection() { - if (type == JsonType.Array) - return (Collection) inst_array; - return (Collection) inst_object; + public void Set(String key, JsonData val) { + EnsureDictionary().put(key, val); } private Map EnsureDictionary() { - if (type == JsonType.Object) - return inst_object; + if (type == JsonType.Object) return inst_object; type = JsonType.Object; - inst_object = new HashMap(); - // object_list = new List>(); + inst_object = new HashMap<>(); return inst_object; } private List EnsureList() { - if (type == JsonType.Array) - return inst_array; + if (type == JsonType.Array) return inst_array; type = JsonType.Array; - inst_array = new ArrayList(); + inst_array = new ArrayList<>(); return inst_array; } - public void SetJsonType(final JsonType type) { + public void SetJsonType(JsonType type) { if (this.type == type) return; @@ -127,11 +110,11 @@ public void SetJsonType(final JsonType type) { break; case Object: - inst_object = new HashMap(); + inst_object = new HashMap<>(); break; case Array: - inst_array = new ArrayList(); + inst_array = new ArrayList<>(); break; case String: @@ -139,24 +122,26 @@ public void SetJsonType(final JsonType type) { break; case Double: - inst_double = new BigDecimal(0); + inst_double = 0; break; case Boolean: inst_boolean = false; break; - default: } + this.type = type; } - + public Iterator iterator() { + return EnsureList().iterator(); + } public boolean BooleanValue() { return inst_boolean; } - public BigDecimal NumberValue() { + public double NumberValue() { return inst_double; } @@ -164,4 +149,57 @@ public String StringValue() { return inst_string; } + @Override + public String toString() { + StringBuilder stringBuilder = new StringBuilder(); + ToString(stringBuilder); + return stringBuilder.toString(); + } + + private void ToString(StringBuilder stringBuilder) { + if (IsNull()) { + stringBuilder.append("null"); + } else if (IsBoolean()) { + stringBuilder.append(inst_boolean ? "true" : "false"); + } else if (IsArray()) { + stringBuilder.append("["); + for (int i = 0; i < inst_array.size(); i++) { + if (i > 0) { + stringBuilder.append(","); + } + inst_array.get(i).ToString(stringBuilder); + } + stringBuilder.append("]"); + } else if (IsObject()) { + stringBuilder.append("{"); + boolean first = true; + for (Map.Entry kv : inst_object.entrySet()) { + if (!first) { + stringBuilder.append(","); + } + first = false; + stringBuilder.append("\""); + stringBuilder.append(kv.getKey().replace("\"", "\\\"") + .replace("\n", "\\n").replace("\r", "\\r") + .replace("\t", "\\t").replace("\0", "\\0") + .replace("\u000b", "\\v") + .replace("\u0007", "\\a") + .replace("\b", "\\b").replace("\f", "\\f")); + stringBuilder.append("\":"); + kv.getValue().ToString(stringBuilder); + } + stringBuilder.append("}"); + } else if (IsString()) { + stringBuilder.append("\""); + stringBuilder.append(inst_string.replace("\"", "\\\"") + .replace("\n", "\\n").replace("\r", "\\r") + .replace("\t", "\\t").replace("\0", "\\0") + .replace("\u000b", "\\v") + .replace("\u0007", "\\a") + .replace("\b", "\\b").replace("\f", "\\f")); + stringBuilder.append("\""); + } else if (IsDouble()) { + stringBuilder.append(inst_double); + } + } } diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonException.java b/java/src/main/java/toolgood/algorithm/litJson/JsonException.java index 9a7afc6d7..72b4a534c 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonException.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonException.java @@ -1,23 +1,15 @@ package toolgood.algorithm.litJson; -public class JsonException extends Exception { - /** - * - */ - private static final long serialVersionUID = 1L; - - public JsonException(ParserToken token, Exception inner_exception) { - super(); - // base(String.Format("Invalid token '{0}' in input string", token), - // inner_exception) +public class JsonException extends RuntimeException { + public JsonException(String message) { + super(message); } - public JsonException(int c) { - super(); - // base(String.Format("Invalid character '{0}' in input string", (char)c)) + public JsonException(ParserToken token, Exception innerException) { + super("Invalid token '" + token + "' in input string", innerException); } - public JsonException(String message) { - // : base(message) + public JsonException(int c) { + super("Invalid character '" + (char) c + "' in input string"); } } diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java b/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java index 8877a39f1..4a39da7dc 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java @@ -1,10 +1,7 @@ package toolgood.algorithm.litJson; -import java.math.BigDecimal; - public class JsonMapper { - private static JsonData ReadValue(JsonReader reader) throws JsonException - { + private static JsonData ReadValue(JsonReader reader) throws Exception { reader.Read(); if (reader.Token() == JsonToken.ArrayEnd) return null; @@ -12,33 +9,36 @@ private static JsonData ReadValue(JsonReader reader) throws JsonException JsonData instance = new JsonData(); if (reader.Token() == JsonToken.String) { - instance.SetString((String)reader.Value()); + instance.SetString((String) reader.Value()); return instance; } if (reader.Token() == JsonToken.Double) { - instance.SetDouble((BigDecimal)reader.Value()); + Object value = reader.Value(); + if (value instanceof Number) { + instance.SetDouble(((Number) value).doubleValue()); + } else { + instance.SetDouble(0); + } return instance; } if (reader.Token() == JsonToken.Boolean) { - instance.SetBoolean((boolean)reader.Value()); + instance.SetBoolean((Boolean) reader.Value()); return instance; } - if (reader.Token() == JsonToken.Null) - { + if (reader.Token() == JsonToken.Null) { instance.SetNull(); return instance; } - if (reader.Token() == JsonToken.ArrayStart) { instance.SetJsonType(JsonType.Array); while (true) { JsonData item = ReadValue(reader); if (item == null && reader.Token() == JsonToken.ArrayEnd) break; - instance.Add((IJsonWrapper)item); + instance.Add(item); } } else if (reader.Token() == JsonToken.ObjectStart) { instance.SetJsonType(JsonType.Object); @@ -48,19 +48,16 @@ private static JsonData ReadValue(JsonReader reader) throws JsonException if (reader.Token() == JsonToken.ObjectEnd) break; - String property = (String)reader.Value(); - instance.Set(property,(IJsonWrapper) ReadValue(reader)); + String property = (String) reader.Value(); + instance.Set(property, ReadValue(reader)); } - } return instance; } - - public static JsonData ToObject(String json) throws JsonException - { + public static JsonData ToObject(String json) throws Exception { JsonReader reader = new JsonReader(json); - return (JsonData)ReadValue(reader) ; + return ReadValue(reader); } } diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonReader.java b/java/src/main/java/toolgood/algorithm/litJson/JsonReader.java index 6f437a52b..f02df1f52 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonReader.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonReader.java @@ -1,25 +1,24 @@ package toolgood.algorithm.litJson; import java.io.StringReader; -import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; import java.util.Stack; public class JsonReader { - private static Map> parse_table; + private static final Map> parse_table = new HashMap<>(); - private Stack automaton_stack; + private final Stack automaton_stack = new Stack<>(); private int current_input; private int current_symbol; - private boolean end_of_json; - private boolean end_of_input; - private Lexer lexer; - private boolean parser_in_string; - private boolean parser_return; - private boolean read_started; - private Object token_value; - private JsonToken token; + private boolean end_of_json = false; + private boolean end_of_input = false; + private final Lexer lexer; + private boolean parser_in_string = false; + private boolean parser_return = false; + private boolean read_started = false; + private Object token_value = null; + private JsonToken token = JsonToken.None; public JsonToken Token() { return token; @@ -29,10 +28,6 @@ public Object Value() { return token_value; } - static { - parse_table = PopulateParseTable(); - } - public JsonReader(String json_text) { StringReader reader = new StringReader(json_text); @@ -40,205 +35,153 @@ public JsonReader(String json_text) { parser_return = false; read_started = false; - automaton_stack = new Stack(); - automaton_stack.push((int) ParserToken.End.value); - automaton_stack.push((int) ParserToken.Text.value); + automaton_stack.clear(); + automaton_stack.push((int) ParserToken.End); + automaton_stack.push((int) ParserToken.Text); lexer = new Lexer(reader); end_of_input = false; end_of_json = false; - } - private static Map> PopulateParseTable() { - // See section A.2. of the manual for details - Map> parse_table = new HashMap>(); + static { + PopulateParseTable(); + } + private static void PopulateParseTable() { TableAddRow(parse_table, ParserToken.Array); - TableAddCol(parse_table, ParserToken.Array, '[', new int[] { '[', (int) ParserToken.ArrayPrime.value }); + TableAddCol(parse_table, ParserToken.Array, '[', '[', (int) ParserToken.ArrayPrime); TableAddRow(parse_table, ParserToken.ArrayPrime); - TableAddCol(parse_table, ParserToken.ArrayPrime, '"', - new int[] { (int) ParserToken.Value.value, (int) ParserToken.ValueRest.value, ']' }); - TableAddCol(parse_table, ParserToken.ArrayPrime, '[', - new int[] { (int) ParserToken.Value.value, (int) ParserToken.ValueRest.value, ']' }); - TableAddCol(parse_table, ParserToken.ArrayPrime, ']', new int[] { ']' }); - TableAddCol(parse_table, ParserToken.ArrayPrime, '{', - new int[] { (int) ParserToken.Value.value, (int) ParserToken.ValueRest.value, ']' }); - TableAddCol(parse_table, ParserToken.ArrayPrime, (int) ParserToken.Number.value, - new int[] { (int) ParserToken.Value.value, (int) ParserToken.ValueRest.value, ']' }); - TableAddCol(parse_table, ParserToken.ArrayPrime, (int) ParserToken.True.value, - new int[] { (int) ParserToken.Value.value, (int) ParserToken.ValueRest.value, ']' }); - TableAddCol(parse_table, ParserToken.ArrayPrime, (int) ParserToken.False.value, - new int[] { (int) ParserToken.Value.value, (int) ParserToken.ValueRest.value, ']' }); - TableAddCol(parse_table, ParserToken.ArrayPrime, (int) ParserToken.Null.value, - new int[] { (int) ParserToken.Value.value, (int) ParserToken.ValueRest.value, ']' }); + TableAddCol(parse_table, ParserToken.ArrayPrime, '"', (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, '[', (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, ']', ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, '{', (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, (int) ParserToken.Number, (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, (int) ParserToken.True, (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, (int) ParserToken.False, (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, (int) ParserToken.Null, (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); TableAddRow(parse_table, ParserToken.Object); - TableAddCol(parse_table, ParserToken.Object, '{', new int[] { '{', (int) ParserToken.ObjectPrime.value }); + TableAddCol(parse_table, ParserToken.Object, '{', '{', (int) ParserToken.ObjectPrime); TableAddRow(parse_table, ParserToken.ObjectPrime); - TableAddCol(parse_table, ParserToken.ObjectPrime, '"', - new int[] { (int) ParserToken.Pair.value, (int) ParserToken.PairRest.value, '}' }); - TableAddCol(parse_table, ParserToken.ObjectPrime, '}', new int[] { '}' }); + TableAddCol(parse_table, ParserToken.ObjectPrime, '"', (int) ParserToken.Pair, (int) ParserToken.PairRest, '}'); + TableAddCol(parse_table, ParserToken.ObjectPrime, '}', '}'); TableAddRow(parse_table, ParserToken.Pair); - TableAddCol(parse_table, ParserToken.Pair, '"', - new int[] { (int) ParserToken.String.value, ':', (int) ParserToken.Value.value }); + TableAddCol(parse_table, ParserToken.Pair, '"', (int) ParserToken.String, ':', (int) ParserToken.Value); TableAddRow(parse_table, ParserToken.PairRest); - TableAddCol(parse_table, ParserToken.PairRest, ',', - new int[] { ',', (int) ParserToken.Pair.value, (int) ParserToken.PairRest.value }); - TableAddCol(parse_table, ParserToken.PairRest, '}', new int[] { (int) ParserToken.Epsilon.value }); + TableAddCol(parse_table, ParserToken.PairRest, ',', ',', (int) ParserToken.Pair, (int) ParserToken.PairRest); + TableAddCol(parse_table, ParserToken.PairRest, '}', (int) ParserToken.Epsilon); TableAddRow(parse_table, ParserToken.String); - TableAddCol(parse_table, ParserToken.String, '"', new int[] { '"', (int) ParserToken.CharSeq.value, '"' }); + TableAddCol(parse_table, ParserToken.String, '"', '"', (int) ParserToken.CharSeq, '"'); TableAddRow(parse_table, ParserToken.Text); - TableAddCol(parse_table, ParserToken.Text, '[', new int[] { (int) ParserToken.Array.value }); - TableAddCol(parse_table, ParserToken.Text, '{', new int[] { (int) ParserToken.Object.value }); + TableAddCol(parse_table, ParserToken.Text, '[', (int) ParserToken.Array); + TableAddCol(parse_table, ParserToken.Text, '{', (int) ParserToken.Object); TableAddRow(parse_table, ParserToken.Value); - TableAddCol(parse_table, ParserToken.Value, '"', new int[] { (int) ParserToken.String.value }); - TableAddCol(parse_table, ParserToken.Value, '[', new int[] { (int) ParserToken.Array.value }); - TableAddCol(parse_table, ParserToken.Value, '{', new int[] { (int) ParserToken.Object.value }); - TableAddCol(parse_table, ParserToken.Value, (int) ParserToken.Number.value, - new int[] { (int) ParserToken.Number.value }); - TableAddCol(parse_table, ParserToken.Value, (int) ParserToken.True.value, - new int[] { (int) ParserToken.True.value }); - TableAddCol(parse_table, ParserToken.Value, (int) ParserToken.False.value, - new int[] { (int) ParserToken.False.value }); - TableAddCol(parse_table, ParserToken.Value, (int) ParserToken.Null.value, - new int[] { (int) ParserToken.Null.value }); + TableAddCol(parse_table, ParserToken.Value, '"', (int) ParserToken.String); + TableAddCol(parse_table, ParserToken.Value, '[', (int) ParserToken.Array); + TableAddCol(parse_table, ParserToken.Value, '{', (int) ParserToken.Object); + TableAddCol(parse_table, ParserToken.Value, (int) ParserToken.Number, (int) ParserToken.Number); + TableAddCol(parse_table, ParserToken.Value, (int) ParserToken.True, (int) ParserToken.True); + TableAddCol(parse_table, ParserToken.Value, (int) ParserToken.False, (int) ParserToken.False); + TableAddCol(parse_table, ParserToken.Value, (int) ParserToken.Null, (int) ParserToken.Null); TableAddRow(parse_table, ParserToken.ValueRest); - TableAddCol(parse_table, ParserToken.ValueRest, ',', - new int[] { ',', (int) ParserToken.Value.value, (int) ParserToken.ValueRest.value }); - TableAddCol(parse_table, ParserToken.ValueRest, ']', new int[] { (int) ParserToken.Epsilon.value }); - - return parse_table; + TableAddCol(parse_table, ParserToken.ValueRest, ',', ',', (int) ParserToken.Value, (int) ParserToken.ValueRest); + TableAddCol(parse_table, ParserToken.ValueRest, ']', (int) ParserToken.Epsilon); } - private static void TableAddCol(Map> parse_table, ParserToken row, int col, - int[] symbols) { - parse_table.get((int) row.value).put(col, symbols); + private static void TableAddCol(Map> parse_table, ParserToken row, int col, int... symbols) { + Map rowMap = parse_table.get((int) row); + if (rowMap == null) { + rowMap = new HashMap<>(); + parse_table.put((int) row, rowMap); + } + rowMap.put(col, symbols); } private static void TableAddRow(Map> parse_table, ParserToken rule) { - parse_table.put((int) rule.value, new HashMap()); + parse_table.put((int) rule, new HashMap<>()); } - private void ProcessNumber(String number) - { + private void ProcessNumber(String number) { + if (number.indexOf('.') >= 0 || number.indexOf('e') >= 0 || number.indexOf('E') >= 0) { + try { + token_value = Double.parseDouble(number); + return; + } catch (NumberFormatException e) { + } + } try { - BigDecimal n_double=new BigDecimal(number); - token_value = n_double; + token_value = Long.parseLong(number); return; - }catch (Exception e){ - + } catch (NumberFormatException e) { + } + try { + token_value = new java.math.BigDecimal(number); + return; + } catch (NumberFormatException e) { } -// Double n_double=Double.valueOf(number); -// if (n_double.isNaN()==false) { -// token_value = n_double.doubleValue(); -// return; -// } - // if (number.indexOf('.') != -1 || number.indexOf('e') != -1 || number.indexOf('E') != -1) { - // Double n_double=Double.valueOf(number); - // if (n_double.isNaN()==false) { - // token_value = n_double.doubleValue(); - // return; - // } - // } - // if (int.TryParse(number, NumberStyles.Integer, CultureInfo.InvariantCulture, out int n_int32)) { - // token_value = (double)n_int32; - // return; - // } - // if (long.TryParse(number, NumberStyles.Integer, CultureInfo.InvariantCulture, out long n_int64)) { - // token_value = (double)n_int64; - // return; - // } - - // Shouldn't happen, but just in case, return something - token_value =new BigDecimal(0); + token_value = 0; } private void ProcessSymbol() { if (current_symbol == '[') { token = JsonToken.ArrayStart; parser_return = true; - } else if (current_symbol == ']') { token = JsonToken.ArrayEnd; parser_return = true; - } else if (current_symbol == '{') { token = JsonToken.ObjectStart; parser_return = true; - } else if (current_symbol == '}') { token = JsonToken.ObjectEnd; parser_return = true; - } else if (current_symbol == '"') { if (parser_in_string) { parser_in_string = false; - parser_return = true; - } else { - if (token == JsonToken.None) - token = JsonToken.String; - + if (token == JsonToken.None) token = JsonToken.String; parser_in_string = true; } - - } else if (current_symbol == (int) ParserToken.CharSeq.value) { + } else if (current_symbol == (int) ParserToken.CharSeq) { token_value = lexer.StringValue(); - - } else if (current_symbol == (int) ParserToken.False.value) { + } else if (current_symbol == (int) ParserToken.False) { token = JsonToken.Boolean; token_value = false; parser_return = true; - - } else if (current_symbol == (int) ParserToken.Null.value) { + } else if (current_symbol == (int) ParserToken.Null) { token = JsonToken.Null; parser_return = true; - - } else if (current_symbol == (int) ParserToken.Number.value) { + } else if (current_symbol == (int) ParserToken.Number) { ProcessNumber(lexer.StringValue()); token = JsonToken.Double; - // if (double.TryParse(lexer.StringValue, NumberStyles.Any, - // CultureInfo.InvariantCulture, out double n_double)) - // { - // token_value = n_double; - // } - // else - // { - // token_value = 0; - // } parser_return = true; - - } else if (current_symbol == (int) ParserToken.Pair.value) { + } else if (current_symbol == (int) ParserToken.Pair) { token = JsonToken.PropertyName; - - } else if (current_symbol == (int) ParserToken.True.value) { + } else if (current_symbol == (int) ParserToken.True) { token = JsonToken.Boolean; token_value = true; parser_return = true; - } } - private boolean ReadToken() throws JsonException { - if (end_of_input) - return false; + private boolean ReadToken() { + if (end_of_input) return false; lexer.NextToken(); if (lexer.EndOfInput()) { Close(); - return false; } @@ -255,15 +198,15 @@ public void Close() { end_of_json = true; } - public boolean Read() throws JsonException { + public boolean Read() { if (end_of_input) return false; if (end_of_json) { end_of_json = false; automaton_stack.clear(); - automaton_stack.push((int) ParserToken.End.value); - automaton_stack.push((int) ParserToken.Text.value); + automaton_stack.push((int) ParserToken.End); + automaton_stack.push((int) ParserToken.Text); } parser_in_string = false; @@ -283,8 +226,7 @@ public boolean Read() throws JsonException { while (true) { if (parser_return) { - if (automaton_stack.peek() == (int) ParserToken.End.value) - end_of_json = true; + if (automaton_stack.peek() == (int) ParserToken.End) end_of_json = true; return true; } @@ -295,13 +237,10 @@ public boolean Read() throws JsonException { if (current_symbol == current_input) { if (!ReadToken()) { - if (automaton_stack.peek() != (int) ParserToken.End.value) { + if (automaton_stack.peek() != (int) ParserToken.End) throw new JsonException("Input doesn't evaluate to proper JSON text"); - } - - if (parser_return) - return true; + if (parser_return) return true; return false; } @@ -310,18 +249,22 @@ public boolean Read() throws JsonException { } try { - entry_symbols = parse_table.get(current_symbol).get(current_input); - + Map row = parse_table.get(current_symbol); + if (row == null) { + throw new JsonException((ParserToken) current_input, new Exception("Parse error")); + } + entry_symbols = row.get(current_input); + if (entry_symbols == null) { + throw new JsonException((ParserToken) current_input, new Exception("Parse error")); + } } catch (Exception e) { - throw new JsonException(ParserToken.values()[current_input], e); + throw new JsonException((ParserToken) current_input, e); } - if (entry_symbols[0] == (int) ParserToken.Epsilon.value) - continue; + if (entry_symbols[0] == (int) ParserToken.Epsilon) continue; for (int i = entry_symbols.length - 1; i >= 0; i--) automaton_stack.push(entry_symbols[i]); } } - } diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java b/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java index b3f821713..1b0c884b8 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java @@ -1,26 +1,19 @@ package toolgood.algorithm.litJson; public enum JsonToken { - None(1), + None, - ObjectStart(2), - PropertyName(3), - ObjectEnd(4), + ObjectStart, + PropertyName, + ObjectEnd, - ArrayStart(5), - ArrayEnd(6), + ArrayStart, + ArrayEnd, - Double(7), + Double, - String(8), + String, - Boolean(9), - Null(10); - - - public int value; - // 构造方�? - private JsonToken( int index) { - this.value = index; - } + Boolean, + Null } diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonType.java b/java/src/main/java/toolgood/algorithm/litJson/JsonType.java index 352212c7e..29864eda1 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonType.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonType.java @@ -1,21 +1,12 @@ package toolgood.algorithm.litJson; -/** - * JsonType - */ public enum JsonType { + None, - None(1), - Object(2), - Array(3), - String(4), - Double(5), - Boolean(6), - Null(7); - - public int value; - // 构造方�? - private JsonType( int index) { - this.value = index; - } + Object, + Array, + String, + Double, + Boolean, + Null } diff --git a/java/src/main/java/toolgood/algorithm/litJson/Lexer.java b/java/src/main/java/toolgood/algorithm/litJson/Lexer.java index 816297e88..01d1fa82b 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/Lexer.java +++ b/java/src/main/java/toolgood/algorithm/litJson/Lexer.java @@ -1,31 +1,28 @@ package toolgood.algorithm.litJson; -import java.io.IOException; +import java.io.Reader; import java.io.StringReader; -import java.util.ArrayList; -import java.util.List; -import java.util.function.Function; public class Lexer { - // private delegate boolean - - // StateHandler(FsmContext ctx); - - private static int[] fsm_return_table; - private static List> fsm_handler_table; - - private boolean allow_comments; - private boolean allow_single_quoted_strings; - private boolean end_of_input; - private FsmContext fsm_context; - private int input_buffer; - private int input_char; - private StringReader reader; - private int state; - private StringBuilder string_buffer; - private String string_value; - private int token; - private int unichar; + private interface StateHandler { + boolean run(FsmContext ctx); + } + + private static final int[] fsm_return_table; + private static final StateHandler[] fsm_handler_table; + + private boolean allow_comments = true; + private boolean allow_single_quoted_strings = true; + private boolean end_of_input = false; + private final FsmContext fsm_context = new FsmContext(); + private int input_buffer = 0; + private int input_char = 0; + private final Reader reader; + private int state = 1; + private final StringBuilder string_buffer = new StringBuilder(128); + private String string_value = ""; + private int token = 0; + private int unichar = 0; public boolean EndOfInput() { return end_of_input; @@ -39,22 +36,76 @@ public String StringValue() { return string_value; } - static { - PopulateFsmTables(); + public Lexer(Reader reader) { + this.reader = reader; } - public Lexer(StringReader _reader) { - allow_comments = true; - allow_single_quoted_strings = true; - - input_buffer = 0; - string_buffer = new StringBuilder(128); - state = 1; - end_of_input = false; - reader = _reader; + public Lexer(String input) { + this.reader = new StringReader(input); + } - fsm_context = new FsmContext(); - fsm_context.L = this; + static { + fsm_handler_table = new StateHandler[]{ + Lexer::State1, + Lexer::State2, + Lexer::State3, + Lexer::State4, + Lexer::State5, + Lexer::State6, + Lexer::State7, + Lexer::State8, + Lexer::State9, + Lexer::State10, + Lexer::State11, + Lexer::State12, + Lexer::State13, + Lexer::State14, + Lexer::State15, + Lexer::State16, + Lexer::State17, + Lexer::State18, + Lexer::State19, + Lexer::State20, + Lexer::State21, + Lexer::State22, + Lexer::State23, + Lexer::State24, + Lexer::State25, + Lexer::State26, + Lexer::State27, + Lexer::State28 + }; + + fsm_return_table = new int[]{ + (int) ParserToken.Char, + 0, + (int) ParserToken.Number, + (int) ParserToken.Number, + 0, + (int) ParserToken.Number, + 0, + (int) ParserToken.Number, + 0, + 0, + (int) ParserToken.True, + 0, + 0, + 0, + (int) ParserToken.False, + 0, + 0, + (int) ParserToken.Null, + (int) ParserToken.CharSeq, + (int) ParserToken.Char, + 0, + 0, + (int) ParserToken.CharSeq, + (int) ParserToken.Char, + 0, + 0, + 0, + 0 + }; } private static int HexValue(int digit) { @@ -62,106 +113,33 @@ private static int HexValue(int digit) { case 'a': case 'A': return 10; - case 'b': case 'B': return 11; - case 'c': case 'C': return 12; - case 'd': case 'D': return 13; - case 'e': case 'E': return 14; - case 'f': case 'F': return 15; - default: return digit - '0'; } } - private static void PopulateFsmTables() { - // See section A.1. of the manual for details of the finite state machine. - fsm_handler_table = new ArrayList>();// - Function state1 = ctx -> State1(ctx); - fsm_handler_table.add(state1); - Function state2 = ctx -> State2(ctx); - fsm_handler_table.add(state2); - Function state3 = ctx -> State3(ctx); - fsm_handler_table.add(state3); - Function state4 = ctx -> State4(ctx); - fsm_handler_table.add(state4); - Function state5 = ctx -> State5(ctx); - fsm_handler_table.add(state5); - Function state6 = ctx -> State6(ctx); - fsm_handler_table.add(state6); - Function state7 = ctx -> State7(ctx); - fsm_handler_table.add(state7); - Function state8 = ctx -> State8(ctx); - fsm_handler_table.add(state8); - Function state9 = ctx -> State9(ctx); - fsm_handler_table.add(state9); - Function state10 = ctx -> State10(ctx); - fsm_handler_table.add(state10); - Function state11 = ctx -> State11(ctx); - fsm_handler_table.add(state11); - Function state12 = ctx -> State12(ctx); - fsm_handler_table.add(state12); - Function state13 = ctx -> State13(ctx); - fsm_handler_table.add(state13); - Function state14 = ctx -> State14(ctx); - fsm_handler_table.add(state14); - Function state15 = ctx -> State15(ctx); - fsm_handler_table.add(state15); - Function state16 = ctx -> State16(ctx); - fsm_handler_table.add(state16); - Function state17 = ctx -> State17(ctx); - fsm_handler_table.add(state17); - Function state18 = ctx -> State18(ctx); - fsm_handler_table.add(state18); - Function state19 = ctx -> State19(ctx); - fsm_handler_table.add(state19); - Function state20 = ctx -> State20(ctx); - fsm_handler_table.add(state20); - Function state21 = ctx -> State21(ctx); - fsm_handler_table.add(state21); - Function state22 = ctx -> State22(ctx); - fsm_handler_table.add(state22); - Function state23 = ctx -> State23(ctx); - fsm_handler_table.add(state23); - Function state24 = ctx -> State24(ctx); - fsm_handler_table.add(state24); - Function state25 = ctx -> State25(ctx); - fsm_handler_table.add(state25); - Function state26 = ctx -> State26(ctx); - fsm_handler_table.add(state26); - Function state27 = ctx -> State27(ctx); - fsm_handler_table.add(state27); - Function state28 = ctx -> State28(ctx); - fsm_handler_table.add(state28); - - fsm_return_table = new int[] { (int) ParserToken.Char.value, 0, (int) ParserToken.Number.value, - (int) ParserToken.Number.value, 0, (int) ParserToken.Number.value, 0, (int) ParserToken.Number.value, 0, - 0, (int) ParserToken.True.value, 0, 0, 0, (int) ParserToken.False.value, 0, 0, - (int) ParserToken.Null.value, (int) ParserToken.CharSeq.value, (int) ParserToken.Char.value, 0, 0, - (int) ParserToken.CharSeq.value, (int) ParserToken.Char.value, 0, 0, 0, 0 }; - } - private static char ProcessEscChar(int esc_char) { switch (esc_char) { case '"': case '\'': case '\\': case '/': - return (char) esc_char;// Convert.ToChar(esc_char); + return (char) esc_char; case 'n': return '\n'; case 't': @@ -179,7 +157,7 @@ private static char ProcessEscChar(int esc_char) { private static boolean State1(FsmContext ctx) { while (ctx.L.GetChar()) { - if (ctx.L.input_char == ' ' || ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') + if (ctx.L.input_char == ' ' || (ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r')) continue; if (ctx.L.input_char >= '1' && ctx.L.input_char <= '9') { @@ -227,8 +205,7 @@ private static boolean State1(FsmContext ctx) { return true; case '\'': - if (!ctx.L.allow_single_quoted_strings) - return false; + if (!ctx.L.allow_single_quoted_strings) return false; ctx.L.input_char = '"'; ctx.NextState = 23; @@ -236,8 +213,7 @@ private static boolean State1(FsmContext ctx) { return true; case '/': - if (!ctx.L.allow_comments) - return false; + if (!ctx.L.allow_comments) return false; ctx.NextState = 25; return true; @@ -277,7 +253,8 @@ private static boolean State3(FsmContext ctx) { continue; } - if (ctx.L.input_char == ' ' || ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { + if (ctx.L.input_char == ' ' || + (ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r')) { ctx.Return = true; ctx.NextState = 1; return true; @@ -313,7 +290,7 @@ private static boolean State3(FsmContext ctx) { private static boolean State4(FsmContext ctx) { ctx.L.GetChar(); - if (ctx.L.input_char == ' ' || ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { + if (ctx.L.input_char == ' ' || (ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r')) { ctx.Return = true; ctx.NextState = 1; return true; @@ -363,7 +340,7 @@ private static boolean State6(FsmContext ctx) { continue; } - if (ctx.L.input_char == ' ' || ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { + if (ctx.L.input_char == ' ' || (ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r')) { ctx.Return = true; ctx.NextState = 1; return true; @@ -420,7 +397,7 @@ private static boolean State8(FsmContext ctx) { continue; } - if (ctx.L.input_char == ' ' || ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r') { + if (ctx.L.input_char == ' ' || (ctx.L.input_char >= '\t' && ctx.L.input_char <= '\r')) { ctx.Return = true; ctx.NextState = 1; return true; @@ -646,17 +623,16 @@ private static boolean State22(FsmContext ctx) { ctx.L.unichar = 0; while (ctx.L.GetChar()) { - - if (ctx.L.input_char >= '0' && ctx.L.input_char <= '9' || ctx.L.input_char >= 'A' && ctx.L.input_char <= 'F' - || ctx.L.input_char >= 'a' && ctx.L.input_char <= 'f') { - + if ((ctx.L.input_char >= '0' && ctx.L.input_char <= '9') || + (ctx.L.input_char >= 'A' && ctx.L.input_char <= 'F') || + (ctx.L.input_char >= 'a' && ctx.L.input_char <= 'f')) { ctx.L.unichar += HexValue(ctx.L.input_char) * mult; counter++; mult /= 16; if (counter == 4) { - ctx.L.string_buffer.append((char) (ctx.L.unichar)); + ctx.L.string_buffer.append((char) ctx.L.unichar); ctx.NextState = ctx.StateStack; return true; } @@ -749,8 +725,7 @@ private static boolean State27(FsmContext ctx) { private static boolean State28(FsmContext ctx) { while (ctx.L.GetChar()) { - if (ctx.L.input_char == '*') - continue; + if (ctx.L.input_char == '*') continue; if (ctx.L.input_char == '/') { ctx.NextState = 1; @@ -765,16 +740,13 @@ private static boolean State28(FsmContext ctx) { } private boolean GetChar() { - try { - if ((input_char = NextChar()) != -1) - return true; - } catch (Exception e) { - } + if ((input_char = NextChar()) != -1) return true; + end_of_input = true; return false; } - private int NextChar() throws IOException { + private int NextChar() { if (input_buffer != 0) { int tmp = input_buffer; input_buffer = 0; @@ -782,30 +754,31 @@ private int NextChar() throws IOException { return tmp; } - return reader.read(); + try { + return reader.read(); + } catch (java.io.IOException e) { + return -1; + } } - public boolean NextToken() throws JsonException { - Function handler; + public boolean NextToken() { + StateHandler handler; fsm_context.Return = false; + fsm_context.L = this; while (true) { - handler =(Function) fsm_handler_table.get(state - 1);// [state - 1]; - - if (!handler.apply(fsm_context)) - throw new JsonException(input_char); + handler = fsm_handler_table[state - 1]; - if (end_of_input) - return false; + if (!handler.run(fsm_context)) throw new JsonException(input_char); + + if (end_of_input) return false; if (fsm_context.Return) { string_value = string_buffer.toString(); - string_buffer.delete(0, string_buffer.length()); - // string_buffer.Remove(0, string_buffer.length()); + string_buffer.setLength(0); token = fsm_return_table[state - 1]; - if (token == (int) ParserToken.Char.value) - token = input_char; + if (token == (int) ParserToken.Char) token = input_char; state = fsm_context.NextState; diff --git a/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java b/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java index 81a1f773b..4ce3e1dda 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java +++ b/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java @@ -1,37 +1,23 @@ package toolgood.algorithm.litJson; public enum ParserToken { - None(0x10000), - Number(0x10001), - True(0x10002), - False(0x10003), - Null(0x10004), - CharSeq(0x10005), - // Single char - Char(0x10006), - - // Parser Rules (see section A.2.1 of the manual) - Text(0x10007), - Object(0x10008), - ObjectPrime(0x10009), - Pair(0x10010), - PairRest(0x10011), - Array(0x10012), - ArrayPrime(0x10013), - Value(0x10014), - ValueRest(0x10015), - String(0x10016), - - // End of input - End(0x10017), - - // The empty rule - Epsilon(0x10018); - - - public int value; - // 构造方�? - private ParserToken( int index) { - this.value = index; - } + None, + Number, + True, + False, + Null, + CharSeq, + Char, + Text, + Object, + ObjectPrime, + Pair, + PairRest, + Array, + ArrayPrime, + Value, + ValueRest, + String, + End, + Epsilon } From 07af44e48432efc9754ecd1e1365c6cc37420705 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 15:16:29 +0800 Subject: [PATCH 41/98] fix --- .../main/java/toolgood/algorithm/enums/OperandType.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/enums/OperandType.java b/java/src/main/java/toolgood/algorithm/enums/OperandType.java index 181452052..2713e58a7 100644 --- a/java/src/main/java/toolgood/algorithm/enums/OperandType.java +++ b/java/src/main/java/toolgood/algorithm/enums/OperandType.java @@ -1,5 +1,5 @@ /** - * 操作数类�? + * 操作数类�? */ package toolgood.algorithm.enums; @@ -27,7 +27,7 @@ public enum OperandType { /** * 数组 */ - ARRARY, + ARRAY, /** * 数字 @@ -40,7 +40,7 @@ public enum OperandType { BOOLEAN, /** - * 字符�? + * 字符�? */ TEXT, @@ -52,7 +52,7 @@ public enum OperandType { /** * JSON格式 */ - ARRARYJSON; + ARRAYJSON; private final byte value; From 971ccfd5abb9b77316c6330673c9f03103388daf Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 15:58:42 +0800 Subject: [PATCH 42/98] fix --- .../unitConversion/AreaConverter.java | 32 ++++++++--------- .../unitConversion/DistanceConverter.java | 27 +++++++-------- .../unitConversion/MassConverter.java | 29 ++++++---------- .../unitConversion/UnitFactorSynonyms.java | 24 ++++++------- .../unitConversion/VolumeConverter.java | 34 ++++++++----------- 5 files changed, 64 insertions(+), 82 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java index be3ef886a..537400eda 100644 --- a/java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java +++ b/java/src/main/java/toolgood/algorithm/unitConversion/AreaConverter.java @@ -1,37 +1,33 @@ package toolgood.algorithm.unitConversion; - import java.math.BigDecimal; public class AreaConverter extends BaseUnitConverter { - static UnitFactors units; + private static final UnitFactors units = new UnitFactors(); static { - units = new UnitFactors(); - units.put(new UnitFactorSynonyms(new String[]{"m²", "m2", "square metre","square meter", "centiare", "平方�?, "平方公尺"}), new BigDecimal(1)); - units.put(new UnitFactorSynonyms(new String[]{"km²", "km2", "square kilometre","square kilometer", "平方千米"}), new BigDecimal("0.000001")); - units.put(new UnitFactorSynonyms(new String[]{"dm²", "dm2", "square centimetre", "square centimeter","平方分米"}), new BigDecimal("100")); - units.put(new UnitFactorSynonyms(new String[]{"cm²", "cm2", "square centimetre","square centimeter", "平方厘米"}), new BigDecimal("10000")); - units.put(new UnitFactorSynonyms(new String[]{"mm²", "mm2", "square millimetre", "square millimeter", "平方毫米"}), new BigDecimal("1000000")); - units.put(new UnitFactorSynonyms(new String[]{"ft²", "ft2", "square foot", "square feet", "sq ft", "平方英尺"}), BigDecimal.valueOf(1d / 0.3048d / 0.3048d)); - units.put(new UnitFactorSynonyms(new String[]{"yd²", "yd2", "sq yd", "square yard", "平方�?}), BigDecimal.valueOf(1d / 0.9144d / 0.9144d)); - units.put(new UnitFactorSynonyms(new String[]{"a", "are"}), new BigDecimal("0.01")); - units.put(new UnitFactorSynonyms(new String[]{"ha", "hectare", "公顷"}), new BigDecimal("0.0001")); - units.put(new UnitFactorSynonyms(new String[]{"in²", "in2", "sq in", "square inch", "平方英寸"}), BigDecimal.valueOf(1d / 0.00064516d)); - units.put(new UnitFactorSynonyms(new String[]{"mi²", "mi2", "sq mi", "square mile", "平方英里"}), BigDecimal.valueOf(1d / 2589988.110336d)); - units.put(new UnitFactorSynonyms(new String[]{"�?}), BigDecimal.valueOf(1d / 666.667d)); + units.put(new UnitFactorSynonyms("m²", "m2", "square metre", "square meter", "centiare", "平方米", "平方公尺"), new BigDecimal("1")); + units.put(new UnitFactorSynonyms("km²", "km2", "square kilometre", "square kilometer", "平方千米"), new BigDecimal("0.000001")); + units.put(new UnitFactorSynonyms("dm²", "dm2", "square decimetre", "square decimeter", "平方分米"), new BigDecimal("100")); + units.put(new UnitFactorSynonyms("cm²", "cm2", "square centimetre", "square centimeter", "平方厘米"), new BigDecimal("10000")); + units.put(new UnitFactorSynonyms("mm²", "mm2", "square millimetre", "square millimeter", "平方毫米"), new BigDecimal("1000000")); + units.put(new UnitFactorSynonyms("ft²", "ft2", "square foot", "square feet", "sq ft", "平方英尺"), new BigDecimal("1").divide(new BigDecimal("0.3048").multiply(new BigDecimal("0.3048")))); + units.put(new UnitFactorSynonyms("yd²", "yd2", "sq yd", "square yard", "平方码"), new BigDecimal("1").divide(new BigDecimal("0.9144").multiply(new BigDecimal("0.9144")))); + units.put(new UnitFactorSynonyms("a", "are"), new BigDecimal("0.01")); + units.put(new UnitFactorSynonyms("ha", "hectare", "公顷"), new BigDecimal("0.0001")); + units.put(new UnitFactorSynonyms("in²", "in2", "sq in", "square inch", "平方英寸"), new BigDecimal("1").divide(new BigDecimal("0.00064516"))); + units.put(new UnitFactorSynonyms("mi²", "mi2", "sq mi", "square mile", "平方英里"), new BigDecimal("1").divide(new BigDecimal("2589988.110336"))); + units.put(new UnitFactorSynonyms("亩"), new BigDecimal("1").divide(new BigDecimal("666.667"))); } - public AreaConverter(String leftUnit, String rightUnit) { Instantiate(units, leftUnit, rightUnit); } - public static Boolean Exists(String leftSynonym, String rightSynonym) { + public static boolean Exists(String leftSynonym, String rightSynonym) { if (units.FindUnit(leftSynonym) != null) { return units.FindUnit(rightSynonym) != null; } return false; } - } diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java index 546c2fbfd..cb68bea1d 100644 --- a/java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java +++ b/java/src/main/java/toolgood/algorithm/unitConversion/DistanceConverter.java @@ -1,34 +1,31 @@ package toolgood.algorithm.unitConversion; - import java.math.BigDecimal; public class DistanceConverter extends BaseUnitConverter { - static UnitFactors units; + private static final UnitFactors units = new UnitFactors(); static { - units = new UnitFactors(); - units.put(new UnitFactorSynonyms(new String[]{"m", "metre", "meter", "�?}), new BigDecimal("1")); - units.put(new UnitFactorSynonyms(new String[]{"km", "kilometre", "kilometer", "千米"}), new BigDecimal("0.001")); - units.put(new UnitFactorSynonyms(new String[]{"dm", "decimetre", "decimeter", "分米"}), new BigDecimal("10")); - units.put(new UnitFactorSynonyms(new String[]{"cm", "centimetre", "centimeter", "厘米"}), new BigDecimal("100")); - units.put(new UnitFactorSynonyms(new String[]{"mm", "millimetre", "millimeter", "毫米"}), new BigDecimal("1000")); - units.put(new UnitFactorSynonyms(new String[]{"ft", "foot", "feet", "英尺"}), BigDecimal.valueOf(1250d / 381)); - units.put(new UnitFactorSynonyms(new String[]{"yd", "yard", "�?}), BigDecimal.valueOf(1250d / 1143)); - units.put(new UnitFactorSynonyms(new String[]{"mile", "英里"}), BigDecimal.valueOf(125d / 201168)); - units.put(new UnitFactorSynonyms(new String[]{"in", "inch", "英寸"}), BigDecimal.valueOf(5000d / 127)); - units.put(new UnitFactorSynonyms(new String[]{"au"}), BigDecimal.valueOf(1d / 149600000000d)); + units.put(new UnitFactorSynonyms("m", "metre", "\u7c73"), new BigDecimal("1")); + units.put(new UnitFactorSynonyms("km", "kilometre", "\u5343\u7c73"), new BigDecimal("0.001")); + units.put(new UnitFactorSynonyms("dm", "decimetre", "\u5206\u7c73"), new BigDecimal("10")); + units.put(new UnitFactorSynonyms("cm", "centimetre", "\u5398\u7c73"), new BigDecimal("100")); + units.put(new UnitFactorSynonyms("mm", "millimetre", "\u6beb\u7c73"), new BigDecimal("1000")); + units.put(new UnitFactorSynonyms("ft", "foot", "feet", "\u82f1\u5c3a"), new BigDecimal("1250").divide(new BigDecimal("381"))); + units.put(new UnitFactorSynonyms("yd", "yard", "\u7801"), new BigDecimal("1250").divide(new BigDecimal("1143"))); + units.put(new UnitFactorSynonyms("mile", "\u82f1\u91cc"), new BigDecimal("125").divide(new BigDecimal("201168"))); + units.put(new UnitFactorSynonyms("in", "inch", "\u82f1\u5bf8"), new BigDecimal("5000").divide(new BigDecimal("127"))); + units.put(new UnitFactorSynonyms("au"), new BigDecimal("1").divide(new BigDecimal("149600000000"))); } public DistanceConverter(String leftUnit, String rightUnit) { Instantiate(units, leftUnit, rightUnit); } - public static Boolean Exists(String leftSynonym, String rightSynonym) { + public static boolean Exists(String leftSynonym, String rightSynonym) { if (units.FindUnit(leftSynonym) != null) { return units.FindUnit(rightSynonym) != null; } return false; } - } diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java index 85e9d9a24..a60a1b47c 100644 --- a/java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java +++ b/java/src/main/java/toolgood/algorithm/unitConversion/MassConverter.java @@ -1,37 +1,30 @@ package toolgood.algorithm.unitConversion; - - import java.math.BigDecimal; public class MassConverter extends BaseUnitConverter { - - static UnitFactors units; + private static final UnitFactors units = new UnitFactors(); static { - units = new UnitFactors(); - units.put(new UnitFactorSynonyms(new String[]{"kg", "kilogram", "千克"}), new BigDecimal("1")); - units.put(new UnitFactorSynonyms(new String[]{"gram", "g", "�?}), new BigDecimal("1000")); - units.put(new UnitFactorSynonyms(new String[]{"ton", "t", "�?}), BigDecimal.valueOf(1 / 1000d)); - units.put(new UnitFactorSynonyms(new String[]{"lb", "lbs", "pound", "pounds", "英镑"}), BigDecimal.valueOf(100000000d / 45359237)); - units.put(new UnitFactorSynonyms(new String[]{"st", "stone", "�?}), BigDecimal.valueOf(50000000d / 317514659)); - units.put(new UnitFactorSynonyms(new String[]{"oz", "ounce", "盎司"}), BigDecimal.valueOf(1600000000d / 45359237)); - units.put(new UnitFactorSynonyms(new String[]{"quintal", "英担"}), new BigDecimal("0.01")); - units.put(new UnitFactorSynonyms(new String[]{"short ton", "net ton", "us ton", "短吨", "美吨"}), new BigDecimal("0.00110231")); - units.put(new UnitFactorSynonyms(new String[]{"long ton", "weight ton", "gross ton", "imperial ton", "长吨", "英吨"}), new BigDecimal("0.000984207")); - - + units.put(new UnitFactorSynonyms("kg", "kilogram", "\u5343\u514b"), new BigDecimal("1")); + units.put(new UnitFactorSynonyms("gram", "g", "\u514b"), new BigDecimal("1000")); + units.put(new UnitFactorSynonyms("ton", "t", "\u5428"), new BigDecimal("1").divide(new BigDecimal("1000"))); + units.put(new UnitFactorSynonyms("lb", "lbs", "pound", "pounds", "\u82f1\u92fc"), new BigDecimal("100000000").divide(new BigDecimal("45359237"))); + units.put(new UnitFactorSynonyms("st", "stone", "\u77f3"), new BigDecimal("50000000").divide(new BigDecimal("317514659"))); + units.put(new UnitFactorSynonyms("oz", "ounce", "\u5965\u53f8"), new BigDecimal("1600000000").divide(new BigDecimal("45359237"))); + units.put(new UnitFactorSynonyms("quintal", "\u82f1\u62c5"), new BigDecimal("0.01")); + units.put(new UnitFactorSynonyms("short ton", "net ton", "us ton", "\u77ed\u5428", "\u7f8e\u5428"), new BigDecimal("0.00110231")); + units.put(new UnitFactorSynonyms("long ton", "weight ton", "gross ton", "imperial ton", "\u9577\u5428", "\u82f1\u5428"), new BigDecimal("0.000984207")); } public MassConverter(String leftUnit, String rightUnit) { Instantiate(units, leftUnit, rightUnit); } - public static Boolean Exists(String leftSynonym, String rightSynonym) { + public static boolean Exists(String leftSynonym, String rightSynonym) { if (units.FindUnit(leftSynonym) != null) { return units.FindUnit(rightSynonym) != null; } return false; } - } diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java b/java/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java index 34bdd1207..c0771345e 100644 --- a/java/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java +++ b/java/src/main/java/toolgood/algorithm/unitConversion/UnitFactorSynonyms.java @@ -1,25 +1,22 @@ package toolgood.algorithm.unitConversion; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class UnitFactorSynonyms { - public List Synonyms = new ArrayList<>(); + private final List synonyms = new ArrayList<>(); public UnitFactorSynonyms() { } - public UnitFactorSynonyms(String item) { - Synonyms.add(item); - } - - public UnitFactorSynonyms(String[] items) { - Collections.addAll(Synonyms, items); + public UnitFactorSynonyms(String... items) { + for (String item : items) { + synonyms.add(item); + } } public boolean Contains(UnitFactorSynonyms synonyms) { - for (String syn : synonyms.Synonyms) { + for (String syn : synonyms.synonyms) { if (this.Contains(syn)) { return true; } @@ -27,8 +24,8 @@ public boolean Contains(UnitFactorSynonyms synonyms) { return false; } - private boolean Contains(String synonym) { - for (String str : Synonyms) { + public boolean Contains(String synonym) { + for (String str : synonyms) { if (str.equalsIgnoreCase(synonym)) { return true; } @@ -36,5 +33,8 @@ private boolean Contains(String synonym) { return false; } - + @Override + public String toString() { + return String.join(", ", synonyms); + } } diff --git a/java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java b/java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java index a292450c0..178b2daec 100644 --- a/java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java +++ b/java/src/main/java/toolgood/algorithm/unitConversion/VolumeConverter.java @@ -1,38 +1,34 @@ package toolgood.algorithm.unitConversion; - import java.math.BigDecimal; public class VolumeConverter extends BaseUnitConverter { - static UnitFactors units; + private static final UnitFactors units = new UnitFactors(); static { - units = new UnitFactors(); - units.put(new UnitFactorSynonyms(new String[]{"l", "L", "lt", "ltr", "liter", "litre", "dm³", "dm3", "cubic decimetre","cubic decimeter", "�?, "立方分米"}), new BigDecimal("1")); - units.put(new UnitFactorSynonyms(new String[]{"m³", "m3", "cubic metre","cubic meter", "立方�?}), new BigDecimal("0.001")); - units.put(new UnitFactorSynonyms(new String[]{"km³", "km3", "cubic kilometre","cubic kilometer", "立方千米"}), new BigDecimal("0.000000000001")); - units.put(new UnitFactorSynonyms(new String[]{"cm³", "cm3", "cubic centimetre","cubic centimeter", "立方厘米", "毫升"}), new BigDecimal("1000")); - units.put(new UnitFactorSynonyms(new String[]{"mm³", "mm3", "cubic millimetre","cubic millimeter", "立方毫米"}), new BigDecimal("1000000")); - units.put(new UnitFactorSynonyms(new String[]{"ft³", "ft3", "cubic foot", "cubic feet", "cu ft", "立方英尺"}),new BigDecimal("0.0353147")); - units.put(new UnitFactorSynonyms(new String[]{"in³", "in3", "cu in", "cubic inch", "立方英寸"}), new BigDecimal("61.0237")); - units.put(new UnitFactorSynonyms(new String[]{"imperial pint", "imperial pt", "imperial p"}), new BigDecimal("1.75975")); - units.put(new UnitFactorSynonyms(new String[]{"imperial gallon", "imperial gal"}), new BigDecimal("0.219969")); - units.put(new UnitFactorSynonyms(new String[]{"imperial quart", "imperial qt"}),new BigDecimal("0.879877")); - units.put(new UnitFactorSynonyms(new String[]{"US pint", "US pt", "US p"}), new BigDecimal("2.11337643513819")); - units.put(new UnitFactorSynonyms(new String[]{"US gallon", "US gal"}), new BigDecimal("0.264172")); - units.put(new UnitFactorSynonyms(new String[]{"US quart", "US qt"}),new BigDecimal("2.11338")); + units.put(new UnitFactorSynonyms("l", "L", "lt", "ltr", "liter", "litre", "dm\u00b3", "dm3", "cubic decimetre", "cubic decimeter", "\u5347", "\u7acb\u65b9\u5206"), new BigDecimal("1")); + units.put(new UnitFactorSynonyms("m\u00b3", "m3", "cubic metre", "cubic meter", "\u7acb\u65b9\u7c73"), new BigDecimal("0.001")); + units.put(new UnitFactorSynonyms("km\u00b3", "km3", "cubic kilometre", "cubic kilometer", "\u7acb\u65b9\u5343\u7c73"), new BigDecimal("0.000000001")); + units.put(new UnitFactorSynonyms("cm\u00b3", "cm3", "cubic centimetre", "cubic centimeter", "\u7acb\u65b9\u5398\u7c73", "\u6beb\u5347"), new BigDecimal("1000")); + units.put(new UnitFactorSynonyms("mm\u00b3", "mm3", "cubic millimetre", "cubic millimeter", "\u7acb\u65b9\u6beb\u7c73"), new BigDecimal("1000000")); + units.put(new UnitFactorSynonyms("ft\u00b3", "ft3", "cubic foot", "cubic feet", "cu ft", "\u7acb\u65b9\u82f1\u5c3a"), new BigDecimal("0.0353147")); + units.put(new UnitFactorSynonyms("in\u00b3", "in3", "cu in", "cubic inch", "\u7acb\u65b9\u82f1\u5bf8"), new BigDecimal("61.0237")); + units.put(new UnitFactorSynonyms("imperial pint", "imperial pt", "imperial p"), new BigDecimal("1.75975")); + units.put(new UnitFactorSynonyms("imperial gallon", "imperial gal"), new BigDecimal("0.219969")); + units.put(new UnitFactorSynonyms("imperial quart", "imperial qt"), new BigDecimal("0.879877")); + units.put(new UnitFactorSynonyms("US pint", "US pt", "US p"), new BigDecimal("2.11337643513819")); + units.put(new UnitFactorSynonyms("US gallon", "US gal"), new BigDecimal("0.264172")); + units.put(new UnitFactorSynonyms("US quart", "US qt"), new BigDecimal("2.11338")); } - public VolumeConverter(String leftUnit, String rightUnit) { Instantiate(units, leftUnit, rightUnit); } - public static Boolean Exists(String leftSynonym, String rightSynonym) { + public static boolean Exists(String leftSynonym, String rightSynonym) { if (units.FindUnit(leftSynonym) != null) { return units.FindUnit(rightSynonym) != null; } return false; } - } From 797cfaecd4c29deb7fb0d8206e29e73d16d86208 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 16:14:09 +0800 Subject: [PATCH 43/98] fix --- .../internals/functions/Function_1.java | 13 ++- .../internals/functions/Function_2.java | 57 +++--------- .../internals/functions/Function_3.java | 88 ++----------------- .../internals/functions/Function_4.java | 36 ++------ .../internals/functions/Function_5.java | 17 ---- .../internals/functions/Function_6.java | 17 ---- .../internals/functions/Function_N.java | 41 +++++---- 7 files changed, 56 insertions(+), 213 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java index afc89696f..b6d54d5fc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java @@ -16,6 +16,15 @@ protected Function_1(FunctionBase func1) { this.func1 = func1; } + protected Function_1(FunctionBase[] funcs) { + this.func1 = funcs[0]; + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + AddFunction(stringBuilder, Name()); + } + protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(functionName); stringBuilder.append('('); @@ -33,8 +42,6 @@ public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { } - // region Get_1 helpers - protected Operand GetText_1(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsText()) return args1; @@ -64,6 +71,4 @@ protected Operand GetArray_1(AlgorithmEngine engine, BiFunction= 2) { + this.func2 = funcs[1]; + } + } + + @Override protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(functionName); stringBuilder.append('('); @@ -29,48 +36,6 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(')'); } - @Override - public OperandType GetResultType() { - return OperandType.NONE; - } - - @Override - public void GetParameterTypes(NoneEngine noneEngine, List result, - OperandType operandType, String op, String val) { - } - - // region Get_1/2 helpers - - protected Operand GetText_1(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(engine, tempParameter); - if (args1.IsText()) return args1; - return ConvertToText(args1, 1); - } - - protected Operand GetNumber_1(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(engine, tempParameter); - if (args1.IsNumber()) return args1; - return ConvertToNumber(args1, 1); - } - - protected Operand GetDate_1(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(engine, tempParameter); - if (args1.IsDate()) return args1; - return ConvertToDate(args1, 1); - } - - protected Operand GetBoolean_1(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(engine, tempParameter); - if (args1.IsBoolean()) return args1; - return ConvertToBoolean(args1, 1); - } - - protected Operand GetArray_1(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(engine, tempParameter); - if (args1.IsArray()) return args1; - return ConvertToArray(args1, 1); - } - protected Operand GetText_2(AlgorithmEngine engine, BiFunction tempParameter) { Operand args2 = func2.Evaluate(engine, tempParameter); if (args2.IsText()) return args2; @@ -100,6 +65,4 @@ protected Operand GetArray_2(AlgorithmEngine engine, BiFunction= 3) { + this.func3 = funcs[2]; + } } + @Override protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(functionName); stringBuilder.append('('); @@ -35,78 +35,6 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(')'); } - @Override - public OperandType GetResultType() { - return OperandType.NONE; - } - - @Override - public void GetParameterTypes(NoneEngine noneEngine, List result, - OperandType operandType, String op, String val) { - } - - // region Get_1/2/3 helpers - - protected Operand GetText_1(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(engine, tempParameter); - if (args1.IsText()) return args1; - return ConvertToText(args1, 1); - } - - protected Operand GetNumber_1(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(engine, tempParameter); - if (args1.IsNumber()) return args1; - return ConvertToNumber(args1, 1); - } - - protected Operand GetDate_1(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(engine, tempParameter); - if (args1.IsDate()) return args1; - return ConvertToDate(args1, 1); - } - - protected Operand GetBoolean_1(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(engine, tempParameter); - if (args1.IsBoolean()) return args1; - return ConvertToBoolean(args1, 1); - } - - protected Operand GetArray_1(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(engine, tempParameter); - if (args1.IsArray()) return args1; - return ConvertToArray(args1, 1); - } - - protected Operand GetText_2(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args2 = func2.Evaluate(engine, tempParameter); - if (args2.IsText()) return args2; - return ConvertToText(args2, 2); - } - - protected Operand GetNumber_2(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args2 = func2.Evaluate(engine, tempParameter); - if (args2.IsNumber()) return args2; - return ConvertToNumber(args2, 2); - } - - protected Operand GetDate_2(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args2 = func2.Evaluate(engine, tempParameter); - if (args2.IsDate()) return args2; - return ConvertToDate(args2, 2); - } - - protected Operand GetBoolean_2(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args2 = func2.Evaluate(engine, tempParameter); - if (args2.IsBoolean()) return args2; - return ConvertToBoolean(args2, 2); - } - - protected Operand GetArray_2(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args2 = func2.Evaluate(engine, tempParameter); - if (args2.IsArray()) return args2; - return ConvertToArray(args2, 2); - } - protected Operand GetText_3(AlgorithmEngine engine, BiFunction tempParameter) { Operand args3 = func3.Evaluate(engine, tempParameter); if (args3.IsText()) return args3; @@ -136,6 +64,4 @@ protected Operand GetArray_3(AlgorithmEngine engine, BiFunction= 1) this.func1 = funcs[0]; - if (funcs.length >= 2) this.func2 = funcs[1]; - if (funcs.length >= 3) this.func3 = funcs[2]; - if (funcs.length >= 4) this.func4 = funcs[3]; + super(funcs); + if (funcs.length >= 4) { + this.func4 = funcs[3]; + } } + @Override protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(functionName); stringBuilder.append('('); @@ -49,18 +39,6 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(')'); } - @Override - public OperandType GetResultType() { - return OperandType.NONE; - } - - @Override - public void GetParameterTypes(NoneEngine noneEngine, List result, - OperandType operandType, String op, String val) { - } - - // region Get_4 helpers - protected Operand GetText_4(AlgorithmEngine engine, BiFunction tempParameter) { Operand args4 = func4.Evaluate(engine, tempParameter); if (args4.IsText()) return args4; @@ -90,6 +68,4 @@ protected Operand GetArray_4(AlgorithmEngine engine, BiFunction result, - OperandType operandType, String op, String val) { - } - - // region Get_5 helpers - protected Operand GetText_5(AlgorithmEngine engine, BiFunction tempParameter) { Operand args5 = func5.Evaluate(engine, tempParameter); if (args5.IsText()) return args5; @@ -87,6 +72,4 @@ protected Operand GetArray_5(AlgorithmEngine engine, BiFunction result, - OperandType operandType, String op, String val) { - } - - // region Get_6 helpers - protected Operand GetText_6(AlgorithmEngine engine, BiFunction tempParameter) { Operand args6 = func6.Evaluate(engine, tempParameter); if (args6.IsText()) return args6; @@ -91,6 +76,4 @@ protected Operand GetArray_6(AlgorithmEngine engine, BiFunction result, - OperandType operandType, String op, String val) { + protected Operand TryEvaluateAll(AlgorithmEngine engine, BiFunction tempParameter, List args) { + for (int i = 0; i < funcs.length; i++) { + Operand aa = funcs[i].Evaluate(engine, tempParameter); + if (aa.IsError() || aa.IsNone()) { + return aa; + } + args.add(aa); + } + return null; } - protected Operand GetBoolean(AlgorithmEngine engine, BiFunction tempParameter, int idx) { + protected Operand GetText(AlgorithmEngine engine, BiFunction tempParameter, int idx) { Operand args1 = funcs[idx].Evaluate(engine, tempParameter); - if (args1.IsBoolean()) return args1; - return ConvertToBoolean(args1, idx); + if (args1.IsText()) return args1; + return ConvertToText(args1, idx); } protected Operand GetNumber(AlgorithmEngine engine, BiFunction tempParameter, int idx) { @@ -50,18 +57,18 @@ protected Operand GetNumber(AlgorithmEngine engine, BiFunction tempParameter, int idx) { - Operand args1 = funcs[idx].Evaluate(engine, tempParameter); - if (args1.IsText()) return args1; - return ConvertToText(args1, idx); - } - protected Operand GetDate(AlgorithmEngine engine, BiFunction tempParameter, int idx) { Operand args1 = funcs[idx].Evaluate(engine, tempParameter); if (args1.IsDate()) return args1; return ConvertToDate(args1, idx); } + protected Operand GetBoolean(AlgorithmEngine engine, BiFunction tempParameter, int idx) { + Operand args1 = funcs[idx].Evaluate(engine, tempParameter); + if (args1.IsBoolean()) return args1; + return ConvertToBoolean(args1, idx); + } + protected Operand GetArray(AlgorithmEngine engine, BiFunction tempParameter, int idx) { Operand args1 = funcs[idx].Evaluate(engine, tempParameter); if (args1.IsArray()) return args1; From 293eee0776c619a961995a41daac77c4f5a8108a Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 16:21:14 +0800 Subject: [PATCH 44/98] fix --- .../internals/functions/FunctionUtil.java | 505 +++++++++--------- 1 file changed, 253 insertions(+), 252 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java index 9f2110174..6ce4c927b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java @@ -4,222 +4,228 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; -import java.util.Objects; -import java.util.function.Predicate; + import toolgood.algorithm.Operand; import toolgood.algorithm.internals.visitors.CharUtil; public class FunctionUtil { - public static final long START_DATE_UTC = 0; // 1970-01-01 00:00:00 UTC in milliseconds - - public static boolean F_base_GetList_BigDecimal(List args, List list) { - for (Operand item : args) { - if (item.IsNumber()) { - list.add(item.NumberValue()); - } else if (item.IsArray()) { - boolean o = F_base_GetList(item.ArrayValue(), list); - if (!o) { - return false; + public static final long START_DATE_UTC = 0; + + public static StringComparison GetStringComparison(boolean ignoreCase) { + return ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; + } + + private static boolean FlattenToListCore(List args, List list) { + for (int i = 0; i < args.size(); i++) { + Operand item = args.get(i); + if (item.IsArray()) { + List array = item.ArrayValue(); + for (int j = 0; j < array.size(); j++) { + List tempList = new ArrayList<>(); + tempList.add(array.get(j)); + if (!FlattenToListCore(tempList, list)) return false; } } else if (item.IsJson()) { Operand i = item.ToArray(null); - if (i.IsError()) { - return false; - } - boolean o = F_base_GetList(i.ArrayValue(), list); - if (!o) { - return false; + if (i.IsError()) return false; + List array = i.ArrayValue(); + for (int j = 0; j < array.size(); j++) { + List tempList = new ArrayList<>(); + tempList.add(array.get(j)); + if (!FlattenToListCore(tempList, list)) return false; } } else { - Operand o = item.ToNumber(null); - if (o.IsError()) { - return false; - } - list.add(o.DoubleValue()); + list.add(item); } } return true; } - public static boolean F_base_GetList_Double(Operand args, List list) { - if (args.IsError()) { - return false; - } - if (args.IsNumber()) { - list.add(args.DoubleValue()); - } else if (args.IsArray()) { - boolean o = F_base_GetList(args.ArrayValue(), list); - if (!o) { - return false; - } - } else if (args.IsJson()) { - Operand i = args.ToArray(null); - if (i.IsError()) { - return false; - } - boolean o = F_base_GetList(i.ArrayValue(), list); - if (!o) { - return false; - } - } else { - Operand o = args.ToNumber(null); - if (o.IsError()) { - return false; - } - list.add(o.DoubleValue()); - } - return true; - } - - public static boolean F_base_GetList(List args, List list) { - for (Operand item : args) { + private static boolean FlattenToListCoreDecimal(List args, List list) { + for (int i = 0; i < args.size(); i++) { + Operand item = args.get(i); if (item.IsArray()) { - boolean o = F_base_GetList(item.ArrayValue(), list); - if (!o) { - return false; + List array = item.ArrayValue(); + for (int j = 0; j < array.size(); j++) { + List tempList = new ArrayList<>(); + tempList.add(array.get(j)); + if (!FlattenToListCoreDecimal(tempList, list)) return false; } } else if (item.IsJson()) { - Operand i = item.ToArray(null); - if (i.IsError()) { - return false; - } - boolean o = F_base_GetList(i.ArrayValue(), list); - if (!o) { - return false; + Operand ii = item.ToArray(null); + if (ii.IsError()) return false; + List array = ii.ArrayValue(); + for (int j = 0; j < array.size(); j++) { + List tempList = new ArrayList<>(); + tempList.add(array.get(j)); + if (!FlattenToListCoreDecimal(tempList, list)) return false; } } else { - Operand o = item.ToText(null); - if (o.IsError()) { - return false; - } - list.add(o.TextValue()); + Operand converted = item.IsNumber() ? item : item.ToNumber(null); + if (converted.IsError()) return false; + list.add(converted.NumberValue()); } } return true; } - public static boolean F_base_GetList_String(Operand args, List list) { - if (args.IsError()) { - return false; + private static boolean FlattenToListCoreDecimal(Operand args, List list) { + if (args.IsError()) return false; + if (args.IsArray()) { + return FlattenToListCoreDecimal(args.ArrayValue(), list); + } else if (args.IsJson()) { + Operand i = args.ToArray(null); + if (i.IsError()) return false; + return FlattenToListCoreDecimal(i.ArrayValue(), list); + } else { + Operand converted = args.IsNumber() ? args : args.ToNumber(null); + if (converted.IsError()) return false; + list.add(converted.NumberValue()); } + return true; + } + + private static boolean FlattenToListCoreString(Operand args, List list) { + if (args.IsError()) return false; if (args.IsArray()) { - boolean o = F_base_GetList(args.ArrayValue(), list); - if (!o) { - return false; + List array = args.ArrayValue(); + for (int i = 0; i < array.size(); i++) { + if (!FlattenToListCoreString(array.get(i), list)) return false; } } else if (args.IsJson()) { Operand i = args.ToArray(null); - if (i.IsError()) { - return false; - } - boolean o = F_base_GetList(i.ArrayValue(), list); - if (!o) { - return false; + if (i.IsError()) return false; + List array = i.ArrayValue(); + for (int j = 0; j < array.size(); j++) { + if (!FlattenToListCoreString(array.get(j), list)) return false; } } else { - Operand o = args.ToText(null); - if (o.IsError()) { - return false; - } - list.add(o.TextValue()); + Operand converted = args.ToText(null); + if (converted.IsError()) return false; + list.add(converted.TextValue()); } return true; } - public static int F_base_countif(List dbs, double d) { + public static boolean FlattenToList(List args, List list) { + return FlattenToListCore(args, list); + } + + public static boolean FlattenToList(List args, List list) { + return FlattenToListCoreDecimal(args, list); + } + + public static boolean FlattenToList(Operand args, List list) { + return FlattenToListCoreDecimal(args, list); + } + + public static boolean FlattenToList(Operand args, List list) { + return FlattenToListCoreString(args, list); + } + + public static int GetCountIf(List dbs, BigDecimal d) { int count = 0; - for (double item : dbs) { - if (item == d) { + for (int i = 0; i < dbs.size(); i++) { + BigDecimal item = dbs.get(i); + if (item.compareTo(d) == 0) { count++; } } return count; } - public static int F_base_countif(List dbs, String s, double d) { + public static int GetCountIf(List dbs, String s, BigDecimal d) { int count = 0; - for (double item : dbs) { - if (F_base_compare(item, d, s)) { + for (int i = 0; i < dbs.size(); i++) { + BigDecimal item = dbs.get(i); + if (CompareValues(item, d, s)) { count++; } } return count; } - public static double F_base_sumif(List dbs, double d, List sumdbs) { - double sum = 0; + public static BigDecimal GetSumIf(List dbs, BigDecimal d, List sumdbs) { + BigDecimal sum = BigDecimal.ZERO; for (int i = 0; i < dbs.size(); i++) { - double item = dbs.get(i); - if (item == d) { - sum += sumdbs.get(i); + BigDecimal item = dbs.get(i); + if (item.compareTo(d) == 0) { + sum = sum.add(sumdbs.get(i)); } } return sum; } - public static double F_base_sumif(List dbs, String s, double d, List sumdbs) { - double sum = 0; + public static BigDecimal GetSumIf(List dbs, String s, BigDecimal d, List sumdbs) { + BigDecimal sum = BigDecimal.ZERO; for (int i = 0; i < dbs.size(); i++) { - if (F_base_compare(dbs.get(i), d, s)) { - sum += sumdbs.get(i); + if (CompareValues(dbs.get(i), d, s)) { + sum = sum.add(sumdbs.get(i)); } } return sum; } - public static boolean F_base_compare(double a, double b, String ss) { - if (CharUtil.Equals(ss, "<")) { - return a < b; + public static boolean CompareValues(BigDecimal a, BigDecimal b, String ss) { + if (CharUtil.Equals(ss, '<')) { + return a.compareTo(b) < 0; } else if (CharUtil.Equals(ss, "<=")) { - return a <= b; - } else if (CharUtil.Equals(ss, ">")) { - return a > b; + return a.compareTo(b) <= 0; + } else if (CharUtil.Equals(ss, '>')) { + return a.compareTo(b) > 0; } else if (CharUtil.Equals(ss, ">=")) { - return a >= b; - } else if (CharUtil.Equals(ss, "=") || CharUtil.Equals(ss, "==") || CharUtil.Equals(ss, "===")) { - return a == b; + return a.compareTo(b) >= 0; + } else if (CharUtil.Equals(ss, "=", "==", "===")) { + return a.compareTo(b) == 0; } - return a != b; + return a.compareTo(b) != 0; } - public static int F_base_gcd(List list) { - List sortedList = new ArrayList<>(list); - Collections.sort(sortedList); - int g = F_base_gcd((int) sortedList.get(1).doubleValue(), (int) sortedList.get(0).doubleValue()); - for (int i = 2; i < sortedList.size(); i++) { - g = F_base_gcd((int) sortedList.get(i).doubleValue(), g); + public static int GetGcd(List list) { + if (list.size() == 0) return 1; + + int g = list.get(0).intValue(); + for (int i = 1; i < list.size(); i++) { + g = GetGcd(g, list.get(i).intValue()); + if (g == 1) break; } return g; } - public static int F_base_gcd(int a, int b) { - if (b == 1) { - return 1; - } - if (b == 0) { - return a; + public static int GetGcd(int a, int b) { + while (b != 0) { + int t = b; + b = a % b; + a = t; } - return F_base_gcd(b, a % b); + return a; } - public static int F_base_lcm(List list) { - List sortedList = new ArrayList<>(list); - Collections.sort(sortedList); - sortedList.removeIf(d -> d <= 1); - - int a = (int) sortedList.get(0).doubleValue(); - for (int i = 1; i < sortedList.size(); i++) { - int b = (int) sortedList.get(i).doubleValue(); - int g = b > a ? F_base_gcd(b, a) : F_base_gcd(a, b); + public static int GetLcm(List list) { + if (list.size() == 0) return 1; + + int a = 0; + boolean foundFirst = false; + + for (int i = 0; i < list.size(); i++) { + int val = list.get(i).intValue(); + if (val <= 1) continue; + + if (!foundFirst) { + a = val; + foundFirst = true; + continue; + } + + int b = val; + int g = b > a ? GetGcd(b, a) : GetGcd(a, b); a = a / g * b; } - return a; + return foundFirst ? a : 1; } - public static int F_base_Factorial(int a) { - if (a <= 0) { - return 1; - } + public static int GetFactorial(int a) { + if (a <= 0) return 1; int r = 1; for (int i = a; i > 0; i--) { r *= i; @@ -227,74 +233,73 @@ public static int F_base_Factorial(int a) { return r; } - public static Pair sumifMatch(String s) { - if (s == null || s.isEmpty()) { - return null; - } + public static Pair ParseSumIfMatch(String s) { + if (s == null || s.length() == 0) return null; + char c = s.charAt(0); - if (c == '>' || c == '�?) { - if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '�?)) { + if (c == '>' || c == '\uff1e') { + if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '\uff1d')) { try { - double d = Double.parseDouble(s.substring(2).trim()); + BigDecimal d = new BigDecimal(s.substring(2).trim()); return new Pair<>(">=", d); } catch (NumberFormatException e) { return null; } } else { try { - double d = Double.parseDouble(s.substring(1).trim()); + BigDecimal d = new BigDecimal(s.substring(1).trim()); return new Pair<>(">", d); } catch (NumberFormatException e) { return null; } } - } else if (c == '<' || c == '�?) { - if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '�?)) { + } else if (c == '<' || c == '\uff1c') { + if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '\uff1d')) { try { - double d = Double.parseDouble(s.substring(2).trim()); + BigDecimal d = new BigDecimal(s.substring(2).trim()); return new Pair<>("<=", d); } catch (NumberFormatException e) { return null; } - } else if (s.length() > 1 && (s.charAt(1) == '>' || s.charAt(1) == '�?)) { + } else if (s.length() > 1 && (s.charAt(1) == '>' || s.charAt(1) == '\uff1e')) { try { - double d = Double.parseDouble(s.substring(2).trim()); + BigDecimal d = new BigDecimal(s.substring(2).trim()); return new Pair<>("!=", d); } catch (NumberFormatException e) { return null; } } else { try { - double d = Double.parseDouble(s.substring(1).trim()); + BigDecimal d = new BigDecimal(s.substring(1).trim()); return new Pair<>("<", d); } catch (NumberFormatException e) { return null; } } - } else if (c == '=' || c == '�?) { + } else if (c == '=' || c == '\uff1d') { int index = 1; - if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '�?)) { + if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '\uff1d')) { index = 2; - if (s.length() > 2 && (s.charAt(2) == '=' || s.charAt(2) == '�?)) { + if (s.length() > 2 && (s.charAt(2) == '=' || s.charAt(2) == '\uff1d')) { index = 3; } } try { - double d = Double.parseDouble(s.substring(index).trim()); + BigDecimal d = new BigDecimal(s.substring(index).trim()); return new Pair<>("=", d); } catch (NumberFormatException e) { return null; } - } else if (c == '!' || c == '�?) { + } else if (c == '!' || c == '\uff01') { int index = 1; - if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '�?)) { + if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '\uff1d')) { index = 2; - if (s.length() > 2 && (s.charAt(2) == '=' || s.charAt(2) == '�?)) { + if (s.length() > 2 && (s.charAt(2) == '=' || s.charAt(2) == '\uff1d')) { index = 3; } } try { - double d = Double.parseDouble(s.substring(index).trim()); + BigDecimal d = new BigDecimal(s.substring(index).trim()); return new Pair<>("!=", d); } catch (NumberFormatException e) { return null; @@ -303,91 +308,72 @@ public static Pair sumifMatch(String s) { return null; } - public static int Compare(double t1, double t2) { - double b = t1 - t2; - if (b == 0) { - return 0; - } else if (b > 0) { - return 1; - } - return -1; - } - - public static boolean tryParseBoolean(String textValue, BooleanHolder boolValue) { - if (textValue.equalsIgnoreCase("true")) { - boolValue.value = true; - return true; - } - if (textValue.equalsIgnoreCase("false")) { - boolValue.value = false; - return true; - } - if (textValue.equalsIgnoreCase("yes")) { - boolValue.value = true; - return true; - } - if (textValue.equalsIgnoreCase("no")) { - boolValue.value = false; - return true; - } - if (textValue.equals("1") || textValue.equals("�?) || textValue.equals("�?)) { - boolValue.value = true; - return true; - } - if (textValue.equals("0") || textValue.equals("�?) || textValue.equals("不是") || textValue.equals("�?) || textValue.equals("没有")) { - boolValue.value = false; - return true; + public static boolean TryParseBoolean(String textValue, BooleanHolder boolValue) { + int len = textValue.length(); + switch (len) { + case 1: { + char c = textValue.charAt(0); + if (c == '1' || c == '\u662f' || c == '\u6709') { + boolValue.value = true; + return true; + } + if (c == '0' || c == '\u5426' || c == '\u65e0') { + boolValue.value = false; + return true; + } + break; + } + case 2: { + if (textValue.equalsIgnoreCase("no")) { + boolValue.value = false; + return true; + } + if (textValue.equals("\u4e0d\u662f")) { + boolValue.value = false; + return true; + } + if (textValue.equals("\u6ca1\u6709")) { + boolValue.value = false; + return true; + } + break; + } + case 3: { + if (textValue.equalsIgnoreCase("yes")) { + boolValue.value = true; + return true; + } + break; + } + case 4: { + if (textValue.equalsIgnoreCase("true")) { + boolValue.value = true; + return true; + } + break; + } + case 5: { + if (textValue.equalsIgnoreCase("false")) { + boolValue.value = false; + return true; + } + break; + } } boolValue.value = false; return false; } - // 辅助类,用于在tryParseBoolean中返回布尔�? - public static class BooleanHolder { - public boolean value; - } - - // 辅助类,用于替代Tuple - public static class Pair { - private final F first; - private final S second; - - public Pair(F first, S second) { - this.first = first; - this.second = second; - } - - public F getFirst() { - return first; - } - - public S getSecond() { - return second; - } - } - - // ----------------------------------------------------------------------- - // BigDecimal 版统计辅助方法(�?RANK / LARGE / SMALL 等函数使用) - // ----------------------------------------------------------------------- - - /** - * 快速选择:从 BigDecimal 列表中找�?k 小(largest=false)或�?k 大(largest=true)的值�? - * k �?0 开始计数(�?largest=true,k=0 表示最大值)�? - * - * @param list 输入列表(会被修改,调用方应传副本) - * @param k 目标位次�?-based�? - * @param largest true=找第k大,false=找第k�? - * @return 目标�? - */ public static BigDecimal QuickSelect(List list, int k, boolean largest) { if (list.size() == 1) return list.get(0); + int targetIndex = largest ? list.size() - 1 - k : k; - return quickSelectCore(list, 0, list.size() - 1, targetIndex); + return QuickSelectCore(list, 0, list.size() - 1, targetIndex); } - private static BigDecimal quickSelectCore(List list, int left, int right, int k) { + private static BigDecimal QuickSelectCore(List list, int left, int right, int k) { while (left < right) { - int pivotIndex = partition(list, left, right); + int pivotIndex = Partition(list, left, right); if (k == pivotIndex) { return list.get(k); } else if (k < pivotIndex) { @@ -399,20 +385,20 @@ private static BigDecimal quickSelectCore(List list, int left, int r return list.get(left); } - private static int partition(List list, int left, int right) { + private static int Partition(List list, int left, int right) { BigDecimal pivot = list.get(right); int i = left; for (int j = left; j < right; j++) { if (list.get(j).compareTo(pivot) <= 0) { - swap(list, i, j); + Swap(list, i, j); i++; } } - swap(list, i, right); + Swap(list, i, right); return i; } - private static void swap(List list, int i, int j) { + private static void Swap(List list, int i, int j) { if (i != j) { BigDecimal temp = list.get(i); list.set(i, list.get(j)); @@ -420,28 +406,43 @@ private static void swap(List list, int i, int j) { } } - /** - * 获取 num �?values 中的排名�? - * descending=true 表示降序排名(最大值排名第1)�? - * - * @param values 数值列�? - * @param num 待排名的�? - * @param descending true=降序,false=升序 - * @return 排名�?-based),�?num 不在列表中返�?0 - */ public static int GetRank(List values, BigDecimal num, boolean descending) { int rank = 1; int count = 0; - for (BigDecimal v : values) { - int cmp = v.compareTo(num); - if (cmp == 0) { + for (int i = 0; i < values.size(); i++) { + if (values.get(i).compareTo(num) == 0) { count++; - } else if ((descending && cmp > 0) || (!descending && cmp < 0)) { + } else if ((descending && values.get(i).compareTo(num) > 0) || (!descending && values.get(i).compareTo(num) < 0)) { rank++; } } return count > 0 ? rank : 0; } + public static class BooleanHolder { + public boolean value; + } + + public static class Pair { + private final F first; + private final S second; + + public Pair(F first, S second) { + this.first = first; + this.second = second; + } + + public F getFirst() { + return first; + } + public S getSecond() { + return second; + } + } + + public enum StringComparison { + Ordinal, + OrdinalIgnoreCase + } } From 7c45e19a0e323a59b3c6a28cc454362e467f1ce8 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 16:31:41 +0800 Subject: [PATCH 45/98] fix --- java/pom.xml | 2 +- .../functions/compare/Function_EQ.java | 119 +++++++++++------- .../functions/compare/Function_GE.java | 118 ++++++++++------- .../functions/compare/Function_GT.java | 118 ++++++++++------- .../functions/compare/Function_LE.java | 118 ++++++++++------- .../functions/compare/Function_LT.java | 118 ++++++++++------- .../functions/compare/Function_NE.java | 119 +++++++++++------- 7 files changed, 457 insertions(+), 255 deletions(-) diff --git a/java/pom.xml b/java/pom.xml index 0fd8591cc..c8a22ebd8 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -6,7 +6,7 @@ io.github.toolgood toolgood-algorithm - 4.0.0.1 + 6.2.5.1 jar toolgood.algorithm diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java index 5f90b30f6..532091fb3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java @@ -1,71 +1,104 @@ package toolgood.algorithm.internals.functions.compare; -import toolgood.algorithm.Operand; +import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_EQ extends Function_2 { - public Function_EQ(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_EQ extends Function_2 { + public Function_EQ(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "=="; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; + } - if(args1.Type() == args2.Type()) { - if(args1.IsNumber()) { + if (args1.Type() == args2.Type()) { + if (args1.IsNumber()) { return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) == 0); - } else if(args1.IsText()) { + } else if (args1.IsText()) { return Operand.Create(args1.TextValue().equals(args2.TextValue())); - } else if(args1.IsBoolean()) { + } else if (args1.IsBoolean()) { return Operand.Create(args1.BooleanValue() == args2.BooleanValue()); - } else if(args1.IsDate()) { - args1 = args1.ToNumber(null); - args2 = args2.ToNumber(null); - return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) == 0); - } else if(args1.IsJson()) { - args1 = args1.ToText(null); - args2 = args2.ToText(null); - return Operand.Create(args1.TextValue().equals(args2.TextValue())); - } else if(args1.IsNull()) { + } else if (args1.IsDate()) { + return Operand.Create(args1.DateValue().ToLong() == args2.DateValue().ToLong()); + } else if (args1.IsNull()) { return Operand.TRUE; - } else { - return Operand.Error("Function '{0}' compare is error.", "=="); } - } else if(args1.IsNull() || args2.IsNull()) { + return CompareError(); + } else if (args1.IsNull() || args2.IsNull()) { return Operand.FALSE; - } else if(args2.IsText()) { - if(args1.IsBoolean()) { - Operand a = args2.ToBoolean(null); - if(!a.IsError()) { - return a.BooleanValue() == args1.BooleanValue() ? Operand.TRUE : Operand.FALSE; - } - args1 = args1.ToText(null); - return Operand.Create(args1.TextValue().equals(args2.TextValue())); - } else if(args1.IsDate() || args1.IsNumber() || args1.IsJson()) { - args1 = args1.ToText(null); - return Operand.Create(args1.TextValue().equals(args2.TextValue())); - } else { - return Operand.Error("Function '{0}' compare is error.", "=="); - } - } else if(args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { - return Operand.Error("Function '{0}' compare is error.", "=="); + } else if (args1.IsDate() || args2.IsDate() || args1.IsJson() || args2.IsJson() + || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { + return CompareError(); + } + args1 = ConvertToNumber(args1, 1); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + args2 = ConvertToNumber(args2, 2); + if (args2.IsError() || args2.IsNone()) { + return args2; } - if(args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "==", 1); if(args1.IsError()) { return args1; } } - if(args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "==", 2); if(args2.IsError()) { return args2; } } return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) == 0); } + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if(addBrackets) stringBuilder.append('('); + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, false); stringBuilder.append(" == "); func2.toString(stringBuilder, false); - if(addBrackets) stringBuilder.append(')'); + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + OperandType t1 = func1.GetResultType(); + OperandType t2 = func2.GetResultType(); + if (t1 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func2).ToText(null); + if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); + func2.GetParameterTypes(noneEngine, result, t2, null, null); + return; + } + } else if (t2 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func1).ToText(null); + if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); + func1.GetParameterTypes(noneEngine, result, t1, null, null); + return; + } + } + func1.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java index fcfbad645..a71c2b20b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java @@ -1,73 +1,107 @@ package toolgood.algorithm.internals.functions.compare; -import toolgood.algorithm.Operand; +import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_GE extends Function_2 { - public Function_GE(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_GE extends Function_2 { + public Function_GE(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } + public String Name() { + return ">="; + } - if(args1.Type() == args2.Type()) { - if(args1.IsNumber()) { + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; + } + + if (args1.Type() == args2.Type()) { + if (args1.IsNumber()) { return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) >= 0); - } else if(args1.IsText()) { + } else if (args1.IsText()) { int r = args1.TextValue().compareTo(args2.TextValue()); return r >= 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.IsDate() || args1.IsBoolean()) { + } else if (args1.IsDate()) { + return Operand.Create(args1.DateValue().ToLong() >= args2.DateValue().ToLong()); + } else if (args1.IsBoolean()) { args1 = args1.ToNumber(null); args2 = args2.ToNumber(null); return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) >= 0); - } else if(args1.IsJson()) { - args1 = args1.ToText(null); - args2 = args2.ToText(null); - int r = args1.TextValue().compareTo(args2.TextValue()); - return r >= 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.IsNull()) { + } else if (args1.IsNull()) { return Operand.TRUE; - } else { - return Operand.Error("Function '{0}' compare is error.", ">="); } - } else if(args1.IsNull() || args2.IsNull()) { + return CompareError(); + } else if (args1.IsNull() || args2.IsNull()) { return Operand.FALSE; - } else if(args2.IsText()) { - if(args1.IsBoolean()) { - Operand a = args2.ToBoolean(null); - if(!a.IsError()) { - return a.BooleanValue() != args1.BooleanValue() ? Operand.TRUE : Operand.FALSE; - } - args1 = args1.ToText(null); - int r = args1.TextValue().compareTo(args2.TextValue()); - return r >= 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.IsDate() || args1.IsNumber() || args1.IsJson()) { - args1 = args1.ToText(null); - int r = args1.TextValue().compareTo(args2.TextValue()); - return r >= 0 ? Operand.TRUE : Operand.FALSE; - } else { - return Operand.Error("Function '{0}' compare is error.", ">="); - } - } else if(args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { - return Operand.Error("Function '{0}' compare is error.", ">="); + } else if (args1.IsDate() || args2.IsDate() || args1.IsJson() || args2.IsJson() + || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { + return CompareError(); + } + args1 = ConvertToNumber(args1, 1); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + args2 = ConvertToNumber(args2, 2); + if (args2.IsError() || args2.IsNone()) { + return args2; } - if(args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", ">=", 1); if(args1.IsError()) { return args1; } } - if(args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", ">=", 2); if(args2.IsError()) { return args2; } } return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) >= 0); } + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if(addBrackets) stringBuilder.append('('); + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, false); stringBuilder.append(" >= "); func2.toString(stringBuilder, false); - if(addBrackets) stringBuilder.append(')'); + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + OperandType t1 = func1.GetResultType(); + OperandType t2 = func2.GetResultType(); + if (t1 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func2).ToText(null); + if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); + func2.GetParameterTypes(noneEngine, result, t2, null, null); + return; + } + } else if (t2 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func1).ToText(null); + if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); + func1.GetParameterTypes(noneEngine, result, t1, null, null); + return; + } + } + func1.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java index 128355e23..e45fa1f8f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java @@ -1,73 +1,107 @@ package toolgood.algorithm.internals.functions.compare; -import toolgood.algorithm.Operand; +import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_GT extends Function_2 { - public Function_GT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_GT extends Function_2 { + public Function_GT(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } + public String Name() { + return ">"; + } - if(args1.Type() == args2.Type()) { - if(args1.IsNumber()) { + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; + } + + if (args1.Type() == args2.Type()) { + if (args1.IsNumber()) { return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) > 0); - } else if(args1.IsText()) { + } else if (args1.IsText()) { int r = args1.TextValue().compareTo(args2.TextValue()); return r > 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.IsDate() || args1.IsBoolean()) { + } else if (args1.IsDate()) { + return Operand.Create(args1.DateValue().ToLong() > args2.DateValue().ToLong()); + } else if (args1.IsBoolean()) { args1 = args1.ToNumber(null); args2 = args2.ToNumber(null); return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) > 0); - } else if(args1.IsJson()) { - args1 = args1.ToText(null); - args2 = args2.ToText(null); - int r = args1.TextValue().compareTo(args2.TextValue()); - return r > 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.IsNull()) { + } else if (args1.IsNull()) { return Operand.TRUE; - } else { - return Operand.Error("Function '{0}' compare is error.", ">"); } - } else if(args1.IsNull() || args2.IsNull()) { + return CompareError(); + } else if (args1.IsNull() || args2.IsNull()) { return Operand.FALSE; - } else if(args2.IsText()) { - if(args1.IsBoolean()) { - Operand a = args2.ToBoolean(null); - if(!a.IsError()) { - return a.BooleanValue() != args1.BooleanValue() ? Operand.TRUE : Operand.FALSE; - } - args1 = args1.ToText(null); - int r = args1.TextValue().compareTo(args2.TextValue()); - return r > 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.IsDate() || args1.IsNumber() || args1.IsJson()) { - args1 = args1.ToText(null); - int r = args1.TextValue().compareTo(args2.TextValue()); - return r > 0 ? Operand.TRUE : Operand.FALSE; - } else { - return Operand.Error("Function '{0}' compare is error.", ">"); - } - } else if(args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { - return Operand.Error("Function '{0}' compare is error.", ">"); + } else if (args1.IsDate() || args2.IsDate() || args1.IsJson() || args2.IsJson() + || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { + return CompareError(); + } + args1 = ConvertToNumber(args1, 1); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + args2 = ConvertToNumber(args2, 2); + if (args2.IsError() || args2.IsNone()) { + return args2; } - if(args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", ">", 1); if(args1.IsError()) { return args1; } } - if(args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", ">", 2); if(args2.IsError()) { return args2; } } return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) > 0); } + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if(addBrackets) stringBuilder.append('('); + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, false); stringBuilder.append(" > "); func2.toString(stringBuilder, false); - if(addBrackets) stringBuilder.append(')'); + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + OperandType t1 = func1.GetResultType(); + OperandType t2 = func2.GetResultType(); + if (t1 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func2).ToText(null); + if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); + func2.GetParameterTypes(noneEngine, result, t2, null, null); + return; + } + } else if (t2 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func1).ToText(null); + if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); + func1.GetParameterTypes(noneEngine, result, t1, null, null); + return; + } + } + func1.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java index 3baa690c6..020eef927 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java @@ -1,73 +1,107 @@ package toolgood.algorithm.internals.functions.compare; -import toolgood.algorithm.Operand; +import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_LE extends Function_2 { - public Function_LE(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_LE extends Function_2 { + public Function_LE(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } + public String Name() { + return "<="; + } - if(args1.Type() == args2.Type()) { - if(args1.IsNumber()) { + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; + } + + if (args1.Type() == args2.Type()) { + if (args1.IsNumber()) { return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) <= 0); - } else if(args1.IsText()) { + } else if (args1.IsText()) { int r = args1.TextValue().compareTo(args2.TextValue()); return r <= 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.IsDate() || args1.IsBoolean()) { + } else if (args1.IsDate()) { + return Operand.Create(args1.DateValue().ToLong() <= args2.DateValue().ToLong()); + } else if (args1.IsBoolean()) { args1 = args1.ToNumber(null); args2 = args2.ToNumber(null); return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) <= 0); - } else if(args1.IsJson()) { - args1 = args1.ToText(null); - args2 = args2.ToText(null); - int r = args1.TextValue().compareTo(args2.TextValue()); - return r <= 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.IsNull()) { + } else if (args1.IsNull()) { return Operand.TRUE; - } else { - return Operand.Error("Function '{0}' compare is error.", "<="); } - } else if(args1.IsNull() || args2.IsNull()) { + return CompareError(); + } else if (args1.IsNull() || args2.IsNull()) { return Operand.FALSE; - } else if(args2.IsText()) { - if(args1.IsBoolean()) { - Operand a = args2.ToBoolean(null); - if(!a.IsError()) { - return a.BooleanValue() != args1.BooleanValue() ? Operand.TRUE : Operand.FALSE; - } - args1 = args1.ToText(null); - int r = args1.TextValue().compareTo(args2.TextValue()); - return r <= 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.IsDate() || args1.IsNumber() || args1.IsJson()) { - args1 = args1.ToText(null); - int r = args1.TextValue().compareTo(args2.TextValue()); - return r <= 0 ? Operand.TRUE : Operand.FALSE; - } else { - return Operand.Error("Function '{0}' compare is error.", "<="); - } - } else if(args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { - return Operand.Error("Function '{0}' compare is error.", "<="); + } else if (args1.IsDate() || args2.IsDate() || args1.IsJson() || args2.IsJson() + || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { + return CompareError(); + } + args1 = ConvertToNumber(args1, 1); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + args2 = ConvertToNumber(args2, 2); + if (args2.IsError() || args2.IsNone()) { + return args2; } - if(args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "<=", 1); if(args1.IsError()) { return args1; } } - if(args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "<=", 2); if(args2.IsError()) { return args2; } } return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) <= 0); } + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if(addBrackets) stringBuilder.append('('); + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, false); stringBuilder.append(" <= "); func2.toString(stringBuilder, false); - if(addBrackets) stringBuilder.append(')'); + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + OperandType t1 = func1.GetResultType(); + OperandType t2 = func2.GetResultType(); + if (t1 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func2).ToText(null); + if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); + func2.GetParameterTypes(noneEngine, result, t2, null, null); + return; + } + } else if (t2 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func1).ToText(null); + if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); + func1.GetParameterTypes(noneEngine, result, t1, null, null); + return; + } + } + func1.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java index fa414c8db..386370703 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java @@ -1,73 +1,107 @@ package toolgood.algorithm.internals.functions.compare; -import toolgood.algorithm.Operand; +import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_LT extends Function_2 { - public Function_LT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_LT extends Function_2 { + public Function_LT(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } + public String Name() { + return "<"; + } - if(args1.Type() == args2.Type()) { - if(args1.IsNumber()) { + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; + } + + if (args1.Type() == args2.Type()) { + if (args1.IsNumber()) { return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) < 0); - } else if(args1.IsText()) { + } else if (args1.IsText()) { int r = args1.TextValue().compareTo(args2.TextValue()); return r < 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.IsDate() || args1.IsBoolean()) { + } else if (args1.IsDate()) { + return Operand.Create(args1.DateValue().ToLong() < args2.DateValue().ToLong()); + } else if (args1.IsBoolean()) { args1 = args1.ToNumber(null); args2 = args2.ToNumber(null); return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) < 0); - } else if(args1.IsJson()) { - args1 = args1.ToText(null); - args2 = args2.ToText(null); - int r = args1.TextValue().compareTo(args2.TextValue()); - return r < 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.IsNull()) { + } else if (args1.IsNull()) { return Operand.TRUE; - } else { - return Operand.Error("Function '{0}' compare is error.", "<"); } - } else if(args1.IsNull() || args2.IsNull()) { + return CompareError(); + } else if (args1.IsNull() || args2.IsNull()) { return Operand.FALSE; - } else if(args2.IsText()) { - if(args1.IsBoolean()) { - Operand a = args2.ToBoolean(null); - if(!a.IsError()) { - return a.BooleanValue() != args1.BooleanValue() ? Operand.TRUE : Operand.FALSE; - } - args1 = args1.ToText(null); - int r = args1.TextValue().compareTo(args2.TextValue()); - return r < 0 ? Operand.TRUE : Operand.FALSE; - } else if(args1.IsDate() || args1.IsNumber() || args1.IsJson()) { - args1 = args1.ToText(null); - int r = args1.TextValue().compareTo(args2.TextValue()); - return r < 0 ? Operand.TRUE : Operand.FALSE; - } else { - return Operand.Error("Function '{0}' compare is error.", "<"); - } - } else if(args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { - return Operand.Error("Function '{0}' compare is error.", "<"); + } else if (args1.IsDate() || args2.IsDate() || args1.IsJson() || args2.IsJson() + || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { + return CompareError(); + } + args1 = ConvertToNumber(args1, 1); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + args2 = ConvertToNumber(args2, 2); + if (args2.IsError() || args2.IsNone()) { + return args2; } - if(args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "<", 1); if(args1.IsError()) { return args1; } } - if(args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "<", 2); if(args2.IsError()) { return args2; } } return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) < 0); } + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if(addBrackets) stringBuilder.append('('); + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, false); stringBuilder.append(" < "); func2.toString(stringBuilder, false); - if(addBrackets) stringBuilder.append(')'); + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + OperandType t1 = func1.GetResultType(); + OperandType t2 = func2.GetResultType(); + if (t1 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func2).ToText(null); + if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); + func2.GetParameterTypes(noneEngine, result, t2, null, null); + return; + } + } else if (t2 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func1).ToText(null); + if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); + func1.GetParameterTypes(noneEngine, result, t1, null, null); + return; + } + } + func1.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java index 4467d8a37..5fe5800c1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java @@ -1,71 +1,104 @@ package toolgood.algorithm.internals.functions.compare; -import toolgood.algorithm.Operand; +import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_NE extends Function_2 { - public Function_NE(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_NE extends Function_2 { + public Function_NE(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "!="; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); if(args1.IsError()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); if(args2.IsError()) { return args2; } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; + } - if(args1.Type() == args2.Type()) { - if(args1.IsNumber()) { + if (args1.Type() == args2.Type()) { + if (args1.IsNumber()) { return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) != 0); - } else if(args1.IsText()) { + } else if (args1.IsText()) { return Operand.Create(!args1.TextValue().equals(args2.TextValue())); - } else if(args1.IsBoolean()) { + } else if (args1.IsBoolean()) { return Operand.Create(args1.BooleanValue() != args2.BooleanValue()); - } else if(args1.IsDate()) { - args1 = args1.ToNumber(null); - args2 = args2.ToNumber(null); - return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) != 0); - } else if(args1.IsJson()) { - args1 = args1.ToText(null); - args2 = args2.ToText(null); - return Operand.Create(!args1.TextValue().equals(args2.TextValue())); - } else if(args1.IsNull()) { + } else if (args1.IsDate()) { + return Operand.Create(args1.DateValue().ToLong() != args2.DateValue().ToLong()); + } else if (args1.IsNull()) { return Operand.FALSE; - } else { - return Operand.Error("Function '{0}' compare is error.", "!="); } - } else if(args1.IsNull() || args2.IsNull()) { + return CompareError(); + } else if (args1.IsNull() || args2.IsNull()) { return Operand.TRUE; - } else if(args2.IsText()) { - if(args1.IsBoolean()) { - Operand a = args2.ToBoolean(null); - if(!a.IsError()) { - return a.BooleanValue() != args1.BooleanValue() ? Operand.TRUE : Operand.FALSE; - } - args1 = args1.ToText(null); - return Operand.Create(!args1.TextValue().equals(args2.TextValue())); - } else if(args1.IsDate() || args1.IsNumber() || args1.IsJson()) { - args1 = args1.ToText(null); - return Operand.Create(!args1.TextValue().equals(args2.TextValue())); - } else { - return Operand.Error("Function '{0}' compare is error.", "!="); - } - } else if(args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { - return Operand.Error("Function '{0}' compare is error.", "!="); + } else if (args1.IsDate() || args2.IsDate() || args1.IsJson() || args2.IsJson() + || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { + return CompareError(); + } + args1 = ConvertToNumber(args1, 1); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + args2 = ConvertToNumber(args2, 2); + if (args2.IsError() || args2.IsNone()) { + return args2; } - if(args1.IsNotNumber()) { args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "!=", 1); if(args1.IsError()) { return args1; } } - if(args2.IsNotNumber()) { args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "!=", 2); if(args2.IsError()) { return args2; } } return Operand.Create(args1.NumberValue().compareTo(args2.NumberValue()) != 0); } + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if(addBrackets) stringBuilder.append('('); + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, false); stringBuilder.append(" != "); func2.toString(stringBuilder, false); - if(addBrackets) stringBuilder.append(')'); + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + OperandType t1 = func1.GetResultType(); + OperandType t2 = func2.GetResultType(); + if (t1 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func2).ToText(null); + if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); + func2.GetParameterTypes(noneEngine, result, t2, null, null); + return; + } + } else if (t2 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func1).ToText(null); + if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); + func1.GetParameterTypes(noneEngine, result, t1, null, null); + return; + } + } + func1.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); } } From 6552f390a2dc0256ec3c87b65774dd1c36604783 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Mon, 16 Mar 2026 16:38:07 +0800 Subject: [PATCH 46/98] fix --- .../functions/csharp/Function_ENDSWITH.java | 72 +++++++++++-------- .../csharp/Function_REGEXREPALCE.java | 47 ------------ .../csharp/Function_REGEXREPLACE.java | 63 ++++++++++++++++ .../functions/csharp/Function_STARTSWITH.java | 72 +++++++++++-------- 4 files changed, 149 insertions(+), 105 deletions(-) delete mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPLACE.java diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java index 0273d5600..462c702c6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java @@ -1,53 +1,67 @@ package toolgood.algorithm.internals.functions.csharp; +import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_ENDSWITH extends Function_3 { + public Function_ENDSWITH(FunctionBase[] funcs) { + super(funcs); + } -public class Function_ENDSWITH extends Function_3 { - public Function_ENDSWITH(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "EndsWith"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "EndsWith", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "EndsWith", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } + String text = args1.TextValue(); if (func3 == null) { return Operand.Create(text.endsWith(args2.TextValue())); } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotBoolean()) { - args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "EndsWith", 3); - if (args3.IsError()) { - return args3; - } + + Operand args3 = GetBoolean_3(engine, tempParameter); + if (args3.IsError() || args3.IsNone()) { + return args3; } + if (args3.BooleanValue()) { return Operand.Create(text.toLowerCase().endsWith(args2.TextValue().toLowerCase())); - } else { - return Operand.Create(text.endsWith(args2.TextValue())); } + return Operand.Create(text.endsWith(args2.TextValue())); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "EndsWith"); + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN, null, null); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java deleted file mode 100644 index ad2201c9c..000000000 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPALCE.java +++ /dev/null @@ -1,47 +0,0 @@ -package toolgood.algorithm.internals.functions.csharp; - -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - - -import java.util.regex.Pattern; - -public class Function_REGEXREPLACE extends Function_3 { - public Function_REGEXREPLACE(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); - } - - @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "RegexReplace", 1); - if (args1.IsError()) { - return args1; - } - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "RegexReplace", 2); - if (args2.IsError()) { - return args2; - } - } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotText()) { - args3 = args3.ToText("Function '{0}' parameter {1} is error!", "RegexReplace", 3); - if (args3.IsError()) { - return args3; - } - } - String result = Pattern.compile(args2.TextValue()).matcher(args1.TextValue()).replaceAll(args3.TextValue()); - return Operand.Create(result); - } - - @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "RegexReplace"); - } -} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPLACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPLACE.java new file mode 100644 index 000000000..da8539deb --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPLACE.java @@ -0,0 +1,63 @@ +package toolgood.algorithm.internals.functions.csharp; + +import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; +import java.util.regex.Pattern; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_REGEXREPLACE extends Function_3 { + public Function_REGEXREPLACE(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "RegexReplace"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; + } + + Operand args3 = GetText_3(engine, tempParameter); + if (args3.IsError() || args3.IsNone()) { + return args3; + } + + try { + String result = Pattern.compile(args2.TextValue()).matcher(args1.TextValue()).replaceAll(args3.TextValue()); + return Operand.Create(result); + } catch (Exception e) { + return ParameterError(2); + } + } + + @Override + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func3.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java index f2ad65641..7ab01443b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java @@ -1,53 +1,67 @@ package toolgood.algorithm.internals.functions.csharp; +import java.lang.StringBuilder; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_STARTSWITH extends Function_3 { + public Function_STARTSWITH(FunctionBase[] funcs) { + super(funcs); + } -public class Function_STARTSWITH extends Function_3 { - public Function_STARTSWITH(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "StartsWith"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "StartsWith", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "StartsWith", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } + String text = args1.TextValue(); if (func3 == null) { return Operand.Create(text.startsWith(args2.TextValue())); } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotBoolean()) { - args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "StartsWith", 3); - if (args3.IsError()) { - return args3; - } + + Operand args3 = GetBoolean_3(engine, tempParameter); + if (args3.IsError() || args3.IsNone()) { + return args3; } + if (args3.BooleanValue()) { return Operand.Create(text.toLowerCase().startsWith(args2.TextValue().toLowerCase())); - } else { - return Operand.Create(text.startsWith(args2.TextValue())); } + return Operand.Create(text.startsWith(args2.TextValue())); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "StartsWith"); + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, + OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN, null, null); + } } } From d321e1cc7f8ef987fb550cbf4bd06a620f4a9daa Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 09:03:46 +0800 Subject: [PATCH 47/98] fix --- .../toolgood/algorithm/AlgorithmEngine.java | 32 +- .../main/java/toolgood/algorithm/Operand.java | 398 +++++------------- .../toolgood/algorithm/internals/MyDate.java | 386 ----------------- .../internals/functions/FunctionBase.java | 36 +- .../functions/csharp/Function_GUID.java | 23 +- .../functions/csharp/Function_HAS.java | 58 ++- .../functions/csharp/Function_HASVALUE.java | 56 ++- .../functions/csharp/Function_INDEXOF.java | 106 ++--- .../functions/csharp/Function_ISREGEX.java | 56 ++- .../functions/csharp/Function_JOIN.java | 69 +-- .../csharp/Function_LASTINDEXOF.java | 104 ++--- .../csharp/Function_LOOKCEILING.java | 68 +-- .../functions/csharp/Function_LOOKFLOOR.java | 61 +-- .../functions/csharp/Function_REGEX.java | 70 +-- .../functions/csharp/Function_REMOVEEND.java | 72 ++-- .../csharp/Function_REMOVESTART.java | 72 ++-- .../functions/csharp/Function_SPLIT.java | 59 ++- .../functions/csharp/Function_SUBSTRING.java | 84 ++-- .../functions/csharp/Function_TRIMEND.java | 55 ++- .../functions/csharp/Function_TRIMSTART.java | 56 ++- .../csharpsecurity/Function_HMACMD5.java | 96 +++-- .../csharpsecurity/Function_HMACSHA1.java | 96 +++-- .../csharpsecurity/Function_HMACSHA256.java | 96 +++-- .../csharpsecurity/Function_HMACSHA512.java | 96 +++-- .../csharpsecurity/Function_MD5.java | 71 ++-- .../csharpsecurity/Function_SHA1.java | 71 ++-- .../csharpsecurity/Function_SHA256.java | 71 ++-- .../csharpsecurity/Function_SHA512.java | 71 ++-- .../functions/financial/Function_XNPV.java | 4 +- .../algorithm/litJson/FsmContext.java | 2 +- .../toolgood/algorithm/litJson/JsonData.java | 78 ++-- .../algorithm/litJson/JsonException.java | 18 +- .../algorithm/litJson/JsonMapper.java | 12 +- .../algorithm/litJson/JsonReader.java | 109 ++--- .../toolgood/algorithm/litJson/JsonToken.java | 27 +- .../toolgood/algorithm/litJson/JsonType.java | 19 +- .../toolgood/algorithm/litJson/Lexer.java | 74 ++-- .../algorithm/litJson/ParserToken.java | 46 +- .../toolgood/algorithm/operands/KeyValue.java | 14 +- .../toolgood/algorithm/operands/MyDate.java | 267 ++++++++++++ .../algorithm/operands/OperandArray.java | 48 +-- .../algorithm/operands/OperandBigDecimal.java | 61 ++- .../algorithm/operands/OperandBoolean.java | 34 +- .../algorithm/operands/OperandError.java | 56 ++- .../algorithm/operands/OperandInt.java | 61 ++- .../algorithm/operands/OperandJson.java | 71 ++-- .../algorithm/operands/OperandKeyValue.java | 22 +- .../operands/OperandKeyValueList.java | 91 ++-- .../algorithm/operands/OperandMyDate.java | 40 +- .../algorithm/operands/OperandNone.java | 20 +- .../algorithm/operands/OperandNull.java | 14 +- .../algorithm/operands/OperandString.java | 195 ++++----- 52 files changed, 1851 insertions(+), 2121 deletions(-) delete mode 100644 java/src/main/java/toolgood/algorithm/internals/MyDate.java create mode 100644 java/src/main/java/toolgood/algorithm/operands/MyDate.java diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java index cfd126479..85578df8a 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java @@ -9,19 +9,19 @@ import toolgood.algorithm.enums.DistanceUnitType; import toolgood.algorithm.enums.MassUnitType; import toolgood.algorithm.enums.VolumeUnitType; -import toolgood.algorithm.internals.MyDate; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.visitors.AntlrErrorTextWriter; import toolgood.algorithm.math.mathLexer; import toolgood.algorithm.math.mathParser; +import toolgood.algorithm.operands.MyDate; import toolgood.algorithm.internals.visitors.MathFunctionVisitor; public class AlgorithmEngine { public int ExcelIndex = 1; /** - * 使用 本地时间�?影响 时间截转�? + * 使用 本地时间�?影响 时间截转�? */ public boolean UseLocalTime = true; @@ -46,19 +46,19 @@ public class AlgorithmEngine { public MassUnitType MassUnit = MassUnitType.KG; /** - * 最后一个错�? + * 最后一个错�? */ private String LastError; /** - * 获取最后一个错�? + * 获取最后一个错�? */ public String getLastError() { return LastError; } /** - * 设置最后一个错�? + * 设置最后一个错�? */ public void SetLastError(String error) { LastError = error; @@ -72,21 +72,21 @@ public void setUseExcelIndex(boolean value) { } /** - * 自定义参�?请重写此方法 + * 自定义参�?请重写此方法 */ public Operand getParameter(String parameter) { return Operand.Error("Parameter [" + parameter + "] is missing."); } /** - * 自定义函�?请重写此方法 + * 自定义函�?请重写此方法 */ public Operand executeDiyFunction(String parameter, List args) { return Operand.Error("DiyFunction [" + parameter + "] is missing."); } /** - * 编译公式,默�? + * 编译公式,默�? */ public FunctionBase Parse(String exp) throws Exception { LastError = null; @@ -117,7 +117,7 @@ public Operand Evaluate(FunctionBase function) { } /** - * 执行函数,如果异常,返回默认�? + * 执行函数,如果异常,返回默认�? */ public short TryEvaluate(String exp, short def) { try { @@ -138,7 +138,7 @@ public short TryEvaluate(String exp, short def) { } /** - * 执行函数,如果异常,返回默认�? + * 执行函数,如果异常,返回默认�? */ public int TryEvaluate(String exp, int def) { try { @@ -159,7 +159,7 @@ public int TryEvaluate(String exp, int def) { } /** - * 执行函数,如果异常,返回默认�? + * 执行函数,如果异常,返回默认�? */ public long TryEvaluate(String exp, long def) { try { @@ -180,7 +180,7 @@ public long TryEvaluate(String exp, long def) { } /** - * 执行函数,如果异常,返回默认�? + * 执行函数,如果异常,返回默认�? */ public float TryEvaluate(String exp, float def) { try { @@ -201,7 +201,7 @@ public float TryEvaluate(String exp, float def) { } /** - * 执行函数,如果异常,返回默认�? + * 执行函数,如果异常,返回默认�? */ public double TryEvaluate(String exp, double def) { try { @@ -222,7 +222,7 @@ public double TryEvaluate(String exp, double def) { } /** - * 执行函数,如果异常,返回默认�? + * 执行函数,如果异常,返回默认�? */ public String TryEvaluate(String exp, String def) { try { @@ -243,7 +243,7 @@ public String TryEvaluate(String exp, String def) { } /** - * 执行函数,如果异常,返回默认�? + * 执行函数,如果异常,返回默认�? */ public boolean TryEvaluate(String exp, boolean def) { try { @@ -264,7 +264,7 @@ public boolean TryEvaluate(String exp, boolean def) { } /** - * 执行函数,如果异常,返回默认�? + * 执行函数,如果异常,返回默认�? */ public MyDate TryEvaluate_MyDate(String exp, MyDate def) { try { diff --git a/java/src/main/java/toolgood/algorithm/Operand.java b/java/src/main/java/toolgood/algorithm/Operand.java index 4f9c0ce39..57d1c7612 100644 --- a/java/src/main/java/toolgood/algorithm/Operand.java +++ b/java/src/main/java/toolgood/algorithm/Operand.java @@ -1,271 +1,157 @@ -/** - * 閹垮秳缍旈弫? - */ package toolgood.algorithm; import java.math.BigDecimal; -import java.util.List; +import java.math.RoundingMode; import java.util.ArrayList; import java.util.Collection; +import java.util.List; + import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.operands.MyDate; +import toolgood.algorithm.operands.OperandArray; +import toolgood.algorithm.operands.OperandBigDecimal; +import toolgood.algorithm.operands.OperandBoolean; +import toolgood.algorithm.operands.OperandError; +import toolgood.algorithm.operands.OperandInt; +import toolgood.algorithm.operands.OperandJson; +import toolgood.algorithm.operands.OperandMyDate; +import toolgood.algorithm.operands.OperandNull; +import toolgood.algorithm.operands.OperandNone; +import toolgood.algorithm.operands.OperandString; public abstract class Operand { - /** - * 閻楀牊婀伴崣? - */ - public static final Operand VERSION = new OperandString("ToolGood.Algorithm 6.1"); - - /** - * True - */ - public static final Operand TRUE = new OperandBoolean(true); - - /** - * False - */ - public static final Operand FALSE = new OperandBoolean(false); - - /** - * One - */ - public static final Operand ONE = Operand.Create(new BigDecimal("1")); - - /** - * Zero - */ - public static final Operand ZERO = Operand.Create(new BigDecimal("0")); - - /** - * Null - */ - public static final Operand NULL_OPERAND = new OperandNull(); - - /** - * None閿涘牏鏁ゆ禍搴″棘閺佹壆琚崹瀣腹閺傤叏绱漀oneEngine 鏉╂柨娲栧銈咃拷纭风礆 - */ + public static final Operand Version = new OperandString("ToolGood.Algorithm 6.2"); + + public static final Operand True = new OperandBoolean(true); + + public static final Operand False = new OperandBoolean(false); + + public static final Operand One; + + public static final Operand Zero; + + public static final Operand Null = new OperandNull(); + public static final Operand None = new OperandNone(); - // 閺佸瓨鏆熺紓鎾崇摠閼煎啫娲�: -1000 ~ 1000閿涘苯鍙�2001娑擃亜锟�? - private static final int INT_CACHE_OFFSET = 1000; - private static final int INT_CACHE_SIZE = 2001; - private static final Operand[] INT_CACHE = new Operand[INT_CACHE_SIZE]; - + private static final int IntCacheOffset = 1000; + private static final int IntCacheSize = 2001; + private static final Operand[] IntCache = new Operand[IntCacheSize]; + static { - for (int i = 0; i < INT_CACHE_SIZE; i++) { - INT_CACHE[i] = new OperandInt(i - INT_CACHE_OFFSET); + for (int i = 0; i < IntCacheSize; i++) { + IntCache[i] = new OperandInt(i - IntCacheOffset); } - // ONE閸滃ERO瀹歌尙绮¢崷銊ュ灥婵瀵查弮鎯邦啎缂冾噯绱濇稉宥夋付鐟曚礁婀潻娆撳櫡闁插秵鏌婄拋鍓х枂 + One = Operand.Create(1); + Zero = Operand.Create(0); } - /** - * 閺勵垰鎯佹稉铏光敄閸�? - */ + public boolean IsErrorOrNone() { return false; } + + public boolean IsNone() { return false; } + public boolean IsNull() { return false; } - /** - * 閺勵垰鎯佹稉娲姜缁屽搫锟�? - */ - public boolean IsNotNull() { return true; } - - /** - * 閺勵垰鎯侀弫鏉跨摟 - */ + public boolean IsNumber() { return false; } - /** - * 閺勵垰鎯侀棃鐐存殶鐎�? - */ - public boolean IsNotNumber() { return true; } - - /** - * 閺勵垰鎯佺�涙顑佹稉? - */ + public boolean IsText() { return false; } - /** - * 閺勵垰鎯侀棃鐐茬摟缁楋缚瑕� - */ - public boolean IsNotText() { return true; } - - /** - * 閺勵垰鎯佺敮鍐ㄧ毜閸�? - */ + public boolean IsBoolean() { return false; } - /** - * 閺勵垰鎯侀棃鐐茬鐏忔柨锟�? - */ - public boolean IsNotBoolean() { return true; } - /** - * 閺勵垰鎯侀弫鎵矋 - */ + public boolean IsArray() { return false; } - /** - * 閺勵垰鎯侀棃鐐存殶缂�? - */ - public boolean IsNotArray() { return true; } - /** - * 閺勵垰鎯侀弮銉︽埂 - */ + public boolean IsDate() { return false; } - /** - * 閺勵垰鎯侀棃鐐存)閺�? - */ - public boolean IsNotDate() { return true; } - /** - * 閺勵垰鎯丣son鐎电钖� - */ + public boolean IsJson() { return false; } - /** - * 閺勵垰鎯侀棃婵瞫on鐎电钖� - */ - public boolean IsNotJson() { return true; } - /** - * 閺勵垰鎯丣son閺佹壆绮� - */ + public boolean IsArrayJson() { return false; } - /** - * 閺勵垰鎯侀棃婵瞫on閺佹壆绮� - */ - public boolean IsNotArrayJson() { return true; } - - /** - * 閺勵垰鎯侀崙娲晩 - */ + public boolean IsError() { return false; } - /** - * 闁挎瑨顕ゆ穱鈩冧紖 - */ public String ErrorMsg() { return null; } - - /** - * 閹垮秳缍旈弫鎵閸�? - */ - public abstract OperandType Type(); - + public abstract OperandType Type(); - /** - * 閺佹澘鐡ч崐? - */ public BigDecimal NumberValue() { throw new UnsupportedOperationException(); } - /** - * double閸�? - */ public double DoubleValue() { throw new UnsupportedOperationException(); } - /** - * int閸�? - */ public int IntValue() { throw new UnsupportedOperationException(); } - /** - * long閸�? - */ public long LongValue() { throw new UnsupportedOperationException(); } - /** - * 鐎涙顑佹稉鎻掞拷? - */ public String TextValue() { throw new UnsupportedOperationException(); } - /** - * 鐢啫鐨甸崐? - */ public boolean BooleanValue() { throw new UnsupportedOperationException(); } - /** - * 閺佹壆绮嶉崐? - */ public List ArrayValue() { throw new UnsupportedOperationException(); } - /** - * Json閸�? - */ - JsonData JsonValue() { throw new UnsupportedOperationException(); } + public JsonData JsonValue() { throw new UnsupportedOperationException(); } - /** - * 閺冨爼妫块崐? - */ public MyDate DateValue() { throw new UnsupportedOperationException(); } - - - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Create(boolean obj) { - return obj ? TRUE : FALSE; + return obj ? True : False; } - - - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Create(short obj) { - if (obj >= -INT_CACHE_OFFSET && obj <= INT_CACHE_OFFSET) { - return INT_CACHE[obj + INT_CACHE_OFFSET]; - } - return new OperandInt(obj); + return IntCache[obj + IntCacheOffset]; } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Create(int obj) { - if (obj >= -INT_CACHE_OFFSET && obj <= INT_CACHE_OFFSET) { - return INT_CACHE[obj + INT_CACHE_OFFSET]; + if (obj >= -IntCacheOffset && obj <= IntCacheOffset) { + return IntCache[obj + IntCacheOffset]; } return new OperandInt(obj); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Create(long obj) { - if (obj >= -INT_CACHE_OFFSET && obj <= INT_CACHE_OFFSET) { - return INT_CACHE[(int)obj + INT_CACHE_OFFSET]; + if (obj >= -IntCacheOffset && obj <= IntCacheOffset) { + return IntCache[(int) obj + IntCacheOffset]; + } + return new OperandBigDecimal(new BigDecimal(obj)); + } + + public static Operand Create(int obj, boolean isUnsigned) { + if (obj <= IntCacheOffset) { + return IntCache[obj + IntCacheOffset]; + } + return new OperandBigDecimal(new BigDecimal(obj)); + } + + public static Operand Create(long obj, boolean isUnsigned) { + if (obj <= IntCacheOffset) { + return IntCache[(int) obj + IntCacheOffset]; } return new OperandBigDecimal(new BigDecimal(obj)); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Create(float obj) { + if (obj == Math.floor(obj) && obj >= -IntCacheOffset && obj <= IntCacheOffset) { + return IntCache[(int) obj + IntCacheOffset]; + } return new OperandBigDecimal(new BigDecimal(obj)); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Create(double obj) { + if (obj == Math.floor(obj) && obj >= -IntCacheOffset && obj <= IntCacheOffset) { + return IntCache[(int) obj + IntCacheOffset]; + } return new OperandBigDecimal(new BigDecimal(obj)); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Create(BigDecimal obj) { + if (obj.setScale(0, RoundingMode.DOWN).compareTo(obj) == 0 && obj.compareTo(BigDecimal.valueOf(-IntCacheOffset)) >= 0 && obj.compareTo(BigDecimal.valueOf(IntCacheOffset)) <= 0) { + return IntCache[obj.intValue() + IntCacheOffset]; + } return new OperandBigDecimal(obj); } - - - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Create(String obj) { - if (obj == null) { - return Operand.CreateNull(); - } - return new OperandString(obj); + return obj == null ? Null : new OperandString(obj); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand CreateJson(String txt) { if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { try { @@ -274,188 +160,102 @@ public static Operand CreateJson(String txt) { } catch (Exception e) { } } - return Operand.Error("Convert to json Error!"); + return Operand.Error("Convert to json error!"); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Create(MyDate obj) { return new OperandMyDate(obj); } - - - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Create(JsonData obj) { return new OperandJson(obj); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Create(List obj) { return new OperandArray(obj); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ - public static Operand Create(String[] obj) { - List array = new ArrayList<>(); + public static Operand Create(Collection obj) { + List array = new ArrayList<>(obj.size()); for (String item : obj) { array.add(Create(item)); } return new OperandArray(array); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ - public static Operand Create(Double[] obj) { - List array = new ArrayList<>(); + public static Operand CreateDoubleCollection(Collection obj) { + List array = new ArrayList<>(obj.size()); for (Double item : obj) { - array.add(Create(new BigDecimal(item.toString()))); - } - return new OperandArray(array); - } - - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ - public static Operand Create(BigDecimal[] obj) { - List array = new ArrayList<>(); - for (BigDecimal item : obj) { array.add(Create(item)); } return new OperandArray(array); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ - public static Operand Create(Integer[] obj) { - List array = new ArrayList<>(); + public static Operand CreateIntCollection(Collection obj) { + List array = new ArrayList<>(obj.size()); for (Integer item : obj) { array.add(Create(item)); } return new OperandArray(array); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ - public static Operand Create(Boolean[] obj) { - List array = new ArrayList<>(); + public static Operand CreateBooleanCollection(Collection obj) { + List array = new ArrayList<>(obj.size()); for (Boolean item : obj) { array.add(Create(item)); } return new OperandArray(array); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Error(String msg) { return new OperandError(msg); } - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ public static Operand Error(String msg, Object... args) { - return new OperandError(String.format(msg, args)); - } - - /** - * 閸掓稑缂撻幙宥勭稊閺�? - */ - public static Operand CreateNull() { - return new OperandNull(); + return new OperandError(msg, args); } - - - - - /** - * 鏉烆剚鏆熼崐鑲╄閸�? - */ public Operand ToNumber(String errorMessage) { - return Error(errorMessage != null ? errorMessage : "Convert to number Error!"); + return Error(errorMessage != null ? errorMessage : "Convert to number error!"); } - /** - * 鏉烆剚鏆熼崐鑲╄閸�? - */ public Operand ToNumber(String errorMessage, Object... args) { - return Error(String.format(errorMessage, args)); + return new OperandError(errorMessage, args); } - /** - * 鏉炵悿ool缁鐎� - */ public Operand ToBoolean(String errorMessage) { - return Error(errorMessage != null ? errorMessage : "Convert to bool Error!"); + return Error(errorMessage != null ? errorMessage : "Convert to bool error!"); } - /** - * 鏉炵悿ool缁鐎� - */ public Operand ToBoolean(String errorMessage, Object... args) { - return Error(String.format(errorMessage, args)); + return new OperandError(errorMessage, args); } - /** - * 鏉炵憘tring缁鐎� - */ public Operand ToText(String errorMessage) { - return Error(errorMessage != null ? errorMessage : "Convert to string Error!"); + return Error(errorMessage != null ? errorMessage : "Convert to string error!"); } - /** - * 鏉炵憘tring缁鐎� - */ public Operand ToText(String errorMessage, Object... args) { - return Error(String.format(errorMessage, args)); + return new OperandError(errorMessage, args); } - /** - * 鏉炵悎yDate缁鐎� - */ public Operand ToMyDate(String errorMessage) { - return Error(errorMessage != null ? errorMessage : "Convert to date Error!"); + return Error(errorMessage != null ? errorMessage : "Convert to date error!"); } - /** - * 鏉炵悎yDate缁鐎� - */ public Operand ToMyDate(String errorMessage, Object... args) { - return Error(String.format(errorMessage, args)); + return new OperandError(errorMessage, args); } - /** - * 鏉炵徆rray缁鐎� - */ public Operand ToArray(String errorMessage) { - return Error(errorMessage != null ? errorMessage : "Convert to array Error!"); + return Error(errorMessage != null ? errorMessage : "Convert to array error!"); } - /** - * 鏉炵徆rray缁鐎� - */ public Operand ToArray(String errorMessage, Object... args) { - return Error(String.format(errorMessage, args)); + return new OperandError(errorMessage, args); } - /** - * 鏉炵悅son缁鐎� - */ public Operand ToJson(String errorMessage) { - return Error(errorMessage != null ? errorMessage : "Convert to json Error!"); + return Error(errorMessage != null ? errorMessage : "Convert to json error!"); } - - } diff --git a/java/src/main/java/toolgood/algorithm/internals/MyDate.java b/java/src/main/java/toolgood/algorithm/internals/MyDate.java deleted file mode 100644 index 2ab94a59f..000000000 --- a/java/src/main/java/toolgood/algorithm/internals/MyDate.java +++ /dev/null @@ -1,386 +0,0 @@ -package toolgood.algorithm.internals; - -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; - -import java.math.BigDecimal; -import java.math.MathContext; -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.temporal.ChronoUnit; -import java.util.Date; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class MyDate { - public Integer Year; - public Integer Month; - public Integer Day; - public int Hour; - public int Minute; - public int Second; - - // public MyDate(TimeSpan dt) { - // Day = dt.Days; - // Hour = dt.Hours; - // Minute = dt.Minutes; - // Second = dt.Seconds; - // } - - private MyDate() { - } - - public MyDate(int year, int month, int day, int hour, int minute, int second) { - Year = year; - Month = month; - Day = day; - Hour = hour; - Minute = minute; - Second = second; - } - - public MyDate(Date dt) { - DateTime dTime = new DateTime(dt); - Year = dTime.getYear(); - Month = dTime.getMonthOfYear(); - Day = dTime.getDayOfMonth(); - Hour = dTime.getHourOfDay(); - Minute = dTime.getMinuteOfHour(); - Second = dTime.getSecondOfMinute(); - } - - public MyDate(DateTime dTime) { - Year = dTime.getYear(); - Month = dTime.getMonthOfYear(); - Day = dTime.getDayOfMonth(); - Hour = dTime.getHourOfDay(); - Minute = dTime.getMinuteOfHour(); - Second = dTime.getSecondOfMinute(); - } - - public MyDate(BigDecimal num) { - int days = num.intValue(); - if (days > 365) { - LocalDate start = LocalDate.of(1900, 1, 1); - start = start.plusDays(days - 2); - Year = start.getYear(); - Month = start.getMonthValue(); - Day = start.getDayOfMonth(); - } else { - Day = days; - } - BigDecimal d = num.subtract(new BigDecimal(days)); - Hour = d.multiply(new BigDecimal(24)).intValue(); - Minute = d.multiply(new BigDecimal(24)).subtract(new BigDecimal(Hour)).multiply(new BigDecimal(60)).intValue(); - Second = d.multiply(new BigDecimal(24)).subtract(new BigDecimal(Hour)).multiply(new BigDecimal(60)) - .subtract(new BigDecimal(Minute)).multiply(new BigDecimal(60)).intValue(); - // 防止秒数出错 - if (Second == 60) { - Second = 0; - Minute = Minute + 1; - if (Minute == 60) { - Minute = 0; - Hour = Hour + 1; - } - } - } - - public MyDate(double num) { - int days = (int) num; - if (days > 365) { - LocalDate start = LocalDate.of(1900, 1, 1); - start = start.plusDays(days - 2); - Year = start.getYear(); - Month = start.getMonthValue(); - Day = start.getDayOfMonth(); - } else { - Day = days; - } - double d = num - days; - Hour = (int) (d * 24); - Minute = (int) ((d * 24 - Hour) * 60.0); - Second = (int) Math.round(((d * 24 - Hour) * 60.0 - Minute) * 60.0); - // 防止秒数出错 - if (Second == 60) { - Second = 0; - Minute = Minute + 1; - if (Minute == 60) { - Minute = 0; - Hour = Hour + 1; - } - } - } - - public static MyDate parse(String txt) { - String t = txt.trim(); - Matcher m = Pattern - .compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$") - .matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Year = Integer.parseInt(m.group(1)); - date.Month = Integer.parseInt(m.group(2)); - date.Day = Integer.parseInt(m.group(3)); - date.Hour = Integer.parseInt(m.group(4)); - date.Minute = Integer.parseInt(m.group(5)); - date.Second = Integer.parseInt(m.group(6)); - return date; - } - m = Pattern - .compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$") - .matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Year = Integer.parseInt(m.group(1)); - date.Month = Integer.parseInt(m.group(2)); - date.Day = Integer.parseInt(m.group(3)); - date.Hour = Integer.parseInt(m.group(4)); - date.Minute = Integer.parseInt(m.group(5)); - date.Second = Integer.parseInt(m.group(6)); - return date; - } - - m = Pattern.compile("(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Year = Integer.parseInt(m.group(1)); - date.Month = Integer.parseInt(m.group(2)); - date.Day = Integer.parseInt(m.group(3)); - date.Hour = Integer.parseInt(m.group(4)); - date.Minute = Integer.parseInt(m.group(5)); - return date; - } - m = Pattern.compile("(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Year = Integer.parseInt(m.group(1)); - date.Month = Integer.parseInt(m.group(2)); - date.Day = Integer.parseInt(m.group(3)); - date.Hour = Integer.parseInt(m.group(4)); - date.Minute = Integer.parseInt(m.group(5)); - return date; - } - - m = Pattern.compile("(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Year = Integer.parseInt(m.group(1)); - date.Month = Integer.parseInt(m.group(2)); - date.Day = Integer.parseInt(m.group(3)); - return date; - } - m = Pattern.compile("(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d)").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Year = Integer.parseInt(m.group(1)); - date.Month = Integer.parseInt(m.group(2)); - date.Day = Integer.parseInt(m.group(3)); - return date; - } - m = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Day = Integer.parseInt(m.group(1)); - date.Hour = Integer.parseInt(m.group(2)); - date.Minute = Integer.parseInt(m.group(3)); - date.Second = Integer.parseInt(m.group(4)); - return date; - } - m = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Hour = Integer.parseInt(m.group(1)); - date.Minute = Integer.parseInt(m.group(2)); - date.Second = Integer.parseInt(m.group(3)); - return date; - } - m = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d)$").matcher(t); - if (m.find()) { - MyDate date = new MyDate(); - date.Hour = Integer.parseInt(m.group(1)); - date.Minute = Integer.parseInt(m.group(2)); - return date; - } - return null; - } - - public static MyDate now() { - return new MyDate(DateTime.now()); - } - - @Override - public String toString() { - StringBuffer stringBuffer = new StringBuffer(); - if (Year != null && Year > 0) { - stringBuffer.append(Year); - stringBuffer.append("-"); - if (Month < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Month); - stringBuffer.append("-"); - if (Day < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Day); - - stringBuffer.append(" "); - if (Hour < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Hour); - stringBuffer.append(":"); - if (Minute < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Minute); - stringBuffer.append(":"); - if (Second < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Second); - } else { - if (Day != null && Day > 0) { - stringBuffer.append(Day); - stringBuffer.append(" "); - } - if (Hour < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Hour); - stringBuffer.append(":"); - if (Minute < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Minute); - stringBuffer.append(":"); - if (Second < 10) { - stringBuffer.append("0"); - } - stringBuffer.append(Second); - } - - return stringBuffer.toString(); - } - - public String toString(String f) { - Date date; - if (Year != null && Year > 1900) { - date = new Date(Year, Month, Day, Hour, Minute, Second); - } else if (Day != null) { - date = new Date(1900, 1, Day, Hour, Minute, Second); - } else { - date = new Date(1900, 1, 0, Hour, Minute, Second); - } - SimpleDateFormat sd = new SimpleDateFormat(f); - return sd.format(date); - } - - public DateTime ToDateTime() { - return new DateTime(Year, Month, Day, Hour, Minute, Second, DateTimeZone.UTC); - } - - public DateTime ToDateTime(DateTimeZone zoo) { - return new DateTime(Year, Month, Day, Hour, Minute, Second, zoo); - } - - public int DayOfWeek() { - return new DateTime(Year, Month, Day, 0, 0, 0, DateTimeZone.UTC).dayOfWeek().get(); - } - - public int DayOfYear() { - return new DateTime(Year, Month, Day, 0, 0, 0, DateTimeZone.UTC).getDayOfYear(); - } - - public MyDate AddYears(int d) { - return new MyDate(ToDateTime().plusYears(d)); - } - - public MyDate AddMonths(int d) { - return new MyDate(ToDateTime().plusMonths(d)); - } - - public MyDate AddDays(int d) { - return new MyDate(ToDateTime().plusDays(d)); - } - - public MyDate AddHours(int d) { - return new MyDate(ToDateTime().plusHours(d)); - } - - public MyDate AddMinutes(int d) { - return new MyDate(ToDateTime().plusMinutes(d)); - } - - public MyDate AddSeconds(int d) { - return new MyDate(ToDateTime().plusSeconds(d)); - } - - public BigDecimal ToNumber() { - BigDecimal result = new BigDecimal(Second).divide(new BigDecimal(60), MathContext.DECIMAL32); - result = result.add(new BigDecimal(Minute)).divide(new BigDecimal(60), MathContext.DECIMAL32); - result = result.add(new BigDecimal(Hour)).divide(new BigDecimal(24), MathContext.DECIMAL32); - - if (Year != null && Year > 1900) { - LocalDate start = LocalDate.of(Year, Month, Day); - LocalDate end = LocalDate.of(1900, 1, 1); - long days = ChronoUnit.DAYS.between(end, start) + 2; - return result.add(new BigDecimal(days)); - } - if (Day != null) { - return result.add(new BigDecimal(Day)); - } - return result; - } - - public MyDate ADD(MyDate num) { - DateTime dt = this.ToDateTime(); - if (num.Year != null) { - dt = dt.plusYears(num.Year); - } - if (num.Month != null) { - dt = dt.plusMonths(num.Month); - } - if (num.Day != null) { - dt = dt.plusDays(num.Day); - } - dt = dt.plusHours(num.Hour); - dt = dt.plusMinutes(num.Minute); - dt = dt.plusSeconds(num.Second); - return new MyDate(dt); - } - - public MyDate SUB(MyDate num) { - DateTime dt = this.ToDateTime(); - if (num.Year != null) { - dt = dt.plusYears(-num.Year); - } - if (num.Month != null) { - dt = dt.plusMonths(-num.Month); - } - if (num.Day != null) { - dt = dt.plusDays(-num.Day); - } - dt = dt.plusHours(-num.Hour); - dt = dt.plusMinutes(-num.Minute); - dt = dt.plusSeconds(-num.Second); - return new MyDate(dt); - } - - public MyDate ADD(BigDecimal num) { - return new MyDate(this.ToNumber().add(num)); - } - - public MyDate SUB(BigDecimal num) { - return new MyDate(this.ToNumber().subtract(num)); - } - - public MyDate MUL(BigDecimal num) { - return new MyDate(this.ToNumber().multiply(num)); - } - - public MyDate DIV(BigDecimal num) { - return new MyDate(this.ToNumber().divide(num, MathContext.DECIMAL32)); - } - -} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index ef369ec7e..028d15ef2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -12,8 +12,8 @@ import java.util.List; import java.util.function.BiFunction; -import toolgood.algorithm.internals.MyDate; import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.operands.MyDate; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; @@ -36,14 +36,14 @@ public String Name() { public abstract Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter); /** - * 进行计算(无临时参数�? + * 进行计算(无临时参数�? */ public Operand Evaluate(AlgorithmEngine work) { return Evaluate(work, null); } /** - * 获取结果类型(默认返�?NONE,子类可覆盖�? + * 获取结果类型(默认返�?NONE,子类可覆盖�? */ public OperandType GetResultType() { return OperandType.NONE; @@ -73,35 +73,35 @@ public void GetParameterTypes(NoneEngine noneEngine, List result, // region ConvertToXxx helpers /** - * 转换为文本类�? + * 转换为文本类�? */ protected Operand ConvertToText(Operand arg, int paramIndex) { return arg.ToText("Function '%s' parameter %d is error!", Name(), paramIndex); } /** - * 转换为布尔类�? + * 转换为布尔类�? */ protected Operand ConvertToBoolean(Operand arg, int paramIndex) { return arg.ToBoolean("Function '%s' parameter %d is error!", Name(), paramIndex); } /** - * 转换为数字类�? + * 转换为数字类�? */ protected Operand ConvertToNumber(Operand arg, int paramIndex) { return arg.ToNumber("Function '%s' parameter %d is error!", Name(), paramIndex); } /** - * 转换为数组类�? + * 转换为数组类�? */ protected Operand ConvertToArray(Operand arg, int paramIndex) { return arg.ToArray("Function '%s' parameter %d is error!", Name(), paramIndex); } /** - * 转换为日期类�? + * 转换为日期类�? */ protected Operand ConvertToDate(Operand arg, int paramIndex) { return arg.ToMyDate("Function '%s' parameter %d is error!", Name(), paramIndex); @@ -144,7 +144,7 @@ protected Operand Div0Error() { //region TryEvaluate /** - * 执行函数,如果异常,返回默认�? + * 执行函数,如果异常,返回默认�? * * @param work * @param def @@ -169,7 +169,7 @@ public short TryEvaluate(AlgorithmEngine work, short def, BiFunction tempParameter) { + public String Name() { + return "Guid"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { return Operand.Create(UUID.randomUUID().toString()); } @@ -20,4 +26,9 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Has", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } if (args1.IsArrayJson()) { - return Operand.Create(((toolgood.algorithm.internals.OperandKeyValueList) args1).ContainsKey(args2)); + return Operand.Create(((OperandKeyValueList) args1).ContainsKey(args2)); } else if (args1.IsJson()) { Object json = args1.JsonValue(); - // 这里需要根据实际的 JSON 实现进行调整 - // 假设使用了某�?JSON 库,�?Gson �?Jackson - // 此处为简化实现,实际需要根据具体的 JSON 处理方式进行修改 return Operand.FALSE; } else if (args1.IsArray()) { OperandArray ar = (OperandArray) args1; for (Operand item : ar.ArrayValue()) { Operand t = item.ToText(); - if (t.IsError()) { + if (t.IsError() || t.IsNone()) { continue; } if (t.TextValue().equals(args2.TextValue())) { @@ -47,11 +53,17 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.JSON, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java index 984c77234..c68d62767 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java @@ -1,44 +1,50 @@ package toolgood.algorithm.internals.functions.csharp; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.OperandKeyValueList; +import toolgood.algorithm.internals.OperandArray; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_HASVALUE extends Function_2 { + public Function_HASVALUE(FunctionBase[] funcs) { + super(funcs); + } -public class Function_HASVALUE extends Function_2 { - public Function_HASVALUE(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "HasValue"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "HasValue", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } if (args1.IsArrayJson()) { return Operand.Create(((OperandKeyValueList) args1).ContainsValue(args2)); } else if (args1.IsJson()) { Object json = args1.JsonValue(); - // 这里需要根据实际的 JSON 实现进行调整 - // 假设使用了某�?JSON 库,�?Gson �?Jackson - // 此处为简化实现,实际需要根据具体的 JSON 处理方式进行修改 return Operand.FALSE; } else if (args1.IsArray()) { OperandArray ar = (OperandArray) args1; for (Operand item : ar.ArrayValue()) { Operand t = item.ToText(); - if (t.IsError()) { + if (t.IsError() || t.IsNone()) { continue; } if (t.TextValue().equals(args2.TextValue())) { @@ -47,11 +53,17 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.JSON, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java index 3f566b287..463706d72 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java @@ -1,74 +1,82 @@ package toolgood.algorithm.internals.functions.csharp; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_4; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_INDEXOF extends Function_4 { + public Function_INDEXOF(FunctionBase[] funcs) { + super(funcs); + } -public class Function_INDEXOF extends Function_4 { - public Function_INDEXOF(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { - super(func1, func2, func3, func4); + @Override + public String Name() { + return "IndexOf"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IndexOf", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "IndexOf", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } + String text = args1.TextValue(); if (func3 == null) { - return Operand.Create(text.indexOf(args2.TextValue()) + work.ExcelIndex); + return Operand.Create(text.indexOf(args2.TextValue()) + engine.ExcelIndex); } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "IndexOf", 3); - if (args3.IsError()) { - return args3; - } + + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsError() || args3.IsNone()) { + return args3; } + int startIndex = args3.IntValue() - engine.ExcelIndex; + if (startIndex < 0 || startIndex > text.length()) { + return ParameterError(3); + } + if (func4 == null) { - int startIndex = args3.IntValue(); - if (startIndex >= text.length()) { - return Operand.Create(-1 + work.ExcelIndex); - } - return Operand.Create(text.substring(startIndex).indexOf(args2.TextValue()) + startIndex + work.ExcelIndex); + return Operand.Create(text.substring(startIndex).indexOf(args2.TextValue()) + startIndex + engine.ExcelIndex); } - Operand args4 = func4.Evaluate(work, tempParameter); - if (args4.IsNotNumber()) { - args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "IndexOf", 4); - if (args4.IsError()) { - return args4; - } + + Operand args4 = GetNumber_4(engine, tempParameter); + if (args4.IsError() || args4.IsNone()) { + return args4; } - int startIndex = args3.IntValue(); int count = args4.IntValue(); - if (startIndex >= text.length()) { - return Operand.Create(-1 + work.ExcelIndex); + if (count < 0 || startIndex + count > text.length()) { + return ParameterError(4); } - int endIndex = Math.min(startIndex + count, text.length()); - String substring = text.substring(startIndex, endIndex); - int result = substring.indexOf(args2.TextValue()); - if (result == -1) { - return Operand.Create(-1 + work.ExcelIndex); - } - return Operand.Create(result + startIndex + work.ExcelIndex); + + return Operand.Create(text.indexOf(args2.TextValue(), startIndex, startIndex + count) + engine.ExcelIndex); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IndexOf"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + } + if (func4 != null) { + func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java index ee170a9c7..135bf394c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java @@ -1,39 +1,51 @@ package toolgood.algorithm.internals.functions.csharp; +import java.util.List; +import java.util.function.BiFunction; +import java.util.regex.Pattern; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; -import java.util.regex.Pattern; +public final class Function_ISREGEX extends Function_2 { + public Function_ISREGEX(FunctionBase[] funcs) { + super(funcs); + } -public class Function_ISREGEX extends Function_2 { - public Function_ISREGEX(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "IsRegex"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IsRegex", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "IsRegex", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } - boolean b = Pattern.matches(args2.TextValue(), args1.TextValue()); + + boolean b = Pattern.compile(args2.TextValue()).matcher(args1.TextValue()).find(); return Operand.Create(b); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IsRegex"); + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java index 96a95cbc8..9fe4e2ec0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java @@ -1,61 +1,67 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.lang.StringBuilder; import java.util.ArrayList; import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_JOIN extends Function_N { +public final class Function_JOIN extends Function_N { public Function_JOIN(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "Join"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } Operand args1 = args.get(0); if (args1.IsJson()) { Operand o = args1.ToArray(null); - if (!o.IsError()) { + if (!o.IsError() && !o.IsNone()) { args1 = o; } } if (args1.IsArray()) { - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args1, list); + List list = new ArrayList<>(args1.ArrayValue().size()); + boolean o = FunctionUtil.FlattenToList(args1, list); if (!o) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Join", 1); + return ParameterError(1); } - Operand args2 = args.get(1).ToText("Function '{0}' parameter {1} is error!", "Join", 2); - if (args2.IsError()) { + Operand args2 = ConvertToText(args.get(1), 2); + if (args2.IsError() || args2.IsNone()) { return args2; } return Operand.Create(String.join(args2.TextValue(), list)); } else { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Join", 1); - if (args1.IsError()) { + args1 = ConvertToText(args1, 1); + if (args1.IsError() || args1.IsNone()) { return args1; } - List list = new ArrayList<>(); + List list = new ArrayList<>(args.size()); for (int i = 1; i < args.size(); i++) { - boolean o = FunctionUtil.F_base_GetList(args.get(i), list); + boolean o = FunctionUtil.FlattenToList(args.get(i), list); if (!o) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Join", i + 1); + return ParameterError(i + 1); } } return Operand.Create(String.join(args1.TextValue(), list)); @@ -63,7 +69,14 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + for (FunctionBase item : funcs) { + item.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java index 4f21be1be..94ce9ffbb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java @@ -1,72 +1,82 @@ package toolgood.algorithm.internals.functions.csharp; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_4; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_LASTINDEXOF extends Function_4 { + public Function_LASTINDEXOF(FunctionBase[] funcs) { + super(funcs); + } -public class Function_LASTINDEXOF extends Function_4 { - public Function_LASTINDEXOF(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { - super(func1, func2, func3, func4); + @Override + public String Name() { + return "LastIndexOf"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "LastIndexOf", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "LastIndexOf", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } + String text = args1.TextValue(); if (func3 == null) { - return Operand.Create(text.lastIndexOf(args2.TextValue()) + work.ExcelIndex); + return Operand.Create(text.lastIndexOf(args2.TextValue()) + engine.ExcelIndex); } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LastIndexOf", 3); - if (args3.IsError()) { - return args3; - } + + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsError() || args3.IsNone()) { + return args3; + } + int startIndex = args3.IntValue() - engine.ExcelIndex; + if (startIndex < 0 || startIndex > text.length()) { + return ParameterError(3); } + if (func4 == null) { - int endIndex = args3.IntValue(); - if (endIndex < 0) { - return Operand.Create(-1 + work.ExcelIndex); - } - endIndex = Math.min(endIndex, text.length()); - return Operand.Create(text.substring(0, endIndex).lastIndexOf(args2.TextValue()) + work.ExcelIndex); + return Operand.Create(text.substring(0, startIndex).lastIndexOf(args2.TextValue()) + engine.ExcelIndex); } - Operand args4 = func4.Evaluate(work, tempParameter); - if (args4.IsNotNumber()) { - args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "LastIndexOf", 4); - if (args4.IsError()) { - return args4; - } + + Operand args4 = GetNumber_4(engine, tempParameter); + if (args4.IsError() || args4.IsNone()) { + return args4; } - int startIndex = args3.IntValue(); int count = args4.IntValue(); - if (startIndex < 0) { - return Operand.Create(-1 + work.ExcelIndex); + if (count < 0 || count > startIndex + 1) { + return ParameterError(4); } - int endIndex = Math.min(startIndex + count, text.length()); - String substring = text.substring(0, endIndex); - int result = substring.lastIndexOf(args2.TextValue()); - return Operand.Create(result + work.ExcelIndex); + + return Operand.Create(text.lastIndexOf(args2.TextValue(), startIndex, startIndex - count + 1) + engine.ExcelIndex); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "LastIndexOf"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + } + if (func4 != null) { + func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java index 2d28eec1f..4bf2fa0d7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java @@ -1,52 +1,54 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.NoneEngine; +class Function_LOOKCEILING extends Function_2 { + public Function_LOOKCEILING(FunctionBase[] funcs) { + super(funcs); + } -public class Function_LOOKCEILING extends Function_2 { - public Function_LOOKCEILING(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "LookCeiling"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LookCeiling", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotArray()) { - args2 = args2.ToArray("Function '{0}' parameter {1} is error!", "LookCeiling", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetArray_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } List list = new ArrayList<>(); - FunctionUtil.F_base_GetList(args2, list); + FunctionUtil.FlattenToList(args2, list); if (list.isEmpty()) { - return Operand.Error("Function '{0}' parameter {1} is error!", "LookCeiling", 2); + return ParameterError(2); } - list.sort(Collections.reverseOrder()); + Collections.sort(list); BigDecimal value = args1.NumberValue(); - BigDecimal result = list.get(0); + BigDecimal result = list.get(list.size() - 1); if (result.compareTo(value) == 0) { return args1; } - for (int i = 1; i < list.size(); i++) { + for (int i = list.size() - 2; i >= 0; i--) { BigDecimal val = list.get(i); if (val.compareTo(value) > 0) { result = val; @@ -60,7 +62,13 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java index c43e30dad..6893a218a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java @@ -1,43 +1,46 @@ package toolgood.algorithm.internals.functions.csharp; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.NoneEngine; +class Function_LOOKFLOOR extends Function_2 { + public Function_LOOKFLOOR(FunctionBase[] funcs) { + super(funcs); + } -public class Function_LOOKFLOOR extends Function_2 { - public Function_LOOKFLOOR(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "LookFloor"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LookFloor", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotArray()) { - args2 = args2.ToArray("Function '{0}' parameter {1} is error!", "LookFloor", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetArray_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } List list = new ArrayList<>(); - FunctionUtil.F_base_GetList(args2, list); + FunctionUtil.FlattenToList(args2, list); if (list.isEmpty()) { - return Operand.Error("Function '{0}' parameter {1} is error!", "LookFloor", 2); + return ParameterError(2); } Collections.sort(list); BigDecimal value = args1.NumberValue(); @@ -59,7 +62,13 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java index 5643f3ee8..66d5b6007 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java @@ -1,46 +1,60 @@ package toolgood.algorithm.internals.functions.csharp; +import java.util.List; +import java.util.function.BiFunction; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import toolgood.algorithm.internals.functions.NoneEngine; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +public final class Function_REGEX extends Function_2 { + public Function_REGEX(FunctionBase[] funcs) { + super(funcs); + } -public class Function_REGEX extends Function_2 { - public Function_REGEX(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Regex"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Regex", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Regex", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } - Pattern pattern = Pattern.compile(args2.TextValue()); - Matcher matcher = pattern.matcher(args1.TextValue()); - if (!matcher.find()) { - return Operand.Error("Function '{0}' is error!", "Regex"); + try { + Pattern pattern = Pattern.compile(args2.TextValue()); + Matcher matcher = pattern.matcher(args1.TextValue()); + if (!matcher.find()) { + return FunctionError(); + } + return Operand.Create(matcher.group()); + } catch (Exception e) { + return ParameterError(2); } - return Operand.Create(matcher.group()); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Regex"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java index 29137f634..7198ceafa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java @@ -1,49 +1,50 @@ package toolgood.algorithm.internals.functions.csharp; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_REMOVEEND extends Function_3 { + public Function_REMOVEEND(FunctionBase[] funcs) { + super(funcs); + } -public class Function_REMOVEEND extends Function_3 { - public Function_REMOVEEND(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "RemoveEnd"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "RemoveEnd", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "RemoveEnd", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } + boolean ignoreCase = false; if (func3 != null) { - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotBoolean()) { - args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "RemoveEnd", 3); - if (args3.IsError()) { - return args3; - } - } - if (args3.BooleanValue()) { - ignoreCase = true; + Operand args3 = GetBoolean_3(engine, tempParameter); + if (args3.IsError() || args3.IsNone()) { + return args3; } + ignoreCase = args3.BooleanValue(); } + String text = args1.TextValue(); String suffix = args2.TextValue(); - boolean endsWith = false; + boolean endsWith; if (ignoreCase) { endsWith = text.toLowerCase().endsWith(suffix.toLowerCase()); } else { @@ -56,7 +57,16 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN, null, null); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java index 8de5c221f..15402ec01 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java @@ -1,49 +1,50 @@ package toolgood.algorithm.internals.functions.csharp; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_REMOVESTART extends Function_3 { + public Function_REMOVESTART(FunctionBase[] funcs) { + super(funcs); + } -public class Function_REMOVESTART extends Function_3 { - public Function_REMOVESTART(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "RemoveStart"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "RemoveStart", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "RemoveStart", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } + boolean ignoreCase = false; if (func3 != null) { - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotBoolean()) { - args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "RemoveStart", 3); - if (args3.IsError()) { - return args3; - } - } - if (args3.BooleanValue()) { - ignoreCase = true; + Operand args3 = GetBoolean_3(engine, tempParameter); + if (args3.IsError() || args3.IsNone()) { + return args3; } + ignoreCase = args3.BooleanValue(); } + String text = args1.TextValue(); String prefix = args2.TextValue(); - boolean startsWith = false; + boolean startsWith; if (ignoreCase) { startsWith = text.toLowerCase().startsWith(prefix.toLowerCase()); } else { @@ -56,7 +57,16 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN, null, null); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java index e2df1f8cf..b05414e5e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java @@ -1,39 +1,54 @@ package toolgood.algorithm.internals.functions.csharp; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_SPLIT extends Function_2 { + public Function_SPLIT(FunctionBase[] funcs) { + super(funcs); + } -public class Function_SPLIT extends Function_2 { - public Function_SPLIT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Split"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Split", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Split", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; + } + + if (args2.TextValue() == null || args2.TextValue().isEmpty()) { + return ParameterError(2); } - String[] parts = args1.TextValue().split(args2.TextValue()); + + String[] parts = args1.TextValue().split("[" + java.util.regex.Pattern.quote(args2.TextValue()) + "]"); return Operand.Create(parts); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Split"); + public OperandType GetResultType() { + return OperandType.ARRAY; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java index b66dc576b..145c4d453 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java @@ -1,62 +1,78 @@ package toolgood.algorithm.internals.functions.csharp; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_SUBSTRING extends Function_3 { + public Function_SUBSTRING(FunctionBase[] funcs) { + super(funcs); + } -public class Function_SUBSTRING extends Function_3 { - public Function_SUBSTRING(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "Substring"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Substring", 1); - if (args1.IsError()) { - return args1; - } - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Substring", 2); - if (args2.IsError()) { - return args2; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; + } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } String text = args1.TextValue(); - int startIndex = args2.IntValue() - work.ExcelIndex; + int startIndex = args2.IntValue() - engine.ExcelIndex; + if (startIndex < 0) { - startIndex = 0; + return ParameterError(2); } if (startIndex >= text.length()) { return Operand.Create(""); } + if (func3 == null) { return Operand.Create(text.substring(startIndex)); } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Substring", 3); - if (args3.IsError()) { - return args3; - } + + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsError() || args3.IsNone()) { + return args3; } + int length = args3.IntValue(); - int endIndex = startIndex + length; - if (endIndex > text.length()) { - endIndex = text.length(); + if (length < 0) { + return ParameterError(3); + } + if (startIndex + length > text.length()) { + length = text.length() - startIndex; } - return Operand.Create(text.substring(startIndex, endIndex)); + return Operand.Create(text.substring(startIndex, startIndex + length)); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Substring"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java index 794546235..aff83087e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java @@ -1,35 +1,42 @@ package toolgood.algorithm.internals.functions.csharp; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_TRIMEND extends Function_2 { + public Function_TRIMEND(FunctionBase[] funcs) { + super(funcs); + } -public class Function_TRIMEND extends Function_2 { - public Function_TRIMEND(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "TrimEnd"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TrimEnd", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } + if (func2 == null) { return Operand.Create(trimEnd(args1.TextValue())); } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "TrimEnd", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } + char[] trimChars = args2.TextValue().toCharArray(); return Operand.Create(trimEnd(args1.TextValue(), trimChars)); } @@ -68,7 +75,15 @@ private String trimEnd(String str, char[] trimChars) { } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "TrimEnd"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java index 6279917e0..3637ef132 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java @@ -1,36 +1,42 @@ package toolgood.algorithm.internals.functions.csharp; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_TRIMSTART extends Function_2 { + public Function_TRIMSTART(FunctionBase[] funcs) { + super(funcs); + } -public class Function_TRIMSTART extends Function_2 { - public Function_TRIMSTART(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "TrimStart"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TrimStart", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } + if (func2 == null) { return Operand.Create(trimStart(args1.TextValue())); } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "TrimStart", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } + char[] trimChars = args2.TextValue().toCharArray(); return Operand.Create(trimStart(args1.TextValue(), trimChars)); } @@ -69,7 +75,15 @@ private String trimStart(String str, char[] trimChars) { } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "TrimStart"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java index 92f204043..59a43a524 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java @@ -1,79 +1,77 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.lang.StringBuilder; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.function.BiFunction; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_HMACMD5 extends Function_2 { + public Function_HMACMD5(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } -public class Function_HMACMD5 extends Function_3 { - public Function_HMACMD5(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "HmacMD5"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HmacMD5", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "HmacMD5", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } + try { - java.nio.charset.Charset charset; - if (func3 == null) { - charset = java.nio.charset.StandardCharsets.UTF_8; - } else { - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotText()) { - args3 = args3.ToText("Function '{0}' parameter {1} is error!", "HmacMD5", 3); - if (args3.IsError()) { - return args3; - } - } - charset = java.nio.charset.Charset.forName(args3.TextValue()); - } - byte[] buffer = args1.TextValue().getBytes(charset); - String secret = args2.TextValue(); - String t = getHmacMd5String(buffer, secret); + byte[] buffer = args1.TextValue().getBytes(StandardCharsets.UTF_8); + String t = getHmacMd5String(buffer, args2.TextValue()); return Operand.Create(t); } catch (Exception ex) { - return Operand.Error("Function '{0}' is error!{1}", "HmacMD5", ex.getMessage()); + return FunctionError(); } } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "HmacMD5"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } - private String getHmacMd5String(byte[] buffer, String secret) throws NoSuchAlgorithmException, InvalidKeyException { - byte[] keyByte = (secret != null ? secret : "").getBytes(java.nio.charset.StandardCharsets.UTF_8); + private String getHmacMd5String(byte[] buffer, String secret) throws Exception { + byte[] keyByte = secret != null ? secret.getBytes(StandardCharsets.UTF_8) : new byte[0]; + SecretKeySpec keySpec = new SecretKeySpec(keyByte, "HmacMD5"); Mac mac = Mac.getInstance("HmacMD5"); - SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte, "HmacMD5"); - mac.init(secretKeySpec); - byte[] hashmessage = mac.doFinal(buffer); - return bytesToHex(hashmessage); + mac.init(keySpec); + byte[] hashMessage = mac.doFinal(buffer); + return bytesToHex(hashMessage); } private String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { - sb.append(String.format("%02x", b)); + sb.append(String.format("%02X", b)); } - return sb.toString().toUpperCase(); + return sb.toString(); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java index 9abf54009..a98f5267d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java @@ -1,79 +1,77 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.lang.StringBuilder; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.function.BiFunction; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_HMACSHA1 extends Function_2 { + public Function_HMACSHA1(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } -public class Function_HMACSHA1 extends Function_3 { - public Function_HMACSHA1(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "HmacSHA1"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HmacSHA1", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "HmacSHA1", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } + try { - java.nio.charset.Charset charset; - if (func3 == null) { - charset = java.nio.charset.StandardCharsets.UTF_8; - } else { - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotText()) { - args3 = args3.ToText("Function '{0}' parameter {1} is error!", "HmacSHA1", 3); - if (args3.IsError()) { - return args3; - } - } - charset = java.nio.charset.Charset.forName(args3.TextValue()); - } - byte[] buffer = args1.TextValue().getBytes(charset); - String secret = args2.TextValue(); - String t = getHmacSha1String(buffer, secret); + byte[] buffer = args1.TextValue().getBytes(StandardCharsets.UTF_8); + String t = getHmacSha1String(buffer, args2.TextValue()); return Operand.Create(t); } catch (Exception ex) { - return Operand.Error("Function '{0}' is error!{1}", "HmacSHA1", ex.getMessage()); + return FunctionError(); } } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "HmacSHA1"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } - private String getHmacSha1String(byte[] buffer, String secret) throws NoSuchAlgorithmException, InvalidKeyException { - byte[] keyByte = (secret != null ? secret : "").getBytes(java.nio.charset.StandardCharsets.UTF_8); + private String getHmacSha1String(byte[] buffer, String secret) throws Exception { + byte[] keyByte = secret != null ? secret.getBytes(StandardCharsets.UTF_8) : new byte[0]; + SecretKeySpec keySpec = new SecretKeySpec(keyByte, "HmacSHA1"); Mac mac = Mac.getInstance("HmacSHA1"); - SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte, "HmacSHA1"); - mac.init(secretKeySpec); - byte[] hashmessage = mac.doFinal(buffer); - return bytesToHex(hashmessage); + mac.init(keySpec); + byte[] hashMessage = mac.doFinal(buffer); + return bytesToHex(hashMessage); } private String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { - sb.append(String.format("%02x", b)); + sb.append(String.format("%02X", b)); } - return sb.toString().toUpperCase(); + return sb.toString(); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java index ef70b7aaa..8538bff6f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java @@ -1,79 +1,77 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.lang.StringBuilder; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.function.BiFunction; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_HMACSHA256 extends Function_2 { + public Function_HMACSHA256(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } -public class Function_HMACSHA256 extends Function_3 { - public Function_HMACSHA256(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "HmacSHA256"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HmacSHA256", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "HmacSHA256", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } + try { - java.nio.charset.Charset charset; - if (func3 == null) { - charset = java.nio.charset.StandardCharsets.UTF_8; - } else { - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotText()) { - args3 = args3.ToText("Function '{0}' parameter {1} is error!", "HmacSHA256", 3); - if (args3.IsError()) { - return args3; - } - } - charset = java.nio.charset.Charset.forName(args3.TextValue()); - } - byte[] buffer = args1.TextValue().getBytes(charset); - String secret = args2.TextValue(); - String t = getHmacSha256String(buffer, secret); + byte[] buffer = args1.TextValue().getBytes(StandardCharsets.UTF_8); + String t = getHmacSha256String(buffer, args2.TextValue()); return Operand.Create(t); } catch (Exception ex) { - return Operand.Error("Function '{0}' is error!{1}", "HmacSHA256", ex.getMessage()); + return FunctionError(); } } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "HmacSHA256"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } - private String getHmacSha256String(byte[] buffer, String secret) throws NoSuchAlgorithmException, InvalidKeyException { - byte[] keyByte = (secret != null ? secret : "").getBytes(java.nio.charset.StandardCharsets.UTF_8); + private String getHmacSha256String(byte[] buffer, String secret) throws Exception { + byte[] keyByte = secret != null ? secret.getBytes(StandardCharsets.UTF_8) : new byte[0]; + SecretKeySpec keySpec = new SecretKeySpec(keyByte, "HmacSHA256"); Mac mac = Mac.getInstance("HmacSHA256"); - SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte, "HmacSHA256"); - mac.init(secretKeySpec); - byte[] hashmessage = mac.doFinal(buffer); - return bytesToHex(hashmessage); + mac.init(keySpec); + byte[] hashMessage = mac.doFinal(buffer); + return bytesToHex(hashMessage); } private String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { - sb.append(String.format("%02x", b)); + sb.append(String.format("%02X", b)); } - return sb.toString().toUpperCase(); + return sb.toString(); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java index 34e0158fb..ebc5f0220 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java @@ -1,79 +1,77 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.lang.StringBuilder; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.function.BiFunction; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; -import java.security.InvalidKeyException; -import java.security.NoSuchAlgorithmException; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_HMACSHA512 extends Function_2 { + public Function_HMACSHA512(FunctionBase func1, FunctionBase func2) { + super(func1, func2); + } -public class Function_HMACSHA512 extends Function_3 { - public Function_HMACSHA512(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "HmacSHA512"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HmacSHA512", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "HmacSHA512", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsError() || args2.IsNone()) { + return args2; } + try { - java.nio.charset.Charset charset; - if (func3 == null) { - charset = java.nio.charset.StandardCharsets.UTF_8; - } else { - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotText()) { - args3 = args3.ToText("Function '{0}' parameter {1} is error!", "HmacSHA512", 3); - if (args3.IsError()) { - return args3; - } - } - charset = java.nio.charset.Charset.forName(args3.TextValue()); - } - byte[] buffer = args1.TextValue().getBytes(charset); - String secret = args2.TextValue(); - String t = getHmacSha512String(buffer, secret); + byte[] buffer = args1.TextValue().getBytes(StandardCharsets.UTF_8); + String t = getHmacSha512String(buffer, args2.TextValue()); return Operand.Create(t); } catch (Exception ex) { - return Operand.Error("Function '{0}' is error!{1}", "HmacSHA512", ex.getMessage()); + return FunctionError(); } } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "HmacSHA512"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } - private String getHmacSha512String(byte[] buffer, String secret) throws NoSuchAlgorithmException, InvalidKeyException { - byte[] keyByte = (secret != null ? secret : "").getBytes(java.nio.charset.StandardCharsets.UTF_8); + private String getHmacSha512String(byte[] buffer, String secret) throws Exception { + byte[] keyByte = secret != null ? secret.getBytes(StandardCharsets.UTF_8) : new byte[0]; + SecretKeySpec keySpec = new SecretKeySpec(keyByte, "HmacSHA512"); Mac mac = Mac.getInstance("HmacSHA512"); - SecretKeySpec secretKeySpec = new SecretKeySpec(keyByte, "HmacSHA512"); - mac.init(secretKeySpec); - byte[] hashmessage = mac.doFinal(buffer); - return bytesToHex(hashmessage); + mac.init(keySpec); + byte[] hashMessage = mac.doFinal(buffer); + return bytesToHex(hashMessage); } private String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { - sb.append(String.format("%02x", b)); + sb.append(String.format("%02X", b)); } - return sb.toString().toUpperCase(); + return sb.toString(); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java index cee2329d3..e14314d56 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java @@ -1,56 +1,55 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.lang.StringBuilder; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_MD5 extends Function_2 { - public Function_MD5(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_MD5 extends Function_1 { + public Function_MD5(FunctionBase func1) { + super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "MD5", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "MD5"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } try { - java.nio.charset.Charset charset; - if (func2 == null) { - charset = java.nio.charset.StandardCharsets.UTF_8; - } else { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "MD5", 2); - if (args2.IsError()) { - return args2; - } - } - charset = java.nio.charset.Charset.forName(args2.TextValue()); - } - byte[] buffer = args1.TextValue().getBytes(charset); + byte[] buffer = args1.TextValue().getBytes(StandardCharsets.UTF_8); String t = getMd5String(buffer); return Operand.Create(t); } catch (Exception ex) { - return Operand.Error("Function '{0}' is error!{1}", "MD5", ex.getMessage()); + return FunctionError(); } } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "MD5"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } - private String getMd5String(byte[] buffer) throws NoSuchAlgorithmException { + private String getMd5String(byte[] buffer) throws Exception { MessageDigest md5 = MessageDigest.getInstance("MD5"); byte[] retVal = md5.digest(buffer); return bytesToHex(retVal); @@ -59,8 +58,8 @@ private String getMd5String(byte[] buffer) throws NoSuchAlgorithmException { private String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { - sb.append(String.format("%02x", b)); + sb.append(String.format("%02X", b)); } - return sb.toString().toUpperCase(); + return sb.toString(); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java index 12235cfac..31686a443 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java @@ -1,56 +1,55 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.lang.StringBuilder; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SHA1 extends Function_2 { - public Function_SHA1(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_SHA1 extends Function_1 { + public Function_SHA1(FunctionBase func1) { + super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "SHA1", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "SHA1"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } try { - java.nio.charset.Charset charset; - if (func2 == null) { - charset = java.nio.charset.StandardCharsets.UTF_8; - } else { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "SHA1", 2); - if (args2.IsError()) { - return args2; - } - } - charset = java.nio.charset.Charset.forName(args2.TextValue()); - } - byte[] buffer = args1.TextValue().getBytes(charset); + byte[] buffer = args1.TextValue().getBytes(StandardCharsets.UTF_8); String t = getSha1String(buffer); return Operand.Create(t); } catch (Exception ex) { - return Operand.Error("Function '{0}' is error!{1}", "SHA1", ex.getMessage()); + return FunctionError(); } } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "SHA1"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } - private String getSha1String(byte[] buffer) throws NoSuchAlgorithmException { + private String getSha1String(byte[] buffer) throws Exception { MessageDigest sha1 = MessageDigest.getInstance("SHA-1"); byte[] retVal = sha1.digest(buffer); return bytesToHex(retVal); @@ -59,8 +58,8 @@ private String getSha1String(byte[] buffer) throws NoSuchAlgorithmException { private String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { - sb.append(String.format("%02x", b)); + sb.append(String.format("%02X", b)); } - return sb.toString().toUpperCase(); + return sb.toString(); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java index 54675cd86..564745a88 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java @@ -1,56 +1,55 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.lang.StringBuilder; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SHA256 extends Function_2 { - public Function_SHA256(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_SHA256 extends Function_1 { + public Function_SHA256(FunctionBase func1) { + super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "SHA256", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "SHA256"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } try { - java.nio.charset.Charset charset; - if (func2 == null) { - charset = java.nio.charset.StandardCharsets.UTF_8; - } else { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "SHA256", 2); - if (args2.IsError()) { - return args2; - } - } - charset = java.nio.charset.Charset.forName(args2.TextValue()); - } - byte[] buffer = args1.TextValue().getBytes(charset); + byte[] buffer = args1.TextValue().getBytes(StandardCharsets.UTF_8); String t = getSha256String(buffer); return Operand.Create(t); } catch (Exception ex) { - return Operand.Error("Function '{0}' is error!{1}", "SHA256", ex.getMessage()); + return FunctionError(); } } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "SHA256"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } - private String getSha256String(byte[] buffer) throws NoSuchAlgorithmException { + private String getSha256String(byte[] buffer) throws Exception { MessageDigest sha256 = MessageDigest.getInstance("SHA-256"); byte[] retVal = sha256.digest(buffer); return bytesToHex(retVal); @@ -59,8 +58,8 @@ private String getSha256String(byte[] buffer) throws NoSuchAlgorithmException { private String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { - sb.append(String.format("%02x", b)); + sb.append(String.format("%02X", b)); } - return sb.toString().toUpperCase(); + return sb.toString(); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java index d06823882..8eba446a8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java @@ -1,56 +1,55 @@ package toolgood.algorithm.internals.functions.csharpsecurity; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.lang.StringBuilder; +import java.nio.charset.StandardCharsets; import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SHA512 extends Function_2 { - public Function_SHA512(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_SHA512 extends Function_1 { + public Function_SHA512(FunctionBase func1) { + super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "SHA512", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "SHA512"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsError() || args1.IsNone()) { + return args1; } try { - java.nio.charset.Charset charset; - if (func2 == null) { - charset = java.nio.charset.StandardCharsets.UTF_8; - } else { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "SHA512", 2); - if (args2.IsError()) { - return args2; - } - } - charset = java.nio.charset.Charset.forName(args2.TextValue()); - } - byte[] buffer = args1.TextValue().getBytes(charset); + byte[] buffer = args1.TextValue().getBytes(StandardCharsets.UTF_8); String t = getSha512String(buffer); return Operand.Create(t); } catch (Exception ex) { - return Operand.Error("Function '{0}' is error!{1}", "SHA512", ex.getMessage()); + return FunctionError(); } } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "SHA512"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); } - private String getSha512String(byte[] buffer) throws NoSuchAlgorithmException { + private String getSha512String(byte[] buffer) throws Exception { MessageDigest sha512 = MessageDigest.getInstance("SHA-512"); byte[] retVal = sha512.digest(buffer); return bytesToHex(retVal); @@ -59,8 +58,8 @@ private String getSha512String(byte[] buffer) throws NoSuchAlgorithmException { private String bytesToHex(byte[] bytes) { StringBuilder sb = new StringBuilder(); for (byte b : bytes) { - sb.append(String.format("%02x", b)); + sb.append(String.format("%02X", b)); } - return sb.toString().toUpperCase(); + return sb.toString(); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java index 2f4cbd277..60770451b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java @@ -6,12 +6,12 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.MyDate; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.operands.MyDate; /** - * XNPV: 返回一组不定期发生的现金流的净现�? + * XNPV: 返回一组不定期发生的现金流的净现�? * XNPV(rate, values, dates) */ public class Function_XNPV extends Function_3 { diff --git a/java/src/main/java/toolgood/algorithm/litJson/FsmContext.java b/java/src/main/java/toolgood/algorithm/litJson/FsmContext.java index 3f1be09c1..ac714272b 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/FsmContext.java +++ b/java/src/main/java/toolgood/algorithm/litJson/FsmContext.java @@ -1,6 +1,6 @@ package toolgood.algorithm.litJson; -public class FsmContext { +final class FsmContext { public boolean Return; public int NextState; public Lexer L; diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java index 5b3cef43c..efd10d34d 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java @@ -1,16 +1,18 @@ package toolgood.algorithm.litJson; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; -public class JsonData implements Iterable { +final class JsonData implements Iterable { private List inst_array; private boolean inst_boolean; - private double inst_double; - private Map inst_object; + private BigDecimal inst_double; + Map inst_object; private String inst_string; private JsonType type; @@ -19,34 +21,18 @@ public int Count() { return inst_object.size(); } - public boolean IsArray() { - return type == JsonType.Array; - } - - public boolean IsBoolean() { - return type == JsonType.Boolean; - } - - public boolean IsDouble() { - return type == JsonType.Double; - } - - public boolean IsObject() { - return type == JsonType.Object; - } - - public boolean IsString() { - return type == JsonType.String; - } - - public boolean IsNull() { - return type == JsonType.Null; - } + public boolean IsArray() { return type == JsonType.Array; } + public boolean IsBoolean() { return type == JsonType.Boolean; } + public boolean IsDouble() { return type == JsonType.Double; } + public boolean IsObject() { return type == JsonType.Object; } + public boolean IsString() { return type == JsonType.String; } + public boolean IsNull() { return type == JsonType.Null; } public JsonData get(String prop_name) { if (inst_object != null) { - JsonData data = inst_object.get(prop_name); - return data; + if (inst_object.containsKey(prop_name)) { + return inst_object.get(prop_name); + } } return null; } @@ -60,30 +46,30 @@ public JsonData get(int index) { public JsonData() { } - public void SetBoolean(boolean val) { + void SetBoolean(boolean val) { type = JsonType.Boolean; inst_boolean = val; } - public void SetDouble(double val) { + void SetDouble(BigDecimal val) { type = JsonType.Double; inst_double = val; } - public void SetString(String val) { + void SetString(String val) { type = JsonType.String; inst_string = val; } - public void SetNull() { + void SetNull() { type = JsonType.Null; } - public void Add(JsonData val) { + void Add(JsonData val) { EnsureList().add(val); } - public void Set(String key, JsonData val) { + void Set(String key, JsonData val) { EnsureDictionary().put(key, val); } @@ -101,7 +87,7 @@ private List EnsureList() { return inst_array; } - public void SetJsonType(JsonType type) { + void SetJsonType(JsonType type) { if (this.type == type) return; @@ -122,7 +108,7 @@ public void SetJsonType(JsonType type) { break; case Double: - inst_double = 0; + inst_double = BigDecimal.ZERO; break; case Boolean: @@ -137,16 +123,12 @@ public Iterator iterator() { return EnsureList().iterator(); } - public boolean BooleanValue() { - return inst_boolean; - } - - public double NumberValue() { - return inst_double; - } + public boolean BooleanValue() { return inst_boolean; } + public BigDecimal NumberValue() { return inst_double; } + public String StringValue() { return inst_string; } - public String StringValue() { - return inst_string; + public List getArray() { + return inst_array; } @Override @@ -179,7 +161,7 @@ private void ToString(StringBuilder stringBuilder) { } first = false; stringBuilder.append("\""); - stringBuilder.append(kv.getKey().replace("\"", "\\\"") + stringBuilder.append(kv.getKey().replace("\\", "\\\\").replace("\"", "\\\"") .replace("\n", "\\n").replace("\r", "\\r") .replace("\t", "\\t").replace("\0", "\\0") .replace("\u000b", "\\v") @@ -191,7 +173,7 @@ private void ToString(StringBuilder stringBuilder) { stringBuilder.append("}"); } else if (IsString()) { stringBuilder.append("\""); - stringBuilder.append(inst_string.replace("\"", "\\\"") + stringBuilder.append(inst_string.replace("\\", "\\\\").replace("\"", "\\\"") .replace("\n", "\\n").replace("\r", "\\r") .replace("\t", "\\t").replace("\0", "\\0") .replace("\u000b", "\\v") @@ -199,7 +181,7 @@ private void ToString(StringBuilder stringBuilder) { .replace("\b", "\\b").replace("\f", "\\f")); stringBuilder.append("\""); } else if (IsDouble()) { - stringBuilder.append(inst_double); + stringBuilder.append(inst_double.toPlainString()); } } } diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonException.java b/java/src/main/java/toolgood/algorithm/litJson/JsonException.java index 72b4a534c..70d81cd68 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonException.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonException.java @@ -1,15 +1,17 @@ package toolgood.algorithm.litJson; -public class JsonException extends RuntimeException { - public JsonException(String message) { - super(message); +final class JsonException extends RuntimeException { + public JsonException(ParserToken token, Exception inner_exception) { + super("Invalid token '" + token + "' in input string", inner_exception); } - public JsonException(ParserToken token, Exception innerException) { - super("Invalid token '" + token + "' in input string", innerException); - } - - public JsonException(int c) { + public JsonException(int c) { super("Invalid character '" + (char) c + "' in input string"); } + public JsonException(String message, Exception inner_exception) { + super(message); + } + public JsonException(String message) { + super(message); + } } diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java b/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java index 4a39da7dc..a90fae255 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java @@ -1,6 +1,8 @@ package toolgood.algorithm.litJson; -public class JsonMapper { +import java.math.BigDecimal; + +final class JsonMapper { private static JsonData ReadValue(JsonReader reader) throws Exception { reader.Read(); @@ -15,10 +17,12 @@ private static JsonData ReadValue(JsonReader reader) throws Exception { if (reader.Token() == JsonToken.Double) { Object value = reader.Value(); - if (value instanceof Number) { - instance.SetDouble(((Number) value).doubleValue()); + if (value instanceof BigDecimal) { + instance.SetDouble((BigDecimal) value); + } else if (value instanceof Number) { + instance.SetDouble(new BigDecimal(value.toString())); } else { - instance.SetDouble(0); + instance.SetDouble(BigDecimal.ZERO); } return instance; } diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonReader.java b/java/src/main/java/toolgood/algorithm/litJson/JsonReader.java index f02df1f52..360d750f7 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonReader.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonReader.java @@ -1,11 +1,12 @@ package toolgood.algorithm.litJson; import java.io.StringReader; +import java.math.BigDecimal; import java.util.HashMap; import java.util.Map; import java.util.Stack; -public class JsonReader { +final class JsonReader { private static final Map> parse_table = new HashMap<>(); private final Stack automaton_stack = new Stack<>(); @@ -36,8 +37,8 @@ public JsonReader(String json_text) { read_started = false; automaton_stack.clear(); - automaton_stack.push((int) ParserToken.End); - automaton_stack.push((int) ParserToken.Text); + automaton_stack.push(ParserToken.End.value); + automaton_stack.push(ParserToken.Text.value); lexer = new Lexer(reader); @@ -51,85 +52,91 @@ public JsonReader(String json_text) { private static void PopulateParseTable() { TableAddRow(parse_table, ParserToken.Array); - TableAddCol(parse_table, ParserToken.Array, '[', '[', (int) ParserToken.ArrayPrime); + TableAddCol(parse_table, ParserToken.Array, '[', '[', ParserToken.ArrayPrime.value); TableAddRow(parse_table, ParserToken.ArrayPrime); - TableAddCol(parse_table, ParserToken.ArrayPrime, '"', (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); - TableAddCol(parse_table, ParserToken.ArrayPrime, '[', (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, '"', ParserToken.Value.value, ParserToken.ValueRest.value, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, '[', ParserToken.Value.value, ParserToken.ValueRest.value, ']'); TableAddCol(parse_table, ParserToken.ArrayPrime, ']', ']'); - TableAddCol(parse_table, ParserToken.ArrayPrime, '{', (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); - TableAddCol(parse_table, ParserToken.ArrayPrime, (int) ParserToken.Number, (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); - TableAddCol(parse_table, ParserToken.ArrayPrime, (int) ParserToken.True, (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); - TableAddCol(parse_table, ParserToken.ArrayPrime, (int) ParserToken.False, (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); - TableAddCol(parse_table, ParserToken.ArrayPrime, (int) ParserToken.Null, (int) ParserToken.Value, (int) ParserToken.ValueRest, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, '{', ParserToken.Value.value, ParserToken.ValueRest.value, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, ParserToken.Number.value, ParserToken.Value.value, ParserToken.ValueRest.value, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, ParserToken.True.value, ParserToken.Value.value, ParserToken.ValueRest.value, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, ParserToken.False.value, ParserToken.Value.value, ParserToken.ValueRest.value, ']'); + TableAddCol(parse_table, ParserToken.ArrayPrime, ParserToken.Null.value, ParserToken.Value.value, ParserToken.ValueRest.value, ']'); TableAddRow(parse_table, ParserToken.Object); - TableAddCol(parse_table, ParserToken.Object, '{', '{', (int) ParserToken.ObjectPrime); + TableAddCol(parse_table, ParserToken.Object, '{', '{', ParserToken.ObjectPrime.value); TableAddRow(parse_table, ParserToken.ObjectPrime); - TableAddCol(parse_table, ParserToken.ObjectPrime, '"', (int) ParserToken.Pair, (int) ParserToken.PairRest, '}'); + TableAddCol(parse_table, ParserToken.ObjectPrime, '"', ParserToken.Pair.value, ParserToken.PairRest.value, '}'); TableAddCol(parse_table, ParserToken.ObjectPrime, '}', '}'); TableAddRow(parse_table, ParserToken.Pair); - TableAddCol(parse_table, ParserToken.Pair, '"', (int) ParserToken.String, ':', (int) ParserToken.Value); + TableAddCol(parse_table, ParserToken.Pair, '"', ParserToken.String.value, ':', ParserToken.Value.value); TableAddRow(parse_table, ParserToken.PairRest); - TableAddCol(parse_table, ParserToken.PairRest, ',', ',', (int) ParserToken.Pair, (int) ParserToken.PairRest); - TableAddCol(parse_table, ParserToken.PairRest, '}', (int) ParserToken.Epsilon); + TableAddCol(parse_table, ParserToken.PairRest, ',', ',', ParserToken.Pair.value, ParserToken.PairRest.value); + TableAddCol(parse_table, ParserToken.PairRest, '}', ParserToken.Epsilon.value); TableAddRow(parse_table, ParserToken.String); - TableAddCol(parse_table, ParserToken.String, '"', '"', (int) ParserToken.CharSeq, '"'); + TableAddCol(parse_table, ParserToken.String, '"', '"', ParserToken.CharSeq.value, '"'); TableAddRow(parse_table, ParserToken.Text); - TableAddCol(parse_table, ParserToken.Text, '[', (int) ParserToken.Array); - TableAddCol(parse_table, ParserToken.Text, '{', (int) ParserToken.Object); + TableAddCol(parse_table, ParserToken.Text, '[', ParserToken.Array.value); + TableAddCol(parse_table, ParserToken.Text, '{', ParserToken.Object.value); TableAddRow(parse_table, ParserToken.Value); - TableAddCol(parse_table, ParserToken.Value, '"', (int) ParserToken.String); - TableAddCol(parse_table, ParserToken.Value, '[', (int) ParserToken.Array); - TableAddCol(parse_table, ParserToken.Value, '{', (int) ParserToken.Object); - TableAddCol(parse_table, ParserToken.Value, (int) ParserToken.Number, (int) ParserToken.Number); - TableAddCol(parse_table, ParserToken.Value, (int) ParserToken.True, (int) ParserToken.True); - TableAddCol(parse_table, ParserToken.Value, (int) ParserToken.False, (int) ParserToken.False); - TableAddCol(parse_table, ParserToken.Value, (int) ParserToken.Null, (int) ParserToken.Null); + TableAddCol(parse_table, ParserToken.Value, '"', ParserToken.String.value); + TableAddCol(parse_table, ParserToken.Value, '[', ParserToken.Array.value); + TableAddCol(parse_table, ParserToken.Value, '{', ParserToken.Object.value); + TableAddCol(parse_table, ParserToken.Value, ParserToken.Number.value, ParserToken.Number.value); + TableAddCol(parse_table, ParserToken.Value, ParserToken.True.value, ParserToken.True.value); + TableAddCol(parse_table, ParserToken.Value, ParserToken.False.value, ParserToken.False.value); + TableAddCol(parse_table, ParserToken.Value, ParserToken.Null.value, ParserToken.Null.value); TableAddRow(parse_table, ParserToken.ValueRest); - TableAddCol(parse_table, ParserToken.ValueRest, ',', ',', (int) ParserToken.Value, (int) ParserToken.ValueRest); - TableAddCol(parse_table, ParserToken.ValueRest, ']', (int) ParserToken.Epsilon); + TableAddCol(parse_table, ParserToken.ValueRest, ',', ',', ParserToken.Value.value, ParserToken.ValueRest.value); + TableAddCol(parse_table, ParserToken.ValueRest, ']', ParserToken.Epsilon.value); } private static void TableAddCol(Map> parse_table, ParserToken row, int col, int... symbols) { - Map rowMap = parse_table.get((int) row); + Map rowMap = parse_table.get(row.value); if (rowMap == null) { rowMap = new HashMap<>(); - parse_table.put((int) row, rowMap); + parse_table.put(row.value, rowMap); } rowMap.put(col, symbols); } private static void TableAddRow(Map> parse_table, ParserToken rule) { - parse_table.put((int) rule, new HashMap<>()); + parse_table.put(rule.value, new HashMap<>()); } private void ProcessNumber(String number) { - if (number.indexOf('.') >= 0 || number.indexOf('e') >= 0 || number.indexOf('E') >= 0) { + String span = number; + if (span.indexOf('.') >= 0 || span.indexOf('e') >= 0 || span.indexOf('E') >= 0) { try { - token_value = Double.parseDouble(number); + token_value = new BigDecimal(span); return; } catch (NumberFormatException e) { } } try { - token_value = Long.parseLong(number); + token_value = new BigDecimal(Integer.parseInt(span)); return; } catch (NumberFormatException e) { } try { - token_value = new java.math.BigDecimal(number); + token_value = new BigDecimal(Long.parseLong(span)); return; } catch (NumberFormatException e) { } - token_value = 0; + try { + token_value = new BigDecimal(new java.math.BigInteger(span)); + return; + } catch (NumberFormatException e) { + } + token_value = BigDecimal.ZERO; } private void ProcessSymbol() { @@ -153,22 +160,22 @@ private void ProcessSymbol() { if (token == JsonToken.None) token = JsonToken.String; parser_in_string = true; } - } else if (current_symbol == (int) ParserToken.CharSeq) { + } else if (current_symbol == ParserToken.CharSeq.value) { token_value = lexer.StringValue(); - } else if (current_symbol == (int) ParserToken.False) { + } else if (current_symbol == ParserToken.False.value) { token = JsonToken.Boolean; token_value = false; parser_return = true; - } else if (current_symbol == (int) ParserToken.Null) { + } else if (current_symbol == ParserToken.Null.value) { token = JsonToken.Null; parser_return = true; - } else if (current_symbol == (int) ParserToken.Number) { + } else if (current_symbol == ParserToken.Number.value) { ProcessNumber(lexer.StringValue()); token = JsonToken.Double; parser_return = true; - } else if (current_symbol == (int) ParserToken.Pair) { + } else if (current_symbol == ParserToken.Pair.value) { token = JsonToken.PropertyName; - } else if (current_symbol == (int) ParserToken.True) { + } else if (current_symbol == ParserToken.True.value) { token = JsonToken.Boolean; token_value = true; parser_return = true; @@ -205,8 +212,8 @@ public boolean Read() { if (end_of_json) { end_of_json = false; automaton_stack.clear(); - automaton_stack.push((int) ParserToken.End); - automaton_stack.push((int) ParserToken.Text); + automaton_stack.push(ParserToken.End.value); + automaton_stack.push(ParserToken.Text.value); } parser_in_string = false; @@ -226,7 +233,7 @@ public boolean Read() { while (true) { if (parser_return) { - if (automaton_stack.peek() == (int) ParserToken.End) end_of_json = true; + if (automaton_stack.peek() == ParserToken.End.value) end_of_json = true; return true; } @@ -237,7 +244,7 @@ public boolean Read() { if (current_symbol == current_input) { if (!ReadToken()) { - if (automaton_stack.peek() != (int) ParserToken.End) + if (automaton_stack.peek() != ParserToken.End.value) throw new JsonException("Input doesn't evaluate to proper JSON text"); if (parser_return) return true; @@ -251,17 +258,19 @@ public boolean Read() { try { Map row = parse_table.get(current_symbol); if (row == null) { - throw new JsonException((ParserToken) current_input, new Exception("Parse error")); + throw new JsonException("Parse error"); } entry_symbols = row.get(current_input); if (entry_symbols == null) { - throw new JsonException((ParserToken) current_input, new Exception("Parse error")); + throw new JsonException("Parse error"); } + } catch (JsonException e) { + throw e; } catch (Exception e) { - throw new JsonException((ParserToken) current_input, e); + throw new JsonException("Parse error", e); } - if (entry_symbols[0] == (int) ParserToken.Epsilon) continue; + if (entry_symbols[0] == ParserToken.Epsilon.value) continue; for (int i = entry_symbols.length - 1; i >= 0; i--) automaton_stack.push(entry_symbols[i]); diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java b/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java index 1b0c884b8..e855b4674 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonToken.java @@ -1,19 +1,20 @@ package toolgood.algorithm.litJson; public enum JsonToken { - None, + None(0), + ObjectStart(1), + PropertyName(2), + ObjectEnd(3), + ArrayStart(4), + ArrayEnd(5), + Double(6), + String(7), + Boolean(8), + Null(9); - ObjectStart, - PropertyName, - ObjectEnd, + public final int value; - ArrayStart, - ArrayEnd, - - Double, - - String, - - Boolean, - Null + JsonToken(int value) { + this.value = value; + } } diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonType.java b/java/src/main/java/toolgood/algorithm/litJson/JsonType.java index 29864eda1..e8bc3631e 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonType.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonType.java @@ -1,12 +1,17 @@ package toolgood.algorithm.litJson; public enum JsonType { - None, + None(0), + Object(1), + Array(2), + String(3), + Double(4), + Boolean(5), + Null(6); - Object, - Array, - String, - Double, - Boolean, - Null + public final int value; + + JsonType(int value) { + this.value = value; + } } diff --git a/java/src/main/java/toolgood/algorithm/litJson/Lexer.java b/java/src/main/java/toolgood/algorithm/litJson/Lexer.java index 01d1fa82b..f8d56a914 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/Lexer.java +++ b/java/src/main/java/toolgood/algorithm/litJson/Lexer.java @@ -1,9 +1,8 @@ package toolgood.algorithm.litJson; import java.io.Reader; -import java.io.StringReader; -public class Lexer { +final class Lexer { private interface StateHandler { boolean run(FsmContext ctx); } @@ -11,18 +10,18 @@ private interface StateHandler { private static final int[] fsm_return_table; private static final StateHandler[] fsm_handler_table; - private boolean allow_comments = true; - private boolean allow_single_quoted_strings = true; - private boolean end_of_input = false; - private final FsmContext fsm_context = new FsmContext(); - private int input_buffer = 0; - private int input_char = 0; + private boolean allow_comments; + private boolean allow_single_quoted_strings; + private boolean end_of_input; + private final FsmContext fsm_context; + private int input_buffer; + private int input_char; private final Reader reader; - private int state = 1; - private final StringBuilder string_buffer = new StringBuilder(128); - private String string_value = ""; - private int token = 0; - private int unichar = 0; + private int state; + private final StringBuilder string_buffer; + private String string_value; + private int token; + private int unichar; public boolean EndOfInput() { return end_of_input; @@ -36,14 +35,6 @@ public String StringValue() { return string_value; } - public Lexer(Reader reader) { - this.reader = reader; - } - - public Lexer(String input) { - this.reader = new StringReader(input); - } - static { fsm_handler_table = new StateHandler[]{ Lexer::State1, @@ -77,30 +68,30 @@ public Lexer(String input) { }; fsm_return_table = new int[]{ - (int) ParserToken.Char, + ParserToken.Char.value, 0, - (int) ParserToken.Number, - (int) ParserToken.Number, + ParserToken.Number.value, + ParserToken.Number.value, 0, - (int) ParserToken.Number, + ParserToken.Number.value, 0, - (int) ParserToken.Number, + ParserToken.Number.value, 0, 0, - (int) ParserToken.True, + ParserToken.True.value, 0, 0, 0, - (int) ParserToken.False, + ParserToken.False.value, 0, 0, - (int) ParserToken.Null, - (int) ParserToken.CharSeq, - (int) ParserToken.Char, + ParserToken.Null.value, + ParserToken.CharSeq.value, + ParserToken.Char.value, 0, 0, - (int) ParserToken.CharSeq, - (int) ParserToken.Char, + ParserToken.CharSeq.value, + ParserToken.Char.value, 0, 0, 0, @@ -108,6 +99,20 @@ public Lexer(String input) { }; } + public Lexer(Reader reader) { + allow_comments = true; + allow_single_quoted_strings = true; + + input_buffer = 0; + string_buffer = new StringBuilder(128); + state = 1; + end_of_input = false; + this.reader = reader; + + fsm_context = new FsmContext(); + fsm_context.L = this; + } + private static int HexValue(int digit) { switch (digit) { case 'a': @@ -764,7 +769,6 @@ private int NextChar() { public boolean NextToken() { StateHandler handler; fsm_context.Return = false; - fsm_context.L = this; while (true) { handler = fsm_handler_table[state - 1]; @@ -778,7 +782,7 @@ public boolean NextToken() { string_buffer.setLength(0); token = fsm_return_table[state - 1]; - if (token == (int) ParserToken.Char) token = input_char; + if (token == ParserToken.Char.value) token = input_char; state = fsm_context.NextState; diff --git a/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java b/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java index 4ce3e1dda..c898bf761 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java +++ b/java/src/main/java/toolgood/algorithm/litJson/ParserToken.java @@ -1,23 +1,29 @@ package toolgood.algorithm.litJson; -public enum ParserToken { - None, - Number, - True, - False, - Null, - CharSeq, - Char, - Text, - Object, - ObjectPrime, - Pair, - PairRest, - Array, - ArrayPrime, - Value, - ValueRest, - String, - End, - Epsilon +enum ParserToken { + None(Character.MAX_VALUE + 1), + Number(Character.MAX_VALUE + 2), + True(Character.MAX_VALUE + 3), + False(Character.MAX_VALUE + 4), + Null(Character.MAX_VALUE + 5), + CharSeq(Character.MAX_VALUE + 6), + Char(Character.MAX_VALUE + 7), + Text(Character.MAX_VALUE + 8), + Object(Character.MAX_VALUE + 9), + ObjectPrime(Character.MAX_VALUE + 10), + Pair(Character.MAX_VALUE + 11), + PairRest(Character.MAX_VALUE + 12), + Array(Character.MAX_VALUE + 13), + ArrayPrime(Character.MAX_VALUE + 14), + Value(Character.MAX_VALUE + 15), + ValueRest(Character.MAX_VALUE + 16), + String(Character.MAX_VALUE + 17), + End(Character.MAX_VALUE + 18), + Epsilon(Character.MAX_VALUE + 19); + + public final int value; + + ParserToken(int value) { + this.value = value; + } } diff --git a/java/src/main/java/toolgood/algorithm/operands/KeyValue.java b/java/src/main/java/toolgood/algorithm/operands/KeyValue.java index 8475d6a35..cccbbd056 100644 --- a/java/src/main/java/toolgood/algorithm/operands/KeyValue.java +++ b/java/src/main/java/toolgood/algorithm/operands/KeyValue.java @@ -1,16 +1,8 @@ package toolgood.algorithm.operands; import toolgood.algorithm.Operand; -import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; class KeyValue { - public String key; - public Operand value; -} \ No newline at end of file + public String Key; + public Operand Value; +} diff --git a/java/src/main/java/toolgood/algorithm/operands/MyDate.java b/java/src/main/java/toolgood/algorithm/operands/MyDate.java new file mode 100644 index 000000000..3c3d78c0d --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/operands/MyDate.java @@ -0,0 +1,267 @@ +package toolgood.algorithm.operands; + +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public final class MyDate { + public Integer Year; + public Integer Month; + public Integer Day; + public int Hour; + public int Minute; + public int Second; + + private MyDate() { } + + public MyDate(Integer year, Integer month, Integer day, int hour, int minute, int second) { + Year = year; + Month = month; + Day = day; + Hour = hour; + Minute = minute; + Second = second; + } + + public MyDate(Date dt) { + Calendar cal = new GregorianCalendar(); + cal.setTime(dt); + Year = cal.get(Calendar.YEAR); + Month = cal.get(Calendar.MONTH) + 1; + Day = cal.get(Calendar.DAY_OF_MONTH); + Hour = cal.get(Calendar.HOUR_OF_DAY); + Minute = cal.get(Calendar.MINUTE); + Second = cal.get(Calendar.SECOND); + } + + public static MyDate Parse(String txt) { + String t = txt.trim(); + Matcher m = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Year = Integer.parseInt(m.group(1)); + date.Month = Integer.parseInt(m.group(2)); + date.Day = Integer.parseInt(m.group(3)); + date.Hour = Integer.parseInt(m.group(4)); + date.Minute = Integer.parseInt(m.group(5)); + date.Second = Integer.parseInt(m.group(6)); + return date; + } + m = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Year = Integer.parseInt(m.group(1)); + date.Month = Integer.parseInt(m.group(2)); + date.Day = Integer.parseInt(m.group(3)); + date.Hour = Integer.parseInt(m.group(4)); + date.Minute = Integer.parseInt(m.group(5)); + date.Second = Integer.parseInt(m.group(6)); + return date; + } + + m = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Year = Integer.parseInt(m.group(1)); + date.Month = Integer.parseInt(m.group(2)); + date.Day = Integer.parseInt(m.group(3)); + date.Hour = Integer.parseInt(m.group(4)); + date.Minute = Integer.parseInt(m.group(5)); + return date; + } + m = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Year = Integer.parseInt(m.group(1)); + date.Month = Integer.parseInt(m.group(2)); + date.Day = Integer.parseInt(m.group(3)); + date.Hour = Integer.parseInt(m.group(4)); + date.Minute = Integer.parseInt(m.group(5)); + return date; + } + + m = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Year = Integer.parseInt(m.group(1)); + date.Month = Integer.parseInt(m.group(2)); + date.Day = Integer.parseInt(m.group(3)); + return date; + } + m = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Year = Integer.parseInt(m.group(1)); + date.Month = Integer.parseInt(m.group(2)); + date.Day = Integer.parseInt(m.group(3)); + return date; + } + + m = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Day = Integer.parseInt(m.group(1)); + date.Hour = Integer.parseInt(m.group(2)); + date.Minute = Integer.parseInt(m.group(3)); + date.Second = Integer.parseInt(m.group(4)); + return date; + } + m = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Day = Integer.parseInt(m.group(1)); + date.Hour = Integer.parseInt(m.group(2)); + date.Minute = Integer.parseInt(m.group(3)); + return date; + } + + m = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Hour = Integer.parseInt(m.group(1)); + date.Minute = Integer.parseInt(m.group(2)); + date.Second = Integer.parseInt(m.group(3)); + return date; + } + m = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d)$").matcher(t); + if (m.find()) { + MyDate date = new MyDate(); + date.Hour = Integer.parseInt(m.group(1)); + date.Minute = Integer.parseInt(m.group(2)); + return date; + } + return null; + } + + @Override + public String toString() { + StringBuilder stringBuffer = new StringBuilder(20); + if (Year != null && Year > 0) { + stringBuffer.append(Year); + stringBuffer.append('-'); + stringBuffer.append(String.format("%02d", Month)); + stringBuffer.append('-'); + stringBuffer.append(String.format("%02d", Day)); + + stringBuffer.append(' '); + stringBuffer.append(String.format("%02d", Hour)); + stringBuffer.append(':'); + stringBuffer.append(String.format("%02d", Minute)); + stringBuffer.append(':'); + stringBuffer.append(String.format("%02d", Second)); + } else { + if (Day != null && Day > 0) { + stringBuffer.append(Day); + stringBuffer.append(' '); + } + stringBuffer.append(String.format("%02d", Hour)); + stringBuffer.append(':'); + stringBuffer.append(String.format("%02d", Minute)); + stringBuffer.append(':'); + stringBuffer.append(String.format("%02d", Second)); + } + return stringBuffer.toString(); + } + + String toString(String f) { + if (Year == null || Year == 0) { + return this.toString(); + } + Calendar cal = new GregorianCalendar(Year, Month - 1, Day, Hour, Minute, Second); + return String.format(f, cal); + } + + public Date ToDateTime() { + return new GregorianCalendar(Year != null ? Year : 0, Month != null ? Month - 1 : 0, Day != null ? Day : 0, Hour, Minute, Second).getTime(); + } + + public long ToLong() { + long d = 0; + if (Year != null) { + d += Year * 10000000000L; + } + if (Month != null) { + d += Month * 100000000L; + } + if (Day != null) { + d += Day * 1000000L; + } + d += Hour * 10000; + d += Minute * 100; + d += Second; + return d; + } + + public MyDate AddYears(int year) { + int t = (Year != null ? Year : 0) + year; + return new MyDate(t, Month, Day, Hour, Minute, Second); + } + + public MyDate AddMonths(int month) { + int t = (Month != null ? Month : 0) + month; + if (t >= 1 && t <= 12) { + return new MyDate(Year, t, Day, Hour, Minute, Second); + } + Calendar cal = new GregorianCalendar(Year != null ? Year : 0, Month != null ? Month - 1 : 0, Day != null ? Day : 0, Hour, Minute, Second); + cal.add(Calendar.MONTH, month); + return new MyDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); + } + + public MyDate AddDays(int day) { + if (Year != null && Year > 1900) { + int d = (Day != null ? Day : 0) + day; + if (d >= 1 && d <= 28) { + return new MyDate(Year, Month, d, Hour, Minute, Second); + } + Calendar cal = new GregorianCalendar(Year, Month - 1, Day, Hour, Minute, Second); + cal.add(Calendar.DAY_OF_MONTH, day); + return new MyDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); + } + int newDay = (Day != null ? Day : 0) + day; + return new MyDate(null, null, newDay, Hour, Minute, Second); + } + + public MyDate AddHours(int hour) { + int t = Hour + hour; + if (t >= 0 && t < 24) { + return new MyDate(Year, Month, Day, t, Minute, Second); + } + if (Year != null && Year > 1900) { + Calendar cal = new GregorianCalendar(Year, Month - 1, Day, Hour, Minute, Second); + cal.add(Calendar.HOUR_OF_DAY, hour); + return new MyDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); + } + int newHour = Hour + hour; + return new MyDate(null, null, Day, newHour, Minute, Second); + } + + public MyDate AddMinutes(int minute) { + int t = Minute + minute; + if (t >= 0 && t <= 59) { + return new MyDate(Year, Month, Day, Hour, t, Second); + } + if (Year != null && Year > 1900) { + Calendar cal = new GregorianCalendar(Year, Month - 1, Day, Hour, Minute, Second); + cal.add(Calendar.MINUTE, minute); + return new MyDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); + } + int newMinute = Minute + minute; + return new MyDate(null, null, Day, Hour, newMinute, Second); + } + + public MyDate AddSeconds(int second) { + int t = Second + second; + if (t >= 0 && t <= 59) { + return new MyDate(Year, Month, Day, Hour, Minute, t); + } + if (Year != null && Year > 1900) { + Calendar cal = new GregorianCalendar(Year, Month - 1, Day, Hour, Minute, Second); + cal.add(Calendar.SECOND, second); + return new MyDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); + } + int newSecond = Second + second; + return new MyDate(null, null, Day, Hour, Minute, newSecond); + } +} diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandArray.java b/java/src/main/java/toolgood/algorithm/operands/OperandArray.java index 6f48ee810..e3d991987 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandArray.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandArray.java @@ -2,71 +2,59 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -class OperandArray extends Operand { - private final List value; +final class OperandArray extends Operand { + private final List _value; public OperandArray(List obj) { - value = obj; + _value = obj; } @Override public boolean IsArray() { return true; } @Override - public boolean IsNotArray() { return false; } + public OperandType Type() { return OperandType.ARRAY; } @Override - public OperandType Type() { return OperandType.ARRARY; } - - @Override - public List ArrayValue() { return value; } + public List ArrayValue() { return _value; } @Override public Operand ToText(String errorMessage) { - return Create(this.toString()); + return Create(toString()); } @Override - public Operand ToText(String errorMessage, Object... args) { - return Create(this.toString()); + public Operand ToText(String errorMessage, Object[] args) { + return Create(toString()); } @Override public Operand ToArray(String errorMessage) { return this; } @Override - public Operand ToArray(String errorMessage, Object... args) { return this; } + public Operand ToArray(String errorMessage, Object[] args) { return this; } @Override public Operand ToJson(String errorMessage) { - String txt = this.toString(); + String txt = toString(); try { - JsonData json = JsonData.Parse(txt); + JsonData json = JsonData.parse(txt); return Operand.Create(json); - } catch (Exception e) { - return Error(errorMessage != null ? errorMessage : "Convert to json error!"); - } + } catch (Exception e) { } + return Error(errorMessage != null ? errorMessage : "Convert to json error!"); } @Override public String toString() { - StringBuilder stringBuilder = new StringBuilder(); + StringBuilder stringBuilder = new StringBuilder(_value.size() * 16); stringBuilder.append('['); - for (int i = 0; i < value.size(); i++) { - if (i > 0) { - stringBuilder.append(','); - } - stringBuilder.append(value.get(i).toString()); + for (int i = 0; i < _value.size(); i++) { + if (i > 0) stringBuilder.append(','); + stringBuilder.append(_value.get(i).toString()); } stringBuilder.append(']'); return stringBuilder.toString(); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandBigDecimal.java b/java/src/main/java/toolgood/algorithm/operands/OperandBigDecimal.java index bae4b4f04..e43d00e58 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandBigDecimal.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandBigDecimal.java @@ -1,68 +1,67 @@ package toolgood.algorithm.operands; +import java.math.BigDecimal; + import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -class OperandBigDecimal extends Operand { - private final BigDecimal value; +final class OperandBigDecimal extends Operand { + private final BigDecimal _value; public OperandBigDecimal(BigDecimal obj) { - value = obj; + _value = obj; } @Override public boolean IsNumber() { return true; } - @Override - public boolean IsNotNumber() { return false; } - @Override public OperandType Type() { return OperandType.NUMBER; } @Override - public int IntValue() { return value.intValue(); } + public int IntValue() { return _value.intValue(); } @Override - public BigDecimal NumberValue() { return value; } + public BigDecimal NumberValue() { return _value; } @Override - public long LongValue() { return value.longValue(); } + public long LongValue() { return _value.longValue(); } @Override - public double DoubleValue() { return value.doubleValue(); } - + public double DoubleValue() { return _value.doubleValue(); } @Override public Operand ToNumber(String errorMessage) { return this; } @Override - public Operand ToNumber(String errorMessage, Object... args) { return this; } + public Operand ToNumber(String errorMessage, Object[] args) { return this; } @Override - public Operand ToBoolean(String errorMessage) { return value.compareTo(BigDecimal.ZERO) != 0 ? TRUE : FALSE; } - - @Override - public Operand ToBoolean(String errorMessage, Object... args) { return value.compareTo(BigDecimal.ZERO) != 0 ? TRUE : FALSE; } - - @Override - public Operand ToText(String errorMessage) { return Create(value.toString()); } + public Operand ToBoolean(String errorMessage) { + if (_value.compareTo(BigDecimal.ZERO) == 0) { + return False; + } else if (_value.compareTo(BigDecimal.ONE) == 0) { + return True; + } + return super.ToBoolean(errorMessage); + } @Override - public Operand ToText(String errorMessage, Object... args) { return Create(value.toString()); } + public Operand ToBoolean(String errorMessage, Object[] args) { + if (_value.compareTo(BigDecimal.ZERO) == 0) { + return False; + } else if (_value.compareTo(BigDecimal.ONE) == 0) { + return True; + } + return super.ToBoolean(errorMessage); + } @Override - public Operand ToMyDate(String errorMessage) { return Create(new MyDate(value.longValue())); } + public Operand ToText(String errorMessage) { return Create(_value.toString()); } @Override - public Operand ToMyDate(String errorMessage, Object... args) { return Create(new MyDate(value.longValue())); } + public Operand ToText(String errorMessage, Object[] args) { return Create(_value.toString()); } @Override - public String toString() { return NumberValue().toString(); } -} \ No newline at end of file + public String toString() { return _value.toString(); } +} diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandBoolean.java b/java/src/main/java/toolgood/algorithm/operands/OperandBoolean.java index b38cd32d5..ca1bf924a 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandBoolean.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandBoolean.java @@ -1,52 +1,44 @@ package toolgood.algorithm.operands; +import java.util.List; + import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -class OperandBoolean extends Operand { - private final boolean value; +final class OperandBoolean extends Operand { + private final boolean _value; public OperandBoolean(boolean obj) { - value = obj; + _value = obj; } @Override public boolean IsBoolean() { return true; } - @Override - public boolean IsNotBoolean() { return false; } - @Override public OperandType Type() { return OperandType.BOOLEAN; } @Override - public boolean BooleanValue() { return value; } + public boolean BooleanValue() { return _value; } @Override - public Operand ToNumber(String errorMessage) { return value ? ONE : ZERO; } + public Operand ToNumber(String errorMessage) { return _value ? One : Zero; } @Override - public Operand ToNumber(String errorMessage, Object... args) { return value ? ONE : ZERO; } + public Operand ToNumber(String errorMessage, Object[] args) { return _value ? One : Zero; } @Override public Operand ToBoolean(String errorMessage) { return this; } @Override - public Operand ToBoolean(String errorMessage, Object... args) { return this; } + public Operand ToBoolean(String errorMessage, Object[] args) { return this; } @Override - public Operand ToText(String errorMessage) { return Create(value ? "TRUE" : "FALSE"); } + public Operand ToText(String errorMessage) { return Create(_value ? "TRUE" : "FALSE"); } @Override - public Operand ToText(String errorMessage, Object... args) { return Create(value ? "TRUE" : "FALSE"); } + public Operand ToText(String errorMessage, Object[] args) { return Create(_value ? "TRUE" : "FALSE"); } @Override - public String toString() { return value ? "true" : "false"; } -} \ No newline at end of file + public String toString() { return _value ? "true" : "false"; } +} diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandError.java b/java/src/main/java/toolgood/algorithm/operands/OperandError.java index 2b884c8cb..9efd5a86f 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandError.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandError.java @@ -2,57 +2,73 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -class OperandError extends Operand { - private final String errorMsg; - - public OperandError(String msg) { - errorMsg = msg; - } +final class OperandError extends Operand { + private final String _errorMsg; + private final Object[] _args; + private String _formattedMsg; @Override public OperandType Type() { return OperandType.ERROR; } + @Override + public boolean IsErrorOrNone() { return true; } + @Override public boolean IsError() { return true; } @Override - public String ErrorMsg() { return errorMsg; } + public String ErrorMsg() { + if (_formattedMsg == null) { + _formattedMsg = FormatMessage(); + } + return _formattedMsg; + } + + public OperandError(String msg) { + _errorMsg = msg; + _args = null; + } + + public OperandError(String msg, Object[] args) { + _errorMsg = msg; + _args = args; + } + + private String FormatMessage() { + if (_args == null || _args.length == 0) { + return _errorMsg; + } + return String.format(_errorMsg, _args); + } @Override public Operand ToNumber(String errorMessage) { return this; } @Override - public Operand ToNumber(String errorMessage, Object... args) { return this; } + public Operand ToNumber(String errorMessage, Object[] args) { return this; } @Override public Operand ToBoolean(String errorMessage) { return this; } @Override - public Operand ToBoolean(String errorMessage, Object... args) { return this; } + public Operand ToBoolean(String errorMessage, Object[] args) { return this; } @Override public Operand ToText(String errorMessage) { return this; } @Override - public Operand ToText(String errorMessage, Object... args) { return this; } + public Operand ToText(String errorMessage, Object[] args) { return this; } @Override public Operand ToArray(String errorMessage) { return this; } @Override - public Operand ToArray(String errorMessage, Object... args) { return this; } + public Operand ToArray(String errorMessage, Object[] args) { return this; } @Override public Operand ToMyDate(String errorMessage) { return this; } @Override - public Operand ToMyDate(String errorMessage, Object... args) { return this; } -} \ No newline at end of file + public Operand ToMyDate(String errorMessage, Object[] args) { return this; } +} diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandInt.java b/java/src/main/java/toolgood/algorithm/operands/OperandInt.java index c288a492a..fccf4f2b5 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandInt.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandInt.java @@ -1,68 +1,67 @@ package toolgood.algorithm.operands; +import java.math.BigDecimal; + import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -class OperandInt extends Operand { - private final int value; +final class OperandInt extends Operand { + private final int _value; public OperandInt(int obj) { - value = obj; + _value = obj; } @Override public boolean IsNumber() { return true; } - @Override - public boolean IsNotNumber() { return false; } - @Override public OperandType Type() { return OperandType.NUMBER; } @Override - public int IntValue() { return value; } + public int IntValue() { return _value; } @Override - public BigDecimal NumberValue() { return BigDecimal.valueOf(value); } + public BigDecimal NumberValue() { return BigDecimal.valueOf(_value); } @Override - public long LongValue() { return value; } + public long LongValue() { return _value; } @Override - public double DoubleValue() { return value; } - + public double DoubleValue() { return _value; } @Override public Operand ToNumber(String errorMessage) { return this; } @Override - public Operand ToNumber(String errorMessage, Object... args) { return this; } + public Operand ToNumber(String errorMessage, Object[] args) { return this; } @Override - public Operand ToBoolean(String errorMessage) { return IntValue() != 0 ? TRUE : FALSE; } - - @Override - public Operand ToBoolean(String errorMessage, Object... args) { return IntValue() != 0 ? TRUE : FALSE; } - - @Override - public Operand ToText(String errorMessage) { return Create(Integer.toString(value)); } + public Operand ToBoolean(String errorMessage) { + if (_value == 0) { + return False; + } else if (_value == 1) { + return True; + } + return super.ToBoolean(errorMessage); + } @Override - public Operand ToText(String errorMessage, Object... args) { return Create(Integer.toString(value)); } + public Operand ToBoolean(String errorMessage, Object[] args) { + if (_value == 0) { + return False; + } else if (_value == 1) { + return True; + } + return super.ToBoolean(errorMessage); + } @Override - public Operand ToMyDate(String errorMessage) { return Create(new MyDate(value)); } + public Operand ToText(String errorMessage) { return Create(Integer.toString(_value)); } @Override - public Operand ToMyDate(String errorMessage, Object... args) { return Create(new MyDate(value)); } + public Operand ToText(String errorMessage, Object[] args) { return Create(Integer.toString(_value)); } @Override - public String toString() { return NumberValue().toString(); } -} \ No newline at end of file + public String toString() { return Integer.toString(_value); } +} diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandJson.java b/java/src/main/java/toolgood/algorithm/operands/OperandJson.java index b91553c44..40ef0d37d 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandJson.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandJson.java @@ -1,86 +1,67 @@ package toolgood.algorithm.operands; +import java.util.ArrayList; +import java.util.List; + import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -class OperandJson extends Operand { - private final JsonData value; +final class OperandJson extends Operand { + private final JsonData _value; public OperandJson(JsonData obj) { - value = obj; + _value = obj; } @Override public boolean IsJson() { return true; } - @Override - public boolean IsNotJson() { return false; } - @Override public OperandType Type() { return OperandType.JSON; } @Override - JsonData JsonValue() { return value; } + public JsonData JsonValue() { return _value; } @Override public Operand ToText(String errorMessage) { - return Create(value.toString()); + return Create(_value.toString()); } @Override - public Operand ToText(String errorMessage, Object... args) { - return Create(value.toString()); + public Operand ToText(String errorMessage, Object[] args) { + return Create(_value.toString()); } @Override public Operand ToArray(String errorMessage) { - if (value.IsArray()) { - List list = new ArrayList<>(); - for (JsonData v : value.getArray()) { - if (v.IsString()) { - list.add(Operand.Create(v.getString())); - } else if (v.IsBoolean()) { - list.add(Operand.Create(v.getBoolean())); - } else if (v.IsNumber()) { - list.add(Operand.Create(new BigDecimal(v.getNumber().toString()))); - } else if (v.IsNull()) { - list.add(Operand.CreateNull()); - } else { - list.add(Operand.Create(v)); - } - } - return Operand.Create(list); - } - return Error(errorMessage != null ? errorMessage : "Convert to array error!"); + return ToArrayInternal(errorMessage); } @Override - public Operand ToArray(String errorMessage, Object... args) { - if (value.IsArray()) { - List list = new ArrayList<>(); - for (JsonData v : value.getArray()) { + public Operand ToArray(String errorMessage, Object[] args) { + return ToArrayInternal(String.format(errorMessage, args)); + } + + private Operand ToArrayInternal(String errorMessage) { + if (JsonValue().IsArray()) { + List list = new ArrayList<>(JsonValue().Count()); + for (JsonData v : JsonValue().getArray()) { if (v.IsString()) { list.add(Operand.Create(v.getString())); } else if (v.IsBoolean()) { list.add(Operand.Create(v.getBoolean())); - } else if (v.IsNumber()) { - list.add(Operand.Create(new BigDecimal(v.getNumber().toString()))); + } else if (v.IsDouble()) { + list.add(Operand.Create(v.getNumber())); } else if (v.IsNull()) { - list.add(Operand.CreateNull()); + list.add(Operand.Null); } else { list.add(Operand.Create(v)); } } - return Operand.Create(list); + return Create(list); } - return Error(String.format(errorMessage, args)); + return Error(errorMessage != null ? errorMessage : "Convert to array error!"); } @Override @@ -90,6 +71,6 @@ public Operand ToJson(String errorMessage) { @Override public String toString() { - return value.toString(); + return _value.toString(); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandKeyValue.java b/java/src/main/java/toolgood/algorithm/operands/OperandKeyValue.java index 9b01f98ce..91159fd0f 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandKeyValue.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandKeyValue.java @@ -2,29 +2,19 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -class OperandKeyValue extends Operand { - private final KeyValue value; +final class OperandKeyValue extends Operand { + private final KeyValue _value; public OperandKeyValue(KeyValue obj) { - value = obj; + _value = obj; } @Override public boolean IsArrayJson() { return true; } @Override - public boolean IsNotArrayJson() { return false; } + public OperandType Type() { return OperandType.ARRAYJSON; } - @Override - public OperandType Type() { return OperandType.ARRARYJSON; } - - public KeyValue Value() { return value; } -} \ No newline at end of file + public KeyValue Value() { return _value; } +} diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandKeyValueList.java b/java/src/main/java/toolgood/algorithm/operands/OperandKeyValueList.java index a14ca62b0..fb27be15f 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandKeyValueList.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandKeyValueList.java @@ -1,104 +1,95 @@ package toolgood.algorithm.operands; +import java.util.ArrayList; +import java.util.List; + import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -class OperandKeyValueList extends Operand { - private final List textList; +final class OperandKeyValueList extends Operand { + private final List _keyValueList; public OperandKeyValueList() { - textList = new ArrayList<>(); + _keyValueList = new ArrayList<>(); } @Override public boolean IsArrayJson() { return true; } @Override - public boolean IsNotArrayJson() { return false; } - - @Override - public OperandType Type() { return OperandType.ARRARYJSON; } + public OperandType Type() { return OperandType.ARRAYJSON; } @Override public List ArrayValue() { - List result = new ArrayList<>(); - for (KeyValue kv : textList) { - result.add(kv.value); + List result = new ArrayList<>(_keyValueList.size()); + for (KeyValue kv : _keyValueList) { + result.add(kv.Value); } return result; } @Override public Operand ToText(String errorMessage) { - return Create(this.toString()); + return Create(toString()); } @Override - public Operand ToText(String errorMessage, Object... args) { - return Create(this.toString()); + public Operand ToText(String errorMessage, Object[] args) { + return Create(toString()); } @Override public Operand ToArray(String errorMessage) { - return Create(this.ArrayValue()); + return Create(ArrayValue()); } @Override - public Operand ToArray(String errorMessage, Object... args) { - return Create(this.ArrayValue()); + public Operand ToArray(String errorMessage, Object[] args) { + return Create(ArrayValue()); } @Override public Operand ToJson(String errorMessage) { - String txt = this.toString(); + String txt = toString(); try { - JsonData json = JsonData.Parse(txt); + JsonData json = JsonData.parse(txt); return Operand.Create(json); - } catch (Exception e) { - return Error(errorMessage != null ? errorMessage : "Convert to json error!"); - } + } catch (Exception e) { } + return Error(errorMessage != null ? errorMessage : "Convert to json error!"); } - public void addValue(KeyValue keyValue) { - textList.add(keyValue); + public void AddValue(KeyValue keyValue) { + _keyValueList.add(keyValue); } - public boolean tryGetValue(String key, Operand[] value) { - for (KeyValue item : textList) { - if (item.key.equals(key)) { - value[0] = item.value; + public boolean TryGetValue(String key, Operand[] value) { + for (KeyValue item : _keyValueList) { + if (item.Key.equals(key)) { + value[0] = item.Value; return true; } } return false; } - public boolean containsKey(Operand value) { - for (KeyValue item : textList) { - if (value.TextValue().equals(item.key)) { + public boolean ContainsKey(Operand value) { + for (KeyValue item : _keyValueList) { + if (item.Key.equals(value.TextValue())) { return true; } } return false; } - public boolean containsValue(Operand value) { - for (KeyValue item : textList) { - Operand op = item.value; + public boolean ContainsValue(Operand value) { + for (KeyValue item : _keyValueList) { + Operand op = item.Value; if (value.Type() != op.Type()) { continue; } - if (value.IsText()) { - if (value.TextValue().equals(op.TextValue())) { - return true; - } + if (value.IsText() && value.TextValue().equals(op.TextValue())) { + return true; } } return false; @@ -106,19 +97,17 @@ public boolean containsValue(Operand value) { @Override public String toString() { - StringBuilder stringBuilder = new StringBuilder(); + StringBuilder stringBuilder = new StringBuilder(_keyValueList.size() * 32); stringBuilder.append('{'); - for (int i = 0; i < textList.size(); i++) { - if (i > 0) { - stringBuilder.append(','); - } + for (int i = 0; i < _keyValueList.size(); i++) { + if (i > 0) stringBuilder.append(','); stringBuilder.append('"'); - stringBuilder.append(textList.get(i).key); + stringBuilder.append(_keyValueList.get(i).Key); stringBuilder.append('"'); stringBuilder.append(':'); - stringBuilder.append(textList.get(i).value.toString()); + stringBuilder.append(_keyValueList.get(i).Value.toString()); } stringBuilder.append('}'); return stringBuilder.toString(); } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandMyDate.java b/java/src/main/java/toolgood/algorithm/operands/OperandMyDate.java index 2165909bb..9c84021f5 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandMyDate.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandMyDate.java @@ -2,57 +2,35 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -class OperandMyDate extends Operand { - private final MyDate value; +final class OperandMyDate extends Operand { + private final MyDate _value; public OperandMyDate(MyDate obj) { - value = obj; + _value = obj; } @Override public boolean IsDate() { return true; } - @Override - public boolean IsNotDate() { return false; } - @Override public OperandType Type() { return OperandType.DATE; } @Override - public MyDate DateValue() { return value; } - - @Override - public Operand ToNumber(String errorMessage) { return Create(value.ToNumber()); } - - @Override - public Operand ToNumber(String errorMessage, Object... args) { return Create(value.ToNumber()); } - - @Override - public Operand ToBoolean(String errorMessage) { return value.ToNumber() != 0 ? TRUE : FALSE; } - - @Override - public Operand ToBoolean(String errorMessage, Object... args) { return value.ToNumber() != 0 ? TRUE : FALSE; } + public MyDate DateValue() { return _value; } @Override - public Operand ToText(String errorMessage) { return Create(value.toString()); } + public Operand ToText(String errorMessage) { return Create(DateValue().toString()); } @Override - public Operand ToText(String errorMessage, Object... args) { return Create(value.toString()); } + public Operand ToText(String errorMessage, Object[] args) { return Create(DateValue().toString()); } @Override public Operand ToMyDate(String errorMessage) { return this; } @Override - public Operand ToMyDate(String errorMessage, Object... args) { return this; } + public Operand ToMyDate(String errorMessage, Object[] args) { return this; } @Override - public String toString() { return '"' + value.toString() + '"'; } -} \ No newline at end of file + public String toString() { return "\"" + DateValue().toString() + "\""; } +} diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandNone.java b/java/src/main/java/toolgood/algorithm/operands/OperandNone.java index 39474dd7d..75d0d5892 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandNone.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandNone.java @@ -2,28 +2,14 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -/** - * NONE 类型操作数,用于参数类型推断(NoneEngine 返回此值) - */ class OperandNone extends Operand { - @Override public OperandType Type() { return OperandType.NONE; } @Override - public boolean IsError() { return true; } - - @Override - public String ErrorMsg() { return "NONE"; } + public boolean IsErrorOrNone() { return true; } @Override - public String toString() { return "NONE"; } -} \ No newline at end of file + public boolean IsNone() { return true; } +} diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandNull.java b/java/src/main/java/toolgood/algorithm/operands/OperandNull.java index 7eaefc1cb..f5c8785ac 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandNull.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandNull.java @@ -2,24 +2,14 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.litJson.JsonData; -import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; -class OperandNull extends Operand { +final class OperandNull extends Operand { @Override public boolean IsNull() { return true; } - @Override - public boolean IsNotNull() { return false; } - @Override public OperandType Type() { return OperandType.NULL; } @Override public String toString() { return "null"; } -} \ No newline at end of file +} diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandString.java b/java/src/main/java/toolgood/algorithm/operands/OperandString.java index 644dd414d..160997712 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandString.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandString.java @@ -1,128 +1,93 @@ package toolgood.algorithm.operands; +import java.math.BigDecimal; + import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.litJson.JsonData; import toolgood.algorithm.internals.functions.FunctionUtil; -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.List; -import java.util.Locale; +import toolgood.algorithm.litJson.JsonData; -class OperandString extends Operand { - private final String value; +final class OperandString extends Operand { + private final String _value; public OperandString(String obj) { - value = obj; + _value = obj; } @Override public boolean IsText() { return true; } - @Override - public boolean IsNotText() { return false; } - @Override public OperandType Type() { return OperandType.TEXT; } @Override - public String TextValue() { return value; } + public String TextValue() { return _value; } @Override public Operand ToNumber(String errorMessage) { - try { - BigDecimal bd = new BigDecimal(value); - return Operand.Create(bd); - } catch (NumberFormatException e) { - if (errorMessage == null) { - return Error("Convert to number error!"); - } - return Error(errorMessage); - } + return ToNumberInternal(errorMessage); } @Override - public Operand ToNumber(String errorMessage, Object... args) { - try { - BigDecimal bd = new BigDecimal(value); - return Operand.Create(bd); - } catch (NumberFormatException e) { - if (errorMessage == null) { - return Error("Convert to number error!"); - } - return Error(String.format(errorMessage, args)); + public Operand ToNumber(String errorMessage, Object[] args) { + return ToNumberInternal(String.format(errorMessage, args)); + } + + private Operand ToNumberInternal(String errorMessage) { + String text = TextValue(); + if (text.indexOf('.') < 0) { + try { + int num = Integer.parseInt(text); + return Operand.Create(num); + } catch (NumberFormatException e) { } } + try { + BigDecimal d = new BigDecimal(text); + return Operand.Create(d); + } catch (NumberFormatException e) { } + return Error(errorMessage != null ? errorMessage : "Convert to number error!"); } @Override public Operand ToText(String errorMessage) { return this; } @Override - public Operand ToText(String errorMessage, Object... args) { return this; } + public Operand ToText(String errorMessage, Object[] args) { return this; } @Override public Operand ToBoolean(String errorMessage) { - FunctionUtil.BooleanHolder boolHolder = new FunctionUtil.BooleanHolder(); - if (FunctionUtil.tryParseBoolean(value, boolHolder)) { - return boolHolder.value ? Operand.TRUE : Operand.FALSE; - } - if (errorMessage == null) { - return Error("Convert to bool error!"); - } - return Error(errorMessage); + return ToBooleanInternal(errorMessage); } @Override - public Operand ToBoolean(String errorMessage, Object... args) { - FunctionUtil.BooleanHolder boolHolder = new FunctionUtil.BooleanHolder(); - if (FunctionUtil.tryParseBoolean(value, boolHolder)) { - return boolHolder.value ? Operand.TRUE : Operand.FALSE; - } - if (errorMessage == null) { - return Error("Convert to bool error!"); + public Operand ToBoolean(String errorMessage, Object[] args) { + return ToBooleanInternal(String.format(errorMessage, args)); + } + + private Operand ToBooleanInternal(String errorMessage) { + boolean[] result = new boolean[1]; + if (FunctionUtil.TryParseBoolean(TextValue(), result)) { + return result[0] ? Operand.True : Operand.False; } - return Error(String.format(errorMessage, args)); + return Error(errorMessage != null ? errorMessage : "Convert to bool error!"); } @Override public Operand ToMyDate(String errorMessage) { - try { - // 尝试解析为时间戳 - long timestamp = Long.parseLong(value); - return Create(new MyDate(timestamp)); - } catch (NumberFormatException e) { - // 尝试解析为日期字符串 - try { - MyDate date = MyDate.parse(value); - return Create(date); - } catch (Exception ex) { - if (errorMessage == null) { - return Error("Convert to date error!"); - } - return Error(errorMessage); - } - } + return ToMyDateInternal(errorMessage); } @Override - public Operand ToMyDate(String errorMessage, Object... args) { - try { - // 尝试解析为时间戳 - long timestamp = Long.parseLong(value); - return Create(new MyDate(timestamp)); - } catch (NumberFormatException e) { - // 尝试解析为日期字符串 - try { - MyDate date = MyDate.parse(value); - return Create(date); - } catch (Exception ex) { - if (errorMessage == null) { - return Error("Convert to date error!"); - } - return Error(String.format(errorMessage, args)); - } + public Operand ToMyDate(String errorMessage, Object[] args) { + return ToMyDateInternal(String.format(errorMessage, args)); + } + + private Operand ToMyDateInternal(String errorMessage) { + MyDate date = MyDate.Parse(TextValue()); + if (date != null) { + return Create(date); } + return Error(errorMessage != null ? errorMessage : "Convert to date error!"); } @Override @@ -132,56 +97,50 @@ public Operand ToArray(String errorMessage) { @Override public Operand ToJson(String errorMessage) { - String txt = value.trim(); - if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { + String span = TextValue().trim(); + if ((span.length() > 0 && span.charAt(0) == '{' && span.charAt(span.length() - 1) == '}') || + (span.length() > 0 && span.charAt(0) == '[' && span.charAt(span.length() - 1) == ']')) { try { - JsonData json = JsonData.Parse(txt); + JsonData json = JsonData.parse(span); return Operand.Create(json); - } catch (Exception e) { - } + } catch (Exception e) { } } return Error(errorMessage != null ? errorMessage : "Convert to json error!"); } @Override public String toString() { - StringBuilder sb = new StringBuilder(); + int len = _value.length(); + for (int i = 0; i < len; i++) { + char c = _value.charAt(i); + if (c == '"' || c == '\\' || c == '\n' || c == '\r' || c == '\t' + || c == '\0' || c == '\u000b' || c == '\u0007' || c == '\b' || c == '\f') { + return ToStringInternal(); + } + } + return "\"" + _value + "\""; + } + + private String ToStringInternal() { + StringBuilder sb = new StringBuilder(_value.length() + 16); sb.append('"'); - for (char c : value.toCharArray()) { + for (int i = 0; i < _value.length(); i++) { + char c = _value.charAt(i); switch (c) { - case '"': - sb.append("\\\""); - break; - case '\n': - sb.append("\\n"); - break; - case '\r': - sb.append("\\r"); - break; - case '\t': - sb.append("\\t"); - break; - case '\0': - sb.append("\\0"); - break; - case '\u000b': - sb.append("\\v"); - break; - case '\u0007': - sb.append("\\a"); - break; - case '\b': - sb.append("\\b"); - break; - case '\f': - sb.append("\\f"); - break; - default: - sb.append(c); - break; + case '"': sb.append("\\\""); break; + case '\\': sb.append("\\\\"); break; + case '\n': sb.append("\\n"); break; + case '\r': sb.append("\\r"); break; + case '\t': sb.append("\\t"); break; + case '\0': sb.append("\\0"); break; + case '\u000b': sb.append("\\v"); break; + case '\u0007': sb.append("\\a"); break; + case '\b': sb.append("\\b"); break; + case '\f': sb.append("\\f"); break; + default: sb.append(c); break; } } sb.append('"'); return sb.toString(); } -} \ No newline at end of file +} From 22e00d5822455429d035bbd4a2b186bccd806886 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 09:15:03 +0800 Subject: [PATCH 48/98] fix --- .../main/java/toolgood/algorithm/Operand.java | 3 +- .../toolgood/algorithm/litJson/JsonData.java | 2 +- .../algorithm/litJson/JsonMapper.java | 2 +- .../toolgood/algorithm/operands/KeyValue.java | 2 +- .../toolgood/algorithm/operands/MyDate.java | 33 ++++++++++++++----- .../algorithm/operands/OperandArray.java | 7 ++-- .../algorithm/operands/OperandBoolean.java | 4 +-- .../algorithm/operands/OperandError.java | 2 +- .../algorithm/operands/OperandJson.java | 8 ++--- .../algorithm/operands/OperandKeyValue.java | 2 +- .../operands/OperandKeyValueList.java | 7 ++-- .../algorithm/operands/OperandMyDate.java | 2 +- .../algorithm/operands/OperandNone.java | 2 +- .../algorithm/operands/OperandNull.java | 2 +- .../algorithm/operands/OperandString.java | 7 ++-- 15 files changed, 50 insertions(+), 35 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/Operand.java b/java/src/main/java/toolgood/algorithm/Operand.java index 57d1c7612..b507b1306 100644 --- a/java/src/main/java/toolgood/algorithm/Operand.java +++ b/java/src/main/java/toolgood/algorithm/Operand.java @@ -8,6 +8,7 @@ import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.litJson.JsonMapper; import toolgood.algorithm.operands.MyDate; import toolgood.algorithm.operands.OperandArray; import toolgood.algorithm.operands.OperandBigDecimal; @@ -155,7 +156,7 @@ public static Operand Create(String obj) { public static Operand CreateJson(String txt) { if ((txt.startsWith("{") && txt.endsWith("}")) || (txt.startsWith("[") && txt.endsWith("]"))) { try { - JsonData json = JsonData.parse(txt); + JsonData json = JsonMapper.ToObject(txt); return Operand.Create(json); } catch (Exception e) { } diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java index efd10d34d..d37a9d0e2 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java @@ -8,7 +8,7 @@ import java.util.List; import java.util.Map; -final class JsonData implements Iterable { +public final class JsonData implements Iterable { private List inst_array; private boolean inst_boolean; private BigDecimal inst_double; diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java b/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java index a90fae255..680f44fee 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonMapper.java @@ -2,7 +2,7 @@ import java.math.BigDecimal; -final class JsonMapper { +public final class JsonMapper { private static JsonData ReadValue(JsonReader reader) throws Exception { reader.Read(); diff --git a/java/src/main/java/toolgood/algorithm/operands/KeyValue.java b/java/src/main/java/toolgood/algorithm/operands/KeyValue.java index cccbbd056..c66b95948 100644 --- a/java/src/main/java/toolgood/algorithm/operands/KeyValue.java +++ b/java/src/main/java/toolgood/algorithm/operands/KeyValue.java @@ -2,7 +2,7 @@ import toolgood.algorithm.Operand; -class KeyValue { +public class KeyValue { public String Key; public Operand Value; } diff --git a/java/src/main/java/toolgood/algorithm/operands/MyDate.java b/java/src/main/java/toolgood/algorithm/operands/MyDate.java index 3c3d78c0d..26a55be50 100644 --- a/java/src/main/java/toolgood/algorithm/operands/MyDate.java +++ b/java/src/main/java/toolgood/algorithm/operands/MyDate.java @@ -1,5 +1,6 @@ package toolgood.algorithm.operands; +import java.time.Duration; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; @@ -36,6 +37,15 @@ public MyDate(Date dt) { Second = cal.get(Calendar.SECOND); } + public MyDate(Duration dt) { + Year = null; + Month = null; + Day = (int) dt.toDays(); + Hour = (int) (dt.toHours() % 24); + Minute = (int) (dt.toMinutes() % 60); + Second = (int) (dt.getSeconds() % 60); + } + public static MyDate Parse(String txt) { String t = txt.trim(); Matcher m = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$").matcher(t); @@ -177,6 +187,13 @@ public Date ToDateTime() { return new GregorianCalendar(Year != null ? Year : 0, Month != null ? Month - 1 : 0, Day != null ? Day : 0, Hour, Minute, Second).getTime(); } + public Duration ToTimeSpan() { + return Duration.ofDays(Day != null ? Day : 0) + .plusHours(Hour) + .plusMinutes(Minute) + .plusSeconds(Second); + } + public long ToLong() { long d = 0; if (Year != null) { @@ -219,8 +236,8 @@ public MyDate AddDays(int day) { cal.add(Calendar.DAY_OF_MONTH, day); return new MyDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); } - int newDay = (Day != null ? Day : 0) + day; - return new MyDate(null, null, newDay, Hour, Minute, Second); + Duration duration = ToTimeSpan().plusDays(day); + return new MyDate(duration); } public MyDate AddHours(int hour) { @@ -233,8 +250,8 @@ public MyDate AddHours(int hour) { cal.add(Calendar.HOUR_OF_DAY, hour); return new MyDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); } - int newHour = Hour + hour; - return new MyDate(null, null, Day, newHour, Minute, Second); + Duration duration = ToTimeSpan().plusHours(hour); + return new MyDate(duration); } public MyDate AddMinutes(int minute) { @@ -247,8 +264,8 @@ public MyDate AddMinutes(int minute) { cal.add(Calendar.MINUTE, minute); return new MyDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); } - int newMinute = Minute + minute; - return new MyDate(null, null, Day, Hour, newMinute, Second); + Duration duration = ToTimeSpan().plusMinutes(minute); + return new MyDate(duration); } public MyDate AddSeconds(int second) { @@ -261,7 +278,7 @@ public MyDate AddSeconds(int second) { cal.add(Calendar.SECOND, second); return new MyDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH) + 1, cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE), cal.get(Calendar.SECOND)); } - int newSecond = Second + second; - return new MyDate(null, null, Day, Hour, Minute, newSecond); + Duration duration = ToTimeSpan().plusSeconds(second); + return new MyDate(duration); } } diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandArray.java b/java/src/main/java/toolgood/algorithm/operands/OperandArray.java index e3d991987..5ce20ac20 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandArray.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandArray.java @@ -1,8 +1,10 @@ package toolgood.algorithm.operands; +import java.util.List; + import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.litJson.JsonMapper; final class OperandArray extends Operand { private final List _value; @@ -40,8 +42,7 @@ public Operand ToText(String errorMessage, Object[] args) { public Operand ToJson(String errorMessage) { String txt = toString(); try { - JsonData json = JsonData.parse(txt); - return Operand.Create(json); + return Operand.Create(JsonMapper.ToObject(txt)); } catch (Exception e) { } return Error(errorMessage != null ? errorMessage : "Convert to json error!"); } diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandBoolean.java b/java/src/main/java/toolgood/algorithm/operands/OperandBoolean.java index ca1bf924a..177d50818 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandBoolean.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandBoolean.java @@ -1,11 +1,9 @@ package toolgood.algorithm.operands; -import java.util.List; - import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -final class OperandBoolean extends Operand { +public final class OperandBoolean extends Operand { private final boolean _value; public OperandBoolean(boolean obj) { diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandError.java b/java/src/main/java/toolgood/algorithm/operands/OperandError.java index 9efd5a86f..8f1c84ca9 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandError.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandError.java @@ -3,7 +3,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -final class OperandError extends Operand { +public final class OperandError extends Operand { private final String _errorMsg; private final Object[] _args; private String _formattedMsg; diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandJson.java b/java/src/main/java/toolgood/algorithm/operands/OperandJson.java index 40ef0d37d..0fa3c9e06 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandJson.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandJson.java @@ -46,13 +46,13 @@ public Operand ToArray(String errorMessage, Object[] args) { private Operand ToArrayInternal(String errorMessage) { if (JsonValue().IsArray()) { List list = new ArrayList<>(JsonValue().Count()); - for (JsonData v : JsonValue().getArray()) { + for (JsonData v : JsonValue()) { if (v.IsString()) { - list.add(Operand.Create(v.getString())); + list.add(Operand.Create(v.StringValue())); } else if (v.IsBoolean()) { - list.add(Operand.Create(v.getBoolean())); + list.add(Operand.Create(v.BooleanValue())); } else if (v.IsDouble()) { - list.add(Operand.Create(v.getNumber())); + list.add(Operand.Create(v.NumberValue())); } else if (v.IsNull()) { list.add(Operand.Null); } else { diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandKeyValue.java b/java/src/main/java/toolgood/algorithm/operands/OperandKeyValue.java index 91159fd0f..f7676cdc2 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandKeyValue.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandKeyValue.java @@ -3,7 +3,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -final class OperandKeyValue extends Operand { +public final class OperandKeyValue extends Operand { private final KeyValue _value; public OperandKeyValue(KeyValue obj) { diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandKeyValueList.java b/java/src/main/java/toolgood/algorithm/operands/OperandKeyValueList.java index fb27be15f..e650fd31f 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandKeyValueList.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandKeyValueList.java @@ -5,9 +5,9 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.litJson.JsonMapper; -final class OperandKeyValueList extends Operand { +public final class OperandKeyValueList extends Operand { private final List _keyValueList; public OperandKeyValueList() { @@ -53,8 +53,7 @@ public Operand ToArray(String errorMessage, Object[] args) { public Operand ToJson(String errorMessage) { String txt = toString(); try { - JsonData json = JsonData.parse(txt); - return Operand.Create(json); + return Operand.Create(JsonMapper.ToObject(txt)); } catch (Exception e) { } return Error(errorMessage != null ? errorMessage : "Convert to json error!"); } diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandMyDate.java b/java/src/main/java/toolgood/algorithm/operands/OperandMyDate.java index 9c84021f5..36bafe61c 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandMyDate.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandMyDate.java @@ -3,7 +3,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -final class OperandMyDate extends Operand { +public final class OperandMyDate extends Operand { private final MyDate _value; public OperandMyDate(MyDate obj) { diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandNone.java b/java/src/main/java/toolgood/algorithm/operands/OperandNone.java index 75d0d5892..289c94f96 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandNone.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandNone.java @@ -3,7 +3,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -class OperandNone extends Operand { +public final class OperandNone extends Operand { @Override public OperandType Type() { return OperandType.NONE; } diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandNull.java b/java/src/main/java/toolgood/algorithm/operands/OperandNull.java index f5c8785ac..a7f6e4bc9 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandNull.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandNull.java @@ -3,7 +3,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -final class OperandNull extends Operand { +public final class OperandNull extends Operand { @Override public boolean IsNull() { return true; } diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandString.java b/java/src/main/java/toolgood/algorithm/operands/OperandString.java index 160997712..be7e35bc2 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandString.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandString.java @@ -5,9 +5,9 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.litJson.JsonMapper; -final class OperandString extends Operand { +public final class OperandString extends Operand { private final String _value; public OperandString(String obj) { @@ -101,8 +101,7 @@ public Operand ToJson(String errorMessage) { if ((span.length() > 0 && span.charAt(0) == '{' && span.charAt(span.length() - 1) == '}') || (span.length() > 0 && span.charAt(0) == '[' && span.charAt(span.length() - 1) == ']')) { try { - JsonData json = JsonData.parse(span); - return Operand.Create(json); + return Operand.Create(JsonMapper.ToObject(span)); } catch (Exception e) { } } return Error(errorMessage != null ? errorMessage : "Convert to json error!"); From 7f1f3f3624a51035c405449e1b03745591009d6b Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 09:25:40 +0800 Subject: [PATCH 49/98] fix --- .../internals/functions/FunctionUtil.java | 241 +++++------------- .../internals/functions/StringComparison.java | 12 + .../algorithm/internals/functions/Tuple.java | 19 ++ .../functions/compare/Function_EQ.java | 4 +- .../functions/compare/Function_GE.java | 6 +- .../functions/compare/Function_GT.java | 6 +- .../functions/compare/Function_LE.java | 6 +- .../functions/compare/Function_LT.java | 6 +- .../functions/compare/Function_NE.java | 4 +- .../internals/visitors/CharUtil.java | 207 ++------------- .../algorithm/operands/OperandArray.java | 2 +- .../algorithm/operands/OperandInt.java | 2 +- .../algorithm/operands/OperandJson.java | 2 +- .../toolgood/algorithm/system/MathEx.java | 3 +- 14 files changed, 136 insertions(+), 384 deletions(-) create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/StringComparison.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/Tuple.java diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java index 6ce4c927b..19a39f362 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java @@ -2,125 +2,78 @@ import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.visitors.CharUtil; -public class FunctionUtil { - public static final long START_DATE_UTC = 0; +public final class FunctionUtil { + public static final long StartDateUtc = 0; public static StringComparison GetStringComparison(boolean ignoreCase) { return ignoreCase ? StringComparison.OrdinalIgnoreCase : StringComparison.Ordinal; } - private static boolean FlattenToListCore(List args, List list) { + private static boolean FlattenToListCore(List args, List list, java.util.function.Function converter, java.util.function.Function valueGetter) { + java.util.Queue queue = new java.util.LinkedList<>(); for (int i = 0; i < args.size(); i++) { - Operand item = args.get(i); - if (item.IsArray()) { - List array = item.ArrayValue(); - for (int j = 0; j < array.size(); j++) { - List tempList = new ArrayList<>(); - tempList.add(array.get(j)); - if (!FlattenToListCore(tempList, list)) return false; - } - } else if (item.IsJson()) { - Operand i = item.ToArray(null); - if (i.IsError()) return false; - List array = i.ArrayValue(); - for (int j = 0; j < array.size(); j++) { - List tempList = new ArrayList<>(); - tempList.add(array.get(j)); - if (!FlattenToListCore(tempList, list)) return false; - } - } else { - list.add(item); - } + queue.add(args.get(i)); } - return true; - } - private static boolean FlattenToListCoreDecimal(List args, List list) { - for (int i = 0; i < args.size(); i++) { - Operand item = args.get(i); + while (queue.size() > 0) { + Operand item = queue.poll(); + if (item.IsArray()) { List array = item.ArrayValue(); - for (int j = 0; j < array.size(); j++) { - List tempList = new ArrayList<>(); - tempList.add(array.get(j)); - if (!FlattenToListCoreDecimal(tempList, list)) return false; + for (int i = 0; i < array.size(); i++) { + queue.add(array.get(i)); } } else if (item.IsJson()) { - Operand ii = item.ToArray(null); - if (ii.IsError()) return false; - List array = ii.ArrayValue(); + Operand i = item.ToArray(null); + if (i.IsError()) { return false; } + List array = i.ArrayValue(); for (int j = 0; j < array.size(); j++) { - List tempList = new ArrayList<>(); - tempList.add(array.get(j)); - if (!FlattenToListCoreDecimal(tempList, list)) return false; + queue.add(array.get(j)); } } else { - Operand converted = item.IsNumber() ? item : item.ToNumber(null); - if (converted.IsError()) return false; - list.add(converted.NumberValue()); + Operand converted = converter.apply(item); + if (converted.IsError()) { return false; } + list.add(valueGetter.apply(converted)); } } return true; } - private static boolean FlattenToListCoreDecimal(Operand args, List list) { - if (args.IsError()) return false; + private static boolean FlattenToListCore(Operand args, List list, java.util.function.Function converter, java.util.function.Function valueGetter) { + if (args.IsError()) { return false; } if (args.IsArray()) { - return FlattenToListCoreDecimal(args.ArrayValue(), list); + return FlattenToListCore(args.ArrayValue(), list, converter, valueGetter); } else if (args.IsJson()) { Operand i = args.ToArray(null); - if (i.IsError()) return false; - return FlattenToListCoreDecimal(i.ArrayValue(), list); + if (i.IsError()) { return false; } + return FlattenToListCore(i.ArrayValue(), list, converter, valueGetter); } else { - Operand converted = args.IsNumber() ? args : args.ToNumber(null); - if (converted.IsError()) return false; - list.add(converted.NumberValue()); - } - return true; - } - - private static boolean FlattenToListCoreString(Operand args, List list) { - if (args.IsError()) return false; - if (args.IsArray()) { - List array = args.ArrayValue(); - for (int i = 0; i < array.size(); i++) { - if (!FlattenToListCoreString(array.get(i), list)) return false; - } - } else if (args.IsJson()) { - Operand i = args.ToArray(null); - if (i.IsError()) return false; - List array = i.ArrayValue(); - for (int j = 0; j < array.size(); j++) { - if (!FlattenToListCoreString(array.get(j), list)) return false; - } - } else { - Operand converted = args.ToText(null); - if (converted.IsError()) return false; - list.add(converted.TextValue()); + Operand converted = converter.apply(args); + if (converted.IsError()) { return false; } + list.add(valueGetter.apply(converted)); } return true; } public static boolean FlattenToList(List args, List list) { - return FlattenToListCore(args, list); + return FlattenToListCore(args, list, obj -> obj, obj -> obj); } public static boolean FlattenToList(List args, List list) { - return FlattenToListCoreDecimal(args, list); + return FlattenToListCore(args, list, obj -> obj.IsNumber() ? obj : obj.ToNumber(null), obj -> obj.NumberValue()); } public static boolean FlattenToList(Operand args, List list) { - return FlattenToListCoreDecimal(args, list); + return FlattenToListCore(args, list, obj -> obj.IsNumber() ? obj : obj.ToNumber(null), obj -> obj.NumberValue()); } public static boolean FlattenToList(Operand args, List list) { - return FlattenToListCoreString(args, list); + return FlattenToListCore(args, list, obj -> obj.ToText(null), obj -> obj.TextValue()); } public static int GetCountIf(List dbs, BigDecimal d) { @@ -183,7 +136,7 @@ public static boolean CompareValues(BigDecimal a, BigDecimal b, String ss) { public static int GetGcd(List list) { if (list.size() == 0) return 1; - + int g = list.get(0).intValue(); for (int i = 1; i < list.size(); i++) { g = GetGcd(g, list.get(i).intValue()); @@ -203,20 +156,20 @@ public static int GetGcd(int a, int b) { public static int GetLcm(List list) { if (list.size() == 0) return 1; - + int a = 0; boolean foundFirst = false; - + for (int i = 0; i < list.size(); i++) { int val = list.get(i).intValue(); if (val <= 1) continue; - + if (!foundFirst) { a = val; foundFirst = true; continue; } - + int b = val; int g = b > a ? GetGcd(b, a) : GetGcd(a, b); a = a / g * b; @@ -225,7 +178,7 @@ public static int GetLcm(List list) { } public static int GetFactorial(int a) { - if (a <= 0) return 1; + if (a <= 0) { return 1; } int r = 1; for (int i = a; i > 0; i--) { r *= i; @@ -233,48 +186,37 @@ public static int GetFactorial(int a) { return r; } - public static Pair ParseSumIfMatch(String s) { - if (s == null || s.length() == 0) return null; - + public static Tuple ParseSumIfMatch(String s) { + if (s == null || s.length() == 0) { return null; } char c = s.charAt(0); if (c == '>' || c == '\uff1e') { if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '\uff1d')) { try { BigDecimal d = new BigDecimal(s.substring(2).trim()); - return new Pair<>(">=", d); - } catch (NumberFormatException e) { - return null; - } + return new Tuple<>(">=", d); + } catch (NumberFormatException e) { } } else { try { BigDecimal d = new BigDecimal(s.substring(1).trim()); - return new Pair<>(">", d); - } catch (NumberFormatException e) { - return null; - } + return new Tuple<>(">", d); + } catch (NumberFormatException e) { } } } else if (c == '<' || c == '\uff1c') { if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '\uff1d')) { try { BigDecimal d = new BigDecimal(s.substring(2).trim()); - return new Pair<>("<=", d); - } catch (NumberFormatException e) { - return null; - } + return new Tuple<>("<=", d); + } catch (NumberFormatException e) { } } else if (s.length() > 1 && (s.charAt(1) == '>' || s.charAt(1) == '\uff1e')) { try { BigDecimal d = new BigDecimal(s.substring(2).trim()); - return new Pair<>("!=", d); - } catch (NumberFormatException e) { - return null; - } + return new Tuple<>("!=", d); + } catch (NumberFormatException e) { } } else { try { BigDecimal d = new BigDecimal(s.substring(1).trim()); - return new Pair<>("<", d); - } catch (NumberFormatException e) { - return null; - } + return new Tuple<>("<", d); + } catch (NumberFormatException e) { } } } else if (c == '=' || c == '\uff1d') { int index = 1; @@ -286,10 +228,8 @@ public static Pair ParseSumIfMatch(String s) { } try { BigDecimal d = new BigDecimal(s.substring(index).trim()); - return new Pair<>("=", d); - } catch (NumberFormatException e) { - return null; - } + return new Tuple<>("=", d); + } catch (NumberFormatException e) { } } else if (c == '!' || c == '\uff01') { int index = 1; if (s.length() > 1 && (s.charAt(1) == '=' || s.charAt(1) == '\uff1d')) { @@ -300,73 +240,47 @@ public static Pair ParseSumIfMatch(String s) { } try { BigDecimal d = new BigDecimal(s.substring(index).trim()); - return new Pair<>("!=", d); - } catch (NumberFormatException e) { - return null; - } + return new Tuple<>("!=", d); + } catch (NumberFormatException e) { } } return null; } - public static boolean TryParseBoolean(String textValue, BooleanHolder boolValue) { - int len = textValue.length(); + public static boolean TryParseBoolean(String TextValue, boolean[] boolValue) { + int len = TextValue.length(); switch (len) { case 1: { - char c = textValue.charAt(0); - if (c == '1' || c == '\u662f' || c == '\u6709') { - boolValue.value = true; - return true; - } - if (c == '0' || c == '\u5426' || c == '\u65e0') { - boolValue.value = false; - return true; - } + char c = TextValue.charAt(0); + if (c == '1' || c == '\u662f' || c == '\u6709') { boolValue[0] = true; return true; } + if (c == '0' || c == '\u5426' || c == '\u65e0') { boolValue[0] = false; return true; } break; } case 2: { - if (textValue.equalsIgnoreCase("no")) { - boolValue.value = false; - return true; - } - if (textValue.equals("\u4e0d\u662f")) { - boolValue.value = false; - return true; - } - if (textValue.equals("\u6ca1\u6709")) { - boolValue.value = false; - return true; - } + if (TextValue.equalsIgnoreCase("no")) { boolValue[0] = false; return true; } + if (TextValue.equals("\u4e0d\u662f")) { boolValue[0] = false; return true; } + if (TextValue.equals("\u6ca1\u6709")) { boolValue[0] = false; return true; } break; } case 3: { - if (textValue.equalsIgnoreCase("yes")) { - boolValue.value = true; - return true; - } + if (TextValue.equalsIgnoreCase("yes")) { boolValue[0] = true; return true; } break; } case 4: { - if (textValue.equalsIgnoreCase("true")) { - boolValue.value = true; - return true; - } + if (TextValue.equalsIgnoreCase("true")) { boolValue[0] = true; return true; } break; } case 5: { - if (textValue.equalsIgnoreCase("false")) { - boolValue.value = false; - return true; - } + if (TextValue.equalsIgnoreCase("false")) { boolValue[0] = false; return true; } break; } } - boolValue.value = false; + boolValue[0] = false; return false; } public static BigDecimal QuickSelect(List list, int k, boolean largest) { if (list.size() == 1) return list.get(0); - + int targetIndex = largest ? list.size() - 1 - k : k; return QuickSelectCore(list, 0, list.size() - 1, targetIndex); } @@ -418,31 +332,4 @@ public static int GetRank(List values, BigDecimal num, boolean desce } return count > 0 ? rank : 0; } - - public static class BooleanHolder { - public boolean value; - } - - public static class Pair { - private final F first; - private final S second; - - public Pair(F first, S second) { - this.first = first; - this.second = second; - } - - public F getFirst() { - return first; - } - - public S getSecond() { - return second; - } - } - - public enum StringComparison { - Ordinal, - OrdinalIgnoreCase - } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/StringComparison.java b/java/src/main/java/toolgood/algorithm/internals/functions/StringComparison.java new file mode 100644 index 000000000..3e91862e8 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/StringComparison.java @@ -0,0 +1,12 @@ +package toolgood.algorithm.internals.functions; + +public enum StringComparison { + Ordinal(0), + OrdinalIgnoreCase(1); + + public final int value; + + StringComparison(int value) { + this.value = value; + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Tuple.java b/java/src/main/java/toolgood/algorithm/internals/functions/Tuple.java new file mode 100644 index 000000000..e0b472ae7 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Tuple.java @@ -0,0 +1,19 @@ +package toolgood.algorithm.internals.functions; + +public final class Tuple { + private final T1 item1; + private final T2 item2; + + public Tuple(T1 item1, T2 item2) { + this.item1 = item1; + this.item2 = item2; + } + + public T1 getItem1() { + return item1; + } + + public T2 getItem2() { + return item2; + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java index 532091fb3..4215984cc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java @@ -43,11 +43,11 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction= 0); } else if (args1.IsText()) { int r = args1.TextValue().compareTo(args2.TextValue()); - return r >= 0 ? Operand.TRUE : Operand.FALSE; + return r >= 0 ? Operand.True : Operand.False; } else if (args1.IsDate()) { return Operand.Create(args1.DateValue().ToLong() >= args2.DateValue().ToLong()); } else if (args1.IsBoolean()) { @@ -46,11 +46,11 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction= 0); } else if (args1.IsNull()) { - return Operand.TRUE; + return Operand.True; } return CompareError(); } else if (args1.IsNull() || args2.IsNull()) { - return Operand.FALSE; + return Operand.False; } else if (args1.IsDate() || args2.IsDate() || args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { return CompareError(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java index e45fa1f8f..04bde5a41 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java @@ -38,7 +38,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction 0); } else if (args1.IsText()) { int r = args1.TextValue().compareTo(args2.TextValue()); - return r > 0 ? Operand.TRUE : Operand.FALSE; + return r > 0 ? Operand.True : Operand.False; } else if (args1.IsDate()) { return Operand.Create(args1.DateValue().ToLong() > args2.DateValue().ToLong()); } else if (args1.IsBoolean()) { @@ -46,11 +46,11 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction 0); } else if (args1.IsNull()) { - return Operand.TRUE; + return Operand.True; } return CompareError(); } else if (args1.IsNull() || args2.IsNull()) { - return Operand.FALSE; + return Operand.False; } else if (args1.IsDate() || args2.IsDate() || args1.IsJson() || args2.IsJson() || args1.IsArray() || args2.IsArray() || args1.IsArrayJson() || args2.IsArrayJson()) { return CompareError(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java index 020eef927..0fb7507a2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java @@ -38,7 +38,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction 65280 && c < 65375) { - return (char) (c - 65248); + if (o > 65280 && o < 65375) { + o = (char) (o - 65248); } - return Character.toUpperCase(c); + return Character.toUpperCase(o); } - public static String StandardString(String s) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < s.length(); i++) { - char c = s.charAt(i); - sb.append(StandardChar(c)); - } - return sb.toString(); + public static boolean Equals(String left, char right) { + if (left.length() != 1) return false; + return left.charAt(0) == right || StandardChar(left.charAt(0)) == right; } - private static boolean EqualsOnce(String left, String right) { - if (left.length() != right.length()) - return false; + public static boolean Equals(String left, String right) { + if (left.length() != right.length()) return false; for (int i = 0; i < left.length(); i++) { - if (left.charAt(i) != right.charAt(i)) { - char a = StandardChar(left.charAt(i)); - char b = StandardChar(right.charAt(i)); - if (a != b) - return false; - } + char l = left.charAt(i); + char r = right.charAt(i); + if (l == r) continue; + l = StandardChar(l); + if (l != r) return false; } return true; } - public static boolean Equals(String left, String right) { - if (left == null) - return false; - if (right == null) - return false; - return EqualsOnce(left, right); - } - - public static boolean Equals(String left, String arg1, String arg2) { - if (left == null) - return false; - if (arg1 != null && EqualsOnce(left, arg1)) - return true; - if (arg2 != null && EqualsOnce(left, arg2)) - return true; - return false; - } - - public static boolean Equals(String left, String arg1, String arg2, String arg3) { - if (left == null) - return false; - if (arg1 != null && EqualsOnce(left, arg1)) - return true; - if (arg2 != null && EqualsOnce(left, arg2)) - return true; - if (arg3 != null && EqualsOnce(left, arg3)) - return true; - return false; + public static boolean Equals(String left, String option1, String option2, String option3) { + return Equals(left, option1) || Equals(left, option2) || Equals(left, option3); } - - public static List SplitFormula(String formula, List splitChars) { - List result = new ArrayList<>(); - boolean inSquareBrackets = false; - boolean inBraceBrackets = false; - int inBracketsCount = 0; - boolean inText = false; - char textChar = (char) 0; - - StringBuilder str = new StringBuilder(); - Integer i = 0; - while (i < formula.length()) { - char c = formula.charAt(i); - if (inSquareBrackets) { - str.append(c); - if (c == ']') - inSquareBrackets = false; - } else if (inBraceBrackets) { - str.append(c); - if (c == '}') - inBraceBrackets = false; - } else if (inText) { - str.append(c); - if (c == '\\') { - i++; - if (i < formula.length()) { - str.append(formula.charAt(i)); - } - } else if (c == textChar) { - inText = false; - } - } else if (splitChars.contains(c) && inBracketsCount == 0) { - result.add(str.toString()); - result.add(((Character) c).toString()); - str = new StringBuilder(); - } else { - str.append(c); - if (c == '\'' || c == '"' || c == '`') { - textChar = c; - inText = true; - } else if (c == '[') { - inSquareBrackets = true; - } else if (c == '{') { - inBraceBrackets = true; - } else if (c == '(') { - inBracketsCount++; - } else if (c == ')') { - inBracketsCount--; - } - } - i++; - } - if (str.length() > 0) - result.add(str.toString()); - return result; - } - - public static List SplitFormulaForAnd(String formula) { - List result = new ArrayList<>(); - boolean inSquareBrackets = false; - boolean inBraceBrackets = false; - int inBracketsCount = 0; - boolean inText = false; - char textChar = (char) 0; - - StringBuilder str = new StringBuilder(); - Integer i = 0; - while (i < formula.length()) { - char c = formula.charAt(i); - if (inSquareBrackets) { - str.append(c); - if (c == ']') - inSquareBrackets = false; - } else if (inBraceBrackets) { - str.append(c); - if (c == '}') - inBraceBrackets = false; - } else if (inText) { - str.append(c); - if (c == '\\') { - i++; - if (i < formula.length()) { - str.append(formula.charAt(i)); - } - } else if (c == textChar) { - inText = false; - } - } else if (c == '&' && inBracketsCount == 0) { - if (i + 1 < formula.length() && formula.charAt(i + 1) == '&') { - i++; - result.add(str.toString()); - str = new StringBuilder(); - } else { - result.add(str.toString()); - } - } else if (c == '|' && inBracketsCount == 0) { - if (i + 1 < formula.length() && formula.charAt(i + 1) == '|') { - i++; - result.add(str.toString()); - str = new StringBuilder(); - str.append(String.join("&&", result)); - str.append("||"); - result.clear(); - } else { - result.add(str.toString()); - } - } else { - str.append(c); - if (c == '\'' || c == '"' || c == '`') { - textChar = c; - inText = true; - } else if (c == '[') { - inSquareBrackets = true; - } else if (c == '{') { - inBraceBrackets = true; - } else if (c == '(') { - inBracketsCount++; - } else if (c == ')') { - inBracketsCount--; - } - } - i++; - } - if (str.length() > 0) - result.add(str.toString()); - return result; - } - } diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandArray.java b/java/src/main/java/toolgood/algorithm/operands/OperandArray.java index 5ce20ac20..a8027637d 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandArray.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandArray.java @@ -6,7 +6,7 @@ import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.litJson.JsonMapper; -final class OperandArray extends Operand { +public final class OperandArray extends Operand { private final List _value; public OperandArray(List obj) { diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandInt.java b/java/src/main/java/toolgood/algorithm/operands/OperandInt.java index fccf4f2b5..52838204e 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandInt.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandInt.java @@ -5,7 +5,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -final class OperandInt extends Operand { +public final class OperandInt extends Operand { private final int _value; public OperandInt(int obj) { diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandJson.java b/java/src/main/java/toolgood/algorithm/operands/OperandJson.java index 0fa3c9e06..bd72eafa2 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandJson.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandJson.java @@ -7,7 +7,7 @@ import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.litJson.JsonData; -final class OperandJson extends Operand { +public final class OperandJson extends Operand { private final JsonData _value; public OperandJson(JsonData obj) { diff --git a/java/src/main/java/toolgood/algorithm/system/MathEx.java b/java/src/main/java/toolgood/algorithm/system/MathEx.java index c358d8232..7c2cb7127 100644 --- a/java/src/main/java/toolgood/algorithm/system/MathEx.java +++ b/java/src/main/java/toolgood/algorithm/system/MathEx.java @@ -1,8 +1,7 @@ -package toolgood.algorithm.mathNet; +package toolgood.algorithm.system; import java.math.BigDecimal; import java.math.MathContext; -import java.math.RoundingMode; public class MathEx { public static final BigDecimal E = new BigDecimal("2.7182818284590452353602874713526624977572470936999595749"); From 2ae63d854d2481d651ba899234a485ffa6539b49 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 09:33:58 +0800 Subject: [PATCH 50/98] fix --- .../functions/csharp/Function_ENDSWITH.java | 16 ++---- .../functions/csharp/Function_HAS.java | 44 +++++++++++------ .../functions/csharp/Function_HASVALUE.java | 49 +++++++++++++------ .../functions/csharp/Function_INDEXOF.java | 16 ++---- .../functions/csharp/Function_ISREGEX.java | 8 +-- .../functions/csharp/Function_JOIN.java | 7 ++- .../csharp/Function_LASTINDEXOF.java | 16 ++---- .../csharp/Function_LOOKCEILING.java | 10 ++-- .../functions/csharp/Function_LOOKFLOOR.java | 10 ++-- .../functions/csharp/Function_REGEX.java | 8 +-- .../csharp/Function_REGEXREPLACE.java | 16 ++---- .../functions/csharp/Function_REMOVEEND.java | 12 ++--- .../csharp/Function_REMOVESTART.java | 12 ++--- .../functions/csharp/Function_SPLIT.java | 8 +-- .../functions/csharp/Function_STARTSWITH.java | 16 ++---- .../functions/csharp/Function_SUBSTRING.java | 12 ++--- .../functions/csharp/Function_TRIMEND.java | 8 +-- .../functions/csharp/Function_TRIMSTART.java | 8 +-- .../toolgood/algorithm/litJson/JsonData.java | 2 +- 19 files changed, 110 insertions(+), 168 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java index 462c702c6..cd8d23079 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.csharp; -import java.lang.StringBuilder; import java.util.List; import java.util.function.BiFunction; @@ -25,14 +24,10 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } String text = args1.TextValue(); if (func3 == null) { @@ -40,9 +35,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, - OperandType operandType, String op, String val) { + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); if (func3 != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java index 90515f5b6..23528cf22 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java @@ -7,8 +7,9 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.ParameterType; -import toolgood.algorithm.internals.OperandKeyValueList; -import toolgood.algorithm.internals.OperandArray; +import toolgood.algorithm.operands.OperandKeyValueList; +import toolgood.algorithm.operands.OperandArray; +import toolgood.algorithm.litJson.JsonData; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.NoneEngine; @@ -26,32 +27,43 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = func1.Evaluate(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } if (args1.IsArrayJson()) { return Operand.Create(((OperandKeyValueList) args1).ContainsKey(args2)); } else if (args1.IsJson()) { - Object json = args1.JsonValue(); - return Operand.FALSE; + JsonData json = args1.JsonValue(); + if (json.IsArray()) { + for (int i = 0; i < json.Count(); i++) { + JsonData v = json.get(i); + if (v.IsString()) { + if (v.StringValue().equals(args2.TextValue())) { return Operand.True; } + } else if (v.IsDouble()) { + if (v.NumberValue().toString().equals(args2.TextValue())) { return Operand.True; } + } else if (v.IsBoolean()) { + if (Boolean.toString(v.BooleanValue()).equalsIgnoreCase(args2.TextValue())) { return Operand.True; } + } + } + } else { + JsonData v = json.get(args2.TextValue()); + if (v != null) { + return Operand.True; + } + } + return Operand.False; } else if (args1.IsArray()) { OperandArray ar = (OperandArray) args1; for (Operand item : ar.ArrayValue()) { - Operand t = item.ToText(); - if (t.IsError() || t.IsNone()) { - continue; - } + Operand t = item.ToText(null); + if (t.IsErrorOrNone()) { continue; } if (t.TextValue().equals(args2.TextValue())) { - return Operand.TRUE; + return Operand.True; } } - return Operand.FALSE; + return Operand.False; } return ParameterError(1); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java index c68d62767..2f4fedb47 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java @@ -7,8 +7,9 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.ParameterType; -import toolgood.algorithm.internals.OperandKeyValueList; -import toolgood.algorithm.internals.OperandArray; +import toolgood.algorithm.operands.OperandKeyValueList; +import toolgood.algorithm.operands.OperandArray; +import toolgood.algorithm.litJson.JsonData; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.NoneEngine; @@ -26,32 +27,48 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = func1.Evaluate(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } if (args1.IsArrayJson()) { return Operand.Create(((OperandKeyValueList) args1).ContainsValue(args2)); } else if (args1.IsJson()) { - Object json = args1.JsonValue(); - return Operand.FALSE; + JsonData json = args1.JsonValue(); + if (json.IsArray()) { + for (int i = 0; i < json.Count(); i++) { + JsonData v = json.get(i); + if (v.IsString()) { + if (v.StringValue().equals(args2.TextValue())) { return Operand.True; } + } else if (v.IsDouble()) { + if (v.NumberValue().toString().equals(args2.TextValue())) { return Operand.True; } + } else if (v.IsBoolean()) { + if (Boolean.toString(v.BooleanValue()).equalsIgnoreCase(args2.TextValue())) { return Operand.True; } + } + } + } else { + for (JsonData v : json.inst_object.values()) { + if (v.IsString()) { + if (v.StringValue().equals(args2.TextValue())) { return Operand.True; } + } else if (v.IsDouble()) { + if (v.NumberValue().toString().equals(args2.TextValue())) { return Operand.True; } + } else if (v.IsBoolean()) { + if (Boolean.toString(v.BooleanValue()).equalsIgnoreCase(args2.TextValue())) { return Operand.True; } + } + } + } + return Operand.False; } else if (args1.IsArray()) { OperandArray ar = (OperandArray) args1; for (Operand item : ar.ArrayValue()) { - Operand t = item.ToText(); - if (t.IsError() || t.IsNone()) { - continue; - } + Operand t = item.ToText(null); + if (t.IsErrorOrNone()) { continue; } if (t.TextValue().equals(args2.TextValue())) { - return Operand.TRUE; + return Operand.True; } } - return Operand.FALSE; + return Operand.False; } return ParameterError(1); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java index 463706d72..d140da1d3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java @@ -24,14 +24,10 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } String text = args1.TextValue(); if (func3 == null) { @@ -39,9 +35,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction text.length()) { return ParameterError(3); @@ -52,9 +46,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction text.length()) { return ParameterError(4); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java index 135bf394c..01d5566da 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java @@ -25,14 +25,10 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } boolean b = Pattern.compile(args2.TextValue()).matcher(args1.TextValue()).find(); return Operand.Create(b); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java index 9fe4e2ec0..558c94d47 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.csharp; -import java.lang.StringBuilder; import java.util.ArrayList; import java.util.List; import java.util.function.BiFunction; @@ -34,7 +33,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } String text = args1.TextValue(); if (func3 == null) { @@ -39,9 +35,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction text.length()) { return ParameterError(3); @@ -52,9 +46,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction startIndex + 1) { return ParameterError(4); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java index 4bf2fa0d7..9da145339 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java @@ -15,7 +15,7 @@ import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.NoneEngine; -class Function_LOOKCEILING extends Function_2 { +final class Function_LOOKCEILING extends Function_2 { public Function_LOOKCEILING(FunctionBase[] funcs) { super(funcs); } @@ -28,14 +28,10 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetArray_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } List list = new ArrayList<>(); FunctionUtil.FlattenToList(args2, list); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java index 6893a218a..046387865 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java @@ -15,7 +15,7 @@ import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.NoneEngine; -class Function_LOOKFLOOR extends Function_2 { +final class Function_LOOKFLOOR extends Function_2 { public Function_LOOKFLOOR(FunctionBase[] funcs) { super(funcs); } @@ -28,14 +28,10 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetArray_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } List list = new ArrayList<>(); FunctionUtil.FlattenToList(args2, list); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java index 66d5b6007..23b077397 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java @@ -26,14 +26,10 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } try { Pattern pattern = Pattern.compile(args2.TextValue()); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPLACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPLACE.java index da8539deb..5d2ec7458 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPLACE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPLACE.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.csharp; -import java.lang.StringBuilder; import java.util.List; import java.util.function.BiFunction; import java.util.regex.Pattern; @@ -26,19 +25,13 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } Operand args3 = GetText_3(engine, tempParameter); - if (args3.IsError() || args3.IsNone()) { - return args3; - } + if (args3.IsErrorOrNone()) { return args3; } try { String result = Pattern.compile(args2.TextValue()).matcher(args1.TextValue()).replaceAll(args3.TextValue()); @@ -54,8 +47,7 @@ public OperandType GetResultType() { } @Override - public void GetParameterTypes(NoneEngine noneEngine, List result, - OperandType operandType, String op, String val) { + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); func3.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java index 7198ceafa..3e3bde10f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java @@ -24,21 +24,15 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } boolean ignoreCase = false; if (func3 != null) { Operand args3 = GetBoolean_3(engine, tempParameter); - if (args3.IsError() || args3.IsNone()) { - return args3; - } + if (args3.IsErrorOrNone()) { return args3; } ignoreCase = args3.BooleanValue(); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java index 15402ec01..1a588904d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java @@ -24,21 +24,15 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } boolean ignoreCase = false; if (func3 != null) { Operand args3 = GetBoolean_3(engine, tempParameter); - if (args3.IsError() || args3.IsNone()) { - return args3; - } + if (args3.IsErrorOrNone()) { return args3; } ignoreCase = args3.BooleanValue(); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java index b05414e5e..9e823ad81 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java @@ -24,14 +24,10 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } if (args2.TextValue() == null || args2.TextValue().isEmpty()) { return ParameterError(2); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java index 7ab01443b..4b90fd819 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.csharp; -import java.lang.StringBuilder; import java.util.List; import java.util.function.BiFunction; @@ -25,14 +24,10 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } String text = args1.TextValue(); if (func3 == null) { @@ -40,9 +35,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, - OperandType operandType, String op, String val) { + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, null, null); if (func3 != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java index 145c4d453..f888cd3b1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java @@ -24,14 +24,10 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } String text = args1.TextValue(); int startIndex = args2.IntValue() - engine.ExcelIndex; @@ -48,9 +44,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } if (func2 == null) { return Operand.Create(trimEnd(args1.TextValue())); } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } char[] trimChars = args2.TextValue().toCharArray(); return Operand.Create(trimEnd(args1.TextValue(), trimChars)); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java index 3637ef132..6d7200c58 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java @@ -24,18 +24,14 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError() || args1.IsNone()) { - return args1; - } + if (args1.IsErrorOrNone()) { return args1; } if (func2 == null) { return Operand.Create(trimStart(args1.TextValue())); } Operand args2 = GetText_2(engine, tempParameter); - if (args2.IsError() || args2.IsNone()) { - return args2; - } + if (args2.IsErrorOrNone()) { return args2; } char[] trimChars = args2.TextValue().toCharArray(); return Operand.Create(trimStart(args1.TextValue(), trimChars)); diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java index d37a9d0e2..d6f64d4d3 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java @@ -12,7 +12,7 @@ public final class JsonData implements Iterable { private List inst_array; private boolean inst_boolean; private BigDecimal inst_double; - Map inst_object; + public Map inst_object; private String inst_string; private JsonType type; From 2684703594ad2ac6272e477def03f021f9cba454 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 09:45:25 +0800 Subject: [PATCH 51/98] fix --- .../internals/functions/FunctionBase.java | 7 +- .../internals/functions/csharpweb/Base64.java | 243 ------------------ .../csharpweb/Function_BASE64TOTEXT.java | 66 ++--- .../csharpweb/Function_BASE64URLTOTEXT.java | 71 ++--- .../csharpweb/Function_HTMLDECODE.java | 50 ++-- .../csharpweb/Function_HTMLENCODE.java | 42 +-- .../csharpweb/Function_TEXTTOBASE64.java | 66 ++--- .../csharpweb/Function_TEXTTOBASE64URL.java | 67 ++--- .../csharpweb/Function_URLDECODE.java | 55 ++-- .../csharpweb/Function_URLENCODE.java | 55 ++-- .../functions/datetimes/Function_WORKDAY.java | 8 +- .../datetimes/Function_YEARFRAC.java | 6 +- .../functions/financial/Function_XIRR.java | 2 +- .../mathNet/Distributions/Normal.java | 2 +- .../algorithm/operands/OperandBigDecimal.java | 2 +- 15 files changed, 279 insertions(+), 463 deletions(-) delete mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index 028d15ef2..e205ea130 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -67,7 +67,12 @@ public List GetParameterTypes(AlgorithmEngine engine) { public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { } - + /** + * 内部方法,获取参数类型(默认空实现,子类可覆盖) + */ + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType) { + GetParameterTypes(noneEngine, result, operandType, null, null); + } // endregion GetParameterTypes // region ConvertToXxx helpers diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java deleted file mode 100644 index 79849a4ef..000000000 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Base64.java +++ /dev/null @@ -1,243 +0,0 @@ -package toolgood.algorithm.internals.functions.csharpweb; - -import java.util.regex.Pattern; - -public class Base64 { - public static String ToBase64String(final byte[] input) { - return Base64Util.encode(input); - } - - public static byte[] FromBase64String(final String base64) { - return Base64Util.decode(base64); - } - - public static String ToBase64ForUrlString(final byte[] input) { - String t = Pattern.compile("=*$").matcher(ToBase64String(input)).replaceAll(""); - t = Pattern.compile("\\+").matcher(t).replaceAll("-"); - t = Pattern.compile("/").matcher(t).replaceAll("_"); - return t; - } - - public static byte[] FromBase64ForUrlString(final String base64ForUrlInput) { - final String base64 = "===========================================+=+=/0123456789=======ABCDEFGHIJKLMNOPQRSTUVWXYZ====/=abcdefghijklmnopqrstuvwxyz====="; - final StringBuilder sb = new StringBuilder(); - for (int i = 0; i < base64ForUrlInput.length(); i++) { - final char c = base64ForUrlInput.charAt(i); - if ((int) c >= 128) - continue; - final char k = base64.charAt(c);// [c]; - if (k == '=') - continue; - sb.append(k); - } - final int len = sb.length(); - final int padChars = (len % 4) == 0 ? 0 : (4 - (len % 4)); - for (int i = 0; i < padChars; i++) { - sb.append('='); - } - return FromBase64String(sb.toString()); - } - public static class Base64Util { - private static final int BASELENGTH = 128; - private static final int LOOKUPLENGTH = 64; - private static final int TWENTYFOURBITGROUP = 24; - private static final int EIGHTBIT = 8; - private static final int SIXTEENBIT = 16; - private static final int FOURBYTE = 4; - private static final int SIGN = -128; - private static char PAD = '='; - private static byte[] base64Alphabet = new byte[BASELENGTH]; - private static char[] lookUpBase64Alphabet = new char[LOOKUPLENGTH]; - static { - for (int i = 0; i < BASELENGTH; ++i) { - base64Alphabet[i] = -1; - } - for (int i = 'Z'; i >= 'A'; i--) { - base64Alphabet[i] = (byte) (i - 'A'); - } - for (int i = 'z'; i >= 'a'; i--) { - base64Alphabet[i] = (byte) (i - 'a' + 26); - } - for (int i = '9'; i >= '0'; i--) { - base64Alphabet[i] = (byte) (i - '0' + 52); - } - base64Alphabet['+'] = 62; - base64Alphabet['/'] = 63; - for (int i = 0; i <= 25; i++) { - lookUpBase64Alphabet[i] = (char) ('A' + i); - } - for (int i = 26, j = 0; i <= 51; i++, j++) { - lookUpBase64Alphabet[i] = (char) ('a' + j); - } - for (int i = 52, j = 0; i <= 61; i++, j++) { - lookUpBase64Alphabet[i] = (char) ('0' + j); - } - lookUpBase64Alphabet[62] = (char) '+'; - lookUpBase64Alphabet[63] = (char) '/'; - } - - private static boolean isWhiteSpace(char octect) { - return (octect == 0x20 || octect == 0xd || octect == 0xa || octect == 0x9); - } - - private static boolean isPad(char octect) { - return (octect == PAD); - } - - private static boolean isData(char octect) { - return (octect < BASELENGTH && base64Alphabet[octect] != -1); - } - - public static String encode(byte[] binaryData) { - if (binaryData == null) { - return null; - } - int lengthDataBits = binaryData.length * EIGHTBIT; - if (lengthDataBits == 0) { - return ""; - } - int fewerThan24bits = lengthDataBits % TWENTYFOURBITGROUP; - int numberTriplets = lengthDataBits / TWENTYFOURBITGROUP; - int numberQuartet = fewerThan24bits != 0 ? numberTriplets + 1 : numberTriplets; - char encodedData[] = null; - encodedData = new char[numberQuartet * 4]; - byte k = 0, l = 0, b1 = 0, b2 = 0, b3 = 0; - int encodedIndex = 0; - int dataIndex = 0; - for (int i = 0; i < numberTriplets; i++) { - b1 = binaryData[dataIndex++]; - b2 = binaryData[dataIndex++]; - b3 = binaryData[dataIndex++]; - l = (byte) (b2 & 0x0f); - k = (byte) (b1 & 0x03); - byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); - byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); - byte val3 = ((b3 & SIGN) == 0) ? (byte) (b3 >> 6) : (byte) ((b3) >> 6 ^ 0xfc); - encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; - encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; - encodedData[encodedIndex++] = lookUpBase64Alphabet[(l << 2) | val3]; - encodedData[encodedIndex++] = lookUpBase64Alphabet[b3 & 0x3f]; - } - // form integral number of 6-bit groups - if (fewerThan24bits == EIGHTBIT) { - b1 = binaryData[dataIndex]; - k = (byte) (b1 & 0x03); - byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); - encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; - encodedData[encodedIndex++] = lookUpBase64Alphabet[k << 4]; - encodedData[encodedIndex++] = PAD; - encodedData[encodedIndex++] = PAD; - } else if (fewerThan24bits == SIXTEENBIT) { - b1 = binaryData[dataIndex]; - b2 = binaryData[dataIndex + 1]; - l = (byte) (b2 & 0x0f); - k = (byte) (b1 & 0x03); - byte val1 = ((b1 & SIGN) == 0) ? (byte) (b1 >> 2) : (byte) ((b1) >> 2 ^ 0xc0); - byte val2 = ((b2 & SIGN) == 0) ? (byte) (b2 >> 4) : (byte) ((b2) >> 4 ^ 0xf0); - encodedData[encodedIndex++] = lookUpBase64Alphabet[val1]; - encodedData[encodedIndex++] = lookUpBase64Alphabet[val2 | (k << 4)]; - encodedData[encodedIndex++] = lookUpBase64Alphabet[l << 2]; - encodedData[encodedIndex++] = PAD; - } - return new String(encodedData); - } - - public static byte[] decode(String encoded) { - if (encoded == null) { - return null; - } - char[] base64Data = encoded.toCharArray(); - // remove white spaces - int len = removeWhiteSpace(base64Data); - if (len % FOURBYTE != 0) { - return null;// should be divisible by four - } - int numberQuadruple = (len / FOURBYTE); - if (numberQuadruple == 0) { - return new byte[0]; - } - byte decodedData[] = null; - byte b1 = 0, b2 = 0, b3 = 0, b4 = 0; - char d1 = 0, d2 = 0, d3 = 0, d4 = 0; - int i = 0; - int encodedIndex = 0; - int dataIndex = 0; - decodedData = new byte[(numberQuadruple) * 3]; - for (; i < numberQuadruple - 1; i++) { - if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++])) - || !isData((d3 = base64Data[dataIndex++])) || !isData((d4 = base64Data[dataIndex++]))) { - return null; - } // if found "no data" just return null - b1 = base64Alphabet[d1]; - b2 = base64Alphabet[d2]; - b3 = base64Alphabet[d3]; - b4 = base64Alphabet[d4]; - decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); - decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); - decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); - } - if (!isData((d1 = base64Data[dataIndex++])) || !isData((d2 = base64Data[dataIndex++]))) { - return null;// if found "no data" just return null - } - b1 = base64Alphabet[d1]; - b2 = base64Alphabet[d2]; - d3 = base64Data[dataIndex++]; - d4 = base64Data[dataIndex++]; - if (!isData((d3)) || !isData((d4))) {// Check if they are PAD characters - if (isPad(d3) && isPad(d4)) { - if ((b2 & 0xf) != 0)// last 4 bits should be zero - { - return null; - } - byte[] tmp = new byte[i * 3 + 1]; - System.arraycopy(decodedData, 0, tmp, 0, i * 3); - tmp[encodedIndex] = (byte) (b1 << 2 | b2 >> 4); - return tmp; - } else if (!isPad(d3) && isPad(d4)) { - b3 = base64Alphabet[d3]; - if ((b3 & 0x3) != 0)// last 2 bits should be zero - { - return null; - } - byte[] tmp = new byte[i * 3 + 2]; - System.arraycopy(decodedData, 0, tmp, 0, i * 3); - tmp[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); - tmp[encodedIndex] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); - return tmp; - } else { - return null; - } - } else { // No PAD e.g 3cQl - b3 = base64Alphabet[d3]; - b4 = base64Alphabet[d4]; - decodedData[encodedIndex++] = (byte) (b1 << 2 | b2 >> 4); - decodedData[encodedIndex++] = (byte) (((b2 & 0xf) << 4) | ((b3 >> 2) & 0xf)); - decodedData[encodedIndex++] = (byte) (b3 << 6 | b4); - } - return decodedData; - } - - /** - * remove WhiteSpace from MIME containing encoded Base64Util data. - * - * @param data the byte array of base64 data (with WS) - * @return the new length - */ - private static int removeWhiteSpace(char[] data) { - if (data == null) { - return 0; - } - // count characters that's not whitespace - int newSize = 0; - int len = data.length; - for (int i = 0; i < len; i++) { - if (!isWhiteSpace(data[i])) { - data[newSize++] = data[i]; - } - } - return newSize; - } - } - - -} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java index 910ab456a..53b28c7c6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java @@ -1,51 +1,51 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_BASE64TOTEXT extends Function_1 { + public Function_BASE64TOTEXT(FunctionBase func1) { + super(func1); + } -public class Function_BASE64TOTEXT extends Function_2 { - public Function_BASE64TOTEXT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Base64ToText"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Base64ToText", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } try { - java.nio.charset.Charset charset; - if (func2 == null) { - charset = java.nio.charset.StandardCharsets.UTF_8; - } else { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Base64ToText", 2); - if (args2.IsError()) { - return args2; - } - } - charset = java.nio.charset.Charset.forName(args2.TextValue()); - } - byte[] bytes = Base64.FromBase64String(args1.TextValue()); - String t = new String(bytes, charset); + byte[] bytes = Base64.getDecoder().decode(args1.TextValue()); + String t = new String(bytes, StandardCharsets.UTF_8); return Operand.Create(t); } catch (Exception e) { - // 捕获所有异�? + return ParameterError(1); } - return Operand.Error("Function '{0}' is error!", "Base64ToText"); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Base64ToText"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java index fb4198c85..d098e9faf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java @@ -1,51 +1,60 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_BASE64URLTOTEXT extends Function_1 { + public Function_BASE64URLTOTEXT(FunctionBase func1) { + super(func1); + } -public class Function_BASE64URLTOTEXT extends Function_2 { - public Function_BASE64URLTOTEXT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Base64UrlToText"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Base64urlToText", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } try { - java.nio.charset.Charset charset; - if (func2 == null) { - charset = java.nio.charset.StandardCharsets.UTF_8; - } else { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Base64urlToText", 2); - if (args2.IsError()) { - return args2; - } + String base64Url = args1.TextValue().replace('-', '+').replace('_', '/'); + int padding = 4 - (base64Url.length() % 4); + if (padding < 4) { + StringBuilder sb = new StringBuilder(base64Url); + for (int i = 0; i < padding; i++) { + sb.append('='); } - charset = java.nio.charset.Charset.forName(args2.TextValue()); + base64Url = sb.toString(); } - byte[] bytes = Base64.FromBase64ForUrlString(args1.TextValue()); - String t = new String(bytes, charset); + byte[] bytes = Base64.getDecoder().decode(base64Url); + String t = new String(bytes, StandardCharsets.UTF_8); return Operand.Create(t); } catch (Exception e) { - // 捕获所有异�? + return ParameterError(1); } - return Operand.Error("Function '{0}' is error!", "Base64urlToText"); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Base64urlToText"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java index de69821fa..ad7428c08 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java @@ -1,25 +1,31 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_HTMLDECODE extends Function_1 { +public final class Function_HTMLDECODE extends Function_1 { public Function_HTMLDECODE(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "HtmlDecode"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "HtmlDecode"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } String s = args1.TextValue(); String r = HtmlDecode(s); @@ -27,8 +33,14 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } private String HtmlDecode(String value) { @@ -36,9 +48,9 @@ private String HtmlDecode(String value) { return ""; } return value.replace("<", "<") - .replace(">", ">") - .replace("&", "&") - .replace(""", "\"") - .replace("'", "'"); + .replace(">", ">") + .replace("&", "&") + .replace(""", "\"") + .replace("'", "'"); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java index d4cae6016..6acfe2b6a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java @@ -1,25 +1,31 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_HTMLENCODE extends Function_1 { +public final class Function_HTMLENCODE extends Function_1 { public Function_HTMLENCODE(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "HtmlEncode"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "HtmlEncode"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } String s = args1.TextValue(); String r = HtmlEncode(s); @@ -27,8 +33,14 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } private String HtmlEncode(String value) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java index ba4b398a0..fed14f3dc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java @@ -1,51 +1,51 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_TEXTTOBASE64 extends Function_1 { + public Function_TEXTTOBASE64(FunctionBase func1) { + super(func1); + } -public class Function_TEXTTOBASE64 extends Function_2 { - public Function_TEXTTOBASE64(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "TextToBase64"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TextToBase64", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } try { - java.nio.charset.Charset charset; - if (func2 == null) { - charset = java.nio.charset.StandardCharsets.UTF_8; - } else { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "TextToBase64", 2); - if (args2.IsError()) { - return args2; - } - } - charset = java.nio.charset.Charset.forName(args2.TextValue()); - } - byte[] bytes = args1.TextValue().getBytes(charset); - String t = Base64.ToBase64String(bytes); + byte[] bytes = args1.TextValue().getBytes(StandardCharsets.UTF_8); + String t = Base64.getEncoder().encodeToString(bytes); return Operand.Create(t); } catch (Exception e) { - // 捕获所有异�? + return ParameterError(1); } - return Operand.Error("Function '{0}' is error!", "TextToBase64"); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "TextToBase64"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java index e74101f4e..105109a8a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java @@ -1,51 +1,54 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.nio.charset.StandardCharsets; +import java.util.Base64; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_TEXTTOBASE64URL extends Function_1 { + public Function_TEXTTOBASE64URL(FunctionBase func1) { + super(func1); + } -public class Function_TEXTTOBASE64URL extends Function_2 { - public Function_TEXTTOBASE64URL(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "TextToBase64Url"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "TextToBase64url", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } try { - java.nio.charset.Charset charset; - if (func2 == null) { - charset = java.nio.charset.StandardCharsets.UTF_8; - } else { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "TextToBase64url", 2); - if (args2.IsError()) { - return args2; - } - } - charset = java.nio.charset.Charset.forName(args2.TextValue()); + byte[] bytes = args1.TextValue().getBytes(StandardCharsets.UTF_8); + String t = Base64.getEncoder().encodeToString(bytes).replace('+', '-').replace('/', '_'); + while (t.endsWith("=")) { + t = t.substring(0, t.length() - 1); } - byte[] bytes = args1.TextValue().getBytes(charset); - String t = Base64.ToBase64ForUrlString(bytes); return Operand.Create(t); } catch (Exception e) { - // 捕获所有异�? + return ParameterError(1); } - return Operand.Error("Function '{0}' is error!", "TextToBase64url"); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "TextToBase64url"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java index 33b304edc..06de4c0ad 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java @@ -1,38 +1,47 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.net.URLDecoder; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_URLDECODE extends Function_1 { +public final class Function_URLDECODE extends Function_1 { public Function_URLDECODE(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "UrlDecode"); - if (args1.IsError()) { - return args1; - } - } - try { - String s = args1.TextValue(); - String r = java.net.URLDecoder.decode(s, "UTF-8"); - return Operand.Create(r); - } catch (Exception e) { - // 捕获所有异�? + public String Name() { + return "UrlDecode"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - return Operand.Error("Function '{0}' is error!", "UrlDecode"); + String s = args1.TextValue(); + String r = URLDecoder.decode(s, StandardCharsets.UTF_8); + return Operand.Create(r); + } + + @Override + public OperandType GetResultType() { + return OperandType.TEXT; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "UrlDecode"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java index 76c16b5cb..39ae83077 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java @@ -1,38 +1,47 @@ package toolgood.algorithm.internals.functions.csharpweb; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_URLENCODE extends Function_1 { +public final class Function_URLENCODE extends Function_1 { public Function_URLENCODE(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "UrlEncode"); - if (args1.IsError()) { - return args1; - } - } - try { - String s = args1.TextValue(); - String r = java.net.URLEncoder.encode(s, "UTF-8"); - return Operand.Create(r); - } catch (Exception e) { - // 捕获所有异�? + public String Name() { + return "UrlEncode"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - return Operand.Error("Function '{0}' is error!", "UrlEncode"); + String s = args1.TextValue(); + String r = URLEncoder.encode(s, StandardCharsets.UTF_8); + return Operand.Create(r); + } + + @Override + public OperandType GetResultType() { + return OperandType.TEXT; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "UrlEncode"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index 28c35c905..4dc5ab9f3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -30,7 +30,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction holidaySet = new HashSet<>(); @@ -42,18 +42,18 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction 0) { startMyDate = startMyDate.AddDays(1); int dayOfWeek = startMyDate.DayOfWeek(); - // 检查是否是周末�? 是星期日�? 是星期六�? + // 检查是否是周末�? 是星期日�? 是星期六�? if (dayOfWeek == 1 || dayOfWeek == 7) { continue; } - // 检查是否是节假�? + // 检查是否是节假�? String dateStr = startMyDate.Year + "-" + startMyDate.Month + "-" + startMyDate.Day; if (holidaySet.contains(dateStr)) { continue; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java index 623457a56..db2176f31 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.datetimes; import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.operands.MyDate; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; @@ -102,11 +102,11 @@ private double calculateActualActual(MyDate startDate, MyDate endDate) { int daysInStartYear = isLeapYear(startYear) ? 366 : 365; int daysInEndYear = isLeapYear(endYear) ? 366 : 365; - // �?startDate 到当年年�? + // �?startDate 到当年年�? MyDate endOfStartYear = new MyDate(startYear, 12, 31, 0, 0, 0); double result = daysBetween(startDate, endOfStartYear) / (double) daysInStartYear; - // �?endYear 年初�?endDate + // �?endYear 年初�?endDate MyDate startOfEndYear = new MyDate(endYear, 1, 1, 0, 0, 0); result += daysBetween(startOfEndYear, endDate) / (double) daysInEndYear; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java index 72ec054d2..f952ad550 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java @@ -6,9 +6,9 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.MyDate; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.operands.MyDate; /** * XIRR: 返回一组不定期发生的现金流的内部收益率 diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java index 52050852e..44717d013 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Normal.java @@ -21,7 +21,7 @@ public static BigDecimal PDF(BigDecimal mean, BigDecimal standardDev, BigDecimal throw new IllegalArgumentException("standardDev must be greater than zero"); } - BigDecimal num = MathEx.Expi( + BigDecimal num = MathEx.Exp( x.subtract(mean) .pow(2) .divide( diff --git a/java/src/main/java/toolgood/algorithm/operands/OperandBigDecimal.java b/java/src/main/java/toolgood/algorithm/operands/OperandBigDecimal.java index e43d00e58..e39a8731f 100644 --- a/java/src/main/java/toolgood/algorithm/operands/OperandBigDecimal.java +++ b/java/src/main/java/toolgood/algorithm/operands/OperandBigDecimal.java @@ -5,7 +5,7 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -final class OperandBigDecimal extends Operand { +public final class OperandBigDecimal extends Operand { private final BigDecimal _value; public OperandBigDecimal(BigDecimal obj) { From f04ecd220eaa65c12a61c626ff9fa64fcaa47f57 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 09:58:04 +0800 Subject: [PATCH 52/98] fix --- .../toolgood/algorithm/AlgorithmEngineEx.java | 68 +++---- .../functions/datetimes/Function_ADDDAYS.java | 65 ++++--- .../datetimes/Function_ADDHOURS.java | 65 ++++--- .../datetimes/Function_ADDMINUTES.java | 65 ++++--- .../datetimes/Function_ADDMONTHS.java | 65 ++++--- .../datetimes/Function_ADDSECONDS.java | 65 ++++--- .../datetimes/Function_ADDYEARS.java | 65 ++++--- .../functions/datetimes/Function_DATE.java | 181 +++++++++++------- .../functions/datetimes/Function_DATEDIF.java | 107 ++++++----- .../datetimes/Function_DATEVALUE.java | 115 ++++++----- .../functions/datetimes/Function_DAY.java | 49 +++-- .../functions/datetimes/Function_DAYS.java | 64 ++++--- .../functions/datetimes/Function_DAYS360.java | 97 ++++++---- .../functions/datetimes/Function_EDATE.java | 65 ++++--- .../functions/datetimes/Function_EOMONTH.java | 75 ++++---- .../functions/datetimes/Function_HOUR.java | 45 +++-- .../functions/datetimes/Function_MINUTE.java | 45 +++-- .../functions/datetimes/Function_MONTH.java | 49 +++-- .../datetimes/Function_NETWORKDAYS.java | 77 ++++---- .../functions/datetimes/Function_NOW.java | 27 ++- .../functions/datetimes/Function_SECOND.java | 45 +++-- .../functions/datetimes/Function_TIME.java | 87 ++++++--- .../datetimes/Function_TIMESTAMP.java | 73 +++---- .../datetimes/Function_TIMEVALUE.java | 68 +++---- .../functions/datetimes/Function_TODAY.java | 30 ++- .../functions/datetimes/Function_WEEKDAY.java | 82 ++++---- .../functions/datetimes/Function_WEEKNUM.java | 73 ++++--- .../functions/datetimes/Function_WORKDAY.java | 82 ++++---- .../functions/datetimes/Function_YEAR.java | 40 ++-- .../datetimes/Function_YEARFRAC.java | 88 +++++---- .../functions/operator/Function_Add.java | 2 +- 31 files changed, 1203 insertions(+), 921 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java index 37f75b969..e3312afc9 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java @@ -5,32 +5,32 @@ import java.util.List; import java.util.concurrent.ConcurrentHashMap; -import toolgood.algorithm.internals.MyDate; +import toolgood.algorithm.operands.MyDate; /** - * AlgorithmEngine 扩展�? - * 增加自定义参数缓存功�? + * AlgorithmEngine 扩展�? + * 增加自定义参数缓存功�? */ public class AlgorithmEngineEx extends AlgorithmEngine { private final ConcurrentHashMap _tempdict; /** - * 是否忽略大小�? + * 是否忽略大小�? */ public final boolean IgnoreCase; /** - * 保存到临时文�? + * 保存到临时文�? */ public boolean UseTempDict = false; // ------------------------------------------------------------------------- - // 构造函�? + // 构造函�? // ------------------------------------------------------------------------- /** - * 默认不带缓存(区分大小写�? + * 默认不带缓存(区分大小写�? */ public AlgorithmEngineEx() { IgnoreCase = false; @@ -38,19 +38,19 @@ public AlgorithmEngineEx() { } /** - * 带缓存关键字大小写参�? + * 带缓存关键字大小写参�? * - * @param ignoreCase 是否忽略大小�? + * @param ignoreCase 是否忽略大小�? */ public AlgorithmEngineEx(boolean ignoreCase) { IgnoreCase = ignoreCase; - // Java �?ConcurrentHashMap 本身不支持自定义 key 比较器, - // 忽略大小写时需�?put/get 时统一转小写�? + // Java �?ConcurrentHashMap 本身不支持自定义 key 比较器, + // 忽略大小写时需�?put/get 时统一转小写�? _tempdict = new ConcurrentHashMap<>(); } // ------------------------------------------------------------------------- - // 内部 key 规范�? + // 内部 key 规范�? // ------------------------------------------------------------------------- private String normalizeKey(String key) { @@ -62,7 +62,7 @@ private String normalizeKey(String key) { // ------------------------------------------------------------------------- /** - * AlgorithmEngineEx 请重�?getParameterEx + * AlgorithmEngineEx 请重�?getParameterEx */ @Override public Operand getParameter(String parameter) { @@ -90,21 +90,21 @@ public Operand getParameterEx(String parameter) { // ------------------------------------------------------------------------- /** - * 清理所有参�? + * 清理所有参�? */ public void ClearParameters() { _tempdict.clear(); } /** - * 添加自定义参�? + * 添加自定义参�? */ public void AddParameter(String key, Operand obj) { _tempdict.put(normalizeKey(key), obj); } /** - * 添加自定义参数(boolean�? + * 添加自定义参数(boolean�? */ public void AddParameter(String key, boolean obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); @@ -113,42 +113,42 @@ public void AddParameter(String key, boolean obj) { // ------ number ------ /** - * 添加自定义参数(short�? + * 添加自定义参数(short�? */ public void AddParameter(String key, short obj) { _tempdict.put(normalizeKey(key), Operand.Create((int) obj)); } /** - * 添加自定义参数(int�? + * 添加自定义参数(int�? */ public void AddParameter(String key, int obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } /** - * 添加自定义参数(long�? + * 添加自定义参数(long�? */ public void AddParameter(String key, long obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } /** - * 添加自定义参数(float�? + * 添加自定义参数(float�? */ public void AddParameter(String key, float obj) { _tempdict.put(normalizeKey(key), Operand.Create((double) obj)); } /** - * 添加自定义参数(double�? + * 添加自定义参数(double�? */ public void AddParameter(String key, double obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } /** - * 添加自定义参数(BigDecimal,对�?C# decimal�? + * 添加自定义参数(BigDecimal,对�?C# decimal�? */ public void AddParameter(String key, BigDecimal obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); @@ -157,7 +157,7 @@ public void AddParameter(String key, BigDecimal obj) { // ------ string ------ /** - * 添加自定义参数(String�? + * 添加自定义参数(String�? */ public void AddParameter(String key, String obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); @@ -166,7 +166,7 @@ public void AddParameter(String key, String obj) { // ------ MyDate / date ------ /** - * 添加自定义参数(MyDate�? + * 添加自定义参数(MyDate�? */ public void AddParameter(String key, MyDate obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); @@ -175,35 +175,35 @@ public void AddParameter(String key, MyDate obj) { // ------ array ------ /** - * 添加自定义参数(List<Operand>�? + * 添加自定义参数(List<Operand>�? */ public void AddParameter(String key, List obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } /** - * 添加自定义参数(Collection<String>�? + * 添加自定义参数(Collection<String>�? */ public void AddParameter(String key, Collection obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new String[0]))); } /** - * 添加自定义参数(Collection<Double>�? + * 添加自定义参数(Collection<Double>�? */ public void AddParameterDoubles(String key, Collection obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Double[0]))); } /** - * 添加自定义参数(Collection<Integer>�? + * 添加自定义参数(Collection<Integer>�? */ public void AddParameterIntegers(String key, Collection obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Integer[0]))); } /** - * 添加自定义参数(Collection<Boolean>�? + * 添加自定义参数(Collection<Boolean>�? */ public void AddParameterBooleans(String key, Collection obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Boolean[0]))); @@ -214,11 +214,11 @@ public void AddParameterBooleans(String key, Collection obj) { // ------------------------------------------------------------------------- /** - * �?JSON 字符串批量添加参数�? - * JSON 必须�?{...} 对象格式�? + * �?JSON 字符串批量添加参数�? + * JSON 必须�?{...} 对象格式�? * - * @param json JSON 字符�? - * @throws Exception 若不是合�?JSON 对象 + * @param json JSON 字符�? + * @throws Exception 若不是合�?JSON 对象 */ public void AddParameterFromJson(String json) throws Exception { if (json == null) { @@ -226,7 +226,7 @@ public void AddParameterFromJson(String json) throws Exception { } String trimmed = json.trim(); if (trimmed.startsWith("{") && trimmed.endsWith("}")) { - // 使用项目内置�?LitJson 解析 + // 使用项目内置�?LitJson 解析 toolgood.algorithm.litJson.JsonData jo = toolgood.algorithm.litJson.JsonMapper.ToObject(trimmed); if (jo.IsObject()) { for (java.util.Map.Entry item : jo.inst_object.entrySet()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java index 15afc9ee4..49b99df41 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java @@ -1,46 +1,49 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_ADDDAYS extends Function_2 { + public Function_ADDDAYS(FunctionBase[] funcs) { + super(funcs); + } -public class Function_ADDDAYS extends Function_2 { - public Function_ADDDAYS(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "AddDays"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddDays", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "AddDays", 2); - if (args2.IsError()) { - return args2; - } - } - try { - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - int days = args2.IntValue(); - toolgood.algorithm.internals.MyDate result = date.AddDays(days); - return Operand.Create(result); - } catch (Exception e) { - // 捕获所有异�? + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - return Operand.Error("Function '{0}' is error!", "AddDays"); + return Operand.Create(args1.DateValue().AddDays(args2.IntValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.DATE; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "AddDays"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java index b68435831..0c9e51173 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java @@ -1,46 +1,49 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_ADDHOURS extends Function_2 { + public Function_ADDHOURS(FunctionBase[] funcs) { + super(funcs); + } -public class Function_ADDHOURS extends Function_2 { - public Function_ADDHOURS(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "AddHours"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddHours", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "AddHours", 2); - if (args2.IsError()) { - return args2; - } - } - try { - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - int hours = args2.IntValue(); - toolgood.algorithm.internals.MyDate result = date.AddHours(hours); - return Operand.Create(result); - } catch (Exception e) { - // 捕获所有异�? + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - return Operand.Error("Function '{0}' is error!", "AddHours"); + return Operand.Create(args1.DateValue().AddHours(args2.IntValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.DATE; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "AddHours"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java index caa4aa030..f4cdee06b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java @@ -1,46 +1,49 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_ADDMINUTES extends Function_2 { + public Function_ADDMINUTES(FunctionBase[] funcs) { + super(funcs); + } -public class Function_ADDMINUTES extends Function_2 { - public Function_ADDMINUTES(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "AddMinutes"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddMinutes", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "AddMinutes", 2); - if (args2.IsError()) { - return args2; - } - } - try { - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - int minutes = args2.IntValue(); - toolgood.algorithm.internals.MyDate result = date.AddMinutes(minutes); - return Operand.Create(result); - } catch (Exception e) { - // 捕获所有异�? + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - return Operand.Error("Function '{0}' is error!", "AddMinutes"); + return Operand.Create(args1.DateValue().AddMinutes(args2.IntValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.DATE; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "AddMinutes"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java index c74117e25..ec924c1a4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java @@ -1,46 +1,49 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_ADDMONTHS extends Function_2 { + public Function_ADDMONTHS(FunctionBase[] funcs) { + super(funcs); + } -public class Function_ADDMONTHS extends Function_2 { - public Function_ADDMONTHS(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "AddMonths"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddMonths", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "AddMonths", 2); - if (args2.IsError()) { - return args2; - } - } - try { - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - int months = args2.IntValue(); - toolgood.algorithm.internals.MyDate result = date.AddMonths(months); - return Operand.Create(result); - } catch (Exception e) { - // 捕获所有异�? + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - return Operand.Error("Function '{0}' is error!", "AddMonths"); + return Operand.Create(args1.DateValue().AddMonths(args2.IntValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.DATE; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "AddMonths"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java index 6a195073a..8ccb06ef4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java @@ -1,46 +1,49 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_ADDSECONDS extends Function_2 { + public Function_ADDSECONDS(FunctionBase[] funcs) { + super(funcs); + } -public class Function_ADDSECONDS extends Function_2 { - public Function_ADDSECONDS(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "AddSeconds"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddSeconds", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "AddSeconds", 2); - if (args2.IsError()) { - return args2; - } - } - try { - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - int seconds = args2.IntValue(); - toolgood.algorithm.internals.MyDate result = date.AddSeconds(seconds); - return Operand.Create(result); - } catch (Exception e) { - // 捕获所有异�? + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - return Operand.Error("Function '{0}' is error!", "AddSeconds"); + return Operand.Create(args1.DateValue().AddSeconds(args2.IntValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.DATE; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "AddSeconds"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java index eea8bff6f..407f6b1d4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java @@ -1,46 +1,49 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_ADDYEARS extends Function_2 { + public Function_ADDYEARS(FunctionBase[] funcs) { + super(funcs); + } -public class Function_ADDYEARS extends Function_2 { - public Function_ADDYEARS(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "AddYears"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "AddYears", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "AddYears", 2); - if (args2.IsError()) { - return args2; - } - } - try { - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - int years = args2.IntValue(); - toolgood.algorithm.internals.MyDate result = date.AddYears(years); - return Operand.Create(result); - } catch (Exception e) { - // 捕获所有异�? + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - return Operand.Error("Function '{0}' is error!", "AddYears"); + return Operand.Create(args1.DateValue().AddYears(args2.IntValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.DATE; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "AddYears"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java index 6c143871c..6628a4956 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java @@ -1,98 +1,137 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_6; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.MyDate; -public class Function_DATE extends Function_N { +public final class Function_DATE extends Function_6 { public Function_DATE(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = funcs[0].Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Date", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Date"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = funcs[1].Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Date", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = funcs[2].Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Date", 3); - if (args3.IsError()) { - return args3; - } + + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - toolgood.algorithm.internals.MyDate d; - if (funcs.length == 3) { - d = new toolgood.algorithm.internals.MyDate(args1.IntValue(), args2.IntValue(), args3.IntValue(), 0, 0, 0); - } else if (funcs.length == 4) { - Operand args4 = funcs[3].Evaluate(work, tempParameter); - if (args4.IsNotNumber()) { - args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "Date", 4); - if (args4.IsError()) { - return args4; - } + int year = args1.IntValue(); + int month = args2.IntValue(); + int day = args3.IntValue(); + + if (month < 1 || month > 12) { + return ParameterError(2); + } + if (day < 1 || day > 31) { + return ParameterError(3); + } + + MyDate d; + if (func4 == null) { + d = new MyDate(year, month, day, 0, 0, 0); + } else if (func5 == null) { + Operand args4 = GetNumber_4(engine, tempParameter); + if (args4.IsErrorOrNone()) { + return args4; + } + int hour = args4.IntValue(); + if (hour < 0 || hour > 23) { + return ParameterError(4); + } + d = new MyDate(year, month, day, hour, 0, 0); + } else if (func6 == null) { + Operand args4 = GetNumber_4(engine, tempParameter); + if (args4.IsErrorOrNone()) { + return args4; } - d = new toolgood.algorithm.internals.MyDate(args1.IntValue(), args2.IntValue(), args3.IntValue(), args4.IntValue(), 0, 0); - } else if (funcs.length == 5) { - Operand args4 = funcs[3].Evaluate(work, tempParameter); - if (args4.IsNotNumber()) { - args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "Date", 4); - if (args4.IsError()) { - return args4; - } + + Operand args5 = GetNumber_5(engine, tempParameter); + if (args5.IsErrorOrNone()) { + return args5; + } + + int hour = args4.IntValue(); + int minute = args5.IntValue(); + if (hour < 0 || hour > 23) { + return ParameterError(4); } - Operand args5 = funcs[4].Evaluate(work, tempParameter); - if (args5.IsNotNumber()) { - args5 = args5.ToNumber("Function '{0}' parameter {1} is error!", "Date", 5); - if (args5.IsError()) { - return args5; - } + if (minute < 0 || minute > 59) { + return ParameterError(5); } - d = new toolgood.algorithm.internals.MyDate(args1.IntValue(), args2.IntValue(), args3.IntValue(), args4.IntValue(), args5.IntValue(), 0); + d = new MyDate(year, month, day, hour, minute, 0); } else { - Operand args4 = funcs[3].Evaluate(work, tempParameter); - if (args4.IsNotNumber()) { - args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "Date", 4); - if (args4.IsError()) { - return args4; - } + Operand args4 = GetNumber_4(engine, tempParameter); + if (args4.IsErrorOrNone()) { + return args4; + } + + Operand args5 = GetNumber_5(engine, tempParameter); + if (args5.IsErrorOrNone()) { + return args5; + } + + Operand args6 = GetNumber_6(engine, tempParameter); + if (args6.IsErrorOrNone()) { + return args6; + } + + int hour = args4.IntValue(); + int minute = args5.IntValue(); + int second = args6.IntValue(); + if (hour < 0 || hour > 23) { + return ParameterError(4); } - Operand args5 = funcs[4].Evaluate(work, tempParameter); - if (args5.IsNotNumber()) { - args5 = args5.ToNumber("Function '{0}' parameter {1} is error!", "Date", 5); - if (args5.IsError()) { - return args5; - } + if (minute < 0 || minute > 59) { + return ParameterError(5); } - Operand args6 = funcs[5].Evaluate(work, tempParameter); - if (args6.IsNotNumber()) { - args6 = args6.ToNumber("Function '{0}' parameter {1} is error!", "Date", 6); - if (args6.IsError()) { - return args6; - } + if (second < 0 || second > 59) { + return ParameterError(6); } - d = new toolgood.algorithm.internals.MyDate(args1.IntValue(), args2.IntValue(), args3.IntValue(), args4.IntValue(), args5.IntValue(), args6.IntValue()); + d = new MyDate(year, month, day, hour, minute, second); } return Operand.Create(d); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Date"); + public OperandType GetResultType() { + return OperandType.DATE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func4 != null) + func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func5 != null) + func5.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func6 != null) + func6.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java index 1e391c101..4412cd4d8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java @@ -1,84 +1,84 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.MyDate; +public final class Function_DATEDIF extends Function_3 { + public Function_DATEDIF(FunctionBase[] funcs) { + super(funcs); + } -public class Function_DATEDIF extends Function_3 { - public Function_DATEDIF(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "DateDif"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "DateDif", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotDate()) { - args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "DateDif", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetDate_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotText()) { - args3 = args3.ToText("Function '{0}' parameter {1} is error!", "DateDif", 3); - if (args3.IsError()) { - return args3; - } + + Operand args3 = GetText_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - toolgood.algorithm.internals.MyDate startMyDate = args1.DateValue(); - toolgood.algorithm.internals.MyDate endMyDate = args2.DateValue(); - String t = args3.TextValue().toLowerCase(); - if (t.equals("y")) { - // 计算年差 + MyDate startMyDate = args1.DateValue(); + MyDate endMyDate = args2.DateValue(); + String t = args3.TextValue(); + + if (t.equalsIgnoreCase("Y")) { boolean b = false; if (startMyDate.Month < endMyDate.Month) { b = true; } else if (startMyDate.Month == endMyDate.Month) { - if (startMyDate.Day <= endMyDate.Day) b = true; + if (startMyDate.Day <= endMyDate.Day) + b = true; } if (b) { return Operand.Create(endMyDate.Year - startMyDate.Year); } else { return Operand.Create(endMyDate.Year - startMyDate.Year - 1); } - } else if (t.equals("m")) { - // 计算月差 + } else if (t.equalsIgnoreCase("M")) { boolean b = false; - if (startMyDate.Day <= endMyDate.Day) b = true; + if (startMyDate.Day <= endMyDate.Day) + b = true; if (b) { return Operand.Create(endMyDate.Year * 12 + endMyDate.Month - startMyDate.Year * 12 - startMyDate.Month); } else { return Operand.Create(endMyDate.Year * 12 + endMyDate.Month - startMyDate.Year * 12 - startMyDate.Month - 1); } - } else if (t.equals("d")) { - // 计算日差 + } else if (t.equalsIgnoreCase("D")) { long days = endMyDate.ToDateTime().getMillis() - startMyDate.ToDateTime().getMillis(); days = days / (1000 * 60 * 60 * 24); return Operand.Create((int) days); - } else if (t.equals("yd")) { - // 计算年内日差 + } else if (t.equalsIgnoreCase("YD")) { int startDayOfYear = startMyDate.DayOfYear(); int endDayOfYear = endMyDate.DayOfYear(); int day = endDayOfYear - startDayOfYear; if (endMyDate.Year > startMyDate.Year && day < 0) { - // 获取 startMyDate 所在年份的天数 int days = startMyDate.ToDateTime().dayOfYear().withMaximumValue().getDayOfYear(); day = days + day; } return Operand.Create(day); - } else if (t.equals("md")) { - // 计算月内日差 + } else if (t.equalsIgnoreCase("MD")) { int mo = endMyDate.Day - startMyDate.Day; if (mo < 0) { int days; @@ -90,18 +90,27 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + func2.GetParameterTypes(noneEngine, result, OperandType.DATE); + func3.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java index 55f13d341..41ab73d49 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java @@ -1,84 +1,107 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - -import java.util.ArrayList; import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.MyDate; -public class Function_DATEVALUE extends Function_N { +public final class Function_DATEVALUE extends Function_2 { public Function_DATEVALUE(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "DateValue"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (func1 == null) + return ParameterError(1); + + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - if (args.get(0).IsDate()) { - return args.get(0); + if (args1.IsDate()) { + return args1; } + int type = 0; - if (args.size() == 2) { - Operand args2 = args.get(1).ToNumber("Function '{0}' parameter {1} is error!", "DateValue", 2); - if (args2.IsError()) { + if (func2 != null) { + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } type = args2.IntValue(); } if (type == 0) { - if (args.get(0).IsText()) { - toolgood.algorithm.internals.MyDate date = toolgood.algorithm.internals.MyDate.parse(args.get(0).TextValue()); + if (args1.IsText()) { + MyDate date = MyDate.parse(args1.TextValue()); if (date != null) { return Operand.Create(date); } } - Operand args1 = args.get(0).ToNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); - if (args1.LongValue() <= 2958465L) { // 9999-12-31 日时间在excel的数字为 2958465 - return args1.ToMyDate("Function '{0}' parameter {1} is error!", "DateValue", 1); + Operand arg1 = ConvertToNumber(args1, 1); + if (arg1.IsErrorOrNone()) { + return arg1; } - if (args1.LongValue() <= 253402232399L) { // 9999-12-31 12:59:59 日时�?�?时间�?�?253402232399L - // 这里需要实现类�?FunctionUtil.StartDateUtc.AddSeconds 的功�? - // 暂时使用 MyDate 的构造函数来处理 - return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.LongValue() / 86400.0)); + if (arg1.LongValue() <= 2958465L) { + return arg1.ToMyDate(); } - // 注:时间�?253402232399 ms 转时�?�?1978-01-12 05:30:32 - // 这里需要实现类�?FunctionUtil.StartDateUtc.AddMilliseconds 的功�? - return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.LongValue() / (86400.0 * 1000.0))); + if (arg1.LongValue() <= 253402232399L) { + return Operand.Create(new MyDate(arg1.LongValue() / 86400.0)); + } + return Operand.Create(new MyDate(arg1.LongValue() / (86400.0 * 1000.0))); } else if (type == 1) { - Operand args1 = args.get(0).ToText("Function '{0}' parameter {1} is error!", "DateValue", 1); - if (args1.IsError()) { - return args1; + Operand arg1 = ConvertToText(args1, 1); + if (arg1.IsErrorOrNone()) { + return arg1; } - toolgood.algorithm.internals.MyDate date = toolgood.algorithm.internals.MyDate.parse(args1.TextValue()); + MyDate date = MyDate.parse(arg1.TextValue()); if (date != null) { return Operand.Create(date); } } else if (type == 2) { - return args.get(0).ToNumber("Function '{0}' parameter {1} is error!", "DateValue", 1).ToMyDate("Function '{0}' parameter {1} is error!", "DateValue", 1); + Operand arg1 = ConvertToNumber(args1, 1); + if (arg1.IsErrorOrNone()) { + return arg1; + } + return arg1.ToMyDate(); } else if (type == 3) { - Operand args1 = args.get(0).ToNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); - // 这里需要实现类�?FunctionUtil.StartDateUtc.AddMilliseconds 的功�? - return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.LongValue() / (86400.0 * 1000.0))); + Operand arg1 = ConvertToNumber(args1, 1); + if (arg1.IsErrorOrNone()) { + return arg1; + } + return Operand.Create(new MyDate(arg1.LongValue() / (86400.0 * 1000.0))); } else if (type == 4) { - Operand args1 = args.get(0).ToNumber("Function '{0}' parameter {1} is error!", "DateValue", 1); - // 这里需要实现类�?FunctionUtil.StartDateUtc.AddSeconds 的功�? - return Operand.Create(new toolgood.algorithm.internals.MyDate(args1.LongValue() / 86400.0)); + Operand arg1 = ConvertToNumber(args1, 1); + if (arg1.IsErrorOrNone()) { + return arg1; + } + return Operand.Create(new MyDate(arg1.LongValue() / 86400.0)); } - return Operand.Error("Function '{0}' parameter is error!", "DateValue"); + return ParameterError(1); + } + + @Override + public OperandType GetResultType() { + return OperandType.DATE; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "DateValue"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); + if (func2 != null) + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java index 35911f370..1cc74594e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java @@ -1,35 +1,46 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_DAY extends Function_1 { +public final class Function_DAY extends Function_1 { public Function_DAY(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Day"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Day"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - if (date.Day == null) { - return Operand.Error("Function '{0}' is error!", "Day"); + if (args1.DateValue().Day == null) { + return ParameterError(1); } - return Operand.Create((int)date.Day); + return Operand.Create(args1.DateValue().Day); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Day"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS.java index 8ca2e63c0..d877c7660 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS.java @@ -1,46 +1,58 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_DAYS extends Function_2 { +public final class Function_DAYS extends Function_2 { public Function_DAYS(FunctionBase func1, FunctionBase func2) { super(func1, func2); } + public Function_DAYS(FunctionBase[] funcs) { + super(funcs); + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "Days", 1); - if (args1.IsError()) { - return args1; - } - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotDate()) { - args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "Days", 2); - if (args2.IsError()) { - return args2; - } + public String Name() { + return "Days"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - MyDate endMyDate = args1.DateValue(); - MyDate startMyDate = args2.DateValue(); + Operand args2 = GetDate_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; + } - // 计算两个日期之间的天数差(仅比较日期部分�? - long endMillis = endMyDate.ToDateTime().withTimeAtStartOfDay().getMillis(); - long startMillis = startMyDate.ToDateTime().withTimeAtStartOfDay().getMillis(); + long endMillis = args1.DateValue().ToDateTime().withTimeAtStartOfDay().getMillis(); + long startMillis = args2.DateValue().ToDateTime().withTimeAtStartOfDay().getMillis(); long days = (endMillis - startMillis) / (1000L * 60 * 60 * 24); return Operand.Create((int) days); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Days"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + func2.GetParameterTypes(noneEngine, result, OperandType.DATE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java index 963fe7da5..650659307 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java @@ -1,33 +1,37 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.MyDate; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.MyDate; +public final class Function_DAYS360 extends Function_3 { + public Function_DAYS360(FunctionBase[] funcs) { + super(funcs); + } -public class Function_DAYS360 extends Function_3 { - public Function_DAYS360(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "Days360"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "Days360", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotDate()) { - args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "Days360", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetDate_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } MyDate startMyDate = args1.DateValue(); @@ -35,26 +39,22 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + func2.GetParameterTypes(noneEngine, result, OperandType.DATE); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java index 34914cd08..1352acead 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java @@ -1,46 +1,49 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_EDATE extends Function_2 { + public Function_EDATE(FunctionBase[] funcs) { + super(funcs); + } -public class Function_EDATE extends Function_2 { - public Function_EDATE(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "EDate"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "EDate", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "EDate", 2); - if (args2.IsError()) { - return args2; - } - } - try { - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - int months = args2.IntValue(); - toolgood.algorithm.internals.MyDate result = date.AddMonths(months); - return Operand.Create(result); - } catch (Exception e) { - // 捕获所有异�? + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - return Operand.Error("Function '{0}' is error!", "EDate"); + return Operand.Create(args1.DateValue().AddMonths(args2.IntValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.DATE; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "EDate"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java index 5d473119d..3d8571359 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java @@ -1,51 +1,54 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.MyDate; +public final class Function_EOMONTH extends Function_2 { + public Function_EOMONTH(FunctionBase[] funcs) { + super(funcs); + } -public class Function_EOMONTH extends Function_2 { - public Function_EOMONTH(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "EOMonth"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "EoMonth", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "EoMonth", 2); - if (args2.IsError()) { - return args2; - } - } - try { - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - int months = args2.IntValue(); - // 添加指定的月份数(加�?�? - toolgood.algorithm.internals.MyDate tempDate = date.AddMonths(months + 1); - // 创建一个新的日期,设置为该月的第一�? - toolgood.algorithm.internals.MyDate firstDayOfMonth = new toolgood.algorithm.internals.MyDate(tempDate.Year, tempDate.Month, 1, 0, 0, 0); - // 减去一天,得到上个月的最后一�? - toolgood.algorithm.internals.MyDate lastDayOfMonth = firstDayOfMonth.AddDays(-1); - return Operand.Create(lastDayOfMonth); - } catch (Exception e) { - // 捕获所有异�? + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - return Operand.Error("Function '{0}' is error!", "EoMonth"); + + MyDate dt = args1.DateValue().AddMonths(args2.IntValue() + 1); + MyDate firstDayOfMonth = new MyDate(dt.Year, dt.Month, 1, 0, 0, 0); + MyDate lastDayOfMonth = firstDayOfMonth.AddDays(-1); + return Operand.Create(lastDayOfMonth); + } + + @Override + public OperandType GetResultType() { + return OperandType.DATE; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "EoMonth"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java index c9687bb07..69cf7d270 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java @@ -1,32 +1,43 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_HOUR extends Function_1 { +public final class Function_HOUR extends Function_1 { public Function_HOUR(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Hour"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Hour"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - return Operand.Create(date.Hour); + return Operand.Create(args1.DateValue().Hour); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Hour"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java index 5cfab94f9..1837e6087 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java @@ -1,32 +1,43 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_MINUTE extends Function_1 { +public final class Function_MINUTE extends Function_1 { public Function_MINUTE(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Minute"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Minute"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - return Operand.Create(date.Minute); + return Operand.Create(args1.DateValue().Minute); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Minute"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java index 46a4dd9e5..cc8d5ecc3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java @@ -1,35 +1,46 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_MONTH extends Function_1 { +public final class Function_MONTH extends Function_1 { public Function_MONTH(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Month"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Month"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - if (date.Month == null) { - return Operand.Error("Function '{0}' is error!", "Month"); + if (args1.DateValue().Month == null) { + return ParameterError(1); } - return Operand.Create((int)date.Month); + return Operand.Create((int) args1.DateValue().Month); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Month"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java index 176b2d654..41bea1bc4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java @@ -1,55 +1,58 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - import java.util.HashSet; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.MyDate; -public class Function_NETWORKDAYS extends Function_N { +public final class Function_NETWORKDAYS extends Function_N { public Function_NETWORKDAYS(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = funcs[0].Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "NetworkDays"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate(engine, tempParameter, 0); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = funcs[1].Evaluate(work, tempParameter); - if (args2.IsNotDate()) { - args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetDate(engine, tempParameter, 1); + if (args2.IsErrorOrNone()) { + return args2; } - toolgood.algorithm.internals.MyDate startMyDate = args1.DateValue(); - toolgood.algorithm.internals.MyDate endMyDate = args2.DateValue(); + MyDate startMyDate = args1.DateValue(); + MyDate endMyDate = args2.DateValue(); HashSet list = new HashSet<>(); for (int i = 2; i < funcs.length; i++) { - Operand ar = funcs[i].Evaluate(work, tempParameter); - if (ar.IsNotDate()) { - ar = ar.ToMyDate("Function '{0}' parameter {1} is error!", "NetWorkdays", i + 1); - if (ar.IsError()) { - return ar; - } + Operand ar = GetDate(engine, tempParameter, i); + if (ar.IsErrorOrNone()) { + return ar; } - toolgood.algorithm.internals.MyDate holiday = ar.DateValue(); + MyDate holiday = ar.DateValue(); list.add(holiday.Year + "-" + holiday.Month + "-" + holiday.Day); } + int days = 0; - toolgood.algorithm.internals.MyDate currentDate = startMyDate; - while (currentDate.ToDateTime().isBefore(endMyDate.ToDateTime()) || currentDate.ToDateTime().isEqual(endMyDate.ToDateTime())) { + MyDate currentDate = startMyDate; + while (currentDate.ToDateTime().isBefore(endMyDate.ToDateTime()) + || currentDate.ToDateTime().isEqual(endMyDate.ToDateTime())) { int dayOfWeek = currentDate.DayOfWeek(); - // 1-7,其�?1 是周日,7 是周�? if (dayOfWeek != 1 && dayOfWeek != 7) { String dateStr = currentDate.Year + "-" + currentDate.Month + "-" + currentDate.Day; if (!list.contains(dateStr)) { @@ -62,7 +65,15 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, + String op, String val) { + for (FunctionBase item : funcs) { + item.GetParameterTypes(noneEngine, result, OperandType.DATE); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java index ebe397441..7d74b5fd4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java @@ -1,20 +1,33 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.lang.StringBuilder; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_0; +import toolgood.algorithm.operands.MyDate; +public final class Function_NOW extends Function_0 { + @Override + public String Name() { + return "Now"; + } -public class Function_NOW extends FunctionBase { @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - toolgood.algorithm.internals.MyDate now = toolgood.algorithm.internals.MyDate.now(); - return Operand.Create(now); + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + return Operand.Create(MyDate.now()); } @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { stringBuilder.append("Now()"); } + + @Override + public OperandType GetResultType() { + return OperandType.DATE; + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java index 82e036e4f..da88b5685 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java @@ -1,32 +1,43 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SECOND extends Function_1 { +public final class Function_SECOND extends Function_1 { public Function_SECOND(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Second"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Second"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - return Operand.Create(date.Second); + return Operand.Create(args1.DateValue().Second); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Second"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java index 4e32a252c..e689f4daf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java @@ -1,52 +1,77 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.MyDate; +public final class Function_TIME extends Function_3 { + public Function_TIME(FunctionBase[] funcs) { + super(funcs); + } -public class Function_TIME extends Function_3 { - public Function_TIME(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "Time"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Time", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Time", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; + } + + int hour = args1.IntValue(); + int minute = args2.IntValue(); + if (hour < 0 || hour > 23) { + return ParameterError(1); + } + if (minute < 0 || minute > 59) { + return ParameterError(2); } - toolgood.algorithm.internals.MyDate d; + MyDate d; if (func3 != null) { - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Time", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; + } + int second = args3.IntValue(); + if (second < 0 || second > 59) { + return ParameterError(3); } - d = new toolgood.algorithm.internals.MyDate(0, 0, 0, args1.IntValue(), args2.IntValue(), args3.IntValue()); + d = new MyDate(0, 0, 0, hour, minute, second); } else { - d = new toolgood.algorithm.internals.MyDate(0, 0, 0, args1.IntValue(), args2.IntValue(), 0); + d = new MyDate(0, 0, 0, hour, minute, 0); } return Operand.Create(d); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Time"); + public OperandType GetResultType() { + return OperandType.DATE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java index 95a5b69b8..e020733d2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java @@ -1,56 +1,65 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.MyDate; -public class Function_TIMESTAMP extends Function_2 { - public Function_TIMESTAMP(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_TIMESTAMP extends Function_2 { + public Function_TIMESTAMP(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args0 = func1.Evaluate(work, tempParameter); - if (args0.IsError()) { - return args0; - } + public String Name() { + return "Timestamp"; + } - int type = 0; // 毫秒 + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + int type = 0; if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "TimeStamp", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } type = args2.IntValue(); } - Operand dateOperand = args0.ToMyDate("Function '{0}' parameter {1} is error!", "TimeStamp", 1); - if (dateOperand.IsError()) { - return dateOperand; + + Operand args0 = GetDate_1(engine, tempParameter); + if (args0.IsErrorOrNone()) { + return args0; } - toolgood.algorithm.internals.MyDate myDate = dateOperand.DateValue(); - - // 计算时间�? + + MyDate myDate = args0.DateValue(); long timestamp = myDate.ToDateTime().getMillis(); - + if (type == 0) { - // 返回毫秒时间�? return Operand.Create(timestamp); } else if (type == 1) { - // 返回秒时间戳 return Operand.Create((double) timestamp / 1000); } - return Operand.Error("Function '{0}' parameter is error!", "TimeStamp"); + return ParameterError(2); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "TimeStamp"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java index f43ce2a0b..ece8607fa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java @@ -1,61 +1,49 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.MyDate; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class Function_TIMEVALUE extends Function_1 { +public final class Function_TIMEVALUE extends Function_1 { public Function_TIMEVALUE(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "TimeValue"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "TimeValue"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - String timeString = args1.TextValue(); - // 尝试解析时间字符�? - toolgood.algorithm.internals.MyDate date = parseTimeString(timeString); + MyDate date = MyDate.parse(args1.TextValue()); if (date != null) { return Operand.Create(date); } - return Operand.Error("Function '{0}' parameter is error!", "TimeValue"); + return ParameterError(1); } - private toolgood.algorithm.internals.MyDate parseTimeString(String timeString) { - // 匹配格式: HH:MM:SS - Pattern pattern1 = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$"); - Matcher matcher1 = pattern1.matcher(timeString); - if (matcher1.find()) { - int hour = Integer.parseInt(matcher1.group(1)); - int minute = Integer.parseInt(matcher1.group(2)); - int second = Integer.parseInt(matcher1.group(3)); - return new toolgood.algorithm.internals.MyDate(0, 0, 0, hour, minute, second); - } - // 匹配格式: HH:MM - Pattern pattern2 = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d)$"); - Matcher matcher2 = pattern2.matcher(timeString); - if (matcher2.find()) { - int hour = Integer.parseInt(matcher2.group(1)); - int minute = Integer.parseInt(matcher2.group(2)); - return new toolgood.algorithm.internals.MyDate(0, 0, 0, hour, minute, 0); - } - return null; + @Override + public OperandType GetResultType() { + return OperandType.DATE; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "TimeValue"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java index dc5a062ac..f9d71ddd7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java @@ -1,22 +1,34 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.lang.StringBuilder; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_0; +import toolgood.algorithm.operands.MyDate; +public final class Function_TODAY extends Function_0 { + @Override + public String Name() { + return "Today"; + } -public class Function_TODAY extends FunctionBase { @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - toolgood.algorithm.internals.MyDate now = toolgood.algorithm.internals.MyDate.now(); - // 创建一个只包含日期部分的新 MyDate 对象 - toolgood.algorithm.internals.MyDate today = new toolgood.algorithm.internals.MyDate(now.Year, now.Month, now.Day, 0, 0, 0); - return Operand.Create(today); + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + MyDate now = MyDate.now(); + return Operand.Create(new MyDate(now.Year, now.Month, now.Day, 0, 0, 0)); } @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { stringBuilder.append("Today()"); } + + @Override + public OperandType GetResultType() { + return OperandType.DATE; + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index 890a2bbc3..d88b11f26 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -1,62 +1,70 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +public final class Function_WEEKDAY extends Function_2 { + public Function_WEEKDAY(FunctionBase[] funcs) { + super(funcs); + } -public class Function_WEEKDAY extends Function_2 { - public Function_WEEKDAY(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Weekday"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "WeekDay", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } int type = 1; if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "WeekDay", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } type = args2.IntValue(); + if (type != 1 && type != 2 && type != 3) { + return ParameterError(2); + } } - toolgood.algorithm.internals.MyDate date = args1.DateValue(); - int dayOfWeek = date.DayOfWeek(); // 1-7,其�?1 是星期日�? 是星期六 - + int t = args1.DateValue().DayOfWeek(); if (type == 1) { - // 返回 1-7,其�?1 是星期日�? 是星期六 - return Operand.Create(dayOfWeek); + return Operand.Create(t); } else if (type == 2) { - // 返回 1-7,其�?1 是星期一�? 是星期日 - if (dayOfWeek == 1) { + if (t == 0) return Operand.Create(7); - } - return Operand.Create(dayOfWeek - 1); - } else { - // 返回 0-6,其�?0 是星期一�? 是星期日 - if (dayOfWeek == 1) { - return Operand.Create(6); - } - return Operand.Create(dayOfWeek - 2); + return Operand.Create(t); + } + if (t == 0) { + return Operand.Create(6); } + return Operand.Create(t - 1); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "WeekDay"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index 252e93461..3a2260455 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -1,42 +1,44 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.MyDate; +public final class Function_WEEKNUM extends Function_2 { + public Function_WEEKNUM(FunctionBase[] funcs) { + super(funcs); + } -public class Function_WEEKNUM extends Function_2 { - public Function_WEEKNUM(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Weeknum"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "WeekNum", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - toolgood.algorithm.internals.MyDate startMyDate = args1.DateValue(); - - int dayOfYear = startMyDate.DayOfYear(); - // 计算当年第一天是星期几(1-7�? 是星期日�? - toolgood.algorithm.internals.MyDate firstDayOfYear = new toolgood.algorithm.internals.MyDate(startMyDate.Year, 1, 1, 0, 0, 0); - int firstDayOfWeek = firstDayOfYear.DayOfWeek(); - - int days = dayOfYear + (firstDayOfWeek - 1); // �?1 是因�?DayOfWeek 返回 1-7,而我们需�?0-6 - + + MyDate startMyDate = args1.DateValue(); + + int days = startMyDate.DayOfYear() + (int) (new MyDate(startMyDate.Year, 1, 1, 0, 0, 0).DayOfWeek()); if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "WeekNum", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; + } + if (args2.IntValue() != 1 && args2.IntValue() != 2) { + return ParameterError(2); } if (args2.IntValue() == 2) { days--; @@ -48,7 +50,16 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index 4dc5ab9f3..7fb6cf919 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -1,61 +1,61 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - import java.util.HashSet; +import java.util.List; +import java.util.function.BiFunction; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.MyDate; -public class Function_WORKDAY extends Function_N { +public final class Function_WORKDAY extends Function_N { public Function_WORKDAY(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = funcs[0].Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "Workday", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Workday"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate(engine, tempParameter, 0); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = funcs[1].Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Workday", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetNumber(engine, tempParameter, 1); + if (args2.IsErrorOrNone()) { + return args2; } - toolgood.algorithm.operands.MyDate startMyDate = args1.DateValue(); + MyDate startMyDate = args1.DateValue(); int days = args2.IntValue(); - HashSet holidaySet = new HashSet<>(); - + HashSet list = new HashSet<>(); + for (int i = 2; i < funcs.length; i++) { - Operand ar = funcs[i].Evaluate(work, tempParameter); - if (ar.IsNotDate()) { - ar = ar.ToMyDate("Function '{0}' parameter {1} is error!", "Workday", i + 1); - if (ar.IsError()) { - return ar; - } + Operand ar = GetDate(engine, tempParameter, i); + if (ar.IsErrorOrNone()) { + return ar; } - toolgood.algorithm.operands.MyDate holiday = ar.DateValue(); - holidaySet.add(holiday.Year + "-" + holiday.Month + "-" + holiday.Day); + MyDate holiday = ar.DateValue(); + list.add(holiday.Year + "-" + holiday.Month + "-" + holiday.Day); } - + while (days > 0) { startMyDate = startMyDate.AddDays(1); int dayOfWeek = startMyDate.DayOfWeek(); - // 检查是否是周末�? 是星期日�? 是星期六�? if (dayOfWeek == 1 || dayOfWeek == 7) { continue; } - // 检查是否是节假�? String dateStr = startMyDate.Year + "-" + startMyDate.Month + "-" + startMyDate.Day; - if (holidaySet.contains(dateStr)) { + if (list.contains(dateStr)) { continue; } days--; @@ -64,7 +64,17 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, + String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.DATE); + funcs[1].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + for (int i = 2; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.DATE); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java index 12984fab5..727f9371e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java @@ -1,32 +1,46 @@ package toolgood.algorithm.internals.functions.datetimes; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_YEAR extends Function_1 { +public final class Function_YEAR extends Function_1 { public Function_YEAR(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter is error!", "Year"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Year"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetDate_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } if (args1.DateValue().Year == null) { - return Operand.Error("Function '{0}' is error!", "Year"); + return ParameterError(1); } - return Operand.Create((int)args1.DateValue().Year); + return Operand.Create(args1.DateValue().Year); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Year"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java index db2176f31..4dca55656 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java @@ -1,56 +1,56 @@ package toolgood.algorithm.internals.functions.datetimes; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.operands.MyDate; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; -public class Function_YEARFRAC extends Function_3 { - public Function_YEARFRAC(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); +public final class Function_YEARFRAC extends Function_3 { + public Function_YEARFRAC(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "YEARFRAC"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - if (func1 == null || func2 == null) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (func1 == null || func2 == null) return ParameterError(1); - } - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotDate()) { - args1 = args1.ToMyDate("Function '{0}' parameter {1} is error!", "YEARFRAC", 1); - if (args1.IsError()) return args1; - } + Operand startDateArg = GetDate_1(engine, tempParameter); + if (startDateArg.IsErrorOrNone()) + return startDateArg; - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotDate()) { - args2 = args2.ToMyDate("Function '{0}' parameter {1} is error!", "YEARFRAC", 2); - if (args2.IsError()) return args2; - } + Operand endDateArg = GetDate_2(engine, tempParameter); + if (endDateArg.IsErrorOrNone()) + return endDateArg; int basis = 0; if (func3 != null) { - Operand args3 = func3.Evaluate(work, tempParameter); - if (!args3.IsNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "YEARFRAC", 3); - if (args3.IsError()) return args3; - } - basis = (int) args3.DoubleValue(); + Operand basisArg = GetNumber_3(engine, tempParameter); + if (basisArg.IsErrorOrNone()) + return basisArg; + basis = basisArg.IntValue(); if (basis < 0 || basis > 4) { return ParameterError(3); } } - MyDate startMyDate = args1.DateValue(); - MyDate endMyDate = args2.DateValue(); - - double result = calculateYearFrac(startMyDate, endMyDate, basis); + double result = calculateYearFrac(startDateArg.DateValue(), endDateArg.DateValue(), basis); return Operand.Create(result); } private double calculateYearFrac(MyDate startDate, MyDate endDate, int basis) { - // 确保 startDate <= endDate if (startDate.ToDateTime().isAfter(endDate.ToDateTime())) { MyDate temp = startDate; startDate = endDate; @@ -76,18 +76,15 @@ private double calculateYearFrac(MyDate startDate, MyDate endDate, int basis) { private double calculate30_360(MyDate startDate, MyDate endDate) { int d1 = Math.min(30, startDate.Day); int d2 = endDate.Day; - if (d1 == 30) d2 = Math.min(30, d2); - return (360.0 * (endDate.Year - startDate.Year) - + 30.0 * (endDate.Month - startDate.Month) - + (d2 - d1)) / 360.0; + if (d1 == 30) + d2 = Math.min(30, d2); + return (360.0 * (endDate.Year - startDate.Year) + 30.0 * (endDate.Month - startDate.Month) + (d2 - d1)) / 360.0; } private double calculate30_360E(MyDate startDate, MyDate endDate) { int d1 = Math.min(30, startDate.Day); int d2 = Math.min(30, endDate.Day); - return (360.0 * (endDate.Year - startDate.Year) - + 30.0 * (endDate.Month - startDate.Month) - + (d2 - d1)) / 360.0; + return (360.0 * (endDate.Year - startDate.Year) + 30.0 * (endDate.Month - startDate.Month) + (d2 - d1)) / 360.0; } private double calculateActualActual(MyDate startDate, MyDate endDate) { @@ -102,15 +99,12 @@ private double calculateActualActual(MyDate startDate, MyDate endDate) { int daysInStartYear = isLeapYear(startYear) ? 366 : 365; int daysInEndYear = isLeapYear(endYear) ? 366 : 365; - // �?startDate 到当年年�? MyDate endOfStartYear = new MyDate(startYear, 12, 31, 0, 0, 0); double result = daysBetween(startDate, endOfStartYear) / (double) daysInStartYear; - // �?endYear 年初�?endDate MyDate startOfEndYear = new MyDate(endYear, 1, 1, 0, 0, 0); result += daysBetween(startOfEndYear, endDate) / (double) daysInEndYear; - // 中间完整年份 result += endYear - startYear - 1; return result; @@ -127,7 +121,17 @@ private boolean isLeapYear(int year) { } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "YEARFRAC"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.DATE); + if (func2 != null) + func2.GetParameterTypes(noneEngine, result, OperandType.DATE); + if (func3 != null) + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java index 3019e38ca..d6c1e5da9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java @@ -4,11 +4,11 @@ import java.text.SimpleDateFormat; import java.util.Locale; -import toolgood.algorithm.internals.MyDate; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.operands.MyDate; import toolgood.algorithm.internals.functions.FunctionUtil; public class Function_Add extends Function_2 { From c11d5af3a21a2ec9cc5e81caa8c064aba0807735 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 10:05:41 +0800 Subject: [PATCH 53/98] fix --- .../functions/financial/Function_DB.java | 40 ++++++++----- .../functions/financial/Function_DDB.java | 39 +++++++++---- .../functions/financial/Function_FV.java | 43 +++++++++----- .../functions/financial/Function_IPMT.java | 42 +++++++++----- .../functions/financial/Function_IRR.java | 35 +++++++---- .../functions/financial/Function_MIRR.java | 38 +++++++----- .../functions/financial/Function_NPER.java | 45 +++++++++----- .../functions/financial/Function_NPV.java | 46 ++++++++++----- .../functions/financial/Function_PMT.java | 39 +++++++++---- .../functions/financial/Function_PPMT.java | 58 +++++++++++++------ .../functions/financial/Function_PV.java | 43 +++++++++----- .../functions/financial/Function_RATE.java | 49 +++++++++++----- .../functions/financial/Function_SLN.java | 37 ++++++++---- .../functions/financial/Function_SYD.java | 40 ++++++++----- .../functions/financial/Function_XIRR.java | 40 ++++++++----- .../functions/financial/Function_XNPV.java | 43 +++++++++----- 16 files changed, 460 insertions(+), 217 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DB.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DB.java index f2a5a1214..0cf40909c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DB.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DB.java @@ -1,43 +1,48 @@ package toolgood.algorithm.internals.functions.financial; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_5; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * DB: 使用固定余额递减法,计算一笔资产在给定期间内的折旧�? - * DB(cost, salvage, life, period, [month]) - */ -public class Function_DB extends Function_5 { +public final class Function_DB extends Function_5 { public Function_DB(FunctionBase[] funcs) { super(funcs); } + @Override + public String Name() { + return "DB"; + } + @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand costArg = GetNumber_1(engine, tempParameter); - if (costArg.IsError()) return costArg; + if (costArg.IsErrorOrNone()) return costArg; double cost = costArg.DoubleValue(); Operand salvageArg = GetNumber_2(engine, tempParameter); - if (salvageArg.IsError()) return salvageArg; + if (salvageArg.IsErrorOrNone()) return salvageArg; double salvage = salvageArg.DoubleValue(); Operand lifeArg = GetNumber_3(engine, tempParameter); - if (lifeArg.IsError()) return lifeArg; + if (lifeArg.IsErrorOrNone()) return lifeArg; double life = lifeArg.DoubleValue(); Operand periodArg = GetNumber_4(engine, tempParameter); - if (periodArg.IsError()) return periodArg; + if (periodArg.IsErrorOrNone()) return periodArg; double period = periodArg.DoubleValue(); int month = 12; if (func5 != null) { Operand monthArg = GetNumber_5(engine, tempParameter); - if (monthArg.IsError()) return monthArg; + if (monthArg.IsErrorOrNone()) return monthArg; month = monthArg.IntValue(); if (month < 1 || month > 12) { return ParameterError(5); @@ -48,7 +53,6 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction life + 1) return ParameterError(4); if (life < 1) return ParameterError(3); - // rate 保留3位小�? double rate = 1 - Math.pow(salvage / cost, 1.0 / life); rate = Math.round(rate * 1000.0) / 1000.0; @@ -83,7 +87,17 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func5 != null) func5.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java index aaa928f89..f86eaaba7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java @@ -1,43 +1,48 @@ package toolgood.algorithm.internals.functions.financial; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_5; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * DDB: 使用双倍余额递减法或其他指定方法,计算一笔资产在给定期间内的折旧�? - * DDB(cost, salvage, life, period, [factor]) - */ -public class Function_DDB extends Function_5 { +public final class Function_DDB extends Function_5 { public Function_DDB(FunctionBase[] funcs) { super(funcs); } + @Override + public String Name() { + return "DDB"; + } + @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand costArg = GetNumber_1(engine, tempParameter); - if (costArg.IsError()) return costArg; + if (costArg.IsErrorOrNone()) return costArg; double cost = costArg.DoubleValue(); Operand salvageArg = GetNumber_2(engine, tempParameter); - if (salvageArg.IsError()) return salvageArg; + if (salvageArg.IsErrorOrNone()) return salvageArg; double salvage = salvageArg.DoubleValue(); Operand lifeArg = GetNumber_3(engine, tempParameter); - if (lifeArg.IsError()) return lifeArg; + if (lifeArg.IsErrorOrNone()) return lifeArg; double life = lifeArg.DoubleValue(); Operand periodArg = GetNumber_4(engine, tempParameter); - if (periodArg.IsError()) return periodArg; + if (periodArg.IsErrorOrNone()) return periodArg; double period = periodArg.DoubleValue(); double factor = 2; if (func5 != null) { Operand factorArg = GetNumber_5(engine, tempParameter); - if (factorArg.IsError()) return factorArg; + if (factorArg.IsErrorOrNone()) return factorArg; factor = factorArg.DoubleValue(); } @@ -70,7 +75,17 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func5 != null) func5.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java index 6e8fd69ea..662cf8210 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java @@ -1,46 +1,51 @@ package toolgood.algorithm.internals.functions.financial; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_5; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * FV: 基于固定利率及等额分期付款方式,返回某项投资的未来�? - * FV(rate, nper, pmt, [pv], [type]) - */ -public class Function_FV extends Function_5 { +public final class Function_FV extends Function_5 { public Function_FV(FunctionBase[] funcs) { super(funcs); } + @Override + public String Name() { + return "FV"; + } + @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand rateArg = GetNumber_1(engine, tempParameter); - if (rateArg.IsError()) return rateArg; + if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); Operand nperArg = GetNumber_2(engine, tempParameter); - if (nperArg.IsError()) return nperArg; + if (nperArg.IsErrorOrNone()) return nperArg; double nper = nperArg.DoubleValue(); Operand pmtArg = GetNumber_3(engine, tempParameter); - if (pmtArg.IsError()) return pmtArg; + if (pmtArg.IsErrorOrNone()) return pmtArg; double pmt = pmtArg.DoubleValue(); double pv = 0; if (func4 != null) { Operand pvArg = GetNumber_4(engine, tempParameter); - if (pvArg.IsError()) return pvArg; + if (pvArg.IsErrorOrNone()) return pvArg; pv = pvArg.DoubleValue(); } int type = 0; if (func5 != null) { Operand typeArg = GetNumber_5(engine, tempParameter); - if (typeArg.IsError()) return typeArg; + if (typeArg.IsErrorOrNone()) return typeArg; type = typeArg.IntValue(); if (type != 0 && type != 1) return ParameterError(5); } @@ -50,18 +55,26 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func4 != null) func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func5 != null) func5.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java index 498f157a1..2bedd12e7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java @@ -1,50 +1,55 @@ package toolgood.algorithm.internals.functions.financial; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_6; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * IPMT: 返回在给定期数内对投资的利息偿还�? - * IPMT(rate, per, nper, pv, [fv], [type]) - */ -public class Function_IPMT extends Function_6 { +public final class Function_IPMT extends Function_6 { public Function_IPMT(FunctionBase[] funcs) { super(funcs); } + @Override + public String Name() { + return "IPMT"; + } + @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand rateArg = GetNumber_1(engine, tempParameter); - if (rateArg.IsError()) return rateArg; + if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); Operand perArg = GetNumber_2(engine, tempParameter); - if (perArg.IsError()) return perArg; + if (perArg.IsErrorOrNone()) return perArg; double per = perArg.DoubleValue(); Operand nperArg = GetNumber_3(engine, tempParameter); - if (nperArg.IsError()) return nperArg; + if (nperArg.IsErrorOrNone()) return nperArg; double nper = nperArg.DoubleValue(); Operand pvArg = GetNumber_4(engine, tempParameter); - if (pvArg.IsError()) return pvArg; + if (pvArg.IsErrorOrNone()) return pvArg; double pv = pvArg.DoubleValue(); double fv = 0; if (func5 != null) { Operand fvArg = GetNumber_5(engine, tempParameter); - if (fvArg.IsError()) return fvArg; + if (fvArg.IsErrorOrNone()) return fvArg; fv = fvArg.DoubleValue(); } int type = 0; if (func6 != null) { Operand typeArg = GetNumber_6(engine, tempParameter); - if (typeArg.IsError()) return typeArg; + if (typeArg.IsErrorOrNone()) return typeArg; type = typeArg.IntValue(); if (type != 0 && type != 1) return ParameterError(6); } @@ -74,7 +79,18 @@ private double calculatePMT(double rate, double nper, double pv, double fv, int } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IPMT"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func5 != null) func5.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func6 != null) func6.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IRR.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IRR.java index 0d6b4556f..3a71054e7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IRR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IRR.java @@ -6,22 +6,26 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * IRR: 返回一组现金流的内部收益率 - * IRR(values, [guess]) - */ -public class Function_IRR extends Function_2 { - public Function_IRR(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_IRR extends Function_2 { + public Function_IRR(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "IRR"; } @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand valuesArg = GetArray_1(engine, tempParameter); - if (valuesArg.IsError()) return valuesArg; + if (valuesArg.IsErrorOrNone()) return valuesArg; List values = new ArrayList<>(); for (Operand v : valuesArg.ArrayValue()) { @@ -29,7 +33,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction values, double guess) { } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IRR"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + if (func2 != null) func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_MIRR.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_MIRR.java index 72ee8f26d..da5dbc944 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_MIRR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_MIRR.java @@ -6,34 +6,38 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * MIRR: 返回一组定期现金流的修正内部收益率 - * MIRR(values, finance_rate, reinvest_rate) - */ -public class Function_MIRR extends Function_3 { - public Function_MIRR(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); +public final class Function_MIRR extends Function_3 { + public Function_MIRR(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "MIRR"; } @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand valuesArg = GetArray_1(engine, tempParameter); - if (valuesArg.IsError()) return valuesArg; + if (valuesArg.IsErrorOrNone()) return valuesArg; List values = new ArrayList<>(); for (Operand v : valuesArg.ArrayValue()) { - values.add(v.IsNumber() ? v.DoubleValue() : 0.0); + values.add(v.DoubleValue()); } Operand financeRateArg = GetNumber_2(engine, tempParameter); - if (financeRateArg.IsError()) return financeRateArg; + if (financeRateArg.IsErrorOrNone()) return financeRateArg; double financeRate = financeRateArg.DoubleValue(); Operand reinvestRateArg = GetNumber_3(engine, tempParameter); - if (reinvestRateArg.IsError()) return reinvestRateArg; + if (reinvestRateArg.IsErrorOrNone()) return reinvestRateArg; double reinvestRate = reinvestRateArg.DoubleValue(); int n = values.size(); @@ -58,7 +62,15 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPER.java index 5d15942ee..1830c750b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPER.java @@ -1,46 +1,51 @@ package toolgood.algorithm.internals.functions.financial; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_5; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * NPER: 基于固定利率及等额分期付款方式,返回某项投资(或贷款)的期数 - * NPER(rate, pmt, pv, [fv], [type]) - */ -public class Function_NPER extends Function_5 { +public final class Function_NPER extends Function_5 { public Function_NPER(FunctionBase[] funcs) { super(funcs); } + @Override + public String Name() { + return "NPER"; + } + @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand rateArg = GetNumber_1(engine, tempParameter); - if (rateArg.IsError()) return rateArg; + if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); Operand pmtArg = GetNumber_2(engine, tempParameter); - if (pmtArg.IsError()) return pmtArg; + if (pmtArg.IsErrorOrNone()) return pmtArg; double pmt = pmtArg.DoubleValue(); Operand pvArg = GetNumber_3(engine, tempParameter); - if (pvArg.IsError()) return pvArg; + if (pvArg.IsErrorOrNone()) return pvArg; double pv = pvArg.DoubleValue(); double fv = 0; if (func4 != null) { Operand fvArg = GetNumber_4(engine, tempParameter); - if (fvArg.IsError()) return fvArg; + if (fvArg.IsErrorOrNone()) return fvArg; fv = fvArg.DoubleValue(); } int type = 0; if (func5 != null) { Operand typeArg = GetNumber_5(engine, tempParameter); - if (typeArg.IsError()) return typeArg; + if (typeArg.IsErrorOrNone()) return typeArg; type = typeArg.IntValue(); } @@ -52,13 +57,27 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func4 != null) func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func5 != null) func5.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java index 4b9804c88..86144231b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java @@ -1,41 +1,61 @@ package toolgood.algorithm.internals.functions.financial; +import java.util.ArrayList; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * NPV: 基于一系列定期的现金流和贴现率,返回一项投资的净现�? - * NPV(rate, value1, value2, ...) - */ -public class Function_NPV extends Function_N { +public final class Function_NPV extends Function_N { public Function_NPV(FunctionBase[] funcs) { super(funcs); } + @Override + public String Name() { + return "NPV"; + } + @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand rateArg = GetNumber(engine, tempParameter, 0); - if (rateArg.IsError()) return rateArg; + if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); + if (rate == -1) { + return Div0Error(); + } - if (rate == -1) return Div0Error(); - - double npv = 0; + List values = new ArrayList<>(); for (int i = 1; i < funcs.length; i++) { Operand arg = GetNumber(engine, tempParameter, i); - if (arg.IsError()) return arg; - npv += arg.DoubleValue() / Math.pow(1 + rate, i); + if (arg.IsErrorOrNone()) return arg; + values.add(arg.DoubleValue()); + } + + double npv = 0; + for (int i = 0; i < values.size(); i++) { + npv += values.get(i) / Math.pow(1 + rate, i + 1); } return Operand.Create(npv); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "NPV"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PMT.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PMT.java index ca600773e..b78e38fe9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PMT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PMT.java @@ -1,33 +1,38 @@ package toolgood.algorithm.internals.functions.financial; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_5; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * PMT: 基于固定利率及等额分期付款方式,返回贷款的每期付款额 - * PMT(rate, nper, pv, [fv], [type]) - */ -public class Function_PMT extends Function_5 { +public final class Function_PMT extends Function_5 { public Function_PMT(FunctionBase[] funcs) { super(funcs); } + @Override + public String Name() { + return "PMT"; + } + @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand rateArg = GetNumber_1(engine, tempParameter); - if (rateArg.IsError()) return rateArg; + if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); Operand nperArg = GetNumber_2(engine, tempParameter); - if (nperArg.IsError()) return nperArg; + if (nperArg.IsErrorOrNone()) return nperArg; double nper = nperArg.DoubleValue(); Operand pvArg = GetNumber_3(engine, tempParameter); - if (pvArg.IsError()) return pvArg; + if (pvArg.IsErrorOrNone()) return pvArg; double pv = pvArg.DoubleValue(); if (nper == 0) return Div0Error(); @@ -35,14 +40,14 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func4 != null) func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func5 != null) func5.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java index c0929a243..0e7a52c8a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java @@ -1,50 +1,55 @@ package toolgood.algorithm.internals.functions.financial; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_6; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * PPMT: 返回在给定期数内对贷款本金的偿还�? - * PPMT(rate, per, nper, pv, [fv], [type]) - */ -public class Function_PPMT extends Function_6 { +public final class Function_PPMT extends Function_6 { public Function_PPMT(FunctionBase[] funcs) { super(funcs); } + @Override + public String Name() { + return "PPMT"; + } + @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand rateArg = GetNumber_1(engine, tempParameter); - if (rateArg.IsError()) return rateArg; + if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); Operand perArg = GetNumber_2(engine, tempParameter); - if (perArg.IsError()) return perArg; + if (perArg.IsErrorOrNone()) return perArg; double per = perArg.DoubleValue(); Operand nperArg = GetNumber_3(engine, tempParameter); - if (nperArg.IsError()) return nperArg; + if (nperArg.IsErrorOrNone()) return nperArg; double nper = nperArg.DoubleValue(); Operand pvArg = GetNumber_4(engine, tempParameter); - if (pvArg.IsError()) return pvArg; + if (pvArg.IsErrorOrNone()) return pvArg; double pv = pvArg.DoubleValue(); double fv = 0; if (func5 != null) { Operand fvArg = GetNumber_5(engine, tempParameter); - if (fvArg.IsError()) return fvArg; + if (fvArg.IsErrorOrNone()) return fvArg; fv = fvArg.DoubleValue(); } int type = 0; if (func6 != null) { Operand typeArg = GetNumber_6(engine, tempParameter); - if (typeArg.IsError()) return typeArg; + if (typeArg.IsErrorOrNone()) return typeArg; type = typeArg.IntValue(); if (type != 0 && type != 1) return ParameterError(6); } @@ -55,24 +60,43 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func5 != null) func5.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func6 != null) func6.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java index 127a863dd..822cf98f6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java @@ -1,46 +1,51 @@ package toolgood.algorithm.internals.functions.financial; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_5; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * PV: 返回投资的现�? - * PV(rate, nper, pmt, [fv], [type]) - */ -public class Function_PV extends Function_5 { +public final class Function_PV extends Function_5 { public Function_PV(FunctionBase[] funcs) { super(funcs); } + @Override + public String Name() { + return "PV"; + } + @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand rateArg = GetNumber_1(engine, tempParameter); - if (rateArg.IsError()) return rateArg; + if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); Operand nperArg = GetNumber_2(engine, tempParameter); - if (nperArg.IsError()) return nperArg; + if (nperArg.IsErrorOrNone()) return nperArg; double nper = nperArg.DoubleValue(); Operand pmtArg = GetNumber_3(engine, tempParameter); - if (pmtArg.IsError()) return pmtArg; + if (pmtArg.IsErrorOrNone()) return pmtArg; double pmt = pmtArg.DoubleValue(); double fv = 0; if (func4 != null) { Operand fvArg = GetNumber_4(engine, tempParameter); - if (fvArg.IsError()) return fvArg; + if (fvArg.IsErrorOrNone()) return fvArg; fv = fvArg.DoubleValue(); } int type = 0; if (func5 != null) { Operand typeArg = GetNumber_5(engine, tempParameter); - if (typeArg.IsError()) return typeArg; + if (typeArg.IsErrorOrNone()) return typeArg; type = typeArg.IntValue(); if (type != 0 && type != 1) return ParameterError(5); } @@ -50,18 +55,26 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func4 != null) func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func5 != null) func5.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java index 3fe4c47b5..504433529 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java @@ -1,33 +1,38 @@ package toolgood.algorithm.internals.functions.financial; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_6; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * RATE: 返回年金的各期利�? - * RATE(nper, pmt, pv, [fv], [type], [guess]) - */ -public class Function_RATE extends Function_6 { +public final class Function_RATE extends Function_6 { public Function_RATE(FunctionBase[] funcs) { super(funcs); } + @Override + public String Name() { + return "RATE"; + } + @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand nperArg = GetNumber_1(engine, tempParameter); - if (nperArg.IsError()) return nperArg; + if (nperArg.IsErrorOrNone()) return nperArg; double nper = nperArg.DoubleValue(); Operand pmtArg = GetNumber_2(engine, tempParameter); - if (pmtArg.IsError()) return pmtArg; + if (pmtArg.IsErrorOrNone()) return pmtArg; double pmt = pmtArg.DoubleValue(); Operand pvArg = GetNumber_3(engine, tempParameter); - if (pvArg.IsError()) return pvArg; + if (pvArg.IsErrorOrNone()) return pvArg; double pv = pvArg.DoubleValue(); if (nper <= 0) return ParameterError(1); @@ -35,14 +40,14 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func4 != null) func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func5 != null) func5.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func6 != null) func6.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java index f9cd2230f..da7600389 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java @@ -1,33 +1,38 @@ package toolgood.algorithm.internals.functions.financial; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * SLN: 返回某项资产在一个期间中的线性折旧�? - * SLN(cost, salvage, life) - */ -public class Function_SLN extends Function_3 { - public Function_SLN(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); +public final class Function_SLN extends Function_3 { + public Function_SLN(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "SLN"; } @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand costArg = GetNumber_1(engine, tempParameter); - if (costArg.IsError()) return costArg; + if (costArg.IsErrorOrNone()) return costArg; double cost = costArg.DoubleValue(); Operand salvageArg = GetNumber_2(engine, tempParameter); - if (salvageArg.IsError()) return salvageArg; + if (salvageArg.IsErrorOrNone()) return salvageArg; double salvage = salvageArg.DoubleValue(); Operand lifeArg = GetNumber_3(engine, tempParameter); - if (lifeArg.IsError()) return lifeArg; + if (lifeArg.IsErrorOrNone()) return lifeArg; double life = lifeArg.DoubleValue(); if (life == 0) return Div0Error(); @@ -36,7 +41,15 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java index fd3ea23ae..b196e3480 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java @@ -1,37 +1,42 @@ package toolgood.algorithm.internals.functions.financial; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_4; +import toolgood.algorithm.internals.functions.NoneEngine; -/** - * SYD: 返回某项资产按年数总和折旧法计算的指定期间的折旧�? - * SYD(cost, salvage, life, period) - */ -public class Function_SYD extends Function_4 { - public Function_SYD(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { - super(func1, func2, func3, func4); +public final class Function_SYD extends Function_4 { + public Function_SYD(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "SYD"; } @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand costArg = GetNumber_1(engine, tempParameter); - if (costArg.IsError()) return costArg; + if (costArg.IsErrorOrNone()) return costArg; double cost = costArg.DoubleValue(); Operand salvageArg = GetNumber_2(engine, tempParameter); - if (salvageArg.IsError()) return salvageArg; + if (salvageArg.IsErrorOrNone()) return salvageArg; double salvage = salvageArg.DoubleValue(); Operand lifeArg = GetNumber_3(engine, tempParameter); - if (lifeArg.IsError()) return lifeArg; + if (lifeArg.IsErrorOrNone()) return lifeArg; double life = lifeArg.DoubleValue(); Operand periodArg = GetNumber_4(engine, tempParameter); - if (periodArg.IsError()) return periodArg; + if (periodArg.IsErrorOrNone()) return periodArg; double period = periodArg.DoubleValue(); if (life == 0) return Div0Error(); @@ -43,7 +48,16 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java index f952ad550..994b214de 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java @@ -6,38 +6,42 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.operands.MyDate; -/** - * XIRR: 返回一组不定期发生的现金流的内部收益率 - * XIRR(values, dates, [guess]) - */ -public class Function_XIRR extends Function_3 { - public Function_XIRR(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); +public final class Function_XIRR extends Function_3 { + public Function_XIRR(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "XIRR"; } @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand valuesArg = GetArray_1(engine, tempParameter); - if (valuesArg.IsError()) return valuesArg; + if (valuesArg.IsErrorOrNone()) return valuesArg; List values = new ArrayList<>(); for (Operand v : valuesArg.ArrayValue()) { - values.add(v.IsNumber() ? v.DoubleValue() : 0.0); + values.add(v.DoubleValue()); } Operand datesArg = GetArray_2(engine, tempParameter); - if (datesArg.IsError()) return datesArg; + if (datesArg.IsErrorOrNone()) return datesArg; List dateMillis = new ArrayList<>(); for (Operand d : datesArg.ArrayValue()) { if (d.IsDate()) { dateMillis.add(d.DateValue().ToDateTime().getMillis()); } else if (d.IsText()) { - MyDate myDate = MyDate.Parse(d.TextValue()); + MyDate myDate = MyDate.parse(d.TextValue()); if (myDate == null) return ParameterError(2); dateMillis.add(myDate.ToDateTime().getMillis()); } else { @@ -50,7 +54,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction values, List dateMillis, dou } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "XIRR"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func2.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + if (func3 != null) func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java index 60770451b..423107b21 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java @@ -6,32 +6,38 @@ import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.operands.MyDate; -/** - * XNPV: 返回一组不定期发生的现金流的净现�? - * XNPV(rate, values, dates) - */ -public class Function_XNPV extends Function_3 { - public Function_XNPV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); +public final class Function_XNPV extends Function_3 { + public Function_XNPV(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "XNPV"; } @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand rateArg = GetNumber_1(engine, tempParameter); - if (rateArg.IsError()) return rateArg; + if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); - if (rate == -1) return Div0Error(); + if (rate == -1) { + return Div0Error(); + } Operand valuesArg = GetArray_2(engine, tempParameter); - if (valuesArg.IsError()) return valuesArg; + if (valuesArg.IsErrorOrNone()) return valuesArg; List values = valuesArg.ArrayValue(); Operand datesArg = GetArray_3(engine, tempParameter); - if (datesArg.IsError()) return datesArg; + if (datesArg.IsErrorOrNone()) return datesArg; List dates = datesArg.ArrayValue(); if (values.size() != dates.size()) return FunctionError(); @@ -43,7 +49,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func3.GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } From d711fdf03f20af7c0c73a2e07e4a5b40df49d6d8 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 10:28:15 +0800 Subject: [PATCH 54/98] fix --- .../internals/functions/flow/Function_IF.java | 59 ++++++++--- .../functions/flow/Function_IFERROR.java | 52 +++++++-- .../functions/flow/Function_IFS.java | 38 +++---- .../functions/flow/Function_ISERROR.java | 46 +++++--- .../functions/flow/Function_ISEVEN.java | 35 ++++-- .../functions/flow/Function_ISLOGICAL.java | 33 ++++-- .../functions/flow/Function_ISNONTEXT.java | 35 ++++-- .../functions/flow/Function_ISNULL.java | 46 +++++--- .../flow/Function_ISNULLOREMPTY.java | 41 ++++--- .../flow/Function_ISNULLORERROR.java | 50 ++++++--- .../flow/Function_ISNULLORWHITESPACE.java | 41 ++++--- .../functions/flow/Function_ISNUMBER.java | 33 ++++-- .../functions/flow/Function_ISODD.java | 35 ++++-- .../functions/flow/Function_ISTEXT.java | 33 ++++-- .../functions/flow/Function_NOT.java | 38 ++++--- .../functions/flow/Function_SWITCH.java | 46 ++++---- .../functions/mathbase/Function_ABS.java | 42 +++++--- .../functions/mathbase/Function_ARABIC.java | 47 ++++---- .../functions/mathbase/Function_CEILING.java | 72 ++++++++----- .../functions/mathbase/Function_COMBIN.java | 74 ++++++++----- .../functions/mathbase/Function_DELTA.java | 53 ++++------ .../functions/mathbase/Function_EVEN.java | 48 ++++++--- .../functions/mathbase/Function_EXP.java | 43 +++++--- .../functions/mathbase/Function_FACT.java | 48 ++++++--- .../mathbase/Function_FACTDOUBLE.java | 46 +++++--- .../functions/mathbase/Function_FIXED.java | 100 ++++++++++-------- .../functions/mathbase/Function_FLOOR.java | 73 ++++++++----- .../functions/mathbase/Function_GCD.java | 56 +++++++--- .../functions/mathbase/Function_GESTEP.java | 53 ++++------ .../functions/mathbase/Function_LCM.java | 56 +++++++--- .../functions/mathbase/Function_LN.java | 46 +++++--- .../functions/mathbase/Function_LOG.java | 75 +++++++++---- .../functions/mathbase/Function_LOG10.java | 34 ++++-- .../functions/mathbase/Function_MROUND.java | 65 +++++++----- .../mathbase/Function_MULTINOMIAL.java | 66 ++++++++---- .../functions/mathbase/Function_ODD.java | 48 ++++++--- .../functions/mathbase/Function_PERMUT.java | 66 ++++++++---- .../functions/mathbase/Function_POWER.java | 66 ++++++++---- .../functions/mathbase/Function_PRODUCT.java | 53 +++++++--- .../mathbase/Function_Percentage.java | 41 ++++--- .../functions/mathbase/Function_QUOTIENT.java | 58 ++++++---- .../functions/mathbase/Function_RAND.java | 24 +++-- .../mathbase/Function_RANDBETWEEN.java | 61 +++++++---- .../functions/mathbase/Function_ROMAN.java | 64 +++++------ .../functions/mathbase/Function_ROUND.java | 65 +++++++----- .../mathbase/Function_ROUNDDOWN.java | 64 +++++++---- .../functions/mathbase/Function_ROUNDUP.java | 68 +++++++----- .../functions/mathbase/Function_SIGN.java | 41 ++++--- .../functions/mathbase/Function_SQRT.java | 45 +++++--- .../functions/mathbase/Function_SQRTPI.java | 45 +++++--- .../functions/mathbase/Function_TRUNC.java | 41 ++++--- 51 files changed, 1669 insertions(+), 939 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java index 1ce55400c..1b0f92431 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java @@ -1,35 +1,60 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_IF extends Function_3 { - public Function_IF(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); +public final class Function_IF extends Function_3 { + public Function_IF(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotBoolean()) { - args1 = args1.ToBoolean("Function '{0}' parameter {1} is error!", "If", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "If"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetBoolean_1(engine, tempParameter); + if(args1.IsErrorOrNone()) { return args1; } if (args1.BooleanValue()) { - return func2.Evaluate(work, tempParameter); + return func2.Evaluate(engine, tempParameter); } if (func3 == null) { - return Operand.FALSE; + return Operand.False; } - return func3.Evaluate(work, tempParameter); + return func3.Evaluate(engine, tempParameter); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IF"); + public OperandType GetResultType() { + if (func2 != null) { + OperandType t = func2.GetResultType(); + if (t != OperandType.NONE) { + return t; + } + } + if (func3 != null) { + return func3.GetResultType(); + } + return OperandType.BOOLEAN; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); + func2.GetParameterTypes(noneEngine, result, OperandType.NONE); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.NONE); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java index 95f6bda19..30a47ce91 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java @@ -1,26 +1,56 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_IFERROR extends Function_3 { + public Function_IFERROR(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "IfError"; + } -public class Function_IFERROR extends Function_3 { - public Function_IFERROR(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return func2.Evaluate(engine, tempParameter); + } + return func3.Evaluate(engine, tempParameter); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { - return func2.Evaluate(work, tempParameter); + public OperandType GetResultType() { + if (func2 != null) { + OperandType t = func2.GetResultType(); + if (t != OperandType.NONE) { + return t; + } + } + if (func3 != null) { + return func3.GetResultType(); } - return func3.Evaluate(work, tempParameter); + return OperandType.NONE; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IfError"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); + func2.GetParameterTypes(noneEngine, result, OperandType.NONE); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.NONE); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java index 0ab4ce233..302831043 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java @@ -11,30 +11,25 @@ import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.NoneEngine; -/** - * IFS 函数:依次检测多个条件,返回第一个为 true 的条件对应的值�? - * 参数格式:IFS(condition1, value1, condition2, value2, ...) - */ -public class Function_IFS extends Function_N { - +public final class Function_IFS extends Function_N { public Function_IFS(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, - BiFunction tempParameter) { + public String Name() { + return "IFS"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { for (int i = 0; i < funcs.length - 1; i += 2) { - Operand condition = funcs[i].Evaluate(work, tempParameter); - if (condition.IsNotBoolean()) { - condition = condition.ToBoolean( - "Function '%s' parameter %d is error!", Name(), i + 1); - } - if (condition.IsError()) { + Operand condition = funcs[i].Evaluate(engine, tempParameter); + if (condition.IsErrorOrNone()) { return condition; } if (condition.BooleanValue()) { - return funcs[i + 1].Evaluate(work, tempParameter); + return funcs[i + 1].Evaluate(engine, tempParameter); } } return FunctionError(); @@ -52,16 +47,11 @@ public OperandType GetResultType() { } @Override - public void GetParameterTypes(NoneEngine noneEngine, List result, - OperandType operandType, String op, String val) { + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { for (int i = 0; i < funcs.length - 1; i += 2) { - funcs[i].GetParameterTypes(noneEngine, result, OperandType.BOOLEAN, op, val); - funcs[i + 1].GetParameterTypes(noneEngine, result, OperandType.NONE, op, val); + funcs[i].GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); + funcs[i + 1].GetParameterTypes(noneEngine, result, OperandType.NONE); } } - - @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IFS"); - } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java index 02f617421..24a599385 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java @@ -1,32 +1,52 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ISERROR extends Function_2 { - public Function_ISERROR(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_ISERROR extends Function_2 { + public Function_ISERROR(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "IsError"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); if (func2 != null) { - if (args1.IsError()) { - return func2.Evaluate(work, tempParameter); + if (args1.IsErrorOrNone()) { + return func2.Evaluate(engine, tempParameter); } return args1; } - if (args1.IsError()) { - return Operand.TRUE; + if (args1.IsErrorOrNone()) { + return Operand.True; } - return Operand.FALSE; + return Operand.False; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IsError"); + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NONE); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java index 61dd18015..3ade70f29 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java @@ -1,28 +1,45 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ISEVEN extends Function_1 { +public final class Function_ISEVEN extends Function_1 { public Function_ISEVEN(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); + public String Name() { + return "IsEven"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsNumber()) { - if (args1.IntValue() % 2 == 0) { - return Operand.TRUE; + if (Math.abs(args1.IntValue()) % 2 == 0) { + return Operand.True; } } - return Operand.FALSE; + return Operand.False; + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IsEven"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java index cb080e958..2f01d5ecf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java @@ -1,26 +1,43 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ISLOGICAL extends Function_1 { +public final class Function_ISLOGICAL extends Function_1 { public Function_ISLOGICAL(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); + public String Name() { + return "IsLogical"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsBoolean()) { - return Operand.TRUE; + return Operand.True; } - return Operand.FALSE; + return Operand.False; + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IsLogical"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java index 97ff820fa..19caecc40 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java @@ -1,26 +1,43 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ISNONTEXT extends Function_1 { +public final class Function_ISNONTEXT extends Function_1 { public Function_ISNONTEXT(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - return Operand.TRUE; + public String Name() { + return "IsNonText"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsText()) { + return Operand.False; } - return Operand.FALSE; + return Operand.True; + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IsNontext"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java index 7a2d91b33..fdc8d2ab5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java @@ -1,38 +1,58 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ISNULL extends Function_2 { - public Function_ISNULL(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_ISNULL extends Function_2 { + public Function_ISNULL(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "IsNull"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); if (func2 != null) { if (args1.IsNull()) { - return func2.Evaluate(work, tempParameter); + return func2.Evaluate(engine, tempParameter); } if (args1.IsText() && args1.TextValue() == null) { - return func2.Evaluate(work, tempParameter); + return func2.Evaluate(engine, tempParameter); } return args1; } if (args1.IsNull()) { - return Operand.TRUE; + return Operand.True; } if (args1.IsText() && args1.TextValue() == null) { - return Operand.TRUE; + return Operand.True; } - return Operand.FALSE; + return Operand.False; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IsNull"); + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NONE); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java index 2191151ef..f852f311d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java @@ -1,32 +1,47 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ISNULLOREMPTY extends Function_1 { +public final class Function_ISNULLOREMPTY extends Function_1 { public Function_ISNULLOREMPTY(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); + public String Name() { + return "IsNullOrEmpty"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsNull()) { - return Operand.TRUE; + return Operand.True; } - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IsNullOrEmpty", 1); - if (args1.IsError()) { - return args1; - } + Operand textArg = ConvertToText(args1, 1); + if (textArg.IsErrorOrNone()) { + return textArg; } - return Operand.Create(args1.TextValue() == null || args1.TextValue().isEmpty()); + return Operand.Create(textArg.TextValue() == null || textArg.TextValue().isEmpty()); + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IsNullOrEmpty"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java index 7957fc865..3a3e2f2bd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java @@ -1,38 +1,58 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ISNULLORERROR extends Function_2 { - public Function_ISNULLORERROR(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_ISNULLORERROR extends Function_2 { + public Function_ISNULLORERROR(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "IsNullOrError"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); if (func2 != null) { - if (args1.IsNull() || args1.IsError()) { - return func2.Evaluate(work, tempParameter); + if (args1.IsNull() || args1.IsErrorOrNone()) { + return func2.Evaluate(engine, tempParameter); } if (args1.IsText() && args1.TextValue() == null) { - return func2.Evaluate(work, tempParameter); + return func2.Evaluate(engine, tempParameter); } return args1; } - if (args1.IsNull() || args1.IsError()) { - return Operand.TRUE; + if (args1.IsNull() || args1.IsErrorOrNone()) { + return Operand.True; } if (args1.IsText() && args1.TextValue() == null) { - return Operand.TRUE; + return Operand.True; } - return Operand.FALSE; + return Operand.False; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IsNullOrError"); + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NONE); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java index 4cfdd891f..b931b5a56 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java @@ -1,32 +1,47 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ISNULLORWHITESPACE extends Function_1 { +public final class Function_ISNULLORWHITESPACE extends Function_1 { public Function_ISNULLORWHITESPACE(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); + public String Name() { + return "IsNullOrWhitespace"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsNull()) { - return Operand.TRUE; + return Operand.True; } - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "IsNullOrWhiteSpace", 1); - if (args1.IsError()) { - return args1; - } + Operand textArg = ConvertToText(args1, 1); + if (textArg.IsErrorOrNone()) { + return textArg; } - return Operand.Create(args1.TextValue() == null || args1.TextValue().trim().isEmpty()); + return Operand.Create(textArg.TextValue() == null || textArg.TextValue().trim().isEmpty()); + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IsNullOrWhiteSpace"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java index b0bf9fed0..56f18fdb7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java @@ -1,26 +1,43 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ISNUMBER extends Function_1 { +public final class Function_ISNUMBER extends Function_1 { public Function_ISNUMBER(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); + public String Name() { + return "IsNumber"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsNumber()) { - return Operand.TRUE; + return Operand.True; } - return Operand.FALSE; + return Operand.False; + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IsNumber"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java index f5fedbec8..b8e44bd3f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java @@ -1,28 +1,45 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ISODD extends Function_1 { +public final class Function_ISODD extends Function_1 { public Function_ISODD(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); + public String Name() { + return "IsOdd"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsNumber()) { - if (args1.IntValue() % 2 == 1) { - return Operand.TRUE; + if (Math.abs(args1.IntValue()) % 2 == 1) { + return Operand.True; } } - return Operand.FALSE; + return Operand.False; + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IsOdd"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java index 1ea66d676..4f64c82b8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java @@ -1,26 +1,43 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ISTEXT extends Function_1 { +public final class Function_ISTEXT extends Function_1 { public Function_ISTEXT(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); + public String Name() { + return "IsText"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsText()) { - return Operand.TRUE; + return Operand.True; } - return Operand.FALSE; + return Operand.False; + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "IsText"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java index 3e7b9c481..d372dd228 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java @@ -1,29 +1,43 @@ package toolgood.algorithm.internals.functions.flow; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_NOT extends Function_1 { +public final class Function_NOT extends Function_1 { public Function_NOT(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotBoolean()) { - args1 = args1.ToBoolean("Function '{0}' parameter is error!", "Not"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Not"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetBoolean_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - return args1.BooleanValue() ? Operand.FALSE : Operand.TRUE; + return args1.BooleanValue() ? Operand.False : Operand.True; + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Not"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java index e2460a08e..9a61e7298 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.flow; -import java.math.BigDecimal; import java.util.List; import java.util.function.BiFunction; @@ -12,39 +11,39 @@ import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.NoneEngine; -/** - * SWITCH 函数:对表达式求值,与后续候选值逐一比较,返回第一个匹配的结果�? - * 参数格式:SWITCH(expr, val1, result1, val2, result2, ...[, default]) - */ -public class Function_SWITCH extends Function_N { - +public final class Function_SWITCH extends Function_N { public Function_SWITCH(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, - BiFunction tempParameter) { - Operand exprValue = funcs[0].Evaluate(work, tempParameter); - if (exprValue.IsError()) { + public String Name() { + return "Switch"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand exprValue = funcs[0].Evaluate(engine, tempParameter); + if (exprValue.IsErrorOrNone()) { return exprValue; } int i = 1; while (i < funcs.length - 1) { - Operand compareValue = funcs[i].Evaluate(work, tempParameter); - if (compareValue.IsError()) { + Operand compareValue = funcs[i].Evaluate(engine, tempParameter); + if (compareValue.IsErrorOrNone()) { return compareValue; } - if (equalsOperand(exprValue, compareValue)) { - return funcs[i + 1].Evaluate(work, tempParameter); + + if (EqualsOperand(exprValue, compareValue)) { + return funcs[i + 1].Evaluate(engine, tempParameter); } i += 2; } return FunctionError(); } - private boolean equalsOperand(Operand a, Operand b) { + private boolean EqualsOperand(Operand a, Operand b) { if (a.IsNumber() && b.IsNumber()) { return a.NumberValue().compareTo(b.NumberValue()) == 0; } @@ -74,19 +73,14 @@ public OperandType GetResultType() { } @Override - public void GetParameterTypes(NoneEngine noneEngine, List result, - OperandType operandType, String op, String val) { - funcs[0].GetParameterTypes(noneEngine, result, OperandType.NONE, op, val); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.NONE); int i = 1; while (i < funcs.length - 1) { - funcs[i].GetParameterTypes(noneEngine, result, OperandType.NONE, op, val); - funcs[i + 1].GetParameterTypes(noneEngine, result, OperandType.NONE, op, val); + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NONE); + funcs[i + 1].GetParameterTypes(noneEngine, result, OperandType.NONE); i += 2; } } - - @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "SWITCH"); - } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java index 54b98f53c..07f45e209 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java @@ -1,32 +1,44 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ABS extends Function_1 { +public final class Function_ABS extends Function_1 { public Function_ABS(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Abs"); - if (args1.IsError()) { - return args1; - } - } - if (args1.DoubleValue()>=0) { - return args1; + public String Name() { + return "Abs"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - return Operand.Create(-args1.DoubleValue()); + return Operand.Create(args1.NumberValue().abs()); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Abs"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java index 9499fe252..2ac4460df 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java @@ -11,35 +11,30 @@ import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.NoneEngine; -/** - * ARABIC 函数:将罗马数字字符串转换为阿拉伯数字�? - * 参数:ARABIC(text) - */ -public class Function_ARABIC extends Function_1 { - +public final class Function_ARABIC extends Function_1 { public Function_ARABIC(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, - BiFunction tempParameter) { - Operand arg = func1.Evaluate(work, tempParameter); - if (arg.IsNotText()) { - arg = ConvertToText(arg, 1); - if (arg.IsError()) { - return arg; - } - } + public String Name() { + return "ARABIC"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand arg = GetText_1(engine, tempParameter); + if (arg.IsErrorOrNone()) return arg; String text = arg.TextValue().toUpperCase(); - return Operand.Create(romanToArabic(text)); + return Operand.Create(RomanToArabic(text)); } - private int romanToArabic(String roman) { + private int RomanToArabic(String roman) { int result = 0; int prevValue = 0; + for (int i = roman.length() - 1; i >= 0; i--) { - int value = getRomanValue(roman.charAt(i)); + int value = GetRomanValue(roman.charAt(i)); if (value < prevValue) { result -= value; } else { @@ -47,10 +42,11 @@ private int romanToArabic(String roman) { } prevValue = value; } + return result; } - private int getRomanValue(char c) { + private int GetRomanValue(char c) { switch (c) { case 'I': return 1; case 'V': return 5; @@ -59,7 +55,7 @@ private int getRomanValue(char c) { case 'C': return 100; case 'D': return 500; case 'M': return 1000; - default: return 0; + default: return 0; } } @@ -69,13 +65,8 @@ public OperandType GetResultType() { } @Override - public void GetParameterTypes(NoneEngine noneEngine, List result, - OperandType operandType, String op, String val) { - func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, op, val); - } - - @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "ARABIC"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java index 430a27457..5a2ee9013 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java @@ -1,52 +1,68 @@ package toolgood.algorithm.internals.functions.mathbase; -import java.lang.StringBuilder; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_CEILING extends Function_2 { + public Function_CEILING(FunctionBase[] funcs) { + super(funcs); + } -public class Function_CEILING extends Function_2 { - public Function_CEILING(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Ceiling"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Ceiling", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } if (func2 == null) { - return Operand.Create(Math.ceil(args1.DoubleValue())); + BigDecimal d = args1.NumberValue(); + return Operand.Create(d.setScale(0, RoundingMode.CEILING)); } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Ceiling", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - double b = args2.DoubleValue(); - if (b == 0) { - return Operand.Create(0); + BigDecimal b = args2.NumberValue(); + if (b.compareTo(BigDecimal.ZERO) == 0) { + return Operand.Zero; } - if (b < 0) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Ceiling", 2); + if (b.compareTo(BigDecimal.ZERO) < 0) { + return ParameterError(2); } - double a = args1.DoubleValue(); - double d = Math.ceil(a / b) * b; + BigDecimal a = args1.NumberValue(); + BigDecimal d = a.divide(b, 0, RoundingMode.CEILING).multiply(b); return Operand.Create(d); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Ceiling"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java index d492ab527..4d94d8a19 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java @@ -1,48 +1,70 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_COMBIN extends Function_2 { - public Function_COMBIN(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_COMBIN extends Function_2 { + public Function_COMBIN(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Combin", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Combin"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Combin", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } int total = args1.IntValue(); int count = args2.IntValue(); - if (total < 0 || count < 0 || total < count) { - return Operand.Error("Function '{0}' parameter is error!", "Combin"); + if (total < 0) { + return ParameterError(1); } - double sum = 1; - double sum2 = 1; + if (count < 0) { + return ParameterError(2); + } + if (total < count) { + return ParameterError(2); + } + + BigDecimal sum = BigDecimal.ONE; + BigDecimal sum2 = BigDecimal.ONE; for (int i = 0; i < count; i++) { - sum *= (total - i); - sum2 *= (i + 1); + sum = sum.multiply(BigDecimal.valueOf(total - i)); + sum2 = sum2.multiply(BigDecimal.valueOf(i + 1)); } - return Operand.Create(sum / sum2); + return Operand.Create(sum.divide(sum2, RoundingMode.HALF_EVEN)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Combin"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java index 787d503d9..f7ba95d65 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java @@ -12,39 +12,31 @@ import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.NoneEngine; -/** - * DELTA 函数:若两数相等返回 1,否则返�?0。第二参数省略时默认�?0�? - * 参数:DELTA(number1 [, number2]) - */ -public class Function_DELTA extends Function_2 { +public final class Function_DELTA extends Function_2 { + public Function_DELTA(FunctionBase[] funcs) { + super(funcs); + } - public Function_DELTA(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Delta"; } @Override - public Operand Evaluate(AlgorithmEngine work, - BiFunction tempParameter) { - if (func1 == null) { - return ParameterError(1); - } - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = ConvertToNumber(args1, 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (func1 == null) return ParameterError(1); + + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } BigDecimal num1 = args1.NumberValue(); BigDecimal num2 = BigDecimal.ZERO; if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = ConvertToNumber(args2, 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } num2 = args2.NumberValue(); } @@ -58,16 +50,11 @@ public OperandType GetResultType() { } @Override - public void GetParameterTypes(NoneEngine noneEngine, List result, - OperandType operandType, String op, String val) { - func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); if (func2 != null) { - func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } - - @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "DELTA"); - } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java index 1768f9da7..8caa3237e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java @@ -1,40 +1,54 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; - +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_EVEN extends Function_1 { +public final class Function_EVEN extends Function_1 { public Function_EVEN(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Even"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Even"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - double z = args1.DoubleValue(); - if (z % 2 == 0) { + BigDecimal z = args1.NumberValue(); + if (z.remainder(BigDecimal.valueOf(2)).compareTo(BigDecimal.ZERO) == 0) { return args1; } - z = Math.ceil(z); - if (z % 2 == 0) { + z = z.setScale(0, RoundingMode.CEILING); + if (z.remainder(BigDecimal.valueOf(2)).compareTo(BigDecimal.ZERO) == 0) { return Operand.Create(z); } - z++; + z = z.add(BigDecimal.ONE); return Operand.Create(z); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Even"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java index beec86098..77bc37ea0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java @@ -1,29 +1,48 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -public class Function_EXP extends Function_1 { +public final class Function_EXP extends Function_1 { public Function_EXP(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Exp"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Exp"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; + } + double z = args1.NumberValue().doubleValue(); + if (z > 700) { + return ParameterError(1); } - return Operand.Create(Math.exp(args1.DoubleValue())); + return Operand.Create(MathEx.Exp(args1.NumberValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Exp"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java index 6026ffcb6..94726dc56 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java @@ -1,41 +1,57 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_FACT extends Function_1 { +public final class Function_FACT extends Function_1 { public Function_FACT(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Fact"); - if (args1.IsError()) { - return args1; - } - } - if (args1.IsError()) { + public String Name() { + return "Fact"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } int z = args1.IntValue(); if (z < 0) { - return Operand.Error("Function '{0}' parameter is error!", "Fact"); + return ParameterError(1); + } + if (z > 170) { + return ParameterError(1); } - double d = 1; + + BigDecimal d = BigDecimal.ONE; for (int i = 1; i <= z; i++) { - d *= i; + d = d.multiply(BigDecimal.valueOf(i)); } return Operand.Create(d); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Fact"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java index 01f0f76ee..c5852d816 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java @@ -1,38 +1,56 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_FACTDOUBLE extends Function_1 { +public final class Function_FACTDOUBLE extends Function_1 { public Function_FACTDOUBLE(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "FactDouble"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "FactDouble"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } int z = args1.IntValue(); if (z < 0) { - return Operand.Error("Function '{0}' parameter is error!", "FactDouble"); + return ParameterError(1); + } + if (z > 300) { + return ParameterError(1); } - double d = 1; + BigDecimal d = BigDecimal.ONE; for (int i = z; i > 0; i -= 2) { - d *= i; + d = d.multiply(BigDecimal.valueOf(i)); } return Operand.Create(d); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "FactDouble"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java index ab7fe1690..67eaa3ae2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java @@ -1,68 +1,82 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.List; +import java.util.Locale; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; -import java.text.DecimalFormat; +public final class Function_FIXED extends Function_3 { + public Function_FIXED(FunctionBase[] funcs) { + super(funcs); + } -public class Function_FIXED extends Function_3 { - public Function_FIXED(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "Fixed"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { int num = 2; if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Fixed", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } num = args2.IntValue(); } - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Fixed", 1); - if (args1.IsError()) { - return args1; - } - } - double value = args1.DoubleValue(); - double factor = Math.pow(10, num); - double s = Math.round(value * factor) / factor; - boolean no = false; + boolean noCommas = false; if (func3 != null) { - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotBoolean()) { - args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "Fixed", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetBoolean_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - no = args3.BooleanValue(); + noCommas = args3.BooleanValue(); } - if (!no) { - DecimalFormat df = new DecimalFormat(); - df.setMinimumFractionDigits(num); - df.setMaximumFractionDigits(num); - df.setGroupingUsed(true); - return Operand.Create(df.format(s)); + + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - DecimalFormat df = new DecimalFormat(); - df.setMinimumFractionDigits(num); - df.setMaximumFractionDigits(num); - df.setGroupingUsed(false); - return Operand.Create(df.format(s)); + + BigDecimal value = args1.NumberValue(); + value = value.setScale(num, RoundingMode.HALF_UP); + + if (noCommas) { + return Operand.Create(value.toPlainString()); + } + + DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US); + DecimalFormat df = new DecimalFormat("#,##0." + (num > 0 ? new String(new char[num]).replace('\0', '0') : ""), symbols); + return Operand.Create(df.format(value)); + } + + @Override + public OperandType GetResultType() { + return OperandType.TEXT; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Fixed"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java index 76d1a02ff..c6be9dcf1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java @@ -1,51 +1,68 @@ package toolgood.algorithm.internals.functions.mathbase; -import java.lang.StringBuilder; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_FLOOR extends Function_2 { - public Function_FLOOR(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_FLOOR extends Function_2 { + public Function_FLOOR(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "Floor"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Floor", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } + if (func2 == null) { - return Operand.Create(Math.floor(args1.DoubleValue())); + BigDecimal d = args1.NumberValue(); + return Operand.Create(d.setScale(0, RoundingMode.FLOOR)); } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Floor", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - double b = args2.DoubleValue(); - if (b >= 1) { - return Operand.Create(args1.IntValue()); + BigDecimal b = args2.NumberValue(); + if (b.compareTo(BigDecimal.ZERO) == 0) { + return Operand.Zero; } - if (b <= 0) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Floor", 2); + if (b.compareTo(BigDecimal.ZERO) < 0) { + return ParameterError(2); } - double a = args1.DoubleValue(); - double d = Math.floor(a / b) * b; + BigDecimal a = args1.NumberValue(); + BigDecimal d = a.divide(b, 0, RoundingMode.FLOOR).multiply(b); return Operand.Create(d); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Floor"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java index a1a941a77..349aaa91e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java @@ -1,41 +1,65 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.internals.functions.FunctionUtil; -import java.util.ArrayList; -import java.util.List; - -public class Function_GCD extends Function_N { +public final class Function_GCD extends Function_N { public Function_GCD(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public String Name() { + return "Gcd"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { List args = new ArrayList<>(funcs.length); for (int i = 0; i < funcs.length; i++) { - Operand aa = funcs[i].Evaluate(work, tempParameter); - if (aa.IsError()) { + Operand aa = GetNumber(engine, tempParameter, i); + if (aa.IsErrorOrNone()) { return aa; } args.add(aa); } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Gcd"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList(args, list); + if (o == false) { + return FunctionError(); + } + + for (int i = 0; i < list.size(); i++) { + if (list.get(i).compareTo(BigDecimal.ZERO) < 0) { + return ParameterError(i + 1); + } } - return Operand.Create(FunctionUtil.F_base_gcd(list)); + return Operand.Create(FunctionUtil.GetGcd(list)); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Gcd"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java index 426eeba98..d36fbc78a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java @@ -12,39 +12,31 @@ import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.NoneEngine; -/** - * GESTEP 函数:若 number >= step 返回 1,否则返�?0。第二参数省略时 step 默认�?0�? - * 参数:GESTEP(number [, step]) - */ -public class Function_GESTEP extends Function_2 { +public final class Function_GESTEP extends Function_2 { + public Function_GESTEP(FunctionBase[] funcs) { + super(funcs); + } - public Function_GESTEP(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "GeStep"; } @Override - public Operand Evaluate(AlgorithmEngine work, - BiFunction tempParameter) { - if (func1 == null) { - return ParameterError(1); - } - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = ConvertToNumber(args1, 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + if (func1 == null) return ParameterError(1); + + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } BigDecimal number = args1.NumberValue(); BigDecimal step = BigDecimal.ZERO; if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = ConvertToNumber(args2, 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } step = args2.NumberValue(); } @@ -58,16 +50,11 @@ public OperandType GetResultType() { } @Override - public void GetParameterTypes(NoneEngine noneEngine, List result, - OperandType operandType, String op, String val) { - func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); if (func2 != null) { - func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } - - @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "GESTEP"); - } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java index 5e2470aee..eb1224405 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java @@ -1,41 +1,65 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.internals.functions.FunctionUtil; -import java.util.ArrayList; -import java.util.List; - -public class Function_LCM extends Function_N { +public final class Function_LCM extends Function_N { public Function_LCM(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public String Name() { + return "Lcm"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { List args = new ArrayList<>(funcs.length); for (int i = 0; i < funcs.length; i++) { - Operand aa = funcs[i].Evaluate(work, tempParameter); - if (aa.IsError()) { + Operand aa = GetNumber(engine, tempParameter, i); + if (aa.IsErrorOrNone()) { return aa; } args.add(aa); } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Lcm"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList(args, list); + if (o == false) { + return FunctionError(); + } + + for (int i = 0; i < list.size(); i++) { + if (list.get(i).compareTo(BigDecimal.ZERO) < 0) { + return ParameterError(i + 1); + } } - return Operand.Create(FunctionUtil.F_base_lcm(list)); + return Operand.Create(FunctionUtil.GetLcm(list)); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Lcm"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java index 31a991394..5a1071468 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java @@ -1,33 +1,49 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -public class Function_LN extends Function_1 { +public final class Function_LN extends Function_1 { public Function_LN(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Ln"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Ln"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - double z = args1.DoubleValue(); - if (z <= 0) { - return Operand.Error("Function '{0}' parameter is error!", "Ln"); + BigDecimal z = args1.NumberValue(); + if (z.compareTo(BigDecimal.ZERO) <= 0) { + return ParameterError(1); } - return Operand.Create(Math.log(z)); + return Operand.Create(MathEx.Log(z)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Ln"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java index 5328ef5b1..b0c8af404 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java @@ -1,41 +1,70 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; + +public final class Function_LOG extends Function_2 { + public Function_LOG(FunctionBase[] funcs) { + super(funcs); + } -public class Function_LOG extends Function_2 { public Function_LOG(FunctionBase func1, FunctionBase func2) { super(func1, func2); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Log", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Log"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Log", 2); - if (args2.IsError()) { - return args2; - } - } - double value = args1.DoubleValue(); - double baseValue = args2.DoubleValue(); - return Operand.Create(Math.log(value) / Math.log(baseValue)); + + BigDecimal z = args1.NumberValue(); + if (z.compareTo(BigDecimal.ZERO) <= 0) { + return ParameterError(1); } - return Operand.Create(Math.log10(args1.DoubleValue())); + + if (func2 == null) { + return Operand.Create(MathEx.Log10(z)); + } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; + } + BigDecimal baseValue = args2.NumberValue(); + if (baseValue.compareTo(BigDecimal.ZERO) <= 0 || baseValue.compareTo(BigDecimal.ONE) == 0) { + return ParameterError(2); + } + return Operand.Create(MathEx.Log(z, baseValue)); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Log"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG10.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG10.java index 01f01ad6d..aa797afd4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG10.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG10.java @@ -1,31 +1,49 @@ package toolgood.algorithm.internals.functions.mathbase; +import java.math.BigDecimal; +import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -public class Function_LOG10 extends Function_1 { +public final class Function_LOG10 extends Function_1 { public Function_LOG10(FunctionBase func1) { super(func1); } + @Override + public String Name() { + return "Log10"; + } + @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsError()) return args1; - - double z = args1.DoubleValue(); - if (z <= 0) { + if (args1.IsErrorOrNone()) { + return args1; + } + BigDecimal z = args1.NumberValue(); + if (z.compareTo(BigDecimal.ZERO) <= 0) { return ParameterError(1); } - return Operand.Create(Math.log10(z)); + return Operand.Create(MathEx.Log10(z)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Log10"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java index a3ff328c1..b94efb963 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java @@ -1,45 +1,58 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_MROUND extends Function_2 { + public Function_MROUND(FunctionBase[] funcs) { + super(funcs); + } -public class Function_MROUND extends Function_2 { - public Function_MROUND(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Mround"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "MRound", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "MRound", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - double a = args2.DoubleValue(); - if (a <= 0) { - return Operand.Error("Function '{0}' parameter {1} is error!", "MRound", 2); + BigDecimal a = args2.NumberValue(); + if (a.compareTo(BigDecimal.ZERO) <= 0) { + return ParameterError(2); } - double b = args1.DoubleValue(); - double quotient = b / a; - double roundedQuotient = Math.round(quotient); - double r = roundedQuotient * a; + BigDecimal b = args1.NumberValue(); + BigDecimal r = b.divide(a, 0, RoundingMode.HALF_UP).multiply(a); return Operand.Create(r); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "MRound"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java index 109066bed..29c5fbd4e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java @@ -1,49 +1,69 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -import java.util.ArrayList; -import java.util.List; - -public class Function_MULTINOMIAL extends Function_N { +public final class Function_MULTINOMIAL extends Function_N { public Function_MULTINOMIAL(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "Multinomial"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Multinomial"); + + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList(args, list); + if (o == false) { + return FunctionError(); } int sum = 0; - int n = 1; + BigDecimal n = BigDecimal.ONE; for (int i = 0; i < list.size(); i++) { - int a = (int) list.get(i).doubleValue(); // 小于等于0 时,�?处理 - n *= FunctionUtil.F_base_Factorial(a); + int a = list.get(i).intValue(); + if (a < 0) { + return ParameterError(i + 1); + } + n = n.multiply(BigDecimal.valueOf(FunctionUtil.GetFactorial(a))); sum += a; } - double r = FunctionUtil.F_base_Factorial(sum) / n; + BigDecimal r = BigDecimal.valueOf(FunctionUtil.GetFactorial(sum)).divide(n, RoundingMode.HALF_UP); return Operand.Create(r); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Multinomial"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + for (FunctionBase item : funcs) { + item.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java index 1de5081af..62aba5789 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java @@ -1,38 +1,54 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ODD extends Function_1 { +public final class Function_ODD extends Function_1 { public Function_ODD(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Odd"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Odd"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - double z = args1.DoubleValue(); - if (z % 2 == 1) { + BigDecimal z = args1.NumberValue(); + if (z.remainder(BigDecimal.valueOf(2)).compareTo(BigDecimal.ONE) == 0) { return args1; } - z = Math.ceil(z); - if (z % 2 == 1) { + z = z.setScale(0, RoundingMode.CEILING); + if (z.remainder(BigDecimal.valueOf(2)).compareTo(BigDecimal.ONE) == 0) { return Operand.Create(z); } - z++; + z = z.add(BigDecimal.ONE); return Operand.Create(z); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Odd"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java index fd95157b2..9a5332f4c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java @@ -1,44 +1,68 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_PERMUT extends Function_2 { - public Function_PERMUT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_PERMUT extends Function_2 { + public Function_PERMUT(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Permut", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Permut"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Permut", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } int total = args1.IntValue(); int count = args2.IntValue(); - double sum = 1; + if (total < 0) { + return ParameterError(1); + } + if (count < 0) { + return ParameterError(2); + } + if (total < count) { + return ParameterError(2); + } + + BigDecimal sum = BigDecimal.ONE; for (int i = 0; i < count; i++) { - sum *= (total - i); + sum = sum.multiply(BigDecimal.valueOf(total - i)); } return Operand.Create(sum); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Permut"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java index 2830b4e3b..bbac2d4cb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java @@ -1,36 +1,62 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.system.MathEx; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_POWER extends Function_2 { + public Function_POWER(FunctionBase[] funcs) { + super(funcs); + } -public class Function_POWER extends Function_2 { - public Function_POWER(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Power"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Power", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Power", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - return Operand.Create(Math.pow(args1.DoubleValue(), args2.DoubleValue())); + + BigDecimal baseValue = args1.NumberValue(); + BigDecimal exponent = args2.NumberValue(); + + if (baseValue.compareTo(BigDecimal.ZERO) == 0 && exponent.compareTo(BigDecimal.ZERO) < 0) { + return Div0Error(); + } + if (baseValue.compareTo(BigDecimal.ZERO) < 0 && exponent.stripTrailingZeros().scale() > 0) { + return ParameterError(1); + } + + return Operand.Create(MathEx.Pow(baseValue, exponent)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Power"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java index 4dc259ca3..500bc1443 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java @@ -1,45 +1,64 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -import java.util.ArrayList; -import java.util.List; - -public class Function_PRODUCT extends Function_N { +public final class Function_PRODUCT extends Function_N { public Function_PRODUCT(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public String Name() { + return "Product"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { List args = new ArrayList<>(funcs.length); for (int i = 0; i < funcs.length; i++) { - Operand aa = funcs[i].Evaluate(work, tempParameter); - if (aa.IsError()) { + Operand aa = GetNumber(engine, tempParameter, i); + if (aa.IsErrorOrNone()) { return aa; } args.add(aa); } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Product"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList(args, list); + if (o == false) { + return FunctionError(); } - double d = 1; - for (double a : list) { - d *= a; + BigDecimal d = BigDecimal.ONE; + for (int i = 0; i < list.size(); i++) { + BigDecimal a = list.get(i); + d = d.multiply(a); } return Operand.Create(d); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Product"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java index df7b70053..3f9f84046 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java @@ -12,12 +12,7 @@ import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.NoneEngine; -/** - * Percentage 函数:将数值除�?100(百分比运算),对应 C# 中的 % 运算符�? - * 参数:number% �?Percentage(number) - */ -public class Function_Percentage extends Function_1 { - +public final class Function_Percentage extends Function_1 { private static final BigDecimal HUNDRED = new BigDecimal("100"); public Function_Percentage(FunctionBase func1) { @@ -25,33 +20,33 @@ public Function_Percentage(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, - BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = ConvertToNumber(args1, 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Percentage"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } return Operand.Create(args1.NumberValue().divide(HUNDRED)); } @Override - public OperandType GetResultType() { - return OperandType.NUMBER; + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + func1.toString(stringBuilder, false); + stringBuilder.append('%'); } @Override - public void GetParameterTypes(NoneEngine noneEngine, List result, - OperandType operandType, String op, String val) { - func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - // 百分比的 toString 格式:原参数后加 %,不加括�? - func1.toString(stringBuilder, false); - stringBuilder.append('%'); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java index 8c7674975..9c7ddc4c2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java @@ -1,40 +1,54 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_QUOTIENT extends Function_2 { + public Function_QUOTIENT(FunctionBase[] funcs) { + super(funcs); + } -public class Function_QUOTIENT extends Function_2 { - public Function_QUOTIENT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Quotient"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Quotient", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Quotient", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - if (args2.DoubleValue() == 0) { - return Operand.Error("Function '{0}' div 0 error!", "Quotient"); + if (args2.NumberValue().compareTo(BigDecimal.ZERO) == 0) { + return Div0Error(); } - return Operand.Create(args1.DoubleValue() / args2.DoubleValue()); + return Operand.Create(args1.NumberValue().divide(args2.NumberValue(), 0, java.math.RoundingMode.DOWN).intValue()); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Quotient"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java index d798f7cce..35982177c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java @@ -1,22 +1,34 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.FunctionBase; import java.util.Random; -public class Function_RAND extends FunctionBase { +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.functions.Function_0; + +public final class Function_RAND extends Function_0 { public Function_RAND() { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public String Name() { + return "Rand"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Random rand = new Random(); return Operand.Create(rand.nextDouble()); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { + public void toString(StringBuilder stringBuilder, boolean addBrackets) { stringBuilder.append("Rand()"); } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java index e5b989270..d1c646c73 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java @@ -1,39 +1,58 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.Random; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -import java.util.Random; +public final class Function_RANDBETWEEN extends Function_2 { + public Function_RANDBETWEEN(FunctionBase[] funcs) { + super(funcs); + } -public class Function_RANDBETWEEN extends Function_2 { - public Function_RANDBETWEEN(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "RandBetween"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RandBetween", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "RandBetween", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; + } + + BigDecimal bottom = args1.NumberValue(); + BigDecimal top = args2.NumberValue(); + if (bottom.compareTo(top) > 0) { + return ParameterError(1); } Random rand = new Random(); - return Operand.Create(rand.nextDouble() * (args2.DoubleValue() - args1.DoubleValue()) + args1.DoubleValue()); + return Operand.Create(BigDecimal.valueOf(rand.nextDouble()).multiply(args2.NumberValue().subtract(args1.NumberValue())).add(args1.NumberValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "RandBetween"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java index 46d963422..8a3b1428f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java @@ -11,32 +11,28 @@ import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.NoneEngine; -/** - * ROMAN 函数:将阿拉伯数字转换为罗马数字字符串�? - * 第二参数 form 保留(兼�?Excel),当前实现仅使用经典形式�? - * 参数:ROMAN(number [, form]) - */ -public class Function_ROMAN extends Function_2 { +public final class Function_ROMAN extends Function_2 { + private static final int[] VALUES = { 1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1 }; + private static final String[] NUMERALS = { "M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I" }; - private static final int[] VALUES = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1}; - private static final String[] NUMERALS = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"}; + public Function_ROMAN(FunctionBase[] funcs) { + super(funcs); + } - public Function_ROMAN(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "ROMAN"; } @Override - public Operand Evaluate(AlgorithmEngine work, - BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { if (func1 == null) { return ParameterError(1); } - Operand numArg = func1.Evaluate(work, tempParameter); - if (numArg.IsNotNumber()) { - numArg = ConvertToNumber(numArg, 1); - if (numArg.IsError()) { - return numArg; - } + + Operand numArg = GetNumber_1(engine, tempParameter); + if (numArg.IsErrorOrNone()) { + return numArg; } int num = numArg.IntValue(); @@ -44,25 +40,23 @@ public Operand Evaluate(AlgorithmEngine work, return Operand.Create(""); } - // form 参数(暂不影响输出,保留读取以兼容调用形式) + int form = 0; if (func2 != null) { - Operand formArg = func2.Evaluate(work, tempParameter); - if (formArg.IsNotNumber()) { - formArg = ConvertToNumber(formArg, 2); - if (formArg.IsError()) { - return formArg; - } + Operand formArg = GetNumber_2(engine, tempParameter); + if (formArg.IsErrorOrNone()) { + return formArg; } - // form 值已读取,可扩展为简化罗马数字逻辑;目前经典形式已足够 + form = formArg.IntValue(); } - return Operand.Create(arabicToRoman(num)); + return Operand.Create(arabicToRoman(num, form)); } - private String arabicToRoman(int num) { + private String arabicToRoman(int num, int form) { if (num == 0) { return ""; } + StringBuilder sb = new StringBuilder(16); for (int i = 0; i < VALUES.length; i++) { while (num >= VALUES[i]) { @@ -70,6 +64,7 @@ private String arabicToRoman(int num) { num -= VALUES[i]; } } + return sb.toString(); } @@ -79,16 +74,11 @@ public OperandType GetResultType() { } @Override - public void GetParameterTypes(NoneEngine noneEngine, List result, - OperandType operandType, String op, String val) { - func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); if (func2 != null) { - func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, op, val); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } - - @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "ROMAN"); - } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java index bfe8e569c..825900d81 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java @@ -1,44 +1,59 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ROUND extends Function_2 { - public Function_ROUND(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_ROUND extends Function_2 { + public Function_ROUND(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "Round"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Round", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } if (func2 == null) { - return Operand.Create(Math.round(args1.DoubleValue())); + return Operand.Create(args1.NumberValue().setScale(0, RoundingMode.HALF_UP)); } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Round", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - int decimalPlaces = args2.IntValue(); - double value = args1.DoubleValue(); - double factor = Math.pow(10, decimalPlaces); - double roundedValue = Math.round(value * factor) / factor; - return Operand.Create(roundedValue); + if (args2.IntValue() < -15 || args2.IntValue() > 15) { + return ParameterError(2); + } + return Operand.Create(args1.NumberValue().setScale(args2.IntValue(), RoundingMode.HALF_UP)); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Round"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java index 208d6bfba..707e93831 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java @@ -1,43 +1,61 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.system.MathEx; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ROUNDDOWN extends Function_2 { - public Function_ROUNDDOWN(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_ROUNDDOWN extends Function_2 { + public Function_ROUNDDOWN(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "RoundDown"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RoundDown", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; + } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "RoundDown", 2); - if (args2.IsError()) { - return args2; - } + if (args2.IntValue() < -15 || args2.IntValue() > 15) { + return ParameterError(2); } - if (args1.DoubleValue() == 0.0) { + if (args1.NumberValue().compareTo(BigDecimal.ZERO) == 0) { return args1; } - double a = Math.pow(10, args2.IntValue()); - double b = args1.DoubleValue(); + BigDecimal a = MathEx.Pow(BigDecimal.TEN, args2.IntValue()); + BigDecimal b = args1.NumberValue(); - b = (Math.floor(b * a)) / a; + b = new BigDecimal(b.multiply(a).toBigInteger()).divide(a); return Operand.Create(b); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "RoundDown"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java index e0780c1cd..ea6d2eb11 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java @@ -1,46 +1,64 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.system.MathEx; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ROUNDUP extends Function_2 { - public Function_ROUNDUP(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_ROUNDUP extends Function_2 { + public Function_ROUNDUP(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "RoundUp"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "RoundUp", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; + } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "RoundUp", 2); - if (args2.IsError()) { - return args2; - } + if (args2.IntValue() < -15 || args2.IntValue() > 15) { + return ParameterError(2); } - if (args1.DoubleValue() == 0.0) { + if (args1.NumberValue().compareTo(BigDecimal.ZERO) == 0) { return args1; } - double a = Math.pow(10, args2.IntValue()); - double b = args1.DoubleValue(); + BigDecimal a = MathEx.Pow(BigDecimal.TEN, args2.NumberValue()); + BigDecimal b = args1.NumberValue(); - double t = Math.ceil(Math.abs(b) * a) / a; - if (b > 0) { + BigDecimal t = b.abs().multiply(a).setScale(0, java.math.RoundingMode.CEILING).divide(a); + if (b.compareTo(BigDecimal.ZERO) > 0) { return Operand.Create(t); } - return Operand.Create(-t); + return Operand.Create(t.negate()); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "RoundUp"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java index 9ea84705b..c4b137acf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java @@ -1,31 +1,44 @@ package toolgood.algorithm.internals.functions.mathbase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SIGN extends Function_1 { +public final class Function_SIGN extends Function_1 { public Function_SIGN(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sign"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Sign"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - double value = args1.DoubleValue(); - int sign = (int) Math.signum(value); - return Operand.Create(sign); + return Operand.Create(args1.NumberValue().signum()); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Sign"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java index ed61a53d2..c8eab435e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java @@ -1,33 +1,48 @@ package toolgood.algorithm.internals.functions.mathbase; -import java.lang.StringBuilder; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.system.MathEx; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SQRT extends Function_1 { +public final class Function_SQRT extends Function_1 { public Function_SQRT(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sqrt"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Sqrt"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - if (args1.DoubleValue() < 0) { - return Operand.Error("Function '{0}' parameter is error!", "Sqrt"); + if (args1.NumberValue().compareTo(BigDecimal.ZERO) < 0) { + return ParameterError(1); } - return Operand.Create(Math.sqrt(args1.DoubleValue())); + return Operand.Create(MathEx.Sqrt(args1.NumberValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Sqrt"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java index b070f533c..675137b51 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java @@ -1,29 +1,48 @@ package toolgood.algorithm.internals.functions.mathbase; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.system.MathEx; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SQRTPI extends Function_1 { +public final class Function_SQRTPI extends Function_1 { public Function_SQRTPI(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "SqrtPI"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "SqrtPi"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; + } + if (args1.NumberValue().compareTo(BigDecimal.ZERO) < 0) { + return ParameterError(1); } - return Operand.Create(Math.sqrt(args1.DoubleValue() * Math.PI)); + return Operand.Create(MathEx.Sqrt(args1.NumberValue().multiply(MathEx.PI))); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "SqrtPI"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java index 3dd406ca4..d42f0899e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java @@ -1,29 +1,44 @@ package toolgood.algorithm.internals.functions.mathbase; +import java.math.BigDecimal; +import java.util.List; +import java.util.function.BiFunction; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_TRUNC extends Function_1 { +public final class Function_TRUNC extends Function_1 { public Function_TRUNC(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Trunc"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Trunc"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - return Operand.Create((int) args1.IntValue()); + return Operand.Create(new BigDecimal(args1.IntValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Trunc"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, + String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } From e1f1a5f4932960c044c8a19134d7442a971825b3 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 10:35:56 +0800 Subject: [PATCH 55/98] fix --- .../internals/functions/mathbase/Function_Percentage.java | 3 ++- .../internals/functions/mathbase/Function_ROUNDDOWN.java | 5 +++-- .../internals/functions/mathbase/Function_ROUNDUP.java | 3 ++- 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java index 3f9f84046..5e4f87c50 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java @@ -1,6 +1,7 @@ package toolgood.algorithm.internals.functions.mathbase; import java.math.BigDecimal; +import java.math.MathContext; import java.util.List; import java.util.function.BiFunction; @@ -30,7 +31,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction 0) { return Operand.Create(t); } From 269481c92fc1b2a2c1d70802bd3b3be59366a6e7 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 10:50:05 +0800 Subject: [PATCH 56/98] fix --- .../algorithm/internals/functions/FunctionUtil.java | 8 ++++---- .../internals/functions/mathbase/Function_ABS.java | 1 - .../internals/functions/mathbase/Function_GCD.java | 2 +- .../internals/functions/mathbase/Function_LCM.java | 2 +- .../functions/mathbase/Function_MULTINOMIAL.java | 2 +- .../internals/functions/mathbase/Function_PRODUCT.java | 2 +- .../internals/functions/mathbase/Function_SIGN.java | 1 - .../{mathsum => mathsum2}/Function_BETADIST.java | 2 +- .../functions/{mathsum => mathsum2}/Function_BETAINV.java | 2 +- .../{mathsum => mathsum2}/Function_BINOMDIST.java | 2 +- .../{mathsum => mathsum2}/Function_EXPONDIST.java | 2 +- .../functions/{mathsum => mathsum2}/Function_FDIST.java | 2 +- .../functions/{mathsum => mathsum2}/Function_FINV.java | 2 +- .../functions/{mathsum => mathsum2}/Function_FISHER.java | 2 +- .../{mathsum => mathsum2}/Function_FISHERINV.java | 2 +- .../{mathsum => mathsum2}/Function_GAMMADIST.java | 2 +- .../{mathsum => mathsum2}/Function_GAMMAINV.java | 2 +- .../functions/{mathsum => mathsum2}/Function_GAMMALN.java | 2 +- .../{mathsum => mathsum2}/Function_HYPGEOMDIST.java | 2 +- .../functions/{mathsum => mathsum2}/Function_LOGINV.java | 2 +- .../{mathsum => mathsum2}/Function_LOGNORMDIST.java | 2 +- .../{mathsum => mathsum2}/Function_NEGBINOMDIST.java | 2 +- .../{mathsum => mathsum2}/Function_NORMDIST.java | 2 +- .../functions/{mathsum => mathsum2}/Function_NORMINV.java | 2 +- .../{mathsum => mathsum2}/Function_NORMSDIST.java | 2 +- .../{mathsum => mathsum2}/Function_NORMSINV.java | 2 +- .../functions/{mathsum => mathsum2}/Function_TDIST.java | 2 +- .../functions/{mathsum => mathsum2}/Function_TINV.java | 2 +- .../functions/{mathsum => mathsum2}/Function_WEIBULL.java | 2 +- 29 files changed, 30 insertions(+), 32 deletions(-) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_BETADIST.java (97%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_BETAINV.java (97%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_BINOMDIST.java (97%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_EXPONDIST.java (96%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_FDIST.java (97%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_FINV.java (97%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_FISHER.java (95%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_FISHERINV.java (94%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_GAMMADIST.java (97%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_GAMMAINV.java (97%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_GAMMALN.java (94%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_HYPGEOMDIST.java (97%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_LOGINV.java (96%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_LOGNORMDIST.java (97%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_NEGBINOMDIST.java (97%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_NORMDIST.java (97%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_NORMINV.java (96%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_NORMSDIST.java (94%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_NORMSINV.java (94%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_TDIST.java (97%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_TINV.java (96%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathsum => mathsum2}/Function_WEIBULL.java (97%) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java index 19a39f362..8e0852f06 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java @@ -60,19 +60,19 @@ private static boolean FlattenToListCore(Operand args, List list, java.ut return true; } - public static boolean FlattenToList(List args, List list) { + public static boolean FlattenToList_Operand(List args, List list) { return FlattenToListCore(args, list, obj -> obj, obj -> obj); } - public static boolean FlattenToList(List args, List list) { + public static boolean FlattenToList_BigDecimal(List args, List list) { return FlattenToListCore(args, list, obj -> obj.IsNumber() ? obj : obj.ToNumber(null), obj -> obj.NumberValue()); } - public static boolean FlattenToList(Operand args, List list) { + public static boolean FlattenToList_Operand_BigDecimal(Operand args, List list) { return FlattenToListCore(args, list, obj -> obj.IsNumber() ? obj : obj.ToNumber(null), obj -> obj.NumberValue()); } - public static boolean FlattenToList(Operand args, List list) { + public static boolean FlattenToList_String(Operand args, List list) { return FlattenToListCore(args, list, obj -> obj.ToText(null), obj -> obj.TextValue()); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java index 07f45e209..5f9b80140 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathbase; -import java.math.BigDecimal; import java.util.List; import java.util.function.BiFunction; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java index 349aaa91e..87eb9cb8c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java @@ -36,7 +36,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction list = new ArrayList<>(); - boolean o = FunctionUtil.FlattenToList(args, list); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); if (o == false) { return FunctionError(); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java index eb1224405..9e46d83f7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java @@ -36,7 +36,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction list = new ArrayList<>(); - boolean o = FunctionUtil.FlattenToList(args, list); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); if (o == false) { return FunctionError(); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java index 29c5fbd4e..4bd26d65d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java @@ -34,7 +34,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction list = new ArrayList<>(); - boolean o = FunctionUtil.FlattenToList(args, list); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); if (o == false) { return FunctionError(); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java index 500bc1443..ddd0016ea 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java @@ -36,7 +36,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction list = new ArrayList<>(); - boolean o = FunctionUtil.FlattenToList(args, list); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); if (o == false) { return FunctionError(); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java index c4b137acf..f3893c92a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathbase; -import java.math.BigDecimal; import java.util.List; import java.util.function.BiFunction; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETADIST.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETADIST.java index b26b2a75b..d6f8cf35f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETADIST.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java index cb8dfad98..ce4e57e68 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BETAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java index 9bfed83d5..d3b1f7b98 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_BINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.internals.functions.Function_4; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java similarity index 96% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java index ac9800347..5d777ab76 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_EXPONDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java index beacb11b3..0a93de537 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java index e279d441a..03e94afa6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java similarity index 95% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java index 0a5d63877..bb3139efa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java similarity index 94% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java index a870f4344..38dc00e8a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FISHERINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMADIST.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMADIST.java index ee50e6c42..c88d2051b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMADIST.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java index ab740fcea..f4357ca6f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java similarity index 94% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java index 4755330af..e671f2894 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GAMMALN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_HYPGEOMDIST.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_HYPGEOMDIST.java index 436d993b9..71b4aaa95 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HYPGEOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_HYPGEOMDIST.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java similarity index 96% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java index 567d20033..a891f6636 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java index ce4cb2452..6154b2214 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LOGNORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java index 777f5023b..90282b247 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NEGBINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java index a8836ad0b..815982e8b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java similarity index 96% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java index e05081061..0b22a3941 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java similarity index 94% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java index a87066715..0f7ca8301 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java similarity index 94% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java index 8843abbf9..84fc7e386 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_NORMSINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java index 79040d083..b592c5068 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java similarity index 96% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java index 2cf338c5b..8e0444b45 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_TINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java similarity index 97% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java index 6fcc1b777..03b5e03cf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_WEIBULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java @@ -1,4 +1,4 @@ -package toolgood.algorithm.internals.functions.mathsum; +package toolgood.algorithm.internals.functions.mathsum2; From 2104e4ee8f1d99387b21b83fb2bc1d0a2b87e136 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 11:09:33 +0800 Subject: [PATCH 57/98] fix --- .../algorithm/internals/CalculateTree.java | 7 +- .../algorithm/internals/ConditionTree.java | 7 +- .../functions/mathsum/Function_AVEDEV.java | 75 +++++++++------ .../functions/mathsum/Function_AVERAGE.java | 68 ++++++++----- .../functions/mathsum/Function_AVERAGEIF.java | 96 +++++++++++-------- .../functions/mathsum/Function_CORREL.java | 24 +++-- .../functions/mathsum/Function_COUNT.java | 58 +++++++---- .../functions/mathsum/Function_COUNTIF.java | 76 ++++++++------- .../functions/mathsum/Function_COVAR.java | 75 +++++++++------ .../mathsum/Function_COVARIANCES.java | 75 +++++++++------ .../functions/mathsum/Function_DEVSQ.java | 74 ++++++++------ .../functions/mathsum/Function_FORECAST.java | 38 ++++---- .../functions/mathsum/Function_GEOMEAN.java | 67 ++++++++----- .../functions/mathsum/Function_HARMEAN.java | 71 ++++++++------ .../functions/mathsum/Function_INTERCEPT.java | 33 +++---- .../functions/mathsum/Function_LARGE.java | 74 ++++++++------ .../functions/mathsum/Function_MAX.java | 64 +++++++++---- .../functions/mathsum/Function_MEDIAN.java | 62 ++++++++---- .../functions/mathsum/Function_MIN.java | 66 +++++++++---- .../functions/mathsum/Function_MODE.java | 83 +++++++++++----- .../functions/mathsum/Function_PEARSON.java | 24 +++-- .../mathsum/Function_PERCENTILE.java | 70 ++++++++------ .../mathsum/Function_PERCENTRANK.java | 84 +++++++++------- .../functions/mathsum/Function_POISSON.java | 71 +++++++------- .../functions/mathsum/Function_QUARTILE.java | 66 +++++++------ .../functions/mathsum/Function_RANK.java | 29 +++--- .../functions/mathsum/Function_SERIESSUM.java | 28 +++--- .../functions/mathsum/Function_SLOPE.java | 30 +++--- .../functions/mathsum/Function_SMALL.java | 81 ++++++++-------- .../functions/mathsum/Function_STDEV.java | 66 ++++++++----- .../functions/mathsum/Function_STDEVP.java | 65 ++++++++----- .../functions/mathsum/Function_SUM.java | 58 +++++++---- .../functions/mathsum/Function_SUMIF.java | 88 +++++++++-------- .../mathsum/Function_SUMPRODUCT.java | 15 +-- .../functions/mathsum/Function_SUMSQ.java | 51 ++++++---- .../functions/mathsum/Function_SUMX2MY2.java | 29 +++--- .../functions/mathsum/Function_SUMX2PY2.java | 29 +++--- .../functions/mathsum/Function_SUMXMY2.java | 25 ++--- .../functions/mathsum/Function_VAR.java | 67 +++++++------ .../functions/mathsum/Function_VARP.java | 68 +++++++------ .../toolgood/algorithm/litJson/JsonData.java | 1 - 41 files changed, 1328 insertions(+), 910 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java b/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java index 8be043981..b8c24d6bf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java +++ b/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java @@ -1,19 +1,18 @@ /** - * 计算�? + * 计算�? */ package toolgood.algorithm.internals; -import java.util.ArrayList; import java.util.List; import toolgood.algorithm.enums.CalculateTreeType; public final class CalculateTree { /** - * 子节�? + * 子节�? */ public List Nodes; /** - * 开始位�? + * 开始位�? */ public int Start; diff --git a/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java b/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java index a580c4181..cb9f1acef 100644 --- a/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java +++ b/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java @@ -1,19 +1,18 @@ /** - * 条件�? + * 条件�? */ package toolgood.algorithm.internals; -import java.util.ArrayList; import java.util.List; import toolgood.algorithm.enums.ConditionTreeType; public final class ConditionTree { /** - * 子节�? + * 子节�? */ public List Nodes; /** - * 开始位�? + * 开始位�? */ public int Start; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java index 47bd5cd1f..d7bc96856 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java @@ -1,48 +1,69 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -public class Function_AVEDEV extends Function_N { +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_AVEDEV extends Function_N { public Function_AVEDEV(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "AveDev"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "AveDev"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); } if (list.size() == 0) { - return Operand.ZERO; + return Operand.Zero; + } + BigDecimal sum = BigDecimal.ZERO; + for (int i = 0; i < list.size(); i++) { + sum = sum.add(list.get(i)); } - double avg = list.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); - double sum = 0; - for (double item : list) { - sum += Math.abs(item - avg); + BigDecimal avg = sum.divide(new BigDecimal(list.size()), java.math.MathContext.DECIMAL128); + BigDecimal sum2 = BigDecimal.ZERO; + for (int i = 0; i < list.size(); i++) { + sum2 = sum2.add(list.get(i).subtract(avg).abs()); } - return Operand.Create(sum / list.size()); + return Operand.Create(sum2.divide(new BigDecimal(list.size()), java.math.MathContext.DECIMAL128)); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "AveDev"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java index b663a4995..8ecd78e8e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java @@ -1,44 +1,64 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -public class Function_AVERAGE extends Function_N { +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_AVERAGE extends Function_N { public Function_AVERAGE(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "Average"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Average"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); } if (list.size() == 0) { - return Operand.ZERO; + return Div0Error(); + } + BigDecimal sum = BigDecimal.ZERO; + for (int i = 0; i < list.size(); i++) { + sum = sum.add(list.get(i)); } - double avg = list.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); - return Operand.Create(avg); + return Operand.Create(sum.divide(new BigDecimal(list.size()), java.math.MathContext.DECIMAL128)); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Average"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java index e014ea6b5..bf6482a88 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java @@ -1,82 +1,98 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.functions.Function_3; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; -import java.util.ArrayList; -import java.util.List; +public final class Function_AVERAGEIF extends Function_3 { + public Function_AVERAGEIF(FunctionBase[] funcs) { + super(funcs); + } -public class Function_AVERAGEIF extends Function_3 { - public Function_AVERAGEIF(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "AverageIf"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetArray_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsError()) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args1, list); - if (!o) { - return Operand.Error("Function '{0}' parameter {1} is error!", "AverageIf", 1); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_Operand_BigDecimal(args1, list); + if (o == false) { + return ParameterError(1); } - List sumdbs; + List sumdbs; if (func3 != null) { - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsError()) { + Operand args3 = GetArray_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { return args3; } sumdbs = new ArrayList<>(); - boolean o2 = FunctionUtil.F_base_GetList(args3, sumdbs); - if (!o2) { - return Operand.Error("Function '{0}' parameter {1} is error!", "AverageIf", 3); + boolean o2 = FunctionUtil.FlattenToList_Operand_BigDecimal(args3, sumdbs); + if (o2 == false) { + return ParameterError(3); } } else { sumdbs = list; } - double sum; + BigDecimal sum; int count; if (args2.IsNumber()) { - count = FunctionUtil.F_base_countif(list, args2.DoubleValue()); - sum = count * args2.DoubleValue(); + count = FunctionUtil.GetCountIf(list, args2.NumberValue()); + sum = new BigDecimal(count).multiply(args2.NumberValue()); } else { + String text = args2.TextValue().trim(); try { - double d = Double.parseDouble(args2.TextValue().trim()); - count = FunctionUtil.F_base_countif(list, d); - sum = FunctionUtil.F_base_sumif(list, d, sumdbs); + BigDecimal d = new BigDecimal(text); + count = FunctionUtil.GetCountIf(list, d); + sum = FunctionUtil.GetSumIf(list, d, sumdbs); } catch (NumberFormatException e) { - String sunif = args2.TextValue().trim(); - FunctionUtil.Pair m2 = FunctionUtil.sumifMatch(sunif); + Object[] m2 = FunctionUtil.ParseSumIfMatch(text); if (m2 != null) { - String operator = m2.getFirst(); - double value = m2.getSecond(); - count = FunctionUtil.F_base_countif(list, operator, value); - sum = FunctionUtil.F_base_sumif(list, operator, value, sumdbs); + count = FunctionUtil.GetCountIf(list, (String) m2[0], (BigDecimal) m2[1]); + sum = FunctionUtil.GetSumIf(list, (String) m2[0], (BigDecimal) m2[1], sumdbs); } else { - return Operand.Error("Function '{0}' parameter {1} is error!", "AverageIf", 2); + return ParameterError(2); } } } if (count == 0) { - return Operand.Error("Function '{0}' div 0 error!", "AverageIf"); + return Div0Error(); } - return Operand.Create(sum / count); + return Operand.Create(sum.divide(new BigDecimal(count), java.math.MathContext.DECIMAL128)); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "AverageIf"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func2.GetParameterTypes(noneEngine, result, OperandType.NONE); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_CORREL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_CORREL.java index eea301552..88211d24e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_CORREL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_CORREL.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -11,9 +10,10 @@ import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.system.MathEx; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_CORREL extends Function_N { +public final class Function_CORREL extends Function_N { public Function_CORREL(FunctionBase[] funcs) { super(funcs); } @@ -24,14 +24,14 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { if (funcs.length < 2) return ParameterError(1); Operand array1Arg = GetArray(engine, tempParameter, 0); - if (array1Arg.IsError()) return array1Arg; + if (array1Arg.IsErrorOrNone()) return array1Arg; Operand array2Arg = GetArray(engine, tempParameter, 1); - if (array2Arg.IsError()) return array2Arg; + if (array2Arg.IsErrorOrNone()) return array2Arg; List xValues = new ArrayList<>(); for (Operand item : array1Arg.ArrayValue()) { @@ -53,8 +53,8 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, String op, String val) { - funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); - funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + funcs[1].GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java index a00886e23..22b609504 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java @@ -1,40 +1,56 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - import java.util.ArrayList; import java.util.List; -public class Function_COUNT extends Function_N { +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_COUNT extends Function_N { public Function_COUNT(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "Count"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Count"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList(args, list); + if (o == false) { + return FunctionError(); } return Operand.Create(list.size()); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Count"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NONE); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java index 9feda9fc4..d976d455e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java @@ -1,55 +1,59 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.functions.Function_2; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -import java.util.ArrayList; -import java.util.List; +public final class Function_COUNTIF extends Function_2 { + public Function_COUNTIF(FunctionBase[] funcs) { + super(funcs); + } -public class Function_COUNTIF extends Function_2 { - public Function_COUNTIF(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "CountIf"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsArray()) { - args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "CountIf", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetArray_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsError()) { + + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args1, list); - if (!o) { - return Operand.Error("Function '{0}' parameter {1} is error!", "CountIf", 1); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList(args1, list); + if (o == false) { + return ParameterError(1); } - int count; if (args2.IsNumber()) { - count = FunctionUtil.F_base_countif(list, args2.NumberValue()); + count = FunctionUtil.GetCountIf(list, args2.NumberValue()); } else { + String text = args2.TextValue().trim(); try { - double d = Double.parseDouble(args2.TextValue().trim()); - count = FunctionUtil.F_base_countif(list, d); + BigDecimal d = new BigDecimal(text); + count = FunctionUtil.GetCountIf(list, d); } catch (NumberFormatException e) { - String sunif = args2.TextValue().trim(); - FunctionUtil.Pair m2 = FunctionUtil.sumifMatch(sunif); + Object[] m2 = FunctionUtil.ParseSumIfMatch(text); if (m2 != null) { - String operator = m2.getFirst(); - double value = m2.getSecond(); - count = FunctionUtil.F_base_countif(list, operator, value); + count = FunctionUtil.GetCountIf(list, (String) m2[0], (BigDecimal) m2[1]); } else { - return Operand.Error("Function '{0}' parameter {1} is error!", "CountIf", 2); + return ParameterError(2); } } } @@ -57,7 +61,13 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func2.GetParameterTypes(noneEngine, result, OperandType.NONE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java index 363ae3480..40c54ecf0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java @@ -1,39 +1,47 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.functions.Function_2; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -import java.util.ArrayList; -import java.util.List; +public final class Function_COVAR extends Function_2 { + public Function_COVAR(FunctionBase[] funcs) { + super(funcs); + } -public class Function_COVAR extends Function_2 { - public Function_COVAR(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Covar"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsError()) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } - - List list1 = new ArrayList<>(); - List list2 = new ArrayList<>(); - boolean o1 = FunctionUtil.F_base_GetList(args1, list1); - boolean o2 = FunctionUtil.F_base_GetList(args2, list2); - if (!o1) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Covar", 1); + List list1 = new ArrayList<>(); + List list2 = new ArrayList<>(); + boolean o1 = FunctionUtil.FlattenToList_Operand_BigDecimal(args1, list1); + boolean o2 = FunctionUtil.FlattenToList_Operand_BigDecimal(args2, list2); + if (o1 == false) { + return ParameterError(1); } - if (!o2) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Covar", 2); + if (o2 == false) { + return ParameterError(2); } if (list1.size() != list2.size()) { return Operand.Error("Function '{0}' parameter's count error!", "Covar"); @@ -42,18 +50,25 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func2.GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java index 170294d45..fb07c9bed 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java @@ -1,39 +1,49 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.functions.Function_2; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -import java.util.ArrayList; -import java.util.List; +public final class Function_COVARIANCES extends Function_2 { + public Function_COVARIANCES(FunctionBase[] funcs) { + super(funcs); + } -public class Function_COVARIANCES extends Function_2 { - public Function_COVARIANCES(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Covariances"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsError()) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } - List list1 = new ArrayList<>(); - List list2 = new ArrayList<>(); - boolean o1 = FunctionUtil.F_base_GetList(args1, list1); - boolean o2 = FunctionUtil.F_base_GetList(args2, list2); - if (!o1) { - return Operand.Error("Function '{0}' parameter {1} is error!", "CovarIanceS", 1); + List list1 = new ArrayList<>(); + List list2 = new ArrayList<>(); + + boolean o1 = FunctionUtil.FlattenToList_Operand_BigDecimal(args1, list1); + boolean o2 = FunctionUtil.FlattenToList_Operand_BigDecimal(args2, list2); + if (o1 == false) { + return ParameterError(1); } - if (!o2) { - return Operand.Error("Function '{0}' parameter {1} is error!", "CovarIanceS", 2); + if (o2 == false) { + return ParameterError(2); } if (list1.size() != list2.size()) { return Operand.Error("Function '{0}' parameter's count error!", "CovarIanceS"); @@ -42,18 +52,25 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func2.GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java index 927840fc8..d62af8125 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java @@ -1,50 +1,66 @@ package toolgood.algorithm.internals.functions.mathsum; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -public class Function_DEVSQ extends Function_N { +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_DEVSQ extends Function_N { public Function_DEVSQ(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "DevSq"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "DevSQ"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); } if (list.size() == 0) { - return Operand.Error("Function '{0}' parameter is error!", "DevSQ"); + return FunctionError(); } - - double avg = list.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); - double sum = 0; - for (double value : list) { - double diff = value - avg; - sum += diff * diff; + BigDecimal mean = BigDecimal.ZERO, m2 = BigDecimal.ZERO; + for (int i = 0; i < list.size(); i++) { + BigDecimal delta = list.get(i).subtract(mean); + mean = mean.add(delta.divide(new BigDecimal(i + 1), java.math.MathContext.DECIMAL128)); + m2 = m2.add(delta.multiply(list.get(i).subtract(mean))); } - return Operand.Create(sum); + return Operand.Create(m2); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "DevSQ"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FORECAST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FORECAST.java index 9e507e1dd..b2ca28187 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FORECAST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FORECAST.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -13,7 +12,7 @@ import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_FORECAST extends Function_N { +public final class Function_FORECAST extends Function_N { public Function_FORECAST(FunctionBase[] funcs) { super(funcs); } @@ -24,18 +23,18 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { if (funcs.length < 3) return ParameterError(1); Operand xArg = GetNumber(engine, tempParameter, 0); - if (xArg.IsError()) return xArg; + if (xArg.IsErrorOrNone()) return xArg; BigDecimal x = xArg.NumberValue(); Operand yArrayArg = GetArray(engine, tempParameter, 1); - if (yArrayArg.IsError()) return yArrayArg; + if (yArrayArg.IsErrorOrNone()) return yArrayArg; Operand xArrayArg = GetArray(engine, tempParameter, 2); - if (xArrayArg.IsError()) return xArrayArg; + if (xArrayArg.IsErrorOrNone()) return xArrayArg; List yValues = new ArrayList<>(); for (Operand item : yArrayArg.ArrayValue()) { @@ -49,8 +48,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, String op, String val) { - funcs[0].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); - funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); - funcs[2].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + funcs[1].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + funcs[2].GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java index 704879ea6..c7bd3f84b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java @@ -1,50 +1,69 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.system.MathEx; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_GEOMEAN extends Function_N { +public final class Function_GEOMEAN extends Function_N { public Function_GEOMEAN(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "GeoMean"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "GeoMean"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return ParameterError(1); } - if (list.isEmpty()) { - return Operand.Error("Function '{0}' parameter is error!", "GeoMean"); + if (list.size() == 0) { + return ParameterError(1); } - double product = 1.0; - for (double num : list) { - if (num <= 0) { - return Operand.Error("Function '{0}' parameter is error!", "GeoMean"); + BigDecimal product = BigDecimal.ONE; + for (int i = 0; i < list.size(); i++) { + if (list.get(i).compareTo(BigDecimal.ZERO) <= 0) { + return ParameterError(1); } - product *= num; + product = product.multiply(list.get(i)); } - double geoMean = Math.pow(product, 1.0 / list.size()); + BigDecimal geoMean = MathEx.Pow(product, BigDecimal.ONE.divide(new BigDecimal(list.size()), java.math.MathContext.DECIMAL128)); return Operand.Create(geoMean); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "GeoMean"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java index d5aea440f..5e239537d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java @@ -1,54 +1,71 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_HARMEAN extends Function_N { +public final class Function_HARMEAN extends Function_N { public Function_HARMEAN(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } + public String Name() { + return "HarMean"; + } - if (args.size() == 1) { - return args.get(0); + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "HarMean"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); + } + if (list.size() == 0) { + return FunctionError(); } - double sum = 0; - for (double db : list) { - if (db == 0) { - return Operand.Error("Function '{0}' parameter is error!", "HarMean"); + BigDecimal sum = BigDecimal.ZERO; + for (int i = 0; i < list.size(); i++) { + if (list.get(i).compareTo(BigDecimal.ZERO) == 0) { + return FunctionError(); } - sum += 1 / db; + sum = sum.add(BigDecimal.ONE.divide(list.get(i), java.math.MathContext.DECIMAL128)); } - if (sum == 0) { - return Operand.Error("Function '{0}' parameter is error!", "HarMean"); + if (sum.compareTo(BigDecimal.ZERO) == 0) { + return FunctionError(); } - return Operand.Create(list.size() / sum); + return Operand.Create(new BigDecimal(list.size()).divide(sum, java.math.MathContext.DECIMAL128)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "HarMean"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_INTERCEPT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_INTERCEPT.java index 7b0ea1982..ae11cbdff 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_INTERCEPT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_INTERCEPT.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -13,7 +12,7 @@ import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_INTERCEPT extends Function_N { +public final class Function_INTERCEPT extends Function_N { public Function_INTERCEPT(FunctionBase[] funcs) { super(funcs); } @@ -24,14 +23,14 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { if (funcs.length < 2) return ParameterError(1); Operand yArrayArg = GetArray(engine, tempParameter, 0); - if (yArrayArg.IsError()) return yArrayArg; + if (yArrayArg.IsErrorOrNone()) return yArrayArg; Operand xArrayArg = GetArray(engine, tempParameter, 1); - if (xArrayArg.IsError()) return xArrayArg; + if (xArrayArg.IsErrorOrNone()) return xArrayArg; List yValues = new ArrayList<>(); for (Operand item : yArrayArg.ArrayValue()) { @@ -45,8 +44,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, String op, String val) { - funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); - funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + funcs[1].GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java index d2f809e97..bdb88aadc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java @@ -1,52 +1,66 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_LARGE extends Function_2 { - public Function_LARGE(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_LARGE extends Function_2 { + public Function_LARGE(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "Large"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotArray()) { - args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Large", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + args1 = ConvertToArray(args1, 1); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Large", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = func2.Evaluate(engine, tempParameter); + args2 = ConvertToNumber(args2, 2); + if (args2.IsErrorOrNone()) { + return args2; + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_Operand_BigDecimal(args1, list); + if (o == false) { + return ParameterError(1); } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args1, list); - if (!o) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Large", 1); + if (list.size() == 0) { + return ParameterError(1); } - Collections.sort(list, Comparator.reverseOrder()); - int k = args2.IntValue(); - if (k < 1 - work.ExcelIndex || k > list.size() - work.ExcelIndex) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Large", 2); + int k = args2.IntValue() - engine.ExcelIndex; + if (k < 0 || k >= list.size()) { + return ParameterError(2); } - return Operand.Create((double)list.get(k - work.ExcelIndex)); + return Operand.Create(FunctionUtil.QuickSelect(list, k, true)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Large"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java index 22088c8cf..425f7112f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java @@ -1,41 +1,67 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collections; import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_MAX extends Function_N { +public final class Function_MAX extends Function_N { public Function_MAX(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "Max"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Max"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); } + if (list.size() == 0) { + return FunctionError(); + } + + BigDecimal max = list.get(0); + for (int i = 1; i < list.size(); i++) { + if (list.get(i).compareTo(max) > 0) { + max = list.get(i); + } + } + return Operand.Create(max); + } - return Operand.Create((double)Collections.max(list)); + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Max"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java index 703cd3186..c757b3c59 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java @@ -1,46 +1,68 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.Collections; import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_MEDIAN extends Function_N { +public final class Function_MEDIAN extends Function_N { public Function_MEDIAN(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "Median"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Median"); + if (o == false) { + return FunctionError(); } - if (list.isEmpty()) { - return Operand.Error("Function '{0}' parameter is error!", "Median"); + if (list.size() == 0) { + return FunctionError(); } Collections.sort(list); - return Operand.Create((double)list.get(list.size() / 2)); + int mid = list.size() / 2; + if (list.size() % 2 == 0) { + return Operand.Create(list.get(mid - 1).add(list.get(mid)).divide(new BigDecimal(2), java.math.MathContext.DECIMAL128)); + } + return Operand.Create(list.get(mid)); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Median"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java index 151a18434..228fc095c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java @@ -1,43 +1,67 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collections; import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; - - -public class Function_MIN extends Function_N { +public final class Function_MIN extends Function_N { public Function_MIN(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "Min"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Min"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); + } + if (list.size() == 0) { + return FunctionError(); } - return Operand.Create((double)Collections.min(list)); + BigDecimal min = list.get(0); + for (int i = 1; i < list.size(); i++) { + if (list.get(i).compareTo(min) < 0) { + min = list.get(i); + } + } + return Operand.Create(min); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Min"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java index 83b844517..52901143d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java @@ -1,52 +1,83 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_N; -import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; - - -public class Function_MODE extends Function_N { +public final class Function_MODE extends Function_N { public Function_MODE(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "Mode"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Mode"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); + } + if (list.size() == 0) { + return FunctionError(); } - Map dict = new HashMap<>(); - for (double item : list) { - dict.put(item, dict.getOrDefault(item, 0) + 1); + Map dict = new HashMap<>(); + for (int i = 0; i < list.size(); i++) { + BigDecimal key = list.get(i); + if (dict.containsKey(key)) { + dict.put(key, dict.get(key) + 1); + } else { + dict.put(key, 1); + } + } + BigDecimal modeKey = BigDecimal.ZERO; + int maxCount = 1; + for (Map.Entry kvp : dict.entrySet()) { + if (kvp.getValue() > maxCount) { + maxCount = kvp.getValue(); + modeKey = kvp.getKey(); + } } + if (maxCount == 1) { + return FunctionError(); + } + return Operand.Create(modeKey); + } - Map.Entry maxEntry = Collections.max(dict.entrySet(), Comparator.comparingInt(Map.Entry::getValue)); - return Operand.Create((double)maxEntry.getKey()); + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Mode"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PEARSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PEARSON.java index eee251057..8e42f66a7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PEARSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PEARSON.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -11,9 +10,10 @@ import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.system.MathEx; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_PEARSON extends Function_N { +public final class Function_PEARSON extends Function_N { public Function_PEARSON(FunctionBase[] funcs) { super(funcs); } @@ -24,14 +24,14 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { if (funcs.length < 2) return ParameterError(1); Operand array1Arg = GetArray(engine, tempParameter, 0); - if (array1Arg.IsError()) return array1Arg; + if (array1Arg.IsErrorOrNone()) return array1Arg; Operand array2Arg = GetArray(engine, tempParameter, 1); - if (array2Arg.IsError()) return array2Arg; + if (array2Arg.IsErrorOrNone()) return array2Arg; List xValues = new ArrayList<>(); for (Operand item : array1Arg.ArrayValue()) { @@ -53,8 +53,8 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, String op, String val) { - funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); - funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + funcs[1].GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java index 71de8a907..1605107c8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java @@ -1,48 +1,64 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; +public final class Function_PERCENTILE extends Function_2 { + public Function_PERCENTILE(FunctionBase[] funcs) { + super(funcs); + } -public class Function_PERCENTILE extends Function_2 { - public Function_PERCENTILE(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Percentile"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotArray()) { - args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Percentile", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetArray_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Percentile", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; + } + + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_Operand_BigDecimal(args1, list); + if (o == false) { + return ParameterError(1); + } + if (list.size() == 0) { + return ParameterError(1); } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args1, list); - if (!o) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Percentile", 1); + BigDecimal k = args2.NumberValue(); + if (k.compareTo(BigDecimal.ZERO) < 0 || k.compareTo(BigDecimal.ONE) > 0) { + return ParameterError(2); } - double k = args2.DoubleValue(); - double[] array = list.stream().mapToDouble(Double::doubleValue).toArray(); - return Operand.Create(ExcelFunctions.Percentile(array, k)); + return Operand.Create(ExcelFunctions.Percentile(list.toArray(new BigDecimal[0]), k)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Percentile"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java index 381b4463b..c64dfd3b5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java @@ -1,64 +1,78 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; +import java.math.RoundingMode; +import java.util.ArrayList; import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; +public final class Function_PERCENTRANK extends Function_3 { + public Function_PERCENTRANK(FunctionBase[] funcs) { + super(funcs); + } -public class Function_PERCENTRANK extends Function_3 { - public Function_PERCENTRANK(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "PercentRank"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotArray()) { - args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "PercentRank", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetArray_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "PercentRank", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - List list = new java.util.ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args1, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "PercentRank"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_Operand_BigDecimal(args1, list); + if (o == false) { + return ParameterError(1); + } + if (list.size() == 0) { + return ParameterError(1); } - double k = args2.DoubleValue(); - double[] array = list.stream().mapToDouble(Double::doubleValue).toArray(); - double v = ExcelFunctions.PercentRank(array, k); + BigDecimal k = args2.NumberValue(); + BigDecimal v = ExcelFunctions.PercentRank(list.toArray(new BigDecimal[0]), k); int d = 3; if (func3 != null) { - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "PercentRank", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } d = args3.IntValue(); + if (d < 0) { + return ParameterError(3); + } } - return Operand.Create(Math.round(v * Math.pow(10, d)) / Math.pow(10, d)); + return Operand.Create(v.setScale(d, RoundingMode.HALF_UP)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "PercentRank"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java index 4c14a3462..7753311b1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java @@ -1,54 +1,59 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; +import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; +public final class Function_POISSON extends Function_3 { + public Function_POISSON(FunctionBase[] funcs) { + super(funcs); + } -public class Function_POISSON extends Function_3 { - public Function_POISSON(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); + @Override + public String Name() { + return "Poisson"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Poisson", 1); - if (args1.IsError()) { - return args1; - } - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Poisson", 2); - if (args2.IsError()) { - return args2; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) return args1; + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) return args2; + + Operand args3 = GetBoolean_3(engine, tempParameter); + if (args3.IsErrorOrNone()) return args3; + + int k = args1.IntValue(); + if (k < 0) { + return ParameterError(1); } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotBoolean()) { - args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "Poisson", 3); - if (args3.IsError()) { - return args3; - } + BigDecimal lambda = args2.NumberValue(); + if (lambda.compareTo(BigDecimal.ZERO) <= 0) { + return ParameterError(2); } - int k = args1.IntValue(); - double lambda = args2.DoubleValue(); boolean state = args3.BooleanValue(); - if (!(lambda > 0.0)) { - return Operand.Error("Function '{0}' parameter is error!", "Poisson"); - } return Operand.Create(ExcelFunctions.Poisson(k, lambda, state)); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Poisson"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java index cc3f3100f..2114ed8ec 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java @@ -1,55 +1,65 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; +public final class Function_QUARTILE extends Function_2 { + public Function_QUARTILE(FunctionBase[] funcs) { + super(funcs); + } -public class Function_QUARTILE extends Function_2 { - public Function_QUARTILE(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Quartile"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotArray()) { - args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Quartile", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetArray_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Quartile", 2); - if (args2.IsError()) { - return args2; - } + + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - List list = new java.util.ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args1, list); - if (!o) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Quartile", 1); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_Operand_BigDecimal(args1, list); + if (o == false) { + return ParameterError(1); + } + if (list.size() == 0) { + return ParameterError(1); } int quant = args2.IntValue(); if (quant < 0 || quant > 4) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Quartile", 2); + return ParameterError(2); } - double[] array = list.stream().mapToDouble(Double::doubleValue).toArray(); - return Operand.Create(ExcelFunctions.Quartile(array, quant)); + return Operand.Create(ExcelFunctions.Quartile(list.toArray(new BigDecimal[0]), quant)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Quartile"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_RANK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_RANK.java index 50698bc99..26fa6713f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_RANK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_RANK.java @@ -3,18 +3,17 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_RANK extends Function_N { +public final class Function_RANK extends Function_N { public Function_RANK(FunctionBase[] funcs) { super(funcs); } @@ -25,20 +24,20 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { if (funcs.length < 2) return ParameterError(1); Operand numArg = GetNumber(engine, tempParameter, 0); - if (numArg.IsError()) return numArg; + if (numArg.IsErrorOrNone()) return numArg; BigDecimal num = numArg.NumberValue(); Operand arrayArg = GetArray(engine, tempParameter, 1); - if (arrayArg.IsError()) return arrayArg; + if (arrayArg.IsErrorOrNone()) return arrayArg; int order = 0; if (funcs.length > 2) { Operand orderArg = GetNumber(engine, tempParameter, 2); - if (orderArg.IsError()) return orderArg; + if (orderArg.IsErrorOrNone()) return orderArg; order = orderArg.IntValue(); } @@ -49,12 +48,16 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, String op, String val) { - funcs[0].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); - funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + funcs[1].GetParameterTypes(noneEngine, result, OperandType.ARRAY); if (funcs.length > 2) { - funcs[2].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + funcs[2].GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SERIESSUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SERIESSUM.java index dfc9796e8..df0038d47 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SERIESSUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SERIESSUM.java @@ -2,7 +2,6 @@ import java.math.BigDecimal; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -10,9 +9,10 @@ import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.system.MathEx; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SERIESSUM extends Function_N { +public final class Function_SERIESSUM extends Function_N { public Function_SERIESSUM(FunctionBase[] funcs) { super(funcs); } @@ -23,32 +23,30 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { if (funcs.length < 4) return ParameterError(1); Operand xArg = GetNumber(engine, tempParameter, 0); - if (xArg.IsError()) return xArg; + if (xArg.IsErrorOrNone()) return xArg; BigDecimal x = xArg.NumberValue(); Operand nArg = GetNumber(engine, tempParameter, 1); - if (nArg.IsError()) return nArg; + if (nArg.IsErrorOrNone()) return nArg; BigDecimal n = nArg.NumberValue(); Operand mArg = GetNumber(engine, tempParameter, 2); - if (mArg.IsError()) return mArg; + if (mArg.IsErrorOrNone()) return mArg; BigDecimal m = mArg.NumberValue(); Operand coefficientsArg = GetArray(engine, tempParameter, 3); - if (coefficientsArg.IsError()) return coefficientsArg; + if (coefficientsArg.IsErrorOrNone()) return coefficientsArg; BigDecimal result = BigDecimal.ZERO; int i = 0; for (Operand coef : coefficientsArg.ArrayValue()) { if (coef.IsNumber()) { - // power = n + i * m BigDecimal power = n.add(new BigDecimal(i).multiply(m)); - double powD = Math.pow(x.doubleValue(), power.doubleValue()); - result = result.add(coef.NumberValue().multiply(new BigDecimal(powD))); + result = result.add(coef.NumberValue().multiply(MathEx.Pow(x, power))); i++; } } @@ -62,10 +60,10 @@ public OperandType GetResultType() { } @Override - public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { - funcs[0].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); - funcs[1].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); - funcs[2].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); - funcs[3].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + funcs[1].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + funcs[2].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + funcs[3].GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SLOPE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SLOPE.java index ab62358b7..d6b6b31ee 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SLOPE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SLOPE.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -13,7 +12,7 @@ import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SLOPE extends Function_N { +public final class Function_SLOPE extends Function_N { public Function_SLOPE(FunctionBase[] funcs) { super(funcs); } @@ -24,14 +23,14 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { if (funcs.length < 2) return ParameterError(1); Operand yArrayArg = GetArray(engine, tempParameter, 0); - if (yArrayArg.IsError()) return yArrayArg; + if (yArrayArg.IsErrorOrNone()) return yArrayArg; Operand xArrayArg = GetArray(engine, tempParameter, 1); - if (xArrayArg.IsError()) return xArrayArg; + if (xArrayArg.IsErrorOrNone()) return xArrayArg; List yValues = new ArrayList<>(); for (Operand item : yArrayArg.ArrayValue()) { @@ -45,8 +44,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, String op, String val) { - funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); - funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + funcs[1].GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java index 90be78951..caa47ab45 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -1,63 +1,66 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.List; -import java.util.stream.Collectors; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SMALL extends Function_2 { - public Function_SMALL(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_SMALL extends Function_2 { + public Function_SMALL(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotArray()) { - args1 = args1.ToArray("Function '{0}' parameter {1} is error!", "Small", 1); - if (args1.IsError()) { - return args1; - } - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Small", 2); - if (args2.IsError()) { - return args2; - } + public String Name() { + return "Small"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = func1.Evaluate(engine, tempParameter); + args1 = ConvertToArray(args1, 1); + if (args1.IsErrorOrNone()) { + return args1; } - List list = new java.util.ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args1, list); - if (!o) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Small", 1); + Operand args2 = func2.Evaluate(engine, tempParameter); + args2 = ConvertToNumber(args2, 2); + if (args2.IsErrorOrNone()) { + return args2; } - list = list.stream().sorted().collect(Collectors.toList()); - int k = args2.IntValue(); - int excelIndex = 0; // 假设默认Excel索引�? - try { - // 尝试获取ExcelIndex属�? - java.lang.reflect.Field field = work.getClass().getField("ExcelIndex"); - excelIndex = field.getInt(work); - } catch (Exception e) { - // 如果获取失败,使用默认�? + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_Operand_BigDecimal(args1, list); + if (o == false) { + return ParameterError(1); + } + if (list.size() == 0) { + return ParameterError(1); } - if (k < 1 - excelIndex || k > list.size() - excelIndex) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Small", 2); + int k = args2.IntValue() - engine.ExcelIndex; + if (k < 0 || k >= list.size()) { + return ParameterError(2); } - return Operand.Create((double)list.get(k - excelIndex)); + return Operand.Create(FunctionUtil.QuickSelect(list, k, false)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Small"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java index 0edd16991..9658d842d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java @@ -1,50 +1,68 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.system.MathEx; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_STDEV extends Function_N { +public final class Function_STDEV extends Function_N { public Function_STDEV(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "StDev"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Stdev"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); } - if (list.size() == 0) { - return Operand.Error("Function '{0}' parameter is error!", "Stdev"); + if (list.size() <= 1) { + return FunctionError(); } - double avg = list.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); - double sum = 0; + BigDecimal mean = BigDecimal.ZERO, m2 = BigDecimal.ZERO; for (int i = 0; i < list.size(); i++) { - sum += Math.pow(list.get(i) - avg, 2); + BigDecimal delta = list.get(i).subtract(mean); + mean = mean.add(delta.divide(new BigDecimal(i + 1), java.math.MathContext.DECIMAL128)); + m2 = m2.add(delta.multiply(list.get(i).subtract(mean))); } - return Operand.Create(Math.sqrt(sum / (list.size() - 1))); + return Operand.Create(MathEx.Sqrt(m2.divide(new BigDecimal(list.size() - 1), java.math.MathContext.DECIMAL128))); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Stdev"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java index ee4ce67c8..067ef4af0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java @@ -1,50 +1,67 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.system.MathEx; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_STDEVP extends Function_N { +public final class Function_STDEVP extends Function_N { public Function_STDEVP(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "StDevP"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "StdevP"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); } if (list.size() == 0) { - return Operand.Error("Function '{0}' parameter is error!", "StdevP"); + return FunctionError(); } - - double avg = list.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); - double sum = 0; + BigDecimal mean = BigDecimal.ZERO, m2 = BigDecimal.ZERO; for (int i = 0; i < list.size(); i++) { - sum += Math.pow(list.get(i) - avg, 2); + BigDecimal delta = list.get(i).subtract(mean); + mean = mean.add(delta.divide(new BigDecimal(i + 1), java.math.MathContext.DECIMAL128)); + m2 = m2.add(delta.multiply(list.get(i).subtract(mean))); } - return Operand.Create(Math.sqrt(sum / list.size())); + return Operand.Create(MathEx.Sqrt(m2.divide(new BigDecimal(list.size()), java.math.MathContext.DECIMAL128))); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "StdevP"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java index 0cb08867a..9fa8908f2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java @@ -1,43 +1,61 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SUM extends Function_N { +public final class Function_SUM extends Function_N { public Function_SUM(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } + public String Name() { + return "Sum"; + } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Sum"); + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - double sum = list.stream().mapToDouble(Double::doubleValue).sum(); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); + } + BigDecimal sum = BigDecimal.ZERO; + for (int i = 0; i < list.size(); i++) { + sum = sum.add(list.get(i)); + } return Operand.Create(sum); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Sum"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java index 16a133348..99e4e7e37 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java @@ -1,75 +1,74 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; -import toolgood.algorithm.internals.functions.FunctionUtil.Pair; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SUMIF extends Function_3 { - public Function_SUMIF(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); +public final class Function_SUMIF extends Function_3 { + public Function_SUMIF(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { + public String Name() { + return "SumIf"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetArray_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsError()) { + Operand args2 = func2.Evaluate(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args1, list); - if (!o) { - return Operand.Error("Function '{0}' parameter {1} is error!", "SumIf", 1); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_Operand_BigDecimal(args1, list); + if (o == false) { + return ParameterError(1); } - List sumdbs; + List sumdbs; if (func3 != null) { - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsError()) { + Operand args3 = GetArray_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { return args3; } sumdbs = new ArrayList<>(); - boolean o2 = FunctionUtil.F_base_GetList(args3, sumdbs); - if (!o2) { - return Operand.Error("Function '{0}' parameter {1} is error!", "SumIf", 3); + boolean o2 = FunctionUtil.FlattenToList_Operand_BigDecimal(args3, sumdbs); + if (o2 == false) { + return ParameterError(3); } } else { sumdbs = list; } - double sum = 0; + BigDecimal sum; if (args2.IsNumber()) { - // 处理数字条件 - double value = args2.DoubleValue(); - long count = FunctionUtil.F_base_countif(list, value); - sum = count * value; + sum = new BigDecimal(FunctionUtil.GetCountIf(list, args2.NumberValue())).multiply(args2.NumberValue()); } else { - // 处理文本条件 - String textValue = args2.TextValue().trim(); + String text = args2.TextValue().trim(); try { - // 尝试解析为数�? - double d = Double.parseDouble(textValue); - sum = FunctionUtil.F_base_sumif(list, d, sumdbs); + BigDecimal d = new BigDecimal(text); + sum = FunctionUtil.GetSumIf(list, d, sumdbs); } catch (NumberFormatException e) { - // 处理通配符条�? - String sunif = textValue; - Pair matchResult = FunctionUtil.sumifMatch(sunif); - if (matchResult != null) { - sum = FunctionUtil.F_base_sumif(list, matchResult.getFirst(), matchResult.getSecond(), sumdbs); + Object[] m2 = FunctionUtil.ParseSumIfMatch(text); + if (m2 != null) { + sum = FunctionUtil.GetSumIf(list, (String) m2[0], (BigDecimal) m2[1], sumdbs); } else { - return Operand.Error("Function '{0}' parameter {1} is error!", "SumIf", 2); + return ParameterError(2); } } } @@ -77,7 +76,16 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + func2.GetParameterTypes(noneEngine, result, OperandType.NONE); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMPRODUCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMPRODUCT.java index 2a1a16050..80794b043 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMPRODUCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMPRODUCT.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -13,7 +12,7 @@ import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SUMPRODUCT extends Function_N { +public final class Function_SUMPRODUCT extends Function_N { public Function_SUMPRODUCT(FunctionBase[] funcs) { super(funcs); } @@ -24,13 +23,13 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { if (funcs.length < 2) return ParameterError(1); List> arrays = new ArrayList<>(); for (int i = 0; i < funcs.length; i++) { Operand arg = GetArray(engine, tempParameter, i); - if (arg.IsError()) return arg; + if (arg.IsErrorOrNone()) return arg; List list = new ArrayList<>(); for (Operand item : arg.ArrayValue()) { if (item.IsNumber()) { @@ -47,7 +46,9 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, String op, String val) { + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { for (int i = 0; i < funcs.length; i++) { - funcs[i].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + funcs[i].GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java index 1cd22b94c..595399747 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java @@ -1,47 +1,66 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SUMSQ extends Function_N { +public final class Function_SUMSQ extends Function_N { public Function_SUMSQ(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public String Name() { + return "SumSq"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { List args = new ArrayList<>(funcs.length); for (int i = 0; i < funcs.length; i++) { - Operand aa = funcs[i].Evaluate(work, tempParameter); - if (aa.IsError()) { + Operand aa = funcs[i].Evaluate(engine, tempParameter); + if (aa.IsErrorOrNone()) { return aa; } args.add(aa); } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "SumSQ"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); } - double d = 0; + BigDecimal d = BigDecimal.ZERO; for (int i = 0; i < list.size(); i++) { - double a = list.get(i); - d += a * a; + BigDecimal a = list.get(i); + d = d.add(a.multiply(a)); } return Operand.Create(d); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "SumSQ"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2MY2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2MY2.java index e01606a5a..7fd60259a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2MY2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2MY2.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -13,7 +12,7 @@ import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SUMX2MY2 extends Function_N { +public final class Function_SUMX2MY2 extends Function_N { public Function_SUMX2MY2(FunctionBase[] funcs) { super(funcs); } @@ -24,30 +23,32 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { if (funcs.length < 2) return ParameterError(1); Operand arrayXArg = GetArray(engine, tempParameter, 0); - if (arrayXArg.IsError()) return arrayXArg; + if (arrayXArg.IsErrorOrNone()) return arrayXArg; List arrayX = new ArrayList<>(); for (Operand item : arrayXArg.ArrayValue()) { - if (item.IsNumber()) arrayX.add(item.NumberValue()); + if (item.IsNumber()) { + arrayX.add(item.NumberValue()); + } } Operand arrayYArg = GetArray(engine, tempParameter, 1); - if (arrayYArg.IsError()) return arrayYArg; + if (arrayYArg.IsErrorOrNone()) return arrayYArg; List arrayY = new ArrayList<>(); for (Operand item : arrayYArg.ArrayValue()) { - if (item.IsNumber()) arrayY.add(item.NumberValue()); + if (item.IsNumber()) { + arrayY.add(item.NumberValue()); + } } - int minLength = Math.min(arrayX.size(), arrayY.size()); + int minLength = arrayX.size() < arrayY.size() ? arrayX.size() : arrayY.size(); BigDecimal result = BigDecimal.ZERO; for (int i = 0; i < minLength; i++) { - // X² - Y² - result = result.add(arrayX.get(i).multiply(arrayX.get(i))) - .subtract(arrayY.get(i).multiply(arrayY.get(i))); + result = result.add(arrayX.get(i).multiply(arrayX.get(i)).subtract(arrayY.get(i).multiply(arrayY.get(i)))); } return Operand.Create(result); @@ -59,8 +60,8 @@ public OperandType GetResultType() { } @Override - public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { - funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); - funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + funcs[1].GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2PY2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2PY2.java index 734d04c6e..88e0d8215 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2PY2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2PY2.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -13,7 +12,7 @@ import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SUMX2PY2 extends Function_N { +public final class Function_SUMX2PY2 extends Function_N { public Function_SUMX2PY2(FunctionBase[] funcs) { super(funcs); } @@ -24,30 +23,32 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { if (funcs.length < 2) return ParameterError(1); Operand arrayXArg = GetArray(engine, tempParameter, 0); - if (arrayXArg.IsError()) return arrayXArg; + if (arrayXArg.IsErrorOrNone()) return arrayXArg; List arrayX = new ArrayList<>(); for (Operand item : arrayXArg.ArrayValue()) { - if (item.IsNumber()) arrayX.add(item.NumberValue()); + if (item.IsNumber()) { + arrayX.add(item.NumberValue()); + } } Operand arrayYArg = GetArray(engine, tempParameter, 1); - if (arrayYArg.IsError()) return arrayYArg; + if (arrayYArg.IsErrorOrNone()) return arrayYArg; List arrayY = new ArrayList<>(); for (Operand item : arrayYArg.ArrayValue()) { - if (item.IsNumber()) arrayY.add(item.NumberValue()); + if (item.IsNumber()) { + arrayY.add(item.NumberValue()); + } } - int minLength = Math.min(arrayX.size(), arrayY.size()); + int minLength = arrayX.size() < arrayY.size() ? arrayX.size() : arrayY.size(); BigDecimal result = BigDecimal.ZERO; for (int i = 0; i < minLength; i++) { - // X² + Y² - result = result.add(arrayX.get(i).multiply(arrayX.get(i))) - .add(arrayY.get(i).multiply(arrayY.get(i))); + result = result.add(arrayX.get(i).multiply(arrayX.get(i)).add(arrayY.get(i).multiply(arrayY.get(i)))); } return Operand.Create(result); @@ -59,8 +60,8 @@ public OperandType GetResultType() { } @Override - public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { - funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); - funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + funcs[1].GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMXMY2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMXMY2.java index 43e8ae67a..030becda4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMXMY2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMXMY2.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -13,7 +12,7 @@ import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SUMXMY2 extends Function_N { +public final class Function_SUMXMY2 extends Function_N { public Function_SUMXMY2(FunctionBase[] funcs) { super(funcs); } @@ -24,24 +23,28 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { if (funcs.length < 2) return ParameterError(1); Operand arrayXArg = GetArray(engine, tempParameter, 0); - if (arrayXArg.IsError()) return arrayXArg; + if (arrayXArg.IsErrorOrNone()) return arrayXArg; List arrayX = new ArrayList<>(); for (Operand item : arrayXArg.ArrayValue()) { - if (item.IsNumber()) arrayX.add(item.NumberValue()); + if (item.IsNumber()) { + arrayX.add(item.NumberValue()); + } } Operand arrayYArg = GetArray(engine, tempParameter, 1); - if (arrayYArg.IsError()) return arrayYArg; + if (arrayYArg.IsErrorOrNone()) return arrayYArg; List arrayY = new ArrayList<>(); for (Operand item : arrayYArg.ArrayValue()) { - if (item.IsNumber()) arrayY.add(item.NumberValue()); + if (item.IsNumber()) { + arrayY.add(item.NumberValue()); + } } - int minLength = Math.min(arrayX.size(), arrayY.size()); + int minLength = arrayX.size() < arrayY.size() ? arrayX.size() : arrayY.size(); BigDecimal result = BigDecimal.ZERO; for (int i = 0; i < minLength; i++) { @@ -58,8 +61,8 @@ public OperandType GetResultType() { } @Override - public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { - funcs[0].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); - funcs[1].getParameterTypes(noneEngine, result, OperandType.ARRAY, null, null); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + funcs[1].GetParameterTypes(noneEngine, result, OperandType.ARRAY); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java index a33de0b67..3bb58e898 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java @@ -1,57 +1,66 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_VAR extends Function_N { +public final class Function_VAR extends Function_N { public Function_VAR(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } + public String Name() { + return "Var"; + } - if (args.size() == 1) { - return Operand.Error("Function '{0}' parameter only one error!", "Var"); + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "Var"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); } if (list.size() <= 1) { - return Operand.Error("Function '{0}' parameter is error!", "Var"); + return FunctionError(); } - - double sum = 0; - double sum2 = 0; + BigDecimal mean = BigDecimal.ZERO, m2 = BigDecimal.ZERO; for (int i = 0; i < list.size(); i++) { - sum += list.get(i) * list.get(i); - sum2 += list.get(i); + BigDecimal delta = list.get(i).subtract(mean); + mean = mean.add(delta.divide(new BigDecimal(i + 1), java.math.MathContext.DECIMAL128)); + m2 = m2.add(delta.multiply(list.get(i).subtract(mean))); } + return Operand.Create(m2.divide(new BigDecimal(list.size() - 1), java.math.MathContext.DECIMAL128)); + } - double result = (list.size() * sum - sum2 * sum2) / list.size() / (list.size() - 1); - return Operand.Create(result); + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Var"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java index 2ed29a79f..61589485e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java @@ -1,58 +1,66 @@ package toolgood.algorithm.internals.functions.mathsum; +import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_N; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_VARP extends Function_N { +public final class Function_VARP extends Function_N { public Function_VARP(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); - } + public String Name() { + return "VarP"; + } - if (args.size() == 1) { - return Operand.Error("Function '{0}' parameter only one error!", "VarP"); + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } - List list = new ArrayList<>(); - boolean o = FunctionUtil.F_base_GetList(args, list); - if (!o) { - return Operand.Error("Function '{0}' parameter is error!", "VarP"); + List list = new ArrayList<>(); + boolean o = FunctionUtil.FlattenToList_BigDecimal(args, list); + if (o == false) { + return FunctionError(); } if (list.size() == 0) { - return Operand.Error("Function '{0}' parameter is error!", "VarP"); - } - if (list.size() == 1) { - return Operand.ZERO; + return FunctionError(); } - - double avg = list.stream().mapToDouble(Double::doubleValue).average().orElse(0.0); - double sum = 0; + BigDecimal mean = BigDecimal.ZERO, m2 = BigDecimal.ZERO; for (int i = 0; i < list.size(); i++) { - sum += Math.pow(avg - list.get(i), 2); + BigDecimal delta = list.get(i).subtract(mean); + mean = mean.add(delta.divide(new BigDecimal(i + 1), java.math.MathContext.DECIMAL128)); + m2 = m2.add(delta.multiply(list.get(i).subtract(mean))); } + return Operand.Create(m2.divide(new BigDecimal(list.size()), java.math.MathContext.DECIMAL128)); + } - return Operand.Create(sum / list.size()); + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "VarP"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (funcs.length == 1) { + funcs[0].GetParameterTypes(noneEngine, result, OperandType.ARRAY); + } else { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } + } } } diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java index d6f64d4d3..bfd15c10d 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java @@ -1,7 +1,6 @@ package toolgood.algorithm.litJson; import java.math.BigDecimal; -import java.math.RoundingMode; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; From e2598b5361aad698891f89789cbcf003c7e4b966 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 11:16:31 +0800 Subject: [PATCH 58/98] fix --- .../functions/mathsum2/Function_BESSELI.java | 166 +++++---------- .../functions/mathsum2/Function_BESSELJ.java | 150 +++++++------- .../functions/mathsum2/Function_BESSELK.java | 138 +++++++------ .../functions/mathsum2/Function_BESSELY.java | 194 +++++++++--------- .../functions/mathsum2/Function_BETADIST.java | 65 +++--- .../functions/mathsum2/Function_BETAINV.java | 65 +++--- .../mathsum2/Function_BINOMDIST.java | 85 ++++---- .../functions/mathsum2/Function_ERF.java | 39 +--- .../functions/mathsum2/Function_ERFC.java | 44 ++-- .../mathsum2/Function_EXPONDIST.java | 73 ++++--- .../functions/mathsum2/Function_FDIST.java | 67 +++--- .../functions/mathsum2/Function_FINV.java | 65 +++--- .../functions/mathsum2/Function_FISHER.java | 41 ++-- .../mathsum2/Function_FISHERINV.java | 39 ++-- .../mathsum2/Function_GAMMADIST.java | 74 ++++--- .../functions/mathsum2/Function_GAMMAINV.java | 64 +++--- .../functions/mathsum2/Function_GAMMALN.java | 43 ++-- .../mathsum2/Function_HYPGEOMDIST.java | 85 ++++---- .../functions/mathsum2/Function_LOGINV.java | 69 ++++--- .../mathsum2/Function_LOGNORMDIST.java | 69 ++++--- .../mathsum2/Function_NEGBINOMDIST.java | 71 ++++--- .../functions/mathsum2/Function_NORMDIST.java | 84 ++++---- .../functions/mathsum2/Function_NORMINV.java | 73 ++++--- .../mathsum2/Function_NORMSDIST.java | 41 ++-- .../functions/mathsum2/Function_NORMSINV.java | 44 ++-- .../functions/mathsum2/Function_TDIST.java | 64 +++--- .../functions/mathsum2/Function_TINV.java | 57 ++--- .../functions/mathsum2/Function_WEIBULL.java | 82 ++++---- 28 files changed, 1184 insertions(+), 967 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java index 2bb9d8aab..fc17ba1f1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java @@ -1,9 +1,7 @@ package toolgood.algorithm.internals.functions.mathsum2; import java.math.BigDecimal; -import java.math.MathContext; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -11,9 +9,10 @@ import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.MathEx; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_BESSELI extends Function_2 { +public final class Function_BESSELI extends Function_2 { public Function_BESSELI(FunctionBase func1, FunctionBase func2) { super(func1, func2); } @@ -28,59 +27,51 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { - Operand args1 = GetNumber(engine, tempParameter, 0); - if (args1.IsError()) return args1; - - Operand args2 = GetNumber(engine, tempParameter, 1); - if (args2.IsError()) return args2; + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; + } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; + } BigDecimal x = args1.NumberValue(); - int n = (int) args2.DoubleValue(); + int n = args2.IntValue(); - return Operand.Create(besselI(n, x)); + return Operand.Create(BesselI(n, x)); } - private static BigDecimal besselI(int n, BigDecimal x) { - // 处理 x < 0 的情�? + private static BigDecimal BesselI(int n, BigDecimal x) { if (x.compareTo(BigDecimal.ZERO) < 0) { - int sign = (n % 2 == 0) ? 1 : -1; - return besselI(n, x.negate()).multiply(BigDecimal.valueOf(sign)); + return BesselI(n, x.negate()).multiply(n % 2 == 0 ? BigDecimal.ONE : BigDecimal.ONE.negate()); } - // x == 0 的情�? if (x.compareTo(BigDecimal.ZERO) == 0) { - return n == 0 ? BigDecimal.ONE : BigDecimal.ZERO; + return (n == 0) ? BigDecimal.ONE : BigDecimal.ZERO; } BigDecimal ax = x.abs(); - BigDecimal epsilon = new BigDecimal("1e-10"); - if (ax.compareTo(epsilon) < 0) { - return n == 0 ? BigDecimal.ONE : BigDecimal.ZERO; + if (ax.compareTo(new BigDecimal("1e-10")) < 0) { + return (n == 0) ? BigDecimal.ONE : BigDecimal.ZERO; } if (n < 0) n = -n; - // x > 700 时使用近似公�? if (ax.compareTo(new BigDecimal("700")) > 0) { - BigDecimal exp = new BigDecimal(Math.exp(ax.doubleValue())); - BigDecimal sqrtTerm = new BigDecimal(Math.sqrt(2 * Math.PI * ax.doubleValue())); - BigDecimal factor = exp.divide(sqrtTerm, MathContext.DECIMAL128); - BigDecimal correction = BigDecimal.ONE.subtract( - new BigDecimal("4.0").multiply(new BigDecimal(n * n)).subtract(new BigDecimal("1.0")) - .divide(new BigDecimal("8.0").multiply(ax), MathContext.DECIMAL128) - ); - return factor.multiply(correction); + BigDecimal factor = MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128); + return factor.multiply(BigDecimal.ONE.subtract(new BigDecimal("4").multiply(new BigDecimal(n * n)).subtract(BigDecimal.ONE).divide(new BigDecimal("8").multiply(ax), java.math.MathContext.DECIMAL128))); } - if (n == 0) return besselI0(x); - if (n == 1) return besselI1(x); + if (n == 0) return BesselI0(x); + if (n == 1) return BesselI1(x); - BigDecimal I0 = besselI0(x); - BigDecimal I1 = besselI1(x); + BigDecimal I0 = BesselI0(x); + BigDecimal I1 = BesselI1(x); BigDecimal In = BigDecimal.ZERO; for (int k = 1; k < n; k++) { - In = I1.add(new BigDecimal("2.0").multiply(new BigDecimal(k)).divide(x, MathContext.DECIMAL128).multiply(I0)); + In = I1.add(new BigDecimal("2").multiply(new BigDecimal(k)).divide(x, java.math.MathContext.DECIMAL128).multiply(I0)); I0 = I1; I1 = In; } @@ -88,96 +79,33 @@ private static BigDecimal besselI(int n, BigDecimal x) { return I1; } - private static BigDecimal besselI0(BigDecimal x) { + private static BigDecimal BesselI0(BigDecimal x) { BigDecimal ax = x.abs(); - BigDecimal threePoint75 = new BigDecimal("3.75"); - - if (ax.compareTo(threePoint75) < 0) { - BigDecimal y1 = x.divide(threePoint75, MathContext.DECIMAL128); + if (ax.compareTo(new BigDecimal("3.75")) < 0) { + BigDecimal y1 = x.divide(new BigDecimal("3.75"), java.math.MathContext.DECIMAL128); y1 = y1.multiply(y1); - return BigDecimal.ONE.add(y1.multiply( - new BigDecimal("3.515622965380465").add(y1.multiply( - new BigDecimal("3.089942465562116").add(y1.multiply( - new BigDecimal("1.206749160761352").add(y1.multiply( - new BigDecimal("0.265973256598487").add(y1.multiply( - new BigDecimal("0.036076845538912").add(y1.multiply(new BigDecimal("0.004581327358717"))) - )) - )) - )) - )) - )); + return BigDecimal.ONE.add(y1.multiply(new BigDecimal("3.515622965380465").add(y1.multiply(new BigDecimal("3.089942465562116").add(y1.multiply(new BigDecimal("1.206749160761352") + .add(y1.multiply(new BigDecimal("0.265973256598487").add(y1.multiply(new BigDecimal("0.036076845538912").add(y1.multiply(new BigDecimal("0.004581327358717")))))))))))); } - - BigDecimal y2 = threePoint75.divide(ax, MathContext.DECIMAL128); - BigDecimal exp = new BigDecimal(Math.exp(ax.doubleValue())); - BigDecimal sqrtTerm = new BigDecimal(Math.sqrt(2.0 * Math.PI * ax.doubleValue())); - BigDecimal factor = exp.divide(sqrtTerm, MathContext.DECIMAL128); - - return factor.multiply( - new BigDecimal("0.398942280401433").add(y2.multiply( - new BigDecimal("0.013285921344730").add(y2.multiply( - new BigDecimal("0.002253193626842").add(y2.multiply( - new BigDecimal("-0.001575649875251").add(y2.multiply( - new BigDecimal("0.009162816703917").add(y2.multiply( - new BigDecimal("-0.020577062932649").add(y2.multiply( - new BigDecimal("0.026355373177924").add(y2.multiply( - new BigDecimal("-0.016476329612910").add(y2.multiply(new BigDecimal("0.003923769605236"))) - )) - )) - )) - )) - )) - )) - )) - ); + BigDecimal y2 = new BigDecimal("3.75").divide(ax, java.math.MathContext.DECIMAL128); + return MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128).multiply(new BigDecimal("0.398942280401433").add(y2.multiply(new BigDecimal("0.013285921344730") + .add(y2.multiply(new BigDecimal("0.002253193626842").add(y2.multiply(new BigDecimal("-0.001575649875251").add(y2.multiply(new BigDecimal("0.009162816703917") + .add(y2.multiply(new BigDecimal("-0.020577062932649").add(y2.multiply(new BigDecimal("0.026355373177924").add(y2.multiply(new BigDecimal("-0.016476329612910").add(y2.multiply(new BigDecimal("0.003923769605236")))))))))))))))); } - private static BigDecimal besselI1(BigDecimal x) { + private static BigDecimal BesselI1(BigDecimal x) { BigDecimal ax = x.abs(); - BigDecimal threePoint75 = new BigDecimal("3.75"); - - if (ax.compareTo(threePoint75) < 0) { - BigDecimal y1 = x.divide(threePoint75, MathContext.DECIMAL128); + if (ax.compareTo(new BigDecimal("3.75")) < 0) { + BigDecimal y1 = x.divide(new BigDecimal("3.75"), java.math.MathContext.DECIMAL128); y1 = y1.multiply(y1); - return x.multiply( - new BigDecimal("0.5").add(y1.multiply( - new BigDecimal("0.878905941521392").add(y1.multiply( - new BigDecimal("0.514988692842374").add(y1.multiply( - new BigDecimal("0.150849342225664").add(y1.multiply( - new BigDecimal("0.026587328231117").add(y1.multiply( - new BigDecimal("0.003015319414231").add(y1.multiply(new BigDecimal("0.000324111013968"))) - )) - )) - )) - )) - )) - ); + return x.multiply(new BigDecimal("0.5").add(y1.multiply(new BigDecimal("0.878905941521392").add(y1.multiply(new BigDecimal("0.514988692842374").add(y1.multiply(new BigDecimal("0.150849342225664") + .add(y1.multiply(new BigDecimal("0.026587328231117").add(y1.multiply(new BigDecimal("0.003015319414231").add(y1.multiply(new BigDecimal("0.000324111013968")))))))))))); } - - BigDecimal y2 = threePoint75.divide(ax, MathContext.DECIMAL128); - BigDecimal exp = new BigDecimal(Math.exp(ax.doubleValue())); - BigDecimal sqrtTerm = new BigDecimal(Math.sqrt(2.0 * Math.PI * ax.doubleValue())); - BigDecimal factor = exp.divide(sqrtTerm, MathContext.DECIMAL128); - - BigDecimal ans = factor.multiply( - new BigDecimal("0.398942280401433").add(y2.multiply( - new BigDecimal("-0.039880242337502").add(y2.multiply( - new BigDecimal("-0.003620182649157").add(y2.multiply( - new BigDecimal("0.001638105403528").add(y2.multiply( - new BigDecimal("-0.010315550635288").add(y2.multiply( - new BigDecimal("0.022829679456897").add(y2.multiply( - new BigDecimal("-0.028953129286367").add(y2.multiply( - new BigDecimal("0.017876545768998").subtract(y2.multiply(new BigDecimal("0.004200596567986"))) - )) - )) - )) - )) - )) - )) - )) - ); - - return x.compareTo(BigDecimal.ZERO) < 0 ? ans.negate() : ans; + BigDecimal y2 = new BigDecimal("3.75").divide(ax, java.math.MathContext.DECIMAL128); + BigDecimal ans = MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128).multiply(new BigDecimal("0.398942280401433").add(y2.multiply(new BigDecimal("-0.039880242337502") + .add(y2.multiply(new BigDecimal("-0.003620182649157").add(y2.multiply(new BigDecimal("0.001638105403528").add(y2.multiply(new BigDecimal("-0.010315550635288") + .add(y2.multiply(new BigDecimal("0.022829679456897").add(y2.multiply(new BigDecimal("-0.028953129286367").add(y2.multiply(new BigDecimal("0.017876545768998").subtract(y2.multiply(new BigDecimal("0.004200596567986")))))))))))))))); + return (x.compareTo(BigDecimal.ZERO) < 0) ? ans.negate() : ans; } @Override @@ -186,8 +114,8 @@ public OperandType GetResultType() { } @Override - public void getParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { - funcs[0].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); - funcs[1].getParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java index 04cf2faf5..5287097e9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -9,53 +9,62 @@ import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.MathEx; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_BESSELJ extends Function_2 { +public final class Function_BESSELJ extends Function_2 { public Function_BESSELJ(FunctionBase func1, FunctionBase func2) { super(func1, func2); } + public Function_BESSELJ(FunctionBase[] funcs) { + super(funcs); + } + @Override public String Name() { return "BesselJ"; } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsError()) return args1; - + if (args1.IsErrorOrNone()) { + return args1; + } Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsError()) return args2; + if (args2.IsErrorOrNone()) { + return args2; + } - double x = args1.DoubleValue(); - int n = (int) args2.DoubleValue(); + BigDecimal x = args1.NumberValue(); + int n = args2.IntValue(); - return Operand.Create(besselJ(n, x)); + return Operand.Create(BesselJ(n, x)); } - private static double besselJ(int n, double x) { - if (x == 0.0) { - return (n == 0) ? 1.0 : 0.0; + private static BigDecimal BesselJ(int n, BigDecimal x) { + if (x.compareTo(BigDecimal.ZERO) == 0) { + return (n == 0) ? BigDecimal.ONE : BigDecimal.ZERO; } if (n < 0) n = -n; - double ax = Math.abs(x); - if (ax < 1e-10) { - return (n == 0) ? 1.0 : 0.0; + BigDecimal ax = x.abs(); + if (ax.compareTo(new BigDecimal("1e-10")) < 0) { + return (n == 0) ? BigDecimal.ONE : BigDecimal.ZERO; } - if (n == 0) return besselJ0(x); - if (n == 1) return besselJ1(x); + if (n == 0) return BesselJ0(x); + if (n == 1) return BesselJ1(x); + + if (ax.compareTo(new BigDecimal(n)) > 0) { + BigDecimal J0 = BesselJ0(x); + BigDecimal J1 = BesselJ1(x); + BigDecimal Jn = BigDecimal.ZERO; - if (ax > n) { - double J0 = besselJ0(x); - double J1 = besselJ1(x); - double Jn = 0.0; for (int k = 1; k < n; k++) { - Jn = (2.0 * k / x) * J1 - J0; + Jn = new BigDecimal("2").multiply(new BigDecimal(k)).divide(x, java.math.MathContext.DECIMAL128).multiply(J1).subtract(J0); J0 = J1; J1 = Jn; } @@ -63,61 +72,64 @@ private static double besselJ(int n, double x) { } int m = (int) (1.5 * n + 10); - double[] J = new double[m + 2]; - J[m + 1] = 0.0; - J[m] = 1.0; + BigDecimal[] J = new BigDecimal[m + 2]; + J[m + 1] = BigDecimal.ZERO; + J[m] = BigDecimal.ONE; + for (int k = m; k >= 1; k--) { - J[k - 1] = (2.0 * k / x) * J[k] - J[k + 1]; + J[k - 1] = new BigDecimal("2").multiply(new BigDecimal(k)).divide(x, java.math.MathContext.DECIMAL128).multiply(J[k]).subtract(J[k + 1]); } - double sum = 0.0; + + BigDecimal sum = BigDecimal.ZERO; for (int k = 0; k <= m; k += 2) { - sum += 2.0 * J[k]; + sum = sum.add(new BigDecimal("2").multiply(J[k])); } - sum -= J[0]; - return J[n] / sum; + sum = sum.subtract(J[0]); + + return J[n].divide(sum, java.math.MathContext.DECIMAL128); } - private static double besselJ0(double x) { - double ax = Math.abs(x); - if (ax < 8.0) { - double y1 = x * x; - double ans1 = 57568490574.0 + y1 * (-13362590354.0 + y1 * (651619640.7 - + y1 * (-11214424.18 + y1 * (77392.33017 + y1 * (-184.9052456))))); - double ans2 = 57568490411.0 + y1 * (1029532985.0 + y1 * (9494680.718 - + y1 * (59272.64853 + y1 * (267.8532712 + y1 * 1.0)))); - return ans1 / ans2; + private static BigDecimal BesselJ0(BigDecimal x) { + BigDecimal ax = x.abs(); + if (ax.compareTo(new BigDecimal("8")) < 0) { + BigDecimal y1 = x.multiply(x); + BigDecimal ans1 = new BigDecimal("57568490574").add(y1.multiply(new BigDecimal("-13362590354").add(y1.multiply(new BigDecimal("651619640.7") + .add(y1.multiply(new BigDecimal("-11214424.18").add(y1.multiply(new BigDecimal("77392.33017").add(y1.multiply(new BigDecimal("-184.9052456"))))))))))); + BigDecimal ans2 = new BigDecimal("57568490411").add(y1.multiply(new BigDecimal("1029532985").add(y1.multiply(new BigDecimal("9494680.718") + .add(y1.multiply(new BigDecimal("59272.64853").add(y1.multiply(new BigDecimal("267.8532712").add(y1.multiply(BigDecimal.ONE)))))))))); + return ans1.divide(ans2, java.math.MathContext.DECIMAL128); } - double z = 8.0 / ax; - double y2 = z * z; - double xx = ax - 0.7853981633974483; - double ans3 = 1.0 + y2 * (-0.1098628627e-2 + y2 * (0.2734510407e-4 - + y2 * (-0.2073370639e-5 + y2 * 0.2093887211e-6))); - double ans4 = -0.1562499995e-1 + y2 * (0.1430488765e-3 - + y2 * (-0.6911147651e-5 + y2 * (0.7621095161e-6 - - y2 * 0.934935152e-7))); - return Math.sqrt(0.6366197723675814 / ax) * (Math.cos(xx) * ans3 - z * Math.sin(xx) * ans4); + BigDecimal z = new BigDecimal("8").divide(ax, java.math.MathContext.DECIMAL128); + BigDecimal y2 = z.multiply(z); + BigDecimal xx = ax.subtract(new BigDecimal("0.78539816339744830962")); + BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("-0.001098628627").add(y2.multiply(new BigDecimal("0.00002734510407") + .add(y2.multiply(new BigDecimal("-0.000002073370639").add(y2.multiply(new BigDecimal("0.0000002093887211")))))))); + BigDecimal ans4 = new BigDecimal("-0.01562499995").add(y2.multiply(new BigDecimal("0.0001430488765") + .add(y2.multiply(new BigDecimal("-0.000006911147651").add(y2.multiply(new BigDecimal("0.0000007621095161") + .subtract(y2.multiply(new BigDecimal("0.0000000934935152")))))))); + return MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(ax, java.math.MathContext.DECIMAL128)).multiply(MathEx.Cos(xx).multiply(ans3).subtract(z.multiply(MathEx.Sin(xx)).multiply(ans4))); } - private static double besselJ1(double x) { - double ax = Math.abs(x); - if (ax < 8.0) { - double y1 = x * x; - double ans1 = x * (72362614232.0 + y1 * (-7895059235.0 + y1 * (242396853.1 - + y1 * (-2972611.439 + y1 * (15704.48260 + y1 * (-30.16036606)))))); - double ans2 = 144725228442.0 + y1 * (2300535178.0 + y1 * (18583304.74 - + y1 * (99447.43394 + y1 * (376.9991397 + y1 * 1.0)))); - return ans1 / ans2; + private static BigDecimal BesselJ1(BigDecimal x) { + BigDecimal ax = x.abs(); + if (ax.compareTo(new BigDecimal("8")) < 0) { + BigDecimal y1 = x.multiply(x); + BigDecimal ans1 = x.multiply(new BigDecimal("72362614232").add(y1.multiply(new BigDecimal("-7895059235").add(y1.multiply(new BigDecimal("242396853.1") + .add(y1.multiply(new BigDecimal("-2972611.439").add(y1.multiply(new BigDecimal("15704.48260").add(y1.multiply(new BigDecimal("-30.16036606"))))))))))); + BigDecimal ans2 = new BigDecimal("144725228442").add(y1.multiply(new BigDecimal("2300535178").add(y1.multiply(new BigDecimal("18583304.74") + .add(y1.multiply(new BigDecimal("99447.43394").add(y1.multiply(new BigDecimal("376.9991397").add(y1.multiply(BigDecimal.ONE)))))))))); + return ans1.divide(ans2, java.math.MathContext.DECIMAL128); } - double z = 8.0 / ax; - double y2 = z * z; - double xx = ax - 2.356194490192345; - double ans3 = 1.0 + y2 * (0.183105e-2 + y2 * (-0.3516396496e-4 - + y2 * (0.2457520174e-5 + y2 * (-0.240337019e-6)))); - double ans4 = 0.04687499995 + y2 * (-0.2002690873e-3 - + y2 * (0.8449199096e-5 + y2 * (-0.88228987e-6 - + y2 * 0.105787412e-6))); - double ans = Math.sqrt(0.6366197723675814 / ax) * (Math.cos(xx) * ans3 - z * Math.sin(xx) * ans4); - return (x < 0) ? -ans : ans; + BigDecimal z = new BigDecimal("8").divide(ax, java.math.MathContext.DECIMAL128); + BigDecimal y2 = z.multiply(z); + BigDecimal xx = ax.subtract(new BigDecimal("2.35619449019234492885")); + BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("0.00183105").add(y2.multiply(new BigDecimal("-0.00003516396496") + .add(y2.multiply(new BigDecimal("0.000002457520174").add(y2.multiply(new BigDecimal("-0.000000240337019")))))))); + BigDecimal ans4 = new BigDecimal("0.04687499995").add(y2.multiply(new BigDecimal("-0.0002002690873") + .add(y2.multiply(new BigDecimal("0.000008449199096").add(y2.multiply(new BigDecimal("-0.00000088228987") + .add(y2.multiply(new BigDecimal("0.000000105787412")))))))); + BigDecimal ans = MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(ax, java.math.MathContext.DECIMAL128)).multiply(MathEx.Cos(xx).multiply(ans3).subtract(z.multiply(MathEx.Sin(xx)).multiply(ans4))); + return (x.compareTo(BigDecimal.ZERO) < 0) ? ans.negate() : ans; } @Override @@ -127,7 +139,7 @@ public OperandType GetResultType() { @Override public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { - func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); - func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java index e7e5a5932..511f98a1b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -9,106 +9,120 @@ import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.MathEx; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_BESSELK extends Function_2 { +public final class Function_BESSELK extends Function_2 { public Function_BESSELK(FunctionBase func1, FunctionBase func2) { super(func1, func2); } + public Function_BESSELK(FunctionBase[] funcs) { + super(funcs); + } + @Override public String Name() { return "BesselK"; } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsError()) return args1; - + if (args1.IsErrorOrNone()) { + return args1; + } Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsError()) return args2; + if (args2.IsErrorOrNone()) { + return args2; + } - double x = args1.DoubleValue(); - int n = (int) args2.DoubleValue(); + BigDecimal x = args1.NumberValue(); + int n = args2.IntValue(); - if (x <= 0) { + if (x.compareTo(BigDecimal.ZERO) <= 0) { return ParameterError(1); } - return Operand.Create(besselK(n, x)); + return Operand.Create(BesselK(n, x)); } - private static double besselK(int n, double x) { + private static BigDecimal BesselK(int n, BigDecimal x) { if (n < 0) n = -n; - if (n == 0) return besselK0(x); - if (n == 1) return besselK1(x); + if (n == 0) return BesselK0(x); + if (n == 1) return BesselK1(x); + + BigDecimal K0 = BesselK0(x); + BigDecimal K1 = BesselK1(x); + BigDecimal Kn = BigDecimal.ZERO; - double K0 = besselK0(x); - double K1 = besselK1(x); - double Kn = 0.0; for (int k = 1; k < n; k++) { - Kn = K1 + 2.0 * k / x * K0; + Kn = K1.add(new BigDecimal("2").multiply(new BigDecimal(k)).divide(x, java.math.MathContext.DECIMAL128).multiply(K0)); K0 = K1; K1 = Kn; } + return K1; } - private static double besselK0(double x) { - if (x <= 2.0) { - double y1 = x * x / 4.0; - return -Math.log(x / 2.0) * besselI0(x) + (-0.5772156649015329 - + y1 * (0.4227843350984671 + y1 * (0.230697567077446 + y1 * (0.034885890266341 - + y1 * (0.002626979711643 + y1 * (0.000107502176243 + y1 * 0.000007400456812)))))); + private static BigDecimal BesselK0(BigDecimal x) { + if (x.compareTo(new BigDecimal("2")) <= 0) { + BigDecimal y1 = x.multiply(x).divide(new BigDecimal("4"), java.math.MathContext.DECIMAL128); + BigDecimal ans = MathEx.Log(x.divide(new BigDecimal("2"), java.math.MathContext.DECIMAL128)).negate().multiply(BesselI0(x)).add(new BigDecimal("-0.57721566490153286061") + .add(y1.multiply(new BigDecimal("0.42278433509846713939").add(y1.multiply(new BigDecimal("0.230697567077446").add(y1.multiply(new BigDecimal("0.034885890266341") + .add(y1.multiply(new BigDecimal("0.002626979711643").add(y1.multiply(new BigDecimal("0.000107502176243").add(y1.multiply(new BigDecimal("0.000007400456812"))))))))))))); + return ans; } - double y2 = 2.0 / x; - return Math.exp(-x) / Math.sqrt(x) * (1.2533141373155 - + y2 * (-0.07832358285526 + y2 * (0.021895687854228 + y2 * (-0.01062462809774 - + y2 * (0.005878072214632 + y2 * (-0.00251540161764 + y2 * 0.000532080305632)))))); + BigDecimal y2 = new BigDecimal("2").divide(x, java.math.MathContext.DECIMAL128); + BigDecimal ans2 = MathEx.Exp(x.negate()).divide(MathEx.Sqrt(x), java.math.MathContext.DECIMAL128).multiply(new BigDecimal("1.253314137315500") + .add(y2.multiply(new BigDecimal("-0.078323582855262").add(y2.multiply(new BigDecimal("0.021895687854228").add(y2.multiply(new BigDecimal("-0.010624628097740") + .add(y2.multiply(new BigDecimal("0.005878072214632").add(y2.multiply(new BigDecimal("-0.002515401617640").add(y2.multiply(new BigDecimal("0.000532080305632"))))))))))))); + return ans2; } - private static double besselK1(double x) { - if (x <= 2.0) { - double y1 = x * x / 4.0; - return Math.log(x / 2.0) * besselI1(x) + (1.0 / x) * (1.0 - + y1 * (0.154431442036717 + y1 * (-0.672785797513523 + y1 * (-0.181568943578864 - + y1 * (-0.019194020400716 + y1 * (0.001104044918568 + y1 * 0.000046862429868)))))); + private static BigDecimal BesselK1(BigDecimal x) { + if (x.compareTo(new BigDecimal("2")) <= 0) { + BigDecimal y1 = x.multiply(x).divide(new BigDecimal("4"), java.math.MathContext.DECIMAL128); + BigDecimal ans = MathEx.Log(x.divide(new BigDecimal("2"), java.math.MathContext.DECIMAL128)).multiply(BesselI1(x)).add(BigDecimal.ONE.divide(x, java.math.MathContext.DECIMAL128).multiply(BigDecimal.ONE + .add(y1.multiply(new BigDecimal("0.154431442036717").add(y1.multiply(new BigDecimal("-0.672785797513523").add(y1.multiply(new BigDecimal("-0.181568943578864") + .add(y1.multiply(new BigDecimal("-0.019194020400716").add(y1.multiply(new BigDecimal("0.001104044918568").add(y1.multiply(new BigDecimal("0.000046862429868"))))))))))))))); + return ans; } - double y2 = 2.0 / x; - return Math.exp(-x) / Math.sqrt(x) * (1.2533141373155 - + y2 * (0.234986192707248 + y2 * (-0.03655620203402 + y2 * (0.015042680553908 - + y2 * (-0.007803534366237 + y2 * (0.003256142832609 + y2 * (-0.000682450383692))))))); + BigDecimal y2 = new BigDecimal("2").divide(x, java.math.MathContext.DECIMAL128); + BigDecimal ans2 = MathEx.Exp(x.negate()).divide(MathEx.Sqrt(x), java.math.MathContext.DECIMAL128).multiply(new BigDecimal("1.253314137315500") + .add(y2.multiply(new BigDecimal("0.234986192707248").add(y2.multiply(new BigDecimal("-0.036556202034020").add(y2.multiply(new BigDecimal("0.015042680553908") + .add(y2.multiply(new BigDecimal("-0.007803534366237").add(y2.multiply(new BigDecimal("0.003256142832609").add(y2.multiply(new BigDecimal("-0.000682450383692"))))))))))))); + return ans2; } - private static double besselI0(double x) { - double ax = Math.abs(x); - if (ax < 3.75) { - double y1 = x / 3.75; - y1 *= y1; - return 1.0 + y1 * (3.515622965380465 + y1 * (3.089942465562116 + y1 * (1.206749160761352 - + y1 * (0.265973256598487 + y1 * (0.036076845538912 + y1 * 0.004581327358717))))); + private static BigDecimal BesselI0(BigDecimal x) { + BigDecimal ax = x.abs(); + if (ax.compareTo(new BigDecimal("3.75")) < 0) { + BigDecimal y1 = x.divide(new BigDecimal("3.75"), java.math.MathContext.DECIMAL128); + y1 = y1.multiply(y1); + return BigDecimal.ONE.add(y1.multiply(new BigDecimal("3.515622965380465").add(y1.multiply(new BigDecimal("3.089942465562116").add(y1.multiply(new BigDecimal("1.206749160761352") + .add(y1.multiply(new BigDecimal("0.265973256598487").add(y1.multiply(new BigDecimal("0.036076845538912").add(y1.multiply(new BigDecimal("0.004581327358717")))))))))))); } - double y2 = 3.75 / ax; - return (Math.exp(ax) / Math.sqrt(2.0 * Math.PI * ax)) * (0.398942280401433 + y2 * (0.01328592134473 - + y2 * (0.002253193626842 + y2 * (-0.001575649875251 + y2 * (0.009162816703917 - + y2 * (-0.020577062932649 + y2 * (0.026355373177924 + y2 * (-0.01647632961291 + y2 * 0.003923769605236)))))))); + BigDecimal y2 = new BigDecimal("3.75").divide(ax, java.math.MathContext.DECIMAL128); + return MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128).multiply(new BigDecimal("0.398942280401433").add(y2.multiply(new BigDecimal("0.013285921344730") + .add(y2.multiply(new BigDecimal("0.002253193626842").add(y2.multiply(new BigDecimal("-0.001575649875251").add(y2.multiply(new BigDecimal("0.009162816703917") + .add(y2.multiply(new BigDecimal("-0.020577062932649").add(y2.multiply(new BigDecimal("0.026355373177924").add(y2.multiply(new BigDecimal("-0.016476329612910").add(y2.multiply(new BigDecimal("0.003923769605236")))))))))))))))); } - private static double besselI1(double x) { - double ax = Math.abs(x); - if (ax < 3.75) { - double y1 = x / 3.75; - y1 *= y1; - return x * (0.5 + y1 * (0.878905941521392 + y1 * (0.514988692842374 + y1 * (0.150849342225664 - + y1 * (0.026587328231117 + y1 * (0.003015319414231 + y1 * 0.000324111013968)))))); + private static BigDecimal BesselI1(BigDecimal x) { + BigDecimal ax = x.abs(); + if (ax.compareTo(new BigDecimal("3.75")) < 0) { + BigDecimal y1 = x.divide(new BigDecimal("3.75"), java.math.MathContext.DECIMAL128); + y1 = y1.multiply(y1); + return x.multiply(new BigDecimal("0.5").add(y1.multiply(new BigDecimal("0.878905941521392").add(y1.multiply(new BigDecimal("0.514988692842374").add(y1.multiply(new BigDecimal("0.150849342225664") + .add(y1.multiply(new BigDecimal("0.026587328231117").add(y1.multiply(new BigDecimal("0.003015319414231").add(y1.multiply(new BigDecimal("0.000324111013968")))))))))))); } - double y2 = 3.75 / ax; - double ans = (Math.exp(ax) / Math.sqrt(2.0 * Math.PI * ax)) * (0.398942280401433 + y2 * (-0.039880242337502 - + y2 * (-0.003620182649157 + y2 * (0.001638105403528 + y2 * (-0.010315550635288 - + y2 * (0.022829679456897 + y2 * (-0.028953129286367 + y2 * (0.017876545768998 - y2 * 0.004200596567986)))))))); - return (x < 0) ? -ans : ans; + BigDecimal y2 = new BigDecimal("3.75").divide(ax, java.math.MathContext.DECIMAL128); + BigDecimal ans = MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128).multiply(new BigDecimal("0.398942280401433").add(y2.multiply(new BigDecimal("-0.039880242337502") + .add(y2.multiply(new BigDecimal("-0.003620182649157").add(y2.multiply(new BigDecimal("0.001638105403528").add(y2.multiply(new BigDecimal("-0.010315550635288") + .add(y2.multiply(new BigDecimal("0.022829679456897").add(y2.multiply(new BigDecimal("-0.028953129286367").add(y2.multiply(new BigDecimal("0.017876545768998").subtract(y2.multiply(new BigDecimal("0.004200596567986")))))))))))))))); + return (x.compareTo(BigDecimal.ZERO) < 0) ? ans.negate() : ans; } @Override @@ -118,7 +132,7 @@ public OperandType GetResultType() { @Override public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { - func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); - func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java index b99cb4899..5dfca5bfb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -9,136 +9,146 @@ import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.MathEx; import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_BESSELY extends Function_2 { +public final class Function_BESSELY extends Function_2 { public Function_BESSELY(FunctionBase func1, FunctionBase func2) { super(func1, func2); } + public Function_BESSELY(FunctionBase[] funcs) { + super(funcs); + } + @Override public String Name() { return "BesselY"; } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsError()) return args1; - + if (args1.IsErrorOrNone()) { + return args1; + } Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsError()) return args2; + if (args2.IsErrorOrNone()) { + return args2; + } - double x = args1.DoubleValue(); - int n = (int) args2.DoubleValue(); + BigDecimal x = args1.NumberValue(); + int n = args2.IntValue(); - if (x <= 0) { + if (x.compareTo(BigDecimal.ZERO) <= 0) { return ParameterError(1); } - return Operand.Create(besselY(n, x)); + return Operand.Create(BesselY(n, x)); } - private static double besselY(int n, double x) { + private static BigDecimal BesselY(int n, BigDecimal x) { if (n < 0) n = -n; - if (n == 0) return besselY0(x); - if (n == 1) return besselY1(x); + if (n == 0) return BesselY0(x); + if (n == 1) return BesselY1(x); + + BigDecimal Y0 = BesselY0(x); + BigDecimal Y1 = BesselY1(x); + BigDecimal Yn = BigDecimal.ZERO; - double Y0 = besselY0(x); - double Y1 = besselY1(x); - double Yn = 0.0; for (int k = 1; k < n; k++) { - Yn = (2.0 * k / x) * Y1 - Y0; + Yn = new BigDecimal("2").multiply(new BigDecimal(k)).divide(x, java.math.MathContext.DECIMAL128).multiply(Y1).subtract(Y0); Y0 = Y1; Y1 = Yn; } + return Y1; } - private static double besselY0(double x) { - if (x < 8.0) { - double y1 = x * x; - double ans1 = -2957821389.0 + y1 * (7062834065.0 + y1 * (-512359803.6 - + y1 * (10879881.29 + y1 * (-86327.92757 + y1 * 228.4622733)))); - double ans2 = 40076544269.0 + y1 * (745249964.8 + y1 * (7189466.438 - + y1 * (47447.2647 + y1 * (226.1030244 + y1 * 1.0)))); - return (ans1 / ans2) + 0.6366197723675814 * besselJ0(x) * Math.log(x); + private static BigDecimal BesselY0(BigDecimal x) { + if (x.compareTo(new BigDecimal("8")) < 0) { + BigDecimal y1 = x.multiply(x); + BigDecimal ans1 = new BigDecimal("-2957821389").add(y1.multiply(new BigDecimal("7062834065").add(y1.multiply(new BigDecimal("-512359803.6") + .add(y1.multiply(new BigDecimal("10879881.29").add(y1.multiply(new BigDecimal("-86327.92757").add(y1.multiply(new BigDecimal("228.4622733"))))))))))); + BigDecimal ans2 = new BigDecimal("40076544269").add(y1.multiply(new BigDecimal("745249964.8").add(y1.multiply(new BigDecimal("7189466.438") + .add(y1.multiply(new BigDecimal("47447.26470").add(y1.multiply(new BigDecimal("226.1030244").add(y1.multiply(BigDecimal.ONE)))))))))); + return ans1.divide(ans2, java.math.MathContext.DECIMAL128).add(new BigDecimal("0.63661977236758134308").multiply(BesselJ0(x)).multiply(MathEx.Log(x))); } - double z = 8.0 / x; - double y2 = z * z; - double xx = x - 0.7853981633974483; - double ans3 = 1.0 + y2 * (-0.1098628627e-2 + y2 * (0.2734510407e-4 - + y2 * (-0.2073370639e-5 + y2 * 0.2093887211e-6))); - double ans4 = -0.1562499995e-1 + y2 * (0.1430488765e-3 - + y2 * (-0.6911147651e-5 + y2 * (0.7621095161e-6 - + y2 * (-0.934935152e-7)))); - return Math.sqrt(0.6366197723675814 / x) * (Math.sin(xx) * ans3 + z * Math.cos(xx) * ans4); + BigDecimal z = new BigDecimal("8").divide(x, java.math.MathContext.DECIMAL128); + BigDecimal y2 = z.multiply(z); + BigDecimal xx = x.subtract(new BigDecimal("0.78539816339744830962")); + BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("-0.001098628627").add(y2.multiply(new BigDecimal("0.00002734510407") + .add(y2.multiply(new BigDecimal("-0.000002073370639").add(y2.multiply(new BigDecimal("0.0000002093887211")))))))); + BigDecimal ans4 = new BigDecimal("-0.01562499995").add(y2.multiply(new BigDecimal("0.0001430488765") + .add(y2.multiply(new BigDecimal("-0.000006911147651").add(y2.multiply(new BigDecimal("0.0000007621095161") + .add(y2.multiply(new BigDecimal("-0.0000000934935152")))))))); + return MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(x, java.math.MathContext.DECIMAL128)).multiply(MathEx.Sin(xx).multiply(ans3).add(z.multiply(MathEx.Cos(xx)).multiply(ans4))); } - private static double besselY1(double x) { - if (x < 8.0) { - double y1 = x * x; - double ans1 = x * (-0.4900604943e13 + y1 * (0.127527439e13 - + y1 * (-0.5153438139e11 + y1 * (0.7349264551e9 - + y1 * (-0.4237922726e7 + y1 * 0.8511937935e4))))); - double ans2 = 0.249958057e14 + y1 * (0.4244419664e12 - + y1 * (0.3733650367e10 + y1 * (0.2245904002e8 - + y1 * (0.1020426050e6 + y1 * (0.3549632885e3 + y1))))); - return (ans1 / ans2) + 0.6366197723675814 * (besselJ1(x) * Math.log(x) - 1.0 / x); + private static BigDecimal BesselY1(BigDecimal x) { + if (x.compareTo(new BigDecimal("8")) < 0) { + BigDecimal y1 = x.multiply(x); + BigDecimal ans1 = x.multiply(new BigDecimal("-4900604943000").add(y1.multiply(new BigDecimal("1275274390000") + .add(y1.multiply(new BigDecimal("-51534381390").add(y1.multiply(new BigDecimal("734926455.1") + .add(y1.multiply(new BigDecimal("-4237922.726").add(y1.multiply(new BigDecimal("8511.937935"))))))))))); + BigDecimal ans2 = new BigDecimal("24995805700000").add(y1.multiply(new BigDecimal("424441966400") + .add(y1.multiply(new BigDecimal("3733650367").add(y1.multiply(new BigDecimal("224590400.2") + .add(y1.multiply(new BigDecimal("1020426.050").add(y1.multiply(new BigDecimal("354.9632885").add(y1.multiply(BigDecimal.ONE))))))))))); + return ans1.divide(ans2, java.math.MathContext.DECIMAL128).add(new BigDecimal("0.63661977236758134308").multiply(BesselJ1(x).multiply(MathEx.Log(x)).subtract(BigDecimal.ONE.divide(x, java.math.MathContext.DECIMAL128)))); } - double z = 8.0 / x; - double y2 = z * z; - double xx = x - 2.356194490192345; - double ans3 = 1.0 + y2 * (0.183105e-2 + y2 * (-0.3516396496e-4 - + y2 * (0.2457520174e-5 + y2 * (-0.240337019e-6)))); - double ans4 = 0.04687499995 + y2 * (-0.2002690873e-3 - + y2 * (0.8449199096e-5 + y2 * (-0.88228987e-6 - + y2 * 0.105787412e-6))); - return Math.sqrt(0.6366197723675814 / x) * (Math.sin(xx) * ans3 + z * Math.cos(xx) * ans4); + BigDecimal z = new BigDecimal("8").divide(x, java.math.MathContext.DECIMAL128); + BigDecimal y2 = z.multiply(z); + BigDecimal xx = x.subtract(new BigDecimal("2.35619449019234492885")); + BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("0.00183105").add(y2.multiply(new BigDecimal("-0.00003516396496") + .add(y2.multiply(new BigDecimal("0.000002457520174").add(y2.multiply(new BigDecimal("-0.000000240337019")))))))); + BigDecimal ans4 = new BigDecimal("0.04687499995").add(y2.multiply(new BigDecimal("-0.0002002690873") + .add(y2.multiply(new BigDecimal("0.000008449199096").add(y2.multiply(new BigDecimal("-0.00000088228987") + .add(y2.multiply(new BigDecimal("0.000000105787412")))))))); + return MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(x, java.math.MathContext.DECIMAL128)).multiply(MathEx.Sin(xx).multiply(ans3).add(z.multiply(MathEx.Cos(xx)).multiply(ans4))); } - private static double besselJ0(double x) { - double ax = Math.abs(x); - if (ax < 8.0) { - double y1 = x * x; - double ans1 = 57568490574.0 + y1 * (-13362590354.0 + y1 * (651619640.7 - + y1 * (-11214424.18 + y1 * (77392.33017 + y1 * (-184.9052456))))); - double ans2 = 57568490411.0 + y1 * (1029532985.0 + y1 * (9494680.718 - + y1 * (59272.64853 + y1 * (267.8532712 + y1 * 1.0)))); - return ans1 / ans2; + private static BigDecimal BesselJ0(BigDecimal x) { + BigDecimal ax = x.abs(); + if (ax.compareTo(new BigDecimal("8")) < 0) { + BigDecimal y1 = x.multiply(x); + BigDecimal ans1 = new BigDecimal("57568490574").add(y1.multiply(new BigDecimal("-13362590354").add(y1.multiply(new BigDecimal("651619640.7") + .add(y1.multiply(new BigDecimal("-11214424.18").add(y1.multiply(new BigDecimal("77392.33017").add(y1.multiply(new BigDecimal("-184.9052456"))))))))))); + BigDecimal ans2 = new BigDecimal("57568490411").add(y1.multiply(new BigDecimal("1029532985").add(y1.multiply(new BigDecimal("9494680.718") + .add(y1.multiply(new BigDecimal("59272.64853").add(y1.multiply(new BigDecimal("267.8532712").add(y1.multiply(BigDecimal.ONE)))))))))); + return ans1.divide(ans2, java.math.MathContext.DECIMAL128); } - double z = 8.0 / ax; - double y2 = z * z; - double xx = ax - 0.7853981633974483; - double ans3 = 1.0 + y2 * (-0.1098628627e-2 + y2 * (0.2734510407e-4 - + y2 * (-0.2073370639e-5 + y2 * 0.2093887211e-6))); - double ans4 = -0.1562499995e-1 + y2 * (0.1430488765e-3 - + y2 * (-0.6911147651e-5 + y2 * (0.7621095161e-6 - - y2 * 0.934935152e-7))); - return Math.sqrt(0.6366197723675814 / ax) * (Math.cos(xx) * ans3 - z * Math.sin(xx) * ans4); + BigDecimal z = new BigDecimal("8").divide(ax, java.math.MathContext.DECIMAL128); + BigDecimal y2 = z.multiply(z); + BigDecimal xx = ax.subtract(new BigDecimal("0.78539816339744830962")); + BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("-0.001098628627").add(y2.multiply(new BigDecimal("0.00002734510407") + .add(y2.multiply(new BigDecimal("-0.000002073370639").add(y2.multiply(new BigDecimal("0.0000002093887211")))))))); + BigDecimal ans4 = new BigDecimal("-0.01562499995").add(y2.multiply(new BigDecimal("0.0001430488765") + .add(y2.multiply(new BigDecimal("-0.000006911147651").add(y2.multiply(new BigDecimal("0.0000007621095161") + .subtract(y2.multiply(new BigDecimal("0.0000000934935152")))))))); + return MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(ax, java.math.MathContext.DECIMAL128)).multiply(MathEx.Cos(xx).multiply(ans3).subtract(z.multiply(MathEx.Sin(xx)).multiply(ans4))); } - private static double besselJ1(double x) { - double ax = Math.abs(x); - if (ax < 8.0) { - double y1 = x * x; - double ans1 = x * (72362614232.0 + y1 * (-7895059235.0 + y1 * (242396853.1 - + y1 * (-2972611.439 + y1 * (15704.4826 + y1 * (-30.16036606)))))); - double ans2 = 144725228442.0 + y1 * (2300535178.0 + y1 * (18583304.74 - + y1 * (99447.43394 + y1 * (376.9991397 + y1 * 1.0)))); - return ans1 / ans2; + private static BigDecimal BesselJ1(BigDecimal x) { + BigDecimal ax = x.abs(); + if (ax.compareTo(new BigDecimal("8")) < 0) { + BigDecimal y1 = x.multiply(x); + BigDecimal ans1 = x.multiply(new BigDecimal("72362614232").add(y1.multiply(new BigDecimal("-7895059235").add(y1.multiply(new BigDecimal("242396853.1") + .add(y1.multiply(new BigDecimal("-2972611.439").add(y1.multiply(new BigDecimal("15704.48260").add(y1.multiply(new BigDecimal("-30.16036606"))))))))))); + BigDecimal ans2 = new BigDecimal("144725228442").add(y1.multiply(new BigDecimal("2300535178").add(y1.multiply(new BigDecimal("18583304.74") + .add(y1.multiply(new BigDecimal("99447.43394").add(y1.multiply(new BigDecimal("376.9991397").add(y1.multiply(BigDecimal.ONE)))))))))); + return ans1.divide(ans2, java.math.MathContext.DECIMAL128); } - double z = 8.0 / ax; - double y2 = z * z; - double xx = ax - 2.356194490192345; - double ans3 = 1.0 + y2 * (0.183105e-2 + y2 * (-0.3516396496e-4 - + y2 * (0.2457520174e-5 + y2 * (-0.240337019e-6)))); - double ans4 = 0.04687499995 + y2 * (-0.2002690873e-3 - + y2 * (0.8449199096e-5 + y2 * (-0.88228987e-6 - + y2 * 0.105787412e-6))); - double ans = Math.sqrt(0.6366197723675814 / ax) * (Math.cos(xx) * ans3 - z * Math.sin(xx) * ans4); - return (x < 0) ? -ans : ans; + BigDecimal z = new BigDecimal("8").divide(ax, java.math.MathContext.DECIMAL128); + BigDecimal y2 = z.multiply(z); + BigDecimal xx = ax.subtract(new BigDecimal("2.35619449019234492885")); + BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("0.00183105").add(y2.multiply(new BigDecimal("-0.00003516396496") + .add(y2.multiply(new BigDecimal("0.000002457520174").add(y2.multiply(new BigDecimal("-0.000000240337019")))))))); + BigDecimal ans4 = new BigDecimal("0.04687499995").add(y2.multiply(new BigDecimal("-0.0002002690873") + .add(y2.multiply(new BigDecimal("0.000008449199096").add(y2.multiply(new BigDecimal("-0.00000088228987") + .add(y2.multiply(new BigDecimal("0.000000105787412")))))))); + BigDecimal ans = MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(ax, java.math.MathContext.DECIMAL128)).multiply(MathEx.Cos(xx).multiply(ans3).subtract(z.multiply(MathEx.Sin(xx)).multiply(ans4))); + return (x.compareTo(BigDecimal.ZERO) < 0) ? ans.negate() : ans; } @Override @@ -148,7 +158,7 @@ public OperandType GetResultType() { @Override public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { - func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); - func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETADIST.java index d6f8cf35f..9716d7632 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETADIST.java @@ -1,40 +1,46 @@ package toolgood.algorithm.internals.functions.mathsum2; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_BETADIST extends Function_3 { +public final class Function_BETADIST extends Function_3 { public Function_BETADIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); } + public Function_BETADIST(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "BetaDist"; + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "BetaDist", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } + double x = args1.DoubleValue(); double alpha = args2.DoubleValue(); double beta = args3.DoubleValue(); @@ -46,7 +52,14 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java index ce4e57e68..69ee35730 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java @@ -1,40 +1,46 @@ package toolgood.algorithm.internals.functions.mathsum2; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_BETAINV extends Function_3 { +public final class Function_BETAINV extends Function_3 { public Function_BETAINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); } + public Function_BETAINV(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "BetaInv"; + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "BetaInv", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } + double p = args1.DoubleValue(); double alpha = args2.DoubleValue(); double beta = args3.DoubleValue(); @@ -50,7 +56,14 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java index d3b1f7b98..ac6e26c9a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java @@ -1,58 +1,71 @@ package toolgood.algorithm.internals.functions.mathsum2; -import toolgood.algorithm.internals.functions.Function_4; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_4; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_BINOMDIST extends Function_4 { +public final class Function_BINOMDIST extends Function_4 { public Function_BINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { super(func1, func2, func3, func4); } + public Function_BINOMDIST(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "BinomDist"; + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "BinomDist", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - Operand args4 = func4.Evaluate(work, tempParameter); - if (!args4.IsBoolean()) { - args4 = args4.ToBoolean("Function '{0}' parameter {1} is error!", "BinomDist", 4); - if (args4.IsError()) { - return args4; - } + Operand args4 = GetBoolean_4(engine, tempParameter); + if (args4.IsErrorOrNone()) { + return args4; } - int n2 = args2.IntValue(); - double n3 = args3.DoubleValue(); - if (!(n3 >= 0.0 && n3 <= 1.0 && n2 >= 0)) { + int numberS = args1.IntValue(); + int trials = args2.IntValue(); + double probabilityS = args3.DoubleValue(); + boolean cumulative = args4.BooleanValue(); + + if (probabilityS < 0.0 || probabilityS > 1.0 || trials < 0 || numberS < 0 || numberS > trials) { return Operand.Error("Function '{0}' parameter is error!", "BinomDist"); } - return Operand.Create(ExcelFunctions.BinomDist(args1.IntValue(), n2, n3, args4.BooleanValue())); + return Operand.Create(ExcelFunctions.BinomDist(numberS, trials, probabilityS, cumulative)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "BinomDist"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func4.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java index be75cf6ab..378a58f0c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -10,10 +10,11 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; -public class Function_ERF extends Function_1 { - public Function_ERF(FunctionBase func) { - super(func); +public final class Function_ERF extends Function_1 { + public Function_ERF(FunctionBase func1) { + super(func1); } @Override @@ -22,32 +23,14 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsError()) return args1; - double x = args1.DoubleValue(); - return Operand.Create(erf(x)); - } - - private static double erf(double x) { - final double a1 = 0.254829592; - final double a2 = -0.284496736; - final double a3 = 1.421413741; - final double a4 = -1.453152027; - final double a5 = 1.061405429; - final double p = 0.3275911; - - int sign = (x < 0) ? -1 : 1; - x = Math.abs(x); - - if (x > 6.0) { - return sign * 1.0; + if (args1.IsErrorOrNone()) { + return args1; } - double t = 1.0 / (1.0 + p * x); - double y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x); - - return sign * y; + double x = args1.DoubleValue(); + return Operand.Create(ExcelFunctions.Erf(x)); } @Override @@ -57,6 +40,6 @@ public OperandType GetResultType() { @Override public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { - func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java index c59226c40..c112497eb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java @@ -1,7 +1,7 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -10,47 +10,27 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; -public class Function_ERFC extends Function_1 { - public Function_ERFC(FunctionBase func) { - super(func); +public final class Function_ERFC extends Function_1 { + public Function_ERFC(FunctionBase func1) { + super(func1); } @Override public String Name() { - return "Erfc"; + return "ErfC"; } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsError()) return args1; - double x = args1.DoubleValue(); - return Operand.Create(erfc(x)); - } - - private static double erfc(double x) { - if (x < 0) { - return 2.0 - erfc(-x); - } - if (x > 6.0) { - return 0.0; + if (args1.IsErrorOrNone()) { + return args1; } - return 1.0 - erf(x); - } - - private static double erf(double x) { - final double a1 = 0.254829592; - final double a2 = -0.284496736; - final double a3 = 1.421413741; - final double a4 = -1.453152027; - final double a5 = 1.061405429; - final double p = 0.3275911; - double t = 1.0 / (1.0 + p * x); - double y = 1.0 - (((((a5 * t + a4) * t) + a3) * t + a2) * t + a1) * t * Math.exp(-x * x); - - return y; + double x = args1.DoubleValue(); + return Operand.Create(ExcelFunctions.ErfC(x)); } @Override @@ -60,6 +40,6 @@ public OperandType GetResultType() { @Override public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { - func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java index 5d777ab76..e4c6aff9f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java @@ -1,50 +1,65 @@ package toolgood.algorithm.internals.functions.mathsum2; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_EXPONDIST extends Function_3 { +public final class Function_EXPONDIST extends Function_3 { public Function_EXPONDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); } + public Function_EXPONDIST(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "ExponDist"; + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "ExponDist", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "ExponDist", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (!args3.IsBoolean()) { - args3 = args3.ToBoolean("Function '{0}' parameter {1} is error!", "ExponDist", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetBoolean_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - double n1 = args1.DoubleValue(); - if (n1 < 0.0) { + double x = args1.DoubleValue(); + double lambda = args2.DoubleValue(); + boolean cumulative = args3.BooleanValue(); + + if (x < 0.0 || lambda <= 0.0) { return Operand.Error("Function '{0}' parameter is error!", "ExponDist"); } - return Operand.Create(ExcelFunctions.ExponDist(n1, args2.DoubleValue(), args3.BooleanValue())); + return Operand.Create(ExcelFunctions.ExponDist(x, lambda, cumulative)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "ExponDist"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java index 0a93de537..0a3243c94 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java @@ -1,52 +1,65 @@ package toolgood.algorithm.internals.functions.mathsum2; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_FDIST extends Function_3 { +public final class Function_FDIST extends Function_3 { public Function_FDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); } + public Function_FDIST(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "FDist"; + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "FDist", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } double x = args1.DoubleValue(); int degreesFreedom1 = args2.IntValue(); int degreesFreedom2 = args3.IntValue(); - if (degreesFreedom1 <= 0 || degreesFreedom2 <= 0) { + + if (degreesFreedom1 <= 0 || degreesFreedom2 <= 0 || x < 0) { return Operand.Error("Function '{0}' parameter is error!", "FDist"); } return Operand.Create(ExcelFunctions.FDist(x, degreesFreedom1, degreesFreedom2)); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "FDist"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java index 03e94afa6..5ea21f415 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java @@ -1,44 +1,50 @@ package toolgood.algorithm.internals.functions.mathsum2; -import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_FINV extends Function_3 { +public final class Function_FINV extends Function_3 { public Function_FINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); } + public Function_FINV(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "FInv"; + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "FInv", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } double p = args1.DoubleValue(); int degreesFreedom1 = args2.IntValue(); int degreesFreedom2 = args3.IntValue(); + if (degreesFreedom1 <= 0 || degreesFreedom2 <= 0 || p < 0.0 || p > 1.0) { return Operand.Error("Function '{0}' parameter is error!", "FInv"); } @@ -50,7 +56,14 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java index bb3139efa..2f39895f3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java @@ -1,34 +1,47 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_FISHER extends Function_1 { +public final class Function_FISHER extends Function_1 { public Function_FISHER(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Fisher"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Fisher"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } + double x = args1.DoubleValue(); - if (x >= 1 || x <= -1) { + if (x <= -1 || x >= 1) { return Operand.Error("Function '{0}' parameter is error!", "Fisher"); } - double n = 0.5 * Math.log((1 + x) / (1 - x)); - return Operand.Create(n); + double result = 0.5 * Math.log((1 + x) / (1 - x)); + return Operand.Create(result); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Fisher"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java index 38dc00e8a..c9433d090 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java @@ -1,31 +1,44 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_FISHERINV extends Function_1 { +public final class Function_FISHERINV extends Function_1 { public Function_FISHERINV(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "FisherInv"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "FisherInv"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } + double x = args1.DoubleValue(); - double n = (Math.exp(2 * x) - 1) / (Math.exp(2 * x) + 1); - return Operand.Create(n); + double result = (Math.exp(2 * x) - 1) / (Math.exp(2 * x) + 1); + return Operand.Create(result); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "FisherInv"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMADIST.java index c88d2051b..2881cb346 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMADIST.java @@ -1,59 +1,71 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_4; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_GAMMADIST extends Function_4 { +public final class Function_GAMMADIST extends Function_4 { public Function_GAMMADIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { super(func1, func2, func3, func4); } + public Function_GAMMADIST(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "GammaDist"; + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "GammaDist", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - Operand args4 = func4.Evaluate(work, tempParameter); - if (args4.IsNotBoolean()) { - args4 = args4.ToBoolean("Function '{0}' parameter {1} is error!", "GammaDist", 4); - if (args4.IsError()) { - return args4; - } + Operand args4 = GetBoolean_4(engine, tempParameter); + if (args4.IsErrorOrNone()) { + return args4; } + double x = args1.DoubleValue(); double alpha = args2.DoubleValue(); double beta = args3.DoubleValue(); boolean cumulative = args4.BooleanValue(); - if (alpha < 0.0 || beta < 0.0) { + + if (alpha <= 0.0 || beta <= 0.0 || x < 0) { return Operand.Error("Function '{0}' parameter is error!", "GammaDist"); } return Operand.Create(ExcelFunctions.GammaDist(x, alpha, beta, cumulative)); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "GammaDist"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func4.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java index f4357ca6f..7090bf387 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java @@ -1,51 +1,65 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_GAMMAINV extends Function_3 { +public final class Function_GAMMAINV extends Function_3 { public Function_GAMMAINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); } + public Function_GAMMAINV(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "GammaInv"; + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "GammaInv", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } + double probability = args1.DoubleValue(); double alpha = args2.DoubleValue(); double beta = args3.DoubleValue(); - if (alpha < 0.0 || beta < 0.0 || probability < 0 || probability > 1.0) { + + if (alpha <= 0.0 || beta <= 0.0 || probability < 0.0 || probability > 1.0) { return Operand.Error("Function '{0}' parameter is error!", "GammaInv"); } return Operand.Create(ExcelFunctions.GammaInv(probability, alpha, beta)); } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "GammaInv"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java index e671f2894..5f518130f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java @@ -1,31 +1,48 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_GAMMALN extends Function_1 { +public final class Function_GAMMALN extends Function_1 { public Function_GAMMALN(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "GammaLn"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "GammaLn"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; + } + + double x = args1.DoubleValue(); + if (x <= 0) { + return Operand.Error("Function '{0}' parameter is error!", "GammaLn"); } - return Operand.Create(ExcelFunctions.GAMMALN(args1.DoubleValue())); + return Operand.Create(ExcelFunctions.GAMMALN(x)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "GammaLn"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_HYPGEOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_HYPGEOMDIST.java index 71b4aaa95..796065330 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_HYPGEOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_HYPGEOMDIST.java @@ -1,59 +1,72 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_4; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_HYPGEOMDIST extends Function_4 { +public final class Function_HYPGEOMDIST extends Function_4 { public Function_HYPGEOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { super(func1, func2, func3, func4); } + public Function_HYPGEOMDIST(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "HypgeomDist"; + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - Operand args4 = func4.Evaluate(work, tempParameter); - if (args4.IsNotNumber()) { - args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "HypgeomDist", 4); - if (args4.IsError()) { - return args4; - } + Operand args4 = GetNumber_4(engine, tempParameter); + if (args4.IsErrorOrNone()) { + return args4; } - int k = args1.IntValue(); - int draws = args2.IntValue(); - int success = args3.IntValue(); - int population = args4.IntValue(); - if (!(population >= 0 && success >= 0 && draws >= 0 && success <= population && draws <= population)) { + + int sampleS = args1.IntValue(); + int numberSample = args2.IntValue(); + int populationS = args3.IntValue(); + int numberPop = args4.IntValue(); + + if (sampleS < 0 || numberSample < 0 || populationS < 0 || numberPop < 0 || + sampleS > numberSample || sampleS > populationS || numberSample > numberPop || populationS > numberPop) { return Operand.Error("Function '{0}' parameter is error!", "HypgeomDist"); } - return Operand.Create(ExcelFunctions.HypgeomDist(k, draws, success, population)); + return Operand.Create(ExcelFunctions.HypgeomDist(sampleS, numberSample, populationS, numberPop)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "HypgeomDist"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java index a891f6636..456b83e22 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java @@ -1,50 +1,65 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_LOGINV extends Function_3 { +public final class Function_LOGINV extends Function_3 { public Function_LOGINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); } + public Function_LOGINV(FunctionBase[] funcs) { + super(funcs); + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "LogInv"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LogInv", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - double n3 = args3.DoubleValue(); - if (n3 < 0.0) { + double probability = args1.DoubleValue(); + double mean = args2.DoubleValue(); + double standardDev = args3.DoubleValue(); + + if (standardDev <= 0.0 || probability <= 0.0 || probability >= 1.0) { return Operand.Error("Function '{0}' parameter is error!", "LogInv"); } - return Operand.Create(ExcelFunctions.LogInv(args1.DoubleValue(), args2.DoubleValue(), n3)); + return Operand.Create(ExcelFunctions.LogInv(probability, mean, standardDev)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "LogInv"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java index 6154b2214..ddf8cfe24 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java @@ -1,50 +1,65 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_LOGNORMDIST extends Function_3 { +public final class Function_LOGNORMDIST extends Function_3 { public Function_LOGNORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); } + public Function_LOGNORMDIST(FunctionBase[] funcs) { + super(funcs); + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "LognormDist"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "LognormDist", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - double n3 = args3.DoubleValue(); - if (n3 < 0.0) { + double x = args1.DoubleValue(); + double mean = args2.DoubleValue(); + double standardDev = args3.DoubleValue(); + + if (standardDev <= 0.0 || x <= 0.0) { return Operand.Error("Function '{0}' parameter is error!", "LognormDist"); } - return Operand.Create(ExcelFunctions.LognormDist(args1.DoubleValue(), args2.DoubleValue(), n3)); + return Operand.Create(ExcelFunctions.LognormDist(x, mean, standardDev)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "LognormDist"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java index 90282b247..07ec20047 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java @@ -1,52 +1,65 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_NEGBINOMDIST extends Function_3 { +public final class Function_NEGBINOMDIST extends Function_3 { public Function_NEGBINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); } + public Function_NEGBINOMDIST(FunctionBase[] funcs) { + super(funcs); + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "NegbinomDist"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "NegbinomDist", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - int k = args1.IntValue(); - double r = args2.DoubleValue(); - double p = args3.DoubleValue(); - if (!(r >= 0.0 && p >= 0.0 && p <= 1.0)) { + int numberF = args1.IntValue(); + int numberS = args2.IntValue(); + double probabilityS = args3.DoubleValue(); + + if (numberF < 0 || numberS < 1 || probabilityS < 0.0 || probabilityS > 1.0) { return Operand.Error("Function '{0}' parameter is error!", "NegbinomDist"); } - return Operand.Create(ExcelFunctions.NegbinomDist(k, r, p)); + return Operand.Create(ExcelFunctions.NegbinomDist(numberF, numberS, probabilityS)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "NegbinomDist"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java index 815982e8b..0559fa054 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java @@ -1,57 +1,71 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_4; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_NORMDIST extends Function_4 { +public final class Function_NORMDIST extends Function_4 { public Function_NORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { super(func1, func2, func3, func4); } + public Function_NORMDIST(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "NormDist"; + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "NormDist", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - Operand args4 = func4.Evaluate(work, tempParameter); - if (args4.IsNotBoolean()) { - args4 = args4.ToBoolean("Function '{0}' parameter {1} is error!", "NormDist", 4); - if (args4.IsError()) { - return args4; - } + Operand args4 = GetBoolean_4(engine, tempParameter); + if (args4.IsErrorOrNone()) { + return args4; } - double num = args1.DoubleValue(); - double avg = args2.DoubleValue(); - double STDEV = args3.DoubleValue(); - boolean b = args4.BooleanValue(); - return Operand.Create(ExcelFunctions.NormDist(num, avg, STDEV, b)); + double x = args1.DoubleValue(); + double mean = args2.DoubleValue(); + double standardDev = args3.DoubleValue(); + boolean cumulative = args4.BooleanValue(); + + if (standardDev <= 0.0) { + return Operand.Error("Function '{0}' parameter is error!", "NormDist"); + } + return Operand.Create(ExcelFunctions.NormDist(x, mean, standardDev, cumulative)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "NormDist"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func4.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java index 0b22a3941..2bc8f9cc3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java @@ -1,48 +1,65 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_NORMINV extends Function_3 { +public final class Function_NORMINV extends Function_3 { public Function_NORMINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); } + public Function_NORMINV(FunctionBase[] funcs) { + super(funcs); + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "NormInv"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; + } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 2); - if (args2.IsError()) { - return args2; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "NormInv", 3); - if (args3.IsError()) { - return args3; - } + + double probability = args1.DoubleValue(); + double mean = args2.DoubleValue(); + double standardDev = args3.DoubleValue(); + + if (standardDev <= 0.0 || probability <= 0.0 || probability >= 1.0) { + return Operand.Error("Function '{0}' parameter is error!", "NormInv"); } - double p = args1.DoubleValue(); - double avg = args2.DoubleValue(); - double STDEV = args3.DoubleValue(); - return Operand.Create(ExcelFunctions.NormInv(p, avg, STDEV)); + return Operand.Create(ExcelFunctions.NormInv(probability, mean, standardDev)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "NormInv"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java index 0f7ca8301..b4477149f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java @@ -1,32 +1,45 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_NORMSDIST extends Function_1 { +public final class Function_NORMSDIST extends Function_1 { public Function_NORMSDIST(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "NormSDist"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "NormSDist"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - double num = args1.DoubleValue(); - return Operand.Create(ExcelFunctions.NormSDist(num)); + + double z = args1.DoubleValue(); + return Operand.Create(ExcelFunctions.NormSDist(z)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "NormSDist"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java index 84fc7e386..8d58d94cb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java @@ -1,32 +1,48 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; + +import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_NORMSINV extends Function_1 { +public final class Function_NORMSINV extends Function_1 { public Function_NORMSINV(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "NormSInv"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "NormSInv"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; + } + + double probability = args1.DoubleValue(); + if (probability <= 0.0 || probability >= 1.0) { + return Operand.Error("Function '{0}' parameter is error!", "NormSInv"); } - double p = args1.DoubleValue(); - return Operand.Create(ExcelFunctions.NormSInv(p)); + return Operand.Create(ExcelFunctions.NormSInv(probability)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(java.lang.StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "NormSInv"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java index b592c5068..927d934ff 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java @@ -1,52 +1,53 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_TDIST extends Function_3 { +public final class Function_TDIST extends Function_3 { public Function_TDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { super(func1, func2, func3); } + public Function_TDIST(FunctionBase[] funcs) { + super(funcs); + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "TDist", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "TDist"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "TDist", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "TDist", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } double x = args1.DoubleValue(); int degreesFreedom = args2.IntValue(); int tails = args3.IntValue(); - if (degreesFreedom <= 0 || tails < 1 || tails > 2) { + if (degreesFreedom < 1 || (tails != 1 && tails != 2)) { return Operand.Error("Function '{0}' parameter is error!", "TDist"); } - try { return Operand.Create(ExcelFunctions.TDist(x, degreesFreedom, tails)); } catch (Exception e) { @@ -55,7 +56,14 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java index 8e0444b45..3d0f8456d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java @@ -1,52 +1,63 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_TINV extends Function_2 { +public final class Function_TINV extends Function_2 { public Function_TINV(FunctionBase func1, FunctionBase func2) { super(func1, func2); } + public Function_TINV(FunctionBase[] funcs) { + super(funcs); + } + + @Override + public String Name() { + return "TInv"; + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "TInv", 1); - if (args1.IsError()) { - return args1; - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "TInv", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - double p = args1.DoubleValue(); + double probability = args1.DoubleValue(); int degreesFreedom = args2.IntValue(); - if (degreesFreedom <= 0 || p < 0.0 || p > 1.0) { + if (degreesFreedom < 1 || probability <= 0.0 || probability > 1.0) { return Operand.Error("Function '{0}' parameter is error!", "TInv"); } try { - return Operand.Create(ExcelFunctions.TInv(p, degreesFreedom)); + return Operand.Create(ExcelFunctions.TInv(probability, degreesFreedom)); } catch (Exception e) { return Operand.Error("Function '{0}' parameter is error!", "TInv"); } } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "TInv"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java index 03b5e03cf..c2345e418 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java @@ -1,65 +1,71 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; +import java.util.List; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.Function_4; -import toolgood.algorithm.mathNet.ExcelFunctions; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_4; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.mathNet.ExcelFunctions; - -public class Function_WEIBULL extends Function_4 { +public final class Function_WEIBULL extends Function_4 { public Function_WEIBULL(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { super(func1, func2, func3, func4); } + public Function_WEIBULL(FunctionBase[] funcs) { + super(funcs); + } + @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "Weibull", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Weibull"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Weibull", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { + return args2; } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Weibull", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { + return args3; } - Operand args4 = func4.Evaluate(work, tempParameter); - if (args4.IsNotBoolean()) { - args4 = args4.ToBoolean("Function '{0}' parameter {1} is error!", "Weibull", 4); - if (args4.IsError()) { - return args4; - } + Operand args4 = GetBoolean_4(engine, tempParameter); + if (args4.IsErrorOrNone()) { + return args4; } double x = args1.DoubleValue(); - double shape = args2.DoubleValue(); - double scale = args3.DoubleValue(); - boolean state = args4.BooleanValue(); + double alpha = args2.DoubleValue(); + double beta = args3.DoubleValue(); + boolean cumulative = args4.BooleanValue(); - if (shape <= 0.0 || scale <= 0.0) { + if (alpha <= 0.0 || beta <= 0.0 || x < 0) { return Operand.Error("Function '{0}' parameter is error!", "Weibull"); } + return Operand.Create(ExcelFunctions.WEIBULL(x, alpha, beta, cumulative)); + } - return Operand.Create(ExcelFunctions.WEIBULL(x, shape, scale, state)); + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Weibull"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func4.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); } } From 27deaa2b5079fdca42fa8103836f6e67a6c55e27 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 12:34:24 +0800 Subject: [PATCH 59/98] fix --- .../functions/mathsum2/Function_BESSELI.java | 4 +- .../functions/mathsum2/Function_BESSELJ.java | 4 +- .../functions/mathsum2/Function_BESSELK.java | 12 +- .../functions/mathsum2/Function_BESSELY.java | 12 +- .../functions/mathsum2/Function_BETADIST.java | 36 +++-- .../functions/mathsum2/Function_BETAINV.java | 40 +++--- .../mathsum2/Function_BINOMDIST.java | 44 +++---- .../functions/mathsum2/Function_ERF.java | 30 ++++- .../functions/mathsum2/Function_ERFC.java | 35 ++++- .../mathsum2/Function_EXPONDIST.java | 50 ++++--- .../functions/mathsum2/Function_FDIST.java | 36 +++-- .../functions/mathsum2/Function_FINV.java | 40 +++--- .../functions/mathsum2/Function_FISHER.java | 13 +- .../mathsum2/Function_FISHERINV.java | 9 +- .../mathsum2/Function_GAMMADIST.java | 43 +++--- .../functions/mathsum2/Function_GAMMAINV.java | 36 +++-- .../functions/mathsum2/Function_GAMMALN.java | 9 +- .../mathsum2/Function_HYPGEOMDIST.java | 55 ++++---- .../functions/mathsum2/Function_LOGINV.java | 32 ++--- .../mathsum2/Function_LOGNORMDIST.java | 34 ++--- .../mathsum2/Function_NEGBINOMDIST.java | 40 +++--- .../functions/mathsum2/Function_NORMDIST.java | 40 +++--- .../functions/mathsum2/Function_NORMINV.java | 35 ++--- .../mathsum2/Function_NORMSDIST.java | 10 +- .../functions/mathsum2/Function_NORMSINV.java | 14 +- .../functions/mathsum2/Function_TDIST.java | 31 ++--- .../functions/mathsum2/Function_TINV.java | 30 ++--- .../functions/mathsum2/Function_WEIBULL.java | 124 ++++++++++++++---- 28 files changed, 468 insertions(+), 430 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java index fc17ba1f1..fe201d0e4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java @@ -9,8 +9,8 @@ import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.MathEx; import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; public final class Function_BESSELI extends Function_2 { public Function_BESSELI(FunctionBase func1, FunctionBase func2) { @@ -38,7 +38,7 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } - Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } + if (args2.IsErrorOrNone()) return args2; - double x = args1.DoubleValue(); - double alpha = args2.DoubleValue(); - double beta = args3.DoubleValue(); + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) return args3; - if (alpha < 0.0 || beta < 0.0) { - return Operand.Error("Function '{0}' parameter is error!", "BetaDist"); + java.math.BigDecimal x = args1.NumberValue(); + if (x.compareTo(java.math.BigDecimal.ZERO) < 0 || x.compareTo(java.math.BigDecimal.ONE) > 0) { + return ParameterError(1); + } + java.math.BigDecimal alpha = args2.NumberValue(); + if (alpha.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(2); + } + java.math.BigDecimal beta = args3.NumberValue(); + if (beta.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(3); } return Operand.Create(ExcelFunctions.BetaDist(x, alpha, beta)); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java index 69ee35730..0c923eefe 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -13,10 +12,6 @@ import toolgood.algorithm.mathNet.ExcelFunctions; public final class Function_BETAINV extends Function_3 { - public Function_BETAINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); - } - public Function_BETAINV(FunctionBase[] funcs) { super(funcs); } @@ -29,30 +24,27 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } - Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } + if (args2.IsErrorOrNone()) return args2; - double p = args1.DoubleValue(); - double alpha = args2.DoubleValue(); - double beta = args3.DoubleValue(); + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) return args3; - if (alpha < 0.0 || beta < 0.0 || p < 0.0 || p > 1.0) { - return Operand.Error("Function '{0}' parameter is error!", "BetaInv"); + java.math.BigDecimal p = args1.NumberValue(); + if (p.compareTo(java.math.BigDecimal.ZERO) < 0 || p.compareTo(java.math.BigDecimal.ONE) > 0) { + return ParameterError(1); + } + java.math.BigDecimal alpha = args2.NumberValue(); + if (alpha.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(2); } - try { - return Operand.Create(ExcelFunctions.BetaInv(p, alpha, beta)); - } catch (Exception e) { - return Operand.Error("Function '{0}' parameter is error!", "BetaInv"); + java.math.BigDecimal beta = args3.NumberValue(); + if (beta.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(3); } + return Operand.Create(ExcelFunctions.BetaInv(p, alpha, beta)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java index ac6e26c9a..b0ce43a54 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -13,10 +12,6 @@ import toolgood.algorithm.mathNet.ExcelFunctions; public final class Function_BINOMDIST extends Function_4 { - public Function_BINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { - super(func1, func2, func3, func4); - } - public Function_BINOMDIST(FunctionBase[] funcs) { super(funcs); } @@ -29,31 +24,30 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } + if (args2.IsErrorOrNone()) return args2; + Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } - Operand args4 = GetBoolean_4(engine, tempParameter); - if (args4.IsErrorOrNone()) { - return args4; - } + if (args3.IsErrorOrNone()) return args3; - int numberS = args1.IntValue(); - int trials = args2.IntValue(); - double probabilityS = args3.DoubleValue(); - boolean cumulative = args4.BooleanValue(); + Operand args4 = GetBoolean_4(engine, tempParameter); + if (args4.IsErrorOrNone()) return args4; - if (probabilityS < 0.0 || probabilityS > 1.0 || trials < 0 || numberS < 0 || numberS > trials) { - return Operand.Error("Function '{0}' parameter is error!", "BinomDist"); + int n2 = args2.IntValue(); + if (n2 < 0) { + return ParameterError(2); + } + int k = args1.IntValue(); + if (k < 0 || k > n2) { + return ParameterError(1); + } + java.math.BigDecimal n3 = args3.NumberValue(); + if (n3.compareTo(java.math.BigDecimal.ZERO) < 0 || n3.compareTo(java.math.BigDecimal.ONE) > 0) { + return ParameterError(3); } - return Operand.Create(ExcelFunctions.BinomDist(numberS, trials, probabilityS, cumulative)); + return Operand.Create(ExcelFunctions.BinomDist(args1.IntValue(), n2, n3, args4.BooleanValue())); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java index 378a58f0c..77b9c8fd2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java @@ -10,13 +10,17 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.NoneEngine; -import toolgood.algorithm.mathNet.ExcelFunctions; +import toolgood.algorithm.system.MathEx; public final class Function_ERF extends Function_1 { public Function_ERF(FunctionBase func1) { super(func1); } + public Function_ERF(FunctionBase[] funcs) { + super(funcs); + } + @Override public String Name() { return "Erf"; @@ -28,9 +32,29 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction 0) { + return new BigDecimal(sign); + } + + BigDecimal t = BigDecimal.ONE.divide(BigDecimal.ONE.add(p.multiply(x)), java.math.MathContext.DECIMAL128); + BigDecimal y = BigDecimal.ONE.subtract((((((a5.multiply(t).add(a4)).multiply(t)).add(a3)).multiply(t).add(a2)).multiply(t).add(a1)).multiply(t).multiply(MathEx.Exp(x.negate().multiply(x)))); - double x = args1.DoubleValue(); - return Operand.Create(ExcelFunctions.Erf(x)); + return new BigDecimal(sign).multiply(y); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java index c112497eb..2729dccf7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java @@ -10,16 +10,20 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.NoneEngine; -import toolgood.algorithm.mathNet.ExcelFunctions; +import toolgood.algorithm.system.MathEx; public final class Function_ERFC extends Function_1 { public Function_ERFC(FunctionBase func1) { super(func1); } + public Function_ERFC(FunctionBase[] funcs) { + super(funcs); + } + @Override public String Name() { - return "ErfC"; + return "Erfc"; } @Override @@ -28,9 +32,32 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction 0) { + return BigDecimal.ZERO; + } + return BigDecimal.ONE.subtract(Erf(x)); + } + + private static BigDecimal Erf(BigDecimal x) { + final BigDecimal a1 = new BigDecimal("0.254829592"); + final BigDecimal a2 = new BigDecimal("-0.284496736"); + final BigDecimal a3 = new BigDecimal("1.421413741"); + final BigDecimal a4 = new BigDecimal("-1.453152027"); + final BigDecimal a5 = new BigDecimal("1.061405429"); + final BigDecimal p = new BigDecimal("0.3275911"); + + BigDecimal t = BigDecimal.ONE.divide(BigDecimal.ONE.add(p.multiply(x)), java.math.MathContext.DECIMAL128); + BigDecimal y = BigDecimal.ONE.subtract((((((a5.multiply(t).add(a4)).multiply(t)).add(a3)).multiply(t).add(a2)).multiply(t).add(a1)).multiply(t).multiply(MathEx.Exp(x.negate().multiply(x)))); - double x = args1.DoubleValue(); - return Operand.Create(ExcelFunctions.ErfC(x)); + return y; } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java index e4c6aff9f..0ba87d834 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java @@ -10,45 +10,53 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.NoneEngine; -import toolgood.algorithm.mathNet.ExcelFunctions; +import toolgood.algorithm.system.MathEx; public final class Function_EXPONDIST extends Function_3 { - public Function_EXPONDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); - } - public Function_EXPONDIST(FunctionBase[] funcs) { super(funcs); } @Override public String Name() { - return "ExponDist"; + return "ExpOnDist"; } @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } + if (args2.IsErrorOrNone()) return args2; + Operand args3 = GetBoolean_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } + if (args3.IsErrorOrNone()) return args3; - double x = args1.DoubleValue(); - double lambda = args2.DoubleValue(); - boolean cumulative = args3.BooleanValue(); + BigDecimal n1 = args1.NumberValue(); + if (n1.compareTo(BigDecimal.ZERO) < 0) { + return ParameterError(1); + } + BigDecimal rate = args2.NumberValue(); + if (rate.compareTo(BigDecimal.ZERO) <= 0) { + return ParameterError(2); + } + return Operand.Create(ExponDist(n1, rate, args3.BooleanValue())); + } - if (x < 0.0 || lambda <= 0.0) { - return Operand.Error("Function '{0}' parameter is error!", "ExponDist"); + public BigDecimal ExponDist(BigDecimal x, BigDecimal rate, boolean state) { + if (state) { + return CDF(rate, x); } - return Operand.Create(ExcelFunctions.ExponDist(x, lambda, cumulative)); + return PDF(rate, x); + } + + public BigDecimal PDF(BigDecimal rate, BigDecimal x) { + return x.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : rate.multiply(MathEx.Exp(rate.negate().multiply(x))); + } + + public BigDecimal CDF(BigDecimal rate, BigDecimal x) { + return x.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : BigDecimal.ONE.subtract(MathEx.Exp(rate.negate().multiply(x))); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java index 0a3243c94..a007d3605 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -13,10 +12,6 @@ import toolgood.algorithm.mathNet.ExcelFunctions; public final class Function_FDIST extends Function_3 { - public Function_FDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); - } - public Function_FDIST(FunctionBase[] funcs) { super(funcs); } @@ -29,26 +24,27 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } + if (args2.IsErrorOrNone()) return args2; + Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } + if (args3.IsErrorOrNone()) return args3; - double x = args1.DoubleValue(); - int degreesFreedom1 = args2.IntValue(); + java.math.BigDecimal x = args1.NumberValue(); + if (x.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(1); + } + int degreesFreedom = args2.IntValue(); + if (degreesFreedom <= 0) { + return ParameterError(2); + } int degreesFreedom2 = args3.IntValue(); - - if (degreesFreedom1 <= 0 || degreesFreedom2 <= 0 || x < 0) { - return Operand.Error("Function '{0}' parameter is error!", "FDist"); + if (degreesFreedom2 <= 0) { + return ParameterError(3); } - return Operand.Create(ExcelFunctions.FDist(x, degreesFreedom1, degreesFreedom2)); + return Operand.Create(ExcelFunctions.FDist(x, degreesFreedom, degreesFreedom2)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java index 5ea21f415..79e06af9b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -13,10 +12,6 @@ import toolgood.algorithm.mathNet.ExcelFunctions; public final class Function_FINV extends Function_3 { - public Function_FINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); - } - public Function_FINV(FunctionBase[] funcs) { super(funcs); } @@ -29,30 +24,27 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } - Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } + if (args2.IsErrorOrNone()) return args2; - double p = args1.DoubleValue(); - int degreesFreedom1 = args2.IntValue(); - int degreesFreedom2 = args3.IntValue(); + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) return args3; - if (degreesFreedom1 <= 0 || degreesFreedom2 <= 0 || p < 0.0 || p > 1.0) { - return Operand.Error("Function '{0}' parameter is error!", "FInv"); + java.math.BigDecimal p = args1.NumberValue(); + if (p.compareTo(java.math.BigDecimal.ZERO) <= 0 || p.compareTo(java.math.BigDecimal.ONE) >= 0) { + return ParameterError(1); } - try { - return Operand.Create(ExcelFunctions.FInv(p, degreesFreedom1, degreesFreedom2)); - } catch (Exception e) { - return Operand.Error("Function '{0}' parameter is error!", "FInv"); + int degreesFreedom = args2.IntValue(); + if (degreesFreedom <= 0) { + return ParameterError(2); + } + int degreesFreedom2 = args3.IntValue(); + if (degreesFreedom2 <= 0) { + return ParameterError(3); } + return Operand.Create(ExcelFunctions.FInv(p, degreesFreedom, degreesFreedom2)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java index 2f39895f3..d51d0a037 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java @@ -1,5 +1,6 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -9,6 +10,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; public final class Function_FISHER extends Function_1 { public Function_FISHER(FunctionBase func1) { @@ -26,13 +28,12 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction= 1) { - return Operand.Error("Function '{0}' parameter is error!", "Fisher"); + BigDecimal x = args1.NumberValue(); + if (x.compareTo(BigDecimal.ONE) >= 0 || x.compareTo(BigDecimal.ONE.negate()) <= 0) { + return ParameterError(1); } - double result = 0.5 * Math.log((1 + x) / (1 - x)); - return Operand.Create(result); + BigDecimal n = new BigDecimal("0.5").multiply(MathEx.Log(BigDecimal.ONE.add(x).divide(BigDecimal.ONE.subtract(x), java.math.MathContext.DECIMAL128))); + return Operand.Create(n); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java index c9433d090..f6df9327d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java @@ -1,5 +1,6 @@ package toolgood.algorithm.internals.functions.mathsum2; +import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -9,6 +10,7 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; public final class Function_FISHERINV extends Function_1 { public Function_FISHERINV(FunctionBase func1) { @@ -26,10 +28,9 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } + if (args2.IsErrorOrNone()) return args2; + Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } - Operand args4 = GetBoolean_4(engine, tempParameter); - if (args4.IsErrorOrNone()) { - return args4; - } + if (args3.IsErrorOrNone()) return args3; - double x = args1.DoubleValue(); - double alpha = args2.DoubleValue(); - double beta = args3.DoubleValue(); - boolean cumulative = args4.BooleanValue(); + Operand args4 = GetBoolean_4(engine, tempParameter); + if (args4.IsErrorOrNone()) return args4; - if (alpha <= 0.0 || beta <= 0.0 || x < 0) { - return Operand.Error("Function '{0}' parameter is error!", "GammaDist"); + java.math.BigDecimal x = args1.NumberValue(); + if (x.compareTo(java.math.BigDecimal.ZERO) < 0) { + return ParameterError(1); } + java.math.BigDecimal alpha = args2.NumberValue(); + if (alpha.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(2); + } + java.math.BigDecimal beta = args3.NumberValue(); + if (beta.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(3); + } + boolean cumulative = args4.BooleanValue(); return Operand.Create(ExcelFunctions.GammaDist(x, alpha, beta, cumulative)); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java index 7090bf387..2c5504222 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -13,10 +12,6 @@ import toolgood.algorithm.mathNet.ExcelFunctions; public final class Function_GAMMAINV extends Function_3 { - public Function_GAMMAINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); - } - public Function_GAMMAINV(FunctionBase[] funcs) { super(funcs); } @@ -29,24 +24,25 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } - Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } + if (args2.IsErrorOrNone()) return args2; - double probability = args1.DoubleValue(); - double alpha = args2.DoubleValue(); - double beta = args3.DoubleValue(); + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) return args3; - if (alpha <= 0.0 || beta <= 0.0 || probability < 0.0 || probability > 1.0) { - return Operand.Error("Function '{0}' parameter is error!", "GammaInv"); + java.math.BigDecimal probability = args1.NumberValue(); + if (probability.compareTo(java.math.BigDecimal.ZERO) < 0 || probability.compareTo(java.math.BigDecimal.ONE) > 0) { + return ParameterError(1); + } + java.math.BigDecimal alpha = args2.NumberValue(); + if (alpha.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(2); + } + java.math.BigDecimal beta = args3.NumberValue(); + if (beta.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(3); } return Operand.Create(ExcelFunctions.GammaInv(probability, alpha, beta)); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java index 5f518130f..b7dc22dfc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -28,12 +27,10 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } + if (args2.IsErrorOrNone()) return args2; + Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } - Operand args4 = GetNumber_4(engine, tempParameter); - if (args4.IsErrorOrNone()) { - return args4; - } + if (args3.IsErrorOrNone()) return args3; - int sampleS = args1.IntValue(); - int numberSample = args2.IntValue(); - int populationS = args3.IntValue(); - int numberPop = args4.IntValue(); + Operand args4 = GetNumber_4(engine, tempParameter); + if (args4.IsErrorOrNone()) return args4; - if (sampleS < 0 || numberSample < 0 || populationS < 0 || numberPop < 0 || - sampleS > numberSample || sampleS > populationS || numberSample > numberPop || populationS > numberPop) { - return Operand.Error("Function '{0}' parameter is error!", "HypgeomDist"); + int k = args1.IntValue(); + if (k < 0) { + return ParameterError(1); + } + int draws = args2.IntValue(); + if (draws < 0) { + return ParameterError(2); + } + int success = args3.IntValue(); + if (success < 0) { + return ParameterError(3); + } + int population = args4.IntValue(); + if (population < 0) { + return ParameterError(4); + } + if (k > draws) { + return ParameterError(1); + } + if (success > population || draws > population) { + return FunctionError(); } - return Operand.Create(ExcelFunctions.HypgeomDist(sampleS, numberSample, populationS, numberPop)); + return Operand.Create(ExcelFunctions.HypgeomDist(k, draws, success, population)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java index 456b83e22..f4e4a5802 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -13,10 +12,6 @@ import toolgood.algorithm.mathNet.ExcelFunctions; public final class Function_LOGINV extends Function_3 { - public Function_LOGINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); - } - public Function_LOGINV(FunctionBase[] funcs) { super(funcs); } @@ -29,26 +24,23 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; + if (args1.IsErrorOrNone()) return args1; + java.math.BigDecimal probability = args1.NumberValue(); + if (probability.compareTo(java.math.BigDecimal.ZERO) <= 0 || probability.compareTo(java.math.BigDecimal.ONE) >= 0) { + return ParameterError(1); } + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } - Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } + if (args2.IsErrorOrNone()) return args2; - double probability = args1.DoubleValue(); - double mean = args2.DoubleValue(); - double standardDev = args3.DoubleValue(); + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) return args3; - if (standardDev <= 0.0 || probability <= 0.0 || probability >= 1.0) { - return Operand.Error("Function '{0}' parameter is error!", "LogInv"); + java.math.BigDecimal n3 = args3.NumberValue(); + if (n3.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(3); } - return Operand.Create(ExcelFunctions.LogInv(probability, mean, standardDev)); + return Operand.Create(ExcelFunctions.LogInv(args1.NumberValue(), args2.NumberValue(), n3)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java index ddf8cfe24..9d4adccab 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -13,42 +12,35 @@ import toolgood.algorithm.mathNet.ExcelFunctions; public final class Function_LOGNORMDIST extends Function_3 { - public Function_LOGNORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); - } - public Function_LOGNORMDIST(FunctionBase[] funcs) { super(funcs); } @Override public String Name() { - return "LognormDist"; + return "LogNormDist"; } @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; + if (args1.IsErrorOrNone()) return args1; + java.math.BigDecimal x = args1.NumberValue(); + if (x.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(1); } + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } - Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } + if (args2.IsErrorOrNone()) return args2; - double x = args1.DoubleValue(); - double mean = args2.DoubleValue(); - double standardDev = args3.DoubleValue(); + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) return args3; - if (standardDev <= 0.0 || x <= 0.0) { - return Operand.Error("Function '{0}' parameter is error!", "LognormDist"); + java.math.BigDecimal n3 = args3.NumberValue(); + if (n3.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(3); } - return Operand.Create(ExcelFunctions.LognormDist(x, mean, standardDev)); + return Operand.Create(ExcelFunctions.LognormDist(args1.NumberValue(), args2.NumberValue(), n3)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java index 07ec20047..3260a2495 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -13,42 +12,39 @@ import toolgood.algorithm.mathNet.ExcelFunctions; public final class Function_NEGBINOMDIST extends Function_3 { - public Function_NEGBINOMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); - } - public Function_NEGBINOMDIST(FunctionBase[] funcs) { super(funcs); } @Override public String Name() { - return "NegbinomDist"; + return "NegBinomDist"; } @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } - Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } + if (args2.IsErrorOrNone()) return args2; - int numberF = args1.IntValue(); - int numberS = args2.IntValue(); - double probabilityS = args3.DoubleValue(); + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) return args3; - if (numberF < 0 || numberS < 1 || probabilityS < 0.0 || probabilityS > 1.0) { - return Operand.Error("Function '{0}' parameter is error!", "NegbinomDist"); + int k = args1.IntValue(); + if (k < 0) { + return ParameterError(1); + } + java.math.BigDecimal r = args2.NumberValue(); + if (r.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(2); + } + java.math.BigDecimal p = args3.NumberValue(); + if (p.compareTo(java.math.BigDecimal.ZERO) < 0 || p.compareTo(java.math.BigDecimal.ONE) > 0) { + return ParameterError(3); } - return Operand.Create(ExcelFunctions.NegbinomDist(numberF, numberS, probabilityS)); + return Operand.Create(ExcelFunctions.NegbinomDist(k, r, p)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java index 0559fa054..539fc9b4d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -13,10 +12,6 @@ import toolgood.algorithm.mathNet.ExcelFunctions; public final class Function_NORMDIST extends Function_4 { - public Function_NORMDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { - super(func1, func2, func3, func4); - } - public Function_NORMDIST(FunctionBase[] funcs) { super(funcs); } @@ -29,31 +24,26 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } + if (args2.IsErrorOrNone()) return args2; + Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } - Operand args4 = GetBoolean_4(engine, tempParameter); - if (args4.IsErrorOrNone()) { - return args4; - } + if (args3.IsErrorOrNone()) return args3; - double x = args1.DoubleValue(); - double mean = args2.DoubleValue(); - double standardDev = args3.DoubleValue(); - boolean cumulative = args4.BooleanValue(); + Operand args4 = GetBoolean_4(engine, tempParameter); + if (args4.IsErrorOrNone()) return args4; - if (standardDev <= 0.0) { - return Operand.Error("Function '{0}' parameter is error!", "NormDist"); + java.math.BigDecimal num = args1.NumberValue(); + java.math.BigDecimal avg = args2.NumberValue(); + java.math.BigDecimal STDEV = args3.NumberValue(); + if (STDEV.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(3); } - return Operand.Create(ExcelFunctions.NormDist(x, mean, standardDev, cumulative)); + boolean b = args4.BooleanValue(); + + return Operand.Create(ExcelFunctions.NormDist(num, avg, STDEV, b)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java index 2bc8f9cc3..12d5d4d90 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -13,10 +12,6 @@ import toolgood.algorithm.mathNet.ExcelFunctions; public final class Function_NORMINV extends Function_3 { - public Function_NORMINV(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); - } - public Function_NORMINV(FunctionBase[] funcs) { super(funcs); } @@ -29,26 +24,24 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } - Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } + if (args2.IsErrorOrNone()) return args2; - double probability = args1.DoubleValue(); - double mean = args2.DoubleValue(); - double standardDev = args3.DoubleValue(); + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) return args3; - if (standardDev <= 0.0 || probability <= 0.0 || probability >= 1.0) { - return Operand.Error("Function '{0}' parameter is error!", "NormInv"); + java.math.BigDecimal p = args1.NumberValue(); + if (p.compareTo(java.math.BigDecimal.ZERO) <= 0 || p.compareTo(java.math.BigDecimal.ONE) >= 0) { + return ParameterError(1); + } + java.math.BigDecimal avg = args2.NumberValue(); + java.math.BigDecimal STDEV = args3.NumberValue(); + if (STDEV.compareTo(java.math.BigDecimal.ZERO) <= 0) { + return ParameterError(3); } - return Operand.Create(ExcelFunctions.NormInv(probability, mean, standardDev)); + return Operand.Create(ExcelFunctions.NormInv(p, avg, STDEV)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java index b4477149f..b7a0413ea 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -25,12 +24,9 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } - - double z = args1.DoubleValue(); - return Operand.Create(ExcelFunctions.NormSDist(z)); + if (args1.IsErrorOrNone()) return args1; + java.math.BigDecimal num = args1.NumberValue(); + return Operand.Create(ExcelFunctions.NormSDist(num)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java index 8d58d94cb..20ac2e619 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -25,15 +24,12 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; + if (args1.IsErrorOrNone()) return args1; + java.math.BigDecimal p = args1.NumberValue(); + if (p.compareTo(java.math.BigDecimal.ZERO) <= 0 || p.compareTo(java.math.BigDecimal.ONE) >= 0) { + return ParameterError(1); } - - double probability = args1.DoubleValue(); - if (probability <= 0.0 || probability >= 1.0) { - return Operand.Error("Function '{0}' parameter is error!", "NormSInv"); - } - return Operand.Create(ExcelFunctions.NormSInv(probability)); + return Operand.Create(ExcelFunctions.NormSInv(p)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java index 927d934ff..f51e74399 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -29,30 +28,24 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } + if (args2.IsErrorOrNone()) return args2; + Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } + if (args3.IsErrorOrNone()) return args3; - double x = args1.DoubleValue(); + java.math.BigDecimal x = args1.NumberValue(); int degreesFreedom = args2.IntValue(); - int tails = args3.IntValue(); - - if (degreesFreedom < 1 || (tails != 1 && tails != 2)) { - return Operand.Error("Function '{0}' parameter is error!", "TDist"); + if (degreesFreedom <= 0) { + return ParameterError(2); } - try { - return Operand.Create(ExcelFunctions.TDist(x, degreesFreedom, tails)); - } catch (Exception e) { - return Operand.Error("Function '{0}' parameter is error!", "TDist"); + int tails = args3.IntValue(); + if (tails < 1 || tails > 2) { + return ParameterError(3); } + return Operand.Create(ExcelFunctions.TDist(x, degreesFreedom, tails)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java index 3d0f8456d..4978a0f3e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathsum2; -import java.math.BigDecimal; import java.util.List; import toolgood.algorithm.AlgorithmEngine; @@ -13,10 +12,6 @@ import toolgood.algorithm.mathNet.ExcelFunctions; public final class Function_TINV extends Function_2 { - public Function_TINV(FunctionBase func1, FunctionBase func2) { - super(func1, func2); - } - public Function_TINV(FunctionBase[] funcs) { super(funcs); } @@ -29,25 +24,20 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } - Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } + if (args1.IsErrorOrNone()) return args1; - double probability = args1.DoubleValue(); - int degreesFreedom = args2.IntValue(); + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) return args2; - if (degreesFreedom < 1 || probability <= 0.0 || probability > 1.0) { - return Operand.Error("Function '{0}' parameter is error!", "TInv"); + java.math.BigDecimal p = args1.NumberValue(); + if (p.compareTo(java.math.BigDecimal.ZERO) <= 0 || p.compareTo(java.math.BigDecimal.ONE) >= 0) { + return ParameterError(1); } - try { - return Operand.Create(ExcelFunctions.TInv(probability, degreesFreedom)); - } catch (Exception e) { - return Operand.Error("Function '{0}' parameter is error!", "TInv"); + int degreesFreedom = args2.IntValue(); + if (degreesFreedom <= 0) { + return ParameterError(2); } + return Operand.Create(ExcelFunctions.TInv(p, degreesFreedom)); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java index c2345e418..bdb38f969 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java @@ -2,6 +2,7 @@ import java.math.BigDecimal; import java.util.List; +import java.util.function.Supplier; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; @@ -10,13 +11,9 @@ import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_4; import toolgood.algorithm.internals.functions.NoneEngine; -import toolgood.algorithm.mathNet.ExcelFunctions; +import toolgood.algorithm.system.MathEx; public final class Function_WEIBULL extends Function_4 { - public Function_WEIBULL(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { - super(func1, func2, func3, func4); - } - public Function_WEIBULL(FunctionBase[] funcs) { super(funcs); } @@ -29,31 +26,112 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { - return args1; - } + if (args1.IsErrorOrNone()) return args1; + Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { - return args2; - } + if (args2.IsErrorOrNone()) return args2; + Operand args3 = GetNumber_3(engine, tempParameter); - if (args3.IsErrorOrNone()) { - return args3; - } + if (args3.IsErrorOrNone()) return args3; + Operand args4 = GetBoolean_4(engine, tempParameter); - if (args4.IsErrorOrNone()) { - return args4; + if (args4.IsErrorOrNone()) return args4; + + BigDecimal x = args1.NumberValue(); + BigDecimal shape = args2.NumberValue(); + if (shape.compareTo(BigDecimal.ZERO) <= 0) { + return ParameterError(2); + } + BigDecimal scale = args3.NumberValue(); + if (scale.compareTo(BigDecimal.ZERO) <= 0) { + return ParameterError(3); + } + boolean state = args4.BooleanValue(); + + return Operand.Create(Weibull(x, shape, scale, state)); + } + + public BigDecimal Weibull(BigDecimal x, BigDecimal shape, BigDecimal scale, boolean state) { + if (state == false) { + return PDF(shape, scale, x); + } + return CDF(shape, scale, x); + } + + public BigDecimal PDF(BigDecimal shape, BigDecimal scale, BigDecimal x) { + if (x.compareTo(BigDecimal.ZERO) >= 0) { + if (x.compareTo(BigDecimal.ZERO) == 0 && shape.compareTo(BigDecimal.ONE) == 0) { + return shape.divide(scale, java.math.MathContext.DECIMAL128); + } + + return shape + .multiply(MathEx.Pow(x.divide(scale, java.math.MathContext.DECIMAL128), shape.subtract(BigDecimal.ONE))) + .multiply(MathEx.Exp(MathEx.Pow(x, shape).multiply(MathEx.Pow(scale, shape.negate())).negate())) + .divide(scale, java.math.MathContext.DECIMAL128); + } + return BigDecimal.ZERO; + } + + public BigDecimal CDF(BigDecimal shape, BigDecimal scale, BigDecimal x) { + if (x.compareTo(BigDecimal.ZERO) < 0) { + return BigDecimal.ZERO; + } + + return ExponentialMinusOne(MathEx.Pow(x, shape).multiply(MathEx.Pow(scale, shape.negate())).negate()); + } + + public BigDecimal ExponentialMinusOne(BigDecimal power) { + BigDecimal x = power.abs(); + if (x.compareTo(new BigDecimal("0.1")) > 0) { + return MathEx.Exp(power).subtract(BigDecimal.ONE); + } + + if (x.compareTo(PositiveEpsilonOf(x)) < 0) { + return x; } - double x = args1.DoubleValue(); - double alpha = args2.DoubleValue(); - double beta = args3.DoubleValue(); - boolean cumulative = args4.BooleanValue(); + final int[] k = {0}; + final BigDecimal[] term = {BigDecimal.ONE}; + return Series(() -> { + k[0]++; + term[0] = term[0].multiply(power); + term[0] = term[0].divide(new BigDecimal(k[0]), java.math.MathContext.DECIMAL128); + return term[0]; + }); + } + + public BigDecimal PositiveEpsilonOf(BigDecimal value) { + return new BigDecimal("2").multiply(EpsilonOf(value)); + } + + public static BigDecimal EpsilonOf(BigDecimal value) { + if (value.compareTo(BigDecimal.ZERO) == 0) { + return new BigDecimal("0.0000000000000000000000000001"); + } - if (alpha <= 0.0 || beta <= 0.0 || x < 0) { - return Operand.Error("Function '{0}' parameter is error!", "Weibull"); + BigDecimal epsilon = new BigDecimal("0.0000000000000000000000000001"); + while (value.subtract(epsilon).compareTo(value) == 0) { + epsilon = epsilon.multiply(new BigDecimal("0.1")); } - return Operand.Create(ExcelFunctions.WEIBULL(x, alpha, beta, cumulative)); + return epsilon; + } + + BigDecimal Series(Supplier nextSummand) { + BigDecimal compensation = BigDecimal.ZERO; + BigDecimal current; + final BigDecimal factor = new BigDecimal(1 << 16); + + BigDecimal sum = nextSummand.get(); + + do { + current = nextSummand.get(); + BigDecimal y = current.subtract(compensation); + BigDecimal t = sum.add(y); + compensation = t.subtract(sum); + compensation = compensation.subtract(y); + sum = t; + } while (sum.abs().compareTo(current.abs().multiply(factor)) < 0); + return sum; } @Override From d20a22d2ca861c30042a0e2d84b460a7547ca3b8 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 12:38:57 +0800 Subject: [PATCH 60/98] fix --- .../algorithm/internals/RegexHelper.java | 54 +++++++++++++--- .../mathtransformation/Function_BIN2DEC.java | 62 +++++++++++++------ .../mathtransformation/Function_BIN2HEX.java | 61 ++++++++++-------- .../mathtransformation/Function_BIN2OCT.java | 61 ++++++++++-------- .../mathtransformation/Function_DEC2BIN.java | 56 ++++++++++------- .../mathtransformation/Function_DEC2HEX.java | 56 ++++++++++------- .../mathtransformation/Function_DEC2OCT.java | 56 ++++++++++------- .../mathtransformation/Function_HEX2BIN.java | 61 ++++++++++-------- .../mathtransformation/Function_HEX2DEC.java | 62 +++++++++++++------ .../mathtransformation/Function_HEX2OCT.java | 61 ++++++++++-------- .../mathtransformation/Function_OCT2BIN.java | 61 ++++++++++-------- .../mathtransformation/Function_OCT2DEC.java | 62 +++++++++++++------ .../mathtransformation/Function_OCT2HEX.java | 61 ++++++++++-------- 13 files changed, 489 insertions(+), 285 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java b/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java index 4e382bf8a..05df69d35 100644 --- a/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java +++ b/java/src/main/java/toolgood/algorithm/internals/RegexHelper.java @@ -7,7 +7,7 @@ public class RegexHelper { /** - * 十六进制正则表达�? + * 十六进制正则表达�? */ public static final Pattern HexRegex = Pattern.compile("^[0-9A-Fa-f]+$"); @@ -22,32 +22,32 @@ public class RegexHelper { public static final Pattern BinRegex = Pattern.compile("^[01]+$"); /** - * 日期时间正则表达�?(yyyy-MM-dd HH:mm:ss) + * 日期时间正则表达�?(yyyy-MM-dd HH:mm:ss) */ public static final Pattern dateTimeRegex = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$"); /** - * 日期时间正则表达�?(yyyy/MM/dd HH:mm:ss) + * 日期时间正则表达�?(yyyy/MM/dd HH:mm:ss) */ public static final Pattern dateTimeRegex2 = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d):([012345]?\\d)$"); /** - * 日期时间正则表达�?(yyyy-MM-dd HH:mm) + * 日期时间正则表达�?(yyyy-MM-dd HH:mm) */ public static final Pattern dateTimeRegex3 = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)$"); /** - * 日期时间正则表达�?(yyyy/MM/dd HH:mm) + * 日期时间正则表达�?(yyyy/MM/dd HH:mm) */ public static final Pattern dateTimeRegex4 = Pattern.compile("^(\\d{4})/(1[012]|0?\\d)/(30|31|[012]?\\d) ([01]?\\d|2[0123]):([012345]?\\d)$"); /** - * 日期正则表达�?(yyyy-MM-dd) + * 日期正则表达�?(yyyy-MM-dd) */ public static final Pattern dateRegex = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)$"); /** - * 日期正则表达�?(yyyy-MM-dd) + * 日期正则表达�?(yyyy-MM-dd) */ public static final Pattern dateRegex2 = Pattern.compile("^(\\d{4})-(1[012]|0?\\d)-(30|31|[012]?\\d)$"); @@ -62,12 +62,48 @@ public class RegexHelper { public static final Pattern dayTimeRegex2 = Pattern.compile("^(\\d+) (2[0123]|[01]?\\d):([012345]?\\d)$"); /** - * 时间正则表达�?(HH:mm:ss) + * 时间正则表达�?(HH:mm:ss) */ public static final Pattern timeRegex = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d):([012345]?\\d)$"); /** - * 时间正则表达�?(HH:mm) + * 时间正则表达式(HH:mm) */ public static final Pattern timeRegex2 = Pattern.compile("^(2[0123]|[01]?\\d):([012345]?\\d)$"); + + public static boolean IsHex(String value) { + if (value == null || value.isEmpty()) return false; + for (char c : value.toCharArray()) { + if (!IsHexChar(c)) return false; + } + return true; + } + + private static boolean IsHexChar(char c) { + return (c >= '0' && c <= '9') || (c >= 'A' && c <= 'F') || (c >= 'a' && c <= 'f'); + } + + public static boolean IsOct(String value) { + if (value == null || value.isEmpty()) return false; + for (char c : value.toCharArray()) { + if (!IsOctChar(c)) return false; + } + return true; + } + + private static boolean IsOctChar(char c) { + return c >= '0' && c <= '7'; + } + + public static boolean IsBin(String value) { + if (value == null || value.isEmpty()) return false; + for (char c : value.toCharArray()) { + if (!IsBinChar(c)) return false; + } + return true; + } + + private static boolean IsBinChar(char c) { + return c == '0' || c == '1'; + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java index b420a0d49..62c60bc3e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java @@ -1,35 +1,61 @@ package toolgood.algorithm.internals.functions.mathtransformation; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.RegexHelper; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.RegexHelper; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_BIN2DEC extends Function_1 { - public Function_BIN2DEC(FunctionBase func1) { - super(func1); +public final class Function_BIN2DEC extends Function_2 { + public Function_BIN2DEC(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "BIN2DEC"); - if (args1.IsError()) { - return args1; + public String Name() { + return "Bin2Dec"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + + if (RegexHelper.IsBin(args1.TextValue()) == false) { return ParameterError(1); } + int num = Integer.parseInt(args1.TextValue(), 2); + if (func2 != null) { + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); + } + String n = Integer.toString(num); + if (n.length() <= args2.IntValue()) { + return Operand.Create(n); } + return ParameterError(2); } + return Operand.Create(num); + } - if (!RegexHelper.BinRegex.matcher(args1.TextValue()).matches()) { - return Operand.Error("Function '{0}' parameter is error!", "BIN2DEC"); + @Override + public OperandType GetResultType() { + if (func2 != null) { + return OperandType.TEXT; } - int num = Integer.parseInt(args1.TextValue(), 2); - return Operand.Create(num); + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "BIN2DEC"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java index f6b9f28e4..196378e17 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java @@ -1,48 +1,57 @@ package toolgood.algorithm.internals.functions.mathtransformation; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.RegexHelper; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.RegexHelper; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_BIN2HEX extends Function_2 { - public Function_BIN2HEX(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_BIN2HEX extends Function_2 { + public Function_BIN2HEX(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "BIN2HEX", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Bin2Hex"; + } - if (!RegexHelper.BinRegex.matcher(args1.TextValue()).matches()) { - return Operand.Error("Function '{0}' parameter {1} is error!", "BIN2HEX", 1); - } + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + + if (RegexHelper.IsBin(args1.TextValue()) == false) { return ParameterError(1); } String num = Integer.toHexString(Integer.parseInt(args1.TextValue(), 2)).toUpperCase(); if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BIN2HEX", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); } if (num.length() <= args2.IntValue()) { return Operand.Create(num); } - return Operand.Error("Function '{0}' parameter {1} is error!", "BIN2HEX", 2); + return ParameterError(2); } return Operand.Create(num); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "BIN2HEX"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java index 53c4db3b5..82d559c61 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java @@ -1,48 +1,57 @@ package toolgood.algorithm.internals.functions.mathtransformation; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.RegexHelper; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.RegexHelper; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_BIN2OCT extends Function_2 { - public Function_BIN2OCT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_BIN2OCT extends Function_2 { + public Function_BIN2OCT(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "BIN2OCT", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Bin2Oct"; + } - if (!RegexHelper.BinRegex.matcher(args1.TextValue()).matches()) { - return Operand.Error("Function '{0}' parameter {1} is error!", "BIN2OCT", 1); - } + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + + if (RegexHelper.IsBin(args1.TextValue()) == false) { return ParameterError(1); } String num = Integer.toOctalString(Integer.parseInt(args1.TextValue(), 2)); if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "BIN2OCT", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); } if (num.length() <= args2.IntValue()) { return Operand.Create(num); } - return Operand.Error("Function '{0}' parameter {1} is error!", "BIN2OCT", 2); + return ParameterError(2); } return Operand.Create(num); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "BIN2OCT"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java index 983725ef1..e458121a2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java @@ -1,43 +1,55 @@ package toolgood.algorithm.internals.functions.mathtransformation; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_DEC2BIN extends Function_2 { - public Function_DEC2BIN(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_DEC2BIN extends Function_2 { + public Function_DEC2BIN(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2BIN", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Dec2Bin"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + String num = Integer.toBinaryString(args1.IntValue()); if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "DEC2BIN", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); } if (num.length() <= args2.IntValue()) { return Operand.Create(num); } - return Operand.Error("Function '{0}' parameter {1} is error!", "DEC2BIN", 2); + return ParameterError(2); } return Operand.Create(num); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "DEC2BIN"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java index 17763ff6f..532d630d8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java @@ -1,43 +1,55 @@ package toolgood.algorithm.internals.functions.mathtransformation; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_DEC2HEX extends Function_2 { - public Function_DEC2HEX(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_DEC2HEX extends Function_2 { + public Function_DEC2HEX(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2HEX", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Dec2Hex"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + String num = Integer.toHexString(args1.IntValue()).toUpperCase(); if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "DEC2HEX", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); } if (num.length() <= args2.IntValue()) { return Operand.Create(num); } - return Operand.Error("Function '{0}' parameter {1} is error!", "DEC2HEX", 2); + return ParameterError(2); } return Operand.Create(num); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "DEC2HEX"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java index a003233e0..7d3ca4909 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java @@ -1,43 +1,55 @@ package toolgood.algorithm.internals.functions.mathtransformation; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_DEC2OCT extends Function_2 { - public Function_DEC2OCT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_DEC2OCT extends Function_2 { + public Function_DEC2OCT(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "DEC2OCT", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Dec2Oct"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + String num = Integer.toOctalString(args1.IntValue()); if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "DEC2OCT", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); } if (num.length() <= args2.IntValue()) { return Operand.Create(num); } - return Operand.Error("Function '{0}' parameter {1} is error!", "DEC2OCT", 2); + return ParameterError(2); } return Operand.Create(num); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "DEC2OCT"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java index 9a5dc46f2..63c9e0c05 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java @@ -1,48 +1,57 @@ package toolgood.algorithm.internals.functions.mathtransformation; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.RegexHelper; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.RegexHelper; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_HEX2BIN extends Function_2 { - public Function_HEX2BIN(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_HEX2BIN extends Function_2 { + public Function_HEX2BIN(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HEX2BIN", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Hex2Bin"; + } - if (!RegexHelper.HexRegex.matcher(args1.TextValue()).matches()) { - return Operand.Error("Function '{0}' parameter {1} is error!", "HEX2BIN", 1); - } + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + + if (RegexHelper.IsHex(args1.TextValue()) == false) { return ParameterError(1); } String num = Integer.toBinaryString(Integer.parseInt(args1.TextValue(), 16)); if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "HEX2BIN", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); } if (num.length() <= args2.IntValue()) { return Operand.Create(num); } - return Operand.Error("Function '{0}' parameter {1} is error!", "HEX2BIN", 2); + return ParameterError(2); } return Operand.Create(num); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "HEX2BIN"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java index ca4712989..ef7c5b91d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java @@ -1,35 +1,61 @@ package toolgood.algorithm.internals.functions.mathtransformation; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.RegexHelper; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.RegexHelper; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_HEX2DEC extends Function_1 { - public Function_HEX2DEC(FunctionBase func1) { - super(func1); +public final class Function_HEX2DEC extends Function_2 { + public Function_HEX2DEC(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "HEX2DEC"); - if (args1.IsError()) { - return args1; + public String Name() { + return "Hex2Dec"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + + if (RegexHelper.IsHex(args1.TextValue()) == false) { return ParameterError(1); } + int num = Integer.parseInt(args1.TextValue(), 16); + if (func2 != null) { + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); + } + String n = Integer.toString(num); + if (n.length() <= args2.IntValue()) { + return Operand.Create(n); } + return ParameterError(2); } + return Operand.Create(num); + } - if (!RegexHelper.HexRegex.matcher(args1.TextValue()).matches()) { - return Operand.Error("Function '{0}' parameter is error!", "HEX2DEC"); + @Override + public OperandType GetResultType() { + if (func2 != null) { + return OperandType.TEXT; } - int num = Integer.parseInt(args1.TextValue(), 16); - return Operand.Create(num); + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "HEX2DEC"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java index 902443885..3f8ec485e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java @@ -1,48 +1,57 @@ package toolgood.algorithm.internals.functions.mathtransformation; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.RegexHelper; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.RegexHelper; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_HEX2OCT extends Function_2 { - public Function_HEX2OCT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_HEX2OCT extends Function_2 { + public Function_HEX2OCT(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "HEX2OCT", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Hex2Oct"; + } - if (!RegexHelper.HexRegex.matcher(args1.TextValue()).matches()) { - return Operand.Error("Function '{0}' parameter {1} is error!", "HEX2OCT", 1); - } + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + + if (RegexHelper.IsHex(args1.TextValue()) == false) { return ParameterError(1); } String num = Integer.toOctalString(Integer.parseInt(args1.TextValue(), 16)); if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "HEX2OCT", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); } if (num.length() <= args2.IntValue()) { return Operand.Create(num); } - return Operand.Error("Function '{0}' parameter {1} is error!", "HEX2OCT", 2); + return ParameterError(2); } return Operand.Create(num); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "HEX2OCT"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java index 2ad373a3f..59898c582 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java @@ -1,48 +1,57 @@ package toolgood.algorithm.internals.functions.mathtransformation; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.RegexHelper; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.RegexHelper; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_OCT2BIN extends Function_2 { - public Function_OCT2BIN(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_OCT2BIN extends Function_2 { + public Function_OCT2BIN(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "OCT2BIN", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Oct2Bin"; + } - if (!RegexHelper.OctRegex.matcher(args1.TextValue()).matches()) { - return Operand.Error("Function '{0}' parameter {1} is error!", "OCT2BIN", 1); - } + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + + if (RegexHelper.IsOct(args1.TextValue()) == false) { return ParameterError(1); } String num = Integer.toBinaryString(Integer.parseInt(args1.TextValue(), 8)); if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "OCT2BIN", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); } if (num.length() <= args2.IntValue()) { return Operand.Create(num); } - return Operand.Error("Function '{0}' parameter {1} is error!", "OCT2BIN", 2); + return ParameterError(2); } return Operand.Create(num); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "OCT2BIN"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java index 46247a635..2d9ea1041 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java @@ -1,35 +1,61 @@ package toolgood.algorithm.internals.functions.mathtransformation; -import toolgood.algorithm.internals.functions.Function_1; -import toolgood.algorithm.internals.RegexHelper; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.RegexHelper; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_OCT2DEC extends Function_1 { - public Function_OCT2DEC(FunctionBase func1) { - super(func1); +public final class Function_OCT2DEC extends Function_2 { + public Function_OCT2DEC(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "OCT2DEC"); - if (args1.IsError()) { - return args1; + public String Name() { + return "Oct2Dec"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + + if (RegexHelper.IsOct(args1.TextValue()) == false) { return ParameterError(1); } + int num = Integer.parseInt(args1.TextValue(), 8); + if (func2 != null) { + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); + } + String n = Integer.toString(num); + if (n.length() <= args2.IntValue()) { + return Operand.Create(n); } + return ParameterError(2); } + return Operand.Create(num); + } - if (!RegexHelper.OctRegex.matcher(args1.TextValue()).matches()) { - return Operand.Error("Function '{0}' parameter is error!", "OCT2DEC"); + @Override + public OperandType GetResultType() { + if (func2 != null) { + return OperandType.TEXT; } - int num = Integer.parseInt(args1.TextValue(), 8); - return Operand.Create(num); + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "OCT2DEC"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java index e6f13bacb..ebd783acc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java @@ -1,48 +1,57 @@ package toolgood.algorithm.internals.functions.mathtransformation; -import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.RegexHelper; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.RegexHelper; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_OCT2HEX extends Function_2 { - public Function_OCT2HEX(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_OCT2HEX extends Function_2 { + public Function_OCT2HEX(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "OCT2HEX", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Oct2Hex"; + } - if (!RegexHelper.OctRegex.matcher(args1.TextValue()).matches()) { - return Operand.Error("Function '{0}' parameter {1} is error!", "OCT2HEX", 1); - } + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + + if (RegexHelper.IsOct(args1.TextValue()) == false) { return ParameterError(1); } String num = Integer.toHexString(Integer.parseInt(args1.TextValue(), 8)).toUpperCase(); if (func2 != null) { - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "OCT2HEX", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); } if (num.length() <= args2.IntValue()) { return Operand.Create(num); } - return Operand.Error("Function '{0}' parameter {1} is error!", "OCT2HEX", 2); + return ParameterError(2); } return Operand.Create(num); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "OCT2HEX"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } From 9e7ee00326de55afcc302ccd5eeefbb50a780336 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 12:44:47 +0800 Subject: [PATCH 61/98] fix --- .../internals/functions/FunctionUtil.java | 2 +- .../functions/csharp/Function_JOIN.java | 4 +- .../csharp/Function_LOOKCEILING.java | 4 +- .../functions/csharp/Function_LOOKFLOOR.java | 4 +- .../mathtrigonometric/Function_ACOS.java | 42 +++++++++----- .../mathtrigonometric/Function_ACOSH.java | 42 +++++++++----- .../mathtrigonometric/Function_ACOT.java | 41 ++++++++------ .../mathtrigonometric/Function_ACOTH.java | 45 +++++++++------ .../mathtrigonometric/Function_ASIN.java | 42 +++++++++----- .../mathtrigonometric/Function_ASINH.java | 40 +++++++------ .../mathtrigonometric/Function_ATAN.java | 40 +++++++------ .../mathtrigonometric/Function_ATAN2.java | 56 +++++++++++-------- .../mathtrigonometric/Function_ATANH.java | 42 +++++++++----- .../mathtrigonometric/Function_COS.java | 40 +++++++------ .../mathtrigonometric/Function_COSH.java | 40 +++++++------ .../mathtrigonometric/Function_COT.java | 48 +++++++++------- .../mathtrigonometric/Function_COTH.java | 48 +++++++++------- .../mathtrigonometric/Function_CSC.java | 48 +++++++++------- .../mathtrigonometric/Function_CSCH.java | 48 +++++++++------- .../mathtrigonometric/Function_DEGREES.java | 42 ++++++++------ .../mathtrigonometric/Function_RADIANS.java | 41 ++++++++------ .../mathtrigonometric/Function_SEC.java | 48 +++++++++------- .../mathtrigonometric/Function_SECH.java | 46 ++++++++------- .../mathtrigonometric/Function_SIN.java | 40 +++++++------ .../mathtrigonometric/Function_SINH.java | 40 +++++++------ .../mathtrigonometric/Function_TAN.java | 43 +++++++++----- .../mathtrigonometric/Function_TANH.java | 40 +++++++------ 27 files changed, 610 insertions(+), 406 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java index 8e0852f06..9bf2aa196 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java @@ -72,7 +72,7 @@ public static boolean FlattenToList_Operand_BigDecimal(Operand args, List obj.IsNumber() ? obj : obj.ToNumber(null), obj -> obj.NumberValue()); } - public static boolean FlattenToList_String(Operand args, List list) { + public static boolean FlattenToList_Operand_String(Operand args, List list) { return FlattenToListCore(args, list, obj -> obj.ToText(null), obj -> obj.TextValue()); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java index 558c94d47..6d2d2ca2f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java @@ -39,7 +39,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction list = new ArrayList<>(args1.ArrayValue().size()); - boolean o = FunctionUtil.FlattenToList(args1, list); + boolean o = FunctionUtil.FlattenToList_Operand_String(args1, list); if (!o) { return ParameterError(1); } @@ -58,7 +58,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction list = new ArrayList<>(args.size()); for (int i = 1; i < args.size(); i++) { - boolean o = FunctionUtil.FlattenToList(args.get(i), list); + boolean o = FunctionUtil.FlattenToList_Operand_String(args.get(i), list); if (!o) { return ParameterError(i + 1); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java index 9da145339..f80046cea 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java @@ -15,7 +15,7 @@ import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.NoneEngine; -final class Function_LOOKCEILING extends Function_2 { +public final class Function_LOOKCEILING extends Function_2 { public Function_LOOKCEILING(FunctionBase[] funcs) { super(funcs); } @@ -34,7 +34,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction list = new ArrayList<>(); - FunctionUtil.FlattenToList(args2, list); + FunctionUtil.FlattenToList_Operand_BigDecimal(args2, list); if (list.isEmpty()) { return ParameterError(2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java index 046387865..f55234eca 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java @@ -15,7 +15,7 @@ import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.NoneEngine; -final class Function_LOOKFLOOR extends Function_2 { +public final class Function_LOOKFLOOR extends Function_2 { public Function_LOOKFLOOR(FunctionBase[] funcs) { super(funcs); } @@ -34,7 +34,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction list = new ArrayList<>(); - FunctionUtil.FlattenToList(args2, list); + FunctionUtil.FlattenToList_Operand_BigDecimal(args2, list); if (list.isEmpty()) { return ParameterError(2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java index 347740f6a..4d596b76e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java @@ -1,32 +1,44 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_ACOS extends Function_1 { +public final class Function_ACOS extends Function_1 { public Function_ACOS(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Acos"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Acos"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + java.math.BigDecimal x = args1.NumberValue(); + if (x.compareTo(java.math.BigDecimal.ONE) > 0 || x.compareTo(java.math.BigDecimal.ONE.negate()) < 0) { + return ParameterError(1); } - return Operand.Create(Math.acos(args1.DoubleValue())); + return Operand.Create(MathEx.Acos(x)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Acos"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java index 45bc2d46f..40d588f25 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java @@ -1,32 +1,44 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_ACOSH extends Function_1 { +public final class Function_ACOSH extends Function_1 { public Function_ACOSH(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Acosh"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Acosh"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + java.math.BigDecimal z = args1.NumberValue(); + if (z.compareTo(java.math.BigDecimal.ONE) < 0) { + return ParameterError(1); } - return Operand.Create(Math.acosh(args1.DoubleValue())); + return Operand.Create(MathEx.Acosh(z)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Acosh"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOT.java index 2a57f3b86..bd49cc1f7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOT.java @@ -1,33 +1,40 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_ACOT extends Function_1 { +public final class Function_ACOT extends Function_1 { public Function_ACOT(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Acot"); - if (args1.IsError()) { - return args1; - } - } - double value = args1.DoubleValue(); - return Operand.Create(Math.PI / 2.0 - Math.atan(value)); + public String Name() { + return "Acot"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + return Operand.Create(MathEx.PI.divide(new java.math.BigDecimal("2"), java.math.MathContext.DECIMAL128).subtract(MathEx.Atan(args1.NumberValue()))); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Acot"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOTH.java index 9c79216a5..a06244a10 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOTH.java @@ -1,36 +1,45 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_ACOTH extends Function_1 { +public final class Function_ACOTH extends Function_1 { public Function_ACOTH(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Acoth"); - if (args1.IsError()) { - return args1; - } - } - double d = args1.DoubleValue(); - if (Math.abs(d) <= 1) { + public String Name() { + return "Acoth"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + BigDecimal d = args1.NumberValue(); + if (d.abs().compareTo(BigDecimal.ONE) <= 0) { return ParameterError(1); } - return Operand.Create(0.5 * Math.log((d + 1) / (d - 1))); + return Operand.Create(new BigDecimal("0.5").multiply(MathEx.Log(d.add(BigDecimal.ONE).divide(d.subtract(BigDecimal.ONE), java.math.MathContext.DECIMAL128)))); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Acoth"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java index 0ccc8d4c9..1ec61d7b2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java @@ -1,32 +1,44 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_ASIN extends Function_1 { +public final class Function_ASIN extends Function_1 { public Function_ASIN(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Asin"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Asin"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + java.math.BigDecimal x = args1.NumberValue(); + if (x.compareTo(java.math.BigDecimal.ONE) > 0 || x.compareTo(java.math.BigDecimal.ONE.negate()) < 0) { + return ParameterError(1); } - return Operand.Create(Math.asin(args1.DoubleValue())); + return Operand.Create(MathEx.Asin(x)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Asin"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java index 4930b93d4..0844f8727 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java @@ -1,32 +1,40 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_ASINH extends Function_1 { +public final class Function_ASINH extends Function_1 { public Function_ASINH(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Asinh"); - if (args1.IsError()) { - return args1; - } - } - return Operand.Create(Math.asinh(args1.DoubleValue())); + public String Name() { + return "Asinh"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + return Operand.Create(MathEx.Asinh(args1.NumberValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Asinh"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java index bf34bce1a..be729a200 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java @@ -1,32 +1,40 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_ATAN extends Function_1 { +public final class Function_ATAN extends Function_1 { public Function_ATAN(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Atan"); - if (args1.IsError()) { - return args1; - } - } - return Operand.Create(Math.atan(args1.DoubleValue())); + public String Name() { + return "Atan"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + return Operand.Create(MathEx.Atan(args1.NumberValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Atan"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java index 41693fc1c..af164b87d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java @@ -1,39 +1,47 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_ATAN2 extends Function_2 { - public Function_ATAN2(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_ATAN2 extends Function_2 { + public Function_ATAN2(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Atan2"); - if (args1.IsError()) { - return args1; - } - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (!args2.IsNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter is error!", "Atan2"); - if (args2.IsError()) { - return args2; - } + public String Name() { + return "Atan2"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args1.NumberValue().compareTo(BigDecimal.ZERO) == 0 && args2.NumberValue().compareTo(BigDecimal.ZERO) == 0) { + return Div0Error(); } - return Operand.Create(Math.atan2(args1.DoubleValue(), args2.DoubleValue())); + return Operand.Create(MathEx.Atan2(args2.NumberValue(), args1.NumberValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Atan2"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java index 57a18ffec..87e74af69 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java @@ -1,32 +1,44 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_ATANH extends Function_1 { +public final class Function_ATANH extends Function_1 { public Function_ATANH(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Atanh"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Atanh"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + java.math.BigDecimal x = args1.NumberValue(); + if (x.compareTo(java.math.BigDecimal.ONE) >= 0 || x.compareTo(java.math.BigDecimal.ONE.negate()) <= 0) { + return ParameterError(1); } - return Operand.Create(Math.atanh(args1.DoubleValue())); + return Operand.Create(MathEx.Atanh(x)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Atanh"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java index df41f61f9..b1e417a4d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java @@ -1,32 +1,40 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_COS extends Function_1 { +public final class Function_COS extends Function_1 { public Function_COS(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Cos"); - if (args1.IsError()) { - return args1; - } - } - return Operand.Create(Math.cos(args1.DoubleValue())); + public String Name() { + return "Cos"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + return Operand.Create(MathEx.Cos(args1.NumberValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Cos"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java index 0aea32827..79abfc9a8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java @@ -1,32 +1,40 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_COSH extends Function_1 { +public final class Function_COSH extends Function_1 { public Function_COSH(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Cosh"); - if (args1.IsError()) { - return args1; - } - } - return Operand.Create(Math.cosh(args1.DoubleValue())); + public String Name() { + return "Cosh"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + return Operand.Create(MathEx.Cosh(args1.NumberValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Cosh"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java index fad1d14b8..c1d1e6b50 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java @@ -1,37 +1,45 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_COT extends Function_1 { +public final class Function_COT extends Function_1 { public Function_COT(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Cot"); - if (args1.IsError()) { - return args1; - } - } - double value = args1.DoubleValue(); - double tanValue = Math.tan(value); - if (tanValue == 0) { - return Operand.Create(Double.POSITIVE_INFINITY); + public String Name() { + return "Cot"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + BigDecimal d = MathEx.Tan(args1.NumberValue()); + if (d.compareTo(BigDecimal.ZERO) == 0) { + return Div0Error(); } - return Operand.Create(1.0 / tanValue); + return Operand.Create(BigDecimal.ONE.divide(d, java.math.MathContext.DECIMAL128)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Cot"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COTH.java index 45a873891..c89746f9c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COTH.java @@ -1,37 +1,45 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_COTH extends Function_1 { +public final class Function_COTH extends Function_1 { public Function_COTH(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Coth"); - if (args1.IsError()) { - return args1; - } - } - double value = args1.DoubleValue(); - double sinhValue = Math.sinh(value); - if (sinhValue == 0) { - return Operand.Create(Double.POSITIVE_INFINITY); + public String Name() { + return "Coth"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + BigDecimal d = MathEx.Sinh(args1.NumberValue()); + if (d.compareTo(BigDecimal.ZERO) == 0) { + return Div0Error(); } - return Operand.Create(Math.cosh(value) / sinhValue); + return Operand.Create(MathEx.Cosh(args1.NumberValue()).divide(d, java.math.MathContext.DECIMAL128)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Coth"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java index 98c7dc9a9..71299dc4a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java @@ -1,37 +1,45 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_CSC extends Function_1 { +public final class Function_CSC extends Function_1 { public Function_CSC(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Csc"); - if (args1.IsError()) { - return args1; - } - } - double value = args1.DoubleValue(); - double sinValue = Math.sin(value); - if (sinValue == 0) { - return Operand.Create(Double.POSITIVE_INFINITY); + public String Name() { + return "Csc"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + BigDecimal d = MathEx.Sin(args1.NumberValue()); + if (d.compareTo(BigDecimal.ZERO) == 0) { + return Div0Error(); } - return Operand.Create(1.0 / sinValue); + return Operand.Create(BigDecimal.ONE.divide(d, java.math.MathContext.DECIMAL128)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Csc"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSCH.java index 3fcb4637c..e5e7cc22d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSCH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSCH.java @@ -1,37 +1,45 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_CSCH extends Function_1 { +public final class Function_CSCH extends Function_1 { public Function_CSCH(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Csch"); - if (args1.IsError()) { - return args1; - } - } - double value = args1.DoubleValue(); - double sinhValue = Math.sinh(value); - if (sinhValue == 0) { - return Operand.Create(Double.POSITIVE_INFINITY); + public String Name() { + return "Csch"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + BigDecimal d = MathEx.Sinh(args1.NumberValue()); + if (d.compareTo(BigDecimal.ZERO) == 0) { + return Div0Error(); } - return Operand.Create(1.0 / sinhValue); + return Operand.Create(BigDecimal.ONE.divide(d, java.math.MathContext.DECIMAL128)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Csch"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java index 540b2ffa9..5a1c9370c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java @@ -1,32 +1,42 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_DEGREES extends Function_1 { +public final class Function_DEGREES extends Function_1 { public Function_DEGREES(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Degrees"); - if (args1.IsError()) { - return args1; - } - } - return Operand.Create(Math.toDegrees(args1.DoubleValue())); + public String Name() { + return "Degrees"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + java.math.BigDecimal z = args1.NumberValue(); + java.math.BigDecimal r = z.divide(MathEx.PI, java.math.MathContext.DECIMAL128).multiply(new java.math.BigDecimal("180")); + return Operand.Create(r); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Degrees"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java index c4e7e030e..68ce249ec 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java @@ -1,32 +1,41 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_RADIANS extends Function_1 { +public final class Function_RADIANS extends Function_1 { public Function_RADIANS(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Radians"); - if (args1.IsError()) { - return args1; - } - } - return Operand.Create(Math.toRadians(args1.DoubleValue())); + public String Name() { + return "Radians"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + java.math.BigDecimal r = args1.NumberValue().divide(new java.math.BigDecimal("180"), java.math.MathContext.DECIMAL128).multiply(MathEx.PI); + return Operand.Create(r); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Radians"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java index b159833c5..09196f9d3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java @@ -1,37 +1,45 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_SEC extends Function_1 { +public final class Function_SEC extends Function_1 { public Function_SEC(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sec"); - if (args1.IsError()) { - return args1; - } - } - double value = args1.DoubleValue(); - double cosValue = Math.cos(value); - if (cosValue == 0) { - return Operand.Create(Double.POSITIVE_INFINITY); + public String Name() { + return "Sec"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + BigDecimal d = MathEx.Cos(args1.NumberValue()); + if (d.compareTo(BigDecimal.ZERO) == 0) { + return Div0Error(); } - return Operand.Create(1.0 / cosValue); + return Operand.Create(BigDecimal.ONE.divide(d, java.math.MathContext.DECIMAL128)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Sec"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SECH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SECH.java index 54b5fcde2..858da7281 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SECH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SECH.java @@ -1,37 +1,41 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_SECH extends Function_1 { +public final class Function_SECH extends Function_1 { public Function_SECH(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sech"); - if (args1.IsError()) { - return args1; - } - } - double value = args1.DoubleValue(); - double coshValue = Math.cosh(value); - if (coshValue == 0) { - return Operand.Create(Double.POSITIVE_INFINITY); - } - return Operand.Create(1.0 / coshValue); + public String Name() { + return "Sech"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + return Operand.Create(BigDecimal.ONE.divide(MathEx.Cosh(args1.NumberValue()), java.math.MathContext.DECIMAL128)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Sech"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java index 5c7bba6ae..ea843b1f3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java @@ -1,32 +1,40 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_SIN extends Function_1 { +public final class Function_SIN extends Function_1 { public Function_SIN(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sin"); - if (args1.IsError()) { - return args1; - } - } - return Operand.Create(Math.sin(args1.DoubleValue())); + public String Name() { + return "Sin"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + return Operand.Create(MathEx.Sin(args1.NumberValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Sin"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java index 5d4201611..b0bb893a1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java @@ -1,32 +1,40 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_SINH extends Function_1 { +public final class Function_SINH extends Function_1 { public Function_SINH(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Sinh"); - if (args1.IsError()) { - return args1; - } - } - return Operand.Create(Math.sinh(args1.DoubleValue())); + public String Name() { + return "Sinh"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + return Operand.Create(MathEx.Sinh(args1.NumberValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Sinh"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java index e5b567435..8da78a856 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java @@ -1,32 +1,45 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_TAN extends Function_1 { +public final class Function_TAN extends Function_1 { public Function_TAN(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Tan"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Tan"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + BigDecimal cos = MathEx.Cos(args1.NumberValue()); + if (cos.compareTo(BigDecimal.ZERO) == 0) { + return Div0Error(); } - return Operand.Create(Math.tan(args1.DoubleValue())); + return Operand.Create(MathEx.Sin(args1.NumberValue()).divide(cos, java.math.MathContext.DECIMAL128)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Tan"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java index 68092ecf0..0fd16dee0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java @@ -1,32 +1,40 @@ package toolgood.algorithm.internals.functions.mathtrigonometric; -import java.lang.StringBuilder; -import java.util.function.BiFunction; +import java.util.List; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; +import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.system.MathEx; -class Function_TANH extends Function_1 { +public final class Function_TANH extends Function_1 { public Function_TANH(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (!args1.IsNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Tanh"); - if (args1.IsError()) { - return args1; - } - } - return Operand.Create(Math.tanh(args1.DoubleValue())); + public String Name() { + return "Tanh"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + return Operand.Create(MathEx.Tanh(args1.NumberValue())); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Tanh"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } From a6549e3ef3a52b0b762676c60543d9c8af175054 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 12:51:54 +0800 Subject: [PATCH 62/98] fix --- .../internals/functions/FunctionBase.java | 6 +- .../internals/functions/Function_1.java | 10 +- .../internals/functions/Function_2.java | 13 +- .../internals/functions/Function_3.java | 13 +- .../internals/functions/Function_4.java | 13 +- .../internals/functions/Function_5.java | 13 +- .../internals/functions/Function_6.java | 13 +- .../internals/functions/Function_N.java | 15 +- .../functions/mathbase/Function_ROUND.java | 1 - .../functions/mathsum/Function_AVERAGEIF.java | 7 +- .../functions/mathsum/Function_COUNT.java | 2 +- .../functions/mathsum/Function_COUNTIF.java | 7 +- .../mathsum/Function_PERCENTILE.java | 2 +- .../functions/mathsum/Function_QUARTILE.java | 2 +- .../functions/mathsum/Function_SUMIF.java | 5 +- .../functions/operator/Function_Add.java | 157 ++++------------- .../functions/operator/Function_Div.java | 134 ++++----------- .../functions/operator/Function_Mod.java | 125 ++++---------- .../functions/operator/Function_Mul.java | 159 ++++-------------- .../functions/operator/Function_OR.java | 64 ++++--- 20 files changed, 235 insertions(+), 526 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java index e205ea130..72effaf3a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionBase.java @@ -32,13 +32,15 @@ public String Name() { * @param work * @param tempParameter 临时参数,未找到返回null * @return + * @throws Exception */ - public abstract Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter); + public abstract Operand Evaluate(AlgorithmEngine work, BiFunction tempParameter) throws Exception; /** * 进行计算(无临时参数�? + * @throws Exception */ - public Operand Evaluate(AlgorithmEngine work) { + public Operand Evaluate(AlgorithmEngine work) throws Exception { return Evaluate(work, null); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java index b6d54d5fc..47faa2b50 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_1.java @@ -42,31 +42,31 @@ public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { } - protected Operand GetText_1(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetText_1(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsText()) return args1; return ConvertToText(args1, 1); } - protected Operand GetNumber_1(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetNumber_1(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsNumber()) return args1; return ConvertToNumber(args1, 1); } - protected Operand GetDate_1(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetDate_1(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsDate()) return args1; return ConvertToDate(args1, 1); } - protected Operand GetBoolean_1(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetBoolean_1(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsBoolean()) return args1; return ConvertToBoolean(args1, 1); } - protected Operand GetArray_1(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetArray_1(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsArray()) return args1; return ConvertToArray(args1, 1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java index 9261e6246..62dfff597 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_2.java @@ -1,13 +1,10 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; -import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; -import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.ParameterType; public abstract class Function_2 extends Function_1 { protected FunctionBase func2; @@ -36,31 +33,31 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(')'); } - protected Operand GetText_2(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetText_2(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args2 = func2.Evaluate(engine, tempParameter); if (args2.IsText()) return args2; return ConvertToText(args2, 2); } - protected Operand GetNumber_2(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetNumber_2(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args2 = func2.Evaluate(engine, tempParameter); if (args2.IsNumber()) return args2; return ConvertToNumber(args2, 2); } - protected Operand GetDate_2(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetDate_2(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args2 = func2.Evaluate(engine, tempParameter); if (args2.IsDate()) return args2; return ConvertToDate(args2, 2); } - protected Operand GetBoolean_2(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetBoolean_2(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args2 = func2.Evaluate(engine, tempParameter); if (args2.IsBoolean()) return args2; return ConvertToBoolean(args2, 2); } - protected Operand GetArray_2(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetArray_2(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args2 = func2.Evaluate(engine, tempParameter); if (args2.IsArray()) return args2; return ConvertToArray(args2, 2); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java index dc5cc2991..06ff5e332 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_3.java @@ -1,13 +1,10 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; -import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; -import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.ParameterType; public abstract class Function_3 extends Function_2 { protected FunctionBase func3; @@ -35,31 +32,31 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(')'); } - protected Operand GetText_3(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetText_3(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args3 = func3.Evaluate(engine, tempParameter); if (args3.IsText()) return args3; return ConvertToText(args3, 3); } - protected Operand GetNumber_3(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetNumber_3(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args3 = func3.Evaluate(engine, tempParameter); if (args3.IsNumber()) return args3; return ConvertToNumber(args3, 3); } - protected Operand GetDate_3(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetDate_3(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args3 = func3.Evaluate(engine, tempParameter); if (args3.IsDate()) return args3; return ConvertToDate(args3, 3); } - protected Operand GetBoolean_3(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetBoolean_3(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args3 = func3.Evaluate(engine, tempParameter); if (args3.IsBoolean()) return args3; return ConvertToBoolean(args3, 3); } - protected Operand GetArray_3(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetArray_3(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args3 = func3.Evaluate(engine, tempParameter); if (args3.IsArray()) return args3; return ConvertToArray(args3, 3); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java index 0b204d597..a35d96e4b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_4.java @@ -1,13 +1,10 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; -import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; -import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.ParameterType; public abstract class Function_4 extends Function_3 { protected FunctionBase func4; @@ -39,31 +36,31 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(')'); } - protected Operand GetText_4(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetText_4(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args4 = func4.Evaluate(engine, tempParameter); if (args4.IsText()) return args4; return ConvertToText(args4, 4); } - protected Operand GetNumber_4(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetNumber_4(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args4 = func4.Evaluate(engine, tempParameter); if (args4.IsNumber()) return args4; return ConvertToNumber(args4, 4); } - protected Operand GetDate_4(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetDate_4(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args4 = func4.Evaluate(engine, tempParameter); if (args4.IsDate()) return args4; return ConvertToDate(args4, 4); } - protected Operand GetBoolean_4(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetBoolean_4(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args4 = func4.Evaluate(engine, tempParameter); if (args4.IsBoolean()) return args4; return ConvertToBoolean(args4, 4); } - protected Operand GetArray_4(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetArray_4(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args4 = func4.Evaluate(engine, tempParameter); if (args4.IsArray()) return args4; return ConvertToArray(args4, 4); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_5.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_5.java index fd75dda90..e921b7380 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_5.java @@ -1,13 +1,10 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; -import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; -import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.ParameterType; public abstract class Function_5 extends Function_4 { protected FunctionBase func5; @@ -43,31 +40,31 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(')'); } - protected Operand GetText_5(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetText_5(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args5 = func5.Evaluate(engine, tempParameter); if (args5.IsText()) return args5; return ConvertToText(args5, 5); } - protected Operand GetNumber_5(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetNumber_5(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args5 = func5.Evaluate(engine, tempParameter); if (args5.IsNumber()) return args5; return ConvertToNumber(args5, 5); } - protected Operand GetDate_5(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetDate_5(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args5 = func5.Evaluate(engine, tempParameter); if (args5.IsDate()) return args5; return ConvertToDate(args5, 5); } - protected Operand GetBoolean_5(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetBoolean_5(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args5 = func5.Evaluate(engine, tempParameter); if (args5.IsBoolean()) return args5; return ConvertToBoolean(args5, 5); } - protected Operand GetArray_5(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetArray_5(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args5 = func5.Evaluate(engine, tempParameter); if (args5.IsArray()) return args5; return ConvertToArray(args5, 5); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_6.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_6.java index 3c4e7319b..3e7ebf2cf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_6.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_6.java @@ -1,13 +1,10 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; -import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; -import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.ParameterType; public abstract class Function_6 extends Function_5 { protected FunctionBase func6; @@ -47,31 +44,31 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(')'); } - protected Operand GetText_6(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetText_6(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args6 = func6.Evaluate(engine, tempParameter); if (args6.IsText()) return args6; return ConvertToText(args6, 6); } - protected Operand GetNumber_6(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetNumber_6(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args6 = func6.Evaluate(engine, tempParameter); if (args6.IsNumber()) return args6; return ConvertToNumber(args6, 6); } - protected Operand GetDate_6(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetDate_6(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args6 = func6.Evaluate(engine, tempParameter); if (args6.IsDate()) return args6; return ConvertToDate(args6, 6); } - protected Operand GetBoolean_6(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetBoolean_6(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args6 = func6.Evaluate(engine, tempParameter); if (args6.IsBoolean()) return args6; return ConvertToBoolean(args6, 6); } - protected Operand GetArray_6(AlgorithmEngine engine, BiFunction tempParameter) { + protected Operand GetArray_6(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args6 = func6.Evaluate(engine, tempParameter); if (args6.IsArray()) return args6; return ConvertToArray(args6, 6); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java index 51499d11f..a96032f2b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/Function_N.java @@ -1,14 +1,11 @@ package toolgood.algorithm.internals.functions; import java.lang.StringBuilder; -import java.util.ArrayList; import java.util.List; import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; -import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.ParameterType; public abstract class Function_N extends FunctionBase { protected FunctionBase[] funcs; @@ -34,7 +31,7 @@ protected void AddFunction(StringBuilder stringBuilder, String functionName) { stringBuilder.append(')'); } - protected Operand TryEvaluateAll(AlgorithmEngine engine, BiFunction tempParameter, List args) { + protected Operand TryEvaluateAll(AlgorithmEngine engine, BiFunction tempParameter, List args) throws Exception { for (int i = 0; i < funcs.length; i++) { Operand aa = funcs[i].Evaluate(engine, tempParameter); if (aa.IsError() || aa.IsNone()) { @@ -45,31 +42,31 @@ protected Operand TryEvaluateAll(AlgorithmEngine engine, BiFunction tempParameter, int idx) { + protected Operand GetText(AlgorithmEngine engine, BiFunction tempParameter, int idx) throws Exception { Operand args1 = funcs[idx].Evaluate(engine, tempParameter); if (args1.IsText()) return args1; return ConvertToText(args1, idx); } - protected Operand GetNumber(AlgorithmEngine engine, BiFunction tempParameter, int idx) { + protected Operand GetNumber(AlgorithmEngine engine, BiFunction tempParameter, int idx) throws Exception { Operand args1 = funcs[idx].Evaluate(engine, tempParameter); if (args1.IsNumber()) return args1; return ConvertToNumber(args1, idx); } - protected Operand GetDate(AlgorithmEngine engine, BiFunction tempParameter, int idx) { + protected Operand GetDate(AlgorithmEngine engine, BiFunction tempParameter, int idx) throws Exception { Operand args1 = funcs[idx].Evaluate(engine, tempParameter); if (args1.IsDate()) return args1; return ConvertToDate(args1, idx); } - protected Operand GetBoolean(AlgorithmEngine engine, BiFunction tempParameter, int idx) { + protected Operand GetBoolean(AlgorithmEngine engine, BiFunction tempParameter, int idx) throws Exception { Operand args1 = funcs[idx].Evaluate(engine, tempParameter); if (args1.IsBoolean()) return args1; return ConvertToBoolean(args1, idx); } - protected Operand GetArray(AlgorithmEngine engine, BiFunction tempParameter, int idx) { + protected Operand GetArray(AlgorithmEngine engine, BiFunction tempParameter, int idx) throws Exception { Operand args1 = funcs[idx].Evaluate(engine, tempParameter); if (args1.IsArray()) return args1; return ConvertToArray(args1, idx); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java index 825900d81..80fb70a7a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java @@ -1,6 +1,5 @@ package toolgood.algorithm.internals.functions.mathbase; -import java.math.BigDecimal; import java.math.RoundingMode; import java.util.List; import java.util.function.BiFunction; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java index bf6482a88..69f1c64fc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java @@ -12,6 +12,7 @@ import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.internals.functions.Tuple; public final class Function_AVERAGEIF extends Function_3 { public Function_AVERAGEIF(FunctionBase[] funcs) { @@ -67,10 +68,10 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction m2 = FunctionUtil.ParseSumIfMatch(text); if (m2 != null) { - count = FunctionUtil.GetCountIf(list, (String) m2[0], (BigDecimal) m2[1]); - sum = FunctionUtil.GetSumIf(list, (String) m2[0], (BigDecimal) m2[1], sumdbs); + count = FunctionUtil.GetCountIf(list, m2.getItem1(), m2.getItem2()); + sum = FunctionUtil.GetSumIf(list, m2.getItem1(), m2.getItem2(), sumdbs); } else { return ParameterError(2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java index 22b609504..8a4643abf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java @@ -31,7 +31,7 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction list = new ArrayList<>(); - boolean o = FunctionUtil.FlattenToList(args, list); + boolean o = FunctionUtil.FlattenToList_Operand(args, list); if (o == false) { return FunctionError(); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java index d976d455e..4888a8f76 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java @@ -12,6 +12,7 @@ import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_2; import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.internals.functions.Tuple; public final class Function_COUNTIF extends Function_2 { public Function_COUNTIF(FunctionBase[] funcs) { @@ -36,7 +37,7 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction list = new ArrayList<>(); - boolean o = FunctionUtil.FlattenToList(args1, list); + boolean o = FunctionUtil.FlattenToList_Operand_BigDecimal(args1, list); if (o == false) { return ParameterError(1); } @@ -49,9 +50,9 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction m2 = FunctionUtil.ParseSumIfMatch(text); if (m2 != null) { - count = FunctionUtil.GetCountIf(list, (String) m2[0], (BigDecimal) m2[1]); + count = FunctionUtil.GetCountIf(list, m2.getItem1(), m2.getItem2()); } else { return ParameterError(2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java index 1605107c8..edb9a062c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTILE.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetArray_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java index 2114ed8ec..e4a8d32ce 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_QUARTILE.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetArray_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java index 99e4e7e37..b4026e937 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java @@ -12,6 +12,7 @@ import toolgood.algorithm.internals.functions.FunctionUtil; import toolgood.algorithm.internals.functions.Function_3; import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.internals.functions.Tuple; public final class Function_SUMIF extends Function_3 { public Function_SUMIF(FunctionBase[] funcs) { @@ -64,9 +65,9 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction m2 = FunctionUtil.ParseSumIfMatch(text); if (m2 != null) { - sum = FunctionUtil.GetSumIf(list, (String) m2[0], (BigDecimal) m2[1], sumdbs); + sum = FunctionUtil.GetSumIf(list, m2.getItem1(), m2.getItem2(), sumdbs); } else { return ParameterError(2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java index d6c1e5da9..381e64607 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java @@ -1,145 +1,56 @@ package toolgood.algorithm.internals.functions.operator; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Locale; +import java.util.List; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.operands.MyDate; -import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_Add extends Function_2 { + public Function_Add(FunctionBase[] funcs) { + super(funcs); + } -public class Function_Add extends Function_2 { public Function_Add(FunctionBase func1, FunctionBase func2) { super(func1, func2); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { - return args1; - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsError()) { - return args2; - } - - if (args1.IsNumber() && args2.IsNumber()) { // 优化性能 - if (args1.DoubleValue() == 0) { - return args2; - } - if (args2.DoubleValue() == 0) { - return args1; - } - return Operand.Create(args1.DoubleValue() + args2.DoubleValue()); - } - if (args1.IsNull()) { - return Operand.Error("Function '{0}' parameter {1} is NULL!", "+", 1); - } - if (args2.IsNull()) { - return Operand.Error("Function '{0}' parameter {1} is NULL!", "+", 2); - } - - if (args1.IsText()) { - try { - double d = Double.parseDouble(args1.TextValue()); - args1 = Operand.Create(d); - } catch (NumberFormatException e1) { - Boolean b = FunctionUtil.TryParseBoolean(args1.TextValue()); - if (b != null) { - args1 = b ? Operand.ONE : Operand.ZERO; - } else { - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); - java.util.Date dt = sdf.parse(args1.TextValue()); - args1 = Operand.Create(new MyDate(dt)); - } catch (ParseException e2) { - return Operand.Error("Function '{0}' is error!", "+"); - } - } - } - } - if (args2.IsText()) { - try { - double d = Double.parseDouble(args2.TextValue()); - args2 = Operand.Create(d); - } catch (NumberFormatException e1) { - Boolean b = FunctionUtil.TryParseBoolean(args2.TextValue()); - if (b != null) { - args2 = b ? Operand.ONE : Operand.ZERO; - } else { - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); - java.util.Date dt = sdf.parse(args2.TextValue()); - args2 = Operand.Create(new MyDate(dt)); - } catch (ParseException e2) { - return Operand.Error("Function '{0}' is error!", "+"); - } - } - } - } - if (args1.IsDate()) { - if (args2.IsDate()) { - return Operand.Create(args1.DateValue().add(args2.DateValue())); - } - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "+", 2); - if (args2.IsError()) { - return args2; - } - } - if (args2.DoubleValue() == 0) { - return args1; - } - return Operand.Create(args1.DateValue().add(args2.DoubleValue())); - } else if (args2.IsDate()) { - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "+", 1); - if (args1.IsError()) { - return args1; - } - } - if (args1.DoubleValue() == 0) { - return args2; - } - return Operand.Create(args2.DateValue().add(args1.DoubleValue())); - } - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "+", 1); - if (args1.IsError()) { - return args1; - } - } - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "+", 2); - if (args2.IsError()) { - return args2; - } - } + public String Name() { + return "+"; + } - if (args1.DoubleValue() == 0) { - return args2; - } - if (args2.DoubleValue() == 0) { - return args1; - } + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } - return Operand.Create(args1.DoubleValue() + args2.DoubleValue()); + return Operand.Create(args1.NumberValue().add(args2.NumberValue())); } @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if (addBrackets) { - stringBuilder.append('('); - } + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, false); stringBuilder.append(" + "); func2.toString(stringBuilder, false); - if (addBrackets) { - stringBuilder.append(')'); - } + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java index cbae5f6ce..4371fdfad 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java @@ -1,120 +1,60 @@ package toolgood.algorithm.internals.functions.operator; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Locale; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_Div extends Function_2 { + public Function_Div(FunctionBase[] funcs) { + super(funcs); + } -public class Function_Div extends Function_2 { public Function_Div(FunctionBase func1, FunctionBase func2) { super(func1, func2); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { - return args1; - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsError()) { - return args2; - } + public String Name() { + return "/"; + } - if (args1.IsNumber() && args2.IsNumber()) { // 优化性能 - if (args2.DoubleValue() == 1) { - return args1; - } - if (args2.DoubleValue() == 0) { - return Operand.Error("Function '{0}' div 0 is error!", "/"); - } - return Operand.Create(args1.DoubleValue() / args2.DoubleValue()); - } - if (args1.IsNull()) { - return Operand.Error("Function '{0}' parameter {1} is NULL!", "/", 1); - } - if (args2.IsNull()) { - return Operand.Error("Function '{0}' parameter {1} is NULL!", "/", 2); - } + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } - if (args1.IsText()) { - try { - double d = Double.parseDouble(args1.TextValue()); - args1 = Operand.Create(d); - } catch (NumberFormatException e1) { - Boolean b = FunctionUtil.TryParseBoolean(args1.TextValue()); - if (b != null) { - args1 = b ? Operand.ONE : Operand.ZERO; - } else { - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); - java.util.Date dt = sdf.parse(args1.TextValue()); - args1 = Operand.Create(new MyDate(dt)); - } catch (ParseException e2) { - return Operand.Error("Function '{0}' Two types cannot be divided!", "/"); - } - } - } - } - if (args2.IsText()) { - try { - double d = Double.parseDouble(args2.TextValue()); - args2 = Operand.Create(d); - } catch (NumberFormatException e1) { - Boolean b = FunctionUtil.TryParseBoolean(args2.TextValue()); - if (b != null) { - args2 = b ? Operand.ONE : Operand.ZERO; - } else { - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); - java.util.Date dt = sdf.parse(args2.TextValue()); - args2 = Operand.Create(new MyDate(dt)); - } catch (ParseException e2) { - return Operand.Error("Function '{0}' Two types cannot be divided!", "/"); - } - } - } - } - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "/", 2); - if (args2.IsError()) { - return args2; - } - } - if (args2.DoubleValue() == 0) { - return Operand.Error("Function '{0}' div 0 is error!", "/"); - } - if (args2.DoubleValue() == 1) { - return args1; - } + if (args2.NumberValue().compareTo(BigDecimal.ZERO) == 0) { return Div0Error(); } + if (args2.NumberValue().compareTo(BigDecimal.ONE) == 0) { return args1; } - if (args1.IsDate()) { - return Operand.Create(args1.DateValue().divide(args2.DoubleValue())); - } - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "/", 1); - if (args1.IsError()) { - return args1; - } - } - return Operand.Create(args1.DoubleValue() / args2.DoubleValue()); + return Operand.Create(args1.NumberValue().divide(args2.NumberValue(), java.math.MathContext.DECIMAL128)); } @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if (addBrackets) { - stringBuilder.append('('); - } + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, true); stringBuilder.append(" / "); func2.toString(stringBuilder, true); - if (addBrackets) { - stringBuilder.append(')'); - } + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java index 1516d04cc..677acd413 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java @@ -1,112 +1,59 @@ package toolgood.algorithm.internals.functions.operator; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Locale; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_Mod extends Function_2 { + public Function_Mod(FunctionBase[] funcs) { + super(funcs); + } -public class Function_Mod extends Function_2 { public Function_Mod(FunctionBase func1, FunctionBase func2) { super(func1, func2); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { - return args1; - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsError()) { - return args2; - } - - if (args1.IsNumber() && args2.IsNumber()) { // 优化性能 - if (args2.DoubleValue() == 0) { - return Operand.Error("Function '{0}' Div 0 is error!", "%"); - } - return Operand.Create(args1.DoubleValue() % args2.DoubleValue()); - } - if (args1.IsNull()) { - return Operand.Error("Function '{0}' parameter {1} is NULL!", "%", 1); - } - if (args2.IsNull()) { - return Operand.Error("Function '{0}' parameter {1} is NULL!", "%", 2); - } + public String Name() { + return "%"; + } - if (args1.IsText()) { - try { - double d = Double.parseDouble(args1.TextValue()); - args1 = Operand.Create(d); - } catch (NumberFormatException e1) { - Boolean b = FunctionUtil.TryParseBoolean(args1.TextValue()); - if (b != null) { - args1 = b ? Operand.ONE : Operand.ZERO; - } else { - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); - java.util.Date dt = sdf.parse(args1.TextValue()); - args1 = Operand.Create(new MyDate(dt)); - } catch (ParseException e2) { - return Operand.Error("Function '{0}' Two types cannot be modulo", "%"); - } - } - } - } - if (args2.IsText()) { - try { - double d = Double.parseDouble(args2.TextValue()); - args2 = Operand.Create(d); - } catch (NumberFormatException e1) { - Boolean b = FunctionUtil.TryParseBoolean(args2.TextValue()); - if (b != null) { - args2 = b ? Operand.ONE : Operand.ZERO; - } else { - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); - java.util.Date dt = sdf.parse(args2.TextValue()); - args2 = Operand.Create(new MyDate(dt)); - } catch (ParseException e2) { - return Operand.Error("Function '{0}' Two types cannot be modulo", "%"); - } - } - } - } - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "%", 1); - if (args1.IsError()) { - return args1; - } - } - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "%", 2); - if (args2.IsError()) { - return args2; - } - } + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } - if (args2.DoubleValue() == 0) { - return Operand.Error("Function '{0}' Div 0 is error!", "%"); - } + if (args2.NumberValue().compareTo(BigDecimal.ZERO) == 0) { return Div0Error(); } - return Operand.Create(args1.DoubleValue() % args2.DoubleValue()); + return Operand.Create(args1.NumberValue().remainder(args2.NumberValue())); } @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if (addBrackets) { - stringBuilder.append('('); - } + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, true); stringBuilder.append(" % "); func2.toString(stringBuilder, true); - if (addBrackets) { - stringBuilder.append(')'); - } + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java index cf1137dee..8d0cf0680 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java @@ -1,145 +1,60 @@ package toolgood.algorithm.internals.functions.operator; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Locale; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_Mul extends Function_2 { + public Function_Mul(FunctionBase[] funcs) { + super(funcs); + } -public class Function_Mul extends Function_2 { public Function_Mul(FunctionBase func1, FunctionBase func2) { super(func1, func2); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { - return args1; - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsError()) { - return args2; - } - - if (args1.IsNumber() && args2.IsNumber()) { // 优化性能 - if (args1.DoubleValue() == 1) { - return args2; - } - if (args2.DoubleValue() == 1) { - return args1; - } - if (args1.DoubleValue() == 0 || args2.DoubleValue() == 0) { - return Operand.ZERO; - } - return Operand.Create(args1.DoubleValue() * args2.DoubleValue()); - } - if (args1.IsNull()) { - return Operand.Error("Function '{0}' parameter {1} is NULL!", "*", 1); - } - if (args2.IsNull()) { - return Operand.Error("Function '{0}' parameter {1} is NULL!", "*", 2); - } - - if (args1.IsText()) { - try { - double d = Double.parseDouble(args1.TextValue()); - args1 = Operand.Create(d); - } catch (NumberFormatException e1) { - Boolean b = FunctionUtil.TryParseBoolean(args1.TextValue()); - if (b != null) { - args1 = b ? Operand.ONE : Operand.ZERO; - } else { - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); - java.util.Date dt = sdf.parse(args1.TextValue()); - args1 = Operand.Create(new MyDate(dt)); - } catch (ParseException e2) { - return Operand.Error("Function '{0}' Two types cannot be multiplied ", "*"); - } - } - } - } - if (args2.IsText()) { - try { - double d = Double.parseDouble(args2.TextValue()); - args2 = Operand.Create(d); - } catch (NumberFormatException e1) { - Boolean b = FunctionUtil.TryParseBoolean(args2.TextValue()); - if (b != null) { - args2 = b ? Operand.ONE : Operand.ZERO; - } else { - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); - java.util.Date dt = sdf.parse(args2.TextValue()); - args2 = Operand.Create(new MyDate(dt)); - } catch (ParseException e2) { - return Operand.Error("Function '{0}' Two types cannot be multiplied", "*"); - } - } - } - } - if (args1.IsDate()) { - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "*", 2); - if (args2.IsError()) { - return args2; - } - } - if (args2.DoubleValue() == 1) { - return args1; - } - return Operand.Create(args1.DateValue().multiply(args2.DoubleValue())); - } else if (args2.IsDate()) { - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "*", 1); - if (args1.IsError()) { - return args1; - } - } - if (args1.DoubleValue() == 1) { - return args2; - } - return Operand.Create(args2.DateValue().multiply(args1.DoubleValue())); - } + public String Name() { + return "*"; + } - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "*", 1); - if (args1.IsError()) { - return args1; - } - } - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "*", 2); - if (args2.IsError()) { - return args2; - } - } + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } - if (args1.DoubleValue() == 1) { - return args2; - } - if (args2.DoubleValue() == 1) { - return args1; - } + if (args1.NumberValue().compareTo(BigDecimal.ONE) == 0) { return args2; } + if (args2.NumberValue().compareTo(BigDecimal.ONE) == 0) { return args1; } - return Operand.Create(args1.DoubleValue() * args2.DoubleValue()); + return Operand.Create(args1.NumberValue().multiply(args2.NumberValue())); } @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if (addBrackets) { - stringBuilder.append('('); - } + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, true); stringBuilder.append(" * "); func2.toString(stringBuilder, true); - if (addBrackets) { - stringBuilder.append(')'); - } + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java index 24169cbc2..3f3ae2353 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java @@ -1,48 +1,58 @@ package toolgood.algorithm.internals.functions.operator; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_OR extends Function_2 { + public Function_OR(FunctionBase[] funcs) { + super(funcs); + } -public class Function_OR extends Function_2 { public Function_OR(FunctionBase func1, FunctionBase func2) { super(func1, func2); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - // 程序 && and || or �?excel�? AND(x,y) OR(x,y) 有区�? - // 在excel�?AND(x,y) OR(x,y) 先报错, - // 在程序中�?& and 有true 直接返回true 就不会检测下一个会不会报错 - // 在程序中,|| or 有false 直接返回false 就不会检测下一个会不会报错 - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotBoolean()) { - args1 = args1.ToBoolean("Function '{0}' parameter {1} is error!", "OR", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Or"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + Operand args1 = GetBoolean_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } if (args1.BooleanValue()) { - Operand args2 = func2.Evaluate(work, tempParameter).ToBoolean("Function '{0}' parameter {1} is error!", "OR", 2); - if (args2.IsError()) { - return args2; - } - return Operand.TRUE; + Operand args2 = GetBoolean_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + return Operand.True(); } - return func2.Evaluate(work, tempParameter).ToBoolean("Function '{0}' parameter {1} is error!", "OR", 2); + return GetBoolean_2(engine, tempParameter); } @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if (addBrackets) { - stringBuilder.append('('); - } + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, false); stringBuilder.append(" || "); func2.toString(stringBuilder, false); - if (addBrackets) { - stringBuilder.append(')'); - } + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); + func2.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); } } From 308776199a55eea10c110b6bfcbeab281515e8ac Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 12:54:47 +0800 Subject: [PATCH 63/98] fix --- .../algorithm/internals/functions/compare/Function_EQ.java | 2 +- .../algorithm/internals/functions/compare/Function_GE.java | 2 +- .../algorithm/internals/functions/compare/Function_GT.java | 2 +- .../algorithm/internals/functions/compare/Function_LE.java | 2 +- .../algorithm/internals/functions/compare/Function_LT.java | 2 +- .../algorithm/internals/functions/compare/Function_NE.java | 2 +- .../algorithm/internals/functions/csharp/Function_ENDSWITH.java | 2 +- .../algorithm/internals/functions/csharp/Function_GUID.java | 2 +- .../algorithm/internals/functions/csharp/Function_HAS.java | 2 +- .../algorithm/internals/functions/csharp/Function_HASVALUE.java | 2 +- .../algorithm/internals/functions/csharp/Function_INDEXOF.java | 2 +- .../algorithm/internals/functions/csharp/Function_ISREGEX.java | 2 +- .../algorithm/internals/functions/csharp/Function_JOIN.java | 2 +- .../internals/functions/csharp/Function_LASTINDEXOF.java | 2 +- .../internals/functions/csharp/Function_LOOKCEILING.java | 2 +- .../internals/functions/csharp/Function_LOOKFLOOR.java | 2 +- .../algorithm/internals/functions/csharp/Function_REGEX.java | 2 +- .../internals/functions/csharp/Function_REGEXREPLACE.java | 2 +- .../internals/functions/csharp/Function_REMOVEEND.java | 2 +- .../internals/functions/csharp/Function_REMOVESTART.java | 2 +- .../algorithm/internals/functions/csharp/Function_SPLIT.java | 2 +- .../internals/functions/csharp/Function_STARTSWITH.java | 2 +- .../internals/functions/csharp/Function_SUBSTRING.java | 2 +- .../algorithm/internals/functions/csharp/Function_TRIMEND.java | 2 +- .../internals/functions/csharp/Function_TRIMSTART.java | 2 +- .../internals/functions/csharpsecurity/Function_HMACMD5.java | 2 +- .../internals/functions/csharpsecurity/Function_HMACSHA1.java | 2 +- .../internals/functions/csharpsecurity/Function_HMACSHA256.java | 2 +- .../internals/functions/csharpsecurity/Function_HMACSHA512.java | 2 +- .../internals/functions/csharpsecurity/Function_MD5.java | 2 +- .../internals/functions/csharpsecurity/Function_SHA1.java | 2 +- .../internals/functions/csharpsecurity/Function_SHA256.java | 2 +- .../internals/functions/csharpsecurity/Function_SHA512.java | 2 +- .../internals/functions/csharpweb/Function_BASE64TOTEXT.java | 2 +- .../internals/functions/csharpweb/Function_BASE64URLTOTEXT.java | 2 +- .../internals/functions/csharpweb/Function_HTMLDECODE.java | 2 +- .../internals/functions/csharpweb/Function_HTMLENCODE.java | 2 +- .../internals/functions/csharpweb/Function_TEXTTOBASE64.java | 2 +- .../internals/functions/csharpweb/Function_TEXTTOBASE64URL.java | 2 +- .../internals/functions/csharpweb/Function_URLDECODE.java | 2 +- .../internals/functions/csharpweb/Function_URLENCODE.java | 2 +- .../internals/functions/datetimes/Function_ADDDAYS.java | 2 +- .../internals/functions/datetimes/Function_ADDHOURS.java | 2 +- .../internals/functions/datetimes/Function_ADDMINUTES.java | 2 +- .../internals/functions/datetimes/Function_ADDMONTHS.java | 2 +- .../internals/functions/datetimes/Function_ADDSECONDS.java | 2 +- .../internals/functions/datetimes/Function_ADDYEARS.java | 2 +- .../algorithm/internals/functions/datetimes/Function_DATE.java | 2 +- .../internals/functions/datetimes/Function_DATEDIF.java | 2 +- .../internals/functions/datetimes/Function_DATEVALUE.java | 2 +- .../algorithm/internals/functions/datetimes/Function_DAY.java | 2 +- .../algorithm/internals/functions/datetimes/Function_DAYS.java | 2 +- .../internals/functions/datetimes/Function_DAYS360.java | 2 +- .../algorithm/internals/functions/datetimes/Function_EDATE.java | 2 +- .../internals/functions/datetimes/Function_EOMONTH.java | 2 +- .../algorithm/internals/functions/datetimes/Function_HOUR.java | 2 +- .../internals/functions/datetimes/Function_MINUTE.java | 2 +- .../algorithm/internals/functions/datetimes/Function_MONTH.java | 2 +- .../internals/functions/datetimes/Function_NETWORKDAYS.java | 2 +- .../algorithm/internals/functions/datetimes/Function_NOW.java | 2 +- .../internals/functions/datetimes/Function_SECOND.java | 2 +- .../algorithm/internals/functions/datetimes/Function_TIME.java | 2 +- .../internals/functions/datetimes/Function_TIMESTAMP.java | 2 +- .../internals/functions/datetimes/Function_TIMEVALUE.java | 2 +- .../algorithm/internals/functions/datetimes/Function_TODAY.java | 2 +- .../internals/functions/datetimes/Function_WEEKDAY.java | 2 +- .../internals/functions/datetimes/Function_WEEKNUM.java | 2 +- .../internals/functions/datetimes/Function_WORKDAY.java | 2 +- .../algorithm/internals/functions/datetimes/Function_YEAR.java | 2 +- .../internals/functions/datetimes/Function_YEARFRAC.java | 2 +- .../algorithm/internals/functions/financial/Function_DB.java | 2 +- .../algorithm/internals/functions/financial/Function_DDB.java | 2 +- .../algorithm/internals/functions/financial/Function_FV.java | 2 +- .../algorithm/internals/functions/financial/Function_IPMT.java | 2 +- .../algorithm/internals/functions/financial/Function_IRR.java | 2 +- .../algorithm/internals/functions/financial/Function_MIRR.java | 2 +- .../algorithm/internals/functions/financial/Function_NPER.java | 2 +- .../algorithm/internals/functions/financial/Function_NPV.java | 2 +- .../algorithm/internals/functions/financial/Function_PMT.java | 2 +- .../algorithm/internals/functions/financial/Function_PPMT.java | 2 +- .../algorithm/internals/functions/financial/Function_PV.java | 2 +- .../algorithm/internals/functions/financial/Function_RATE.java | 2 +- .../algorithm/internals/functions/financial/Function_SLN.java | 2 +- .../algorithm/internals/functions/financial/Function_SYD.java | 2 +- .../algorithm/internals/functions/financial/Function_XIRR.java | 2 +- .../algorithm/internals/functions/financial/Function_XNPV.java | 2 +- .../algorithm/internals/functions/flow/Function_IF.java | 2 +- .../algorithm/internals/functions/flow/Function_IFERROR.java | 2 +- .../algorithm/internals/functions/flow/Function_IFS.java | 2 +- .../algorithm/internals/functions/flow/Function_ISERROR.java | 2 +- .../algorithm/internals/functions/flow/Function_ISEVEN.java | 2 +- .../algorithm/internals/functions/flow/Function_ISLOGICAL.java | 2 +- .../algorithm/internals/functions/flow/Function_ISNONTEXT.java | 2 +- .../algorithm/internals/functions/flow/Function_ISNULL.java | 2 +- .../internals/functions/flow/Function_ISNULLOREMPTY.java | 2 +- .../internals/functions/flow/Function_ISNULLORERROR.java | 2 +- .../internals/functions/flow/Function_ISNULLORWHITESPACE.java | 2 +- .../algorithm/internals/functions/flow/Function_ISNUMBER.java | 2 +- .../algorithm/internals/functions/flow/Function_ISODD.java | 2 +- .../algorithm/internals/functions/flow/Function_ISTEXT.java | 2 +- .../algorithm/internals/functions/flow/Function_NOT.java | 2 +- .../algorithm/internals/functions/flow/Function_SWITCH.java | 2 +- .../algorithm/internals/functions/mathbase/Function_ABS.java | 2 +- .../algorithm/internals/functions/mathbase/Function_ARABIC.java | 2 +- .../internals/functions/mathbase/Function_CEILING.java | 2 +- .../algorithm/internals/functions/mathbase/Function_COMBIN.java | 2 +- .../algorithm/internals/functions/mathbase/Function_DELTA.java | 2 +- .../algorithm/internals/functions/mathbase/Function_EVEN.java | 2 +- .../algorithm/internals/functions/mathbase/Function_EXP.java | 2 +- .../algorithm/internals/functions/mathbase/Function_FACT.java | 2 +- .../internals/functions/mathbase/Function_FACTDOUBLE.java | 2 +- .../algorithm/internals/functions/mathbase/Function_FIXED.java | 2 +- .../algorithm/internals/functions/mathbase/Function_FLOOR.java | 2 +- .../algorithm/internals/functions/mathbase/Function_GCD.java | 2 +- .../algorithm/internals/functions/mathbase/Function_GESTEP.java | 2 +- .../algorithm/internals/functions/mathbase/Function_LCM.java | 2 +- .../algorithm/internals/functions/mathbase/Function_LN.java | 2 +- .../algorithm/internals/functions/mathbase/Function_LOG.java | 2 +- .../algorithm/internals/functions/mathbase/Function_LOG10.java | 2 +- .../algorithm/internals/functions/mathbase/Function_MROUND.java | 2 +- .../internals/functions/mathbase/Function_MULTINOMIAL.java | 2 +- .../algorithm/internals/functions/mathbase/Function_ODD.java | 2 +- .../algorithm/internals/functions/mathbase/Function_PERMUT.java | 2 +- .../algorithm/internals/functions/mathbase/Function_POWER.java | 2 +- .../internals/functions/mathbase/Function_PRODUCT.java | 2 +- .../internals/functions/mathbase/Function_Percentage.java | 2 +- .../internals/functions/mathbase/Function_QUOTIENT.java | 2 +- .../internals/functions/mathbase/Function_RANDBETWEEN.java | 2 +- .../algorithm/internals/functions/mathbase/Function_ROMAN.java | 2 +- .../algorithm/internals/functions/mathbase/Function_ROUND.java | 2 +- .../internals/functions/mathbase/Function_ROUNDDOWN.java | 2 +- .../internals/functions/mathbase/Function_ROUNDUP.java | 2 +- .../algorithm/internals/functions/mathbase/Function_SIGN.java | 2 +- .../algorithm/internals/functions/mathbase/Function_SQRT.java | 2 +- .../algorithm/internals/functions/mathbase/Function_SQRTPI.java | 2 +- .../algorithm/internals/functions/mathbase/Function_TRUNC.java | 2 +- .../algorithm/internals/functions/operator/Function_XOR.java | 2 +- .../algorithm/internals/functions/string/Function_UNICHAR.java | 2 +- .../algorithm/internals/functions/string/Function_UNICODE.java | 2 +- 139 files changed, 139 insertions(+), 139 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java index 4215984cc..71c54060c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java index 80a47adbf..deded9908 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java index 04bde5a41..c25ff8e89 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java index 0fb7507a2..e9421b2f5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java index cea60a0f7..f42857d75 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java index ae64d9a28..a78a01ced 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java index cd8d23079..2d59c1651 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ENDSWITH.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java index 6d0ee194b..292706d21 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_GUID.java @@ -18,7 +18,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { return Operand.Create(UUID.randomUUID().toString()); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java index 23528cf22..38a9b0837 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HAS.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java index 2f4fedb47..26e3ea21f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_HASVALUE.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java index d140da1d3..221aa14d7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java index 01d5566da..33f674d09 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_ISREGEX.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java index 6d2d2ca2f..8cae261b1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_JOIN.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java index 2f187148f..25055ca73 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java index f80046cea..5add86eba 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKCEILING.java @@ -26,7 +26,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java index f55234eca..f81a67866 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LOOKFLOOR.java @@ -26,7 +26,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java index 23b077397..eb7a1289c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEX.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPLACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPLACE.java index 5d2ec7458..4ebf832f7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPLACE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REGEXREPLACE.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java index 3e3bde10f..3d54284d6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVEEND.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java index 1a588904d..8a0fbf55a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_REMOVESTART.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java index 9e823ad81..d73b8dd4f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java index 4b90fd819..419d61037 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_STARTSWITH.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java index f888cd3b1..8cb936386 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SUBSTRING.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java index 4639681a3..662be24d5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMEND.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java index 6d7200c58..59a8cec42 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_TRIMSTART.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java index 59a43a524..63d5ed71e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java @@ -27,7 +27,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java index a98f5267d..b8f0ed64a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java @@ -27,7 +27,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java index 8538bff6f..c18a3914a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java @@ -27,7 +27,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java index ebc5f0220..2755c62b1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java @@ -27,7 +27,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java index e14314d56..7cf26b6ce 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java index 31686a443..9771554d9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java index 564745a88..1f6b2533f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java index 8eba446a8..81f533bb2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsError() || args1.IsNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java index 53b28c7c6..2d6ccaf2e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64TOTEXT.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java index d098e9faf..89bfb32e3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_BASE64URLTOTEXT.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java index ad7428c08..ec931e89f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLDECODE.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java index 6acfe2b6a..243ebfc3b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_HTMLENCODE.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java index fed14f3dc..0ba8375b7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java index 105109a8a..fb1f5a413 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64URL.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java index 06de4c0ad..f2e250b8a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java index 39ae83077..b4c5c4600 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java index 49b99df41..7d3c3621a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDDAYS.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java index 0c9e51173..7747eacb7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDHOURS.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java index f4cdee06b..a9be14ed5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMINUTES.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java index ec924c1a4..b23e03a5b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDMONTHS.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java index 8ccb06ef4..a026faa4f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDSECONDS.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java index 407f6b1d4..d0c9d3f1b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_ADDYEARS.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java index 6628a4956..51533baa8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATE.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java index 4412cd4d8..7dfb380af 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEDIF.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java index 41ab73d49..e371f71c5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DATEVALUE.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { if (func1 == null) return ParameterError(1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java index 1cc74594e..f6773e1f5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAY.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS.java index d877c7660..a94582c65 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS.java @@ -26,7 +26,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java index 650659307..7e2cf904e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_DAYS360.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java index 1352acead..f78ea3b5d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EDATE.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java index 3d8571359..4b0e3e8d3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_EOMONTH.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java index 69cf7d270..6c0b5c991 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_HOUR.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java index 1837e6087..ed36db0ed 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MINUTE.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java index cc8d5ecc3..9cdaf5688 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_MONTH.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java index 41bea1bc4..3ab43b99f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NETWORKDAYS.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate(engine, tempParameter, 0); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java index 7d74b5fd4..1e44cf880 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_NOW.java @@ -17,7 +17,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { return Operand.Create(MyDate.now()); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java index da88b5685..f5e384da5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_SECOND.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java index e689f4daf..5b91e4c61 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIME.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java index e020733d2..d843c5dc4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMESTAMP.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { int type = 0; if (func2 != null) { Operand args2 = GetNumber_2(engine, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java index ece8607fa..13a989ea8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TIMEVALUE.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java index f9d71ddd7..8dd67108b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_TODAY.java @@ -17,7 +17,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { MyDate now = MyDate.now(); return Operand.Create(new MyDate(now.Year, now.Month, now.Day, 0, 0, 0)); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java index d88b11f26..e8d1ba6d9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKDAY.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java index 3a2260455..76cdd4b73 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WEEKNUM.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java index 7fb6cf919..316e16849 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_WORKDAY.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate(engine, tempParameter, 0); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java index 727f9371e..529ea6ccc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEAR.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetDate_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java index 4dca55656..df3174e5c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { if (func1 == null || func2 == null) return ParameterError(1); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DB.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DB.java index 0cf40909c..bab632d29 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DB.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DB.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand costArg = GetNumber_1(engine, tempParameter); if (costArg.IsErrorOrNone()) return costArg; double cost = costArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java index f86eaaba7..2d6a67653 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_DDB.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand costArg = GetNumber_1(engine, tempParameter); if (costArg.IsErrorOrNone()) return costArg; double cost = costArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java index 662cf8210..c389eda40 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_FV.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand rateArg = GetNumber_1(engine, tempParameter); if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java index 2bedd12e7..33737221b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IPMT.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand rateArg = GetNumber_1(engine, tempParameter); if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IRR.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IRR.java index 3a71054e7..6b109e996 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IRR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_IRR.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand valuesArg = GetArray_1(engine, tempParameter); if (valuesArg.IsErrorOrNone()) return valuesArg; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_MIRR.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_MIRR.java index da5dbc944..d48fd57b5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_MIRR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_MIRR.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand valuesArg = GetArray_1(engine, tempParameter); if (valuesArg.IsErrorOrNone()) return valuesArg; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPER.java index 1830c750b..d5b35934c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPER.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand rateArg = GetNumber_1(engine, tempParameter); if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java index 86144231b..85c4a14ac 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_NPV.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand rateArg = GetNumber(engine, tempParameter, 0); if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PMT.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PMT.java index b78e38fe9..5c0f43bff 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PMT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PMT.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand rateArg = GetNumber_1(engine, tempParameter); if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java index 0e7a52c8a..a398a8fd0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PPMT.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand rateArg = GetNumber_1(engine, tempParameter); if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java index 822cf98f6..a866afe39 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_PV.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand rateArg = GetNumber_1(engine, tempParameter); if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java index 504433529..a304c1c34 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_RATE.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand nperArg = GetNumber_1(engine, tempParameter); if (nperArg.IsErrorOrNone()) return nperArg; double nper = nperArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java index da7600389..62947fbac 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SLN.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand costArg = GetNumber_1(engine, tempParameter); if (costArg.IsErrorOrNone()) return costArg; double cost = costArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java index b196e3480..035ba192a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_SYD.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand costArg = GetNumber_1(engine, tempParameter); if (costArg.IsErrorOrNone()) return costArg; double cost = costArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java index 994b214de..694dd7ddc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XIRR.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand valuesArg = GetArray_1(engine, tempParameter); if (valuesArg.IsErrorOrNone()) return valuesArg; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java index 423107b21..093228221 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/financial/Function_XNPV.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand rateArg = GetNumber_1(engine, tempParameter); if (rateArg.IsErrorOrNone()) return rateArg; double rate = rateArg.DoubleValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java index 1b0f92431..45a8a147d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IF.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetBoolean_1(engine, tempParameter); if(args1.IsErrorOrNone()) { return args1; } if (args1.BooleanValue()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java index 30a47ce91..cfdadfb39 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFERROR.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsErrorOrNone()) { return func2.Evaluate(engine, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java index 302831043..928ee3856 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_IFS.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { for (int i = 0; i < funcs.length - 1; i += 2) { Operand condition = funcs[i].Evaluate(engine, tempParameter); if (condition.IsErrorOrNone()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java index 24a599385..da3e8c09d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISERROR.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (func2 != null) { if (args1.IsErrorOrNone()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java index 3ade70f29..540cd5118 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISEVEN.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsNumber()) { if (Math.abs(args1.IntValue()) % 2 == 0) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java index 2f01d5ecf..c6a50fe23 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISLOGICAL.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsBoolean()) { return Operand.True; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java index 19caecc40..dd29c4424 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNONTEXT.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsText()) { return Operand.False; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java index fdc8d2ab5..2fd2a5a1d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULL.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (func2 != null) { if (args1.IsNull()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java index f852f311d..499c21356 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLOREMPTY.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsNull()) { return Operand.True; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java index 3a3e2f2bd..09e635d1a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORERROR.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (func2 != null) { if (args1.IsNull() || args1.IsErrorOrNone()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java index b931b5a56..92fe15419 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNULLORWHITESPACE.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsNull()) { return Operand.True; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java index 56f18fdb7..142278f88 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISNUMBER.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsNumber()) { return Operand.True; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java index b8e44bd3f..81dba5e5b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISODD.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsNumber()) { if (Math.abs(args1.IntValue()) % 2 == 1) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java index 4f64c82b8..ed2e73ae0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_ISTEXT.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsText()) { return Operand.True; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java index d372dd228..c625edd60 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_NOT.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetBoolean_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java index 9a61e7298..55815c701 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/flow/Function_SWITCH.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand exprValue = funcs[0].Evaluate(engine, tempParameter); if (exprValue.IsErrorOrNone()) { return exprValue; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java index 5f9b80140..7dda6df96 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ABS.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java index 2ac4460df..0894738bf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand arg = GetText_1(engine, tempParameter); if (arg.IsErrorOrNone()) return arg; String text = arg.TextValue().toUpperCase(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java index 5a2ee9013..95e721c60 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_CEILING.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java index 4d94d8a19..05718c173 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_COMBIN.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java index f7ba95d65..bdef582b5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { if (func1 == null) return ParameterError(1); Operand args1 = GetNumber_1(engine, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java index 8caa3237e..310f71367 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EVEN.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java index 77bc37ea0..89f11e32b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_EXP.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java index 94726dc56..6d3970f77 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACT.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java index c5852d816..c8d836619 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FACTDOUBLE.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java index 67eaa3ae2..d755d3ddd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FIXED.java @@ -27,7 +27,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { int num = 2; if (func2 != null) { Operand args2 = GetNumber_2(engine, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java index c6be9dcf1..88fea9dc2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_FLOOR.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java index 87eb9cb8c..978cd5f88 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GCD.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); for (int i = 0; i < funcs.length; i++) { Operand aa = GetNumber(engine, tempParameter, i); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java index d36fbc78a..ad4a79a48 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { if (func1 == null) return ParameterError(1); Operand args1 = GetNumber_1(engine, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java index 9e46d83f7..167618035 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LCM.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); for (int i = 0; i < funcs.length; i++) { Operand aa = GetNumber(engine, tempParameter, i); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java index 5a1071468..13b431fbc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LN.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java index b0c8af404..bd72ede1b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG.java @@ -28,7 +28,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG10.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG10.java index aa797afd4..2f5fa66f4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG10.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_LOG10.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java index b94efb963..332d6d2a7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MROUND.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java index 4bd26d65d..c3b3efdd1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_MULTINOMIAL.java @@ -26,7 +26,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java index 62aba5789..2c9c0328a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ODD.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java index 9a5332f4c..85defdf6a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PERMUT.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java index bbac2d4cb..fa4541113 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_POWER.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java index ddd0016ea..b5301e166 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_PRODUCT.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); for (int i = 0; i < funcs.length; i++) { Operand aa = GetNumber(engine, tempParameter, i); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java index 5e4f87c50..2ce6f65e4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_Percentage.java @@ -26,7 +26,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java index 9c7ddc4c2..7641489e0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_QUOTIENT.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java index d1c646c73..c77526522 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RANDBETWEEN.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java index 8a3b1428f..26d813d74 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { if (func1 == null) { return ParameterError(1); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java index 80fb70a7a..29edd446b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUND.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java index 55283e83b..1aa3dd0ab 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDDOWN.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java index c28d5cceb..483e58a10 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROUNDUP.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java index f3893c92a..1f4b425b0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java index c8eab435e..cdd34620a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRT.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java index 675137b51..fd68dc39f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SQRTPI.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java index d42f0899e..8b60f510b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_TRUNC.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_XOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_XOR.java index 487c9299d..20a65aaa6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_XOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_XOR.java @@ -22,7 +22,7 @@ public String getName() { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { int trueCount = 0; for (int i = 0; i < funcs.length; i++) { Operand a = GetBoolean(engine, tempParameter, i); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICHAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICHAR.java index 298230974..ef2315494 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICHAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICHAR.java @@ -13,7 +13,7 @@ public Function_UNICHAR(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsError()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICODE.java index 2cb2441f8..dc4e19fdf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICODE.java @@ -13,7 +13,7 @@ public Function_UNICODE(FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsError()) return args1; From cffc242debc8dc6f65fc731dd678f8a67bebf585 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 12:59:41 +0800 Subject: [PATCH 64/98] fix --- .../functions/mathbase/Function_RAND.java | 2 +- .../functions/mathsum/Function_AVEDEV.java | 2 +- .../functions/mathsum/Function_AVERAGE.java | 2 +- .../functions/mathsum/Function_AVERAGEIF.java | 2 +- .../functions/mathsum/Function_CORREL.java | 2 +- .../functions/mathsum/Function_COUNT.java | 2 +- .../functions/mathsum/Function_COUNTIF.java | 2 +- .../functions/mathsum/Function_COVAR.java | 2 +- .../mathsum/Function_COVARIANCES.java | 2 +- .../functions/mathsum/Function_DEVSQ.java | 2 +- .../functions/mathsum/Function_FORECAST.java | 2 +- .../functions/mathsum/Function_GEOMEAN.java | 2 +- .../functions/mathsum/Function_HARMEAN.java | 2 +- .../functions/mathsum/Function_INTERCEPT.java | 2 +- .../functions/mathsum/Function_LARGE.java | 2 +- .../functions/mathsum/Function_MAX.java | 2 +- .../functions/mathsum/Function_MEDIAN.java | 2 +- .../functions/mathsum/Function_MIN.java | 2 +- .../functions/mathsum/Function_MODE.java | 2 +- .../functions/mathsum/Function_PEARSON.java | 2 +- .../mathsum/Function_PERCENTRANK.java | 2 +- .../functions/mathsum/Function_POISSON.java | 2 +- .../functions/mathsum/Function_RANK.java | 2 +- .../functions/mathsum/Function_SERIESSUM.java | 2 +- .../functions/mathsum/Function_SLOPE.java | 2 +- .../functions/mathsum/Function_SMALL.java | 2 +- .../functions/mathsum/Function_STDEV.java | 2 +- .../functions/mathsum/Function_STDEVP.java | 2 +- .../functions/mathsum/Function_SUM.java | 2 +- .../functions/mathsum/Function_SUMIF.java | 2 +- .../mathsum/Function_SUMPRODUCT.java | 2 +- .../functions/mathsum/Function_SUMSQ.java | 2 +- .../functions/mathsum/Function_SUMX2MY2.java | 2 +- .../functions/mathsum/Function_SUMX2PY2.java | 2 +- .../functions/mathsum/Function_SUMXMY2.java | 2 +- .../functions/mathsum/Function_VAR.java | 2 +- .../functions/mathsum/Function_VARP.java | 2 +- .../functions/mathsum2/Function_BESSELI.java | 2 +- .../functions/mathsum2/Function_BESSELJ.java | 2 +- .../functions/mathsum2/Function_BESSELK.java | 2 +- .../functions/mathsum2/Function_BESSELY.java | 2 +- .../functions/mathsum2/Function_BETADIST.java | 2 +- .../functions/mathsum2/Function_BETAINV.java | 2 +- .../mathsum2/Function_BINOMDIST.java | 2 +- .../functions/mathsum2/Function_ERF.java | 2 +- .../functions/mathsum2/Function_ERFC.java | 2 +- .../mathsum2/Function_EXPONDIST.java | 2 +- .../functions/mathsum2/Function_FDIST.java | 2 +- .../functions/mathsum2/Function_FINV.java | 2 +- .../functions/mathsum2/Function_FISHER.java | 2 +- .../mathsum2/Function_FISHERINV.java | 2 +- .../mathsum2/Function_GAMMADIST.java | 2 +- .../functions/mathsum2/Function_GAMMAINV.java | 2 +- .../functions/mathsum2/Function_GAMMALN.java | 2 +- .../mathsum2/Function_HYPGEOMDIST.java | 2 +- .../functions/mathsum2/Function_LOGINV.java | 2 +- .../mathsum2/Function_LOGNORMDIST.java | 2 +- .../mathsum2/Function_NEGBINOMDIST.java | 2 +- .../functions/mathsum2/Function_NORMDIST.java | 2 +- .../functions/mathsum2/Function_NORMINV.java | 2 +- .../mathsum2/Function_NORMSDIST.java | 2 +- .../functions/mathsum2/Function_NORMSINV.java | 2 +- .../functions/mathsum2/Function_TDIST.java | 2 +- .../functions/mathsum2/Function_TINV.java | 2 +- .../functions/mathsum2/Function_WEIBULL.java | 2 +- .../mathtransformation/Function_BIN2DEC.java | 2 +- .../mathtransformation/Function_BIN2HEX.java | 2 +- .../mathtransformation/Function_BIN2OCT.java | 2 +- .../mathtransformation/Function_DEC2BIN.java | 2 +- .../mathtransformation/Function_DEC2HEX.java | 2 +- .../mathtransformation/Function_DEC2OCT.java | 2 +- .../mathtransformation/Function_HEX2BIN.java | 2 +- .../mathtransformation/Function_HEX2DEC.java | 2 +- .../mathtransformation/Function_HEX2OCT.java | 2 +- .../mathtransformation/Function_OCT2BIN.java | 2 +- .../mathtransformation/Function_OCT2DEC.java | 2 +- .../mathtransformation/Function_OCT2HEX.java | 2 +- .../mathtrigonometric/Function_ACOS.java | 2 +- .../mathtrigonometric/Function_ACOSH.java | 2 +- .../mathtrigonometric/Function_ACOT.java | 2 +- .../mathtrigonometric/Function_ACOTH.java | 2 +- .../mathtrigonometric/Function_ASIN.java | 2 +- .../mathtrigonometric/Function_ASINH.java | 2 +- .../mathtrigonometric/Function_ATAN.java | 2 +- .../mathtrigonometric/Function_ATAN2.java | 2 +- .../mathtrigonometric/Function_ATANH.java | 2 +- .../mathtrigonometric/Function_COS.java | 2 +- .../mathtrigonometric/Function_COSH.java | 2 +- .../mathtrigonometric/Function_COT.java | 2 +- .../mathtrigonometric/Function_COTH.java | 2 +- .../mathtrigonometric/Function_CSC.java | 2 +- .../mathtrigonometric/Function_CSCH.java | 2 +- .../mathtrigonometric/Function_DEGREES.java | 2 +- .../mathtrigonometric/Function_RADIANS.java | 2 +- .../mathtrigonometric/Function_SEC.java | 2 +- .../mathtrigonometric/Function_SECH.java | 2 +- .../mathtrigonometric/Function_SIN.java | 2 +- .../mathtrigonometric/Function_SINH.java | 2 +- .../mathtrigonometric/Function_TAN.java | 2 +- .../mathtrigonometric/Function_TANH.java | 2 +- .../functions/operator/Function_AND.java | 62 ++++---- .../functions/operator/Function_AND_N.java | 47 +++--- .../functions/operator/Function_Add.java | 8 +- .../functions/operator/Function_Connect.java | 72 ++++----- .../functions/operator/Function_Div.java | 8 +- .../functions/operator/Function_Mod.java | 8 +- .../functions/operator/Function_Mul.java | 8 +- .../functions/operator/Function_OR.java | 4 +- .../functions/operator/Function_OR_N.java | 47 +++--- .../functions/operator/Function_Sub.java | 146 ++++-------------- .../functions/operator/Function_XOR.java | 28 ++-- .../functions/value/Function_NULL.java | 2 +- .../value/Function_ValueBoolean.java | 2 +- .../functions/value/Function_ValueNumber.java | 2 +- .../functions/value/Function_ValueText.java | 2 +- 115 files changed, 286 insertions(+), 360 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java index 35982177c..d38312bc2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_RAND.java @@ -17,7 +17,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Random rand = new Random(); return Operand.Create(rand.nextDouble()); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java index d7bc96856..461457d6c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVEDEV.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java index 8ecd78e8e..a6697b62a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGE.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java index 69f1c64fc..eb34559f2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_AVERAGEIF.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetArray_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_CORREL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_CORREL.java index 88211d24e..7366b4a9a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_CORREL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_CORREL.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { if (funcs.length < 2) return ParameterError(1); Operand array1Arg = GetArray(engine, tempParameter, 0); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java index 8a4643abf..31ffe8e60 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNT.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java index 4888a8f76..7e48cdf1f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COUNTIF.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetArray_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java index 40c54ecf0..a3a1c84d0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVAR.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java index fb07c9bed..ac6ec0b3d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_COVARIANCES.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java index d62af8125..ec9c6f46f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_DEVSQ.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FORECAST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FORECAST.java index b2ca28187..a7f865813 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FORECAST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_FORECAST.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { if (funcs.length < 3) return ParameterError(1); Operand xArg = GetNumber(engine, tempParameter, 0); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java index c7bd3f84b..b016ee5e7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_GEOMEAN.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java index 5e239537d..8eeef470b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_HARMEAN.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_INTERCEPT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_INTERCEPT.java index ae11cbdff..35e39bb5d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_INTERCEPT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_INTERCEPT.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { if (funcs.length < 2) return ParameterError(1); Operand yArrayArg = GetArray(engine, tempParameter, 0); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java index bdb88aadc..b42f1af1f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_LARGE.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); args1 = ConvertToArray(args1, 1); if (args1.IsErrorOrNone()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java index 425f7112f..fbacc8037 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MAX.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java index c757b3c59..d6a67a4ab 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MEDIAN.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java index 228fc095c..725f1268c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MIN.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java index 52901143d..8fd3a2539 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_MODE.java @@ -26,7 +26,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PEARSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PEARSON.java index 8e42f66a7..ab56f89b9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PEARSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PEARSON.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { if (funcs.length < 2) return ParameterError(1); Operand array1Arg = GetArray(engine, tempParameter, 0); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java index c64dfd3b5..6fb973e61 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_PERCENTRANK.java @@ -26,7 +26,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetArray_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java index 7753311b1..9ed31e36d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_POISSON.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_RANK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_RANK.java index 26fa6713f..fb0c3911f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_RANK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_RANK.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { if (funcs.length < 2) return ParameterError(1); Operand numArg = GetNumber(engine, tempParameter, 0); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SERIESSUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SERIESSUM.java index df0038d47..bb7a2c43d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SERIESSUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SERIESSUM.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { if (funcs.length < 4) return ParameterError(1); Operand xArg = GetNumber(engine, tempParameter, 0); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SLOPE.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SLOPE.java index d6b6b31ee..fd9684fba 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SLOPE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SLOPE.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { if (funcs.length < 2) return ParameterError(1); Operand yArrayArg = GetArray(engine, tempParameter, 0); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java index caa47ab45..bcb8c2467 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SMALL.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = func1.Evaluate(engine, tempParameter); args1 = ConvertToArray(args1, 1); if (args1.IsErrorOrNone()) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java index 9658d842d..f29141529 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEV.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java index 067ef4af0..a994b77cc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_STDEVP.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java index 9fa8908f2..4de954770 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUM.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java index b4026e937..19e766760 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMIF.java @@ -25,7 +25,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetArray_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMPRODUCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMPRODUCT.java index 80794b043..644a59a01 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMPRODUCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMPRODUCT.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { if (funcs.length < 2) return ParameterError(1); List> arrays = new ArrayList<>(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java index 595399747..4f8dea02c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMSQ.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); for (int i = 0; i < funcs.length; i++) { Operand aa = funcs[i].Evaluate(engine, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2MY2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2MY2.java index 7fd60259a..239883dc7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2MY2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2MY2.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { if (funcs.length < 2) return ParameterError(1); Operand arrayXArg = GetArray(engine, tempParameter, 0); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2PY2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2PY2.java index 88e0d8215..d20423a05 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2PY2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMX2PY2.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { if (funcs.length < 2) return ParameterError(1); Operand arrayXArg = GetArray(engine, tempParameter, 0); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMXMY2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMXMY2.java index 030becda4..a339f495f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMXMY2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_SUMXMY2.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { if (funcs.length < 2) return ParameterError(1); Operand arrayXArg = GetArray(engine, tempParameter, 0); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java index 3bb58e898..d5c9e4ba6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VAR.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java index 61589485e..d2460eecb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum/Function_VARP.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { List args = new ArrayList<>(funcs.length); Operand error = TryEvaluateAll(engine, tempParameter, args); if (error != null) { diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java index fe201d0e4..aabdf13aa 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java @@ -27,7 +27,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java index 5148b4b29..fa568cb0b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java @@ -27,7 +27,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java index 10b797298..5d4f1be13 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java @@ -27,7 +27,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java index ec7b46fc5..70a1f7d3a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java @@ -27,7 +27,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETADIST.java index 3eeda5477..ded03dcd6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETADIST.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java index 0c923eefe..f44b2688f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BETAINV.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java index b0ce43a54..dd64344d6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BINOMDIST.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java index 77b9c8fd2..6d5f6e6e8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERF.java @@ -27,7 +27,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java index 2729dccf7..5d70957bd 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_ERFC.java @@ -27,7 +27,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java index 0ba87d834..90a5047c6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_EXPONDIST.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java index a007d3605..9d3f9262c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FDIST.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java index 79e06af9b..1edfdd10c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FINV.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java index d51d0a037..465d7a7a4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHER.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java index f6df9327d..c0f9cc6ee 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_FISHERINV.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMADIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMADIST.java index 2b7ab2c26..babe2fe10 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMADIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMADIST.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java index 2c5504222..1cdbdd1ab 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMAINV.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java index b7dc22dfc..c6f7ab528 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_GAMMALN.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_HYPGEOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_HYPGEOMDIST.java index e95cdf182..fda203b02 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_HYPGEOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_HYPGEOMDIST.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java index f4e4a5802..128a0a098 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGINV.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; java.math.BigDecimal probability = args1.NumberValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java index 9d4adccab..410891811 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_LOGNORMDIST.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; java.math.BigDecimal x = args1.NumberValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java index 3260a2495..3b21e77eb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NEGBINOMDIST.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java index 539fc9b4d..4f4cf64bb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMDIST.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java index 12d5d4d90..613d195ed 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMINV.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java index b7a0413ea..ce706e05c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSDIST.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; java.math.BigDecimal num = args1.NumberValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java index 20ac2e619..289355688 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_NORMSINV.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; java.math.BigDecimal p = args1.NumberValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java index f51e74399..6fe8c178d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java @@ -26,7 +26,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java index 4978a0f3e..3c73271e0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TINV.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java index bdb38f969..5c7387a05 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_WEIBULL.java @@ -24,7 +24,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java index 62c60bc3e..93a54f147 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2DEC.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java index 196378e17..b7fd8b470 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2HEX.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java index 82d559c61..fe740376e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_BIN2OCT.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java index e458121a2..24bf7cff3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2BIN.java @@ -21,7 +21,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java index 532d630d8..83977b1b0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2HEX.java @@ -21,7 +21,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java index 7d3ca4909..a72a9d5a5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_DEC2OCT.java @@ -21,7 +21,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java index 63c9e0c05..4cf03aa44 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2BIN.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java index ef7c5b91d..2ab1fe293 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2DEC.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java index 3f8ec485e..6d2189aaf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_HEX2OCT.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java index 59898c582..de71cff25 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2BIN.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java index 2d9ea1041..4bc384d72 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2DEC.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java index ebd783acc..010d1ed21 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_OCT2HEX.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java index 4d596b76e..240953b54 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOS.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } java.math.BigDecimal x = args1.NumberValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java index 40d588f25..735664a8d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOSH.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } java.math.BigDecimal z = args1.NumberValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOT.java index bd49cc1f7..2337b94c6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOT.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(MathEx.PI.divide(new java.math.BigDecimal("2"), java.math.MathContext.DECIMAL128).subtract(MathEx.Atan(args1.NumberValue()))); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOTH.java index a06244a10..1ba9d4002 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ACOTH.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } BigDecimal d = args1.NumberValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java index 1ec61d7b2..e4d43e18c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASIN.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } java.math.BigDecimal x = args1.NumberValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java index 0844f8727..2a1592139 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ASINH.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(MathEx.Asinh(args1.NumberValue())); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java index be729a200..4fba480ac 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(MathEx.Atan(args1.NumberValue())); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java index af164b87d..191b91e29 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATAN2.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } Operand args2 = GetNumber_2(engine, tempParameter); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java index 87e74af69..e6a606d63 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_ATANH.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } java.math.BigDecimal x = args1.NumberValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java index b1e417a4d..367d48926 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COS.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(MathEx.Cos(args1.NumberValue())); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java index 79abfc9a8..905114abc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COSH.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(MathEx.Cosh(args1.NumberValue())); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java index c1d1e6b50..c978cfc59 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COT.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } BigDecimal d = MathEx.Tan(args1.NumberValue()); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COTH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COTH.java index c89746f9c..0e2c91c91 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COTH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_COTH.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } BigDecimal d = MathEx.Sinh(args1.NumberValue()); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java index 71299dc4a..391c6fcb4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSC.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } BigDecimal d = MathEx.Sin(args1.NumberValue()); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSCH.java index e5e7cc22d..b3e454310 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSCH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_CSCH.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } BigDecimal d = MathEx.Sinh(args1.NumberValue()); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java index 5a1c9370c..b811aecf3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_DEGREES.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } java.math.BigDecimal z = args1.NumberValue(); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java index 68ce249ec..4013a403b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_RADIANS.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } java.math.BigDecimal r = args1.NumberValue().divide(new java.math.BigDecimal("180"), java.math.MathContext.DECIMAL128).multiply(MathEx.PI); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java index 09196f9d3..e1dd27a5f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SEC.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } BigDecimal d = MathEx.Cos(args1.NumberValue()); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SECH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SECH.java index 858da7281..7cbe9cca4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SECH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SECH.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(BigDecimal.ONE.divide(MathEx.Cosh(args1.NumberValue()), java.math.MathContext.DECIMAL128)); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java index ea843b1f3..a60299aec 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SIN.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(MathEx.Sin(args1.NumberValue())); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java index b0bb893a1..484b200e6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_SINH.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(MathEx.Sinh(args1.NumberValue())); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java index 8da78a856..e32d04d1c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TAN.java @@ -23,7 +23,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } BigDecimal cos = MathEx.Cos(args1.NumberValue()); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java index 0fd16dee0..7136c7e08 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtrigonometric/Function_TANH.java @@ -22,7 +22,7 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(MathEx.Tanh(args1.NumberValue())); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java index d199a8c92..ea6fa4012 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND.java @@ -1,48 +1,58 @@ package toolgood.algorithm.internals.functions.operator; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_AND extends Function_2 { + public Function_AND(FunctionBase[] funcs) { + super(funcs); + } -public class Function_AND extends Function_2 { public Function_AND(FunctionBase func1, FunctionBase func2) { super(func1, func2); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - // 程序 && and || or �?excel�? AND(x,y) OR(x,y) 有区�? - // 在excel�?AND(x,y) OR(x,y) 先报错, - // 在程序中�?& and 有true 直接返回true 就不会检测下一个会不会报错 - // 在程序中,|| or 有false 直接返回false 就不会检测下一个会不会报错 - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotBoolean()) { - args1 = args1.ToBoolean(); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "And"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetBoolean_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } if (args1.BooleanValue() == false) { - Operand args2 = func2.Evaluate(work, tempParameter).ToBoolean(); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetBoolean_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } return Operand.False; } - return func2.Evaluate(work, tempParameter).ToBoolean(); + return GetBoolean_2(engine, tempParameter); } @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if (addBrackets) { - stringBuilder.append('('); - } + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, false); stringBuilder.append(" && "); func2.toString(stringBuilder, false); - if (addBrackets) { - stringBuilder.append(')'); - } + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); + func2.GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java index 0aa5a2e4c..5ef5c59d2 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_AND_N.java @@ -1,36 +1,45 @@ package toolgood.algorithm.internals.functions.operator; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_AND_N extends Function_N { +public final class Function_AND_N extends Function_N { public Function_AND_N(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - int index = 1; + public String Name() { + return "AndN"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { boolean b = true; - for (FunctionBase item : funcs) { - Operand a = item.Evaluate(work, tempParameter); - if (a.IsNotBoolean()) { - a = a.ToBoolean("Function '{0}' parameter {1} is error!", "AND", index++); - if (a.IsError()) { - return a; - } - } - if (a.BooleanValue() == false) { - b = false; - } + for (int i = 0; i < funcs.length; i++) { + Operand a = GetBoolean(engine, tempParameter, i); + if (a.IsErrorOrNone()) { return a; } + if (a.BooleanValue() == false) b = false; } - return b ? Operand.TRUE : Operand.FALSE; + return b ? Operand.True : Operand.False; + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "AND"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java index 381e64607..9dd80da2b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Add.java @@ -25,11 +25,9 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { - Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { return args1; } - Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { return args2; } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetNumber_2(engine, tempParameter); if (args2.IsErrorOrNone()) { return args2; } return Operand.Create(args1.NumberValue().add(args2.NumberValue())); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java index f5f9e9607..847b13dc0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Connect.java @@ -1,60 +1,54 @@ package toolgood.algorithm.internals.functions.operator; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_Connect extends Function_2 { + public Function_Connect(FunctionBase[] funcs) { + super(funcs); + } -public class Function_Connect extends Function_2 { public Function_Connect(FunctionBase func1, FunctionBase func2) { super(func1, func2); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { - return args1; - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsError()) { - return args2; - } - - if (args1.IsNull()) { - if (args2.IsNull()) { - return args1; - } - return args2.ToText("Function '{0}' parameter {1} is error!", "&", 2); - } else if (args2.IsNull()) { - return args1.ToText("Function '{0}' parameter {1} is error!", "&", 1); - } - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "&", 1); - if (args1.IsError()) { - return args1; - } - } - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "&", 2); - if (args2.IsError()) { - return args2; - } - } + public String Name() { + return "&"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetText_2(engine, tempParameter); if (args2.IsErrorOrNone()) { return args2; } return Operand.Create(args1.TextValue() + args2.TextValue()); } @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if (addBrackets) { - stringBuilder.append('('); - } + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, false); stringBuilder.append(" & "); func2.toString(stringBuilder, false); - if (addBrackets) { - stringBuilder.append(')'); - } + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java index 4371fdfad..83203dd19 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Div.java @@ -26,11 +26,9 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { - Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { return args1; } - Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { return args2; } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetNumber_2(engine, tempParameter); if (args2.IsErrorOrNone()) { return args2; } if (args2.NumberValue().compareTo(BigDecimal.ZERO) == 0) { return Div0Error(); } if (args2.NumberValue().compareTo(BigDecimal.ONE) == 0) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java index 677acd413..fadf2cfab 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mod.java @@ -26,11 +26,9 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { - Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { return args1; } - Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { return args2; } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetNumber_2(engine, tempParameter); if (args2.IsErrorOrNone()) { return args2; } if (args2.NumberValue().compareTo(BigDecimal.ZERO) == 0) { return Div0Error(); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java index 8d0cf0680..0bef1f8c4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Mul.java @@ -26,11 +26,9 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { - Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { return args1; } - Operand args2 = GetNumber_2(engine, tempParameter); - if (args2.IsErrorOrNone()) { return args2; } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetNumber_2(engine, tempParameter); if (args2.IsErrorOrNone()) { return args2; } if (args1.NumberValue().compareTo(BigDecimal.ONE) == 0) { return args2; } if (args2.NumberValue().compareTo(BigDecimal.ONE) == 0) { return args1; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java index 3f3ae2353..ae4b7d01f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR.java @@ -25,13 +25,13 @@ public String Name() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { Operand args1 = GetBoolean_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } if (args1.BooleanValue()) { Operand args2 = GetBoolean_2(engine, tempParameter); if (args2.IsErrorOrNone()) { return args2; } - return Operand.True(); + return Operand.True; } return GetBoolean_2(engine, tempParameter); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java index 82760a590..65188b8eb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_OR_N.java @@ -1,36 +1,45 @@ package toolgood.algorithm.internals.functions.operator; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_OR_N extends Function_N { +public final class Function_OR_N extends Function_N { public Function_OR_N(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - int index = 1; + public String Name() { + return "OrN"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { boolean b = false; - for (FunctionBase item : funcs) { - Operand a = item.Evaluate(work, tempParameter); - if (a.IsNotBoolean()) { - a = a.ToBoolean("Function '{0}' parameter {1} is error!", "OR", index++); - if (a.IsError()) { - return a; - } - } - if (a.BooleanValue()) { - b = true; - } + for (int i = 0; i < funcs.length; i++) { + Operand a = GetBoolean(engine, tempParameter, i); + if (a.IsErrorOrNone()) { return a; } + if (a.BooleanValue()) b = true; } - return b ? Operand.TRUE : Operand.FALSE; + return b ? Operand.True : Operand.False; + } + + @Override + public OperandType GetResultType() { + return OperandType.BOOLEAN; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "OR"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java index 0ead3413c..050b824cb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_Sub.java @@ -1,135 +1,57 @@ package toolgood.algorithm.internals.functions.operator; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Locale; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; -import toolgood.algorithm.internals.functions.FunctionUtil; +import toolgood.algorithm.internals.functions.NoneEngine; + +public final class Function_Sub extends Function_2 { + public Function_Sub(FunctionBase[] funcs) { + super(funcs); + } -public class Function_Sub extends Function_2 { public Function_Sub(FunctionBase func1, FunctionBase func2) { super(func1, func2); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { - return args1; - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsError()) { - return args2; - } - - if (args1.IsNumber() && args2.IsNumber()) { // 优化性能 - if (args2.DoubleValue() == 0) { - return args1; - } - return Operand.Create(args1.DoubleValue() - args2.DoubleValue()); - } - if (args1.IsNull()) { - return Operand.Error("Function '{0}' parameter {1} is NULL!", "-", 1); - } - if (args2.IsNull()) { - return Operand.Error("Function '{0}' parameter {1} is NULL!", "-", 2); - } + public String Name() { + return "-"; + } - if (args1.IsText()) { - try { - double d = Double.parseDouble(args1.TextValue()); - args1 = Operand.Create(d); - } catch (NumberFormatException e1) { - Boolean b = FunctionUtil.TryParseBoolean(args1.TextValue()); - if (b != null) { - args1 = b ? Operand.ONE : Operand.ZERO; - } else { - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); - java.util.Date dt = sdf.parse(args1.TextValue()); - args1 = Operand.Create(new MyDate(dt)); - } catch (ParseException e2) { - return Operand.Error("Function '{0}' is error", "-"); - } - } - } - } - if (args2.IsText()) { - try { - double d = Double.parseDouble(args2.TextValue()); - args2 = Operand.Create(d); - } catch (NumberFormatException e1) { - Boolean b = FunctionUtil.TryParseBoolean(args2.TextValue()); - if (b != null) { - args2 = b ? Operand.ONE : Operand.ZERO; - } else { - try { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US); - java.util.Date dt = sdf.parse(args2.TextValue()); - args2 = Operand.Create(new MyDate(dt)); - } catch (ParseException e2) { - return Operand.Error("Function '{0}' is error", "-"); - } - } - } - } - if (args1.IsDate()) { - if (args2.IsDate()) { - return Operand.Create(args1.DateValue().subtract(args2.DateValue())); - } - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "-", 2); - if (args2.IsError()) { - return args2; - } - } - if (args2.DoubleValue() == 0) { - return args1; - } - return Operand.Create(args1.DateValue().subtract(args2.DoubleValue())); - } else if (args2.IsDate()) { - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "-", 1); - if (args1.IsError()) { - return args1; - } - } - return Operand.Create(args1.NumberValue() - args2.DateValue().toDouble()); - } - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter {1} is error!", "-", 1); - if (args1.IsError()) { - return args1; - } - } - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "-", 2); - if (args2.IsError()) { - return args2; - } - } + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetNumber_2(engine, tempParameter); if (args2.IsErrorOrNone()) { return args2; } - if (args2.DoubleValue() == 0) { - return args1; - } + if (args2.NumberValue().compareTo(BigDecimal.ZERO) == 0) { return args1; } - return Operand.Create(args1.DoubleValue() - args2.DoubleValue()); + return Operand.Create(args1.NumberValue().subtract(args2.NumberValue())); } @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if (addBrackets) { - stringBuilder.append('('); - } + if (addBrackets) stringBuilder.append('('); func1.toString(stringBuilder, false); stringBuilder.append(" - "); func2.toString(stringBuilder, false); - if (addBrackets) { - stringBuilder.append(')'); - } + if (addBrackets) stringBuilder.append(')'); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_XOR.java b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_XOR.java index 20a65aaa6..847a51f76 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_XOR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/operator/Function_XOR.java @@ -1,37 +1,32 @@ package toolgood.algorithm.internals.functions.operator; import java.util.List; -import java.util.function.BiFunction; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; -import toolgood.algorithm.internals.FunctionBase; import toolgood.algorithm.internals.ParameterType; -import toolgood.algorithm.internals.NoneEngine; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_XOR extends Function_N { +public final class Function_XOR extends Function_N { public Function_XOR(FunctionBase[] funcs) { super(funcs); } @Override - public String getName() { - return "XOR"; + public String Name() { + return "Xor"; } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { int trueCount = 0; for (int i = 0; i < funcs.length; i++) { Operand a = GetBoolean(engine, tempParameter, i); - if (a.IsErrorOrNone()) { - return a; - } - if (a.BooleanValue()) { - trueCount++; - } + if (a.IsErrorOrNone()) { return a; } + if (a.BooleanValue()) trueCount++; } return (trueCount % 2 == 1) ? Operand.True : Operand.False; } @@ -44,12 +39,7 @@ public OperandType GetResultType() { @Override public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { for (int i = 0; i < funcs.length; i++) { - funcs[i].GetParameterTypes(noneEngine, result, OperandType.BOOLEAN, op, val); + funcs[i].GetParameterTypes(noneEngine, result, OperandType.BOOLEAN); } } - - @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "XOR"); - } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NULL.java index 779135c5e..20016c523 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NULL.java @@ -16,7 +16,7 @@ public String getName() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { return Operand.NULL_OPERAND; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueBoolean.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueBoolean.java index dd259da3f..9148ce6ed 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueBoolean.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueBoolean.java @@ -18,7 +18,7 @@ public String getName() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { return _value ? Operand.True : Operand.False; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueNumber.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueNumber.java index 3dc15aab6..2736595f9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueNumber.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueNumber.java @@ -20,7 +20,7 @@ public String getName() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { return _value; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueText.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueText.java index f52c6cd23..6d3ac5f61 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueText.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueText.java @@ -25,7 +25,7 @@ public String getName() { } @Override - public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { return _value; } From 9d6b30d151136ba336d2f27879d3b5867b95bc38 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 13:05:21 +0800 Subject: [PATCH 65/98] fix --- .../internals/functions/FunctionUtil.java | 1 - .../functions/string/Function_ASC.java | 40 ++++-- .../functions/string/Function_CHAR.java | 40 ++++-- .../functions/string/Function_CLEAN.java | 42 +++--- .../functions/string/Function_CODE.java | 40 ++++-- .../string/Function_CONCATENATE.java | 49 ++++--- .../functions/string/Function_EXACT.java | 67 ++++++--- .../functions/string/Function_FIND.java | 73 +++++----- .../functions/string/Function_JIS.java | 42 +++--- .../functions/string/Function_LEFT.java | 53 +++++--- .../functions/string/Function_LEN.java | 36 +++-- .../functions/string/Function_LOWER.java | 36 +++-- .../functions/string/Function_MID.java | 80 ++++++----- .../functions/string/Function_PROPER.java | 38 ++++-- .../functions/string/Function_REPLACE.java | 118 ++++++++-------- .../functions/string/Function_REPT.java | 55 ++++---- .../functions/string/Function_RIGHT.java | 53 ++++---- .../functions/string/Function_RMB.java | 128 +++++++----------- .../functions/string/Function_SEARCH.java | 75 +++++----- .../functions/string/Function_SUBSTITUTE.java | 119 ++++++++-------- .../functions/string/Function_T.java | 29 +++- .../functions/string/Function_TEXT.java | 83 +++++------- .../functions/string/Function_TRIM.java | 36 +++-- .../functions/string/Function_UNICHAR.java | 26 +++- .../functions/string/Function_UNICODE.java | 31 +++-- .../functions/string/Function_UPPER.java | 36 +++-- .../functions/string/Function_VALUE.java | 56 ++++---- 27 files changed, 833 insertions(+), 649 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java index 9bf2aa196..983a55439 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/FunctionUtil.java @@ -1,7 +1,6 @@ package toolgood.algorithm.internals.functions; import java.math.BigDecimal; -import java.util.ArrayList; import java.util.List; import toolgood.algorithm.Operand; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java index 77647c09d..e70c9f63f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_ASC.java @@ -1,24 +1,29 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ASC extends Function_1 { +public final class Function_ASC extends Function_1 { public Function_ASC(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "ASC"); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Asc"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(F_base_ToDBC(args1.TextValue())); } @@ -38,16 +43,21 @@ private static String F_base_ToDBC(String input) { for (int i = 0; i < chars.length; i++) { char c = chars[i]; if (c == 12288) { - chars[i] = (char)32; + chars[i] = (char) 32; } else if (c > 65280 && c < 65375) { - chars[i] = (char)(c - 65248); + chars[i] = (char) (c - 65248); } } return new String(chars); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "ASC"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java index ba03ae40f..9201e97c5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CHAR.java @@ -1,30 +1,44 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_CHAR extends Function_1 { +public final class Function_CHAR extends Function_1 { public Function_CHAR(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotNumber()) { - args1 = args1.ToNumber("Function '{0}' parameter is error!", "Char"); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Char"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + int code = args1.IntValue(); + if (code < 0 || code > 65535) { + return ParameterError(1); } - char c = (char) args1.IntValue(); + char c = (char) code; return Operand.Create(String.valueOf(c)); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Char"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java index 54f67401b..2d9ca596a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CLEAN.java @@ -1,40 +1,45 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_CLEAN extends Function_1 { +public final class Function_CLEAN extends Function_1 { public Function_CLEAN(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "Clean"); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Clean"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } String t = args1.TextValue(); boolean needClean = false; for (int i = 0; i < t.length(); i++) { char c = t.charAt(i); - if (c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\u000b') { + if (c == '\f' || c == '\n' || c == '\r' || c == '\t' || c == '\u000B') { needClean = true; break; } } if (!needClean) { - return args1; // no change + return args1; } StringBuilder sb = new StringBuilder(t.length()); for (int i = 0; i < t.length(); i++) { char c = t.charAt(i); - if (c != '\f' && c != '\n' && c != '\r' && c != '\t' && c != '\u000b') { + if (c != '\f' && c != '\n' && c != '\r' && c != '\t' && c != '\u000B') { sb.append(c); } } @@ -42,7 +47,12 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java index fc643b0be..52f173907 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CODE.java @@ -1,33 +1,43 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_CODE extends Function_1 { +public final class Function_CODE extends Function_1 { public Function_CODE(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "CODE"); - if (args1.IsError()) { - return args1; - } - } - if (args1.TextValue().isEmpty()) { - return Operand.Error("Function '{0}' parameter is error!", "CODE"); + public String Name() { + return "Code"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + if (args1.TextValue() == null || args1.TextValue().isEmpty()) { + return ParameterError(1); } char c = args1.TextValue().charAt(0); return Operand.Create((int) c); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "CODE"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java index 9006c95b4..9df187bda 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_CONCATENATE.java @@ -1,46 +1,53 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_CONCATENATE extends Function_N { +public final class Function_CONCATENATE extends Function_N { public Function_CONCATENATE(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public String Name() { + return "Concatenate"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { if (funcs.length == 0) { return Operand.Create(""); } if (funcs.length == 1) { - Operand a = funcs[0].Evaluate(work, tempParameter); - if (a.IsNotText()) { - a = a.ToText("Function '{0}' parameter {1} is error!", "Concatenate", 1); - if (a.IsError()) { - return a; - } - } - return a; // 只有一�? + Operand a = GetText(engine, tempParameter, 0); + if (a.IsErrorOrNone()) { return a; } + return a; } StringBuilder sb = new StringBuilder(); for (int i = 0; i < funcs.length; i++) { - Operand a = funcs[i].Evaluate(work, tempParameter); - if (a.IsNotText()) { - a = a.ToText("Function '{0}' parameter {1} is error!", "Concatenate", i + 1); - if (a.IsError()) { - return a; - } - } + Operand a = GetText(engine, tempParameter, i); + if (a.IsErrorOrNone()) { return a; } sb.append(a.TextValue()); } return Operand.Create(sb.toString()); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Concatenate"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.TEXT); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java index d3e410004..5739b3458 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java @@ -1,36 +1,59 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_EXACT extends Function_2 { - public Function_EXACT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_EXACT extends Function_2 { + public Function_EXACT(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "EXACT", 1); - if (args1.IsError()) { - return args1; - } - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "EXACT", 2); - if (args2.IsError()) { - return args2; - } - } + public String Name() { + return "Exact"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } return Operand.Create(args1.TextValue().equals(args2.TextValue())); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Exact"); + public OperandType GetResultType() { + return OperandType.BOOLEAN; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + OperandType t1 = func1.GetResultType(); + OperandType t2 = func2.GetResultType(); + if (t1 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func2).ToText(); + if (t2 != OperandType.ERROR && p.IsErrorOrNone() == false) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, "==", p.TextValue()); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT); + return; + } + } else if (t2 == OperandType.NONE) { + Operand p = noneEngine.Evaluate(func1).ToText(); + if (t1 != OperandType.ERROR && p.IsErrorOrNone() == false) { + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, "==", p.TextValue()); + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + return; + } + } + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java index e47624c53..5025402b9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java @@ -1,48 +1,59 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_FIND extends Function_3 { - public Function_FIND(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); +public final class Function_FIND extends Function_3 { + public Function_FIND(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Find", 1); - if (args1.IsError()) { - return args1; - } - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Find", 2); - if (args2.IsError()) { - return args2; - } - } + public String Name() { + return "Find"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } if (func3 == null) { - int p = args2.TextValue().indexOf(args1.TextValue()) + work.ExcelIndex; + int p = args2.TextValue().indexOf(args1.TextValue()) + engine.ExcelIndex(); return Operand.Create(p); } - Operand count = func3.Evaluate(work, tempParameter); - if (count.IsNotNumber()) { - count = count.ToNumber("Function '{0}' parameter {1} is error!", "Find", 3); - if (count.IsError()) { - return count; - } + Operand count = GetNumber_3(engine, tempParameter); + if (count.IsErrorOrNone()) { return count; } + int startIndex = count.IntValue() - engine.ExcelIndex(); + if (startIndex < 0 || startIndex >= args2.TextValue().length()) { + return ParameterError(3); } - int p2 = args2.TextValue().substring(count.IntValue()).indexOf(args1.TextValue()) + count.IntValue() + work.ExcelIndex; - return Operand.Create(p2); + int p2 = args2.TextValue().substring(startIndex).indexOf(args1.TextValue()); + if (p2 < 0) { + return FunctionError(); + } + return Operand.Create(p2 + startIndex + engine.ExcelIndex()); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Find"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java index 996436b08..cb7e10a64 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_JIS.java @@ -1,24 +1,29 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_JIS extends Function_1 { +public final class Function_JIS extends Function_1 { public Function_JIS(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "JIS"); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Jis"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(F_base_ToSBC(args1.TextValue())); } @@ -38,16 +43,21 @@ private static String F_base_ToSBC(String input) { for (int i = 0; i < chars.length; i++) { char c = chars[i]; if (c == ' ') { - chars[i] = (char)12288; - } else if (c > 0 && c < 127) { - chars[i] = (char)(c + 65248); + chars[i] = (char) 12288; + } else if (c < 127) { + chars[i] = (char) (c + 65248); } } return new String(chars); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "JIS"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java index 9e55d08f3..6f0ccca57 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEFT.java @@ -1,43 +1,54 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_LEFT extends Function_2 { - public Function_LEFT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_LEFT extends Function_2 { + public Function_LEFT(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Left", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Left"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } if (args1.TextValue().length() == 0) { return Operand.Create(""); } if (func2 == null) { return Operand.Create(args1.TextValue().substring(0, 1)); } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Left", 2); - if (args2.IsError()) { - return args2; - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + if (args2.IntValue() < 0) { + return ParameterError(2); } int length = Math.min(args2.IntValue(), args1.TextValue().length()); return Operand.Create(args1.TextValue().substring(0, length)); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Left"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java index 8d86338c4..3c6312416 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LEN.java @@ -1,29 +1,39 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_LEN extends Function_1 { +public final class Function_LEN extends Function_1 { public Function_LEN(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "Len"); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Len"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(args1.TextValue().length()); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Len"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java index 202d95626..3d9af1b2a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_LOWER.java @@ -1,29 +1,39 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_LOWER extends Function_1 { +public final class Function_LOWER extends Function_1 { public Function_LOWER(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "Lower"); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Lower"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(args1.TextValue().toLowerCase()); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Lower"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java index 997bce073..f307ae2da 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_MID.java @@ -1,52 +1,62 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_MID extends Function_3 { - public Function_MID(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); +public final class Function_MID extends Function_3 { + public Function_MID(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Mid", 1); - if (args1.IsError()) { - return args1; - } - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Mid", 2); - if (args2.IsError()) { - return args2; - } - } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Mid", 3); - if (args3.IsError()) { - return args3; - } - } - int start = args2.IntValue() - work.ExcelIndex; + public String Name() { + return "Mid"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { return args3; } + + String text = args1.TextValue(); + int startIndex = args2.IntValue() - engine.ExcelIndex(); int length = args3.IntValue(); - int end = Math.min(start + length, args1.TextValue().length()); - if (start < 0) { - start = 0; + + if (startIndex < 0) { + return ParameterError(2); + } + if (length < 0) { + return ParameterError(3); } - if (start >= args1.TextValue().length()) { + if (startIndex >= text.length()) { return Operand.Create(""); } - return Operand.Create(args1.TextValue().substring(start, end)); + if (startIndex + length > text.length()) { + length = text.length() - startIndex; + } + return Operand.Create(text.substring(startIndex, startIndex + length)); + } + + @Override + public OperandType GetResultType() { + return OperandType.TEXT; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Mid"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java index b1af5d0b8..eefaa8816 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_PROPER.java @@ -1,24 +1,29 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_PROPER extends Function_1 { +public final class Function_PROPER extends Function_1 { public Function_PROPER(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "Proper"); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Proper"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } String text = args1.TextValue(); if (text == null || text.isEmpty()) { @@ -39,7 +44,7 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java index 2e86ee9dc..ef143ab9a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPLACE.java @@ -1,87 +1,87 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_4; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_REPLACE extends Function_4 { - public Function_REPLACE(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { - super(func1, func2, func3, func4); +public final class Function_REPLACE extends Function_4 { + public Function_REPLACE(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Replace", 1); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Replace"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } String oldtext = args1.TextValue(); if (func4 == null) { - Operand args22 = func2.Evaluate(work, tempParameter); - if (args22.IsNotText()) { - args22 = args22.ToText("Function '{0}' parameter {1} is error!", "Replace", 2); - if (args22.IsError()) { - return args22; - } - } - Operand args32 = func3.Evaluate(work, tempParameter); - if (args32.IsNotText()) { - args32 = args32.ToText("Function '{0}' parameter {1} is error!", "Replace", 3); - if (args32.IsError()) { - return args32; - } - } + Operand args22 = GetText_2(engine, tempParameter); + if (args22.IsErrorOrNone()) { return args22; } + Operand args32 = GetText_3(engine, tempParameter); + if (args32.IsErrorOrNone()) { return args32; } String old = args22.TextValue(); String newstr = args32.TextValue(); return Operand.Create(oldtext.replace(old, newstr)); } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Replace", 2); - if (args2.IsError()) { - return args2; - } - } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Replace", 3); - if (args3.IsError()) { - return args3; - } - } - Operand args4 = func4.Evaluate(work, tempParameter); - if (args4.IsNotText()) { - args4 = args4.ToText("Function '{0}' parameter {1} is error!", "Replace", 4); - if (args4.IsError()) { - return args4; - } - } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { return args3; } + Operand args4 = GetText_4(engine, tempParameter); + if (args4.IsErrorOrNone()) { return args4; } - int start = args2.IntValue() - work.ExcelIndex; + int start = args2.IntValue() - engine.ExcelIndex(); int length = args3.IntValue(); String newtext = args4.TextValue(); + if (start < 0) { + return ParameterError(2); + } + if (length < 0) { + return ParameterError(3); + } + if (start >= oldtext.length()) { + return Operand.Create(oldtext + newtext); + } + StringBuilder sb = new StringBuilder(oldtext.length() - length + newtext.length()); - for (int i = 0; i < oldtext.length(); i++) { - if (i < start) { - sb.append(oldtext.charAt(i)); - } else if (i == start) { - sb.append(newtext); - } else if (i >= start + length) { - sb.append(oldtext.charAt(i)); - } + sb.append(oldtext.substring(0, start)); + sb.append(newtext); + int endIndex = start + length; + if (endIndex < oldtext.length()) { + sb.append(oldtext.substring(endIndex)); } return Operand.Create(sb.toString()); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Replace"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func4 == null) { + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT); + func3.GetParameterTypes(noneEngine, result, OperandType.TEXT); + } else { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + func4.GetParameterTypes(noneEngine, result, OperandType.TEXT); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java index e868c6b7e..e61845676 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_REPT.java @@ -1,40 +1,43 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_REPT extends Function_2 { - public Function_REPT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_REPT extends Function_2 { + public Function_REPT(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Rept", 1); - if (args1.IsError()) { - return args1; - } - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotNumber()) { - args2 = args2.ToNumber("Function '{0}' parameter {1} is error!", "Rept", 2); - if (args2.IsError()) { - return args2; - } - } + public String Name() { + return "Rept"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetNumber_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } String newtext = args1.TextValue(); int length = args2.IntValue(); if (length < 0) { - return Operand.Error("Function '{0}' parameter {1} is error!", "Rept", 2); + return ParameterError(2); } if (length == 0) { return Operand.Create(""); } + if (newtext.length() > 0 && length > 32767 / newtext.length()) { + return ParameterError(2); + } StringBuilder sb = new StringBuilder(newtext.length() * length); for (int i = 0; i < length; i++) { sb.append(newtext); @@ -43,7 +46,13 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java index 83c0217af..b57250bea 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RIGHT.java @@ -1,28 +1,29 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_RIGHT extends Function_2 { - public Function_RIGHT(FunctionBase func1) { - super(func1, null); +public final class Function_RIGHT extends Function_2 { + public Function_RIGHT(FunctionBase[] funcs) { + super(funcs); } - public Function_RIGHT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + @Override + public String Name() { + return "Right"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Right", 1); - if (args1.IsError()) { - return args1; - } - } + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } if (args1.TextValue().length() == 0) { return Operand.Create(""); @@ -30,12 +31,10 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java index 291829db8..fe37aeca3 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_RMB.java @@ -1,125 +1,91 @@ package toolgood.algorithm.internals.functions.string; -import java.util.regex.Matcher; +import java.math.BigDecimal; +import java.util.List; import java.util.regex.Pattern; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_RMB extends Function_1 { +public final class Function_RMB extends Function_1 { private static final Pattern Regex1 = Pattern.compile("((?<=-|^)[^1-9]*)|((?'z'0)[0A-E]*((?=[1-9])|(?'-z'(?=[F-L\\.]|$))))|((?'b'[F-L])(?'z'0)[0A-L]*((?=[1-9])|(?'-z'(?=[\\.]|$))))"); private static final Pattern Regex2 = Pattern.compile("."); + private static final String CHARS = "负元空零壹贰叁肆伍陆柒捌玖空空空空空空空分角拾佰仟万亿兆京垓秭穰"; public Function_RMB(FunctionBase func1) { super(func1); } @Override - public String getName() { - return "RMB"; + public String Name() { + return "Rmb"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.isNumber() == false) { - return Operand.CreateError("Function 'RMB' parameter is error!"); - } - return Operand.Create(F_base_ToChineseRMB(args1.numberValue())); + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + return Operand.Create(F_base_ToChineseRMB(args1.NumberValue())); } - private static String F_base_ToChineseRMB(double x) { - String s = formatWithScale(x); + private static String F_base_ToChineseRMB(BigDecimal x) { + String s = String.format("%s", x); + String formatStr = "#L#E#D#C#K#E#D#C#J#E#D#C#I#E#D#C#H#E#D#C#G#E#D#C#F#E#D#C#.0B0A"; + s = formatNumber(x, formatStr); String d = Regex1.matcher(s).replaceAll("${b}${z}"); - Matcher m = Regex2.matcher(d); StringBuilder result = new StringBuilder(); - String chars = "\u8d1f\u5143\u7a7a\u96f6\u58f9\u8d30\u53c1\u8086\u4e94\u9646\u67d2\u4e03\u634c\u4e5d\u7a7a\u7a7a\u7a7a\u7a7a\u7a7a\u7a7a\u7a7a\u5206\u89d2\u62fe\u4f70\u4edf\u4e07\u4ebf\u5147\u4eac\u57ab\u79cd\u7a37"; + java.util.regex.Matcher m = Regex2.matcher(d); while (m.find()) { char c = m.group().charAt(0); int idx = c - '-'; - if (idx >= 0 && idx < chars.length()) { - result.append(chars.charAt(idx)); - } else { - result.append(c); + if (idx >= 0 && idx < CHARS.length()) { + result.append(CHARS.charAt(idx)); } } return result.toString(); } - private static String formatWithScale(double x) { - if (x == 0) return "0"; - + private static String formatNumber(BigDecimal x, String format) { StringBuilder sb = new StringBuilder(); - boolean negative = x < 0; - if (negative) x = -x; + String numStr = x.abs().toPlainString(); + String[] parts = numStr.split("\\."); + String intPart = parts[0]; + String decPart = parts.length > 1 ? parts[1] : "0"; - long intPart = (long) x; - int decimalPart = (int) Math.round((x - intPart) * 100); + if (x.compareTo(BigDecimal.ZERO) < 0) { + sb.append("-"); + } - if (intPart == 0) { - sb.append("0"); - } else { - String intStr = Long.toString(intPart); - for (int i = 0; i < intStr.length(); i++) { - char c = intStr.charAt(i); - if (c >= '0' && c <= '9') { - int digit = c - '0'; - if (digit == 0) { - sb.append('A'); - } else { - sb.append((char) ('A' + digit - 1)); - } - } - int scalePos = intStr.length() - 1 - i; - if (scalePos > 0) { - int scale = scalePos % 4; - if (scale == 0) { - if (scalePos == 4) sb.append('J'); - else if (scalePos == 8) sb.append('K'); - else if (scalePos == 12) sb.append('L'); - else if (scalePos == 16) sb.append('M'); - else if (scalePos == 20) sb.append('N'); - } else if (scale == 1) { - if (scalePos == 1) sb.append('B'); - else if (scalePos == 5) sb.append('F'); - else if (scalePos == 9) sb.append('J'); - else if (scalePos == 13) sb.append('N'); - } else if (scale == 2) { - if (scalePos == 2) sb.append('C'); - else if (scalePos == 6) sb.append('G'); - else if (scalePos == 10) sb.append('K'); - else if (scalePos == 14) sb.append('O'); - } else if (scale == 3) { - if (scalePos == 3) sb.append('D'); - else if (scalePos == 7) sb.append('H'); - else if (scalePos == 11) sb.append('L'); - else if (scalePos == 15) sb.append('P'); - } + int formatIdx = 0; + for (int i = 0; i < intPart.length() && formatIdx < format.length(); i++) { + char f = format.charAt(formatIdx++); + while (formatIdx < format.length() && (f == '#' || f == 'L' || f == 'E' || f == 'D' || f == 'C' || f == 'K' || f == 'J' || f == 'I' || f == 'H' || f == 'G' || f == 'F' || f == 'B' || f == 'A')) { + sb.append(f); + if (formatIdx < format.length()) { + f = format.charAt(formatIdx++); + } else { + break; } } + int digit = intPart.charAt(i) - '0'; + sb.append((char) ('A' + digit)); } - if (decimalPart > 0) { - sb.append('.'); - int jiao = decimalPart / 10; - int fen = decimalPart % 10; - if (jiao > 0) { - sb.append((char) ('A' + jiao - 1)); - } - if (fen > 0) { - sb.append((char) ('A' + fen - 1)); - } - } else { - sb.append(".0B0A"); - } + return sb.toString(); + } - return negative ? "-" + sb.toString() : sb.toString(); + @Override + public OperandType GetResultType() { + return OperandType.TEXT; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "RMB"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java index 6fcc78247..cc1309abc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SEARCH.java @@ -1,53 +1,60 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_3; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SEARCH extends Function_3 { - public Function_SEARCH(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); +public final class Function_SEARCH extends Function_3 { + public Function_SEARCH(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Search", 1); - if (args1.IsError()) { - return args1; - } - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Search", 2); - if (args2.IsError()) { - return args2; - } - } + public String Name() { + return "Search"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } if (func3 == null) { - int p = args2.TextValue().toLowerCase().indexOf(args1.TextValue().toLowerCase()) + work.ExcelIndex; + int p = args2.TextValue().toLowerCase().indexOf(args1.TextValue().toLowerCase()) + engine.ExcelIndex(); return Operand.Create(p); } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotNumber()) { - args3 = args3.ToNumber("Function '{0}' parameter {1} is error!", "Search", 3); - if (args3.IsError()) { - return args3; - } + Operand args3 = GetNumber_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { return args3; } + int startIndex = args3.IntValue() - engine.ExcelIndex(); + if (startIndex < 0 || startIndex >= args2.TextValue().length()) { + return FunctionError(); } - int startIndex = args3.IntValue(); - if (startIndex >= args2.TextValue().length()) { - return Operand.Create(0); + int p2 = args2.TextValue().substring(startIndex).toLowerCase().indexOf(args1.TextValue().toLowerCase()); + if (p2 < 0) { + return FunctionError(); } - int p2 = args2.TextValue().substring(startIndex).toLowerCase().indexOf(args1.TextValue().toLowerCase()) + startIndex + work.ExcelIndex; - return Operand.Create(p2); + return Operand.Create(p2 + startIndex + engine.ExcelIndex()); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Search"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func3 != null) { + func3.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java index 3490157b8..79231563b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_SUBSTITUTE.java @@ -1,85 +1,86 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_4; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_SUBSTITUTE extends Function_4 { - public Function_SUBSTITUTE(FunctionBase func1, FunctionBase func2, FunctionBase func3, FunctionBase func4) { - super(func1, func2, func3, func4); +public final class Function_SUBSTITUTE extends Function_4 { + public Function_SUBSTITUTE(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Substitute", 1); - if (args1.IsError()) { - return args1; - } - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Substitute", 2); - if (args2.IsError()) { - return args2; - } - } - Operand args3 = func3.Evaluate(work, tempParameter); - if (args3.IsNotText()) { - args3 = args3.ToText("Function '{0}' parameter {1} is error!", "Substitute", 3); - if (args3.IsError()) { - return args3; - } - } + public String Name() { + return "Substitute"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } + Operand args3 = GetText_3(engine, tempParameter); + if (args3.IsErrorOrNone()) { return args3; } if (func4 == null) { return Operand.Create(args1.TextValue().replace(args2.TextValue(), args3.TextValue())); } - Operand args4 = func4.Evaluate(work, tempParameter); - if (args4.IsNotNumber()) { - args4 = args4.ToNumber("Function '{0}' parameter {1} is error!", "Substitute", 4); - if (args4.IsError()) { - return args4; - } - } + Operand args4 = GetNumber_4(engine, tempParameter); + if (args4.IsErrorOrNone()) { return args4; } String text = args1.TextValue(); String oldtext = args2.TextValue(); String newtext = args3.TextValue(); - int index = args4.IntValue(); + int replaceIndex = args4.IntValue(); + + if (oldtext.length() == 0) { + return Operand.Create(text); + } - int index2 = 0; int estimatedCapacity = Math.max(text.length(), text.length() + (newtext.length() - oldtext.length())); StringBuilder sb = new StringBuilder(estimatedCapacity); - for (int i = 0; i < text.length(); i++) { - boolean b = true; - for (int j = 0; j < oldtext.length(); j++) { - if (i + j >= text.length()) { - b = false; - break; - } - char t = text.charAt(i + j); - char t2 = oldtext.charAt(j); - if (t != t2) { - b = false; - break; - } - } - if (b) { - index2++; - } - if (b && index2 == index) { + int currentIndex = 0; + int foundCount = 0; + int searchPos = 0; + + while (searchPos <= text.length() - oldtext.length()) { + int foundPos = text.indexOf(oldtext, searchPos); + if (foundPos < 0) break; + + foundCount++; + if (foundCount == replaceIndex) { + sb.append(text.substring(currentIndex, foundPos)); sb.append(newtext); - i += oldtext.length() - 1; - } else { - sb.append(text.charAt(i)); + currentIndex = foundPos + oldtext.length(); + break; } + searchPos = foundPos + oldtext.length(); + } + + if (currentIndex == 0) { + return Operand.Create(text); } + sb.append(text.substring(currentIndex)); return Operand.Create(sb.toString()); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Substitute"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT); + func3.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func4 != null) { + func4.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java index 915322099..c77ab7c0d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_T.java @@ -1,18 +1,28 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_T extends Function_1 { +public final class Function_T extends Function_1 { public Function_T(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); + public String Name() { + return "T"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsText()) { return args1; } @@ -20,7 +30,12 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java index 3e84a313e..14d1ae163 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TEXT.java @@ -1,68 +1,59 @@ package toolgood.algorithm.internals.functions.string; -import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; -import java.text.SimpleDateFormat; -import java.util.Locale; +import java.math.BigDecimal; +import java.util.List; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_TEXT extends Function_2 { - public Function_TEXT(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_TEXT extends Function_2 { + public Function_TEXT(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { - return args1; - } - Operand args2 = func2.Evaluate(work, tempParameter); - if (args2.IsNotText()) { - args2 = args2.ToText("Function '{0}' parameter {1} is error!", "Text", 2); - if (args2.IsError()) { - return args2; - } - } + public String Name() { + return "Text"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + Operand args2 = GetText_2(engine, tempParameter); + if (args2.IsErrorOrNone()) { return args2; } if (args1.IsText()) { return args1; } else if (args1.IsBoolean()) { - if (args1.TextValue().equals("TRUE") ) { - return Operand.Create( "TRUE" ); - }else{ - return Operand.Create( "FALSE"); - } + return Operand.Create(args1.BooleanValue() ? "TRUE" : "FALSE"); } else if (args1.IsNumber()) { - String format = args2.TextValue(); - try { - DecimalFormat df = new DecimalFormat(format, new DecimalFormatSymbols(Locale.US)); - return Operand.Create(df.format(args1.NumberValue())); - } catch (Exception e) { - return Operand.Error("Function '{0}' format is error!", "Text"); - } + return Operand.Create(formatNumber(args1.NumberValue(), args2.TextValue())); } else if (args1.IsDate()) { - String format = args2.TextValue(); - try { - SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US); - return Operand.Create(sdf.format(args1.DateValue().toDate())); - } catch (Exception e) { - return Operand.Error("Function '{0}' format is error!", "Text"); - } - } - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Text", 1); - if (args1.IsError()) { - return args1; + return Operand.Create(args1.DateValue().toString(args2.TextValue())); } + args1 = ConvertToText(args1, 1); + if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(args1.TextValue()); } + private String formatNumber(BigDecimal number, String format) { + return number.toString(); + } + + @Override + public OperandType GetResultType() { + return OperandType.TEXT; + } + @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Text"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java index 753850d36..39434e609 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_TRIM.java @@ -1,29 +1,39 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_TRIM extends Function_1 { +public final class Function_TRIM extends Function_1 { public Function_TRIM(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "Trim"); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Trim"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(args1.TextValue().trim()); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Trim"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICHAR.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICHAR.java index ef2315494..f2d18215d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICHAR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICHAR.java @@ -1,22 +1,29 @@ package toolgood.algorithm.internals.functions.string; -import java.util.function.BiFunction; +import java.util.List; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_UNICHAR extends Function_1 { +public final class Function_UNICHAR extends Function_1 { public Function_UNICHAR(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { - Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsError()) return args1; + public String Name() { + return "UniChar"; + } + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetNumber_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } int code = args1.IntValue(); if (code < 0 || code > 0x10FFFF || (code >= 0xD800 && code <= 0xDFFF)) { return ParameterError(1); @@ -29,7 +36,12 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICODE.java index dc4e19fdf..06321a68c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UNICODE.java @@ -1,31 +1,42 @@ package toolgood.algorithm.internals.functions.string; -import java.util.function.BiFunction; +import java.util.List; import toolgood.algorithm.AlgorithmEngine; import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_UNICODE extends Function_1 { +public final class Function_UNICODE extends Function_1 { public Function_UNICODE(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { - Operand args1 = GetText_1(engine, tempParameter); - if (args1.IsError()) return args1; + public String Name() { + return "Unicode"; + } - String text = args1.TextValue(); - if (text == null || text.isEmpty()) { + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } + if (args1.TextValue() == null || args1.TextValue().isEmpty()) { return ParameterError(1); } - return Operand.Create(Character.codePointAt(text, 0)); + return Operand.Create(args1.TextValue().codePointAt(0)); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Unicode"); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java index 395a85e8d..5f8a363cc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_UPPER.java @@ -1,29 +1,39 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_UPPER extends Function_1 { +public final class Function_UPPER extends Function_1 { public Function_UPPER(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "Upper"); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Upper"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } return Operand.Create(args1.TextValue().toUpperCase()); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Upper"); + public OperandType GetResultType() { + return OperandType.TEXT; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java index 155655a4a..d6786062c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_VALUE.java @@ -1,46 +1,46 @@ package toolgood.algorithm.internals.functions.string; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.math.BigDecimal; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -import java.text.NumberFormat; -import java.text.ParseException; -import java.util.Locale; - -public class Function_VALUE extends Function_1 { +public final class Function_VALUE extends Function_1 { public Function_VALUE(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNumber()) { - return args1; - } - if (args1.IsBoolean()) { - return args1.BooleanValue() ? Operand.ONE : Operand.ZERO; - } - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter is error!", "Value"); - if (args1.IsError()) { - return args1; - } - } + public String Name() { + return "Value"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } try { - NumberFormat format = NumberFormat.getInstance(Locale.US); - Number number = format.parse(args1.TextValue()); - return Operand.Create(number.doubleValue()); - } catch (ParseException e) { - return Operand.Error("Function '{0}' parameter is error!", "Value"); + BigDecimal d = new BigDecimal(args1.TextValue().trim()); + return Operand.Create(d); + } catch (NumberFormatException e) { + return ParameterError(1); } } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Value"); + public OperandType GetResultType() { + return OperandType.NUMBER; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); } } From 8a24684cb5721fec40b509c88b3d013c4f007889 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 13:20:41 +0800 Subject: [PATCH 66/98] fix --- .../internals/NumberUnitTypeHelper.java | 2 +- .../functions/value/Function_Array.java | 38 +++-- .../functions/value/Function_ArrayJson.java | 43 +++++- .../value/Function_ArrayJsonItem.java | 32 ++++- .../functions/value/Function_DiyFunction.java | 34 ++++- .../functions/value/Function_ERROR.java | 41 ++++-- .../value/Function_GetJsonValue.java | 129 +++++++++-------- .../functions/value/Function_JSON.java | 38 +++-- .../functions/value/Function_NULL.java | 11 +- .../functions/value/Function_NUM.java | 28 ---- .../functions/value/Function_Number.java | 44 ++++++ .../functions/value/Function_PARAM.java | 51 ++++--- .../functions/value/Function_PARAMETER.java | 56 ++++---- .../functions/value/Function_Value.java | 57 -------- .../value/Function_ValueBoolean.java | 10 +- .../functions/value/Function_ValueNumber.java | 8 +- .../functions/value/Function_ValueText.java | 20 +-- .../visitors/MathFunctionVisitor.java | 135 +++++++++++++++++- 18 files changed, 508 insertions(+), 269 deletions(-) delete mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Number.java delete mode 100644 java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java diff --git a/java/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java b/java/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java index ed4854447..7a5b85fa7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java +++ b/java/src/main/java/toolgood/algorithm/internals/NumberUnitTypeHelper.java @@ -13,7 +13,7 @@ public class NumberUnitTypeHelper { /// 获取 单位字典 /// /// - static Map GetUnitTypedict() { + public static Map GetUnitTypedict() { if (unitTypedict == null) { unitTypedict = new HashMap<>(); unitTypedict.put("KM", NumberUnitType.KM); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java index 3fbce7f43..ec0cc6040 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Array.java @@ -3,31 +3,43 @@ import java.util.ArrayList; import java.util.List; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_Array extends Function_N { +public final class Function_Array extends Function_N { public Function_Array(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); - for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); - if (aa.IsError()) { - return aa; - } - args.add(aa); + public String Name() { + return "Array"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + List args = new ArrayList<>(funcs.length); + Operand error = TryEvaluateAll(engine, tempParameter, args); + if (error != null) { + return error; } return Operand.Create(args); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Array"); + public OperandType GetResultType() { + return OperandType.ARRAY; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NONE); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java index c6401eeca..63a58e93c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java @@ -1,21 +1,40 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.OperandKeyValue; +import toolgood.algorithm.operands.OperandKeyValueList; -public class Function_ArrayJson extends Function_N { +public final class Function_ArrayJson extends Function_N { public Function_ArrayJson(FunctionBase[] funcs) { super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public String Name() { + return "ArrayJson"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { OperandKeyValueList result = new OperandKeyValueList(); for (FunctionBase item : funcs) { - Operand o = item.Evaluate(work, tempParameter); - result.AddValue(((OperandKeyValue)o).getValue()); + Operand o = item.Evaluate(engine, tempParameter); + if (o.IsErrorOrNone()) { + return o; + } + if (o instanceof OperandKeyValue) { + result.AddValue(((OperandKeyValue) o).getValue()); + } else { + return ParameterError(1); + } } return result; } @@ -31,4 +50,16 @@ public void toString(StringBuilder stringBuilder, boolean addBrackets) { } stringBuilder.append('}'); } + + @Override + public OperandType GetResultType() { + return OperandType.ARRAYJSON; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NONE); + } + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java index 29e3ba968..969151ad4 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJsonItem.java @@ -1,11 +1,18 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.operands.KeyValue; +import toolgood.algorithm.operands.OperandKeyValue; -public class Function_ArrayJsonItem extends Function_1 { +public final class Function_ArrayJsonItem extends Function_1 { private final String key; public Function_ArrayJsonItem(String key, FunctionBase func1) { @@ -14,10 +21,15 @@ public Function_ArrayJsonItem(String key, FunctionBase func1) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public String Name() { + return "ArrayJsonItem"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { KeyValue keyValue = new KeyValue(); keyValue.setKey(key); - keyValue.setValue(func1.Evaluate(work, tempParameter)); + keyValue.setValue(func1.Evaluate(engine, tempParameter)); return new OperandKeyValue(keyValue); } @@ -27,4 +39,14 @@ public void toString(StringBuilder stringBuilder, boolean addBrackets) { stringBuilder.append(':'); func1.toString(stringBuilder, false); } + + @Override + public OperandType GetResultType() { + return OperandType.ARRAYJSON; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java index b761921dd..62c054b42 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_DiyFunction.java @@ -3,12 +3,15 @@ import java.util.ArrayList; import java.util.List; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_N; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_DiyFunction extends Function_N { +public final class Function_DiyFunction extends Function_N { private final String funName; public Function_DiyFunction(String name, FunctionBase[] funcs) { @@ -17,17 +20,34 @@ public Function_DiyFunction(String name, FunctionBase[] funcs) { } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - List args = new ArrayList<>(); + public String Name() { + return "DiyFunction"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + List args = new ArrayList<>(funcs.length); for (FunctionBase item : funcs) { - Operand aa = item.Evaluate(work, tempParameter); + Operand aa = item.Evaluate(engine, tempParameter); args.add(aa); } - return work.ExecuteDiyFunction(funName, args); + return engine.ExecuteDiyFunction(funName, args); } @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { AddFunction(stringBuilder, funName); } + + @Override + public OperandType GetResultType() { + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + for (int i = 0; i < funcs.length; i++) { + funcs[i].GetParameterTypes(noneEngine, result, OperandType.NONE); + } + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java index 1bd831283..1e48c914f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java @@ -1,29 +1,46 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_ERROR extends Function_1 { +public final class Function_ERROR extends Function_1 { public Function_ERROR(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Error", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Error"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + if (func1 == null) { + return Operand.Error(""); + } + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } return Operand.Error(args1.TextValue()); } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Error"); + public OperandType GetResultType() { + return OperandType.ERROR; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + if (func1 != null) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java index 35e4bd453..0a0aa464c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java @@ -1,33 +1,46 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.operands.OperandKeyValueList; + +public final class Function_GetJsonValue extends Function_2 { -public class Function_GetJsonValue extends Function_2 { public Function_GetJsonValue(FunctionBase func1, FunctionBase func2) { super(func1, func2); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand obj = func1.Evaluate(work, tempParameter); - if (obj.IsError()) { + public String Name() { + return "GetJsonValue"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand obj = func1.Evaluate(engine, tempParameter); + if (obj.IsErrorOrNone()) { return obj; } - Operand op = func2.Evaluate(work, tempParameter); - if (op.IsError()) { + Operand op = func2.Evaluate(engine, tempParameter); + if (op.IsErrorOrNone()) { return op; } if (obj.IsArray()) { - op = op.ToNumber("Function '{0}' parameter {1} is error!", "GetJsonValue", 2); - if (op.IsError()) { + op = ConvertToNumber(op, 2); + if (op.IsErrorOrNone()) { return op; } - int index = op.IntValue() - work.ExcelIndex; - if (index < obj.ArrayValue().size()) { + int index = op.IntValue() - engine.ExcelIndex; + if (index < obj.ArrayValue().size() && index >= 0) { return obj.ArrayValue().get(index); } return Operand.Error("Function '{0}' ARRARY index {1} greater than maximum length!", "GetJsonValue", index); @@ -35,13 +48,15 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction= 0) { + return ConvertJsonDataToOperand(json.get(index)); } return Operand.Error("Function '{0}' JSON index {1} greater than maximum length!", "GetJsonValue", index); } else { - op = op.ToText("Function '{0}' parameter {1} is error!", "GetJsonValue", 2); - if (op.IsError()) { + op = ConvertToText(op, 2); + if (op.IsErrorOrNone()) { return op; } JsonData v = json.get(op.TextValue()); if (v != null) { - if (v.isString()) { - return Operand.Create(v.getStringValue()); - } - if (v.IsBoolean()) { - return Operand.Create(v.BooleanValue()); - } - if (v.isDouble()) { - return Operand.Create(v.NumberValue()); - } - if (v.isObject()) { - return Operand.Create(v); - } - if (v.IsArray()) { - return Operand.Create(v); - } - if (v.IsNull()) { - return Operand.CreateNull(); - } - return Operand.Create(v); + return ConvertJsonDataToOperand(v); } } } return Operand.Error("Function '{0}' Operator is error!", "GetJsonValue"); } + private static Operand ConvertJsonDataToOperand(JsonData v) { + if (v.isString()) { + return Operand.Create(v.getStringValue()); + } + if (v.IsBoolean()) { + return Operand.Create(v.BooleanValue()); + } + if (v.isDouble()) { + return Operand.Create(v.NumberValue()); + } + if (v.isObject()) { + return Operand.Create(v); + } + if (v.IsArray()) { + return Operand.Create(v); + } + if (v.IsNull()) { + return Operand.Null(); + } + return Operand.Create(v); + } + @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { func1.toString(stringBuilder, false); @@ -119,4 +119,15 @@ public void toString(StringBuilder stringBuilder, boolean addBrackets) { func2.toString(stringBuilder, false); stringBuilder.append(']'); } + + @Override + public OperandType GetResultType() { + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); + func2.GetParameterTypes(noneEngine, result, OperandType.NONE); + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java index 46a399655..3bc2884c8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_JSON.java @@ -1,19 +1,30 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.NoneEngine; +import toolgood.algorithm.litJson.JsonMapper; -public class Function_JSON extends Function_1 { +public final class Function_JSON extends Function_1 { public Function_JSON(FunctionBase func1) { super(func1); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsError()) { + public String Name() { + return "Json"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = func1.Evaluate(engine, tempParameter); + if (args1.IsErrorOrNone()) { return args1; } if (args1.IsJson()) { @@ -22,8 +33,8 @@ public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NONE); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NULL.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NULL.java index 20016c523..b32477426 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NULL.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NULL.java @@ -1,23 +1,22 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.functions.Function_0; -public class Function_NULL extends FunctionBase { - +public final class Function_NULL extends Function_0 { public Function_NULL() { } @Override - public String getName() { + public String Name() { return "NULL"; } @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { - return Operand.NULL_OPERAND; + return Operand.Null; } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java deleted file mode 100644 index 53e17ad95..000000000 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_NUM.java +++ /dev/null @@ -1,28 +0,0 @@ -package toolgood.algorithm.internals.functions.value; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - -public class Function_NUM extends FunctionBase { - private final double d; - private final String unit; - - public Function_NUM(double func1, String func2) { - this.d = func1; - this.unit = func2; - } - - @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - var dict = NumberUnitTypeHelper.GetUnitTypedict(); - var d2 = NumberUnitTypeHelper.TransformationUnit(d, dict.get(unit), work.getDistanceUnit(), work.getAreaUnit(), work.getVolumeUnit(), work.getMassUnit()); - return Operand.Create(d2); - } - - @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - stringBuilder.append(d); - stringBuilder.append(unit); - } -} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Number.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Number.java new file mode 100644 index 000000000..759aae240 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Number.java @@ -0,0 +1,44 @@ +package toolgood.algorithm.internals.functions.value; + +import java.math.BigDecimal; +import java.util.Map; + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.NumberUnitType; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.NumberUnitTypeHelper; +import toolgood.algorithm.internals.functions.Function_0; + +public final class Function_Number extends Function_0 { + private final BigDecimal d; + private final String unit; + + public Function_Number(BigDecimal func1, String func2) { + this.d = func1; + this.unit = func2; + } + + @Override + public String Name() { + return "Num"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Map dict = NumberUnitTypeHelper.GetUnitTypedict(); + BigDecimal d2 = NumberUnitTypeHelper.TransformationUnit(d, dict.get(unit), engine.DistanceUnit, engine.AreaUnit, engine.VolumeUnit, engine.MassUnit); + return Operand.Create(d2); + } + + @Override + public void toString(StringBuilder stringBuilder, boolean addBrackets) { + stringBuilder.append(d); + stringBuilder.append(unit); + } + + @Override + public OperandType GetResultType() { + return OperandType.NUMBER; + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java index 84527c373..68afd94ad 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAM.java @@ -1,41 +1,56 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_2; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_PARAM extends Function_2 { - public Function_PARAM(FunctionBase func1, FunctionBase func2) { - super(func1, func2); +public final class Function_PARAM extends Function_2 { + public Function_PARAM(FunctionBase[] funcs) { + super(funcs); } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Param", 1); - if (args1.IsError()) { - return args1; - } + public String Name() { + return "Param"; + } + + @Override + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { + Operand args1 = GetText_1(engine, tempParameter); + if (args1.IsErrorOrNone()) { + return args1; } if (tempParameter != null) { - Operand r = tempParameter.apply(work, args1.TextValue()); + Operand r = tempParameter.apply(engine, args1.TextValue()); if (r != null) { return r; } } - Operand result = work.getParameter(args1.TextValue()); - if (result.IsError()) { + Operand result = engine.GetParameter(args1.TextValue()); + if (result.IsErrorOrNone()) { if (func2 != null) { - return func2.Evaluate(work, tempParameter); + return func2.Evaluate(engine, tempParameter); } } return result; } @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - AddFunction(stringBuilder, "Param"); + public OperandType GetResultType() { + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + if (func2 != null) { + func2.GetParameterTypes(noneEngine, result, OperandType.NONE); + } } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java index bd0c0c1f3..35164a93f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java @@ -1,51 +1,55 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; +import java.util.List; + import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.ParameterType; +import toolgood.algorithm.internals.functions.Function_0; +import toolgood.algorithm.internals.functions.NoneEngine; -public class Function_PARAMETER extends FunctionBase { +public final class Function_PARAMETER extends Function_0 { private final String name; - private final FunctionBase func1; public Function_PARAMETER(String name) { this.name = name; - this.func1 = null; } - public Function_PARAMETER(FunctionBase func1) { - this.name = null; - this.func1 = func1; + @Override + public String Name() { + return "Parameter"; } @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { + public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { String txt = name; - if (txt == null || txt.isEmpty()) { - Operand args1 = func1.Evaluate(work, tempParameter); - if (args1.IsNotText()) { - args1 = args1.ToText("Function '{0}' parameter {1} is error!", "Parameter", 1); - if (args1.IsError()) { - return args1; - } - } - txt = args1.TextValue(); - } if (tempParameter != null) { - Operand r = tempParameter.apply(work, txt); + Operand r = tempParameter.apply(engine, txt); if (r != null) { return r; } } - return work.getParameter(txt); + return engine.GetParameter(txt); } @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if (name == null || name.isEmpty()) { - func1.toString(stringBuilder, false); - } else { - stringBuilder.append(name); - } + stringBuilder.append(name); + } + + @Override + public OperandType GetResultType() { + return OperandType.NONE; + } + + @Override + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + ParameterType pt = new ParameterType(); + pt.Name = name; + pt.Type = operandType; + pt.Operator = op; + pt.Value = val; + result.add(pt); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java deleted file mode 100644 index eb3fbfc0f..000000000 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_Value.java +++ /dev/null @@ -1,57 +0,0 @@ -package toolgood.algorithm.internals.functions.value; - -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; -import toolgood.algorithm.AlgorithmEngine; - -public class Function_Value extends FunctionBase { - private final Operand _value; - private final String _showName; - - public Function_Value(Operand value) { - this._value = value; - this._showName = null; - } - - public Function_Value(Operand value, String showName) { - this._value = value; - this._showName = showName; - } - - @Override - public Operand Evaluate(AlgorithmEngine work, java.util.function.BiFunction tempParameter) { - return _value; - } - - @Override - public void toString(StringBuilder stringBuilder, boolean addBrackets) { - if (_showName != null && !_showName.isEmpty()) { - stringBuilder.append(_showName); - return; - } - if (_value.IsText()) { - stringBuilder.append('"'); - String stringValue = _value.TextValue(); - stringValue = stringValue.replace("\\", "\\\\"); - stringValue = stringValue.replace("\r", "\\r"); - stringValue = stringValue.replace("\n", "\\n"); - stringValue = stringValue.replace("\t", "\\t"); - stringValue = stringValue.replace("\0", "\\0"); - stringValue = stringValue.replace("\u000b", "\\v"); - stringValue = stringValue.replace("\u0007", "\\a"); - stringValue = stringValue.replace("\b", "\\b"); - stringValue = stringValue.replace("\f", "\\f"); - stringValue = stringValue.replace("\"", "\\\""); - stringBuilder.append(stringValue); - stringBuilder.append('"'); - } else if (_value.IsDate()) { - stringBuilder.append('"'); - stringBuilder.append(_value.DateValue().toString()); - stringBuilder.append('"'); - } else if (_value.IsBoolean()) { - stringBuilder.append(_value.BooleanValue() ? "true" : "false"); - } else { - stringBuilder.append(_value.toString()); - } - } -} diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueBoolean.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueBoolean.java index 9148ce6ed..e510fbee0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueBoolean.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueBoolean.java @@ -1,11 +1,11 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.functions.Function_0; -public class Function_ValueBoolean extends FunctionBase { +public final class Function_ValueBoolean extends Function_0 { private final boolean _value; public Function_ValueBoolean(boolean value) { @@ -13,7 +13,7 @@ public Function_ValueBoolean(boolean value) { } @Override - public String getName() { + public String Name() { return _value ? "True" : "False"; } @@ -29,6 +29,6 @@ public OperandType GetResultType() { @Override public void toString(StringBuilder stringBuilder, boolean addBrackets) { - stringBuilder.append(getName()); + stringBuilder.append(Name()); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueNumber.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueNumber.java index 2736595f9..cee2fd067 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueNumber.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueNumber.java @@ -1,11 +1,11 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.functions.Function_0; -public class Function_ValueNumber extends FunctionBase { +public final class Function_ValueNumber extends Function_0 { private final Operand _value; private final String _showName; @@ -15,7 +15,7 @@ public Function_ValueNumber(Operand value, String showName) { } @Override - public String getName() { + public String Name() { return _showName; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueText.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueText.java index 6d3ac5f61..9d1d1d5fb 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueText.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ValueText.java @@ -1,11 +1,11 @@ package toolgood.algorithm.internals.functions.value; -import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.Operand; import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; +import toolgood.algorithm.internals.functions.Function_0; -public class Function_ValueText extends FunctionBase { +public final class Function_ValueText extends Function_0 { private final Operand _value; private final String _showName; @@ -20,7 +20,7 @@ public Function_ValueText(Operand value, String showName) { } @Override - public String getName() { + public String Name() { return "Value"; } @@ -29,14 +29,9 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction implements mathVisitor { @@ -2475,6 +2494,120 @@ public FunctionBase visitVersion_fun(mathParser.Version_funContext context) return new Function_Value(Operand.Version); } + @Override + public FunctionBase visitSLOPE_fun(SLOPE_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitSLOPE_fun'"); + } + + @Override + public FunctionBase visitISTEXT_fun(ISTEXT_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitISTEXT_fun'"); + } + + @Override + public FunctionBase visitCORREL_fun(CORREL_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitCORREL_fun'"); + } + + @Override + public FunctionBase visitGESTEP_fun(GESTEP_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitGESTEP_fun'"); + } + + @Override + public FunctionBase visitFORECAST_fun(FORECAST_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitFORECAST_fun'"); + } + + @Override + public FunctionBase visitSUMXMY2_fun(SUMXMY2_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitSUMXMY2_fun'"); + } + + @Override + public FunctionBase visitSERIESSUM_fun(SERIESSUM_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitSERIESSUM_fun'"); + } + + @Override + public FunctionBase visitRANK_fun(RANK_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitRANK_fun'"); + } + + @Override + public FunctionBase visitROMAN_fun(ROMAN_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitROMAN_fun'"); + } + + @Override + public FunctionBase visitDELTA_fun(DELTA_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitDELTA_fun'"); + } + + @Override + public FunctionBase visitPEARSON_fun(PEARSON_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitPEARSON_fun'"); + } + + @Override + public FunctionBase visitIFS_fun(IFS_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitIFS_fun'"); + } + + @Override + public FunctionBase visitSUMPRODUCT_fun(SUMPRODUCT_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitSUMPRODUCT_fun'"); + } + + @Override + public FunctionBase visitSUMX2PY2_fun(SUMX2PY2_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitSUMX2PY2_fun'"); + } + + @Override + public FunctionBase visitSWITCH_fun(SWITCH_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitSWITCH_fun'"); + } + + @Override + public FunctionBase visitSUMX2MY2_fun(SUMX2MY2_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitSUMX2MY2_fun'"); + } + + @Override + public FunctionBase visitXOR_fun(XOR_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitXOR_fun'"); + } + + @Override + public FunctionBase visitINTERCEPT_fun(INTERCEPT_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitINTERCEPT_fun'"); + } + + @Override + public FunctionBase visitARABIC_fun(ARABIC_funContext ctx) { + // TODO Auto-generated method stub + throw new UnsupportedOperationException("Unimplemented method 'visitARABIC_fun'"); + } + //#endregion getValue From f13334c8a098e6bc11d8db926abecf03e1f2f9d2 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 13:31:39 +0800 Subject: [PATCH 67/98] fix --- .../toolgood/algorithm/AlgorithmEngine.java | 246 +-- .../toolgood/algorithm/AlgorithmEngineEx.java | 131 +- .../algorithm/internals/CalculateTree.java | 31 +- .../algorithm/internals/ConditionTree.java | 30 +- .../internals/functions/NoneEngine.java | 5 +- .../internals/visitors/DiyNameVisitor.java | 1406 +---------------- .../internals/visitors/MathSplitVisitor.java | 1223 +------------- .../internals/visitors/MathSplitVisitor2.java | 1216 +------------- .../algorithm/math/mathBaseVisitor.java | 3 +- .../toolgood/algorithm/math/mathLexer.java | 1 - 10 files changed, 139 insertions(+), 4153 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java index 85578df8a..907571548 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java @@ -1,6 +1,8 @@ package toolgood.algorithm; +import java.math.BigDecimal; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; @@ -9,95 +11,68 @@ import toolgood.algorithm.enums.DistanceUnitType; import toolgood.algorithm.enums.MassUnitType; import toolgood.algorithm.enums.VolumeUnitType; -import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.visitors.AntlrErrorTextWriter; +import toolgood.algorithm.internals.visitors.MathFunctionVisitor; import toolgood.algorithm.math.mathLexer; import toolgood.algorithm.math.mathParser; import toolgood.algorithm.operands.MyDate; -import toolgood.algorithm.internals.visitors.MathFunctionVisitor; public class AlgorithmEngine { public int ExcelIndex = 1; - /** - * 使用 本地时间�?影响 时间截转�? - */ public boolean UseLocalTime = true; - /** - * 长度单位 - */ public DistanceUnitType DistanceUnit = DistanceUnitType.M; - /** - * 面积单位 - */ public AreaUnitType AreaUnit = AreaUnitType.M2; - /** - * 体积单位 - */ public VolumeUnitType VolumeUnit = VolumeUnitType.M3; - /** - * 重量单位 - */ public MassUnitType MassUnit = MassUnitType.KG; - /** - * 最后一个错�? - */ - private String LastError; - - /** - * 获取最后一个错�? - */ - public String getLastError() { - return LastError; - } + public String LastError; - /** - * 设置最后一个错�? - */ - public void SetLastError(String error) { - LastError = error; - } + public boolean UseParseCache = false; + private final ConcurrentHashMap _parseCache = new ConcurrentHashMap<>(); - /** - * 使用EXCEL索引 - */ public void setUseExcelIndex(boolean value) { ExcelIndex = value ? 1 : 0; } - /** - * 自定义参�?请重写此方法 - */ - public Operand getParameter(String parameter) { + public Operand GetParameter(String parameter) { return Operand.Error("Parameter [" + parameter + "] is missing."); } - /** - * 自定义函�?请重写此方法 - */ - public Operand executeDiyFunction(String parameter, List args) { + public Operand ExecuteDiyFunction(String parameter, List args) { return Operand.Error("DiyFunction [" + parameter + "] is missing."); } - /** - * 编译公式,默�? - */ public FunctionBase Parse(String exp) throws Exception { LastError = null; if (exp == null || exp.trim().isEmpty()) { LastError = "Parameter exp invalid !"; throw new Exception(LastError); } + if (UseParseCache) { + return _parseCache.computeIfAbsent(exp.trim(), e -> { + try { + return ParseInternal(e); + } catch (Exception e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + return null; + }); + } + return ParseInternal(exp); + } + + private FunctionBase ParseInternal(String exp) throws Exception { AntlrErrorTextWriter antlrErrorTextWriter = new AntlrErrorTextWriter(); - org.antlr.v4.runtime.CharStream stream = org.antlr.v4.runtime.CharStreams.fromString(exp); + org.antlr.v4.runtime.CharStream stream = CharStreams.fromString(exp); mathLexer lexer = new mathLexer(stream); - org.antlr.v4.runtime.CommonTokenStream tokens = new org.antlr.v4.runtime.CommonTokenStream(lexer); + CommonTokenStream tokens = new CommonTokenStream(lexer); mathParser parser = new mathParser(tokens); mathParser.ProgContext context = parser.prog(); @@ -109,177 +84,52 @@ public FunctionBase Parse(String exp) throws Exception { return visitor.visit(context); } - /** - * 执行函数 - */ - public Operand Evaluate(FunctionBase function) { + public Operand Evaluate(FunctionBase function) throws Exception { return function.Evaluate(this); } - /** - * 执行函数,如果异常,返回默认�? - */ - public short TryEvaluate(String exp, short def) { - try { - var function = Parse(exp); - var obj = function.Evaluate(this); - if (obj.IsNotNumber()) { - obj = obj.ToNumber("It can't be converted to number!"); - if (obj.IsError()) { - SetLastError(obj.ErrorMsg); - return def; - } - } - return (short) obj.IntValue; - } catch (Exception ex) { - SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); - } - return def; - } - - /** - * 执行函数,如果异常,返回默认�? - */ public int TryEvaluate(String exp, int def) { - try { - var function = Parse(exp); - var obj = function.Evaluate(this); - if (obj.IsNotNumber()) { - obj = obj.ToNumber("It can't be converted to number!"); - if (obj.IsError()) { - SetLastError(obj.ErrorMsg); - return def; - } - } - return obj.IntValue; - } catch (Exception ex) { - SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); - } - return def; + return TryEvaluateCore(exp, def, o -> o.IsNumber() ? o : o.ToNumber("It can't be converted to number!"), o -> o.IntValue()); } - /** - * 执行函数,如果异常,返回默认�? - */ public long TryEvaluate(String exp, long def) { - try { - var function = Parse(exp); - var obj = function.Evaluate(this); - if (obj.IsNotNumber()) { - obj = obj.ToNumber("It can't be converted to number!"); - if (obj.IsError()) { - SetLastError(obj.ErrorMsg); - return def; - } - } - return obj.LongValue; - } catch (Exception ex) { - SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); - } - return def; + return TryEvaluateCore(exp, def, o -> o.IsNumber() ? o : o.ToNumber("It can't be converted to number!"), o -> o.LongValue()); } - /** - * 执行函数,如果异常,返回默认�? - */ - public float TryEvaluate(String exp, float def) { - try { - var function = Parse(exp); - var obj = function.Evaluate(this); - if (obj.IsNotNumber()) { - obj = obj.ToNumber("It can't be converted to number!"); - if (obj.IsError()) { - SetLastError(obj.ErrorMsg); - return def; - } - } - return (float) obj.DoubleValue; - } catch (Exception ex) { - SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); - } - return def; + public double TryEvaluate(String exp, double def) { + return TryEvaluateCore(exp, def, o -> o.IsNumber() ? o : o.ToNumber("It can't be converted to number!"), o -> o.DoubleValue()); } - /** - * 执行函数,如果异常,返回默认�? - */ - public double TryEvaluate(String exp, double def) { - try { - var function = Parse(exp); - var obj = function.Evaluate(this); - if (obj.IsNotNumber()) { - obj = obj.ToNumber("It can't be converted to number!"); - if (obj.IsError()) { - SetLastError(obj.ErrorMsg); - return def; - } - } - return obj.DoubleValue; - } catch (Exception ex) { - SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); - } - return def; + public BigDecimal TryEvaluate(String exp, BigDecimal def) { + return TryEvaluateCore(exp, def, o -> o.IsNumber() ? o : o.ToNumber("It can't be converted to number!"), o -> o.NumberValue()); } - /** - * 执行函数,如果异常,返回默认�? - */ public String TryEvaluate(String exp, String def) { - try { - var function = Parse(exp); - var obj = function.Evaluate(this); - if (obj.IsNotText()) { - obj = obj.ToText("It can't be converted to string!"); - if (obj.IsError()) { - SetLastError(obj.ErrorMsg); - return def; - } - } - return obj.TextValue; - } catch (Exception ex) { - SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); - } - return def; + return TryEvaluateCore(exp, def, o -> o.IsText() ? o : o.ToText("It can't be converted to string!"), o -> o.TextValue()); } - /** - * 执行函数,如果异常,返回默认�? - */ public boolean TryEvaluate(String exp, boolean def) { - try { - var function = Parse(exp); - var obj = function.Evaluate(this); - if (obj.IsNotBoolean()) { - obj = obj.ToBoolean("It can't be converted to bool!"); - if (obj.IsError()) { - SetLastError(obj.ErrorMsg); - return def; - } - } - return obj.BooleanValue; - } catch (Exception ex) { - SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); - } - return def; + return TryEvaluateCore(exp, def, o -> o.IsBoolean() ? o : o.ToBoolean("It can't be converted to bool!"), o -> o.BooleanValue()); } - /** - * 执行函数,如果异常,返回默认�? - */ public MyDate TryEvaluate_MyDate(String exp, MyDate def) { + return TryEvaluateCore(exp, def, + o -> o.IsDate() ? o : o.ToMyDate("It can't be converted to DateTime!"), + o -> o.DateValue()); + } + + private T TryEvaluateCore(String exp, T def, java.util.function.Function convert, java.util.function.Function getValue) { try { - var function = Parse(exp); - var obj = function.Evaluate(this); - if (obj.IsNotDate()) { - obj = obj.ToMyDate("It can't be converted to DateTime!"); - if (obj.IsError()) { - SetLastError(obj.ErrorMsg); - return def; - } + FunctionBase function = Parse(exp); + Operand obj = function.Evaluate(this); + obj = convert.apply(obj); + if (obj.IsError()) { + LastError = obj.ErrorMsg(); + return def; } - return obj.DateValue; + return getValue.apply(obj); } catch (Exception ex) { - SetLastError(ex.getMessage() + "\r\n" + ex.getStackTrace()); + LastError = ex.toString(); } return def; } diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java index e3312afc9..b9baf3dae 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java @@ -5,232 +5,123 @@ import java.util.List; import java.util.concurrent.ConcurrentHashMap; +import toolgood.algorithm.litJson.JsonData; +import toolgood.algorithm.litJson.JsonMapper; import toolgood.algorithm.operands.MyDate; -/** - * AlgorithmEngine 扩展�? - * 增加自定义参数缓存功�? - */ public class AlgorithmEngineEx extends AlgorithmEngine { - private final ConcurrentHashMap _tempdict; - /** - * 是否忽略大小�? - */ public final boolean IgnoreCase; - /** - * 保存到临时文�? - */ public boolean UseTempDict = false; - // ------------------------------------------------------------------------- - // 构造函�? - // ------------------------------------------------------------------------- - - /** - * 默认不带缓存(区分大小写�? - */ public AlgorithmEngineEx() { IgnoreCase = false; _tempdict = new ConcurrentHashMap<>(); } - /** - * 带缓存关键字大小写参�? - * - * @param ignoreCase 是否忽略大小�? - */ public AlgorithmEngineEx(boolean ignoreCase) { IgnoreCase = ignoreCase; - // Java �?ConcurrentHashMap 本身不支持自定义 key 比较器, - // 忽略大小写时需�?put/get 时统一转小写�? _tempdict = new ConcurrentHashMap<>(); } - // ------------------------------------------------------------------------- - // 内部 key 规范�? - // ------------------------------------------------------------------------- - private String normalizeKey(String key) { return IgnoreCase ? key.toLowerCase() : key; } - // ------------------------------------------------------------------------- - // getParameter 重写 - // ------------------------------------------------------------------------- - - /** - * AlgorithmEngineEx 请重�?getParameterEx - */ @Override - public Operand getParameter(String parameter) { + public Operand GetParameter(String parameter) { String key = normalizeKey(parameter); Operand operand = _tempdict.get(key); if (operand != null) { return operand; } - Operand result = getParameterEx(parameter); + Operand result = GetParameterEx(parameter); if (UseTempDict) { _tempdict.putIfAbsent(key, result); } return result; } - /** - * 获取参数扩展方法,子类可重写 - */ - public Operand getParameterEx(String parameter) { + public Operand GetParameterEx(String parameter) { return Operand.Error("Parameter [" + parameter + "] is missing."); } - // ------------------------------------------------------------------------- - // Parameter 管理 - // ------------------------------------------------------------------------- - - /** - * 清理所有参�? - */ public void ClearParameters() { _tempdict.clear(); } - /** - * 添加自定义参�? - */ public void AddParameter(String key, Operand obj) { _tempdict.put(normalizeKey(key), obj); } - /** - * 添加自定义参数(boolean�? - */ public void AddParameter(String key, boolean obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } - // ------ number ------ - - /** - * 添加自定义参数(short�? - */ public void AddParameter(String key, short obj) { _tempdict.put(normalizeKey(key), Operand.Create((int) obj)); } - /** - * 添加自定义参数(int�? - */ public void AddParameter(String key, int obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } - /** - * 添加自定义参数(long�? - */ public void AddParameter(String key, long obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } - /** - * 添加自定义参数(float�? - */ public void AddParameter(String key, float obj) { _tempdict.put(normalizeKey(key), Operand.Create((double) obj)); } - /** - * 添加自定义参数(double�? - */ public void AddParameter(String key, double obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } - /** - * 添加自定义参数(BigDecimal,对�?C# decimal�? - */ public void AddParameter(String key, BigDecimal obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } - // ------ string ------ - - /** - * 添加自定义参数(String�? - */ public void AddParameter(String key, String obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } - // ------ MyDate / date ------ - - /** - * 添加自定义参数(MyDate�? - */ public void AddParameter(String key, MyDate obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } - // ------ array ------ - - /** - * 添加自定义参数(List<Operand>�? - */ public void AddParameter(String key, List obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } - /** - * 添加自定义参数(Collection<String>�? - */ public void AddParameter(String key, Collection obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new String[0]))); } - /** - * 添加自定义参数(Collection<Double>�? - */ public void AddParameterDoubles(String key, Collection obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Double[0]))); } - /** - * 添加自定义参数(Collection<Integer>�? - */ public void AddParameterIntegers(String key, Collection obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Integer[0]))); } - /** - * 添加自定义参数(Collection<Boolean>�? - */ public void AddParameterBooleans(String key, Collection obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Boolean[0]))); } - // ------------------------------------------------------------------------- - // AddParameterFromJson - // ------------------------------------------------------------------------- - - /** - * �?JSON 字符串批量添加参数�? - * JSON 必须�?{...} 对象格式�? - * - * @param json JSON 字符�? - * @throws Exception 若不是合�?JSON 对象 - */ public void AddParameterFromJson(String json) throws Exception { if (json == null) { throw new Exception("Parameter is not json string."); } String trimmed = json.trim(); if (trimmed.startsWith("{") && trimmed.endsWith("}")) { - // 使用项目内置�?LitJson 解析 - toolgood.algorithm.litJson.JsonData jo = toolgood.algorithm.litJson.JsonMapper.ToObject(trimmed); + JsonData jo = JsonMapper.ToObject(trimmed); if (jo.IsObject()) { - for (java.util.Map.Entry item : jo.inst_object.entrySet()) { - toolgood.algorithm.litJson.JsonData v = item.getValue(); + for (java.util.Map.Entry item : jo.inst_object.entrySet()) { + JsonData v = item.getValue(); Operand operand; if (v.IsString()) { operand = Operand.Create(v.StringValue()); @@ -238,8 +129,12 @@ public void AddParameterFromJson(String json) throws Exception { operand = Operand.Create(v.BooleanValue()); } else if (v.IsDouble()) { operand = Operand.Create(v.NumberValue()); + } else if (v.IsObject()) { + operand = Operand.Create(v); + } else if (v.IsArray()) { + operand = Operand.Create(v); } else if (v.IsNull()) { - operand = Operand.NULL_OPERAND; + operand = Operand.Null(); } else { operand = Operand.Create(v); } diff --git a/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java b/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java index b8c24d6bf..f840db495 100644 --- a/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java +++ b/java/src/main/java/toolgood/algorithm/internals/CalculateTree.java @@ -1,41 +1,14 @@ -/** - * 计算�? - */ package toolgood.algorithm.internals; import java.util.List; import toolgood.algorithm.enums.CalculateTreeType; public final class CalculateTree { - /** - * 子节�? - */ public List Nodes; - /** - * 开始位�? - */ public int Start; - - /** - * 结束位置 - */ public int End; - - /** - * 类型 - */ public CalculateTreeType Type; - - /** - * 条件 - */ - public String ConditionString; - - /** - * 出错信息 - */ + public String Text; + public boolean HasBracket; public String ErrorMessage; - - - } diff --git a/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java b/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java index cb9f1acef..77937f82a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java +++ b/java/src/main/java/toolgood/algorithm/internals/ConditionTree.java @@ -1,40 +1,14 @@ -/** - * 条件�? - */ package toolgood.algorithm.internals; import java.util.List; import toolgood.algorithm.enums.ConditionTreeType; public final class ConditionTree { - /** - * 子节�? - */ public List Nodes; - /** - * 开始位�? - */ public int Start; - - /** - * 结束位置 - */ public int End; - - /** - * 类型 - */ public ConditionTreeType Type; - - /** - * 条件 - */ - public String ConditionString; - - /** - * 出错信息 - */ + public String Text; + public boolean HasBracket; public String ErrorMessage; - - } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/NoneEngine.java b/java/src/main/java/toolgood/algorithm/internals/functions/NoneEngine.java index f86993bdd..8a176eddf 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/NoneEngine.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/NoneEngine.java @@ -13,19 +13,18 @@ public class NoneEngine extends AlgorithmEngine { public NoneEngine(AlgorithmEngine engine) { this.AreaUnit = engine.AreaUnit; this.DistanceUnit = engine.DistanceUnit; - this.SetLastError(engine.getLastError()); this.MassUnit = engine.MassUnit; this.UseLocalTime = engine.UseLocalTime; this.ExcelIndex = engine.ExcelIndex; } @Override - public Operand getParameter(String parameter) { + public Operand GetParameter(String parameter) { return Operand.None; } @Override - public Operand executeDiyFunction(String parameter, List args) { + public Operand ExecuteDiyFunction(String parameter, List args) { return Operand.None; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java index f021187e5..a24b2c5d8 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java @@ -1,18 +1,15 @@ package toolgood.algorithm.internals.visitors; -import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; import org.antlr.v4.runtime.tree.TerminalNode; +import toolgood.algorithm.math.mathBaseVisitor; import toolgood.algorithm.math.mathParser.*; import toolgood.algorithm.internals.DiyNameInfo; -import toolgood.algorithm.math.mathVisitor; -public class DiyNameVisitor extends AbstractParseTreeVisitor implements mathVisitor { +public final class DiyNameVisitor extends mathBaseVisitor { public DiyNameInfo diy = new DiyNameInfo(); - @Override - public Object visitPARAMETER_fun(PARAMETER_funContext context) { - TerminalNode node = context.PARAMETER(); + private void AddParameter(TerminalNode node) { if (node != null) { DiyNameInfo.KeyInfo keyInfo = diy.new KeyInfo(); keyInfo.Name = node.getText(); @@ -20,20 +17,20 @@ public Object visitPARAMETER_fun(PARAMETER_funContext context) { keyInfo.End = node.getSymbol().getStopIndex(); diy.Parameters.add(keyInfo); } + } + + @Override + public Object visitPARAMETER_fun(PARAMETER_funContext context) { + AddParameter(context.PARAMETER()); return visitChildren(context); } + @Override public Object visitGetJsonValue_fun(GetJsonValue_funContext context) { - TerminalNode node = context.PARAMETER(); - if (node != null) { - DiyNameInfo.KeyInfo keyInfo = diy.new KeyInfo(); - keyInfo.Name = node.getText(); - keyInfo.Start = node.getSymbol().getStartIndex(); - keyInfo.End = node.getSymbol().getStopIndex(); - diy.Parameters.add(keyInfo); - } + AddParameter(context.PARAMETER()); return visitChildren(context); } + @Override public Object visitDiyFunction_fun(DiyFunction_funContext context) { TerminalNode node = context.PARAMETER(); @@ -44,1385 +41,4 @@ public Object visitDiyFunction_fun(DiyFunction_funContext context) { diy.Functions.add(keyInfo); return visitChildren(context); } - - @Override - public Object visitParameter2(Parameter2Context context) { - - return visitChildren(context); - } - - - - @Override - public Object visitProg(ProgContext context) { - return visitChildren(context); - } - - @Override - public Object visitCEILING_fun(CEILING_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFACT_fun(FACT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitREGEXREPLACE_fun(REGEXREPLACE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHASVALUE_fun(HASVALUE_funContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitAddSub_fun(AddSub_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitAVERAGEIF_fun(AVERAGEIF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPARAM_fun(PARAM_funContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitRIGHT_fun(RIGHT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitOCT2BIN_fun(OCT2BIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitQUARTILE_fun(QUARTILE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFINV_fun(FINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNOT_fun(NOT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDAYS360_fun(DAYS360_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitWEEKNUM_fun(WEEKNUM_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPOISSON_fun(POISSON_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISREGEX_fun(ISREGEX_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPERCENTILE_fun(PERCENTILE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSHA256_fun(SHA256_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHAS_fun(HAS_funContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitHYPGEOMDIST_fun(HYPGEOMDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPERMUT_fun(PERMUT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTRIMSTART_fun(TRIMSTART_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitRMB_fun(RMB_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDEC2HEX_fun(DEC2HEX_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCLEAN_fun(CLEAN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLOWER_fun(LOWER_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitOR_fun(OR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitADDMONTHS_fun(ADDMONTHS_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitNORMSINV_fun(NORMSINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLEFT_fun(LEFT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISEVEN_fun(ISEVEN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLOGINV_fun(LOGINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitWORKDAY_fun(WORKDAY_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitIsError_fun(ISERROR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBIN2DEC_fun(BIN2DEC_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitJIS_fun(JIS_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLCM_fun(LCM_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHARMEAN_fun(HARMEAN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNORMINV_fun(NORMINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGAMMAINV_fun(GAMMAINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSQRT_fun(SQRT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDEGREES_fun(DEGREES_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMROUND_fun(MROUND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDATEDIF_fun(DATEDIF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTRIMEND_fun(TRIMEND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISLOGICAL_fun(ISLOGICAL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitINT_fun(INT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSUMIF_fun(SUMIF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHEX2OCT_fun(HEX2OCT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPI_fun(PI_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitYEAR_fun(YEAR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSQRTPI_fun(SQRTPI_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCONCATENATE_fun(CONCATENATE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCOUNT_fun(COUNT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFALSE_fun(FALSE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHTMLENCODE_fun(HTMLENCODE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBASE64URLTOTEXT_fun(BASE64URLTOTEXT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLOG10_fun(LOG10_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitIsText_fun(ISTEXT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNEGBINOMDIST_fun(NEGBINOMDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNETWORKDAYS_fun(NETWORKDAYS_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFACTDOUBLE_fun(FACTDOUBLE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTIMEVALUE_fun(TIMEVALUE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitAVEDEV_fun(AVEDEV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGUID_fun(GUID_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitJSON_fun(JSON_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFIXED_fun(FIXED_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTINV_fun(TINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitEDATE_fun(EDATE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGEOMEAN_fun(GEOMEAN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitVAR_fun(VAR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSIGN_fun(SIGN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitEOMONTH_fun(EOMONTH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFLOOR_fun(FLOOR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHOUR_fun(HOUR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLEN_fun(LEN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitACOS_fun(ACOS_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISNULLORWHITESPACE_fun(ISNULLORWHITESPACE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNUM_fun(NUM_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCOSH_fun(COSH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitQUOTIENT_fun(QUOTIENT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitOCT2DEC_fun(OCT2DEC_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSEARCH_fun(SEARCH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitROUNDUP_fun(ROUNDUP_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCOMBIN_fun(COMBIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCODE_fun(CODE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitASINH_fun(ASINH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSIN_fun(SIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSUBSTRING_fun(SUBSTRING_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitRANDBETWEEN_fun(RANDBETWEEN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitAVERAGE_fun(AVERAGE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLOG_fun(LOG_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHMACSHA512_fun(HMACSHA512_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitAndOr_fun(AndOr_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSTDEVP_fun(STDEVP_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitADDYEARS_fun(ADDYEARS_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitADDSECONDS_fun(ADDSECONDS_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitArray_fun(Array_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitROUND_fun(ROUND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitEXP_fun(EXP_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCOUNTIF_fun(COUNTIF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitVARP_fun(VARP_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitREMOVEEND_fun(REMOVEEND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDATE_fun(DATE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSPLIT_fun(SPLIT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitURLDECODE_fun(URLDECODE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLARGE_fun(LARGE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTIMESTAMP_fun(TIMESTAMP_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitVALUE_fun(VALUE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDAY_fun(DAY_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitWEIBULL_fun(WEIBULL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHMACSHA256_fun(HMACSHA256_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBINOMDIST_fun(BINOMDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitJudge_fun(Judge_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDEVSQ_fun(DEVSQ_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMODE_fun(MODE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBETAINV_fun(BETAINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMAX_fun(MAX_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMINUTE_fun(MINUTE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTAN_fun(TAN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitIFERROR_fun(IFERROR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFDIST_fun(FDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitINDEXOF_fun(INDEXOF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitUPPER_fun(UPPER_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHTMLDECODE_fun(HTMLDECODE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitEXPONDIST_fun(EXPONDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDEC2BIN_fun(DEC2BIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHEX2DEC_fun(HEX2DEC_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSMALL_fun(SMALL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitODD_fun(ODD_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTEXTTOBASE64_fun(TEXTTOBASE64_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMID_fun(MID_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPERCENTRANK_fun(PERCENTRANK_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSTDEV_fun(STDEV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNORMSDIST_fun(NORMSDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitIsNumber_fun(ISNUMBER_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLASTINDEXOF_fun(LASTINDEXOF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMOD_fun(MOD_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCHAR_fun(CHAR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitREGEX_fun(REGEX_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTEXTTOBASE64URL_fun(TEXTTOBASE64URL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMD5_fun(MD5_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitREPLACE_fun(REPLACE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitACOSH_fun(ACOSH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISODD_fun(ISODD_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitASC_fun(ASC_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitCOS_fun(COS_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLN_fun(LN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSTRING_fun(STRING_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHMACMD5_fun(HMACMD5_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPRODUCT_fun(PRODUCT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitEXACT_fun(EXACT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitADDMINUTES_fun(ADDMINUTES_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitSUMSQ_fun(SUMSQ_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSUM_fun(SUM_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSECOND_fun(SECOND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGAMMADIST_fun(GAMMADIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitOCT2HEX_fun(OCT2HEX_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTODAY_fun(TODAY_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitERROR_fun(ERROR_funContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitATAN_fun(ATAN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitE_fun(E_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTRIM_fun(TRIM_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitRADIANS_fun(RADIANS_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGAMMALN_fun(GAMMALN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTEXT_fun(TEXT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFISHER_fun(FISHER_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitAND_fun(AND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitArrayJson_fun(ArrayJson_funContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitBIN2HEX_fun(BIN2HEX_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMULTINOMIAL_fun(MULTINOMIAL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMONTH_fun(MONTH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitURLENCODE_fun(URLENCODE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNORMDIST_fun(NORMDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHMACSHA1_fun(HMACSHA1_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitENDSWITH_fun(ENDSWITH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBracket_fun(Bracket_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBETADIST_fun(BETADIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitATANH_fun(ATANH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNOW_fun(NOW_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMEDIAN_fun(MEDIAN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPOWER_fun(POWER_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDEC2OCT_fun(DEC2OCT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPROPER_fun(PROPER_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTRUNC_fun(TRUNC_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitGCD_fun(GCD_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTANH_fun(TANH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitHEX2BIN_fun(HEX2BIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSINH_fun(SINH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSHA512_fun(SHA512_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMIN_fun(MIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitADDDAYS_fun(ADDDAYS_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitISNONTEXT_fun(ISNONTEXT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitABS_fun(ABS_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitROUNDDOWN_fun(ROUNDDOWN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitIF_fun(IF_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitJOIN_fun(JOIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFIND_fun(FIND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSUBSTITUTE_fun(SUBSTITUTE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitREPT_fun(REPT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitASIN_fun(ASIN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitMulDiv_fun(MulDiv_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitREMOVESTART_fun(REMOVESTART_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitT_fun(T_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitWEEKDAY_fun(WEEKDAY_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBIN2OCT_fun(BIN2OCT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitBASE64TOTEXT_fun(BASE64TOTEXT_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTDIST_fun(TDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitDATEVALUE_fun(DATEVALUE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSTARTSWITH_fun(STARTSWITH_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitEVEN_fun(EVEN_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitLOGNORMDIST_fun(LOGNORMDIST_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISNULLOREMPTY_fun(ISNULLOREMPTY_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTRUE_fun(TRUE_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitFISHERINV_fun(FISHERINV_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitSHA1_fun(SHA1_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitTIME_fun(TIME_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitATAN2_fun(ATAN2_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitADDHOURS_fun(ADDHOURS_funContext context) { - return visitChildren(context); - } - - @Override - public Object visitRAND_fun(RAND_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitNum(NumContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitUnit(UnitContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitArrayJson(ArrayJsonContext ctx) { - return visitChildren(ctx); - } - - @Override - public Object visitNULL_fun(NULL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISNULL_fun(ISNULL_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitISNULLORERROR_fun(ISNULLORERROR_funContext context) { - - return visitChildren(context); - } - - @Override - public Object visitPercentage_fun(Percentage_funContext context) { - - return visitChildren(context); - } - @Override - public Object visitCOVARIANCES_fun(COVARIANCES_funContext context) { - return visitChildren(context); - } - @Override - public Object visitCOVAR_fun(COVAR_funContext context) { - return visitChildren(context); - } - @Override - public Object visitVersion_fun(Version_funContext context) { - return visitChildren(context); - } - @Override - public Object visitLOOKFLOOR_fun(LOOKFLOOR_funContext context) { - return visitChildren(context); - } - @Override - public Object visitLOOKCEILING_fun(LOOKCEILING_funContext context) { - return visitChildren(context); - } - } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java index 6e15039fa..d8ba186b5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor.java @@ -1,1224 +1,61 @@ package toolgood.algorithm.internals.visitors; import org.antlr.v4.runtime.ParserRuleContext; -import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; +import org.antlr.v4.runtime.tree.RuleNode; + import toolgood.algorithm.enums.ConditionTreeType; -import toolgood.algorithm.math.mathParser; -import toolgood.algorithm.math.mathParser.COVARIANCES_funContext; -import toolgood.algorithm.math.mathParser.COVAR_funContext; -import toolgood.algorithm.math.mathParser.LOOKCEILING_funContext; -import toolgood.algorithm.math.mathParser.LOOKFLOOR_funContext; -import toolgood.algorithm.math.mathParser.Version_funContext; -import toolgood.algorithm.math.mathVisitor; import toolgood.algorithm.internals.ConditionTree; +import toolgood.algorithm.math.mathBaseVisitor; +import toolgood.algorithm.math.mathParser; +import toolgood.algorithm.math.mathParser.ExprContext; import java.util.ArrayList; +import java.util.List; + +public final class MathSplitVisitor extends mathBaseVisitor { + private boolean hasBracket = false; -public class MathSplitVisitor extends AbstractParseTreeVisitor implements mathVisitor { @Override public ConditionTree visitProg(mathParser.ProgContext context) { - return visit(context.expr()); + hasBracket = false; + return context.expr().accept(this); } @Override public ConditionTree visitAndOr_fun(mathParser.AndOr_funContext context) { ConditionTree tree = new ConditionTree(); - tree.Nodes = new ArrayList<>(); + tree.Nodes = new ArrayList<>(2); + tree.HasBracket = hasBracket; + hasBracket = false; String t = context.op.getText(); - if (CharUtil.Equals(t, "&&", "and")) { + if (CharUtil.Equals(t, "&&")) { tree.Type = ConditionTreeType.And; } else { tree.Type = ConditionTreeType.Or; } - tree.Nodes.add(this.visit(context.expr(0))); - tree.Nodes.add(this.visit(context.expr(1))); + List exprs = context.expr(); + + tree.Nodes.add(exprs.get(0).accept(this)); + tree.Nodes.add(exprs.get(1).accept(this)); + tree.Start = context.getStart().getStartIndex(); + tree.End = context.getStop().getStopIndex(); + tree.Text = context.getText(); return tree; } @Override public ConditionTree visitBracket_fun(mathParser.Bracket_funContext context) { - return visit(context.expr()); + hasBracket = true; + return context.expr().accept(this); } - public ConditionTree visit_fun(ParserRuleContext context) { + @Override + public ConditionTree visitChildren(RuleNode node) { + ParserRuleContext context = (ParserRuleContext) node; ConditionTree tree = new ConditionTree(); - tree.Type = ConditionTreeType.String; - tree.Start = context.start.getStartIndex(); - tree.End = context.stop.getStopIndex(); - tree.ConditionString = context.getText(); + tree.Start = context.getStart().getStartIndex(); + tree.End = context.getStop().getStopIndex(); + tree.Text = context.getText(); return tree; } - - @Override - public ConditionTree visitCEILING_fun(mathParser.CEILING_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFACT_fun(mathParser.FACT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitREGEXREPLACE_fun(mathParser.REGEXREPLACE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHASVALUE_fun(mathParser.HASVALUE_funContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitAddSub_fun(mathParser.AddSub_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitAVERAGEIF_fun(mathParser.AVERAGEIF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPARAM_fun(mathParser.PARAM_funContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitRIGHT_fun(mathParser.RIGHT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitOCT2BIN_fun(mathParser.OCT2BIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitQUARTILE_fun(mathParser.QUARTILE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFINV_fun(mathParser.FINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNOT_fun(mathParser.NOT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDAYS360_fun(mathParser.DAYS360_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitWEEKNUM_fun(mathParser.WEEKNUM_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPOISSON_fun(mathParser.POISSON_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISREGEX_fun(mathParser.ISREGEX_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPERCENTILE_fun(mathParser.PERCENTILE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSHA256_fun(mathParser.SHA256_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHAS_fun(mathParser.HAS_funContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitHYPGEOMDIST_fun(mathParser.HYPGEOMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPERMUT_fun(mathParser.PERMUT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTRIMSTART_fun(mathParser.TRIMSTART_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitRMB_fun(mathParser.RMB_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDEC2HEX_fun(mathParser.DEC2HEX_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCLEAN_fun(mathParser.CLEAN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOWER_fun(mathParser.LOWER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitOR_fun(mathParser.OR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitADDMONTHS_fun(mathParser.ADDMONTHS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNORMSINV_fun(mathParser.NORMSINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLEFT_fun(mathParser.LEFT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISEVEN_fun(mathParser.ISEVEN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOGINV_fun(mathParser.LOGINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitWORKDAY_fun(mathParser.WORKDAY_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitIsError_fun(mathParser.ISERROR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitBIN2DEC_fun(mathParser.BIN2DEC_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitJIS_fun(mathParser.JIS_funContext context) { - return visit_fun(context); - } - - - @Override - public ConditionTree visitLCM_fun(mathParser.LCM_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHARMEAN_fun(mathParser.HARMEAN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNORMINV_fun(mathParser.NORMINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGAMMAINV_fun(mathParser.GAMMAINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSQRT_fun(mathParser.SQRT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDEGREES_fun(mathParser.DEGREES_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMROUND_fun(mathParser.MROUND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDATEDIF_fun(mathParser.DATEDIF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTRIMEND_fun(mathParser.TRIMEND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISLOGICAL_fun(mathParser.ISLOGICAL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitINT_fun(mathParser.INT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSUMIF_fun(mathParser.SUMIF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHEX2OCT_fun(mathParser.HEX2OCT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPI_fun(mathParser.PI_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitYEAR_fun(mathParser.YEAR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSQRTPI_fun(mathParser.SQRTPI_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCONCATENATE_fun(mathParser.CONCATENATE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOUNT_fun(mathParser.COUNT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFALSE_fun(mathParser.FALSE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHTMLENCODE_fun(mathParser.HTMLENCODE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitBASE64URLTOTEXT_fun(mathParser.BASE64URLTOTEXT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOG10_fun(mathParser.LOG10_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitIsText_fun(mathParser.ISTEXT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNEGBINOMDIST_fun(mathParser.NEGBINOMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNETWORKDAYS_fun(mathParser.NETWORKDAYS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFACTDOUBLE_fun(mathParser.FACTDOUBLE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTIMEVALUE_fun(mathParser.TIMEVALUE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitAVEDEV_fun(mathParser.AVEDEV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGUID_fun(mathParser.GUID_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitJSON_fun(mathParser.JSON_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFIXED_fun(mathParser.FIXED_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGetJsonValue_fun(mathParser.GetJsonValue_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTINV_fun(mathParser.TINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitEDATE_fun(mathParser.EDATE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGEOMEAN_fun(mathParser.GEOMEAN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitVAR_fun(mathParser.VAR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSIGN_fun(mathParser.SIGN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitEOMONTH_fun(mathParser.EOMONTH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFLOOR_fun(mathParser.FLOOR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHOUR_fun(mathParser.HOUR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLEN_fun(mathParser.LEN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitACOS_fun(mathParser.ACOS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISNULLORWHITESPACE_fun(mathParser.ISNULLORWHITESPACE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNUM_fun(mathParser.NUM_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOSH_fun(mathParser.COSH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitQUOTIENT_fun(mathParser.QUOTIENT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitOCT2DEC_fun(mathParser.OCT2DEC_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSEARCH_fun(mathParser.SEARCH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitROUNDUP_fun(mathParser.ROUNDUP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOMBIN_fun(mathParser.COMBIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCODE_fun(mathParser.CODE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitASINH_fun(mathParser.ASINH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSIN_fun(mathParser.SIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSUBSTRING_fun(mathParser.SUBSTRING_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitRANDBETWEEN_fun(mathParser.RANDBETWEEN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitAVERAGE_fun(mathParser.AVERAGE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOG_fun(mathParser.LOG_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHMACSHA512_fun(mathParser.HMACSHA512_funContext context) { - return visit_fun(context); - } - - - @Override - public ConditionTree visitSTDEVP_fun(mathParser.STDEVP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitADDYEARS_fun(mathParser.ADDYEARS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitADDSECONDS_fun(mathParser.ADDSECONDS_funContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitArray_fun(mathParser.Array_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitROUND_fun(mathParser.ROUND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitEXP_fun(mathParser.EXP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOUNTIF_fun(mathParser.COUNTIF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitVARP_fun(mathParser.VARP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitREMOVEEND_fun(mathParser.REMOVEEND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDATE_fun(mathParser.DATE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPARAMETER_fun(mathParser.PARAMETER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSPLIT_fun(mathParser.SPLIT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitURLDECODE_fun(mathParser.URLDECODE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLARGE_fun(mathParser.LARGE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTIMESTAMP_fun(mathParser.TIMESTAMP_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitVALUE_fun(mathParser.VALUE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDAY_fun(mathParser.DAY_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitWEIBULL_fun(mathParser.WEIBULL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHMACSHA256_fun(mathParser.HMACSHA256_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitBINOMDIST_fun(mathParser.BINOMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitJudge_fun(mathParser.Judge_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDEVSQ_fun(mathParser.DEVSQ_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMODE_fun(mathParser.MODE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitBETAINV_fun(mathParser.BETAINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMAX_fun(mathParser.MAX_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMINUTE_fun(mathParser.MINUTE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTAN_fun(mathParser.TAN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitIFERROR_fun(mathParser.IFERROR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFDIST_fun(mathParser.FDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitINDEXOF_fun(mathParser.INDEXOF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitUPPER_fun(mathParser.UPPER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHTMLDECODE_fun(mathParser.HTMLDECODE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitEXPONDIST_fun(mathParser.EXPONDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDEC2BIN_fun(mathParser.DEC2BIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHEX2DEC_fun(mathParser.HEX2DEC_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSMALL_fun(mathParser.SMALL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitODD_fun(mathParser.ODD_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTEXTTOBASE64_fun(mathParser.TEXTTOBASE64_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMID_fun(mathParser.MID_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPERCENTRANK_fun(mathParser.PERCENTRANK_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSTDEV_fun(mathParser.STDEV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNORMSDIST_fun(mathParser.NORMSDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitIsNumber_fun(mathParser.ISNUMBER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLASTINDEXOF_fun(mathParser.LASTINDEXOF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMOD_fun(mathParser.MOD_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCHAR_fun(mathParser.CHAR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitREGEX_fun(mathParser.REGEX_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTEXTTOBASE64URL_fun(mathParser.TEXTTOBASE64URL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMD5_fun(mathParser.MD5_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitREPLACE_fun(mathParser.REPLACE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitACOSH_fun(mathParser.ACOSH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISODD_fun(mathParser.ISODD_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitASC_fun(mathParser.ASC_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOS_fun(mathParser.COS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLN_fun(mathParser.LN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSTRING_fun(mathParser.STRING_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHMACMD5_fun(mathParser.HMACMD5_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPRODUCT_fun(mathParser.PRODUCT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitEXACT_fun(mathParser.EXACT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitADDMINUTES_fun(mathParser.ADDMINUTES_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSUMSQ_fun(mathParser.SUMSQ_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSUM_fun(mathParser.SUM_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSECOND_fun(mathParser.SECOND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGAMMADIST_fun(mathParser.GAMMADIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitOCT2HEX_fun(mathParser.OCT2HEX_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTODAY_fun(mathParser.TODAY_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitERROR_fun(mathParser.ERROR_funContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitATAN_fun(mathParser.ATAN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitE_fun(mathParser.E_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTRIM_fun(mathParser.TRIM_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitRADIANS_fun(mathParser.RADIANS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGAMMALN_fun(mathParser.GAMMALN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTEXT_fun(mathParser.TEXT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFISHER_fun(mathParser.FISHER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitAND_fun(mathParser.AND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitArrayJson_fun(mathParser.ArrayJson_funContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitBIN2HEX_fun(mathParser.BIN2HEX_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMULTINOMIAL_fun(mathParser.MULTINOMIAL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMONTH_fun(mathParser.MONTH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitURLENCODE_fun(mathParser.URLENCODE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNORMDIST_fun(mathParser.NORMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHMACSHA1_fun(mathParser.HMACSHA1_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitENDSWITH_fun(mathParser.ENDSWITH_funContext context) { - return visit_fun(context); - } - - - @Override - public ConditionTree visitBETADIST_fun(mathParser.BETADIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitATANH_fun(mathParser.ATANH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNOW_fun(mathParser.NOW_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMEDIAN_fun(mathParser.MEDIAN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPOWER_fun(mathParser.POWER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDEC2OCT_fun(mathParser.DEC2OCT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPROPER_fun(mathParser.PROPER_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTRUNC_fun(mathParser.TRUNC_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitGCD_fun(mathParser.GCD_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTANH_fun(mathParser.TANH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitHEX2BIN_fun(mathParser.HEX2BIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSINH_fun(mathParser.SINH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSHA512_fun(mathParser.SHA512_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMIN_fun(mathParser.MIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitADDDAYS_fun(mathParser.ADDDAYS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISNONTEXT_fun(mathParser.ISNONTEXT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitABS_fun(mathParser.ABS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitROUNDDOWN_fun(mathParser.ROUNDDOWN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitIF_fun(mathParser.IF_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitJOIN_fun(mathParser.JOIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFIND_fun(mathParser.FIND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSUBSTITUTE_fun(mathParser.SUBSTITUTE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitREPT_fun(mathParser.REPT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitASIN_fun(mathParser.ASIN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitMulDiv_fun(mathParser.MulDiv_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitREMOVESTART_fun(mathParser.REMOVESTART_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitT_fun(mathParser.T_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitWEEKDAY_fun(mathParser.WEEKDAY_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitBIN2OCT_fun(mathParser.BIN2OCT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitBASE64TOTEXT_fun(mathParser.BASE64TOTEXT_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTDIST_fun(mathParser.TDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDATEVALUE_fun(mathParser.DATEVALUE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSTARTSWITH_fun(mathParser.STARTSWITH_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitEVEN_fun(mathParser.EVEN_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOGNORMDIST_fun(mathParser.LOGNORMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISNULLOREMPTY_fun(mathParser.ISNULLOREMPTY_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTRUE_fun(mathParser.TRUE_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitFISHERINV_fun(mathParser.FISHERINV_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitSHA1_fun(mathParser.SHA1_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitTIME_fun(mathParser.TIME_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitATAN2_fun(mathParser.ATAN2_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitADDHOURS_fun(mathParser.ADDHOURS_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitRAND_fun(mathParser.RAND_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitNum(mathParser.NumContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitUnit(mathParser.UnitContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitArrayJson(mathParser.ArrayJsonContext ctx) { - return visit_fun(ctx); - } - - @Override - public ConditionTree visitParameter2(mathParser.Parameter2Context context) { - return visit_fun(context); - } - - - @Override - public ConditionTree visitNULL_fun(mathParser.NULL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISNULL_fun(mathParser.ISNULL_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitISNULLORERROR_fun(mathParser.ISNULLORERROR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitDiyFunction_fun(mathParser.DiyFunction_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitPercentage_fun(mathParser.Percentage_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOVARIANCES_fun(COVARIANCES_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitCOVAR_fun(COVAR_funContext context) { - return visit_fun(context); - } - @Override - public ConditionTree visitVersion_fun(Version_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOOKFLOOR_fun(LOOKFLOOR_funContext context) { - return visit_fun(context); - } - - @Override - public ConditionTree visitLOOKCEILING_fun(LOOKCEILING_funContext context) { - return visit_fun(context); -} } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java index 3661d3ce4..0e73a9c63 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathSplitVisitor2.java @@ -1,38 +1,43 @@ package toolgood.algorithm.internals.visitors; -import java.util.ArrayList; -import java.util.List; - -import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; -import org.antlr.v4.runtime.tree.ParseTree; -import org.antlr.v4.runtime.tree.TerminalNode; +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.RuleNode; import toolgood.algorithm.enums.CalculateTreeType; import toolgood.algorithm.internals.CalculateTree; +import toolgood.algorithm.math.mathBaseVisitor; import toolgood.algorithm.math.mathParser; -import toolgood.algorithm.math.mathVisitor; +import toolgood.algorithm.math.mathParser.ExprContext; + +import java.util.ArrayList; +import java.util.List; -public class MathSplitVisitor2 extends AbstractParseTreeVisitor implements mathVisitor { +public final class MathSplitVisitor2 extends mathBaseVisitor { + private boolean hasBracket = false; @Override public CalculateTree visitProg(mathParser.ProgContext context) { + hasBracket = false; return context.expr().accept(this); } @Override public CalculateTree visitBracket_fun(mathParser.Bracket_funContext context) { + hasBracket = true; return context.expr().accept(this); } @Override public CalculateTree visitMulDiv_fun(mathParser.MulDiv_funContext context) { CalculateTree tree = new CalculateTree(); - tree.Nodes = new ArrayList<>(); - List exprs = context.expr(); + tree.Nodes = new ArrayList<>(2); + tree.HasBracket = hasBracket; + hasBracket = false; + List exprs = context.expr(); String t = context.op.getText(); - if (t.equals("*")) { + if (CharUtil.Equals(t, '*')) { tree.Type = CalculateTreeType.Mul; - } else if (t.equals("/")) { + } else if (CharUtil.Equals(t, '/')) { tree.Type = CalculateTreeType.Div; } else { tree.Type = CalculateTreeType.Mod; @@ -41,19 +46,21 @@ public CalculateTree visitMulDiv_fun(mathParser.MulDiv_funContext context) { tree.Nodes.add(exprs.get(1).accept(this)); tree.Start = context.getStart().getStartIndex(); tree.End = context.getStop().getStopIndex(); - tree.ConditionString = context.getText(); + tree.Text = context.getText(); return tree; } @Override public CalculateTree visitAddSub_fun(mathParser.AddSub_funContext context) { CalculateTree tree = new CalculateTree(); - tree.Nodes = new ArrayList<>(); - List exprs = context.expr(); + tree.Nodes = new ArrayList<>(2); + tree.HasBracket = hasBracket; + hasBracket = false; + List exprs = context.expr(); String t = context.op.getText(); - if (t.equals("+")) { + if (CharUtil.Equals(t, '+')) { tree.Type = CalculateTreeType.Add; - } else if (t.equals("-")) { + } else if (CharUtil.Equals(t, '-')) { tree.Type = CalculateTreeType.Sub; } else { tree.Type = CalculateTreeType.Connect; @@ -62,1182 +69,17 @@ public CalculateTree visitAddSub_fun(mathParser.AddSub_funContext context) { tree.Nodes.add(exprs.get(1).accept(this)); tree.Start = context.getStart().getStartIndex(); tree.End = context.getStop().getStopIndex(); - tree.ConditionString = context.getText(); + tree.Text = context.getText(); return tree; } - private CalculateTree visit_fun(org.antlr.v4.runtime.ParserRuleContext context) { + @Override + public CalculateTree visitChildren(RuleNode node) { + ParserRuleContext context = (ParserRuleContext) node; CalculateTree tree = new CalculateTree(); tree.Start = context.getStart().getStartIndex(); tree.End = context.getStop().getStopIndex(); - tree.ConditionString = context.getText(); + tree.Text = context.getText(); return tree; } - - @Override - public CalculateTree visitABS_fun(mathParser.ABS_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitACOSH_fun(mathParser.ACOSH_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitACOS_fun(mathParser.ACOS_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitADDDAYS_fun(mathParser.ADDDAYS_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitADDHOURS_fun(mathParser.ADDHOURS_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitADDMINUTES_fun(mathParser.ADDMINUTES_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitADDMONTHS_fun(mathParser.ADDMONTHS_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitADDSECONDS_fun(mathParser.ADDSECONDS_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitADDYEARS_fun(mathParser.ADDYEARS_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitAndOr_fun(mathParser.AndOr_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitAND_fun(mathParser.AND_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitArrayJson(mathParser.ArrayJsonContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitArrayJson_fun(mathParser.ArrayJson_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitArray_fun(mathParser.Array_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitASC_fun(mathParser.ASC_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitASINH_fun(mathParser.ASINH_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitASIN_fun(mathParser.ASIN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitATAN2_fun(mathParser.ATAN2_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitATANH_fun(mathParser.ATANH_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitATAN_fun(mathParser.ATAN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitAVEDEV_fun(mathParser.AVEDEV_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitAVERAGEIF_fun(mathParser.AVERAGEIF_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitAVERAGE_fun(mathParser.AVERAGE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitBASE64TOTEXT_fun(mathParser.BASE64TOTEXT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitBASE64URLTOTEXT_fun(mathParser.BASE64URLTOTEXT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitBETADIST_fun(mathParser.BETADIST_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitBETAINV_fun(mathParser.BETAINV_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitBIN2DEC_fun(mathParser.BIN2DEC_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitBIN2HEX_fun(mathParser.BIN2HEX_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitBIN2OCT_fun(mathParser.BIN2OCT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitBINOMDIST_fun(mathParser.BINOMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitCEILING_fun(mathParser.CEILING_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitCHAR_fun(mathParser.CHAR_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitCLEAN_fun(mathParser.CLEAN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitCODE_fun(mathParser.CODE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitCOMBIN_fun(mathParser.COMBIN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitCONCATENATE_fun(mathParser.CONCATENATE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitCOSH_fun(mathParser.COSH_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitCOS_fun(mathParser.COS_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitCOUNTIF_fun(mathParser.COUNTIF_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitCOUNT_fun(mathParser.COUNT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitCOVARIANCES_fun(mathParser.COVARIANCES_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitCOVAR_fun(mathParser.COVAR_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitDATEDIF_fun(mathParser.DATEDIF_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitDATEVALUE_fun(mathParser.DATEVALUE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitDATE_fun(mathParser.DATE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitDAYS360_fun(mathParser.DAYS360_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitDAY_fun(mathParser.DAY_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitDEC2BIN_fun(mathParser.DEC2BIN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitDEC2HEX_fun(mathParser.DEC2HEX_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitDEC2OCT_fun(mathParser.DEC2OCT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitDEGREES_fun(mathParser.DEGREES_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitDEVSQ_fun(mathParser.DEVSQ_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitDiyFunction_fun(mathParser.DiyFunction_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitEDATE_fun(mathParser.EDATE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitENDSWITH_fun(mathParser.ENDSWITH_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitEOMONTH_fun(mathParser.EOMONTH_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitERROR_fun(mathParser.ERROR_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitEVEN_fun(mathParser.EVEN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitEXACT_fun(mathParser.EXACT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitEXPONDIST_fun(mathParser.EXPONDIST_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitEXP_fun(mathParser.EXP_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitE_fun(mathParser.E_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitFACTDOUBLE_fun(mathParser.FACTDOUBLE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitFACT_fun(mathParser.FACT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitFALSE_fun(mathParser.FALSE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitFDIST_fun(mathParser.FDIST_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitFIND_fun(mathParser.FIND_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitFINV_fun(mathParser.FINV_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitFISHERINV_fun(mathParser.FISHERINV_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitFISHER_fun(mathParser.FISHER_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitFIXED_fun(mathParser.FIXED_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitFLOOR_fun(mathParser.FLOOR_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitGAMMADIST_fun(mathParser.GAMMADIST_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitGAMMAINV_fun(mathParser.GAMMAINV_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitGAMMALN_fun(mathParser.GAMMALN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitGCD_fun(mathParser.GCD_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitGEOMEAN_fun(mathParser.GEOMEAN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitGetJsonValue_fun(mathParser.GetJsonValue_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitGUID_fun(mathParser.GUID_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHARMEAN_fun(mathParser.HARMEAN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHASVALUE_fun(mathParser.HASVALUE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHAS_fun(mathParser.HAS_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHEX2BIN_fun(mathParser.HEX2BIN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHEX2DEC_fun(mathParser.HEX2DEC_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHEX2OCT_fun(mathParser.HEX2OCT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHMACMD5_fun(mathParser.HMACMD5_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHMACSHA1_fun(mathParser.HMACSHA1_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHMACSHA256_fun(mathParser.HMACSHA256_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHMACSHA512_fun(mathParser.HMACSHA512_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHOUR_fun(mathParser.HOUR_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHTMLDECODE_fun(mathParser.HTMLDECODE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHTMLENCODE_fun(mathParser.HTMLENCODE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitHYPGEOMDIST_fun(mathParser.HYPGEOMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitIFERROR_fun(mathParser.IFERROR_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitIF_fun(mathParser.IF_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitINDEXOF_fun(mathParser.INDEXOF_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitINT_fun(mathParser.INT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitISERROR_fun(mathParser.ISERROR_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitISEVEN_fun(mathParser.ISEVEN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitISLOGICAL_fun(mathParser.ISLOGICAL_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitISNONTEXT_fun(mathParser.ISNONTEXT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitISNULLOREMPTY_fun(mathParser.ISNULLOREMPTY_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitISNULLORERROR_fun(mathParser.ISNULLORERROR_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitISNULLORWHITESPACE_fun(mathParser.ISNULLORWHITESPACE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitISNULL_fun(mathParser.ISNULL_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitISNUMBER_fun(mathParser.ISNUMBER_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitISODD_fun(mathParser.ISODD_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitISREGEX_fun(mathParser.ISREGEX_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitIsText_fun(mathParser.ISTEXT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitJIS_fun(mathParser.JIS_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitJOIN_fun(mathParser.JOIN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitJSON_fun(mathParser.JSON_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitJudge_fun(mathParser.Judge_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLARGE_fun(mathParser.LARGE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLASTINDEXOF_fun(mathParser.LASTINDEXOF_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLCM_fun(mathParser.LCM_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLEFT_fun(mathParser.LEFT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLEN_fun(mathParser.LEN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLN_fun(mathParser.LN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLOG10_fun(mathParser.LOG10_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLOGINV_fun(mathParser.LOGINV_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLOGNORMDIST_fun(mathParser.LOGNORMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLOG_fun(mathParser.LOG_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLOWER_fun(mathParser.LOWER_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitMAX_fun(mathParser.MAX_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitMD5_fun(mathParser.MD5_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitMEDIAN_fun(mathParser.MEDIAN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitMID_fun(mathParser.MID_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitMINUTE_fun(mathParser.MINUTE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitMIN_fun(mathParser.MIN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitMODE_fun(mathParser.MODE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitMOD_fun(mathParser.MOD_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitMONTH_fun(mathParser.MONTH_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitMROUND_fun(mathParser.MROUND_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitMULTINOMIAL_fun(mathParser.MULTINOMIAL_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitNEGBINOMDIST_fun(mathParser.NEGBINOMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitNETWORKDAYS_fun(mathParser.NETWORKDAYS_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitNORMDIST_fun(mathParser.NORMDIST_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitNORMINV_fun(mathParser.NORMINV_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitNORMSDIST_fun(mathParser.NORMSDIST_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitNORMSINV_fun(mathParser.NORMSINV_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitNOT_fun(mathParser.NOT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitNOW_fun(mathParser.NOW_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitNULL_fun(mathParser.NULL_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitNum(mathParser.NumContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitNUM_fun(mathParser.NUM_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitOCT2BIN_fun(mathParser.OCT2BIN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitOCT2DEC_fun(mathParser.OCT2DEC_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitOCT2HEX_fun(mathParser.OCT2HEX_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitODD_fun(mathParser.ODD_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitOR_fun(mathParser.OR_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitParameter2(mathParser.Parameter2Context context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitPARAMETER_fun(mathParser.PARAMETER_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitPARAM_fun(mathParser.PARAM_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitPercentage_fun(mathParser.Percentage_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitPERCENTILE_fun(mathParser.PERCENTILE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitPERCENTRANK_fun(mathParser.PERCENTRANK_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitPERMUT_fun(mathParser.PERMUT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitPI_fun(mathParser.PI_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitPOISSON_fun(mathParser.POISSON_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitPOWER_fun(mathParser.POWER_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitPRODUCT_fun(mathParser.PRODUCT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitPROPER_fun(mathParser.PROPER_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitQUARTILE_fun(mathParser.QUARTILE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitQUOTIENT_fun(mathParser.QUOTIENT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitRADIANS_fun(mathParser.RADIANS_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitRANDBETWEEN_fun(mathParser.RANDBETWEEN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitRAND_fun(mathParser.RAND_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitREGEXREPLACE_fun(mathParser.REGEXREPLACE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitREGEX_fun(mathParser.REGEX_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitREMOVEEND_fun(mathParser.REMOVEEND_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitREMOVESTART_fun(mathParser.REMOVESTART_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitREPLACE_fun(mathParser.REPLACE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitREPT_fun(mathParser.REPT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitRIGHT_fun(mathParser.RIGHT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitRMB_fun(mathParser.RMB_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitROUNDDOWN_fun(mathParser.ROUNDDOWN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitROUNDUP_fun(mathParser.ROUNDUP_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitROUND_fun(mathParser.ROUND_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSEARCH_fun(mathParser.SEARCH_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSECOND_fun(mathParser.SECOND_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSHA1_fun(mathParser.SHA1_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSHA256_fun(mathParser.SHA256_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSHA512_fun(mathParser.SHA512_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSIGN_fun(mathParser.SIGN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSINH_fun(mathParser.SINH_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSIN_fun(mathParser.SIN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSMALL_fun(mathParser.SMALL_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSPLIT_fun(mathParser.SPLIT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSQRTPI_fun(mathParser.SQRTPI_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSQRT_fun(mathParser.SQRT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSTARTSWITH_fun(mathParser.STARTSWITH_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSTDEVP_fun(mathParser.STDEVP_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSTDEV_fun(mathParser.STDEV_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSTRING_fun(mathParser.STRING_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSUBSTITUTE_fun(mathParser.SUBSTITUTE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSUBSTRING_fun(mathParser.SUBSTRING_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSUMIF_fun(mathParser.SUMIF_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSUMSQ_fun(mathParser.SUMSQ_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitSUM_fun(mathParser.SUM_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTANH_fun(mathParser.TANH_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTAN_fun(mathParser.TAN_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTDIST_fun(mathParser.TDIST_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTEXTTOBASE64URL_fun(mathParser.TEXTTOBASE64URL_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTEXTTOBASE64_fun(mathParser.TEXTTOBASE64_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTEXT_fun(mathParser.TEXT_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTIMESTAMP_fun(mathParser.TIMESTAMP_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTIMEVALUE_fun(mathParser.TIMEVALUE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTIME_fun(mathParser.TIME_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTINV_fun(mathParser.TINV_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTODAY_fun(mathParser.TODAY_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTRIMEND_fun(mathParser.TRIMEND_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTRIMSTART_fun(mathParser.TRIMSTART_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTRIM_fun(mathParser.TRIM_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTRUE_fun(mathParser.TRUE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitTRUNC_fun(mathParser.TRUNC_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitT_fun(mathParser.T_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitUnit(mathParser.UnitContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitUPPER_fun(mathParser.UPPER_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitURLDECODE_fun(mathParser.URLDECODE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitURLENCODE_fun(mathParser.URLENCODE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitVALUE_fun(mathParser.VALUE_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitVARP_fun(mathParser.VARP_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitVAR_fun(mathParser.VAR_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitVersion_fun(mathParser.Version_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitWEEKDAY_fun(mathParser.WEEKDAY_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitWEEKNUM_fun(mathParser.WEEKNUM_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitWEIBULL_fun(mathParser.WEIBULL_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitWORKDAY_fun(mathParser.WORKDAY_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitYEAR_fun(mathParser.YEAR_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLOOKFLOOR_fun(mathParser.LOOKFLOOR_funContext context) { - return visit_fun(context); - } - - @Override - public CalculateTree visitLOOKCEILING_fun(mathParser.LOOKCEILING_funContext context) { - return visit_fun(context); - } - - } diff --git a/java/src/main/java/toolgood/algorithm/math/mathBaseVisitor.java b/java/src/main/java/toolgood/algorithm/math/mathBaseVisitor.java index 0e56e67a0..6959c00dc 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathBaseVisitor.java +++ b/java/src/main/java/toolgood/algorithm/math/mathBaseVisitor.java @@ -1,4 +1,5 @@ -// Generated from math.g4 by ANTLR 4.13.2 +package toolgood.algorithm.math; + import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; /** diff --git a/java/src/main/java/toolgood/algorithm/math/mathLexer.java b/java/src/main/java/toolgood/algorithm/math/mathLexer.java index 1a3668e51..53935188c 100644 --- a/java/src/main/java/toolgood/algorithm/math/mathLexer.java +++ b/java/src/main/java/toolgood/algorithm/math/mathLexer.java @@ -1,4 +1,3 @@ -// Generated from math.g4 by ANTLR 4.13.2 package toolgood.algorithm.math; import org.antlr.v4.runtime.Lexer; From fa88bc70faebea1fedaecc645127fcb632c5c05b Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 13:42:37 +0800 Subject: [PATCH 68/98] fix --- .../toolgood/algorithm/AlgorithmEngineEx.java | 19 ++++++------ .../main/java/toolgood/algorithm/Operand.java | 17 +++++------ .../functions/compare/Function_EQ.java | 29 +++++++++++------- .../functions/compare/Function_GE.java | 30 ++++++++++++------- .../functions/compare/Function_GT.java | 30 ++++++++++++------- .../functions/compare/Function_LE.java | 30 ++++++++++++------- .../functions/compare/Function_LT.java | 30 ++++++++++++------- .../functions/compare/Function_NE.java | 30 ++++++++++++------- 8 files changed, 136 insertions(+), 79 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java index b9baf3dae..5085bc4da 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngineEx.java @@ -1,7 +1,6 @@ package toolgood.algorithm; import java.math.BigDecimal; -import java.util.Collection; import java.util.List; import java.util.concurrent.ConcurrentHashMap; @@ -96,20 +95,20 @@ public void AddParameter(String key, List obj) { _tempdict.put(normalizeKey(key), Operand.Create(obj)); } - public void AddParameter(String key, Collection obj) { - _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new String[0]))); + public void AddParameter(String key, String[] obj) { + _tempdict.put(normalizeKey(key), Operand.CreateStringCollection(obj)); } - public void AddParameterDoubles(String key, Collection obj) { - _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Double[0]))); + public void AddParameterDoubles(String key, Double[] obj) { + _tempdict.put(normalizeKey(key), Operand.CreateDoubleCollection(obj)); } - public void AddParameterIntegers(String key, Collection obj) { - _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Integer[0]))); + public void AddParameterIntegers(String key, Integer[] obj) { + _tempdict.put(normalizeKey(key), Operand.CreateIntCollection(obj)); } - public void AddParameterBooleans(String key, Collection obj) { - _tempdict.put(normalizeKey(key), Operand.Create(obj.toArray(new Boolean[0]))); + public void AddParameterBooleans(String key, Boolean[] obj) { + _tempdict.put(normalizeKey(key), Operand.CreateBooleanCollection(obj)); } public void AddParameterFromJson(String json) throws Exception { @@ -134,7 +133,7 @@ public void AddParameterFromJson(String json) throws Exception { } else if (v.IsArray()) { operand = Operand.Create(v); } else if (v.IsNull()) { - operand = Operand.Null(); + operand = Operand.Null; } else { operand = Operand.Create(v); } diff --git a/java/src/main/java/toolgood/algorithm/Operand.java b/java/src/main/java/toolgood/algorithm/Operand.java index b507b1306..07bdd3228 100644 --- a/java/src/main/java/toolgood/algorithm/Operand.java +++ b/java/src/main/java/toolgood/algorithm/Operand.java @@ -3,7 +3,6 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import toolgood.algorithm.enums.OperandType; @@ -176,32 +175,32 @@ public static Operand Create(List obj) { return new OperandArray(obj); } - public static Operand Create(Collection obj) { - List array = new ArrayList<>(obj.size()); + public static Operand CreateStringCollection(String[] obj) { + List array = new ArrayList<>(obj.length); for (String item : obj) { array.add(Create(item)); } return new OperandArray(array); } - public static Operand CreateDoubleCollection(Collection obj) { - List array = new ArrayList<>(obj.size()); + public static Operand CreateDoubleCollection(Double[] obj) { + List array = new ArrayList<>(obj.length); for (Double item : obj) { array.add(Create(item)); } return new OperandArray(array); } - public static Operand CreateIntCollection(Collection obj) { - List array = new ArrayList<>(obj.size()); + public static Operand CreateIntCollection(Integer[] obj) { + List array = new ArrayList<>(obj.length); for (Integer item : obj) { array.add(Create(item)); } return new OperandArray(array); } - public static Operand CreateBooleanCollection(Collection obj) { - List array = new ArrayList<>(obj.size()); + public static Operand CreateBooleanCollection(Boolean[] obj) { + List array = new ArrayList<>(obj.length); for (Boolean item : obj) { array.add(Create(item)); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java index 71c54060c..e7da5fd87 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_EQ.java @@ -84,18 +84,27 @@ public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType t1 = func1.GetResultType(); OperandType t2 = func2.GetResultType(); if (t1 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func2).ToText(null); - if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { - func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); - func2.GetParameterTypes(noneEngine, result, t2, null, null); - return; + try { + Operand p = noneEngine.Evaluate(func2).ToText(null); + if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); + func2.GetParameterTypes(noneEngine, result, t2, null, null); + return; + } + } catch (Exception e) { + e.printStackTrace(); } } else if (t2 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func1).ToText(null); - if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { - func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); - func1.GetParameterTypes(noneEngine, result, t1, null, null); - return; + try { + Operand p = noneEngine.Evaluate(func1).ToText(null); + if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); + func1.GetParameterTypes(noneEngine, result, t1, null, null); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } func1.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java index deded9908..2b53a39de 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GE.java @@ -87,18 +87,28 @@ public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType t1 = func1.GetResultType(); OperandType t2 = func2.GetResultType(); if (t1 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func2).ToText(null); - if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { - func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); - func2.GetParameterTypes(noneEngine, result, t2, null, null); - return; + try { + Operand p = noneEngine.Evaluate(func2).ToText(null); + if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); + func2.GetParameterTypes(noneEngine, result, t2, null, null); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } else if (t2 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func1).ToText(null); - if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { - func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); - func1.GetParameterTypes(noneEngine, result, t1, null, null); - return; + try { + Operand p = noneEngine.Evaluate(func1).ToText(null); + if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); + func1.GetParameterTypes(noneEngine, result, t1, null, null); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } func1.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java index c25ff8e89..11307545a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_GT.java @@ -87,18 +87,28 @@ public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType t1 = func1.GetResultType(); OperandType t2 = func2.GetResultType(); if (t1 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func2).ToText(null); - if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { - func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); - func2.GetParameterTypes(noneEngine, result, t2, null, null); - return; + try { + Operand p = noneEngine.Evaluate(func2).ToText(null); + if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); + func2.GetParameterTypes(noneEngine, result, t2, null, null); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } else if (t2 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func1).ToText(null); - if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { - func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); - func1.GetParameterTypes(noneEngine, result, t1, null, null); - return; + try { + Operand p = noneEngine.Evaluate(func1).ToText(null); + if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); + func1.GetParameterTypes(noneEngine, result, t1, null, null); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } func1.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java index e9421b2f5..f9ab5815d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LE.java @@ -87,18 +87,28 @@ public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType t1 = func1.GetResultType(); OperandType t2 = func2.GetResultType(); if (t1 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func2).ToText(null); - if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { - func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); - func2.GetParameterTypes(noneEngine, result, t2, null, null); - return; + try { + Operand p = noneEngine.Evaluate(func2).ToText(null); + if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); + func2.GetParameterTypes(noneEngine, result, t2, null, null); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } else if (t2 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func1).ToText(null); - if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { - func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); - func1.GetParameterTypes(noneEngine, result, t1, null, null); - return; + try { + Operand p = noneEngine.Evaluate(func1).ToText(null); + if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); + func1.GetParameterTypes(noneEngine, result, t1, null, null); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } func1.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java index f42857d75..1cea534c0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_LT.java @@ -87,18 +87,28 @@ public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType t1 = func1.GetResultType(); OperandType t2 = func2.GetResultType(); if (t1 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func2).ToText(null); - if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { - func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); - func2.GetParameterTypes(noneEngine, result, t2, null, null); - return; + try { + Operand p = noneEngine.Evaluate(func2).ToText(null); + if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); + func2.GetParameterTypes(noneEngine, result, t2, null, null); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } else if (t2 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func1).ToText(null); - if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { - func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); - func1.GetParameterTypes(noneEngine, result, t1, null, null); - return; + try { + Operand p = noneEngine.Evaluate(func1).ToText(null); + if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); + func1.GetParameterTypes(noneEngine, result, t1, null, null); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } func1.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java index a78a01ced..764baf570 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/compare/Function_NE.java @@ -84,18 +84,28 @@ public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType t1 = func1.GetResultType(); OperandType t2 = func2.GetResultType(); if (t1 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func2).ToText(null); - if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { - func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); - func2.GetParameterTypes(noneEngine, result, t2, null, null); - return; + try { + Operand p = noneEngine.Evaluate(func2).ToText(null); + if (t2 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func1.GetParameterTypes(noneEngine, result, t2, Name(), p.TextValue()); + func2.GetParameterTypes(noneEngine, result, t2, null, null); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } else if (t2 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func1).ToText(null); - if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { - func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); - func1.GetParameterTypes(noneEngine, result, t1, null, null); - return; + try { + Operand p = noneEngine.Evaluate(func1).ToText(null); + if (t1 != OperandType.ERROR && !(p.IsError() || p.IsNone())) { + func2.GetParameterTypes(noneEngine, result, t1, Name(), p.TextValue()); + func1.GetParameterTypes(noneEngine, result, t1, null, null); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } func1.GetParameterTypes(noneEngine, result, OperandType.NONE, null, null); From c8436029ce90246355f68ca2c489902284f83e3b Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 13:44:38 +0800 Subject: [PATCH 69/98] fix --- .../algorithm/internals/functions/string/Function_FIND.java | 6 +++--- .../algorithm/internals/functions/string/Function_MID.java | 2 +- .../internals/functions/string/Function_REPLACE.java | 2 +- .../internals/functions/string/Function_SEARCH.java | 6 +++--- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java index 5025402b9..ecf363659 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_FIND.java @@ -27,12 +27,12 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction= args2.TextValue().length()) { return ParameterError(3); } @@ -40,7 +40,7 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction= args2.TextValue().length()) { return FunctionError(); } @@ -41,7 +41,7 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction Date: Tue, 17 Mar 2026 13:47:12 +0800 Subject: [PATCH 70/98] fix --- .../functions/mathsum2/Function_TDIST.java | 5 +--- .../functions/string/Function_EXACT.java | 30 ++++++++++++------- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java index 6fe8c178d..5969372da 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_TDIST.java @@ -12,10 +12,7 @@ import toolgood.algorithm.mathNet.ExcelFunctions; public final class Function_TDIST extends Function_3 { - public Function_TDIST(FunctionBase func1, FunctionBase func2, FunctionBase func3) { - super(func1, func2, func3); - } - + public Function_TDIST(FunctionBase[] funcs) { super(funcs); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java index 5739b3458..2e646c60e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/string/Function_EXACT.java @@ -39,18 +39,28 @@ public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType t1 = func1.GetResultType(); OperandType t2 = func2.GetResultType(); if (t1 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func2).ToText(); - if (t2 != OperandType.ERROR && p.IsErrorOrNone() == false) { - func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, "==", p.TextValue()); - func2.GetParameterTypes(noneEngine, result, OperandType.TEXT); - return; + try { + Operand p = noneEngine.Evaluate(func2).ToText(""); + if (t2 != OperandType.ERROR && p.IsErrorOrNone() == false) { + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT, "==", p.TextValue()); + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } else if (t2 == OperandType.NONE) { - Operand p = noneEngine.Evaluate(func1).ToText(); - if (t1 != OperandType.ERROR && p.IsErrorOrNone() == false) { - func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, "==", p.TextValue()); - func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); - return; + try { + Operand p = noneEngine.Evaluate(func1).ToText(""); + if (t1 != OperandType.ERROR && p.IsErrorOrNone() == false) { + func2.GetParameterTypes(noneEngine, result, OperandType.TEXT, "==", p.TextValue()); + func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); + return; + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); } } func1.GetParameterTypes(noneEngine, result, OperandType.TEXT); From 56cc11259c0c2711ce5431dbd49e5fba5ee37eba Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 13:57:07 +0800 Subject: [PATCH 71/98] fix --- .../toolgood/algorithm/AlgorithmEngine.java | 4 + .../functions/value/Function_ArrayJson.java | 2 +- .../value/Function_ArrayJsonItem.java | 4 +- .../value/Function_GetJsonValue.java | 14 +- .../functions/value/Function_JSON.java | 5 +- .../visitors/MathFunctionVisitor.java | 4532 ++++++++--------- .../toolgood/algorithm/litJson/JsonData.java | 3 +- 7 files changed, 2034 insertions(+), 2530 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java index 907571548..65f933a78 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java @@ -36,6 +36,10 @@ public class AlgorithmEngine { public boolean UseParseCache = false; private final ConcurrentHashMap _parseCache = new ConcurrentHashMap<>(); + public void SetLastError(String value) { + LastError = value; + } + public void setUseExcelIndex(boolean value) { ExcelIndex = value ? 1 : 0; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java index 63a58e93c..286f344ee 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ArrayJson.java @@ -31,7 +31,7 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { KeyValue keyValue = new KeyValue(); - keyValue.setKey(key); - keyValue.setValue(func1.Evaluate(engine, tempParameter)); + keyValue.Key = key; + keyValue.Value = func1.Evaluate(engine, tempParameter); return new OperandKeyValue(keyValue); } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java index 0a0aa464c..917ca36a7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_GetJsonValue.java @@ -72,8 +72,8 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction= 0) { - return ConvertJsonDataToOperand(json.get(index)); + if (index < json.inst_array.size() && index >= 0) { + return ConvertJsonDataToOperand(json.inst_array.get(index)); } return Operand.Error("Function '{0}' JSON index {1} greater than maximum length!", "GetJsonValue", index); } else { @@ -91,23 +91,23 @@ public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction implements mathVisitor { -//#region base - - public FunctionBase visitProg(mathParser.ProgContext context) - { - return context.expr().accept(this); - } - - public FunctionBase visitMulDiv_fun(mathParser.MulDiv_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - String t = context.op.getText(); - if (CharUtil.Equals(t, '*')) { - return new Function_Mul(args1, args2); - } else if (CharUtil.Equals(t, '/')) { - return new Function_Div(args1, args2); - } - return new Function_Mod(args1, args2); - } - - public FunctionBase visitAddSub_fun(mathParser.AddSub_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - String t = context.op.getText(); - if (CharUtil.Equals(t, '&')) { - return new Function_Connect(args1, args2); - } else if (CharUtil.Equals(t, '+')) { - return new Function_Add(args1, args2); - } - return new Function_Sub(args1, args2); - } - - public FunctionBase visitJudge_fun(mathParser.Judge_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - - String type = context.op.getText(); - if (CharUtil.Equals(type, "=", "==", "===")) { - return new Function_EQ(args1, args2); - } else if (CharUtil.Equals(type, "<")) { - return new Function_LT(args1, args2); - } else if (CharUtil.Equals(type, "<=")) { - return new Function_LE(args1, args2); - } else if (CharUtil.Equals(type, ">")) { - return new Function_GT(args1, args2); - } else if (CharUtil.Equals(type, ">=")) { - return new Function_GE(args1, args2); - } - return new Function_NE(args1, args2); - } - - public FunctionBase visitAndOr_fun(mathParser.AndOr_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - String t = context.op.getText(); - if (CharUtil.Equals(t, "&&", "AND")) { - return new Function_AND(args1, args2); - } - return new Function_OR(args1, args2); - } - - //#endregion base - - //#region flow - - public FunctionBase visitIF_fun(mathParser.IF_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 3) { - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_IF(args1, args2, args3); - } - return new Function_IF(args1, args2, null); - } - - public FunctionBase visitIFERROR_fun(mathParser.IFERROR_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_IFERROR(args1, args2, args3); - } - - public FunctionBase visitISNUMBER_fun(mathParser.ISNUMBER_funContext context) - { - FunctionBase args1 = this.visit(context.expr()); - return new Function_ISNUMBER(args1); - } - - public FunctionBase visitIsText_fun(mathParser.ISTEXT_funContext context) - { - FunctionBase args1 = this.visit(context.expr()); - return new Function_IsText(args1); - } - - public FunctionBase visitISERROR_fun(mathParser.ISERROR_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 2) { - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ISERROR(args1, args2); - } - return new Function_ISERROR(args1, null); - } - - public FunctionBase visitISNULL_fun(mathParser.ISNULL_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 2) { - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ISNULL(args1, args2); - } - return new Function_ISNULL(args1, null); - } - - public FunctionBase visitISNULLORERROR_fun(mathParser.ISNULLORERROR_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 2) { - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ISNULLORERROR(args1, args2); - } - return new Function_ISNULLORERROR(args1, null); - } - - public FunctionBase visitISEVEN_fun(mathParser.ISEVEN_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ISEVEN(args1); - } - - public FunctionBase visitISLOGICAL_fun(mathParser.ISLOGICAL_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ISLOGICAL(args1); - } - - public FunctionBase visitISODD_fun(mathParser.ISODD_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ISODD(args1); - } - - public FunctionBase visitISNONTEXT_fun(mathParser.ISNONTEXT_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ISNONTEXT(args1); - } - - public FunctionBase visitAND_fun(mathParser.AND_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_AND_N(args); - } - - public FunctionBase visitOR_fun(mathParser.OR_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_OR_N(args); - } - - public FunctionBase visitNOT_fun(mathParser.NOT_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_NOT(args1); - } - - public FunctionBase visitTRUE_fun(mathParser.TRUE_funContext context) - { - return new Function_Value(Operand.True); - } - - public FunctionBase visitFALSE_fun(mathParser.FALSE_funContext context) - { - return new Function_Value(Operand.False); - } - - //#endregion flow - - //#region math - - //#region base - - public FunctionBase visitE_fun(mathParser.E_funContext context) - { - return new Function_Value(Operand.Create(Math.E), "E"); - } - - public FunctionBase visitPI_fun(mathParser.PI_funContext context) - { - return new Function_Value(Operand.Create(Math.PI), "PI"); - } - - public FunctionBase visitABS_fun(mathParser.ABS_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ABS(args1); - } - - public FunctionBase visitQUOTIENT_fun(mathParser.QUOTIENT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_QUOTIENT(args1, args2); - } - - public FunctionBase visitMOD_fun(mathParser.MOD_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_Mod(args1, args2); - } - - public FunctionBase visitSIGN_fun(mathParser.SIGN_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_SIGN(args1); - } - - public FunctionBase visitSQRT_fun(mathParser.SQRT_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_SQRT(args1); - } - - public FunctionBase visitTRUNC_fun(mathParser.TRUNC_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_TRUNC(args1); - } - - public FunctionBase visitINT_fun(mathParser.INT_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_TRUNC(args1); - } - - public FunctionBase visitGCD_fun(mathParser.GCD_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_GCD(args); - } - - public FunctionBase visitLCM_fun(mathParser.LCM_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_LCM(args); - } - - public FunctionBase visitCOMBIN_fun(mathParser.COMBIN_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_COMBIN(args1, args2); - } - - public FunctionBase visitPERMUT_fun(mathParser.PERMUT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_PERMUT(args1, args2); - } - - public FunctionBase visitPercentage_fun(mathParser.Percentage_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_Percentage(args1); - } - - //#endregion base - - //#region trigonometric functions - - public FunctionBase visitDEGREES_fun(mathParser.DEGREES_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_DEGREES(args1); - } - - public FunctionBase visitRADIANS_fun(mathParser.RADIANS_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_RADIANS(args1); - } - - public FunctionBase visitCOS_fun(mathParser.COS_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_COS(args1); - } - - public FunctionBase visitCOSH_fun(mathParser.COSH_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_COSH(args1); - } - - public FunctionBase visitSIN_fun(mathParser.SIN_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_SIN(args1); - } - - public FunctionBase visitSINH_fun(mathParser.SINH_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_SINH(args1); - } - - public FunctionBase visitTAN_fun(mathParser.TAN_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_TAN(args1); - } - - public FunctionBase visitTANH_fun(mathParser.TANH_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_TANH(args1); - } - - public FunctionBase visitACOS_fun(mathParser.ACOS_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ACOS(args1); - } - - public FunctionBase visitACOSH_fun(mathParser.ACOSH_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ACOSH(args1); - } - - public FunctionBase visitASIN_fun(mathParser.ASIN_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ASIN(args1); - } - - public FunctionBase visitASINH_fun(mathParser.ASINH_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ASINH(args1); - } - - public FunctionBase visitATAN_fun(mathParser.ATAN_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ATAN(args1); - } - - public FunctionBase visitATANH_fun(mathParser.ATANH_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ATANH(args1); - } - - public FunctionBase visitATAN2_fun(mathParser.ATAN2_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ATAN2(args1, args2); - } - - public FunctionBase visitCOT_fun(mathParser.COT_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_COT(args1); - } - - public FunctionBase visitCSC_fun(mathParser.CSC_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_CSC(args1); - } - - public FunctionBase visitSEC_fun(mathParser.SEC_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_SEC(args1); - } - - public FunctionBase visitACOT_fun(mathParser.ACOT_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ACOT(args1); - } - - public FunctionBase visitACOTH_fun(mathParser.ACOTH_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ACOTH(args1); - } - - public FunctionBase visitCOTH_fun(mathParser.COTH_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_COTH(args1); - } - - public FunctionBase visitCSCH_fun(mathParser.CSCH_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_CSCH(args1); - } - - public FunctionBase visitSECH_fun(mathParser.SECH_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_SECH(args1); - } - - public FunctionBase visitFIXED_fun(mathParser.FIXED_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_FIXED(args1, null, null); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_FIXED(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_FIXED(args1, args2, args3); - } - - //#endregion trigonometric functions - - //#region transformation - - public FunctionBase visitBIN2OCT_fun(mathParser.BIN2OCT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_BIN2OCT(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_BIN2OCT(args1, args2); - } - - public FunctionBase visitBIN2DEC_fun(mathParser.BIN2DEC_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_BIN2DEC(args1); - } - - public FunctionBase visitBIN2HEX_fun(mathParser.BIN2HEX_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_BIN2HEX(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_BIN2HEX(args1, args2); - } - - public FunctionBase visitOCT2BIN_fun(mathParser.OCT2BIN_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_OCT2BIN(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_OCT2BIN(args1, args2); - } - - public FunctionBase visitOCT2DEC_fun(mathParser.OCT2DEC_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_OCT2DEC(args1); - } - - public FunctionBase visitOCT2HEX_fun(mathParser.OCT2HEX_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_OCT2HEX(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_OCT2HEX(args1, args2); - } - - public FunctionBase visitDEC2BIN_fun(mathParser.DEC2BIN_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_DEC2BIN(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_DEC2BIN(args1, args2); - } - - public FunctionBase visitDEC2OCT_fun(mathParser.DEC2OCT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_DEC2OCT(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_DEC2OCT(args1, args2); - } - - public FunctionBase visitDEC2HEX_fun(mathParser.DEC2HEX_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_DEC2HEX(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_DEC2HEX(args1, args2); - } - - public FunctionBase visitHEX2BIN_fun(mathParser.HEX2BIN_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_HEX2BIN(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_HEX2BIN(args1, args2); - } - - public FunctionBase visitHEX2OCT_fun(mathParser.HEX2OCT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_HEX2OCT(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_HEX2OCT(args1, args2); - } - - public FunctionBase visitHEX2DEC_fun(mathParser.HEX2DEC_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_HEX2DEC(args1); - } - - //#endregion transformation - - //#region rounding - - public FunctionBase visitROUND_fun(mathParser.ROUND_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) { - return new Function_ROUND(args1, null); - } - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ROUND(args1, args2); - } - - public FunctionBase visitROUNDDOWN_fun(mathParser.ROUNDDOWN_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ROUNDDOWN(args1, args2); - } - - public FunctionBase visitROUNDUP_fun(mathParser.ROUNDUP_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ROUNDUP(args1, args2); - } - - public FunctionBase visitCEILING_fun(mathParser.CEILING_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) - return new Function_CEILING(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_CEILING(args1, args2); - } - - public FunctionBase visitFLOOR_fun(mathParser.FLOOR_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) - return new Function_FLOOR(args1, null); - - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_FLOOR(args1, args2); - } - - public FunctionBase visitEVEN_fun(mathParser.EVEN_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_EVEN(args1); - } - - public FunctionBase visitODD_fun(mathParser.ODD_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ODD(args1); - } - - public FunctionBase visitMROUND_fun(mathParser.MROUND_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_MROUND(args1, args2); - } - - //#endregion rounding - - //#region RAND - - public FunctionBase visitRAND_fun(mathParser.RAND_funContext context) - { - return new Function_RAND(); - } - - public FunctionBase visitRANDBETWEEN_fun(mathParser.RANDBETWEEN_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_RANDBETWEEN(args1, args2); - } - - //#endregion RAND - - //#region power logarithm factorial - - public FunctionBase visitCOVARIANCES_fun(mathParser.COVARIANCES_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_COVARIANCES(args1, args2); - } - - public FunctionBase visitCOVAR_fun(mathParser.COVAR_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_COVAR(args1, args2); - } - - public FunctionBase visitFACT_fun(mathParser.FACT_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_FACT(args1); - } - - public FunctionBase visitFACTDOUBLE_fun(mathParser.FACTDOUBLE_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_FACTDOUBLE(args1); - } - - public FunctionBase visitPOWER_fun(mathParser.POWER_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_POWER(args1, args2); - } - - public FunctionBase visitEXP_fun(mathParser.EXP_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_EXP(args1); - } - - public FunctionBase visitLN_fun(mathParser.LN_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_LN(args1); - } - - public FunctionBase visitLOG_fun(mathParser.LOG_funContext context) - { - List exprs = context.expr(); - - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() > 1) { - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_LOG(args1, args2); - } - return new Function_LOG(args1, null); - } - - public FunctionBase visitLOG10_fun(mathParser.LOG10_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_LOG10(args1); - } - - public FunctionBase visitMULTINOMIAL_fun(mathParser.MULTINOMIAL_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_MULTINOMIAL(args); - } - - public FunctionBase visitPRODUCT_fun(mathParser.PRODUCT_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_PRODUCT(args); - } - - public FunctionBase visitSQRTPI_fun(mathParser.SQRTPI_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_SQRTPI(args1); - } - - public FunctionBase visitSUMSQ_fun(mathParser.SUMSQ_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_SUMSQ(args); - } - - //#endregion - - //#endregion math - - //#region string - - public FunctionBase visitASC_fun(mathParser.ASC_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ASC(args1); - } - - public FunctionBase visitJIS_fun(mathParser.JIS_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_JIS(args1); - } - - public FunctionBase visitCHAR_fun(mathParser.CHAR_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_CHAR(args1); - } - - public FunctionBase visitCLEAN_fun(mathParser.CLEAN_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_CLEAN(args1); - } - - public FunctionBase visitCODE_fun(mathParser.CODE_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_CODE(args1); - } - - public FunctionBase visitCONCATENATE_fun(mathParser.CONCATENATE_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_CONCATENATE(args); - } - - public FunctionBase visitEXACT_fun(mathParser.EXACT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_EXACT(args1, args2); - } - - public FunctionBase visitFIND_fun(mathParser.FIND_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - - if (exprs.size() == 2) { - return new Function_FIND(args1, args2, null); - } - FunctionBase count = exprs.get(2).accept(this); - return new Function_FIND(args1, args2, count); - } - - public FunctionBase visitLEFT_fun(mathParser.LEFT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) { - return new Function_LEFT(args1, null); - } - return new Function_LEFT(args1, exprs.get(1).accept(this)); - } - - public FunctionBase visitLEN_fun(mathParser.LEN_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_LEN(args1); - } - - public FunctionBase visitLOWER_fun(mathParser.LOWER_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_LOWER(args1); - } - - public FunctionBase visitMID_fun(mathParser.MID_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_MID(args1, args2, args3); - } - - public FunctionBase visitPROPER_fun(mathParser.PROPER_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_PROPER(args1); - } - - public FunctionBase visitREPLACE_fun(mathParser.REPLACE_funContext context) - { - List exprs = context.expr(); - - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 3) { - FunctionBase args22 = exprs.get(1).accept(this); - FunctionBase args32 = exprs.get(2).accept(this); - return new Function_REPLACE(args1, args22, args32, null); - } - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - FunctionBase args4 = exprs.get(3).accept(this); - return new Function_REPLACE(args1, args2, args3, args4); - } - - public FunctionBase visitREPT_fun(mathParser.REPT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_REPT(args1, args2); - } - - public FunctionBase visitRIGHT_fun(mathParser.RIGHT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - - if (exprs.size() == 1) { - return new Function_RIGHT(args1); - } - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_RIGHT(args1, args2); - } - - public FunctionBase visitRMB_fun(mathParser.RMB_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_RMB(args1); - } - - public FunctionBase visitSEARCH_fun(mathParser.SEARCH_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - - if (exprs.size() == 2) { - return new Function_SEARCH(args1, args2, null); - } - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_SEARCH(args1, args2, args3); - } - - public FunctionBase visitSUBSTITUTE_fun(mathParser.SUBSTITUTE_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - if (exprs.size() == 3) { - return new Function_SUBSTITUTE(args1, args2, args3, null); - } - FunctionBase args4 = exprs.get(3).accept(this); - return new Function_SUBSTITUTE(args1, args2, args3, args4); - } - - public FunctionBase visitT_fun(mathParser.T_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_T(args1); - } - - public FunctionBase visitTEXT_fun(mathParser.TEXT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_TEXT(args1, args2); - } - - public FunctionBase visitTRIM_fun(mathParser.TRIM_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_TRIM(args1); - } - - public FunctionBase visitUPPER_fun(mathParser.UPPER_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_UPPER(args1); - } - - public FunctionBase visitVALUE_fun(mathParser.VALUE_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_VALUE(args1); - } - - public FunctionBase visitUNICHAR_fun(mathParser.UNICHAR_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_UNICHAR(args1); - } - - public FunctionBase visitUNICODE_fun(mathParser.UNICODE_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_UNICODE(args1); - } - - //#endregion string - - //#region MyDate time - - public FunctionBase visitDATEVALUE_fun(mathParser.DATEVALUE_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_DATEVALUE(args); - } - - public FunctionBase visitTIMESTAMP_fun(mathParser.TIMESTAMP_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_TIMESTAMP(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_TIMESTAMP(args1, args2); - } - - public FunctionBase visitTIMEVALUE_fun(mathParser.TIMEVALUE_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_TIMEVALUE(args1); - } - - public FunctionBase visitDATE_fun(mathParser.DATE_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_DATE(args); - } - - public FunctionBase visitTIME_fun(mathParser.TIME_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_TIME(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_TIME(args1, args2, args3); - } - - public FunctionBase visitNOW_fun(mathParser.NOW_funContext context) - { - return new Function_NOW(); - } - - public FunctionBase visitTODAY_fun(mathParser.TODAY_funContext context) - { - return new Function_TODAY(); - } - - public FunctionBase visitYEAR_fun(mathParser.YEAR_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_YEAR(args1); - } - - public FunctionBase visitMONTH_fun(mathParser.MONTH_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_MONTH(args1); - } - - public FunctionBase visitDAY_fun(mathParser.DAY_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_DAY(args1); - } - - public FunctionBase visitHOUR_fun(mathParser.HOUR_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_HOUR(args1); - } - - public FunctionBase visitMINUTE_fun(mathParser.MINUTE_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_MINUTE(args1); - } - - public FunctionBase visitSECOND_fun(mathParser.SECOND_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_SECOND(args1); - } - - public FunctionBase visitWEEKDAY_fun(mathParser.WEEKDAY_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_WEEKDAY(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_WEEKDAY(args1, args2); - } - - public FunctionBase visitDATEDIF_fun(mathParser.DATEDIF_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_DATEDIF(args1, args2, args3); - } - - public FunctionBase visitDAYS360_fun(mathParser.DAYS360_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 3) { - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_DAYS360(args1, args2, args3); - } - return new Function_DAYS360(args1, args2, null); - } - - public FunctionBase visitDAYS_fun(mathParser.DAYS_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_DAYS(args1, args2); - } - - public FunctionBase visitYEARFRAC_fun(mathParser.YEARFRAC_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 3) { - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_YEARFRAC(args1, args2, args3); - } - return new Function_YEARFRAC(args1, args2, null); - } - - public FunctionBase visitEDATE_fun(mathParser.EDATE_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_EDATE(args1, args2); - } - - public FunctionBase visitEOMONTH_fun(mathParser.EOMONTH_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_EOMONTH(args1, args2); - } - - public FunctionBase visitNETWORKDAYS_fun(mathParser.NETWORKDAYS_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_NETWORKDAYS(args); - } - - public FunctionBase visitWORKDAY_fun(mathParser.WORKDAY_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_WORKDAY(args); - } - - public FunctionBase visitWEEKNUM_fun(mathParser.WEEKNUM_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_WEEKNUM(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_WEEKNUM(args1, args2); - } - - public FunctionBase visitADDMONTHS_fun(mathParser.ADDMONTHS_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ADDMONTHS(args1, args2); - } - - public FunctionBase visitADDYEARS_fun(mathParser.ADDYEARS_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ADDYEARS(args1, args2); - } - - public FunctionBase visitADDSECONDS_fun(mathParser.ADDSECONDS_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ADDSECONDS(args1, args2); - } - - public FunctionBase visitADDMINUTES_fun(mathParser.ADDMINUTES_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ADDMINUTES(args1, args2); - } - - public FunctionBase visitADDDAYS_fun(mathParser.ADDDAYS_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ADDDAYS(args1, args2); - } - - public FunctionBase visitADDHOURS_fun(mathParser.ADDHOURS_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ADDHOURS(args1, args2); - } - - //#endregion MyDate time - - //#region sum - - public FunctionBase visitMAX_fun(mathParser.MAX_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_MAX(args); - } - - public FunctionBase visitMEDIAN_fun(mathParser.MEDIAN_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_MEDIAN(args); - } - - public FunctionBase visitMIN_fun(mathParser.MIN_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_MIN(args); - } - - public FunctionBase visitQUARTILE_fun(mathParser.QUARTILE_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_QUARTILE(args1, args2); - } - - public FunctionBase visitMODE_fun(mathParser.MODE_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_MODE(args); - } - - public FunctionBase visitLARGE_fun(mathParser.LARGE_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_LARGE(args1, args2); - } - - public FunctionBase visitSMALL_fun(mathParser.SMALL_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_SMALL(args1, args2); - } - - public FunctionBase visitPERCENTILE_fun(mathParser.PERCENTILE_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_PERCENTILE(args1, args2); - } - - public FunctionBase visitPERCENTRANK_fun(mathParser.PERCENTRANK_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_PERCENTRANK(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_PERCENTRANK(args1, args2, args3); - } - - public FunctionBase visitAVERAGE_fun(mathParser.AVERAGE_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_AVERAGE(args); - } - - public FunctionBase visitAVERAGEIF_fun(mathParser.AVERAGEIF_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_AVERAGEIF(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_AVERAGEIF(args1, args2, args3); - } - - public FunctionBase visitGEOMEAN_fun(mathParser.GEOMEAN_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_GEOMEAN(args); - } - - public FunctionBase visitHARMEAN_fun(mathParser.HARMEAN_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_HARMEAN(args); - } - - public FunctionBase visitCOUNT_fun(mathParser.COUNT_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_COUNT(args); - } - - public FunctionBase visitCOUNTIF_fun(mathParser.COUNTIF_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_COUNTIF(args1, args2); - } - - public FunctionBase visitSUM_fun(mathParser.SUM_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_SUM(args); - } - - public FunctionBase visitSUMIF_fun(mathParser.SUMIF_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_SUMIF(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_SUMIF(args1, args2, args3); - } - - public FunctionBase visitAVEDEV_fun(mathParser.AVEDEV_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_AVEDEV(args); - } - - public FunctionBase visitSTDEV_fun(mathParser.STDEV_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_STDEV(args); - } - - public FunctionBase visitSTDEVP_fun(mathParser.STDEVP_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_STDEVP(args); - } - - public FunctionBase visitDEVSQ_fun(mathParser.DEVSQ_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_DEVSQ(args); - } - - public FunctionBase visitVAR_fun(mathParser.VAR_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_VAR(args); - } - - public FunctionBase visitVARP_fun(mathParser.VARP_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_VARP(args); - } - - public FunctionBase visitNORMDIST_fun(mathParser.NORMDIST_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - FunctionBase args4 = exprs.get(3).accept(this); - return new Function_NORMDIST(args1, args2, args3, args4); - } - - public FunctionBase visitNORMINV_fun(mathParser.NORMINV_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_NORMINV(args1, args2, args3); - } - - public FunctionBase visitNORMSDIST_fun(mathParser.NORMSDIST_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_NORMSDIST(args1); - } - - public FunctionBase visitNORMSINV_fun(mathParser.NORMSINV_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_NORMSINV(args1); - } - - public FunctionBase visitBETADIST_fun(mathParser.BETADIST_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_BETADIST(args1, args2, args3); - } - - public FunctionBase visitBETAINV_fun(mathParser.BETAINV_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_BETAINV(args1, args2, args3); - } - - public FunctionBase visitBINOMDIST_fun(mathParser.BINOMDIST_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - FunctionBase args4 = exprs.get(3).accept(this); - return new Function_BINOMDIST(args1, args2, args3, args4); - } - - public FunctionBase visitEXPONDIST_fun(mathParser.EXPONDIST_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_EXPONDIST(args1, args2, args3); - } - - public FunctionBase visitFDIST_fun(mathParser.FDIST_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_FDIST(args1, args2, args3); - } - - public FunctionBase visitFINV_fun(mathParser.FINV_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_FINV(args1, args2, args3); - } - - public FunctionBase visitFISHER_fun(mathParser.FISHER_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_FISHER(args1); - } - - public FunctionBase visitFISHERINV_fun(mathParser.FISHERINV_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_FISHERINV(args1); - } - - public FunctionBase visitGAMMADIST_fun(mathParser.GAMMADIST_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - FunctionBase args4 = exprs.get(3).accept(this); - return new Function_GAMMADIST(args1, args2, args3, args4); - } - - public FunctionBase visitGAMMAINV_fun(mathParser.GAMMAINV_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_GAMMAINV(args1, args2, args3); - } - - public FunctionBase visitGAMMALN_fun(mathParser.GAMMALN_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_GAMMALN(args1); - } - - public FunctionBase visitHYPGEOMDIST_fun(mathParser.HYPGEOMDIST_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - FunctionBase args4 = exprs.get(3).accept(this); - return new Function_HYPGEOMDIST(args1, args2, args3, args4); - } - - public FunctionBase visitLOGINV_fun(mathParser.LOGINV_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_LOGINV(args1, args2, args3); - } - - public FunctionBase visitLOGNORMDIST_fun(mathParser.LOGNORMDIST_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_LOGNORMDIST(args1, args2, args3); - } - - public FunctionBase visitNEGBINOMDIST_fun(mathParser.NEGBINOMDIST_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_NEGBINOMDIST(args1, args2, args3); - } - - public FunctionBase visitPOISSON_fun(mathParser.POISSON_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_POISSON(args1, args2, args3); - } - - public FunctionBase visitTDIST_fun(mathParser.TDIST_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_TDIST(args1, args2, args3); - } - - public FunctionBase visitTINV_fun(mathParser.TINV_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_TINV(args1, args2); - } - - public FunctionBase visitWEIBULL_fun(mathParser.WEIBULL_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - FunctionBase args4 = exprs.get(3).accept(this); - return new Function_WEIBULL(args1, args2, args3, args4); - } - - //#endregion sum - - //#region mathsum2 - - public FunctionBase visitBESSELI_fun(mathParser.BESSELI_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_BESSELI(args1, args2); - } - - public FunctionBase visitBESSELJ_fun(mathParser.BESSELJ_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_BESSELJ(args1, args2); - } - - public FunctionBase visitBESSELK_fun(mathParser.BESSELK_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_BESSELK(args1, args2); - } - - public FunctionBase visitBESSELY_fun(mathParser.BESSELY_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_BESSELY(args1, args2); - } - - public FunctionBase visitERF_fun(mathParser.ERF_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ERF(args1); - } - - public FunctionBase visitERFC_fun(mathParser.ERFC_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ERFC(args1); - } - - //#endregion mathsum2 - - //#region financial - - public FunctionBase visitDB_fun(mathParser.DB_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_DB(args); - } - - public FunctionBase visitDDB_fun(mathParser.DDB_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_DDB(args); - } - - public FunctionBase visitFV_fun(mathParser.FV_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_FV(args); - } - - public FunctionBase visitIPMT_fun(mathParser.IPMT_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_IPMT(args); - } - - public FunctionBase visitIRR_fun(mathParser.IRR_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) { - return new Function_IRR(args1, null); - } - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_IRR(args1, args2); - } - - public FunctionBase visitMIRR_fun(mathParser.MIRR_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_MIRR(args1, args2, args3); - } - - public FunctionBase visitNPER_fun(mathParser.NPER_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_NPER(args); - } - - public FunctionBase visitNPV_fun(mathParser.NPV_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_NPV(args); - } - - public FunctionBase visitPMT_fun(mathParser.PMT_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_PMT(args); - } - - public FunctionBase visitPPMT_fun(mathParser.PPMT_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_PPMT(args); - } - - public FunctionBase visitPV_fun(mathParser.PV_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_PV(args); - } - - public FunctionBase visitRATE_fun(mathParser.RATE_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_RATE(args); - } - - public FunctionBase visitSLN_fun(mathParser.SLN_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_SLN(args1, args2, args3); - } - - public FunctionBase visitSYD_fun(mathParser.SYD_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - FunctionBase args4 = exprs.get(3).accept(this); - return new Function_SYD(args1, args2, args3, args4); - } - - public FunctionBase visitXIRR_fun(mathParser.XIRR_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) { - return new Function_XIRR(args1, args2, null); - } - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_XIRR(args1, args2, args3); - } - - public FunctionBase visitXNPV_fun(mathParser.XNPV_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_XNPV(args1, args2, args3); - } - - //#endregion financial - - //#region csharp - - public FunctionBase visitURLENCODE_fun(mathParser.URLENCODE_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_URLENCODE(args1); - } - - public FunctionBase visitURLDECODE_fun(mathParser.URLDECODE_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_URLDECODE(args1); - } - - public FunctionBase visitHTMLENCODE_fun(mathParser.HTMLENCODE_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_HTMLENCODE(args1); - } - - public FunctionBase visitHTMLDECODE_fun(mathParser.HTMLDECODE_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_HTMLDECODE(args1); - } - - public FunctionBase visitBASE64TOTEXT_fun(mathParser.BASE64TOTEXT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_BASE64TOTEXT(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_BASE64TOTEXT(args1, args2); - } - - public FunctionBase visitBASE64URLTOTEXT_fun(mathParser.BASE64URLTOTEXT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_BASE64URLTOTEXT(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_BASE64URLTOTEXT(args1, args2); - } - - public FunctionBase visitTEXTTOBASE64_fun(mathParser.TEXTTOBASE64_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_TEXTTOBASE64(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_TEXTTOBASE64(args1, args2); - } - - public FunctionBase visitTEXTTOBASE64URL_fun(mathParser.TEXTTOBASE64URL_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_TEXTTOBASE64URL(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_TEXTTOBASE64URL(args1, args2); - } - - public FunctionBase visitREGEX_fun(mathParser.REGEX_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_REGEX(args1, args2); - } - - public FunctionBase visitREGEXREPLACE_fun(mathParser.REGEXREPLACE_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_REGEXREPLACE(args1, args2, args3); - } - - public FunctionBase visitISREGEX_fun(mathParser.ISREGEX_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_ISREGEX(args1, args2); - } - - public FunctionBase visitGUID_fun(mathParser.GUID_funContext context) - { - return new Function_GUID(); - } - - public FunctionBase visitMD5_fun(mathParser.MD5_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_MD5(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_MD5(args1, args2); - } - - public FunctionBase visitSHA1_fun(mathParser.SHA1_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_SHA1(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_SHA1(args1, args2); - } - - public FunctionBase visitSHA256_fun(mathParser.SHA256_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_SHA256(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_SHA256(args1, args2); - } - - public FunctionBase visitSHA512_fun(mathParser.SHA512_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_SHA512(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_SHA512(args1, args2); - } - - public FunctionBase visitHMACMD5_fun(mathParser.HMACMD5_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_HMACMD5(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_HMACMD5(args1, args2, args3); - } - - public FunctionBase visitHMACSHA1_fun(mathParser.HMACSHA1_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_HMACSHA1(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_HMACSHA1(args1, args2, args3); - } - - public FunctionBase visitHMACSHA256_fun(mathParser.HMACSHA256_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_HMACSHA256(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_HMACSHA256(args1, args2, args3); - } - - public FunctionBase visitHMACSHA512_fun(mathParser.HMACSHA512_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_HMACSHA512(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_HMACSHA512(args1, args2, args3); - } - - public FunctionBase visitTRIMSTART_fun(mathParser.TRIMSTART_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_TRIMSTART(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_TRIMSTART(args1, args2); - } - - public FunctionBase visitTRIMEND_fun(mathParser.TRIMEND_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) return new Function_TRIMEND(args1, null); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_TRIMEND(args1, args2); - } - - public FunctionBase visitINDEXOF_fun(mathParser.INDEXOF_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_INDEXOF(args1, args2, null, null); - FunctionBase args3 = exprs.get(2).accept(this); - if (exprs.size() == 3) return new Function_INDEXOF(args1, args2, args3, null); - FunctionBase args4 = exprs.get(3).accept(this); - return new Function_INDEXOF(args1, args2, args3, args4); - } - - public FunctionBase visitLASTINDEXOF_fun(mathParser.LASTINDEXOF_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_LASTINDEXOF(args1, args2, null, null); - FunctionBase args3 = exprs.get(2).accept(this); - if (exprs.size() == 3) return new Function_LASTINDEXOF(args1, args2, args3, null); - FunctionBase args4 = exprs.get(3).accept(this); - return new Function_LASTINDEXOF(args1, args2, args3, args4); - } - - public FunctionBase visitSPLIT_fun(mathParser.SPLIT_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_SPLIT(args1, args2); - } - - public FunctionBase visitJOIN_fun(mathParser.JOIN_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_JOIN(args); - } - - public FunctionBase visitSUBSTRING_fun(mathParser.SUBSTRING_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_SUBSTRING(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_SUBSTRING(args1, args2, args3); - } - - public FunctionBase visitSTARTSWITH_fun(mathParser.STARTSWITH_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_STARTSWITH(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_STARTSWITH(args1, args2, args3); - } - - public FunctionBase visitENDSWITH_fun(mathParser.ENDSWITH_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_ENDSWITH(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_ENDSWITH(args1, args2, args3); - } - - public FunctionBase visitISNULLOREMPTY_fun(mathParser.ISNULLOREMPTY_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ISNULLOREMPTY(args1); - } - - public FunctionBase visitISNULLORWHITESPACE_fun(mathParser.ISNULLORWHITESPACE_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_ISNULLORWHITESPACE(args1); - } - - public FunctionBase visitREMOVESTART_fun(mathParser.REMOVESTART_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_REMOVESTART(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_REMOVESTART(args1, args2, args3); - } - - public FunctionBase visitREMOVEEND_fun(mathParser.REMOVEEND_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - if (exprs.size() == 2) return new Function_REMOVEEND(args1, args2, null); - FunctionBase args3 = exprs.get(2).accept(this); - return new Function_REMOVEEND(args1, args2, args3); - } - - public FunctionBase visitJSON_fun(mathParser.JSON_funContext context) - { - FunctionBase args1 = context.expr().accept(this); - return new Function_JSON(args1); - } - - //#endregion csharp - - //#region LOOKFLOOR LOOKCEILING - public FunctionBase visitLOOKFLOOR_fun(mathParser.LOOKFLOOR_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_LOOKFLOOR(args1, args2); - } - - public FunctionBase visitLOOKCEILING_fun(mathParser.LOOKCEILING_funContext context) - { - List exprs = context.expr(); - FunctionBase args1 = exprs.get(0).accept(this); - FunctionBase args2 = exprs.get(1).accept(this); - return new Function_LOOKCEILING(args1, args2); - } - //#endregion - - //#region getValue - - public FunctionBase visitArray_fun(mathParser.Array_funContext context) - { - List exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_Array(args); - } - - public FunctionBase visitBracket_fun(mathParser.Bracket_funContext context) - { - return context.expr().accept(this); - } - - public FunctionBase visitNUM_fun(mathParser.NUM_funContext context) - { - double d = Double.parseDouble(context.num().getText()); - if (context.unit() == null) { return new Function_Value(Operand.Create(d), context.num().getText()); } - String unit = context.unit().getText(); - return new Function_NUM(d, unit); - } - - public FunctionBase visitNum(mathParser.NumContext context) - { - double d = Double.parseDouble(context.getText()); - return new Function_Value(Operand.Create(d), context.getText()); - } - - public FunctionBase visitUnit(mathParser.UnitContext context) - { - return new Function_Value(Operand.Create(context.getText())); - } - - public FunctionBase visitSTRING_fun(mathParser.STRING_funContext context) - { - String opd = context.getText(); - StringBuilder sb = new StringBuilder(); - int index = 1; - while (index < opd.length() - 1) { - char c = opd.charAt(index++); - if (c == '\\') { - char c2 = opd.charAt(index++); - switch (c2) { - case 'b': sb.append('\b'); break; - case 'f': sb.append('\f'); break; - case 'n': sb.append('\n'); break; - case 'r': sb.append('\r'); break; - case 't': sb.append('\t'); break; - case '0': sb.append('\0'); break; - default: sb.append(c2); break; - } - } else { - sb.append(c); - } - } - return new Function_Value(Operand.Create(sb.toString())); - } - - public FunctionBase visitNULL_fun(mathParser.NULL_funContext context) - { - return new Function_Value(Operand.CreateNull(), "NULL"); - } - - public FunctionBase visitPARAMETER_fun(mathParser.PARAMETER_funContext context) - { - ITerminalNode node = context.PARAMETER(); - return new Function_PARAMETER(node.GetText()); - } - - public FunctionBase visitParameter2(mathParser.Parameter2Context context) - { - return new Function_Value(Operand.Create(context.children[0].GetText())); - } - - public FunctionBase visitGetJsonValue_fun(mathParser.GetJsonValue_funContext context) - { - var exprs = context.expr(); - var args1 = exprs.get(0).accept(this); - if (context.PARAMETER()!=null) { - var op = new Function_PARAMETER(context.PARAMETER().GetText()); - return new Function_GetJsonValue(args1, op); - } - if (context.parameter2() != null) { - var op = context.parameter2().accept(this); - return new Function_GetJsonValue(args1, op); - } - var op2 = exprs.get(1).accept(this); - return new Function_GetJsonValue(args1, op2); - } - - public FunctionBase visitDiyFunction_fun(mathParser.DiyFunction_funContext context) - { - var funName = context.PARAMETER().GetText(); - var exprs = context.expr(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_DiyFunction(funName, args); - } - - public FunctionBase visitPARAM_fun(mathParser.PARAM_funContext context) - { - var exprs = context.expr(); - var args1 = exprs.get(0).accept(this); - if (exprs.size() == 1) { - return new Function_PARAM(args1, null); - } - var args2 = exprs.get(1).accept(this); - return new Function_PARAM(args1, args2); - } - - public FunctionBase visitHAS_fun(mathParser.HAS_funContext context) - { - var exprs = context.expr(); - var args1 = exprs.get(0).accept(this); - var args2 = exprs.get(1).accept(this); - return new Function_HAS(args1, args2); - } - - public FunctionBase visitHASVALUE_fun(mathParser.HASVALUE_funContext context) - { - var exprs = context.expr(); - var args1 = exprs.get(0).accept(this); - var args2 = exprs.get(1).accept(this); - return new Function_HASVALUE(args1, args2); - } - - public FunctionBase visitArrayJson_fun(mathParser.ArrayJson_funContext context) - { - var exprs = context.arrayJson(); - FunctionBase[] args = new FunctionBase[exprs.size()]; - for (int i = 0; i < exprs.size(); i++) { - args[i] = exprs.get(i).accept(this); - } - return new Function_ArrayJson(args); - } - - public FunctionBase visitArrayJson(mathParser.ArrayJsonContext context) - { - String keyName = null; - //KeyValue keyValue = new KeyValue(); - if (context.NUM() != null) { - try { - int key = Integer.parseInt(context.NUM().getText()); - keyName = String.valueOf(key); - } catch (NumberFormatException e) { - return new Function_Value(Operand.Error("Json key '" + context.NUM().getText() + "' is error!")); - } - } - if (context.STRING() != null) { - String opd = context.STRING().getText(); - StringBuilder sb = new StringBuilder(opd.length() - 2); - int index = 1; - while (index < opd.length() - 1) { - char c = opd.charAt(index++); - if (c == '\\') { - char c2 = opd.charAt(index++); - switch (c2) { - case 'b': sb.append('\b'); break; - case 'f': sb.append('\f'); break; - case 'n': sb.append('\n'); break; - case 'r': sb.append('\r'); break; - case 't': sb.append('\t'); break; - case '0': sb.append('\0'); break; - default: sb.append(c2); break; - } - } else { - sb.append(c); - } - } - keyName = sb.toString(); - } - if (context.parameter2() != null) { - keyName = context.parameter2().getText(); - } - var f = context.expr().accept(this); - return new Function_ArrayJsonItem(keyName, f); - } - - public FunctionBase visitERROR_fun(mathParser.ERROR_funContext context) - { - if (context.expr() == null) { return new Function_Value(Operand.Error("")); } - var args1 = context.expr().accept(this); - return new Function_ERROR(args1); - } - - public FunctionBase visitVersion_fun(mathParser.Version_funContext context) - { - return new Function_Value(Operand.Version); - } - - @Override - public FunctionBase visitSLOPE_fun(SLOPE_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitSLOPE_fun'"); - } - - @Override - public FunctionBase visitISTEXT_fun(ISTEXT_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitISTEXT_fun'"); - } - - @Override - public FunctionBase visitCORREL_fun(CORREL_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitCORREL_fun'"); - } - - @Override - public FunctionBase visitGESTEP_fun(GESTEP_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitGESTEP_fun'"); - } - - @Override - public FunctionBase visitFORECAST_fun(FORECAST_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitFORECAST_fun'"); - } - - @Override - public FunctionBase visitSUMXMY2_fun(SUMXMY2_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitSUMXMY2_fun'"); - } - - @Override - public FunctionBase visitSERIESSUM_fun(SERIESSUM_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitSERIESSUM_fun'"); - } - - @Override - public FunctionBase visitRANK_fun(RANK_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitRANK_fun'"); - } - - @Override - public FunctionBase visitROMAN_fun(ROMAN_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitROMAN_fun'"); - } - - @Override - public FunctionBase visitDELTA_fun(DELTA_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitDELTA_fun'"); - } - - @Override - public FunctionBase visitPEARSON_fun(PEARSON_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitPEARSON_fun'"); - } - - @Override - public FunctionBase visitIFS_fun(IFS_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitIFS_fun'"); - } - - @Override - public FunctionBase visitSUMPRODUCT_fun(SUMPRODUCT_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitSUMPRODUCT_fun'"); - } - - @Override - public FunctionBase visitSUMX2PY2_fun(SUMX2PY2_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitSUMX2PY2_fun'"); - } - - @Override - public FunctionBase visitSWITCH_fun(SWITCH_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitSWITCH_fun'"); - } - - @Override - public FunctionBase visitSUMX2MY2_fun(SUMX2MY2_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitSUMX2MY2_fun'"); - } - - @Override - public FunctionBase visitXOR_fun(XOR_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitXOR_fun'"); - } - - @Override - public FunctionBase visitINTERCEPT_fun(INTERCEPT_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitINTERCEPT_fun'"); - } - - @Override - public FunctionBase visitARABIC_fun(ARABIC_funContext ctx) { - // TODO Auto-generated method stub - throw new UnsupportedOperationException("Unimplemented method 'visitARABIC_fun'"); - } - - - - //#endregion getValue - } +import toolgood.algorithm.system.MathEx; + +public final class MathFunctionVisitor extends AbstractParseTreeVisitor implements mathVisitor { + private FunctionBase[] VisitExprs(List exprs) { + FunctionBase[] list = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + list[i] = exprs.get(i).accept(this); + } + return list; + } + + @Override + public FunctionBase visitProg(mathParser.ProgContext ctx) { + return ctx.expr().accept(this); + } + + @Override + public FunctionBase visitMulDiv_fun(mathParser.MulDiv_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + Token t = ctx.op; + if (CharUtil.Equals(t.getText(), '*')) { + return new Function_Mul(funcs); + } else if (CharUtil.Equals(t.getText(), '/')) { + return new Function_Div(funcs); + } + return new Function_Mod(funcs); + } + + @Override + public FunctionBase visitAddSub_fun(mathParser.AddSub_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + Token t = ctx.op; + if (CharUtil.Equals(t.getText(), '&')) { + return new Function_Connect(funcs); + } else if (CharUtil.Equals(t.getText(), '+')) { + return new Function_Add(funcs); + } + return new Function_Sub(funcs); + } + + @Override + public FunctionBase visitJudge_fun(mathParser.Judge_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + String type = ctx.op.getText(); + if (CharUtil.Equals(type, "=", "==", "===")) { + return new Function_EQ(funcs); + } else if (CharUtil.Equals(type, "<")) { + return new Function_LT(funcs); + } else if (CharUtil.Equals(type, "<=")) { + return new Function_LE(funcs); + } else if (CharUtil.Equals(type, ">")) { + return new Function_GT(funcs); + } else if (CharUtil.Equals(type, ">=")) { + return new Function_GE(funcs); + } + return new Function_NE(funcs); + } + + @Override + public FunctionBase visitAndOr_fun(mathParser.AndOr_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + Token t = ctx.op; + if (CharUtil.Equals(t.getText(), "&&")) { + return new Function_AND(funcs); + } + return new Function_OR(funcs); + } + + @Override + public FunctionBase visitIF_fun(mathParser.IF_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_IF(funcs); + } + + @Override + public FunctionBase visitIFS_fun(mathParser.IFS_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_IFS(funcs); + } + + @Override + public FunctionBase visitSWITCH_fun(mathParser.SWITCH_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SWITCH(funcs); + } + + @Override + public FunctionBase visitIFERROR_fun(mathParser.IFERROR_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_IFERROR(funcs); + } + + @Override + public FunctionBase visitISNUMBER_fun(mathParser.ISNUMBER_funContext ctx) { + FunctionBase args1 = this.visit(ctx.expr()); + return new Function_ISNUMBER(args1); + } + + @Override + public FunctionBase visitISTEXT_fun(mathParser.ISTEXT_funContext ctx) { + FunctionBase args1 = this.visit(ctx.expr()); + return new Function_ISTEXT(args1); + } + + @Override + public FunctionBase visitISERROR_fun(mathParser.ISERROR_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ISERROR(funcs); + } + + @Override + public FunctionBase visitISNULL_fun(mathParser.ISNULL_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ISNULL(funcs); + } + + @Override + public FunctionBase visitISNULLORERROR_fun(mathParser.ISNULLORERROR_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ISNULLORERROR(funcs); + } + + @Override + public FunctionBase visitISEVEN_fun(mathParser.ISEVEN_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ISEVEN(args1); + } + + @Override + public FunctionBase visitISLOGICAL_fun(mathParser.ISLOGICAL_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ISLOGICAL(args1); + } + + @Override + public FunctionBase visitISODD_fun(mathParser.ISODD_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ISODD(args1); + } + + @Override + public FunctionBase visitISNONTEXT_fun(mathParser.ISNONTEXT_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ISNONTEXT(args1); + } + + @Override + public FunctionBase visitAND_fun(mathParser.AND_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_AND_N(funcs); + } + + @Override + public FunctionBase visitOR_fun(mathParser.OR_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_OR_N(funcs); + } + + @Override + public FunctionBase visitXOR_fun(mathParser.XOR_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_XOR(funcs); + } + + @Override + public FunctionBase visitNOT_fun(mathParser.NOT_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_NOT(args1); + } + + @Override + public FunctionBase visitTRUE_fun(mathParser.TRUE_funContext ctx) { + return new Function_ValueBoolean(true); + } + + @Override + public FunctionBase visitFALSE_fun(mathParser.FALSE_funContext ctx) { + return new Function_ValueBoolean(false); + } + + @Override + public FunctionBase visitE_fun(mathParser.E_funContext ctx) { + return new Function_ValueNumber(Operand.Create(MathEx.E), "E"); + } + + @Override + public FunctionBase visitPI_fun(mathParser.PI_funContext ctx) { + return new Function_ValueNumber(Operand.Create(MathEx.PI), "PI"); + } + + @Override + public FunctionBase visitABS_fun(mathParser.ABS_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ABS(args1); + } + + @Override + public FunctionBase visitQUOTIENT_fun(mathParser.QUOTIENT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_QUOTIENT(funcs); + } + + @Override + public FunctionBase visitMOD_fun(mathParser.MOD_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_MOD(funcs); + } + + @Override + public FunctionBase visitSIGN_fun(mathParser.SIGN_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_SIGN(args1); + } + + @Override + public FunctionBase visitSQRT_fun(mathParser.SQRT_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_SQRT(args1); + } + + @Override + public FunctionBase visitTRUNC_fun(mathParser.TRUNC_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_TRUNC(args1); + } + + @Override + public FunctionBase visitINT_fun(mathParser.INT_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_TRUNC(args1); + } + + @Override + public FunctionBase visitGCD_fun(mathParser.GCD_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_GCD(funcs); + } + + @Override + public FunctionBase visitLCM_fun(mathParser.LCM_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_LCM(funcs); + } + + @Override + public FunctionBase visitCOMBIN_fun(mathParser.COMBIN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_COMBIN(funcs); + } + + @Override + public FunctionBase visitPERMUT_fun(mathParser.PERMUT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_PERMUT(funcs); + } + + @Override + public FunctionBase visitPercentage_fun(mathParser.Percentage_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_Percentage(args1); + } + + @Override + public FunctionBase visitDEGREES_fun(mathParser.DEGREES_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_DEGREES(args1); + } + + @Override + public FunctionBase visitRADIANS_fun(mathParser.RADIANS_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_RADIANS(args1); + } + + @Override + public FunctionBase visitCOS_fun(mathParser.COS_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_COS(args1); + } + + @Override + public FunctionBase visitCOSH_fun(mathParser.COSH_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_COSH(args1); + } + + @Override + public FunctionBase visitSIN_fun(mathParser.SIN_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_SIN(args1); + } + + @Override + public FunctionBase visitSINH_fun(mathParser.SINH_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_SINH(args1); + } + + @Override + public FunctionBase visitTAN_fun(mathParser.TAN_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_TAN(args1); + } + + @Override + public FunctionBase visitTANH_fun(mathParser.TANH_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_TANH(args1); + } + + @Override + public FunctionBase visitCOT_fun(mathParser.COT_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_COT(args1); + } + + @Override + public FunctionBase visitCOTH_fun(mathParser.COTH_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_COTH(args1); + } + + @Override + public FunctionBase visitCSC_fun(mathParser.CSC_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_CSC(args1); + } + + @Override + public FunctionBase visitCSCH_fun(mathParser.CSCH_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_CSCH(args1); + } + + @Override + public FunctionBase visitSEC_fun(mathParser.SEC_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_SEC(args1); + } + + @Override + public FunctionBase visitSECH_fun(mathParser.SECH_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_SECH(args1); + } + + @Override + public FunctionBase visitACOS_fun(mathParser.ACOS_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ACOS(args1); + } + + @Override + public FunctionBase visitACOSH_fun(mathParser.ACOSH_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ACOSH(args1); + } + + @Override + public FunctionBase visitASIN_fun(mathParser.ASIN_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ASIN(args1); + } + + @Override + public FunctionBase visitASINH_fun(mathParser.ASINH_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ASINH(args1); + } + + @Override + public FunctionBase visitATAN_fun(mathParser.ATAN_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ATAN(args1); + } + + @Override + public FunctionBase visitATANH_fun(mathParser.ATANH_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ATANH(args1); + } + + @Override + public FunctionBase visitACOT_fun(mathParser.ACOT_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ACOT(args1); + } + + @Override + public FunctionBase visitACOTH_fun(mathParser.ACOTH_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ACOTH(args1); + } + + @Override + public FunctionBase visitATAN2_fun(mathParser.ATAN2_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ATAN2(funcs); + } + + @Override + public FunctionBase visitFIXED_fun(mathParser.FIXED_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_FIXED(funcs); + } + + @Override + public FunctionBase visitBIN2OCT_fun(mathParser.BIN2OCT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_BIN2OCT(funcs); + } + + @Override + public FunctionBase visitBIN2DEC_fun(mathParser.BIN2DEC_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_BIN2DEC(funcs); + } + + @Override + public FunctionBase visitBIN2HEX_fun(mathParser.BIN2HEX_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_BIN2HEX(funcs); + } + + @Override + public FunctionBase visitOCT2BIN_fun(mathParser.OCT2BIN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_OCT2BIN(funcs); + } + + @Override + public FunctionBase visitOCT2DEC_fun(mathParser.OCT2DEC_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_OCT2DEC(funcs); + } + + @Override + public FunctionBase visitOCT2HEX_fun(mathParser.OCT2HEX_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_OCT2HEX(funcs); + } + + @Override + public FunctionBase visitDEC2BIN_fun(mathParser.DEC2BIN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DEC2BIN(funcs); + } + + @Override + public FunctionBase visitDEC2OCT_fun(mathParser.DEC2OCT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DEC2OCT(funcs); + } + + @Override + public FunctionBase visitDEC2HEX_fun(mathParser.DEC2HEX_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DEC2HEX(funcs); + } + + @Override + public FunctionBase visitHEX2BIN_fun(mathParser.HEX2BIN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_HEX2BIN(funcs); + } + + @Override + public FunctionBase visitHEX2OCT_fun(mathParser.HEX2OCT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_HEX2OCT(funcs); + } + + @Override + public FunctionBase visitHEX2DEC_fun(mathParser.HEX2DEC_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_HEX2DEC(funcs); + } + + @Override + public FunctionBase visitROUND_fun(mathParser.ROUND_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ROUND(funcs); + } + + @Override + public FunctionBase visitROUNDDOWN_fun(mathParser.ROUNDDOWN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ROUNDDOWN(funcs); + } + + @Override + public FunctionBase visitROUNDUP_fun(mathParser.ROUNDUP_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ROUNDUP(funcs); + } + + @Override + public FunctionBase visitCEILING_fun(mathParser.CEILING_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_CEILING(funcs); + } + + @Override + public FunctionBase visitFLOOR_fun(mathParser.FLOOR_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_FLOOR(funcs); + } + + @Override + public FunctionBase visitEVEN_fun(mathParser.EVEN_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_EVEN(args1); + } + + @Override + public FunctionBase visitODD_fun(mathParser.ODD_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ODD(args1); + } + + @Override + public FunctionBase visitMROUND_fun(mathParser.MROUND_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_MROUND(funcs); + } + + @Override + public FunctionBase visitRAND_fun(mathParser.RAND_funContext ctx) { + return new Function_RAND(); + } + + @Override + public FunctionBase visitRANDBETWEEN_fun(mathParser.RANDBETWEEN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_RANDBETWEEN(funcs); + } + + @Override + public FunctionBase visitCOVARIANCES_fun(mathParser.COVARIANCES_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_COVARIANCES(funcs); + } + + @Override + public FunctionBase visitCOVAR_fun(mathParser.COVAR_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_COVAR(funcs); + } + + @Override + public FunctionBase visitFACT_fun(mathParser.FACT_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_FACT(args1); + } + + @Override + public FunctionBase visitFACTDOUBLE_fun(mathParser.FACTDOUBLE_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_FACTDOUBLE(args1); + } + + @Override + public FunctionBase visitPOWER_fun(mathParser.POWER_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_POWER(funcs); + } + + @Override + public FunctionBase visitEXP_fun(mathParser.EXP_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_EXP(args1); + } + + @Override + public FunctionBase visitLN_fun(mathParser.LN_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_LN(args1); + } + + @Override + public FunctionBase visitLOG_fun(mathParser.LOG_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_LOG(funcs); + } + + @Override + public FunctionBase visitLOG10_fun(mathParser.LOG10_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_LOG10(args1); + } + + @Override + public FunctionBase visitMULTINOMIAL_fun(mathParser.MULTINOMIAL_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_MULTINOMIAL(funcs); + } + + @Override + public FunctionBase visitPRODUCT_fun(mathParser.PRODUCT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_PRODUCT(funcs); + } + + @Override + public FunctionBase visitSQRTPI_fun(mathParser.SQRTPI_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_SQRTPI(args1); + } + + @Override + public FunctionBase visitERF_fun(mathParser.ERF_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ERF(args1); + } + + @Override + public FunctionBase visitERFC_fun(mathParser.ERFC_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ERFC(args1); + } + + @Override + public FunctionBase visitBESSELI_fun(mathParser.BESSELI_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_BESSELI(funcs); + } + + @Override + public FunctionBase visitBESSELJ_fun(mathParser.BESSELJ_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_BESSELJ(funcs); + } + + @Override + public FunctionBase visitBESSELK_fun(mathParser.BESSELK_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_BESSELK(funcs); + } + + @Override + public FunctionBase visitBESSELY_fun(mathParser.BESSELY_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_BESSELY(funcs); + } + + @Override + public FunctionBase visitDELTA_fun(mathParser.DELTA_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DELTA(funcs); + } + + @Override + public FunctionBase visitGESTEP_fun(mathParser.GESTEP_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_GESTEP(funcs); + } + + @Override + public FunctionBase visitSUMSQ_fun(mathParser.SUMSQ_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SUMSQ(funcs); + } + + @Override + public FunctionBase visitSUMPRODUCT_fun(mathParser.SUMPRODUCT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SUMPRODUCT(funcs); + } + + @Override + public FunctionBase visitSUMX2MY2_fun(mathParser.SUMX2MY2_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SUMX2MY2(funcs); + } + + @Override + public FunctionBase visitSUMX2PY2_fun(mathParser.SUMX2PY2_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SUMX2PY2(funcs); + } + + @Override + public FunctionBase visitSUMXMY2_fun(mathParser.SUMXMY2_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SUMXMY2(funcs); + } + + @Override + public FunctionBase visitARABIC_fun(mathParser.ARABIC_funContext ctx) { + FunctionBase func = visit(ctx.expr()); + return new Function_ARABIC(func); + } + + @Override + public FunctionBase visitROMAN_fun(mathParser.ROMAN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ROMAN(funcs); + } + + @Override + public FunctionBase visitSERIESSUM_fun(mathParser.SERIESSUM_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SERIESSUM(funcs); + } + + @Override + public FunctionBase visitRANK_fun(mathParser.RANK_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_RANK(funcs); + } + + @Override + public FunctionBase visitFORECAST_fun(mathParser.FORECAST_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_FORECAST(funcs); + } + + @Override + public FunctionBase visitINTERCEPT_fun(mathParser.INTERCEPT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_INTERCEPT(funcs); + } + + @Override + public FunctionBase visitSLOPE_fun(mathParser.SLOPE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SLOPE(funcs); + } + + @Override + public FunctionBase visitCORREL_fun(mathParser.CORREL_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_CORREL(funcs); + } + + @Override + public FunctionBase visitPEARSON_fun(mathParser.PEARSON_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_PEARSON(funcs); + } + + @Override + public FunctionBase visitYEARFRAC_fun(mathParser.YEARFRAC_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_YEARFRAC(funcs); + } + + @Override + public FunctionBase visitASC_fun(mathParser.ASC_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ASC(args1); + } + + @Override + public FunctionBase visitJIS_fun(mathParser.JIS_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_JIS(args1); + } + + @Override + public FunctionBase visitCHAR_fun(mathParser.CHAR_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_CHAR(args1); + } + + @Override + public FunctionBase visitCLEAN_fun(mathParser.CLEAN_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_CLEAN(args1); + } + + @Override + public FunctionBase visitCODE_fun(mathParser.CODE_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_CODE(args1); + } + + @Override + public FunctionBase visitUNICHAR_fun(mathParser.UNICHAR_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_UNICHAR(args1); + } + + @Override + public FunctionBase visitUNICODE_fun(mathParser.UNICODE_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_UNICODE(args1); + } + + @Override + public FunctionBase visitCONCATENATE_fun(mathParser.CONCATENATE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_CONCATENATE(funcs); + } + + @Override + public FunctionBase visitEXACT_fun(mathParser.EXACT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_EXACT(funcs); + } + + @Override + public FunctionBase visitFIND_fun(mathParser.FIND_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_FIND(funcs); + } + + @Override + public FunctionBase visitLEFT_fun(mathParser.LEFT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_LEFT(funcs); + } + + @Override + public FunctionBase visitLEN_fun(mathParser.LEN_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_LEN(args1); + } + + @Override + public FunctionBase visitLOWER_fun(mathParser.LOWER_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_LOWER(args1); + } + + @Override + public FunctionBase visitMID_fun(mathParser.MID_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_MID(funcs); + } + + @Override + public FunctionBase visitPROPER_fun(mathParser.PROPER_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_PROPER(args1); + } + + @Override + public FunctionBase visitREPLACE_fun(mathParser.REPLACE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_REPLACE(funcs); + } + + @Override + public FunctionBase visitREPT_fun(mathParser.REPT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_REPT(funcs); + } + + @Override + public FunctionBase visitRIGHT_fun(mathParser.RIGHT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_RIGHT(funcs); + } + + @Override + public FunctionBase visitRMB_fun(mathParser.RMB_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_RMB(args1); + } + + @Override + public FunctionBase visitSEARCH_fun(mathParser.SEARCH_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SEARCH(funcs); + } + + @Override + public FunctionBase visitSUBSTITUTE_fun(mathParser.SUBSTITUTE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SUBSTITUTE(funcs); + } + + @Override + public FunctionBase visitT_fun(mathParser.T_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_T(args1); + } + + @Override + public FunctionBase visitTEXT_fun(mathParser.TEXT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_TEXT(funcs); + } + + @Override + public FunctionBase visitTRIM_fun(mathParser.TRIM_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_TRIM(args1); + } + + @Override + public FunctionBase visitUPPER_fun(mathParser.UPPER_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_UPPER(args1); + } + + @Override + public FunctionBase visitVALUE_fun(mathParser.VALUE_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_VALUE(args1); + } + + @Override + public FunctionBase visitDATEVALUE_fun(mathParser.DATEVALUE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DATEVALUE(funcs); + } + + @Override + public FunctionBase visitTIMESTAMP_fun(mathParser.TIMESTAMP_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_TIMESTAMP(funcs); + } + + @Override + public FunctionBase visitTIMEVALUE_fun(mathParser.TIMEVALUE_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_TIMEVALUE(args1); + } + + @Override + public FunctionBase visitDATE_fun(mathParser.DATE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DATE(funcs); + } + + @Override + public FunctionBase visitTIME_fun(mathParser.TIME_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_TIME(funcs); + } + + @Override + public FunctionBase visitNOW_fun(mathParser.NOW_funContext ctx) { + return new Function_NOW(); + } + + @Override + public FunctionBase visitTODAY_fun(mathParser.TODAY_funContext ctx) { + return new Function_TODAY(); + } + + @Override + public FunctionBase visitYEAR_fun(mathParser.YEAR_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_YEAR(args1); + } + + @Override + public FunctionBase visitMONTH_fun(mathParser.MONTH_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_MONTH(args1); + } + + @Override + public FunctionBase visitDAY_fun(mathParser.DAY_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_DAY(args1); + } + + @Override + public FunctionBase visitHOUR_fun(mathParser.HOUR_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_HOUR(args1); + } + + @Override + public FunctionBase visitMINUTE_fun(mathParser.MINUTE_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_MINUTE(args1); + } + + @Override + public FunctionBase visitSECOND_fun(mathParser.SECOND_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_SECOND(args1); + } + + @Override + public FunctionBase visitWEEKDAY_fun(mathParser.WEEKDAY_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_WEEKDAY(funcs); + } + + @Override + public FunctionBase visitDATEDIF_fun(mathParser.DATEDIF_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DATEDIF(funcs); + } + + @Override + public FunctionBase visitDAYS_fun(mathParser.DAYS_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DAYS(funcs); + } + + @Override + public FunctionBase visitDAYS360_fun(mathParser.DAYS360_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DAYS360(funcs); + } + + @Override + public FunctionBase visitEDATE_fun(mathParser.EDATE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_EDATE(funcs); + } + + @Override + public FunctionBase visitEOMONTH_fun(mathParser.EOMONTH_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_EOMONTH(funcs); + } + + @Override + public FunctionBase visitNETWORKDAYS_fun(mathParser.NETWORKDAYS_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_NETWORKDAYS(funcs); + } + + @Override + public FunctionBase visitWORKDAY_fun(mathParser.WORKDAY_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_WORKDAY(funcs); + } + + @Override + public FunctionBase visitWEEKNUM_fun(mathParser.WEEKNUM_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_WEEKNUM(funcs); + } + + @Override + public FunctionBase visitADDMONTHS_fun(mathParser.ADDMONTHS_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ADDMONTHS(funcs); + } + + @Override + public FunctionBase visitADDYEARS_fun(mathParser.ADDYEARS_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ADDYEARS(funcs); + } + + @Override + public FunctionBase visitADDSECONDS_fun(mathParser.ADDSECONDS_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ADDSECONDS(funcs); + } + + @Override + public FunctionBase visitADDMINUTES_fun(mathParser.ADDMINUTES_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ADDMINUTES(funcs); + } + + @Override + public FunctionBase visitADDDAYS_fun(mathParser.ADDDAYS_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ADDDAYS(funcs); + } + + @Override + public FunctionBase visitADDHOURS_fun(mathParser.ADDHOURS_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ADDHOURS(funcs); + } + + @Override + public FunctionBase visitMAX_fun(mathParser.MAX_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_MAX(funcs); + } + + @Override + public FunctionBase visitMEDIAN_fun(mathParser.MEDIAN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_MEDIAN(funcs); + } + + @Override + public FunctionBase visitMIN_fun(mathParser.MIN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_MIN(funcs); + } + + @Override + public FunctionBase visitQUARTILE_fun(mathParser.QUARTILE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_QUARTILE(funcs); + } + + @Override + public FunctionBase visitMODE_fun(mathParser.MODE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_MODE(funcs); + } + + @Override + public FunctionBase visitLARGE_fun(mathParser.LARGE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_LARGE(funcs); + } + + @Override + public FunctionBase visitSMALL_fun(mathParser.SMALL_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SMALL(funcs); + } + + @Override + public FunctionBase visitPERCENTILE_fun(mathParser.PERCENTILE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_PERCENTILE(funcs); + } + + @Override + public FunctionBase visitPERCENTRANK_fun(mathParser.PERCENTRANK_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_PERCENTRANK(funcs); + } + + @Override + public FunctionBase visitAVERAGE_fun(mathParser.AVERAGE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_AVERAGE(funcs); + } + + @Override + public FunctionBase visitAVERAGEIF_fun(mathParser.AVERAGEIF_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_AVERAGEIF(funcs); + } + + @Override + public FunctionBase visitGEOMEAN_fun(mathParser.GEOMEAN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_GEOMEAN(funcs); + } + + @Override + public FunctionBase visitHARMEAN_fun(mathParser.HARMEAN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_HARMEAN(funcs); + } + + @Override + public FunctionBase visitCOUNT_fun(mathParser.COUNT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_COUNT(funcs); + } + + @Override + public FunctionBase visitCOUNTIF_fun(mathParser.COUNTIF_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_COUNTIF(funcs); + } + + @Override + public FunctionBase visitSUM_fun(mathParser.SUM_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SUM(funcs); + } + + @Override + public FunctionBase visitSUMIF_fun(mathParser.SUMIF_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SUMIF(funcs); + } + + @Override + public FunctionBase visitAVEDEV_fun(mathParser.AVEDEV_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_AVEDEV(funcs); + } + + @Override + public FunctionBase visitSTDEV_fun(mathParser.STDEV_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_STDEV(funcs); + } + + @Override + public FunctionBase visitSTDEVP_fun(mathParser.STDEVP_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_STDEVP(funcs); + } + + @Override + public FunctionBase visitDEVSQ_fun(mathParser.DEVSQ_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DEVSQ(funcs); + } + + @Override + public FunctionBase visitVAR_fun(mathParser.VAR_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_VAR(funcs); + } + + @Override + public FunctionBase visitVARP_fun(mathParser.VARP_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_VARP(funcs); + } + + @Override + public FunctionBase visitNORMDIST_fun(mathParser.NORMDIST_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_NORMDIST(funcs); + } + + @Override + public FunctionBase visitNORMINV_fun(mathParser.NORMINV_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_NORMINV(funcs); + } + + @Override + public FunctionBase visitNORMSDIST_fun(mathParser.NORMSDIST_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_NORMSDIST(args1); + } + + @Override + public FunctionBase visitNORMSINV_fun(mathParser.NORMSINV_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_NORMSINV(args1); + } + + @Override + public FunctionBase visitBETADIST_fun(mathParser.BETADIST_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_BETADIST(funcs); + } + + @Override + public FunctionBase visitBETAINV_fun(mathParser.BETAINV_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_BETAINV(funcs); + } + + @Override + public FunctionBase visitBINOMDIST_fun(mathParser.BINOMDIST_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_BINOMDIST(funcs); + } + + @Override + public FunctionBase visitEXPONDIST_fun(mathParser.EXPONDIST_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_EXPONDIST(funcs); + } + + @Override + public FunctionBase visitFDIST_fun(mathParser.FDIST_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_FDIST(funcs); + } + + @Override + public FunctionBase visitFINV_fun(mathParser.FINV_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_FINV(funcs); + } + + @Override + public FunctionBase visitFISHER_fun(mathParser.FISHER_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_FISHER(args1); + } + + @Override + public FunctionBase visitFISHERINV_fun(mathParser.FISHERINV_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_FISHERINV(args1); + } + + @Override + public FunctionBase visitGAMMADIST_fun(mathParser.GAMMADIST_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_GAMMADIST(funcs); + } + + @Override + public FunctionBase visitGAMMAINV_fun(mathParser.GAMMAINV_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_GAMMAINV(funcs); + } + + @Override + public FunctionBase visitGAMMALN_fun(mathParser.GAMMALN_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_GAMMALN(args1); + } + + @Override + public FunctionBase visitHYPGEOMDIST_fun(mathParser.HYPGEOMDIST_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_HYPGEOMDIST(funcs); + } + + @Override + public FunctionBase visitLOGINV_fun(mathParser.LOGINV_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_LOGINV(funcs); + } + + @Override + public FunctionBase visitLOGNORMDIST_fun(mathParser.LOGNORMDIST_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_LOGNORMDIST(funcs); + } + + @Override + public FunctionBase visitNEGBINOMDIST_fun(mathParser.NEGBINOMDIST_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_NEGBINOMDIST(funcs); + } + + @Override + public FunctionBase visitPOISSON_fun(mathParser.POISSON_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_POISSON(funcs); + } + + @Override + public FunctionBase visitTDIST_fun(mathParser.TDIST_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_TDIST(funcs); + } + + @Override + public FunctionBase visitTINV_fun(mathParser.TINV_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_TINV(funcs); + } + + @Override + public FunctionBase visitWEIBULL_fun(mathParser.WEIBULL_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_WEIBULL(funcs); + } + + @Override + public FunctionBase visitPMT_fun(mathParser.PMT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_PMT(funcs); + } + + @Override + public FunctionBase visitPPMT_fun(mathParser.PPMT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_PPMT(funcs); + } + + @Override + public FunctionBase visitIPMT_fun(mathParser.IPMT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_IPMT(funcs); + } + + @Override + public FunctionBase visitPV_fun(mathParser.PV_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_PV(funcs); + } + + @Override + public FunctionBase visitFV_fun(mathParser.FV_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_FV(funcs); + } + + @Override + public FunctionBase visitNPER_fun(mathParser.NPER_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_NPER(funcs); + } + + @Override + public FunctionBase visitRATE_fun(mathParser.RATE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_RATE(funcs); + } + + @Override + public FunctionBase visitNPV_fun(mathParser.NPV_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_NPV(funcs); + } + + @Override + public FunctionBase visitXNPV_fun(mathParser.XNPV_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_XNPV(funcs); + } + + @Override + public FunctionBase visitIRR_fun(mathParser.IRR_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_IRR(funcs); + } + + @Override + public FunctionBase visitMIRR_fun(mathParser.MIRR_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_MIRR(funcs); + } + + @Override + public FunctionBase visitXIRR_fun(mathParser.XIRR_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_XIRR(funcs); + } + + @Override + public FunctionBase visitSLN_fun(mathParser.SLN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SLN(funcs); + } + + @Override + public FunctionBase visitDB_fun(mathParser.DB_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DB(funcs); + } + + @Override + public FunctionBase visitDDB_fun(mathParser.DDB_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DDB(funcs); + } + + @Override + public FunctionBase visitSYD_fun(mathParser.SYD_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SYD(funcs); + } + + @Override + public FunctionBase visitURLENCODE_fun(mathParser.URLENCODE_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_URLENCODE(args1); + } + + @Override + public FunctionBase visitURLDECODE_fun(mathParser.URLDECODE_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_URLDECODE(args1); + } + + @Override + public FunctionBase visitHTMLENCODE_fun(mathParser.HTMLENCODE_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_HTMLENCODE(args1); + } + + @Override + public FunctionBase visitHTMLDECODE_fun(mathParser.HTMLDECODE_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_HTMLDECODE(args1); + } + + @Override + public FunctionBase visitBASE64TOTEXT_fun(mathParser.BASE64TOTEXT_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_BASE64TOTEXT(args1); + } + + @Override + public FunctionBase visitBASE64URLTOTEXT_fun(mathParser.BASE64URLTOTEXT_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_BASE64URLTOTEXT(args1); + } + + @Override + public FunctionBase visitTEXTTOBASE64_fun(mathParser.TEXTTOBASE64_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_TEXTTOBASE64(args1); + } + + @Override + public FunctionBase visitTEXTTOBASE64URL_fun(mathParser.TEXTTOBASE64URL_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_TEXTTOBASE64URL(args1); + } + + @Override + public FunctionBase visitREGEX_fun(mathParser.REGEX_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_REGEX(funcs); + } + + @Override + public FunctionBase visitREGEXREPLACE_fun(mathParser.REGEXREPLACE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_REGEXREPLACE(funcs); + } + + @Override + public FunctionBase visitISREGEX_fun(mathParser.ISREGEX_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ISREGEX(funcs); + } + + @Override + public FunctionBase visitGUID_fun(mathParser.GUID_funContext ctx) { + return new Function_GUID(); + } + + @Override + public FunctionBase visitMD5_fun(mathParser.MD5_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_MD5(args1); + } + + @Override + public FunctionBase visitSHA1_fun(mathParser.SHA1_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_SHA1(args1); + } + + @Override + public FunctionBase visitSHA256_fun(mathParser.SHA256_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_SHA256(args1); + } + + @Override + public FunctionBase visitSHA512_fun(mathParser.SHA512_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_SHA512(args1); + } + + @Override + public FunctionBase visitHMACMD5_fun(mathParser.HMACMD5_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_HMACMD5(funcs); + } + + @Override + public FunctionBase visitHMACSHA1_fun(mathParser.HMACSHA1_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_HMACSHA1(funcs); + } + + @Override + public FunctionBase visitHMACSHA256_fun(mathParser.HMACSHA256_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_HMACSHA256(funcs); + } + + @Override + public FunctionBase visitHMACSHA512_fun(mathParser.HMACSHA512_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_HMACSHA512(funcs); + } + + @Override + public FunctionBase visitTRIMSTART_fun(mathParser.TRIMSTART_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_TRIMSTART(funcs); + } + + @Override + public FunctionBase visitTRIMEND_fun(mathParser.TRIMEND_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_TRIMEND(funcs); + } + + @Override + public FunctionBase visitINDEXOF_fun(mathParser.INDEXOF_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_INDEXOF(funcs); + } + + @Override + public FunctionBase visitLASTINDEXOF_fun(mathParser.LASTINDEXOF_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_LASTINDEXOF(funcs); + } + + @Override + public FunctionBase visitSPLIT_fun(mathParser.SPLIT_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SPLIT(funcs); + } + + @Override + public FunctionBase visitJOIN_fun(mathParser.JOIN_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_JOIN(funcs); + } + + @Override + public FunctionBase visitSUBSTRING_fun(mathParser.SUBSTRING_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_SUBSTRING(funcs); + } + + @Override + public FunctionBase visitSTARTSWITH_fun(mathParser.STARTSWITH_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_STARTSWITH(funcs); + } + + @Override + public FunctionBase visitENDSWITH_fun(mathParser.ENDSWITH_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_ENDSWITH(funcs); + } + + @Override + public FunctionBase visitISNULLOREMPTY_fun(mathParser.ISNULLOREMPTY_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ISNULLOREMPTY(args1); + } + + @Override + public FunctionBase visitISNULLORWHITESPACE_fun(mathParser.ISNULLORWHITESPACE_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ISNULLORWHITESPACE(args1); + } + + @Override + public FunctionBase visitREMOVESTART_fun(mathParser.REMOVESTART_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_REMOVESTART(funcs); + } + + @Override + public FunctionBase visitREMOVEEND_fun(mathParser.REMOVEEND_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_REMOVEEND(funcs); + } + + @Override + public FunctionBase visitJSON_fun(mathParser.JSON_funContext ctx) { + FunctionBase args1 = ctx.expr().accept(this); + return new Function_JSON(args1); + } + + @Override + public FunctionBase visitLOOKFLOOR_fun(mathParser.LOOKFLOOR_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_LOOKFLOOR(funcs); + } + + @Override + public FunctionBase visitLOOKCEILING_fun(mathParser.LOOKCEILING_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_LOOKCEILING(funcs); + } + + @Override + public FunctionBase visitArray_fun(mathParser.Array_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_Array(funcs); + } + + @Override + public FunctionBase visitBracket_fun(mathParser.Bracket_funContext ctx) { + return ctx.expr().accept(this); + } + + @Override + public FunctionBase visitNUM_fun(mathParser.NUM_funContext ctx) { + String text = ctx.num().getText(); + BigDecimal d = new BigDecimal(text); + if (ctx.unit == null) { + return new Function_ValueNumber(Operand.Create(d), text); + } + String unit = ctx.unit.getText(); + return new Function_NUMBER(d, unit); + } + + @Override + public FunctionBase visitNum(mathParser.NumContext ctx) { + String text = ctx.getText(); + BigDecimal d = new BigDecimal(text); + return new Function_ValueNumber(Operand.Create(d), text); + } + + @Override + public FunctionBase visitSTRING_fun(mathParser.STRING_funContext ctx) { + String opd = ctx.getText(); + StringBuilder sb = new StringBuilder(opd.length()); + int index = 1; + while (index < opd.length() - 1) { + char c = opd.charAt(index++); + if (c == '\\') { + char c2 = opd.charAt(index++); + if (c2 == 'n') sb.append('\n'); + else if (c2 == 'r') sb.append('\r'); + else if (c2 == 't') sb.append('\t'); + else if (c2 == '0') sb.append('\0'); + else if (c2 == 'v') sb.append('\u000B'); + else if (c2 == 'a') sb.append('\u0007'); + else if (c2 == 'b') sb.append('\b'); + else if (c2 == 'f') sb.append('\f'); + else sb.append(c2); + } else { + sb.append(c); + } + } + return new Function_ValueText(Operand.Create(sb.toString())); + } + + @Override + public FunctionBase visitNULL_fun(mathParser.NULL_funContext ctx) { + return new Function_NULL(); + } + + @Override + public FunctionBase visitPARAMETER_fun(mathParser.PARAMETER_funContext ctx) { + TerminalNode node = ctx.PARAMETER(); + return new Function_PARAMETER(node.getText()); + } + + @Override + public FunctionBase visitParameter2(mathParser.Parameter2Context ctx) { + return new Function_ValueText(Operand.Create(ctx.getChild(0).getText())); + } + + @Override + public FunctionBase visitGetJsonValue_fun(mathParser.GetJsonValue_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + if (ctx.PARAMETER() != null) { + FunctionBase op = new Function_PARAMETER(ctx.PARAMETER().getText()); + return new Function_GetJsonValue(funcs[0], op); + } + if (ctx.parameter2() != null) { + FunctionBase op = ctx.parameter2().accept(this); + return new Function_GetJsonValue(funcs[0], op); + } + return new Function_GetJsonValue(funcs[0], funcs[1]); + } + + @Override + public FunctionBase visitDiyFunction_fun(mathParser.DiyFunction_funContext ctx) { + String funName = ctx.PARAMETER().getText(); + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_DiyFunction(funName, funcs); + } + + @Override + public FunctionBase visitPARAM_fun(mathParser.PARAM_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_PARAM(funcs); + } + + @Override + public FunctionBase visitHAS_fun(mathParser.HAS_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_HAS(funcs); + } + + @Override + public FunctionBase visitHASVALUE_fun(mathParser.HASVALUE_funContext ctx) { + FunctionBase[] funcs = VisitExprs(ctx.expr()); + return new Function_HASVALUE(funcs); + } + + @Override + public FunctionBase visitArrayJson_fun(mathParser.ArrayJson_funContext ctx) { + mathParser.ArrayJsonContext[] exprs = ctx.arrayJson(); + FunctionBase[] args = new FunctionBase[exprs.length]; + for (int i = 0; i < exprs.length; i++) { + args[i] = exprs[i].accept(this); + } + return new Function_ArrayJson(args); + } + + @Override + public FunctionBase visitArrayJson(mathParser.ArrayJsonContext ctx) { + String keyName = null; + if (ctx.key != null) { + keyName = ctx.key.getText().trim(); + if (keyName.length() >= 2) { + char firstChar = keyName.charAt(0); + if ((firstChar == '"' || firstChar == '\'') && keyName.charAt(keyName.length() - 1) == firstChar) { + keyName = keyName.substring(1, keyName.length() - 1); + } + } + } else if (ctx.parameter2() != null) { + keyName = ctx.parameter2().getText(); + } + FunctionBase f = ctx.expr().accept(this); + return new Function_ArrayJsonItem(keyName, f); + } + + @Override + public FunctionBase visitERROR_fun(mathParser.ERROR_funContext ctx) { + if (ctx.expr() == null) { + return new Function_ERROR(null); + } + FunctionBase args1 = ctx.expr().accept(this); + return new Function_ERROR(args1); + } + + @Override + public FunctionBase visitVersion_fun(mathParser.Version_funContext ctx) { + return new Function_ValueText(Operand.Version, "ALGORITHMVERSION"); + } +} diff --git a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java index bfd15c10d..8eaa62bc3 100644 --- a/java/src/main/java/toolgood/algorithm/litJson/JsonData.java +++ b/java/src/main/java/toolgood/algorithm/litJson/JsonData.java @@ -8,7 +8,7 @@ import java.util.Map; public final class JsonData implements Iterable { - private List inst_array; + public List inst_array; private boolean inst_boolean; private BigDecimal inst_double; public Map inst_object; @@ -121,7 +121,6 @@ void SetJsonType(JsonType type) { public Iterator iterator() { return EnsureList().iterator(); } - public boolean BooleanValue() { return inst_boolean; } public BigDecimal NumberValue() { return inst_double; } public String StringValue() { return inst_string; } From d1d19c53a685dad5b473890ff0d3608d99ddd35f Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 14:15:20 +0800 Subject: [PATCH 72/98] fix --- .../functions/mathsum2/Function_BESSELI.java | 47 ++++-- .../functions/mathsum2/Function_BESSELJ.java | 70 +++++--- .../functions/mathsum2/Function_BESSELK.java | 95 ++++++++--- .../functions/mathsum2/Function_BESSELY.java | 154 +++++++++++++----- .../visitors/MathFunctionVisitor.java | 8 +- 5 files changed, 275 insertions(+), 99 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java index aabdf13aa..75ab2fb87 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELI.java @@ -84,13 +84,26 @@ private static BigDecimal BesselI0(BigDecimal x) { if (ax.compareTo(new BigDecimal("3.75")) < 0) { BigDecimal y1 = x.divide(new BigDecimal("3.75"), java.math.MathContext.DECIMAL128); y1 = y1.multiply(y1); - return BigDecimal.ONE.add(y1.multiply(new BigDecimal("3.515622965380465").add(y1.multiply(new BigDecimal("3.089942465562116").add(y1.multiply(new BigDecimal("1.206749160761352") - .add(y1.multiply(new BigDecimal("0.265973256598487").add(y1.multiply(new BigDecimal("0.036076845538912").add(y1.multiply(new BigDecimal("0.004581327358717")))))))))))); + BigDecimal t1 = y1.multiply(new BigDecimal("0.004581327358717")); + BigDecimal t2 = y1.multiply(new BigDecimal("0.036076845538912").add(t1)); + BigDecimal t3 = y1.multiply(new BigDecimal("0.265973256598487").add(t2)); + BigDecimal t4 = y1.multiply(new BigDecimal("1.206749160761352").add(t3)); + BigDecimal t5 = y1.multiply(new BigDecimal("3.089942465562116").add(t4)); + return BigDecimal.ONE.add(y1.multiply(new BigDecimal("3.515622965380465").add(t5))); } BigDecimal y2 = new BigDecimal("3.75").divide(ax, java.math.MathContext.DECIMAL128); - return MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128).multiply(new BigDecimal("0.398942280401433").add(y2.multiply(new BigDecimal("0.013285921344730") - .add(y2.multiply(new BigDecimal("0.002253193626842").add(y2.multiply(new BigDecimal("-0.001575649875251").add(y2.multiply(new BigDecimal("0.009162816703917") - .add(y2.multiply(new BigDecimal("-0.020577062932649").add(y2.multiply(new BigDecimal("0.026355373177924").add(y2.multiply(new BigDecimal("-0.016476329612910").add(y2.multiply(new BigDecimal("0.003923769605236")))))))))))))))); + + BigDecimal a1 = y2.multiply(new BigDecimal("0.003923769605236")); + BigDecimal a2 = y2.multiply(new BigDecimal("-0.016476329612910").add(a1)); + BigDecimal a3 = y2.multiply(new BigDecimal("0.026355373177924").add(a2)); + BigDecimal a4 = y2.multiply(new BigDecimal("-0.020577062932649").add(a3)); + BigDecimal a5 = y2.multiply(new BigDecimal("0.009162816703917").add(a4)); + BigDecimal a6 = y2.multiply(new BigDecimal("-0.001575649875251").add(a5)); + BigDecimal a7 = y2.multiply(new BigDecimal("0.002253193626842").add(a6)); + BigDecimal a8 = y2.multiply(new BigDecimal("0.013285921344730").add(a7)); + BigDecimal a9 = new BigDecimal("0.398942280401433").add(a8); + + return MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128).multiply(a9); } private static BigDecimal BesselI1(BigDecimal x) { @@ -98,13 +111,27 @@ private static BigDecimal BesselI1(BigDecimal x) { if (ax.compareTo(new BigDecimal("3.75")) < 0) { BigDecimal y1 = x.divide(new BigDecimal("3.75"), java.math.MathContext.DECIMAL128); y1 = y1.multiply(y1); - return x.multiply(new BigDecimal("0.5").add(y1.multiply(new BigDecimal("0.878905941521392").add(y1.multiply(new BigDecimal("0.514988692842374").add(y1.multiply(new BigDecimal("0.150849342225664") - .add(y1.multiply(new BigDecimal("0.026587328231117").add(y1.multiply(new BigDecimal("0.003015319414231").add(y1.multiply(new BigDecimal("0.000324111013968")))))))))))); + BigDecimal t1 = y1.multiply(new BigDecimal("0.000324111013968")); + BigDecimal t2 = y1.multiply(new BigDecimal("0.003015319414231").add(t1)); + BigDecimal t3 = y1.multiply(new BigDecimal("0.026587328231117").add(t2)); + BigDecimal t4 = y1.multiply(new BigDecimal("0.150849342225664").add(t3)); + BigDecimal t5 = y1.multiply(new BigDecimal("0.514988692842374").add(t4)); + BigDecimal t6 = y1.multiply(new BigDecimal("0.878905941521392").add(t5)); + return x.multiply(new BigDecimal("0.5").add(t6)); } BigDecimal y2 = new BigDecimal("3.75").divide(ax, java.math.MathContext.DECIMAL128); - BigDecimal ans = MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128).multiply(new BigDecimal("0.398942280401433").add(y2.multiply(new BigDecimal("-0.039880242337502") - .add(y2.multiply(new BigDecimal("-0.003620182649157").add(y2.multiply(new BigDecimal("0.001638105403528").add(y2.multiply(new BigDecimal("-0.010315550635288") - .add(y2.multiply(new BigDecimal("0.022829679456897").add(y2.multiply(new BigDecimal("-0.028953129286367").add(y2.multiply(new BigDecimal("0.017876545768998").subtract(y2.multiply(new BigDecimal("0.004200596567986")))))))))))))))); + + BigDecimal a1 = y2.multiply(new BigDecimal("0.004200596567986")); + BigDecimal a2 = y2.multiply(new BigDecimal("0.017876545768998").subtract(a1)); + BigDecimal a3 = y2.multiply(new BigDecimal("-0.028953129286367").add(a2)); + BigDecimal a4 = y2.multiply(new BigDecimal("0.022829679456897").add(a3)); + BigDecimal a5 = y2.multiply(new BigDecimal("-0.010315550635288").add(a4)); + BigDecimal a6 = y2.multiply(new BigDecimal("0.001638105403528").add(a5)); + BigDecimal a7 = y2.multiply(new BigDecimal("-0.003620182649157").add(a6)); + BigDecimal a8 = y2.multiply(new BigDecimal("-0.039880242337502").add(a7)); + BigDecimal a9 = new BigDecimal("0.398942280401433").add(a8); + + BigDecimal ans = MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128).multiply(a9); return (x.compareTo(BigDecimal.ZERO) < 0) ? ans.negate() : ans; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java index fa568cb0b..e4cbda95a 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELJ.java @@ -93,42 +93,72 @@ private static BigDecimal BesselJ0(BigDecimal x) { BigDecimal ax = x.abs(); if (ax.compareTo(new BigDecimal("8")) < 0) { BigDecimal y1 = x.multiply(x); - BigDecimal ans1 = new BigDecimal("57568490574").add(y1.multiply(new BigDecimal("-13362590354").add(y1.multiply(new BigDecimal("651619640.7") - .add(y1.multiply(new BigDecimal("-11214424.18").add(y1.multiply(new BigDecimal("77392.33017").add(y1.multiply(new BigDecimal("-184.9052456"))))))))))); - BigDecimal ans2 = new BigDecimal("57568490411").add(y1.multiply(new BigDecimal("1029532985").add(y1.multiply(new BigDecimal("9494680.718") - .add(y1.multiply(new BigDecimal("59272.64853").add(y1.multiply(new BigDecimal("267.8532712").add(y1.multiply(BigDecimal.ONE)))))))))); + BigDecimal t1 = y1.multiply(new BigDecimal("-184.9052456")); + BigDecimal t2 = y1.multiply(new BigDecimal("77392.33017").add(t1)); + BigDecimal t3 = y1.multiply(new BigDecimal("-11214424.18").add(t2)); + BigDecimal t4 = y1.multiply(new BigDecimal("651619640.7").add(t3)); + BigDecimal ans1 = new BigDecimal("57568490574").add(y1.multiply(new BigDecimal("-13362590354").add(t4))); + + BigDecimal s1 = y1.multiply(BigDecimal.ONE); + BigDecimal s2 = y1.multiply(new BigDecimal("267.8532712").add(s1)); + BigDecimal s3 = y1.multiply(new BigDecimal("59272.64853").add(s2)); + BigDecimal s4 = y1.multiply(new BigDecimal("9494680.718").add(s3)); + BigDecimal ans2 = new BigDecimal("57568490411").add(y1.multiply(new BigDecimal("1029532985").add(s4))); + return ans1.divide(ans2, java.math.MathContext.DECIMAL128); } BigDecimal z = new BigDecimal("8").divide(ax, java.math.MathContext.DECIMAL128); BigDecimal y2 = z.multiply(z); BigDecimal xx = ax.subtract(new BigDecimal("0.78539816339744830962")); - BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("-0.001098628627").add(y2.multiply(new BigDecimal("0.00002734510407") - .add(y2.multiply(new BigDecimal("-0.000002073370639").add(y2.multiply(new BigDecimal("0.0000002093887211")))))))); - BigDecimal ans4 = new BigDecimal("-0.01562499995").add(y2.multiply(new BigDecimal("0.0001430488765") - .add(y2.multiply(new BigDecimal("-0.000006911147651").add(y2.multiply(new BigDecimal("0.0000007621095161") - .subtract(y2.multiply(new BigDecimal("0.0000000934935152")))))))); - return MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(ax, java.math.MathContext.DECIMAL128)).multiply(MathEx.Cos(xx).multiply(ans3).subtract(z.multiply(MathEx.Sin(xx)).multiply(ans4))); + + BigDecimal a1 = y2.multiply(new BigDecimal("0.0000002093887211")); + BigDecimal a2 = y2.multiply(new BigDecimal("-0.000002073370639").add(a1)); + BigDecimal a3 = y2.multiply(new BigDecimal("0.00002734510407").add(a2)); + BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("-0.001098628627").add(a3))); + + BigDecimal b1 = y2.multiply(new BigDecimal("0.0000000934935152")); + BigDecimal b2 = y2.multiply(new BigDecimal("0.0000007621095161").subtract(b1)); + BigDecimal b3 = y2.multiply(new BigDecimal("-0.000006911147651").add(b2)); + BigDecimal ans4 = new BigDecimal("-0.01562499995").add(y2.multiply(new BigDecimal("0.0001430488765").add(b3))); + + return MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(ax, java.math.MathContext.DECIMAL128)) + .multiply(MathEx.Cos(xx).multiply(ans3).subtract(z.multiply(MathEx.Sin(xx)).multiply(ans4))); } private static BigDecimal BesselJ1(BigDecimal x) { BigDecimal ax = x.abs(); if (ax.compareTo(new BigDecimal("8")) < 0) { BigDecimal y1 = x.multiply(x); - BigDecimal ans1 = x.multiply(new BigDecimal("72362614232").add(y1.multiply(new BigDecimal("-7895059235").add(y1.multiply(new BigDecimal("242396853.1") - .add(y1.multiply(new BigDecimal("-2972611.439").add(y1.multiply(new BigDecimal("15704.48260").add(y1.multiply(new BigDecimal("-30.16036606"))))))))))); - BigDecimal ans2 = new BigDecimal("144725228442").add(y1.multiply(new BigDecimal("2300535178").add(y1.multiply(new BigDecimal("18583304.74") - .add(y1.multiply(new BigDecimal("99447.43394").add(y1.multiply(new BigDecimal("376.9991397").add(y1.multiply(BigDecimal.ONE)))))))))); + BigDecimal t1 = y1.multiply(new BigDecimal("-30.16036606")); + BigDecimal t2 = y1.multiply(new BigDecimal("15704.48260").add(t1)); + BigDecimal t3 = y1.multiply(new BigDecimal("-2972611.439").add(t2)); + BigDecimal t4 = y1.multiply(new BigDecimal("242396853.1").add(t3)); + BigDecimal ans1 = x.multiply(new BigDecimal("72362614232").add(y1.multiply(new BigDecimal("-7895059235").add(t4)))); + + BigDecimal s1 = y1.multiply(BigDecimal.ONE); + BigDecimal s2 = y1.multiply(new BigDecimal("376.9991397").add(s1)); + BigDecimal s3 = y1.multiply(new BigDecimal("99447.43394").add(s2)); + BigDecimal s4 = y1.multiply(new BigDecimal("18583304.74").add(s3)); + BigDecimal ans2 = new BigDecimal("144725228442").add(y1.multiply(new BigDecimal("2300535178").add(s4))); + return ans1.divide(ans2, java.math.MathContext.DECIMAL128); } BigDecimal z = new BigDecimal("8").divide(ax, java.math.MathContext.DECIMAL128); BigDecimal y2 = z.multiply(z); BigDecimal xx = ax.subtract(new BigDecimal("2.35619449019234492885")); - BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("0.00183105").add(y2.multiply(new BigDecimal("-0.00003516396496") - .add(y2.multiply(new BigDecimal("0.000002457520174").add(y2.multiply(new BigDecimal("-0.000000240337019")))))))); - BigDecimal ans4 = new BigDecimal("0.04687499995").add(y2.multiply(new BigDecimal("-0.0002002690873") - .add(y2.multiply(new BigDecimal("0.000008449199096").add(y2.multiply(new BigDecimal("-0.00000088228987") - .add(y2.multiply(new BigDecimal("0.000000105787412")))))))); - BigDecimal ans = MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(ax, java.math.MathContext.DECIMAL128)).multiply(MathEx.Cos(xx).multiply(ans3).subtract(z.multiply(MathEx.Sin(xx)).multiply(ans4))); + + BigDecimal a1 = y2.multiply(new BigDecimal("-0.000000240337019")); + BigDecimal a2 = y2.multiply(new BigDecimal("0.000002457520174").add(a1)); + BigDecimal a3 = y2.multiply(new BigDecimal("-0.00003516396496").add(a2)); + BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("0.00183105").add(a3))); + + BigDecimal b1 = y2.multiply(new BigDecimal("0.000000105787412")); + BigDecimal b2 = y2.multiply(new BigDecimal("-0.00000088228987").add(b1)); + BigDecimal b3 = y2.multiply(new BigDecimal("0.000008449199096").add(b2)); + BigDecimal ans4 = new BigDecimal("0.04687499995").add(y2.multiply(new BigDecimal("-0.0002002690873").add(b3))); + + BigDecimal ans = MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(ax, java.math.MathContext.DECIMAL128)) + .multiply(MathEx.Cos(xx).multiply(ans3).subtract(z.multiply(MathEx.Sin(xx)).multiply(ans4))); return (x.compareTo(BigDecimal.ZERO) < 0) ? ans.negate() : ans; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java index 5d4f1be13..2963db59c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELK.java @@ -69,30 +69,54 @@ private static BigDecimal BesselK(int n, BigDecimal x) { private static BigDecimal BesselK0(BigDecimal x) { if (x.compareTo(new BigDecimal("2")) <= 0) { BigDecimal y1 = x.multiply(x).divide(new BigDecimal("4"), java.math.MathContext.DECIMAL128); - BigDecimal ans = MathEx.Log(x.divide(new BigDecimal("2"), java.math.MathContext.DECIMAL128)).negate().multiply(BesselI0(x)).add(new BigDecimal("-0.57721566490153286061") - .add(y1.multiply(new BigDecimal("0.42278433509846713939").add(y1.multiply(new BigDecimal("0.230697567077446").add(y1.multiply(new BigDecimal("0.034885890266341") - .add(y1.multiply(new BigDecimal("0.002626979711643").add(y1.multiply(new BigDecimal("0.000107502176243").add(y1.multiply(new BigDecimal("0.000007400456812")))))))))))); + BigDecimal t1 = y1.multiply(new BigDecimal("0.000007400456812")); + BigDecimal t2 = y1.multiply(new BigDecimal("0.000107502176243").add(t1)); + BigDecimal t3 = y1.multiply(new BigDecimal("0.002626979711643").add(t2)); + BigDecimal t4 = y1.multiply(new BigDecimal("0.034885890266341").add(t3)); + BigDecimal t5 = y1.multiply(new BigDecimal("0.230697567077446").add(t4)); + BigDecimal t6 = y1.multiply(new BigDecimal("0.42278433509846713939").add(t5)); + BigDecimal t7 = new BigDecimal("-0.57721566490153286061").add(t6); + BigDecimal ans = MathEx.Log(x.divide(new BigDecimal("2"), java.math.MathContext.DECIMAL128)).negate().multiply(BesselI0(x)).add(t7); return ans; } BigDecimal y2 = new BigDecimal("2").divide(x, java.math.MathContext.DECIMAL128); - BigDecimal ans2 = MathEx.Exp(x.negate()).divide(MathEx.Sqrt(x), java.math.MathContext.DECIMAL128).multiply(new BigDecimal("1.253314137315500") - .add(y2.multiply(new BigDecimal("-0.078323582855262").add(y2.multiply(new BigDecimal("0.021895687854228").add(y2.multiply(new BigDecimal("-0.010624628097740") - .add(y2.multiply(new BigDecimal("0.005878072214632").add(y2.multiply(new BigDecimal("-0.002515401617640").add(y2.multiply(new BigDecimal("0.000532080305632")))))))))))); + + BigDecimal a1 = y2.multiply(new BigDecimal("0.000532080305632")); + BigDecimal a2 = y2.multiply(new BigDecimal("-0.002515401617640").add(a1)); + BigDecimal a3 = y2.multiply(new BigDecimal("0.005878072214632").add(a2)); + BigDecimal a4 = y2.multiply(new BigDecimal("-0.010624628097740").add(a3)); + BigDecimal a5 = y2.multiply(new BigDecimal("0.021895687854228").add(a4)); + BigDecimal a6 = y2.multiply(new BigDecimal("-0.078323582855262").add(a5)); + BigDecimal a7 = new BigDecimal("1.253314137315500").add(a6); + + BigDecimal ans2 = MathEx.Exp(x.negate()).divide(MathEx.Sqrt(x), java.math.MathContext.DECIMAL128).multiply(a7); return ans2; } private static BigDecimal BesselK1(BigDecimal x) { if (x.compareTo(new BigDecimal("2")) <= 0) { BigDecimal y1 = x.multiply(x).divide(new BigDecimal("4"), java.math.MathContext.DECIMAL128); - BigDecimal ans = MathEx.Log(x.divide(new BigDecimal("2"), java.math.MathContext.DECIMAL128)).multiply(BesselI1(x)).add(BigDecimal.ONE.divide(x, java.math.MathContext.DECIMAL128).multiply(BigDecimal.ONE - .add(y1.multiply(new BigDecimal("0.154431442036717").add(y1.multiply(new BigDecimal("-0.672785797513523").add(y1.multiply(new BigDecimal("-0.181568943578864") - .add(y1.multiply(new BigDecimal("-0.019194020400716").add(y1.multiply(new BigDecimal("0.001104044918568").add(y1.multiply(new BigDecimal("0.000046862429868"))))))))))))); + BigDecimal t1 = y1.multiply(new BigDecimal("0.000046862429868")); + BigDecimal t2 = y1.multiply(new BigDecimal("0.001104044918568").add(t1)); + BigDecimal t3 = y1.multiply(new BigDecimal("-0.019194020400716").add(t2)); + BigDecimal t4 = y1.multiply(new BigDecimal("-0.181568943578864").add(t3)); + BigDecimal t5 = y1.multiply(new BigDecimal("-0.672785797513523").add(t4)); + BigDecimal t6 = y1.multiply(new BigDecimal("0.154431442036717").add(t5)); + BigDecimal t7 = BigDecimal.ONE.add(t6); + BigDecimal ans = MathEx.Log(x.divide(new BigDecimal("2"), java.math.MathContext.DECIMAL128)).multiply(BesselI1(x)).add(BigDecimal.ONE.divide(x, java.math.MathContext.DECIMAL128).multiply(t7)); return ans; } BigDecimal y2 = new BigDecimal("2").divide(x, java.math.MathContext.DECIMAL128); - BigDecimal ans2 = MathEx.Exp(x.negate()).divide(MathEx.Sqrt(x), java.math.MathContext.DECIMAL128).multiply(new BigDecimal("1.253314137315500") - .add(y2.multiply(new BigDecimal("0.234986192707248").add(y2.multiply(new BigDecimal("-0.036556202034020").add(y2.multiply(new BigDecimal("0.015042680553908") - .add(y2.multiply(new BigDecimal("-0.007803534366237").add(y2.multiply(new BigDecimal("0.003256142832609").add(y2.multiply(new BigDecimal("-0.000682450383692")))))))))))); + + BigDecimal a1 = y2.multiply(new BigDecimal("-0.000682450383692")); + BigDecimal a2 = y2.multiply(new BigDecimal("0.003256142832609").add(a1)); + BigDecimal a3 = y2.multiply(new BigDecimal("-0.007803534366237").add(a2)); + BigDecimal a4 = y2.multiply(new BigDecimal("0.015042680553908").add(a3)); + BigDecimal a5 = y2.multiply(new BigDecimal("-0.036556202034020").add(a4)); + BigDecimal a6 = y2.multiply(new BigDecimal("0.234986192707248").add(a5)); + BigDecimal a7 = new BigDecimal("1.253314137315500").add(a6); + + BigDecimal ans2 = MathEx.Exp(x.negate()).divide(MathEx.Sqrt(x), java.math.MathContext.DECIMAL128).multiply(a7); return ans2; } @@ -101,13 +125,26 @@ private static BigDecimal BesselI0(BigDecimal x) { if (ax.compareTo(new BigDecimal("3.75")) < 0) { BigDecimal y1 = x.divide(new BigDecimal("3.75"), java.math.MathContext.DECIMAL128); y1 = y1.multiply(y1); - return BigDecimal.ONE.add(y1.multiply(new BigDecimal("3.515622965380465").add(y1.multiply(new BigDecimal("3.089942465562116").add(y1.multiply(new BigDecimal("1.206749160761352") - .add(y1.multiply(new BigDecimal("0.265973256598487").add(y1.multiply(new BigDecimal("0.036076845538912").add(y1.multiply(new BigDecimal("0.004581327358717")))))))))))); + BigDecimal t1 = y1.multiply(new BigDecimal("0.004581327358717")); + BigDecimal t2 = y1.multiply(new BigDecimal("0.036076845538912").add(t1)); + BigDecimal t3 = y1.multiply(new BigDecimal("0.265973256598487").add(t2)); + BigDecimal t4 = y1.multiply(new BigDecimal("1.206749160761352").add(t3)); + BigDecimal t5 = y1.multiply(new BigDecimal("3.089942465562116").add(t4)); + return BigDecimal.ONE.add(y1.multiply(new BigDecimal("3.515622965380465").add(t5))); } BigDecimal y2 = new BigDecimal("3.75").divide(ax, java.math.MathContext.DECIMAL128); - return MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128).multiply(new BigDecimal("0.398942280401433").add(y2.multiply(new BigDecimal("0.013285921344730") - .add(y2.multiply(new BigDecimal("0.002253193626842").add(y2.multiply(new BigDecimal("-0.001575649875251").add(y2.multiply(new BigDecimal("0.009162816703917") - .add(y2.multiply(new BigDecimal("-0.020577062932649").add(y2.multiply(new BigDecimal("0.026355373177924").add(y2.multiply(new BigDecimal("-0.016476329612910").add(y2.multiply(new BigDecimal("0.003923769605236")))))))))))))))); + + BigDecimal a1 = y2.multiply(new BigDecimal("0.003923769605236")); + BigDecimal a2 = y2.multiply(new BigDecimal("-0.016476329612910").add(a1)); + BigDecimal a3 = y2.multiply(new BigDecimal("0.026355373177924").add(a2)); + BigDecimal a4 = y2.multiply(new BigDecimal("-0.020577062932649").add(a3)); + BigDecimal a5 = y2.multiply(new BigDecimal("0.009162816703917").add(a4)); + BigDecimal a6 = y2.multiply(new BigDecimal("-0.001575649875251").add(a5)); + BigDecimal a7 = y2.multiply(new BigDecimal("0.002253193626842").add(a6)); + BigDecimal a8 = y2.multiply(new BigDecimal("0.013285921344730").add(a7)); + BigDecimal a9 = new BigDecimal("0.398942280401433").add(a8); + + return MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128).multiply(a9); } private static BigDecimal BesselI1(BigDecimal x) { @@ -115,13 +152,27 @@ private static BigDecimal BesselI1(BigDecimal x) { if (ax.compareTo(new BigDecimal("3.75")) < 0) { BigDecimal y1 = x.divide(new BigDecimal("3.75"), java.math.MathContext.DECIMAL128); y1 = y1.multiply(y1); - return x.multiply(new BigDecimal("0.5").add(y1.multiply(new BigDecimal("0.878905941521392").add(y1.multiply(new BigDecimal("0.514988692842374").add(y1.multiply(new BigDecimal("0.150849342225664") - .add(y1.multiply(new BigDecimal("0.026587328231117").add(y1.multiply(new BigDecimal("0.003015319414231").add(y1.multiply(new BigDecimal("0.000324111013968")))))))))))); + BigDecimal t1 = y1.multiply(new BigDecimal("0.000324111013968")); + BigDecimal t2 = y1.multiply(new BigDecimal("0.003015319414231").add(t1)); + BigDecimal t3 = y1.multiply(new BigDecimal("0.026587328231117").add(t2)); + BigDecimal t4 = y1.multiply(new BigDecimal("0.150849342225664").add(t3)); + BigDecimal t5 = y1.multiply(new BigDecimal("0.514988692842374").add(t4)); + BigDecimal t6 = y1.multiply(new BigDecimal("0.878905941521392").add(t5)); + return x.multiply(new BigDecimal("0.5").add(t6)); } BigDecimal y2 = new BigDecimal("3.75").divide(ax, java.math.MathContext.DECIMAL128); - BigDecimal ans = MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128).multiply(new BigDecimal("0.398942280401433").add(y2.multiply(new BigDecimal("-0.039880242337502") - .add(y2.multiply(new BigDecimal("-0.003620182649157").add(y2.multiply(new BigDecimal("0.001638105403528").add(y2.multiply(new BigDecimal("-0.010315550635288") - .add(y2.multiply(new BigDecimal("0.022829679456897").add(y2.multiply(new BigDecimal("-0.028953129286367").add(y2.multiply(new BigDecimal("0.017876545768998").subtract(y2.multiply(new BigDecimal("0.004200596567986")))))))))))))))); + + BigDecimal a1 = y2.multiply(new BigDecimal("0.004200596567986")); + BigDecimal a2 = y2.multiply(new BigDecimal("0.017876545768998").subtract(a1)); + BigDecimal a3 = y2.multiply(new BigDecimal("-0.028953129286367").add(a2)); + BigDecimal a4 = y2.multiply(new BigDecimal("0.022829679456897").add(a3)); + BigDecimal a5 = y2.multiply(new BigDecimal("-0.010315550635288").add(a4)); + BigDecimal a6 = y2.multiply(new BigDecimal("0.001638105403528").add(a5)); + BigDecimal a7 = y2.multiply(new BigDecimal("-0.003620182649157").add(a6)); + BigDecimal a8 = y2.multiply(new BigDecimal("-0.039880242337502").add(a7)); + BigDecimal a9 = new BigDecimal("0.398942280401433").add(a8); + + BigDecimal ans = MathEx.Exp(ax).divide(MathEx.Sqrt(new BigDecimal("2").multiply(MathEx.PI).multiply(ax)), java.math.MathContext.DECIMAL128).multiply(a9); return (x.compareTo(BigDecimal.ZERO) < 0) ? ans.negate() : ans; } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java index 70a1f7d3a..75c44aefc 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathsum2/Function_BESSELY.java @@ -69,85 +69,153 @@ private static BigDecimal BesselY(int n, BigDecimal x) { private static BigDecimal BesselY0(BigDecimal x) { if (x.compareTo(new BigDecimal("8")) < 0) { BigDecimal y1 = x.multiply(x); - BigDecimal ans1 = new BigDecimal("-2957821389").add(y1.multiply(new BigDecimal("7062834065").add(y1.multiply(new BigDecimal("-512359803.6") - .add(y1.multiply(new BigDecimal("10879881.29").add(y1.multiply(new BigDecimal("-86327.92757").add(y1.multiply(new BigDecimal("228.4622733")))))))))); - BigDecimal ans2 = new BigDecimal("40076544269").add(y1.multiply(new BigDecimal("745249964.8").add(y1.multiply(new BigDecimal("7189466.438") - .add(y1.multiply(new BigDecimal("47447.26470").add(y1.multiply(new BigDecimal("226.1030244").add(y1.multiply(BigDecimal.ONE)))))))))); + BigDecimal t1 = y1.multiply(new BigDecimal("228.4622733")); + BigDecimal t2 = y1.multiply(new BigDecimal("-86327.92757").add(t1)); + BigDecimal t3 = y1.multiply(new BigDecimal("10879881.29").add(t2)); + BigDecimal t4 = y1.multiply(new BigDecimal("-512359803.6").add(t3)); + BigDecimal t5 = y1.multiply(new BigDecimal("7062834065").add(t4)); + BigDecimal ans1 = new BigDecimal("-2957821389").add(t5); + + BigDecimal s1 = y1.multiply(BigDecimal.ONE); + BigDecimal s2 = y1.multiply(new BigDecimal("226.1030244").add(s1)); + BigDecimal s3 = y1.multiply(new BigDecimal("47447.26470").add(s2)); + BigDecimal s4 = y1.multiply(new BigDecimal("7189466.438").add(s3)); + BigDecimal s5 = y1.multiply(new BigDecimal("745249964.8").add(s4)); + BigDecimal ans2 = new BigDecimal("40076544269").add(s5); + return ans1.divide(ans2, java.math.MathContext.DECIMAL128).add(new BigDecimal("0.63661977236758134308").multiply(BesselJ0(x)).multiply(MathEx.Log(x))); } BigDecimal z = new BigDecimal("8").divide(x, java.math.MathContext.DECIMAL128); BigDecimal y2 = z.multiply(z); BigDecimal xx = x.subtract(new BigDecimal("0.78539816339744830962")); - BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("-0.001098628627").add(y2.multiply(new BigDecimal("0.00002734510407") - .add(y2.multiply(new BigDecimal("-0.000002073370639").add(y2.multiply(new BigDecimal("0.0000002093887211")))))))); - BigDecimal ans4 = new BigDecimal("-0.01562499995").add(y2.multiply(new BigDecimal("0.0001430488765") - .add(y2.multiply(new BigDecimal("-0.000006911147651").add(y2.multiply(new BigDecimal("0.0000007621095161") - .add(y2.multiply(new BigDecimal("-0.0000000934935152")))))))); - return MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(x, java.math.MathContext.DECIMAL128)).multiply(MathEx.Sin(xx).multiply(ans3).add(z.multiply(MathEx.Cos(xx)).multiply(ans4))); + + BigDecimal a1 = y2.multiply(new BigDecimal("0.0000002093887211")); + BigDecimal a2 = y2.multiply(new BigDecimal("-0.000002073370639").add(a1)); + BigDecimal a3 = y2.multiply(new BigDecimal("0.00002734510407").add(a2)); + BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("-0.001098628627").add(a3))); + + BigDecimal b1 = y2.multiply(new BigDecimal("-0.0000000934935152")); + BigDecimal b2 = y2.multiply(new BigDecimal("0.0000007621095161").add(b1)); + BigDecimal b3 = y2.multiply(new BigDecimal("-0.000006911147651").add(b2)); + BigDecimal ans4 = new BigDecimal("-0.01562499995").add(y2.multiply(new BigDecimal("0.0001430488765").add(b3))); + + return MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(x, java.math.MathContext.DECIMAL128)) + .multiply(MathEx.Sin(xx).multiply(ans3).add(z.multiply(MathEx.Cos(xx)).multiply(ans4))); } private static BigDecimal BesselY1(BigDecimal x) { if (x.compareTo(new BigDecimal("8")) < 0) { BigDecimal y1 = x.multiply(x); - BigDecimal ans1 = x.multiply(new BigDecimal("-4900604943000").add(y1.multiply(new BigDecimal("1275274390000") - .add(y1.multiply(new BigDecimal("-51534381390").add(y1.multiply(new BigDecimal("7349264551") - .add(y1.multiply(new BigDecimal("-4237922726").add(y1.multiply(new BigDecimal("8511937.935"))))))))))); - BigDecimal ans2 = new BigDecimal("24995805700000").add(y1.multiply(new BigDecimal("424441966400") - .add(y1.multiply(new BigDecimal("3733650367").add(y1.multiply(new BigDecimal("224590400.2") - .add(y1.multiply(new BigDecimal("102042605").add(y1.multiply(new BigDecimal("354963.2885").add(y1)))))))))); - return ans1.divide(ans2, java.math.MathContext.DECIMAL128).add(new BigDecimal("0.63661977236758134308").multiply(BesselJ1(x).multiply(MathEx.Log(x)).subtract(BigDecimal.ONE.divide(x, java.math.MathContext.DECIMAL128)))); + BigDecimal t1 = y1.multiply(new BigDecimal("8511937.935")); + BigDecimal t2 = y1.multiply(new BigDecimal("-4237922726").add(t1)); + BigDecimal t3 = y1.multiply(new BigDecimal("7349264551").add(t2)); + BigDecimal t4 = y1.multiply(new BigDecimal("-51534381390").add(t3)); + BigDecimal t5 = y1.multiply(new BigDecimal("1275274390000").add(t4)); + BigDecimal ans1 = x.multiply(new BigDecimal("-4900604943000").add(t5)); + + BigDecimal s1 = y1.multiply(BigDecimal.ONE); + BigDecimal s2 = y1.multiply(new BigDecimal("354963.2885").add(s1)); + BigDecimal s3 = y1.multiply(new BigDecimal("102042605").add(s2)); + BigDecimal s4 = y1.multiply(new BigDecimal("224590400.2").add(s3)); + BigDecimal s5 = y1.multiply(new BigDecimal("3733650367").add(s4)); + BigDecimal s6 = y1.multiply(new BigDecimal("424441966400").add(s5)); + BigDecimal ans2 = new BigDecimal("24995805700000").add(s6); + + return ans1.divide(ans2, java.math.MathContext.DECIMAL128) + .add(new BigDecimal("0.63661977236758134308").multiply(BesselJ1(x).multiply(MathEx.Log(x)).subtract(BigDecimal.ONE.divide(x, java.math.MathContext.DECIMAL128)))); } BigDecimal z = new BigDecimal("8").divide(x, java.math.MathContext.DECIMAL128); BigDecimal y2 = z.multiply(z); BigDecimal xx = x.subtract(new BigDecimal("2.35619449019234492885")); - BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("0.00183105").add(y2.multiply(new BigDecimal("-0.00003516396496") - .add(y2.multiply(new BigDecimal("0.000002457520174").add(y2.multiply(new BigDecimal("-0.000000240337019")))))))); - BigDecimal ans4 = new BigDecimal("0.04687499995").add(y2.multiply(new BigDecimal("-0.0002002690873") - .add(y2.multiply(new BigDecimal("0.000008449199096").add(y2.multiply(new BigDecimal("-0.00000088228987") - .add(y2.multiply(new BigDecimal("0.000000105787412")))))))); - return MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(x, java.math.MathContext.DECIMAL128)).multiply(MathEx.Sin(xx).multiply(ans3).add(z.multiply(MathEx.Cos(xx)).multiply(ans4))); + + BigDecimal a1 = y2.multiply(new BigDecimal("-0.000000240337019")); + BigDecimal a2 = y2.multiply(new BigDecimal("0.000002457520174").add(a1)); + BigDecimal a3 = y2.multiply(new BigDecimal("-0.00003516396496").add(a2)); + BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("0.00183105").add(a3))); + + BigDecimal b1 = y2.multiply(new BigDecimal("0.000000105787412")); + BigDecimal b2 = y2.multiply(new BigDecimal("-0.00000088228987").add(b1)); + BigDecimal b3 = y2.multiply(new BigDecimal("0.000008449199096").add(b2)); + BigDecimal ans4 = new BigDecimal("0.04687499995").add(y2.multiply(new BigDecimal("-0.0002002690873").add(b3))); + + return MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(x, java.math.MathContext.DECIMAL128)) + .multiply(MathEx.Sin(xx).multiply(ans3).add(z.multiply(MathEx.Cos(xx)).multiply(ans4))); } private static BigDecimal BesselJ0(BigDecimal x) { BigDecimal ax = x.abs(); if (ax.compareTo(new BigDecimal("8")) < 0) { BigDecimal y1 = x.multiply(x); - BigDecimal ans1 = new BigDecimal("57568490574").add(y1.multiply(new BigDecimal("-13362590354").add(y1.multiply(new BigDecimal("651619640.7") - .add(y1.multiply(new BigDecimal("-11214424.18").add(y1.multiply(new BigDecimal("77392.33017").add(y1.multiply(new BigDecimal("-184.9052456"))))))))))); - BigDecimal ans2 = new BigDecimal("57568490411").add(y1.multiply(new BigDecimal("1029532985").add(y1.multiply(new BigDecimal("9494680.718") - .add(y1.multiply(new BigDecimal("59272.64853").add(y1.multiply(new BigDecimal("267.8532712").add(y1.multiply(BigDecimal.ONE)))))))))); + BigDecimal t1 = y1.multiply(new BigDecimal("-184.9052456")); + BigDecimal t2 = y1.multiply(new BigDecimal("77392.33017").add(t1)); + BigDecimal t3 = y1.multiply(new BigDecimal("-11214424.18").add(t2)); + BigDecimal t4 = y1.multiply(new BigDecimal("651619640.7").add(t3)); + BigDecimal t5 = y1.multiply(new BigDecimal("-13362590354").add(t4)); + BigDecimal ans1 = new BigDecimal("57568490574").add(t5); + + BigDecimal s1 = y1.multiply(BigDecimal.ONE); + BigDecimal s2 = y1.multiply(new BigDecimal("267.8532712").add(s1)); + BigDecimal s3 = y1.multiply(new BigDecimal("59272.64853").add(s2)); + BigDecimal s4 = y1.multiply(new BigDecimal("9494680.718").add(s3)); + BigDecimal s5 = y1.multiply(new BigDecimal("1029532985").add(s4)); + BigDecimal ans2 = new BigDecimal("57568490411").add(s5); + return ans1.divide(ans2, java.math.MathContext.DECIMAL128); } BigDecimal z = new BigDecimal("8").divide(ax, java.math.MathContext.DECIMAL128); BigDecimal y2 = z.multiply(z); BigDecimal xx = ax.subtract(new BigDecimal("0.78539816339744830962")); - BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("-0.001098628627").add(y2.multiply(new BigDecimal("0.00002734510407") - .add(y2.multiply(new BigDecimal("-0.000002073370639").add(y2.multiply(new BigDecimal("0.0000002093887211")))))))); - BigDecimal ans4 = new BigDecimal("-0.01562499995").add(y2.multiply(new BigDecimal("0.0001430488765") - .add(y2.multiply(new BigDecimal("-0.000006911147651").add(y2.multiply(new BigDecimal("0.0000007621095161") - .subtract(y2.multiply(new BigDecimal("0.0000000934935152")))))))); - return MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(ax, java.math.MathContext.DECIMAL128)).multiply(MathEx.Cos(xx).multiply(ans3).subtract(z.multiply(MathEx.Sin(xx)).multiply(ans4))); + + BigDecimal a1 = y2.multiply(new BigDecimal("0.0000002093887211")); + BigDecimal a2 = y2.multiply(new BigDecimal("-0.000002073370639").add(a1)); + BigDecimal a3 = y2.multiply(new BigDecimal("0.00002734510407").add(a2)); + BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("-0.001098628627").add(a3))); + + BigDecimal b1 = y2.multiply(new BigDecimal("0.0000000934935152")); + BigDecimal b2 = y2.multiply(new BigDecimal("0.0000007621095161").subtract(b1)); + BigDecimal b3 = y2.multiply(new BigDecimal("-0.000006911147651").add(b2)); + BigDecimal ans4 = new BigDecimal("-0.01562499995").add(y2.multiply(new BigDecimal("0.0001430488765").add(b3))); + + return MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(ax, java.math.MathContext.DECIMAL128)) + .multiply(MathEx.Cos(xx).multiply(ans3).subtract(z.multiply(MathEx.Sin(xx)).multiply(ans4))); } private static BigDecimal BesselJ1(BigDecimal x) { BigDecimal ax = x.abs(); if (ax.compareTo(new BigDecimal("8")) < 0) { BigDecimal y1 = x.multiply(x); - BigDecimal ans1 = x.multiply(new BigDecimal("72362614232").add(y1.multiply(new BigDecimal("-7895059235").add(y1.multiply(new BigDecimal("242396853.1") - .add(y1.multiply(new BigDecimal("-2972611.439").add(y1.multiply(new BigDecimal("15704.48260").add(y1.multiply(new BigDecimal("-30.16036606"))))))))))); - BigDecimal ans2 = new BigDecimal("144725228442").add(y1.multiply(new BigDecimal("2300535178").add(y1.multiply(new BigDecimal("18583304.74") - .add(y1.multiply(new BigDecimal("99447.43394").add(y1.multiply(new BigDecimal("376.9991397").add(y1.multiply(BigDecimal.ONE)))))))))); + BigDecimal t1 = y1.multiply(new BigDecimal("-30.16036606")); + BigDecimal t2 = y1.multiply(new BigDecimal("15704.48260").add(t1)); + BigDecimal t3 = y1.multiply(new BigDecimal("-2972611.439").add(t2)); + BigDecimal t4 = y1.multiply(new BigDecimal("242396853.1").add(t3)); + BigDecimal t5 = y1.multiply(new BigDecimal("-7895059235").add(t4)); + BigDecimal ans1 = x.multiply(new BigDecimal("72362614232").add(t5)); + + BigDecimal s1 = y1.multiply(BigDecimal.ONE); + BigDecimal s2 = y1.multiply(new BigDecimal("376.9991397").add(s1)); + BigDecimal s3 = y1.multiply(new BigDecimal("99447.43394").add(s2)); + BigDecimal s4 = y1.multiply(new BigDecimal("18583304.74").add(s3)); + BigDecimal s5 = y1.multiply(new BigDecimal("2300535178").add(s4)); + BigDecimal ans2 = new BigDecimal("144725228442").add(s5); + return ans1.divide(ans2, java.math.MathContext.DECIMAL128); } BigDecimal z = new BigDecimal("8").divide(ax, java.math.MathContext.DECIMAL128); BigDecimal y2 = z.multiply(z); BigDecimal xx = ax.subtract(new BigDecimal("2.35619449019234492885")); - BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("0.00183105").add(y2.multiply(new BigDecimal("-0.00003516396496") - .add(y2.multiply(new BigDecimal("0.000002457520174").add(y2.multiply(new BigDecimal("-0.000000240337019")))))))); - BigDecimal ans4 = new BigDecimal("0.04687499995").add(y2.multiply(new BigDecimal("-0.0002002690873") - .add(y2.multiply(new BigDecimal("0.000008449199096").add(y2.multiply(new BigDecimal("-0.00000088228987") - .add(y2.multiply(new BigDecimal("0.000000105787412")))))))); - BigDecimal ans = MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(ax, java.math.MathContext.DECIMAL128)).multiply(MathEx.Cos(xx).multiply(ans3).subtract(z.multiply(MathEx.Sin(xx)).multiply(ans4))); + + BigDecimal a1 = y2.multiply(new BigDecimal("-0.000000240337019")); + BigDecimal a2 = y2.multiply(new BigDecimal("0.000002457520174").add(a1)); + BigDecimal a3 = y2.multiply(new BigDecimal("-0.00003516396496").add(a2)); + BigDecimal ans3 = BigDecimal.ONE.add(y2.multiply(new BigDecimal("0.00183105").add(a3))); + + BigDecimal b1 = y2.multiply(new BigDecimal("0.000000105787412")); + BigDecimal b2 = y2.multiply(new BigDecimal("-0.00000088228987").add(b1)); + BigDecimal b3 = y2.multiply(new BigDecimal("0.000008449199096").add(b2)); + BigDecimal ans4 = new BigDecimal("0.04687499995").add(y2.multiply(new BigDecimal("-0.0002002690873").add(b3))); + + BigDecimal ans = MathEx.Sqrt(new BigDecimal("0.63661977236758134308").divide(ax, java.math.MathContext.DECIMAL128)) + .multiply(MathEx.Cos(xx).multiply(ans3).subtract(z.multiply(MathEx.Sin(xx)).multiply(ans4))); return (x.compareTo(BigDecimal.ZERO) < 0) ? ans.negate() : ans; } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java index 2592cc55b..1886ca404 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java @@ -127,10 +127,10 @@ import toolgood.algorithm.internals.functions.mathbase.Function_ATAN; import toolgood.algorithm.internals.functions.mathbase.Function_ATAN2; import toolgood.algorithm.internals.functions.mathbase.Function_ATANH; -import toolgood.algorithm.internals.functions.mathbase.Function_BESSELI; -import toolgood.algorithm.internals.functions.mathbase.Function_BESSELJ; -import toolgood.algorithm.internals.functions.mathbase.Function_BESSELK; -import toolgood.algorithm.internals.functions.mathbase.Function_BESSELY; +import toolgood.algorithm.internals.functions.mathsum2.Function_BESSELI; +import toolgood.algorithm.internals.functions.mathsum2.Function_BESSELJ; +import toolgood.algorithm.internals.functions.mathsum2.Function_BESSELK; +import toolgood.algorithm.internals.functions.mathsum2.Function_BESSELY; import toolgood.algorithm.internals.functions.mathbase.Function_BIN2DEC; import toolgood.algorithm.internals.functions.mathbase.Function_BIN2HEX; import toolgood.algorithm.internals.functions.mathbase.Function_BIN2OCT; From a046052800ed2b7004ad1e5431c3580215e44c06 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 14:19:20 +0800 Subject: [PATCH 73/98] fix --- .../visitors/MathFunctionVisitor.java | 312 +----------------- 1 file changed, 17 insertions(+), 295 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java index 1886ca404..64aa29c89 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java @@ -11,297 +11,19 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.compare.Function_EQ; -import toolgood.algorithm.internals.functions.compare.Function_GE; -import toolgood.algorithm.internals.functions.compare.Function_GT; -import toolgood.algorithm.internals.functions.compare.Function_LE; -import toolgood.algorithm.internals.functions.compare.Function_LT; -import toolgood.algorithm.internals.functions.compare.Function_NE; -import toolgood.algorithm.internals.functions.csharp.Function_ARABIC; -import toolgood.algorithm.internals.functions.csharp.Function_ENDSWITH; -import toolgood.algorithm.internals.functions.csharp.Function_GUID; -import toolgood.algorithm.internals.functions.csharp.Function_HAS; -import toolgood.algorithm.internals.functions.csharp.Function_HASVALUE; -import toolgood.algorithm.internals.functions.csharp.Function_INDEXOF; -import toolgood.algorithm.internals.functions.csharp.Function_ISREGEX; -import toolgood.algorithm.internals.functions.csharp.Function_JOIN; -import toolgood.algorithm.internals.functions.csharp.Function_LASTINDEXOF; -import toolgood.algorithm.internals.functions.csharp.Function_LOOKCEILING; -import toolgood.algorithm.internals.functions.csharp.Function_LOOKFLOOR; -import toolgood.algorithm.internals.functions.csharp.Function_REGEX; -import toolgood.algorithm.internals.functions.csharp.Function_REGEXREPLACE; -import toolgood.algorithm.internals.functions.csharp.Function_REMOVEEND; -import toolgood.algorithm.internals.functions.csharp.Function_REMOVESTART; -import toolgood.algorithm.internals.functions.csharp.Function_ROMAN; -import toolgood.algorithm.internals.functions.csharp.Function_SPLIT; -import toolgood.algorithm.internals.functions.csharp.Function_STARTSWITH; -import toolgood.algorithm.internals.functions.csharp.Function_SUBSTRING; -import toolgood.algorithm.internals.functions.csharp.Function_TRIMEND; -import toolgood.algorithm.internals.functions.csharp.Function_TRIMSTART; -import toolgood.algorithm.internals.functions.csharpsecurity.Function_HMACMD5; -import toolgood.algorithm.internals.functions.csharpsecurity.Function_HMACSHA1; -import toolgood.algorithm.internals.functions.csharpsecurity.Function_HMACSHA256; -import toolgood.algorithm.internals.functions.csharpsecurity.Function_HMACSHA512; -import toolgood.algorithm.internals.functions.csharpsecurity.Function_MD5; -import toolgood.algorithm.internals.functions.csharpsecurity.Function_SHA1; -import toolgood.algorithm.internals.functions.csharpsecurity.Function_SHA256; -import toolgood.algorithm.internals.functions.csharpsecurity.Function_SHA512; -import toolgood.algorithm.internals.functions.csharpweb.Function_BASE64TOTEXT; -import toolgood.algorithm.internals.functions.csharpweb.Function_BASE64URLTOTEXT; -import toolgood.algorithm.internals.functions.csharpweb.Function_HTMLDECODE; -import toolgood.algorithm.internals.functions.csharpweb.Function_HTMLENCODE; -import toolgood.algorithm.internals.functions.csharpweb.Function_TEXTTOBASE64; -import toolgood.algorithm.internals.functions.csharpweb.Function_TEXTTOBASE64URL; -import toolgood.algorithm.internals.functions.csharpweb.Function_URLDECODE; -import toolgood.algorithm.internals.functions.csharpweb.Function_URLENCODE; -import toolgood.algorithm.internals.functions.datetimes.Function_ADDDAYS; -import toolgood.algorithm.internals.functions.datetimes.Function_ADDHOURS; -import toolgood.algorithm.internals.functions.datetimes.Function_ADDMINUTES; -import toolgood.algorithm.internals.functions.datetimes.Function_ADDMONTHS; -import toolgood.algorithm.internals.functions.datetimes.Function_ADDSECONDS; -import toolgood.algorithm.internals.functions.datetimes.Function_ADDYEARS; -import toolgood.algorithm.internals.functions.datetimes.Function_DATE; -import toolgood.algorithm.internals.functions.datetimes.Function_DATEDIF; -import toolgood.algorithm.internals.functions.datetimes.Function_DATEVALUE; -import toolgood.algorithm.internals.functions.datetimes.Function_DAY; -import toolgood.algorithm.internals.functions.datetimes.Function_DAYS; -import toolgood.algorithm.internals.functions.datetimes.Function_DAYS360; -import toolgood.algorithm.internals.functions.datetimes.Function_EDATE; -import toolgood.algorithm.internals.functions.datetimes.Function_EOMONTH; -import toolgood.algorithm.internals.functions.datetimes.Function_HOUR; -import toolgood.algorithm.internals.functions.datetimes.Function_MINUTE; -import toolgood.algorithm.internals.functions.datetimes.Function_MONTH; -import toolgood.algorithm.internals.functions.datetimes.Function_NETWORKDAYS; -import toolgood.algorithm.internals.functions.datetimes.Function_NOW; -import toolgood.algorithm.internals.functions.datetimes.Function_SECOND; -import toolgood.algorithm.internals.functions.datetimes.Function_TIME; -import toolgood.algorithm.internals.functions.datetimes.Function_TIMESTAMP; -import toolgood.algorithm.internals.functions.datetimes.Function_TIMEVALUE; -import toolgood.algorithm.internals.functions.datetimes.Function_TODAY; -import toolgood.algorithm.internals.functions.datetimes.Function_WEEKDAY; -import toolgood.algorithm.internals.functions.datetimes.Function_WEEKNUM; -import toolgood.algorithm.internals.functions.datetimes.Function_YEAR; -import toolgood.algorithm.internals.functions.datetimes.Function_YEARFRAC; -import toolgood.algorithm.internals.functions.datetimes.Function_WORKDAY; -import toolgood.algorithm.internals.functions.financial.Function_DB; -import toolgood.algorithm.internals.functions.financial.Function_DDB; -import toolgood.algorithm.internals.functions.financial.Function_FV; -import toolgood.algorithm.internals.functions.financial.Function_IPMT; -import toolgood.algorithm.internals.functions.financial.Function_IRR; -import toolgood.algorithm.internals.functions.financial.Function_MIRR; -import toolgood.algorithm.internals.functions.financial.Function_NPER; -import toolgood.algorithm.internals.functions.financial.Function_NPV; -import toolgood.algorithm.internals.functions.financial.Function_PMT; -import toolgood.algorithm.internals.functions.financial.Function_PPMT; -import toolgood.algorithm.internals.functions.financial.Function_PV; -import toolgood.algorithm.internals.functions.financial.Function_RATE; -import toolgood.algorithm.internals.functions.financial.Function_SLN; -import toolgood.algorithm.internals.functions.financial.Function_SYD; -import toolgood.algorithm.internals.functions.financial.Function_XIRR; -import toolgood.algorithm.internals.functions.financial.Function_XNPV; -import toolgood.algorithm.internals.functions.flow.Function_AND_N; -import toolgood.algorithm.internals.functions.flow.Function_IF; -import toolgood.algorithm.internals.functions.flow.Function_IFERROR; -import toolgood.algorithm.internals.functions.flow.Function_IFS; -import toolgood.algorithm.internals.functions.flow.Function_ISEVEN; -import toolgood.algorithm.internals.functions.flow.Function_ISERROR; -import toolgood.algorithm.internals.functions.flow.Function_ISLOGICAL; -import toolgood.algorithm.internals.functions.flow.Function_ISNONTEXT; -import toolgood.algorithm.internals.functions.flow.Function_ISNULL; -import toolgood.algorithm.internals.functions.flow.Function_ISNULLORERROR; -import toolgood.algorithm.internals.functions.flow.Function_ISNULLOREMPTY; -import toolgood.algorithm.internals.functions.flow.Function_ISNULLORWHITESPACE; -import toolgood.algorithm.internals.functions.flow.Function_ISNUMBER; -import toolgood.algorithm.internals.functions.flow.Function_ISODD; -import toolgood.algorithm.internals.functions.flow.Function_ISTEXT; -import toolgood.algorithm.internals.functions.flow.Function_NOT; -import toolgood.algorithm.internals.functions.flow.Function_OR_N; -import toolgood.algorithm.internals.functions.flow.Function_SWITCH; -import toolgood.algorithm.internals.functions.mathbase.Function_ABS; -import toolgood.algorithm.internals.functions.mathbase.Function_ACOS; -import toolgood.algorithm.internals.functions.mathbase.Function_ACOSH; -import toolgood.algorithm.internals.functions.mathbase.Function_ACOT; -import toolgood.algorithm.internals.functions.mathbase.Function_ACOTH; -import toolgood.algorithm.internals.functions.mathbase.Function_ASIN; -import toolgood.algorithm.internals.functions.mathbase.Function_ASINH; -import toolgood.algorithm.internals.functions.mathbase.Function_ATAN; -import toolgood.algorithm.internals.functions.mathbase.Function_ATAN2; -import toolgood.algorithm.internals.functions.mathbase.Function_ATANH; -import toolgood.algorithm.internals.functions.mathsum2.Function_BESSELI; -import toolgood.algorithm.internals.functions.mathsum2.Function_BESSELJ; -import toolgood.algorithm.internals.functions.mathsum2.Function_BESSELK; -import toolgood.algorithm.internals.functions.mathsum2.Function_BESSELY; -import toolgood.algorithm.internals.functions.mathbase.Function_BIN2DEC; -import toolgood.algorithm.internals.functions.mathbase.Function_BIN2HEX; -import toolgood.algorithm.internals.functions.mathbase.Function_BIN2OCT; -import toolgood.algorithm.internals.functions.mathbase.Function_CEILING; -import toolgood.algorithm.internals.functions.mathbase.Function_COMBIN; -import toolgood.algorithm.internals.functions.mathbase.Function_COS; -import toolgood.algorithm.internals.functions.mathbase.Function_COSH; -import toolgood.algorithm.internals.functions.mathbase.Function_COT; -import toolgood.algorithm.internals.functions.mathbase.Function_COTH; -import toolgood.algorithm.internals.functions.mathbase.Function_CSC; -import toolgood.algorithm.internals.functions.mathbase.Function_CSCH; -import toolgood.algorithm.internals.functions.mathbase.Function_DEC2BIN; -import toolgood.algorithm.internals.functions.mathbase.Function_DEC2HEX; -import toolgood.algorithm.internals.functions.mathbase.Function_DEC2OCT; -import toolgood.algorithm.internals.functions.mathbase.Function_DEGREES; -import toolgood.algorithm.internals.functions.mathbase.Function_DELTA; -import toolgood.algorithm.internals.functions.mathbase.Function_EVEN; -import toolgood.algorithm.internals.functions.mathbase.Function_EXP; -import toolgood.algorithm.internals.functions.mathbase.Function_ERF; -import toolgood.algorithm.internals.functions.mathbase.Function_ERFC; -import toolgood.algorithm.internals.functions.mathbase.Function_FACT; -import toolgood.algorithm.internals.functions.mathbase.Function_FACTDOUBLE; -import toolgood.algorithm.internals.functions.mathbase.Function_FIXED; -import toolgood.algorithm.internals.functions.mathbase.Function_FLOOR; -import toolgood.algorithm.internals.functions.mathbase.Function_GCD; -import toolgood.algorithm.internals.functions.mathbase.Function_GESTEP; -import toolgood.algorithm.internals.functions.mathbase.Function_HEX2BIN; -import toolgood.algorithm.internals.functions.mathbase.Function_HEX2DEC; -import toolgood.algorithm.internals.functions.mathbase.Function_HEX2OCT; -import toolgood.algorithm.internals.functions.mathbase.Function_LCM; -import toolgood.algorithm.internals.functions.mathbase.Function_LN; -import toolgood.algorithm.internals.functions.mathbase.Function_LOG; -import toolgood.algorithm.internals.functions.mathbase.Function_LOG10; -import toolgood.algorithm.internals.functions.mathbase.Function_MOD; -import toolgood.algorithm.internals.functions.mathbase.Function_MROUND; -import toolgood.algorithm.internals.functions.mathbase.Function_MULTINOMIAL; -import toolgood.algorithm.internals.functions.mathbase.Function_Number; -import toolgood.algorithm.internals.functions.mathbase.Function_OCT2BIN; -import toolgood.algorithm.internals.functions.mathbase.Function_OCT2DEC; -import toolgood.algorithm.internals.functions.mathbase.Function_OCT2HEX; -import toolgood.algorithm.internals.functions.mathbase.Function_ODD; -import toolgood.algorithm.internals.functions.mathbase.Function_PERMUT; -import toolgood.algorithm.internals.functions.mathbase.Function_POWER; -import toolgood.algorithm.internals.functions.mathbase.Function_PRODUCT; -import toolgood.algorithm.internals.functions.mathbase.Function_QUOTIENT; -import toolgood.algorithm.internals.functions.mathbase.Function_RADIANS; -import toolgood.algorithm.internals.functions.mathbase.Function_RAND; -import toolgood.algorithm.internals.functions.mathbase.Function_RANDBETWEEN; -import toolgood.algorithm.internals.functions.mathbase.Function_ROUND; -import toolgood.algorithm.internals.functions.mathbase.Function_ROUNDDOWN; -import toolgood.algorithm.internals.functions.mathbase.Function_ROUNDUP; -import toolgood.algorithm.internals.functions.mathbase.Function_SEC; -import toolgood.algorithm.internals.functions.mathbase.Function_SECH; -import toolgood.algorithm.internals.functions.mathbase.Function_SIGN; -import toolgood.algorithm.internals.functions.mathbase.Function_SIN; -import toolgood.algorithm.internals.functions.mathbase.Function_SINH; -import toolgood.algorithm.internals.functions.mathbase.Function_SQRT; -import toolgood.algorithm.internals.functions.mathbase.Function_SQRTPI; -import toolgood.algorithm.internals.functions.mathbase.Function_TAN; -import toolgood.algorithm.internals.functions.mathbase.Function_TANH; -import toolgood.algorithm.internals.functions.mathbase.Function_TRUNC; -import toolgood.algorithm.internals.functions.mathbase.Function_Percentage; -import toolgood.algorithm.internals.functions.mathsum.Function_AVEDEV; -import toolgood.algorithm.internals.functions.mathsum.Function_AVERAGE; -import toolgood.algorithm.internals.functions.mathsum.Function_AVERAGEIF; -import toolgood.algorithm.internals.functions.mathsum.Function_CORREL; -import toolgood.algorithm.internals.functions.mathsum.Function_COUNT; -import toolgood.algorithm.internals.functions.mathsum.Function_COUNTIF; -import toolgood.algorithm.internals.functions.mathsum.Function_DEVSQ; -import toolgood.algorithm.internals.functions.mathsum.Function_FORECAST; -import toolgood.algorithm.internals.functions.mathsum.Function_GEOMEAN; -import toolgood.algorithm.internals.functions.mathsum.Function_HARMEAN; -import toolgood.algorithm.internals.functions.mathsum.Function_INTERCEPT; -import toolgood.algorithm.internals.functions.mathsum.Function_LARGE; -import toolgood.algorithm.internals.functions.mathsum.Function_MAX; -import toolgood.algorithm.internals.functions.mathsum.Function_MEDIAN; -import toolgood.algorithm.internals.functions.mathsum.Function_MIN; -import toolgood.algorithm.internals.functions.mathsum.Function_MODE; -import toolgood.algorithm.internals.functions.mathsum.Function_PEARSON; -import toolgood.algorithm.internals.functions.mathsum.Function_PERCENTILE; -import toolgood.algorithm.internals.functions.mathsum.Function_PERCENTRANK; -import toolgood.algorithm.internals.functions.mathsum.Function_QUARTILE; -import toolgood.algorithm.internals.functions.mathsum.Function_RANK; -import toolgood.algorithm.internals.functions.mathsum.Function_SERIESSUM; -import toolgood.algorithm.internals.functions.mathsum.Function_SLOPE; -import toolgood.algorithm.internals.functions.mathsum.Function_SMALL; -import toolgood.algorithm.internals.functions.mathsum.Function_STDEV; -import toolgood.algorithm.internals.functions.mathsum.Function_STDEVP; -import toolgood.algorithm.internals.functions.mathsum.Function_SUM; -import toolgood.algorithm.internals.functions.mathsum.Function_SUMIF; -import toolgood.algorithm.internals.functions.mathsum.Function_SUMPRODUCT; -import toolgood.algorithm.internals.functions.mathsum.Function_SUMSQ; -import toolgood.algorithm.internals.functions.mathsum.Function_SUMX2MY2; -import toolgood.algorithm.internals.functions.mathsum.Function_SUMX2PY2; -import toolgood.algorithm.internals.functions.mathsum.Function_SUMXMY2; -import toolgood.algorithm.internals.functions.mathsum.Function_VAR; -import toolgood.algorithm.internals.functions.mathsum.Function_VARP; -import toolgood.algorithm.internals.functions.mathsum2.Function_BETADIST; -import toolgood.algorithm.internals.functions.mathsum2.Function_BETAINV; -import toolgood.algorithm.internals.functions.mathsum2.Function_BINOMDIST; -import toolgood.algorithm.internals.functions.mathsum2.Function_COVAR; -import toolgood.algorithm.internals.functions.mathsum2.Function_COVARIANCES; -import toolgood.algorithm.internals.functions.mathsum2.Function_EXPONDIST; -import toolgood.algorithm.internals.functions.mathsum2.Function_FDIST; -import toolgood.algorithm.internals.functions.mathsum2.Function_FINV; -import toolgood.algorithm.internals.functions.mathsum2.Function_FISHER; -import toolgood.algorithm.internals.functions.mathsum2.Function_FISHERINV; -import toolgood.algorithm.internals.functions.mathsum2.Function_GAMMADIST; -import toolgood.algorithm.internals.functions.mathsum2.Function_GAMMAINV; -import toolgood.algorithm.internals.functions.mathsum2.Function_GAMMALN; -import toolgood.algorithm.internals.functions.mathsum2.Function_HYPGEOMDIST; -import toolgood.algorithm.internals.functions.mathsum2.Function_LOGINV; -import toolgood.algorithm.internals.functions.mathsum2.Function_LOGNORMDIST; -import toolgood.algorithm.internals.functions.mathsum2.Function_NEGBINOMDIST; -import toolgood.algorithm.internals.functions.mathsum2.Function_NORMDIST; -import toolgood.algorithm.internals.functions.mathsum2.Function_NORMINV; -import toolgood.algorithm.internals.functions.mathsum2.Function_NORMSDIST; -import toolgood.algorithm.internals.functions.mathsum2.Function_NORMSINV; -import toolgood.algorithm.internals.functions.mathsum2.Function_POISSON; -import toolgood.algorithm.internals.functions.mathsum2.Function_TDIST; -import toolgood.algorithm.internals.functions.mathsum2.Function_TINV; -import toolgood.algorithm.internals.functions.mathsum2.Function_WEIBULL; -import toolgood.algorithm.internals.functions.operator.Function_Add; -import toolgood.algorithm.internals.functions.operator.Function_AND; -import toolgood.algorithm.internals.functions.operator.Function_Connect; -import toolgood.algorithm.internals.functions.operator.Function_Div; -import toolgood.algorithm.internals.functions.operator.Function_Mod; -import toolgood.algorithm.internals.functions.operator.Function_Mul; -import toolgood.algorithm.internals.functions.operator.Function_OR; -import toolgood.algorithm.internals.functions.operator.Function_Sub; -import toolgood.algorithm.internals.functions.operator.Function_XOR; -import toolgood.algorithm.internals.functions.string.Function_ASC; -import toolgood.algorithm.internals.functions.string.Function_CHAR; -import toolgood.algorithm.internals.functions.string.Function_CLEAN; -import toolgood.algorithm.internals.functions.string.Function_CODE; -import toolgood.algorithm.internals.functions.string.Function_CONCATENATE; -import toolgood.algorithm.internals.functions.string.Function_EXACT; -import toolgood.algorithm.internals.functions.string.Function_FIND; -import toolgood.algorithm.internals.functions.string.Function_JIS; -import toolgood.algorithm.internals.functions.string.Function_LEFT; -import toolgood.algorithm.internals.functions.string.Function_LEN; -import toolgood.algorithm.internals.functions.string.Function_LOWER; -import toolgood.algorithm.internals.functions.string.Function_MID; -import toolgood.algorithm.internals.functions.string.Function_PROPER; -import toolgood.algorithm.internals.functions.string.Function_REPLACE; -import toolgood.algorithm.internals.functions.string.Function_REPT; -import toolgood.algorithm.internals.functions.string.Function_RIGHT; -import toolgood.algorithm.internals.functions.string.Function_RMB; -import toolgood.algorithm.internals.functions.string.Function_SEARCH; -import toolgood.algorithm.internals.functions.string.Function_SUBSTITUTE; -import toolgood.algorithm.internals.functions.string.Function_T; -import toolgood.algorithm.internals.functions.string.Function_TEXT; -import toolgood.algorithm.internals.functions.string.Function_TRIM; -import toolgood.algorithm.internals.functions.string.Function_UNICHAR; -import toolgood.algorithm.internals.functions.string.Function_UNICODE; -import toolgood.algorithm.internals.functions.string.Function_UPPER; -import toolgood.algorithm.internals.functions.string.Function_VALUE; -import toolgood.algorithm.internals.functions.value.Function_Array; -import toolgood.algorithm.internals.functions.value.Function_ArrayJson; -import toolgood.algorithm.internals.functions.value.Function_ArrayJsonItem; -import toolgood.algorithm.internals.functions.value.Function_DiyFunction; -import toolgood.algorithm.internals.functions.value.Function_ERROR; -import toolgood.algorithm.internals.functions.value.Function_GetJsonValue; -import toolgood.algorithm.internals.functions.value.Function_JSON; -import toolgood.algorithm.internals.functions.value.Function_NULL; -import toolgood.algorithm.internals.functions.value.Function_NUMBER; -import toolgood.algorithm.internals.functions.value.Function_PARAMETER; -import toolgood.algorithm.internals.functions.value.Function_PARAM; -import toolgood.algorithm.internals.functions.value.Function_ValueBoolean; -import toolgood.algorithm.internals.functions.value.Function_ValueNumber; -import toolgood.algorithm.internals.functions.value.Function_ValueText; +import toolgood.algorithm.internals.functions.compare.*; +import toolgood.algorithm.internals.functions.csharp.*; +import toolgood.algorithm.internals.functions.csharpsecurity.*; +import toolgood.algorithm.internals.functions.csharpweb.*; +import toolgood.algorithm.internals.functions.datetimes.*; +import toolgood.algorithm.internals.functions.financial.*; +import toolgood.algorithm.internals.functions.flow.*; +import toolgood.algorithm.internals.functions.mathbase.*; +import toolgood.algorithm.internals.functions.mathsum2.*; +import toolgood.algorithm.internals.functions.mathsum.*; +import toolgood.algorithm.internals.functions.operator.*; +import toolgood.algorithm.internals.functions.string.*; +import toolgood.algorithm.internals.functions.value.*; import toolgood.algorithm.math.mathParser; import toolgood.algorithm.math.mathParser.ExprContext; import toolgood.algorithm.math.mathVisitor; @@ -2072,10 +1794,10 @@ public FunctionBase visitHASVALUE_fun(mathParser.HASVALUE_funContext ctx) { @Override public FunctionBase visitArrayJson_fun(mathParser.ArrayJson_funContext ctx) { - mathParser.ArrayJsonContext[] exprs = ctx.arrayJson(); - FunctionBase[] args = new FunctionBase[exprs.length]; - for (int i = 0; i < exprs.length; i++) { - args[i] = exprs[i].accept(this); + List exprs = ctx.arrayJson(); + FunctionBase[] args = new FunctionBase[exprs.size()]; + for (int i = 0; i < exprs.size(); i++) { + args[i] = exprs.get(i).accept(this); } return new Function_ArrayJson(args); } From d29390d3e2d193ff50ee8651632bc7ed0e40d80d Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 14:22:47 +0800 Subject: [PATCH 74/98] fix --- .../java/toolgood/algorithm/enums/AreaUnitType.java | 8 ++++---- .../toolgood/algorithm/enums/DistanceUnitType.java | 8 ++++---- .../java/toolgood/algorithm/enums/MassUnitType.java | 10 +++++----- .../java/toolgood/algorithm/enums/NumberUnitType.java | 6 +++--- .../java/toolgood/algorithm/enums/VolumeUnitType.java | 8 ++++---- .../mathNet/Distributions/Hypergeometric.java | 1 - .../mathNet/Distributions/NegativeBinomial.java | 1 - 7 files changed, 20 insertions(+), 22 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java b/java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java index d0ff8bb4b..a8e1bfe49 100644 --- a/java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java +++ b/java/src/main/java/toolgood/algorithm/enums/AreaUnitType.java @@ -20,7 +20,7 @@ public enum AreaUnitType { DM2(13), /** - * 平方�? + * 平方�? */ M2(14), @@ -29,13 +29,13 @@ public enum AreaUnitType { */ KM2(15); - private final byte value; + private final int value; - AreaUnitType(byte value) { + AreaUnitType(int value) { this.value = value; } - public byte getValue() { + public int getValue() { return value; } } diff --git a/java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java b/java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java index 36da863b4..26f9586ba 100644 --- a/java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java +++ b/java/src/main/java/toolgood/algorithm/enums/DistanceUnitType.java @@ -20,7 +20,7 @@ public enum DistanceUnitType { DM(3), /** - * �? + * �? */ M(4), @@ -29,13 +29,13 @@ public enum DistanceUnitType { */ KM(5); - private final byte value; + private final int value; - DistanceUnitType(byte value) { + DistanceUnitType(int value) { this.value = value; } - public byte getValue() { + public int getValue() { return value; } } diff --git a/java/src/main/java/toolgood/algorithm/enums/MassUnitType.java b/java/src/main/java/toolgood/algorithm/enums/MassUnitType.java index a4d97e3ef..e2d4ea41b 100644 --- a/java/src/main/java/toolgood/algorithm/enums/MassUnitType.java +++ b/java/src/main/java/toolgood/algorithm/enums/MassUnitType.java @@ -5,7 +5,7 @@ public enum MassUnitType { /** - * �? + * �? */ G(31), @@ -15,17 +15,17 @@ public enum MassUnitType { KG(32), /** - * �? + * �? */ T(33); - private final byte value; + private final int value; - MassUnitType(byte value) { + MassUnitType(int value) { this.value = value; } - public byte getValue() { + public int getValue() { return value; } } diff --git a/java/src/main/java/toolgood/algorithm/enums/NumberUnitType.java b/java/src/main/java/toolgood/algorithm/enums/NumberUnitType.java index 7e361a758..cb40c9a4b 100644 --- a/java/src/main/java/toolgood/algorithm/enums/NumberUnitType.java +++ b/java/src/main/java/toolgood/algorithm/enums/NumberUnitType.java @@ -23,13 +23,13 @@ public enum NumberUnitType { KG(32), T(33); - private final byte value; + private final int value; - NumberUnitType(byte value) { + NumberUnitType(int value) { this.value = value; } - public byte getValue() { + public int getValue() { return value; } } diff --git a/java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java b/java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java index e12961cda..75f6ff95a 100644 --- a/java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java +++ b/java/src/main/java/toolgood/algorithm/enums/VolumeUnitType.java @@ -20,7 +20,7 @@ public enum VolumeUnitType { DM3(23), /** - * 立方�? + * 立方�? */ M3(24), @@ -29,13 +29,13 @@ public enum VolumeUnitType { */ KM3(25); - private final byte value; + private final int value; - VolumeUnitType(byte value) { + VolumeUnitType(int value) { this.value = value; } - public byte getValue() { + public int getValue() { return value; } } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java index d7f0775d6..ab84c3140 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Hypergeometric.java @@ -1,7 +1,6 @@ package toolgood.algorithm.mathNet.Distributions; import java.math.BigDecimal; -import java.math.MathContext; import toolgood.algorithm.system.MathEx; import toolgood.algorithm.mathNet.SpecialFunctions; diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java index fc350d755..7025a3508 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/NegativeBinomial.java @@ -1,7 +1,6 @@ package toolgood.algorithm.mathNet.Distributions; import java.math.BigDecimal; -import java.math.MathContext; import toolgood.algorithm.system.MathEx; import toolgood.algorithm.mathNet.SpecialFunctions; From f0a5bb21e5188ed3cfc8192a6202d3a36cf52944 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 14:52:32 +0800 Subject: [PATCH 75/98] fix --- .../csharp/Function_LASTINDEXOF.java | 2 +- .../functions/datetimes/Function_DATEDIF.java | 22 +++++++---- .../functions/datetimes/Function_DAYS.java | 14 ++++++- .../datetimes/Function_NETWORKDAYS.java | 3 +- .../datetimes/Function_TIMESTAMP.java | 2 +- .../datetimes/Function_YEARFRAC.java | 16 ++++++-- .../functions/financial/Function_XNPV.java | 6 +-- .../value/Function_GetJsonValue.java | 13 +++---- .../visitors/MathFunctionVisitor.java | 8 ++-- .../algorithm/mathNet/SpecialFunctions.java | 2 + .../toolgood/algorithm/operands/MyDate.java | 37 +++++++++++++++++++ 11 files changed, 94 insertions(+), 31 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java index 25055ca73..bbc2b36d7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_LASTINDEXOF.java @@ -52,7 +52,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction startMyDate.Year && day < 0) { - int days = startMyDate.ToDateTime().dayOfYear().withMaximumValue().getDayOfYear(); + int days = isLeapYear(startMyDate.Year) ? 366 : 365; day = days + day; } return Operand.Create(day); } else if (t.equalsIgnoreCase("MD")) { int mo = endMyDate.Day - startMyDate.Day; if (mo < 0) { - int days; - if (startMyDate.Month == 12) { - days = startMyDate.ToDateTime().withMonthOfYear(12).dayOfMonth().withMaximumValue().getDayOfMonth(); - } else { - days = startMyDate.ToDateTime().withMonthOfYear(startMyDate.Month).dayOfMonth().withMaximumValue().getDayOfMonth(); - } + int days = getDaysInMonth(startMyDate.Year, startMyDate.Month); mo += days; } return Operand.Create(mo); @@ -101,6 +98,15 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction 0) { + Calendar cal = new GregorianCalendar(Year, Month != null ? Month - 1 : 0, Day != null ? Day : 1); + int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK); + return dayOfWeek == Calendar.SUNDAY ? 7 : dayOfWeek - 1; + } + return 0; + } + + public int DayOfYear() { + if (Year != null && Year > 0) { + Calendar cal = new GregorianCalendar(Year, Month != null ? Month - 1 : 0, Day != null ? Day : 1); + return cal.get(Calendar.DAY_OF_YEAR); + } + return 0; + } + public long ToLong() { long d = 0; if (Year != null) { From 9392c8306a3b63ed61711fc07724672d22d095e6 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 15:05:13 +0800 Subject: [PATCH 76/98] fix --- java/pom.xml | 2 +- .../internals/functions/csharp/Function_SPLIT.java | 2 +- .../functions/datetimes/Function_DATEVALUE.java | 4 ++-- .../internals/functions/financial/Function_XIRR.java | 4 ++-- .../internals/visitors/MathFunctionVisitor.java | 10 +++++----- .../algorithm/mathNet/Distributions/Binomial.java | 2 +- .../algorithm/mathNet/Distributions/StudentT.java | 4 ++-- .../toolgood/algorithm/mathNet/ExcelFunctions.java | 4 ++-- .../toolgood/algorithm/mathNet/SpecialFunctions.java | 2 +- .../main/java/toolgood/algorithm/operands/MyDate.java | 2 +- 10 files changed, 18 insertions(+), 18 deletions(-) diff --git a/java/pom.xml b/java/pom.xml index c8a22ebd8..aac237f8f 100644 --- a/java/pom.xml +++ b/java/pom.xml @@ -93,7 +93,7 @@ maven-compiler-plugin 3.8.0 - GBK + UTF-8 1.8 1.8 diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java index d73b8dd4f..e4246c8f6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_SPLIT.java @@ -34,7 +34,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction dateMillis = new ArrayList<>(); for (Operand d : datesArg.ArrayValue()) { if (d.IsDate()) { - dateMillis.add(d.DateValue().ToDateTime().getMillis()); + dateMillis.add(d.DateValue().ToDateTime().getTime()); } else if (d.IsText()) { MyDate myDate = MyDate.parse(d.TextValue()); if (myDate == null) return ParameterError(2); - dateMillis.add(myDate.ToDateTime().getMillis()); + dateMillis.add(myDate.ToDateTime().getTime()); } else { return ParameterError(2); } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java index e5f987319..2089b7c35 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java @@ -234,7 +234,7 @@ public FunctionBase visitQUOTIENT_fun(mathParser.QUOTIENT_funContext ctx) { @Override public FunctionBase visitMOD_fun(mathParser.MOD_funContext ctx) { FunctionBase[] funcs = VisitExprs(ctx.expr()); - return new Function_MOD(funcs); + return new Function_Mod(funcs[0], funcs[1]); } @Override @@ -1568,25 +1568,25 @@ public FunctionBase visitSHA512_fun(mathParser.SHA512_funContext ctx) { @Override public FunctionBase visitHMACMD5_fun(mathParser.HMACMD5_funContext ctx) { FunctionBase[] funcs = VisitExprs(ctx.expr()); - return new Function_HMACMD5(funcs); + return new Function_HMACMD5(funcs[0], funcs[1]); } @Override public FunctionBase visitHMACSHA1_fun(mathParser.HMACSHA1_funContext ctx) { FunctionBase[] funcs = VisitExprs(ctx.expr()); - return new Function_HMACSHA1(funcs); + return new Function_HMACSHA1(funcs[0], funcs[1]); } @Override public FunctionBase visitHMACSHA256_fun(mathParser.HMACSHA256_funContext ctx) { FunctionBase[] funcs = VisitExprs(ctx.expr()); - return new Function_HMACSHA256(funcs); + return new Function_HMACSHA256(funcs[0], funcs[1]); } @Override public FunctionBase visitHMACSHA512_fun(mathParser.HMACSHA512_funContext ctx) { FunctionBase[] funcs = VisitExprs(ctx.expr()); - return new Function_HMACSHA512(funcs); + return new Function_HMACSHA512(funcs[0], funcs[1]); } @Override diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java index 02ef8f158..47c54773f 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/Binomial.java @@ -39,6 +39,6 @@ public static BigDecimal CDF(BigDecimal p, int n, BigDecimal x) { } BigDecimal k = new BigDecimal(Math.floor(x.doubleValue())); - return SpecialFunctions.BetaRegularized(n - k.intValue(), k.intValue() + 1, BigDecimal.ONE.subtract(p)); + return SpecialFunctions.BetaRegularized(new BigDecimal(n - k.intValue()), new BigDecimal(k.intValue() + 1), BigDecimal.ONE.subtract(p)); } } diff --git a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java index a45771061..dd93cd842 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/Distributions/StudentT.java @@ -9,7 +9,7 @@ public class StudentT { public static BigDecimal CDF(BigDecimal location, BigDecimal scale, int freedom, BigDecimal x) throws Exception { BigDecimal k = x.subtract(location).divide(scale, MathContext.DECIMAL128); - BigDecimal h = new BigDecimal(freedom).divide(freedom + k.multiply(k), MathContext.DECIMAL128); + BigDecimal h = new BigDecimal(freedom).divide(new BigDecimal(freedom).add(k.multiply(k)), MathContext.DECIMAL128); BigDecimal ib = new BigDecimal("0.5").multiply(SpecialFunctions.BetaRegularized( new BigDecimal(freedom).divide(new BigDecimal("2"), MathContext.DECIMAL128), new BigDecimal("0.5"), @@ -24,7 +24,7 @@ public static BigDecimal InvCDF(BigDecimal location, BigDecimal scale, int freed return Brent.FindRoot(x -> { BigDecimal k = x.subtract(location).divide(scale, MathContext.DECIMAL128); - BigDecimal h = new BigDecimal(freedom).divide(freedom + k.multiply(k), MathContext.DECIMAL128); + BigDecimal h = new BigDecimal(freedom).divide(new BigDecimal(freedom).add(k.multiply(k)), MathContext.DECIMAL128); try { BigDecimal ib = new BigDecimal("0.5").multiply(SpecialFunctions.BetaRegularized( new BigDecimal(freedom).divide(new BigDecimal("2"), MathContext.DECIMAL128), diff --git a/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java b/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java index b433f078a..7176eafe7 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/ExcelFunctions.java @@ -100,14 +100,14 @@ public static BigDecimal BinomDist(int k, int n, BigDecimal p, boolean state) { if (state == false) { return Binomial.PMF(p, n, k); } - return Binomial.CDF(p, n, k); + return Binomial.CDF(p, n, new BigDecimal(k)); } public static BigDecimal Poisson(int k, BigDecimal lambda, boolean state) { if (state == false) { return Poisson.PMF(lambda, k); } - return Poisson.CDF(lambda, k); + return Poisson.CDF(lambda, new BigDecimal(k)); } public static BigDecimal Quartile(BigDecimal[] array, int quant) throws Exception { diff --git a/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java b/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java index 0dfeeedaf..96fee50f6 100644 --- a/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java +++ b/java/src/main/java/toolgood/algorithm/mathNet/SpecialFunctions.java @@ -453,7 +453,7 @@ public static BigDecimal Erf(BigDecimal x) { x = x.abs(); BigDecimal t = one.divide(one.add(p.multiply(x)), MathContext.DECIMAL128); - BigDecimal y = one.subtract(((((a5.multiply(t).add(a4.multiply(t))).multiply(t)).add(a3.multiply(t))).multiply(t)).add(a2.multiply(t)).multiply(t)).add(a1.multiply(t)).multiply(MathEx.Expi(-x.multiply(x))); + BigDecimal y = one.subtract(((((a5.multiply(t).add(a4.multiply(t))).multiply(t)).add(a3.multiply(t))).multiply(t)).add(a2.multiply(t)).multiply(t)).add(a1.multiply(t)).multiply(Expi(x.negate().multiply(x))); return sign.multiply(y); } diff --git a/java/src/main/java/toolgood/algorithm/operands/MyDate.java b/java/src/main/java/toolgood/algorithm/operands/MyDate.java index 3f1fa8cc8..5ae9f2ad9 100644 --- a/java/src/main/java/toolgood/algorithm/operands/MyDate.java +++ b/java/src/main/java/toolgood/algorithm/operands/MyDate.java @@ -195,7 +195,7 @@ public String toString() { return stringBuffer.toString(); } - String toString(String f) { + public String toString(String f) { if (Year == null || Year == 0) { return this.toString(); } From 00aba5238b8e5b95f21346748583ce0a9c730a37 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Tue, 17 Mar 2026 16:43:41 +0800 Subject: [PATCH 77/98] fix --- .../{mathbase => mathtransformation}/Function_ARABIC.java | 0 .../{mathbase => mathtransformation}/Function_ROMAN.java | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathbase => mathtransformation}/Function_ARABIC.java (100%) rename java/src/main/java/toolgood/algorithm/internals/functions/{mathbase => mathtransformation}/Function_ROMAN.java (100%) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_ARABIC.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ARABIC.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_ARABIC.java diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_ROMAN.java similarity index 100% rename from java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_ROMAN.java rename to java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_ROMAN.java From 14b3a325261881ad4b3e49ccfa4b9d647ccd07dc Mon Sep 17 00:00:00 2001 From: linzhijun Date: Wed, 18 Mar 2026 12:41:53 +0800 Subject: [PATCH 78/98] =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../functions/csharpsecurity/Function_HMACMD5.java | 10 +++------- .../functions/csharpsecurity/Function_HMACSHA1.java | 10 +++------- .../functions/csharpsecurity/Function_HMACSHA256.java | 10 +++------- .../functions/csharpsecurity/Function_HMACSHA512.java | 10 +++------- .../functions/csharpsecurity/Function_MD5.java | 10 +++------- .../functions/csharpsecurity/Function_SHA1.java | 10 +++------- .../functions/csharpsecurity/Function_SHA256.java | 10 +++------- .../functions/csharpsecurity/Function_SHA512.java | 10 +++------- .../functions/mathtransformation/Function_ARABIC.java | 2 +- .../functions/mathtransformation/Function_ROMAN.java | 6 +----- 10 files changed, 26 insertions(+), 62 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java index 63d5ed71e..b2c9f7a30 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java @@ -38,13 +38,9 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { - if (func1 == null) { - return ParameterError(1); - } - Operand numArg = GetNumber_1(engine, tempParameter); if (numArg.IsErrorOrNone()) { return numArg; From 5f6f845db2f28b3024eba45e88f0fcb9e000096c Mon Sep 17 00:00:00 2001 From: linzhijun Date: Wed, 18 Mar 2026 12:45:39 +0800 Subject: [PATCH 79/98] =?UTF-8?q?=E5=90=8C=E6=AD=A5=20C#=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E4=BF=AE=E6=94=B9=E5=88=B0=20Java=20?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internals/functions/csharpsecurity/Function_HMACMD5.java | 4 ++-- .../internals/functions/csharpsecurity/Function_HMACSHA1.java | 4 ++-- .../functions/csharpsecurity/Function_HMACSHA256.java | 4 ++-- .../functions/csharpsecurity/Function_HMACSHA512.java | 4 ++-- .../internals/functions/csharpsecurity/Function_MD5.java | 4 ++-- .../internals/functions/csharpsecurity/Function_SHA1.java | 4 ++-- .../internals/functions/csharpsecurity/Function_SHA256.java | 4 ++-- .../internals/functions/csharpsecurity/Function_SHA512.java | 4 ++-- .../functions/mathtransformation/Function_ARABIC.java | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java index b2c9f7a30..3c8061c88 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACMD5.java @@ -17,8 +17,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_HMACMD5 extends Function_2 { - public Function_HMACMD5(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + public Function_HMACMD5(FunctionBase[] funcs) { + super(funcs); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java index 2ad1612b9..60d3a21d9 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA1.java @@ -17,8 +17,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_HMACSHA1 extends Function_2 { - public Function_HMACSHA1(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + public Function_HMACSHA1(FunctionBase[] funcs) { + super(funcs); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java index 5fd9fba86..b33c26522 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA256.java @@ -17,8 +17,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_HMACSHA256 extends Function_2 { - public Function_HMACSHA256(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + public Function_HMACSHA256(FunctionBase[] funcs) { + super(funcs); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java index f110e515a..3615be0de 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_HMACSHA512.java @@ -17,8 +17,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_HMACSHA512 extends Function_2 { - public Function_HMACSHA512(FunctionBase func1, FunctionBase func2) { - super(func1, func2); + public Function_HMACSHA512(FunctionBase[] funcs) { + super(funcs); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java index 7ebfa6780..4d5926875 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java @@ -15,8 +15,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_MD5 extends Function_1 { - public Function_MD5(FunctionBase func1) { - super(func1); + public Function_MD5(FunctionBase[] funcs) { + super(funcs); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java index 02b7e6270..1515e59e7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java @@ -15,8 +15,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_SHA1 extends Function_1 { - public Function_SHA1(FunctionBase func1) { - super(func1); + public Function_SHA1(FunctionBase[] funcs) { + super(funcs); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java index 33a5d0759..497387665 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java @@ -15,8 +15,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_SHA256 extends Function_1 { - public Function_SHA256(FunctionBase func1) { - super(func1); + public Function_SHA256(FunctionBase[] funcs) { + super(funcs); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java index 5b2dd0ff7..b4e535c6f 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java @@ -15,8 +15,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_SHA512 extends Function_1 { - public Function_SHA512(FunctionBase func1) { - super(func1); + public Function_SHA512(FunctionBase[] funcs) { + super(funcs); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_ARABIC.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_ARABIC.java index 1f9a07afb..9771ae71e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_ARABIC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathtransformation/Function_ARABIC.java @@ -12,8 +12,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_ARABIC extends Function_1 { - public Function_ARABIC(FunctionBase func1) { - super(func1); + public Function_ARABIC(FunctionBase[] funcs) { + super(funcs); } @Override From 709936c4d13e40fc37d3815a2320de591dd4dafb Mon Sep 17 00:00:00 2001 From: linzhijun Date: Wed, 18 Mar 2026 12:48:58 +0800 Subject: [PATCH 80/98] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=20Java=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E6=9E=84=E9=80=A0=E5=87=BD=E6=95=B0=EF=BC=8C=E4=B8=8E?= =?UTF-8?q?=20C#=20=E7=89=88=E6=9C=AC=E4=BF=9D=E6=8C=81=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internals/functions/csharpsecurity/Function_SHA1.java | 4 ++-- .../internals/functions/csharpsecurity/Function_SHA256.java | 4 ++-- .../internals/functions/csharpsecurity/Function_SHA512.java | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java index 1515e59e7..02b7e6270 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA1.java @@ -15,8 +15,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_SHA1 extends Function_1 { - public Function_SHA1(FunctionBase[] funcs) { - super(funcs); + public Function_SHA1(FunctionBase func1) { + super(func1); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java index 497387665..33a5d0759 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA256.java @@ -15,8 +15,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_SHA256 extends Function_1 { - public Function_SHA256(FunctionBase[] funcs) { - super(funcs); + public Function_SHA256(FunctionBase func1) { + super(func1); } @Override diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java index b4e535c6f..5b2dd0ff7 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_SHA512.java @@ -15,8 +15,8 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_SHA512 extends Function_1 { - public Function_SHA512(FunctionBase[] funcs) { - super(funcs); + public Function_SHA512(FunctionBase func1) { + super(func1); } @Override From 6d505ddc21f440c9a5c7d21d6ce39fcc2b171829 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Wed, 18 Mar 2026 12:53:09 +0800 Subject: [PATCH 81/98] =?UTF-8?q?=E5=90=8C=E6=AD=A5=20C#=20=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E7=9A=84=E4=BF=AE=E6=94=B9=E5=88=B0=20Java=20?= =?UTF-8?q?=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../functions/csharpweb/Function_TEXTTOBASE64.java | 10 +++------- .../csharpweb/Function_TEXTTOBASE64URL.java | 13 +++---------- .../functions/datetimes/Function_DATEVALUE.java | 3 --- .../functions/datetimes/Function_YEARFRAC.java | 3 --- .../functions/mathbase/Function_DELTA.java | 2 -- .../functions/mathbase/Function_GESTEP.java | 2 -- .../internals/functions/value/Function_ERROR.java | 3 --- 7 files changed, 6 insertions(+), 30 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java index 0ba8375b7..417c2cfe1 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_TEXTTOBASE64.java @@ -29,13 +29,9 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { - if (func1 == null) - return ParameterError(1); - Operand args1 = func1.Evaluate(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java index bd1d82013..1a7507a6b 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/datetimes/Function_YEARFRAC.java @@ -24,9 +24,6 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { - if (func1 == null || func2 == null) - return ParameterError(1); - Operand startDateArg = GetDate_1(engine, tempParameter); if (startDateArg.IsErrorOrNone()) return startDateArg; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java index bdef582b5..958b6409c 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_DELTA.java @@ -24,8 +24,6 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { - if (func1 == null) return ParameterError(1); - Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java index ad4a79a48..b479b2cde 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_GESTEP.java @@ -24,8 +24,6 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { - if (func1 == null) return ParameterError(1); - Operand args1 = GetNumber_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java index 1e48c914f..485e2bb9d 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_ERROR.java @@ -22,9 +22,6 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, java.util.function.BiFunction tempParameter) throws Exception { - if (func1 == null) { - return Operand.Error(""); - } Operand args1 = GetText_1(engine, tempParameter); if (args1.IsErrorOrNone()) { return args1; From f0ff14c977b616df715a75ce16aee3e79571e2b9 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Wed, 18 Mar 2026 12:53:35 +0800 Subject: [PATCH 82/98] fix --- .../internals/functions/csharpsecurity/Function_MD5.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java index 4d5926875..782aa14d0 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpsecurity/Function_MD5.java @@ -15,9 +15,10 @@ import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_MD5 extends Function_1 { - public Function_MD5(FunctionBase[] funcs) { - super(funcs); - } + public Function_MD5(FunctionBase func1) + { + super(func1); + } @Override public String Name() { From 33232d431d92594cb68c94a2659fc8adefe73fb1 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Wed, 18 Mar 2026 13:23:46 +0800 Subject: [PATCH 83/98] fix --- .../internals/visitors/MathFunctionVisitor.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java index 2089b7c35..914fa5d16 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/MathFunctionVisitor.java @@ -719,7 +719,7 @@ public FunctionBase visitSUMXMY2_fun(mathParser.SUMXMY2_funContext ctx) { @Override public FunctionBase visitARABIC_fun(mathParser.ARABIC_funContext ctx) { FunctionBase func = visit(ctx.expr()); - return new Function_ARABIC(func); + return new Function_ARABIC(new FunctionBase[]{func}); } @Override @@ -1568,25 +1568,25 @@ public FunctionBase visitSHA512_fun(mathParser.SHA512_funContext ctx) { @Override public FunctionBase visitHMACMD5_fun(mathParser.HMACMD5_funContext ctx) { FunctionBase[] funcs = VisitExprs(ctx.expr()); - return new Function_HMACMD5(funcs[0], funcs[1]); + return new Function_HMACMD5(funcs); } @Override public FunctionBase visitHMACSHA1_fun(mathParser.HMACSHA1_funContext ctx) { FunctionBase[] funcs = VisitExprs(ctx.expr()); - return new Function_HMACSHA1(funcs[0], funcs[1]); + return new Function_HMACSHA1(funcs); } @Override public FunctionBase visitHMACSHA256_fun(mathParser.HMACSHA256_funContext ctx) { FunctionBase[] funcs = VisitExprs(ctx.expr()); - return new Function_HMACSHA256(funcs[0], funcs[1]); + return new Function_HMACSHA256(funcs); } @Override public FunctionBase visitHMACSHA512_fun(mathParser.HMACSHA512_funContext ctx) { FunctionBase[] funcs = VisitExprs(ctx.expr()); - return new Function_HMACSHA512(funcs[0], funcs[1]); + return new Function_HMACSHA512(funcs); } @Override From db22bf0f05591c93ab0df9fc94bbe2ca6d994f31 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Wed, 18 Mar 2026 15:48:48 +0800 Subject: [PATCH 84/98] fix --- .../algorithm/AlgorithmEngineHelper.java | 340 ++++++++---------- .../algorithm/enums/CalculateTreeType.java | 10 +- .../algorithm/enums/ConditionTreeType.java | 18 - .../algorithm/internals/DiyNameInfo.java | 46 +-- .../algorithm/internals/DiyNameKeyInfo.java | 42 ++- .../algorithm/internals/ParameterType.java | 51 ++- .../functions/mathbase/Function_SIGN.java | 11 +- .../functions/value/Function_PARAMETER.java | 8 +- .../internals/visitors/DiyNameVisitor.java | 21 +- 9 files changed, 268 insertions(+), 279 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java index c6875e0f2..6602f886d 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java @@ -1,25 +1,22 @@ +/** + * 算法引擎助手 + */ package toolgood.algorithm; -import java.math.BigDecimal; import java.util.regex.Pattern; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; +import java.math.BigDecimal; import toolgood.algorithm.enums.CalculateTreeType; import toolgood.algorithm.enums.ConditionTreeType; import toolgood.algorithm.internals.CalculateTree; import toolgood.algorithm.internals.ConditionTree; import toolgood.algorithm.internals.DiyNameInfo; +import toolgood.algorithm.internals.DiyNameKeyInfo; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.functions.operator.Function_AND; -import toolgood.algorithm.internals.functions.operator.Function_OR; -import toolgood.algorithm.internals.functions.operator.Function_Add; -import toolgood.algorithm.internals.functions.operator.Function_Sub; -import toolgood.algorithm.internals.functions.operator.Function_Mul; -import toolgood.algorithm.internals.functions.operator.Function_Div; -import toolgood.algorithm.internals.functions.operator.Function_Mod; -import toolgood.algorithm.internals.functions.operator.Function_Connect; +import toolgood.algorithm.internals.visitors.AntlrCharStream; import toolgood.algorithm.internals.visitors.AntlrErrorTextWriter; import toolgood.algorithm.internals.visitors.DiyNameVisitor; import toolgood.algorithm.internals.visitors.MathFunctionVisitor; @@ -32,199 +29,149 @@ import toolgood.algorithm.unitConversion.MassConverter; import toolgood.algorithm.unitConversion.VolumeConverter; -/** - * 算法引擎助手(静态工具类�? - */ -public final class AlgorithmEngineHelper { - - private static final Pattern UNIT_REGEX = Pattern.compile("[\\s\\(\\)()\\[\\]<>]"); - - /** 工具类,不可实例�?*/ - private AlgorithmEngineHelper() { - } +public class AlgorithmEngineHelper { + private static final Pattern unitRegex = Pattern.compile("[\\s\\(\\)()\\[\\]<>]"); - // ------------------------------------------------------------------------- - // 内部:创建解析上下文 - // ------------------------------------------------------------------------- - - /** - * 创建 ANTLR 解析上下�? - * - * @param exp 表达式字符串 - * @return [0] AntlrErrorTextWriter,[1] mathParser.ProgContext - */ - static Object[] createParserContext(String exp) { + static ParserContext CreateParserContext(String exp) { AntlrErrorTextWriter errorWriter = new AntlrErrorTextWriter(); - org.antlr.v4.runtime.CharStream stream = CharStreams.fromString(exp); + AntlrCharStream stream = new AntlrCharStream(CharStreams.fromString(exp)); mathLexer lexer = new mathLexer(stream); CommonTokenStream tokens = new CommonTokenStream(lexer); mathParser parser = new mathParser(tokens); mathParser.ProgContext context = parser.prog(); - return new Object[]{errorWriter, context}; + return new ParserContext(errorWriter, context); } - // ------------------------------------------------------------------------- - // 公共 API - // ------------------------------------------------------------------------- - - /** - * 判断字符串是否是合法单参数名(既不包含函数调用,又只包含一个参数且与原字符串相同) - * - * @param parameter 待检测字符串 - * @return 是否是参�? - */ + /// + /// 是不是参数 + /// + /// + /// public static boolean IsParameter(String parameter) { if (parameter == null || parameter.trim().isEmpty()) { return false; } try { DiyNameInfo diy = GetDiyNames(parameter); - if (!diy.Functions.isEmpty()) { + if (diy.getFunctions().size() > 0) { return false; } - if (diy.Parameters.size() == 1) { - DiyNameInfo.KeyInfo p = diy.Parameters.get(0); - return parameter.equals(p.Name); + if (diy.getParameters().size() == 1) { + DiyNameKeyInfo p = diy.getParameters().get(0); + return p.getName().equals(parameter); } - } catch (Exception ignored) { + } catch (Exception e) { } return false; } - /** - * 获取表达式中使用到的 DIY 名称(参数名和函数名�? - * - * @param exp 表达式字符串 - * @return DiyNameInfo - * @throws Exception 解析失败时抛�? - */ + /// + /// 获取 DIY 名称 + /// + /// + /// + /// public static DiyNameInfo GetDiyNames(String exp) throws Exception { if (exp == null || exp.trim().isEmpty()) { throw new Exception("Parameter exp invalid !"); } - Object[] result = createParserContext(exp); - AntlrErrorTextWriter errorWriter = (AntlrErrorTextWriter) result[0]; - if (errorWriter.IsError()) { - throw new Exception(errorWriter.ErrorMsg()); + ParserContext context = CreateParserContext(exp); + if (context.errorWriter.IsError()) { + throw new Exception(context.errorWriter.ErrorMsg()); } - mathParser.ProgContext context = (mathParser.ProgContext) result[1]; DiyNameVisitor visitor = new DiyNameVisitor(); - visitor.visit(context); + visitor.visit(context.context); return visitor.diy; } - /** - * 单位转换 - * - * @param src 原始数�? - * @param oldSrcUnit 源单�? - * @param oldTarUnit 目标单位 - * @return 转换后的 BigDecimal - * @throws Exception 单位不兼容时抛出 - */ - public static BigDecimal UnitConversion(BigDecimal src, String oldSrcUnit, String oldTarUnit) throws Exception { - return UnitConversion(src, oldSrcUnit, oldTarUnit, null); - } - - /** - * 单位转换(带名称提示�? - * - * @param src 原始数�? - * @param oldSrcUnit 源单�? - * @param oldTarUnit 目标单位 - * @param name 输入项名称(用于错误信息,可�?null�? - * @return 转换后的 BigDecimal - * @throws Exception 单位不兼容时抛出 - */ - public static BigDecimal UnitConversion(BigDecimal src, String oldSrcUnit, String oldTarUnit, String name) throws Exception { - if (oldSrcUnit == null || oldSrcUnit.trim().isEmpty() - || oldTarUnit == null || oldTarUnit.trim().isEmpty()) { + /// + /// 单位转换 + /// + /// + /// + /// + /// + /// + /// + public static double UnitConversion(double src, String oldSrcUnit, String oldTarUnit, String name) throws Exception { + if (oldSrcUnit == null || oldSrcUnit.trim().isEmpty() || oldTarUnit == null || oldTarUnit.trim().isEmpty()) { return src; } if (oldSrcUnit.equals(oldTarUnit)) { return src; } - BigDecimal result = tryConvert(src, oldSrcUnit, oldTarUnit); + Double result = TryConvert(src, oldSrcUnit, oldTarUnit); if (result != null) { return result; } - String cleanedSrcUnit = UNIT_REGEX.matcher(oldSrcUnit).replaceAll(""); - result = tryConvert(src, cleanedSrcUnit, oldTarUnit); + oldSrcUnit = unitRegex.matcher(oldSrcUnit).replaceAll(""); + result = TryConvert(src, oldSrcUnit, oldTarUnit); if (result != null) { return result; } if (name == null || name.isEmpty()) { - throw new Exception( - "The input item has different units and cannot be converted from [" + oldSrcUnit + "] to [" + oldTarUnit + "]"); + throw new Exception(String.format("The input item has different units and cannot be converted from [%s] to [%s]", oldSrcUnit, oldTarUnit)); } - throw new Exception( - "The input item [" + name + "] has different units and cannot be converted from [" + oldSrcUnit + "] to [" + oldTarUnit + "]"); + throw new Exception(String.format("The input item [%s] has different units and cannot be converted from [%s] to [%s]", name, oldSrcUnit, oldTarUnit)); } - private static BigDecimal tryConvert(BigDecimal src, String srcUnit, String tarUnit) { + private static Double TryConvert(double src, String srcUnit, String tarUnit) { try { if (DistanceConverter.Exists(srcUnit, tarUnit)) { - return new DistanceConverter(srcUnit, tarUnit).LeftToRight(src); + return new DistanceConverter(srcUnit, tarUnit).LeftToRight(new BigDecimal(src)).doubleValue(); } if (MassConverter.Exists(srcUnit, tarUnit)) { - return new MassConverter(srcUnit, tarUnit).LeftToRight(src); + return new MassConverter(srcUnit, tarUnit).LeftToRight(new BigDecimal(src)).doubleValue(); } if (AreaConverter.Exists(srcUnit, tarUnit)) { - return new AreaConverter(srcUnit, tarUnit).LeftToRight(src); + return new AreaConverter(srcUnit, tarUnit).LeftToRight(new BigDecimal(src)).doubleValue(); } if (VolumeConverter.Exists(srcUnit, tarUnit)) { - return new VolumeConverter(srcUnit, tarUnit).LeftToRight(src); + return new VolumeConverter(srcUnit, tarUnit).LeftToRight(new BigDecimal(src)).doubleValue(); } - } catch (Exception ignored) { + } catch (Exception e) { } return null; } - /** - * 编译公式,返回可执行�?FunctionBase - * - * @param exp 公式字符�? - * @return 编译后的 FunctionBase - * @throws Exception 解析失败时抛�? - */ + /// + /// 编译公式 + /// + /// 公式 + /// public static FunctionBase ParseFormula(String exp) throws Exception { if (exp == null || exp.trim().isEmpty()) { throw new Exception("Parameter exp invalid !"); } - Object[] result = createParserContext(exp); - AntlrErrorTextWriter errorWriter = (AntlrErrorTextWriter) result[0]; - if (errorWriter.IsError()) { - throw new Exception(errorWriter.ErrorMsg()); + ParserContext context = CreateParserContext(exp); + if (context.errorWriter.IsError()) { + throw new Exception(context.errorWriter.ErrorMsg()); } - mathParser.ProgContext context = (mathParser.ProgContext) result[1]; MathFunctionVisitor visitor = new MathFunctionVisitor(); - return visitor.visit(context); + return visitor.visitProg(context.context); } - /** - * 检查公式语法是否正�? - * - * @param exp 公式字符�? - * @return 是否正确 - */ + /// + /// 检查公式是否正确 + /// + /// + /// public static boolean CheckFormula(String exp) { if (exp == null || exp.trim().isEmpty()) { return false; } - Object[] result = createParserContext(exp); - AntlrErrorTextWriter errorWriter = (AntlrErrorTextWriter) result[0]; - return !errorWriter.IsError(); + ParserContext context = CreateParserContext(exp); + return !context.errorWriter.IsError(); } - /** - * 解析条件表达式,生成 ConditionTree - * - * @param condition 条件字符�? - * @return ConditionTree - */ + /// + /// 解析条件 + /// + /// + /// public static ConditionTree ParseCondition(String condition) { ConditionTree tree = new ConditionTree(); if (condition == null || condition.trim().isEmpty()) { @@ -233,16 +180,14 @@ public static ConditionTree ParseCondition(String condition) { return tree; } try { - Object[] result = createParserContext(condition); - AntlrErrorTextWriter errorWriter = (AntlrErrorTextWriter) result[0]; - if (errorWriter.IsError()) { + ParserContext context = CreateParserContext(condition); + if (context.errorWriter.IsError()) { tree.Type = ConditionTreeType.Error; - tree.ErrorMessage = errorWriter.ErrorMsg(); + tree.ErrorMessage = context.errorWriter.ErrorMsg(); return tree; } - mathParser.ProgContext context = (mathParser.ProgContext) result[1]; MathSplitVisitor visitor = new MathSplitVisitor(); - return visitor.visit(context); + return visitor.visitProg(context.context); } catch (Exception ex) { tree.Type = ConditionTreeType.Error; tree.ErrorMessage = ex.getMessage(); @@ -250,34 +195,31 @@ public static ConditionTree ParseCondition(String condition) { return tree; } - /** - * 创建 AND 逻辑函数(左 AND 右) - * - * @param left 左操作数函数 - * @param right 右操作数函数 - * @return AND 函数 - */ + /// + /// Creates a logical AND function that combines two specified functions. + /// + /// The left operand of the AND operation, representing the first function to be combined. + /// The right operand of the AND operation, representing the second function to be combined. + /// A new instance that represents the logical AND of the specified functions. public static FunctionBase Condition_And(FunctionBase left, FunctionBase right) { - return new Function_AND(left, right); + return new toolgood.algorithm.internals.functions.operator.Function_AND(left, right); } - /** - * 创建 OR 逻辑函数(左 OR 右) - * - * @param left 左操作数函数 - * @param right 右操作数函数 - * @return OR 函数 - */ + /// + /// Creates a logical OR function that combines two specified functions. + /// + /// The left operand of the OR operation, representing the first function to be combined. + /// The right operand of the OR operation, representing the second function to be combined. + /// A new instance that represents the logical OR of the specified functions. public static FunctionBase Condition_Or(FunctionBase left, FunctionBase right) { - return new Function_OR(left, right); + return new toolgood.algorithm.internals.functions.operator.Function_OR(left, right); } - /** - * 解析计算表达式,生成 CalculateTree - * - * @param exp 表达式字符串 - * @return CalculateTree - */ + /// + /// 解析计算表达式 + /// + /// + /// public static CalculateTree ParseCalculate(String exp) { CalculateTree tree = new CalculateTree(); if (exp == null || exp.trim().isEmpty()) { @@ -286,16 +228,14 @@ public static CalculateTree ParseCalculate(String exp) { return tree; } try { - Object[] result = createParserContext(exp); - AntlrErrorTextWriter errorWriter = (AntlrErrorTextWriter) result[0]; - if (errorWriter.IsError()) { + ParserContext context = CreateParserContext(exp); + if (context.errorWriter.IsError()) { tree.Type = CalculateTreeType.Error; - tree.ErrorMessage = errorWriter.ErrorMsg(); + tree.ErrorMessage = context.errorWriter.ErrorMsg(); return tree; } - mathParser.ProgContext context = (mathParser.ProgContext) result[1]; MathSplitVisitor2 visitor = new MathSplitVisitor2(); - return visitor.visit(context); + return visitor.visitProg(context.context); } catch (Exception ex) { tree.Type = CalculateTreeType.Error; tree.ErrorMessage = ex.getMessage(); @@ -303,45 +243,75 @@ public static CalculateTree ParseCalculate(String exp) { return tree; } - /** - * 创建加法运算函数 - */ + /// + /// Creates a function that represents the sum of two specified functions. + /// + /// The first function to be added. + /// The second function to be added. + /// A function that computes the sum of the values returned by the specified functions. public static FunctionBase Calculate_Add(FunctionBase left, FunctionBase right) { - return new Function_Add(left, right); + return new toolgood.algorithm.internals.functions.operator.Function_Add(left, right); } - /** - * 创建减法运算函数 - */ + /// + /// Creates a function that represents the subtraction of two functions. + /// + /// The function to use as the minuend in the subtraction operation. Cannot be null. + /// The function to use as the subtrahend in the subtraction operation. Cannot be null. + /// A function that, when evaluated, returns the result of subtracting the value of the right function from the value + /// of the left function. public static FunctionBase Calculate_Subtract(FunctionBase left, FunctionBase right) { - return new Function_Sub(left, right); + return new toolgood.algorithm.internals.functions.operator.Function_Sub(left, right); } - /** - * 创建乘法运算函数 - */ + /// + /// Creates a function that represents the multiplication of two functions. + /// + /// The left operand function to be multiplied. + /// The right operand function to be multiplied. + /// A function representing the product of the specified left and right functions. public static FunctionBase Calculate_Multiply(FunctionBase left, FunctionBase right) { - return new Function_Mul(left, right); + return new toolgood.algorithm.internals.functions.operator.Function_Mul(left, right); } - /** - * 创建除法运算函数 - */ + /// + /// Creates a function that represents the division of two functions. + /// + /// The numerator function to be divided. + /// The denominator function by which to divide. + /// A function representing the result of dividing the left function by the right function. public static FunctionBase Calculate_Divide(FunctionBase left, FunctionBase right) { - return new Function_Div(left, right); + return new toolgood.algorithm.internals.functions.operator.Function_Div(left, right); } - /** - * 创建取模运算函数 - */ + /// + /// Creates a function that computes the remainder after dividing the result of the left function by the result of the + /// right function. + /// + /// The function representing the dividend in the modulo operation. Cannot be null. + /// The function representing the divisor in the modulo operation. Cannot be null. + /// A function that, when evaluated, returns the result of the left function modulo the right function. public static FunctionBase Calculate_Mod(FunctionBase left, FunctionBase right) { - return new Function_Mod(left, right); + return new toolgood.algorithm.internals.functions.operator.Function_Mod(left, right); } - /** - * 创建字符串连接函�? - */ + /// + /// Creates a new function that represents the connection of two functions. + /// + /// The first function to be connected. Cannot be null. + /// The second function to be connected. Cannot be null. + /// A FunctionBase instance representing the connection of the specified left and right functions. public static FunctionBase Calculate_Connect(FunctionBase left, FunctionBase right) { - return new Function_Connect(left, right); + return new toolgood.algorithm.internals.functions.operator.Function_Connect(left, right); + } + + static class ParserContext { + public AntlrErrorTextWriter errorWriter; + public mathParser.ProgContext context; + + public ParserContext(AntlrErrorTextWriter errorWriter, mathParser.ProgContext context) { + this.errorWriter = errorWriter; + this.context = context; + } } } diff --git a/java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java b/java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java index 4978982c0..3d8262ee6 100644 --- a/java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java +++ b/java/src/main/java/toolgood/algorithm/enums/CalculateTreeType.java @@ -1,5 +1,5 @@ /** - * 计算树类�? + * 计算树类型 */ package toolgood.algorithm.enums; @@ -9,19 +9,19 @@ public enum CalculateTreeType { */ String, /** - * �? + * 加 */ Add, /** - * �? + * 减 */ Sub, /** - * �? + * 乘 */ Mul, /** - * �? + * 除 */ Div, /** diff --git a/java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java b/java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java index 77cf59dcb..6a5e14f18 100644 --- a/java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java +++ b/java/src/main/java/toolgood/algorithm/enums/ConditionTreeType.java @@ -1,26 +1,8 @@ -/** - * 条件树类�? - */ package toolgood.algorithm.enums; public enum ConditionTreeType { - /** - * 文本 - */ String, - - /** - * �? - */ And, - - /** - * �? - */ Or, - - /** - * 错误 - */ Error } diff --git a/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java b/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java index 8360ea699..5b1c70954 100644 --- a/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java +++ b/java/src/main/java/toolgood/algorithm/internals/DiyNameInfo.java @@ -1,5 +1,5 @@ /** - * 自定义类�? + * 自定义类型 */ package toolgood.algorithm.internals; @@ -8,44 +8,28 @@ public final class DiyNameInfo { /** - * 自定�?参数 + * 自定义 参数 */ - public final List Parameters; + private List parameters; /** - * 自定义方�? + * 自定义方法 */ - public final List Functions; + private List functions; /** - * 自定义类�? + * 自定义类型 */ - public DiyNameInfo() { - Parameters = new ArrayList<>(); - Functions = new ArrayList<>(); + public DiyNameInfo() { + parameters = new ArrayList(); + functions = new ArrayList(); } - - /** - * 关键字信�? - */ - public class KeyInfo { - /** - * 名称 - */ - public String Name; - /** - * 开始位�? - */ - public int Start; - /** - * 结束位置 - */ - public int End; - - @Override - public String toString() { - return Name; - } + public List getParameters() { + return parameters; + } + + public List getFunctions() { + return functions; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/DiyNameKeyInfo.java b/java/src/main/java/toolgood/algorithm/internals/DiyNameKeyInfo.java index c66111131..e70ecdda5 100644 --- a/java/src/main/java/toolgood/algorithm/internals/DiyNameKeyInfo.java +++ b/java/src/main/java/toolgood/algorithm/internals/DiyNameKeyInfo.java @@ -1,26 +1,48 @@ -package toolgood.algorithm.internals; - /** - * 关键字信�? + * 关键字信息 */ +package toolgood.algorithm.internals; + public class DiyNameKeyInfo { /** * 名称 */ - public String Name; - + private String name; /** - * 开始位�? + * 开始位置 */ - public int Start; - + private int start; /** * 结束位置 */ - public int End; + private int end; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public int getStart() { + return start; + } + + public void setStart(int start) { + this.start = start; + } + + public int getEnd() { + return end; + } + + public void setEnd(int end) { + this.end = end; + } @Override public String toString() { - return Name; + return name; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/ParameterType.java b/java/src/main/java/toolgood/algorithm/internals/ParameterType.java index dbe3e47a0..79326153e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/ParameterType.java +++ b/java/src/main/java/toolgood/algorithm/internals/ParameterType.java @@ -1,28 +1,59 @@ +/** + * 参数类型类 + */ package toolgood.algorithm.internals; import toolgood.algorithm.enums.OperandType; -/** - * 参数类型�? - */ public class ParameterType { /** * 参数名称 */ - public String Name; - + private String name; /** * 参数类型 */ - public OperandType Type; + private OperandType type; /** - * 操作符,可为�? + * 操作符,可为空 */ - public String Operator; + private String operator; /** - * 操作值,可为�? + * 操作值,可为空 */ - public String Value; + private String value; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public OperandType getType() { + return type; + } + + public void setType(OperandType type) { + this.type = type; + } + + public String getOperator() { + return operator; + } + + public void setOperator(String operator) { + this.operator = operator; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java index 1f4b425b0..675089ed6 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/mathbase/Function_SIGN.java @@ -7,8 +7,8 @@ import toolgood.algorithm.Operand; import toolgood.algorithm.enums.OperandType; import toolgood.algorithm.internals.ParameterType; -import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.Function_1; +import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.functions.NoneEngine; public final class Function_SIGN extends Function_1 { @@ -24,10 +24,10 @@ public String Name() { @Override public Operand Evaluate(AlgorithmEngine engine, BiFunction tempParameter) throws Exception { Operand args1 = GetNumber_1(engine, tempParameter); - if (args1.IsErrorOrNone()) { + if (args1.IsError() || args1.IsNone()) { return args1; } - return Operand.Create(args1.NumberValue().signum()); + return Operand.Create(Math.signum(args1.NumberValue().doubleValue())); } @Override @@ -36,8 +36,7 @@ public OperandType GetResultType() { } @Override - public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, - String op, String val) { - func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER); + public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { + func1.GetParameterTypes(noneEngine, result, OperandType.NUMBER, null, null); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java index 35164a93f..fd9bd7d98 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/value/Function_PARAMETER.java @@ -46,10 +46,10 @@ public OperandType GetResultType() { @Override public void GetParameterTypes(NoneEngine noneEngine, List result, OperandType operandType, String op, String val) { ParameterType pt = new ParameterType(); - pt.Name = name; - pt.Type = operandType; - pt.Operator = op; - pt.Value = val; + pt.setName(name); + pt.setType(operandType); + pt.setOperator(op); + pt.setValue(val); result.add(pt); } } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java b/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java index a24b2c5d8..b81251b17 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/DiyNameVisitor.java @@ -5,17 +5,18 @@ import toolgood.algorithm.math.mathBaseVisitor; import toolgood.algorithm.math.mathParser.*; import toolgood.algorithm.internals.DiyNameInfo; +import toolgood.algorithm.internals.DiyNameKeyInfo; public final class DiyNameVisitor extends mathBaseVisitor { public DiyNameInfo diy = new DiyNameInfo(); private void AddParameter(TerminalNode node) { if (node != null) { - DiyNameInfo.KeyInfo keyInfo = diy.new KeyInfo(); - keyInfo.Name = node.getText(); - keyInfo.Start = node.getSymbol().getStartIndex(); - keyInfo.End = node.getSymbol().getStopIndex(); - diy.Parameters.add(keyInfo); + DiyNameKeyInfo keyInfo = new DiyNameKeyInfo(); + keyInfo.setName(node.getText()); + keyInfo.setStart(node.getSymbol().getStartIndex()); + keyInfo.setEnd(node.getSymbol().getStopIndex()); + diy.getParameters().add(keyInfo); } } @@ -34,11 +35,11 @@ public Object visitGetJsonValue_fun(GetJsonValue_funContext context) { @Override public Object visitDiyFunction_fun(DiyFunction_funContext context) { TerminalNode node = context.PARAMETER(); - DiyNameInfo.KeyInfo keyInfo = diy.new KeyInfo(); - keyInfo.Name = node.getText(); - keyInfo.Start = node.getSymbol().getStartIndex(); - keyInfo.End = node.getSymbol().getStopIndex(); - diy.Functions.add(keyInfo); + DiyNameKeyInfo keyInfo = new DiyNameKeyInfo(); + keyInfo.setName(node.getText()); + keyInfo.setStart(node.getSymbol().getStartIndex()); + keyInfo.setEnd(node.getSymbol().getStopIndex()); + diy.getFunctions().add(keyInfo); return visitChildren(context); } } From 16f1e627a2e63ad65a29108e17d640451d3416ad Mon Sep 17 00:00:00 2001 From: linzhijun Date: Wed, 18 Mar 2026 15:49:19 +0800 Subject: [PATCH 85/98] fix --- .../algorithm/Tests/AlgorithmEngineTest.java | 270 --------- .../Tests/AlgorithmEngineTest_csharp.java | 308 ---------- .../Tests/AlgorithmEngineTest_dateTime.java | 290 ---------- .../Tests/AlgorithmEngineTest_flow.java | 270 --------- .../Tests/AlgorithmEngineTest_math.java | 465 --------------- .../Tests/AlgorithmEngineTest_string.java | 216 ------- .../Tests/AlgorithmEngineTest_sum.java | 381 ------------ .../Tests/AlgorithmEngineTest_v3_5.java | 457 --------------- .../Tests/AlgorithmEngineTest_vlookup.java | 49 -- .../toolgood/algorithm/Tests/CompareTest.java | 134 +++++ .../algorithm/Tests/CsharpSecurityTest.java | 118 ++++ .../toolgood/algorithm/Tests/CsharpTest.java | 456 +++++++++++++++ .../algorithm/Tests/CsharpWebTest.java | 79 +++ .../toolgood/algorithm/Tests/Cylinder.java | 36 +- .../algorithm/Tests/DateTimesTest.java | 524 +++++++++++++++++ .../toolgood/algorithm/Tests/EngineTest.java | 71 +++ .../algorithm/Tests/FinancialTest.java | 125 ++++ .../toolgood/algorithm/Tests/FlowTest.java | 346 +++++++++++ .../toolgood/algorithm/Tests/IssuesTest.java | 44 -- .../algorithm/Tests/MathBaseTest.java | 462 +++++++++++++++ .../algorithm/Tests/MathSum2Test.java | 267 +++++++++ .../toolgood/algorithm/Tests/MathSumTest.java | 321 ++++++++++ .../Tests/MathTransformationTest.java | 181 ++++++ .../Tests/MathTrigonometricTest.java | 191 ++++++ .../algorithm/Tests/OperatorTest.java | 92 +++ .../toolgood/algorithm/Tests/StringTest.java | 438 ++++++++++++++ .../toolgood/algorithm/Tests/ValueTest.java | 546 ++++++++++++++++++ 27 files changed, 4365 insertions(+), 2772 deletions(-) delete mode 100644 java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java delete mode 100644 java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java delete mode 100644 java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java delete mode 100644 java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java delete mode 100644 java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java delete mode 100644 java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java delete mode 100644 java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java delete mode 100644 java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java delete mode 100644 java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/CompareTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/CsharpSecurityTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/CsharpTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/CsharpWebTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/DateTimesTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/EngineTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/FinancialTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/FlowTest.java delete mode 100644 java/src/test/java/toolgood/algorithm/Tests/IssuesTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/MathBaseTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/MathSum2Test.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/MathSumTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/MathTransformationTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/MathTrigonometricTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/OperatorTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/StringTest.java create mode 100644 java/src/test/java/toolgood/algorithm/Tests/ValueTest.java diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java deleted file mode 100644 index 265fac56a..000000000 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest.java +++ /dev/null @@ -1,270 +0,0 @@ -package toolgood.algorithm.Tests; - -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotEquals; - -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.junit.Test; - -import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.Operand; -import toolgood.algorithm.enums.OperandType; - -public class AlgorithmEngineTest { - - @Test - public void Test() throws Exception { - AlgorithmEngine engine = new AlgorithmEngine(); - - if (engine.Parse("1+2")) { - double t = (double) engine.Evaluate().NumberValue().doubleValue(); - } - - int c = engine.TryEvaluate("2+3", 0); - assertEquals(5, c); - c = engine.TryEvaluate("(2)+3", 0); - assertEquals(5, c); - c = engine.TryEvaluate("2+3*2+10/2*4", 0); - assertEquals(28, c); - - c = engine.TryEvaluate("if(2+3*2+10/2*4,1", 0); - assertEquals(0, c); - - c = engine.TryEvaluate("2.1e3 + 10", 0); - assertEquals(2110, c); - - c = engine.TryEvaluate("2.1e+03 + 10", 0); - assertEquals(2110, c); - - c = engine.TryEvaluate("2.1e+3 + 10", 0); - assertEquals(2110, c); - - double d = engine.TryEvaluate("2.1e-3 + 10", 0.0); - assertEquals(10.0021, d, 4); - - double e = engine.TryEvaluate("e", 0.0); - assertEquals(Math.E - e, 0.0, 0.01); - e = engine.TryEvaluate("pi", 0.0); - assertEquals(Math.PI - e, 0.0, 0.01); - - boolean b = engine.TryEvaluate("true", false); - assertEquals(true, b); - b = engine.TryEvaluate("false", true); - assertEquals(false, b); - - int b1 = engine.TryEvaluate("if(true,1,2)", 0); - assertEquals(1, b1); - - b1 = engine.TryEvaluate("if(false,1,2)", 0); - assertEquals(2, b1); - - double b2 = engine.TryEvaluate("pi*4", 0.0); - assertEquals(Math.PI * 4, b2, 0.01); - b2 = engine.TryEvaluate("e*4", 0.0); - assertEquals(Math.E * 4, b2, 0.01); - - String s = engine.TryEvaluate("'aa'&'bb'", ""); - assertEquals("aabb", s); - - s = engine.TryEvaluate("'3'+2", ""); - assertEquals("5", s); - - int r = engine.TryEvaluate("count(array(1,2,3,4))", 0); - assertEquals(4, r); - - r = engine.TryEvaluate("(1=1)*9+2", 0); - assertEquals(11, r); - ; - r = engine.TryEvaluate("(1=2)*9+2", 0); - assertEquals(2, r); - ; - - boolean value = engine.TryEvaluate("1 > (-2)", false); - assertEquals(value, true); - - value = engine.TryEvaluate("(-1) > (-2�?, false); - assertEquals(value, true); - - value = engine.TryEvaluate("-1 > (-2)", false); - assertEquals(value, true); - - value = engine.TryEvaluate("-1 > -2", false); - assertEquals(value, true); - - boolean value2 = engine.TryEvaluate("-1 > -2", false); - assertEquals(value2, true); - - boolean value3 = engine.TryEvaluate("-7 < -2", false); - assertEquals(value3, true); - - DateTime dt = engine.TryEvaluate("'2016-1-1'+1", DateTime.now()); - assertEquals(new DateTime(2016, 1, 2, 0, 0, 0, DateTimeZone.UTC), dt); - dt = engine.TryEvaluate("'2016-1-1'+9*'1:0'", DateTime.now()); - assertEquals(new DateTime(2016, 1, 1, 9, 0, 0, DateTimeZone.UTC), dt); - } - - @Test - public void base_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("1+(3*2+2)/2", 0); - assertEquals(5, t); - - t = engine.TryEvaluate("(8-3)*(3+2)", 0); - assertEquals(25, t); - - t = engine.TryEvaluate("(8-3)*(3+2) % 7", 0); - assertEquals(4, t); - - boolean b = engine.TryEvaluate("1=1", false); - assertEquals(true, b); - - b = engine.TryEvaluate("1=2", true); - assertEquals(false, b); - - b = engine.TryEvaluate("1<>2", false); - assertEquals(true, b); - - b = engine.TryEvaluate("1!=2", false); - assertEquals(true, b); - - b = engine.TryEvaluate("1>2", true); - assertEquals(false, b); - - b = engine.TryEvaluate("1<2", false); - assertEquals(true, b); - - b = engine.TryEvaluate("1<=2", false); - assertEquals(true, b); - - b = engine.TryEvaluate("1>=2", true); - assertEquals(false, b); - - b = engine.TryEvaluate("'1'='1'", false); - assertEquals(true, b); - - b = engine.TryEvaluate("'e'='e'", false); - assertEquals(true, b); - - b = engine.TryEvaluate("'1'='2'", true); - assertEquals(false, b); - - b = engine.TryEvaluate("'1'!='2'", false); - assertEquals(true, b); - - } - - @Test - public void base_test2() { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("1+(3*2+2)/2 & '11' & '11:20'*9 & IsNumber(22)*3", ""); - assertNotEquals(t, ""); - } - - @Test - public void base_test3() { - AlgorithmEngine engine = new AlgorithmEngine(); - - int c = engine.TryEvaluate("(2)+/*123456*/3", 0); - assertEquals(5, c); - - c = engine.TryEvaluate("2+3//eee", 0); - assertEquals(5, c); - } - @Test - public void base_test4() { - AlgorithmEngine engine = new AlgorithmEngine(); - - int c = engine.TryEvaluate("(2)+/*123456*/3", 0); - assertEquals(5, c); - - c = engine.TryEvaluate("2+3//eee", 0); - assertEquals(5, c); - - c = engine.TryEvaluate("(2)+/*123456*/3 ee22+22", 0); - assertEquals(0, c); - } - - @Test - public void base_test5() { - AlgorithmEngine engine = new AlgorithmEngine(); - - String c = engine.TryEvaluate("'4dd'&'55'.left(1)", ""); - assertEquals("4dd5", c); - - } - - - - @Test - public void Cylinder_Test() throws Exception { - Cylinder c = new Cylinder(3, 10); - double t = c.TryEvaluate("[半径]*[半径]*pi()", 0.0); // 圆底面积 - - double t2 = c.TryEvaluate("半径*半径*pi()", 0.0); // 圆底面积 - // 3.5版本 取消了这种设�? - //double t3 = c.TryEvaluate("{半径}*{半径}*pi()", 0.0); // 圆底面积 - double t4 = c.TryEvaluate("@半径*@半径*pi()", 0.0); // 圆底面积 - double t5 = c.TryEvaluate("#半径#*#半径#*pi()", 0.0); // 圆底面积 - double t6 = c.TryEvaluate("【半径�?【半径�?pi()", 0.0); // 圆底面积 - double t7 = c.TryEvaluate("【半径�?【半径�?pi()", 0.0); // 圆底面积 - - assertEquals(t, t2, 0.001); - //assertEquals(t, t3, 0.001); - assertEquals(t, t4, 0.001); - assertEquals(t, t5, 0.001); - assertEquals(t, t6, 0.001); - assertEquals(t, t7, 0.001); - - assertEquals(3 * 3 * Math.PI, t, 0.001); - t = c.TryEvaluate("[直径]*pi()", 0.0); // 圆的�? - assertEquals(2 * 3 * Math.PI, t, 0.001); - t = c.TryEvaluate("[半径]*[半径]*pi()*[高]", 0.0); // 圆的体积 - assertEquals(3 * 3 * Math.PI * 10, t, 0.001); - - if (c.Parse("[直径1]*pi()") == false) { - assertEquals("参数[直径1]无效!", c.LastError); - } - - t = c.TryEvaluate("['半径']*[半径]*pi()*[高]", 0.0); // 圆的体积 - assertEquals(3 * 3 * Math.PI * 10, t, 0.001); - - t = c.TryEvaluate("求面积(10�?, 0.0); // 圆的体积 - assertEquals(10 * 10 * Math.PI, t, 0.001); - - String json = "{'灰色':'L','canBookCount':905,'saleCount':91,'specId':'43b0e72e98731aed69e1f0cc7d64bf4d'}"; - c.AddParameterFromJson(json); - - String tt = c.TryEvaluate("['灰色']", ""); // 圆的体积 - assertEquals("L", tt); - - String tt2 = c.EvaluateFormula("'�?-[半径]-�?, '-'); - assertEquals("�?3-10", tt2); - - } - - @Test - public void Test5555(){ - Cylinder c = new Cylinder(3, 10); - String t = c.GetSimplifiedFormula("[半径]*[半径]*pi()"); // 圆底面积 - assertEquals("3 * 3 * 3.141592653589793", t); - - String t2 = c.GetSimplifiedFormula("半径*if(半径>2,1,3)"); - assertEquals("3 * 1", t2); - - String t24 = c.GetSimplifiedFormula("半径*if(半径>2,1+4,3)"); - assertEquals("3 * 5", t24); - - - } - - @Test - public void Year_test_withType() throws Exception { - AlgorithmEngine engine = new AlgorithmEngine(); - engine.Parse("year(now())"); - Operand operand = engine.Evaluate(); - assertEquals(OperandType.NUMBER, operand.Type()); - assertEquals(Long.valueOf(DateTime.now().getYear()).longValue(), operand.LongValue()); - } - -} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java deleted file mode 100644 index 98d329ea7..000000000 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_csharp.java +++ /dev/null @@ -1,308 +0,0 @@ -package toolgood.algorithm.Tests; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import toolgood.algorithm.AlgorithmEngine; - -//@SuppressWarnings("deprecation") -public class AlgorithmEngineTest_csharp { - - @Test - public void UrlDecode() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("UrlDecode('%26%3d%e6%88%91%e4%b8%ad%e5%9b%bd%e4%ba%ba+%3e%7c%7c')", ""); - assertEquals(dt, "&=我中国人 >||"); - } - @Test - public void UrlEncode() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("UrlEncode('&=我中国人 >||')", ""); - assertEquals(dt, "%26%3d%e6%88%91%e4%b8%ad%e5%9b%bd%e4%ba%ba+%3e%7c%7c".toUpperCase()); - } - @Test - public void HtmlEncode() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("HtmlEncode('&=我中国人 >||')", ""); - assertEquals(dt, "&=我中国人 >||"); - } - @Test - public void HtmlDecode() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("HtmlDecode('&=我中国人 >||')", ""); - assertEquals(dt, "&=我中国人 >||"); - } - - @Test - public void TextToBase64() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String r = engine.TryEvaluate("TextToBase64('&=我中国人 >||')", ""); - assertEquals(r, "Jj3miJHkuK3lm73kurogPnx8"); - - r = engine.TryEvaluate("TextToBase64('&=我中国人 >||','GBK')", ""); - assertEquals(r, "Jj3O0tbQufrIyyA+fHw="); - } - - @Test - public void TextToBase64Url() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String r = engine.TryEvaluate("TextToBase64Url('&=我中国人 >||')", ""); - assertEquals(r, "Jj3miJHkuK3lm73kurogPnx8"); - - r = engine.TryEvaluate("TextToBase64Url('&=我中国人 >||','GBK')", ""); - assertEquals(r, "Jj3O0tbQufrIyyA-fHw"); - } - - @Test - public void Base64ToText() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String r = engine.TryEvaluate("Base64ToText('Jj3miJHkuK3lm73kurogPnx8')", ""); - assertEquals(r, "&=我中国人 >||"); - - r = engine.TryEvaluate("Base64ToText('Jj3O0tbQufrIyyA+fHw=','GBK')", ""); - assertEquals(r, "&=我中国人 >||"); - } - - @Test - public void Base64UrlToText() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String r = engine.TryEvaluate("Base64UrlToText('Jj3miJHkuK3lm73kurogPnx8')", ""); - assertEquals(r, "&=我中国人 >||"); - - r = engine.TryEvaluate("Base64UrlToText('Jj3O0tbQufrIyyA-fHw','GBK')", ""); - assertEquals(r, "&=我中国人 >||"); - } - - @Test - public void Regex_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - engine.UseExcelIndex = false; - String r = engine.TryEvaluate("Regex('abcd','a.*c')", ""); - assertEquals(r, "abc"); - - // 下面代码不支�? - // r = engine.TryEvaluate("Regex('abcd,abbcd','a.*?c',1)", ""); - // assertEquals(r, "abbc"); - // r = engine.TryEvaluate("Regex('abcd,abbcd','a(.*?)c',1,1)", ""); - // assertEquals(r, "bb"); - } - - @Test - public void IsRegex_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean r = engine.TryEvaluate("IsRegex('abcd','a.*c')", false); - assertEquals(r, true); - r = engine.TryEvaluate("IsRegex('abcd','da.*c')", true); - assertEquals(r, false); - } - - @Test - public void Guid() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String r = engine.TryEvaluate("Guid()", ""); - assertEquals(r.length()>0, true); - } - - @Test - public void Hash() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("Md5('&=我中国人 >||')", ""); - assertEquals(dt, "2E1CEFBDFA3677725B7856E02D225819"); - dt = engine.TryEvaluate("Md5('&=我中国人 >||','GGG')", ""); - assertEquals(dt, ""); - dt = engine.TryEvaluate("Sha1('&=我中国人 >||')", ""); - assertEquals(dt, "F2C250C58F3A40DC54B5A47F0F6B1187AD5AC2EE"); - dt = engine.TryEvaluate("Sha256('&=我中国人 >||')", ""); - assertEquals(dt, "FA5BF04D13AEF750D62040E492479A16B6B10888D0B19923A1E7B9339990632A"); - dt = engine.TryEvaluate("Sha512('&=我中国人 >||')", ""); - assertEquals(dt, "FFEAC98C39D76CD86A3AB8ECEF16BE23166F68E1A3C5C9809A8AD2CE417170465286E4CF6FFA17924613CD7477533B9109A5DD504A2462F9DB693D56AD365C14"); - // dt = engine.TryEvaluate("Crc8('&=我中国人 >||')", ""); - // assertEquals(dt, "8F"); - // dt = engine.TryEvaluate("Crc16('&=我中国人 >||')", ""); - // assertEquals(dt, "DA5A0000"); - dt = engine.TryEvaluate("Crc32('&=我中国人 >||')", ""); - assertEquals(dt, "60649EFF"); - dt = engine.TryEvaluate("HmacMd5('&=我中国人 >||','12')", ""); - assertEquals(dt, "CF3923196E21B1E270FD72B089B092BB"); - dt = engine.TryEvaluate("HmacSha1('&=我中国人 >||','12')", ""); - assertEquals(dt, "EB4D4FC2AA5637060FD12004DF845801D8902105"); - dt = engine.TryEvaluate("HmacSha256('&=我中国人 >||','12')", ""); - assertEquals(dt, "3E25E0D14039E8258BBBBD15F7E3B91BB497A8966C12E1DEA3D651BF03CB4B97"); - dt = engine.TryEvaluate("HmacSha512('&=我中国人 >||','12')", ""); - assertEquals(dt, "4E9CE785C46569965C7C712A841EC7382C64D918D49F992EDB3504BED9C3A5EFBB1C8F712968F6B904417E07F9D72E707FCF148D55A4D3EDF1A9866B7BAC2049"); - - - } - - //IndexOf - @Test - public void IndexOf() - { - AlgorithmEngine engine = new AlgorithmEngine(); - engine.UseExcelIndex = false; - int dt = engine.TryEvaluate("IndexOf('abcd','cd')", -1); - assertEquals(dt, 2); - dt = engine.TryEvaluate("LastIndexOf('abcd','cd')", -1); - assertEquals(dt, 2); - } - - @Test - public void Split() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("Split('1,2,3,4',',')[3]", ""); - assertEquals(dt, "3"); - } - - @Test - public void TrimStart() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("TrimStart(' 123 ')", ""); - assertEquals(dt, "123 "); - - dt = engine.TryEvaluate("TrimStart(' 123 ',' 1')", ""); - assertEquals(dt, "23 "); - } - @Test - public void TrimEnd() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("TrimEnd(' 123 ')", ""); - assertEquals(dt, " 123"); - - dt = engine.TryEvaluate("TrimEnd(' 123 ','3 ')", ""); - assertEquals(dt, " 12"); - } - - @Test - public void Join() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("Join(',',1,2,5,6)", ""); - assertEquals(dt, "1,2,5,6"); - dt = engine.TryEvaluate("Join(',',1,2,5,6,split('7,8,9',','))", ""); - assertEquals(dt, "1,2,5,6,7,8,9"); - } - - @Test - public void Substring() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("Substring('123456789',1,2)", ""); - assertEquals(dt, "12"); - } - @Test - public void StartsWith() - { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean dt = engine.TryEvaluate("StartsWith('123456789','12')", false); - assertEquals(dt, true); - dt = engine.TryEvaluate("StartsWith('123456789','127')", true); - assertEquals(dt, false); - } - @Test - public void EndsWith() - { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean dt = engine.TryEvaluate("EndsWith('123456789','89')", false); - assertEquals(dt, true); - dt = engine.TryEvaluate("EndsWith('123456789','127')", true); - assertEquals(dt, false); - } - - @Test - public void IsNullOrEmpty() - { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean dt = engine.TryEvaluate("IsNullOrEmpty('')", false); - assertEquals(dt, true); - dt = engine.TryEvaluate("IsNullOrEmpty(' ')", true); - assertEquals(dt, false); - } - @Test - public void IsNullOrWhiteSpace() - { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean dt = engine.TryEvaluate("IsNullOrWhiteSpace('')", false); - assertEquals(dt, true); - dt = engine.TryEvaluate("IsNullOrWhiteSpace(' ')", false); - assertEquals(dt, true); - dt = engine.TryEvaluate("IsNullOrWhiteSpace(' f ')", true); - assertEquals(dt, false); - } - - @Test - public void RemoveStart() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("RemoveStart('123456789','12')", ""); - assertEquals(dt, "3456789"); - dt = engine.TryEvaluate("RemoveStart('123456789','127')", ""); - assertEquals(dt, "123456789"); - } - @Test - public void RemoveEnd() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("RemoveEnd('123456789','89')", ""); - assertEquals(dt, "1234567"); - dt = engine.TryEvaluate("RemoveEnd('123456789','127')", ""); - assertEquals(dt, "123456789"); - } - @Test - public void TestVersion() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t25 = engine.TryEvaluate("Engineversion", ""); - assertEquals("ToolGood.Algorithm 4.0.0.1", t25); - String t26 = engine.TryEvaluate("Algorithmversion", ""); - assertEquals("ToolGood.Algorithm 4.0.0.1", t26); - } - - @Test - public void Json() - { - - AlgorithmEngine engine = new AlgorithmEngine(); - String dt = engine.TryEvaluate("json('{\"Name\":\"William Shakespeare\",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}').Age", ""); - assertEquals(dt.toString(), "51"); - dt = engine.TryEvaluate("json('{\"Name\":\"William Shakespeare\",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}')[Birthday]", ""); - assertEquals(dt, "04/26/1564 00:00:00"); - - dt = engine.TryEvaluate("json('[1,2,3]')[1]", ""); - assertEquals(dt, "1"); - - dt = engine.TryEvaluate("json('{\"Name\":\"William Shakespeare \",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}')[Name].Trim()", ""); - assertEquals(dt, "William Shakespeare"); - - - dt = engine.TryEvaluate("json('{\"Name1\":\"William Shakespeare \",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}')['Name'& 1].Trim().substring(2,3)", ""); - assertEquals(dt, "ill"); - - dt = engine.TryEvaluate("json('12346{\"Name1\":\"William Shakespeare \",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}')['Name'& 1].Trim().substring(2,3)", ""); - assertEquals(dt, ""); - - dt = engine.TryEvaluate("json('[1,2,3,4,5,6]')[1].Trim()", ""); - assertEquals(dt, "1"); - - dt = engine.TryEvaluate("json('[1,2,3,4,5,6]22')[1].Trim()", ""); - assertEquals(dt, ""); - - dt = engine.TryEvaluate("json('22[1,2,3,4,5,6]')[1].Trim()", ""); - assertEquals(dt, ""); - } -} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java deleted file mode 100644 index b831b097d..000000000 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_dateTime.java +++ /dev/null @@ -1,290 +0,0 @@ -package toolgood.algorithm.Tests; - -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.junit.Test; -import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.MyDate; - -import static org.junit.Assert.assertEquals; - -public class AlgorithmEngineTest_dateTime { - - @Test - public void DATEVALUE_Test() { - AlgorithmEngine engine = new AlgorithmEngine(); - DateTime dt = engine.TryEvaluate("DATEVALUE('2016-01-01')", DateTime.now()); - assertEquals(dt, new DateTime(2016, 1, 1, 0, 0, 0, DateTimeZone.UTC)); - - dt = engine.TryEvaluate("DATEVALUE('2016/01/01')", DateTime.now()); - assertEquals(dt, new DateTime(2016, 1, 1, 0, 0, 0, DateTimeZone.UTC)); - - // chinese time - dt = engine.TryEvaluate("DATEVALUE('1691234899000',0)", DateTime.now()); - assertEquals(dt, new DateTime(2023, 8, 5, 11, 28, 19, DateTimeZone.UTC)); - assertEquals(dt.toDateTime(DateTimeZone.getDefault()), new DateTime(2023, 8, 5, 19, 28, 19, DateTimeZone.getDefault())); - - // chinese time - dt = engine.TryEvaluate("DATEVALUE('1691234899',0)", DateTime.now()); - assertEquals(dt, new DateTime(2023, 8, 5, 11, 28, 19, DateTimeZone.UTC)); - assertEquals(dt.toDateTime(DateTimeZone.getDefault()), new DateTime(2023, 8, 5, 19, 28, 19, DateTimeZone.getDefault())); - - engine.UseLocalTime = true; - // chinese time - dt = engine.TryEvaluate("DATEVALUE('1691234899000',0)", DateTime.now()); - assertEquals(dt, new DateTime(2023, 8, 5, 19, 28, 19, DateTimeZone.getDefault())); - - // chinese time - dt = engine.TryEvaluate("DATEVALUE('1691234899',0)", DateTime.now()); - assertEquals(dt, new DateTime(2023, 8, 5, 19, 28, 19, DateTimeZone.getDefault())); - - // chinese time - dt = engine.TryEvaluate("DATEVALUE('1691234899000')", DateTime.now()); - assertEquals(dt, new DateTime(2023, 8, 5, 19, 28, 19, DateTimeZone.getDefault())); - - // chinese time - dt = engine.TryEvaluate("DATEVALUE('1691234899')", DateTime.now()); - assertEquals(dt, new DateTime(2023, 8, 5, 19, 28, 19, DateTimeZone.getDefault())); - } - - @Test - public void TIMESTAMP_Test() { - AlgorithmEngine engine = new AlgorithmEngine(); - engine.UseLocalTime = true; - - // chinese time - long dt = engine.TryEvaluate("TIMESTAMP('2016-01-01')", 0L); - assertEquals(dt, 1451577600000L); - - dt = engine.TryEvaluate("TIMESTAMP('2016/01/01')", 0L); - assertEquals(dt, 1451577600000L); - - dt = engine.TryEvaluate("TIMESTAMP('2016-01-01',0)", 0L); - assertEquals(dt, 1451577600000L); - - dt = engine.TryEvaluate("TIMESTAMP('2016-01-01',1)", 0L); - assertEquals(dt, 1451577600L); - } - - @Test - public void TIMEVALUE_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - MyDate dt = engine.TryEvaluate("TIMEVALUE('11:12:13')", MyDate.now()); - assertEquals(dt.Hour, 11); - assertEquals(dt.Minute, 12); - assertEquals(dt.Second, 13); - } - - @Test - public void DATE_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - DateTime dt = engine.TryEvaluate("DATE(2016,1,1)", DateTime.now()); - assertEquals(dt, new DateTime(2016, 1, 1, 0, 0, 0, DateTimeZone.UTC)); - } - - @Test - public void time_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - MyDate dt = engine.TryEvaluate("time(11,12,13)", MyDate.now()); - assertEquals(dt.Hour, 11); - assertEquals(dt.Minute, 12); - assertEquals(dt.Second, 13); - } - - @Test - public void Now_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - DateTime dt = engine.TryEvaluate("now()", DateTime.now().plusDays(1)); - DateTime dt2 = DateTime.now(); - assertEquals(dt, new DateTime(dt2.getYear(), dt2.getMonthOfYear(), dt2.getDayOfMonth() - , dt2.getHourOfDay(), dt2.getMinuteOfHour(), dt2.getSecondOfMinute(), DateTimeZone.UTC)); - } - - @Test - public void Today_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - DateTime dt = engine.TryEvaluate("Today()", DateTime.now()); - DateTime dt2 = DateTime.now(); - assertEquals(dt, new DateTime(dt2.getYear(), dt2.getMonthOfYear(), dt2.getDayOfMonth(), 0, 0, 0, DateTimeZone.UTC)); - } - - @Test - public void Year_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("year(now())", 0); - assertEquals(dt, DateTime.now().getYear()); - } - - @Test - public void Month_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("Month(now())", 0); - assertEquals(dt, DateTime.now().getMonthOfYear()); - } - - @Test - public void Day_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("Day(now())", 0); - assertEquals(dt, DateTime.now().getDayOfMonth()); - } - - @Test - public void Hour_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("Hour(now())", 0); - assertEquals(dt, DateTime.now().getHourOfDay()); - } - - @Test - public void Minute_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("Minute(now())", 0); - assertEquals(dt, DateTime.now().getMinuteOfHour()); - } - - @Test - public void Second_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("Second(now())", 0); - assertEquals(dt, DateTime.now().getSecondOfMinute()); - } - - @Test - public void WEEKDAY_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("WEEKDAY(date(2017,2,18),1)", 0); - assertEquals(dt, 7); - - dt = engine.TryEvaluate("WEEKDAY(date(2017,1,7))", 0); - assertEquals(dt, 7); - dt = engine.TryEvaluate("WEEKDAY(date(2017,1,7),1)", 0); - assertEquals(dt, 7); - dt = engine.TryEvaluate("WEEKDAY(date(2017,1,7),2)", 0); - assertEquals(dt, 6); - dt = engine.TryEvaluate("WEEKDAY(date(2017,1,7),3)", 0); - assertEquals(dt, 5); - - dt = engine.TryEvaluate("WEEKDAY(date(2017,1,8),1)", 0); - assertEquals(dt, 1); - dt = engine.TryEvaluate("WEEKDAY(date(2017,1,8),2)", 0); - assertEquals(dt, 7); - dt = engine.TryEvaluate("WEEKDAY(date(2017,1,8),3)", 0); - assertEquals(dt, 6); - - dt = engine.TryEvaluate("WEEKDAY(date(2017,1,2),1)", 0); - assertEquals(dt, 2); - dt = engine.TryEvaluate("WEEKDAY(date(2017,1,2),2)", 0); - assertEquals(dt, 1); - dt = engine.TryEvaluate("WEEKDAY(date(2017,1,2),3)", 0); - assertEquals(dt, 0); - - } - - @Test - public void DATEDIF_Test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','y')", 0); - assertEquals(dt, 41); - - dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','m')", 0); - assertEquals(dt, 503); - - dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','d')", 0); - assertEquals(dt, 15318); - - dt = engine.TryEvaluate("DATEDIF('2023-9-30','2023-10-2','d')", 0); - assertEquals(dt, 2); - - dt = engine.TryEvaluate("DATEDIF('2023-9-30 11:25','2023-10-2 00:01','d')", 0); - assertEquals(dt, 1); - - dt = engine.TryEvaluate("DATEDIF('2023-9-30 11:25:45','2023-10-2 00:01:16','d')", 0); - assertEquals(dt, 1); - - dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','yd')", 0); - assertEquals(dt, 342); - - dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','ym')", 0); - assertEquals(dt, 11); - - dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','md')", 0); - assertEquals(dt, 8); - } - - @Test - public void DAYS360_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("DAYS360('1975-1-30','2017-1-7')", 0); - assertEquals(dt, 15097); - } - - @Test - public void EDATE_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - DateTime dt = engine.TryEvaluate("EDATE(\"2012-1-31\",32)", DateTime.now()); - assertEquals(dt, new DateTime(2014, 9, 30, 0, 0, 0, DateTimeZone.UTC)); - } - - @Test - public void EOMONTH_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - DateTime dt = engine.TryEvaluate("EOMONTH(\"2012-2-1\",32)", DateTime.now()); - assertEquals(dt, new DateTime(2014, 10, 31, 0, 0, 0, DateTimeZone.UTC)); - } - - @Test - public void NETWORKDAYS_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("NETWORKDAYS(\"2012-1-1\",\"2013-1-1\")", 0); - assertEquals(dt, 262); - } - - @Test - public void WORKDAY_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - DateTime dt = engine.TryEvaluate("WORKDAY(\"2012-1-2\",145)", DateTime.now()); - assertEquals(dt, new DateTime(2012, 07, 23, 0, 0, 0, DateTimeZone.UTC)); - } - - @Test - public void WEEKNUM_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("WEEKNUM(\"2016-1-3\")", 0); - assertEquals(dt, 2); - dt = engine.TryEvaluate("WEEKNUM(\"2016-1-2\")", 0); - assertEquals(dt, 1); - - dt = engine.TryEvaluate("WEEKNUM(\"2016-1-4\",2)", 0); - assertEquals(dt, 2); - dt = engine.TryEvaluate("WEEKNUM(\"2016-1-3\",2)", 0); - assertEquals(dt, 1); - dt = engine.TryEvaluate("WEEKNUM(\"2016-1-2\",2)", 0); - assertEquals(dt, 1); - } - - @Test - public void ADD_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("'2000-02-01'.addYears(1).year()", 0); - assertEquals(dt, 2001); - - dt = engine.TryEvaluate("'2000/02/01'.addYears(1).year()", 0); - assertEquals(dt, 2001); - - dt = engine.TryEvaluate("'2000-02-01'.AddMonths(1).Month()", 0); - assertEquals(dt, 3); - - dt = engine.TryEvaluate("'2000-02-01'.AddDays(1).Day()", 0); - assertEquals(dt, 2); - - dt = engine.TryEvaluate("'2000-02-01 12:05:06'.AddHours(1).Hour()", 0); - assertEquals(dt, 13); - - dt = engine.TryEvaluate("'2000-02-01 12:05:06'.AddMinutes(1).Minute()", 0); - assertEquals(dt, 6); - - dt = engine.TryEvaluate("'2000-02-01 12:05:06'.AddSeconds(1).Second()", 0); - assertEquals(dt, 7); - } -} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java deleted file mode 100644 index 4d8c30ec0..000000000 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_flow.java +++ /dev/null @@ -1,270 +0,0 @@ -package toolgood.algorithm.Tests; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import toolgood.algorithm.AlgorithmEngine; - -public class AlgorithmEngineTest_flow { - @Test - public void If_Test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("if(1=1,1,2)", 0); - assertEquals(1, t); - t = engine.TryEvaluate("if(1=1,1)", 0); - assertEquals(1, t); - - t = engine.TryEvaluate("if(3,1,2)", 0); - assertEquals(1, t); - t = engine.TryEvaluate("if('1',1,2)", 0); - assertEquals(1, t); - t = engine.TryEvaluate("if(0,1,2)", 0); - assertEquals(2, t); - - t = engine.TryEvaluate("1>2?1:2", 0); - assertEquals(2, t); - } - - @Test - public void iferror_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("iferror(1/0,1,2)", 0); - assertEquals(1, t); - - t = engine.TryEvaluate("iferror(1-'rrr',1,2)", 0); - assertEquals(1, t); - } - - @Test - public void IsError_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("IsError(1/0,1)", 0); - assertEquals(1, t); - - t = engine.TryEvaluate("IsError(1-'rrr',1)", 0); - assertEquals(1, t); - } - @Test - public void ifnull_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("IsNull(null,1)", 0); - assertEquals(1, t); - - t = engine.TryEvaluate("IsNull(1,2)", 0); - assertEquals(1, t); - } - - @Test - public void isnullorerror_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("isnullorerror(null,1)", 0); - assertEquals(1, t); - - t = engine.TryEvaluate("isnullorerror(1/0,1)", 0); - assertEquals(1, t); - - t = engine.TryEvaluate("isnullorerror(1,2)", 0); - assertEquals(1, t); - } - - - - @Test - public void IsNumber_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("if(IsNumber(1),1,2)", 0); - assertEquals(1, t); - - t = engine.TryEvaluate("if(IsNumber('e'),1,2)", 0); - assertEquals(2, t); - t = engine.TryEvaluate("if(IsNumber('11'),1,2)", 0); - assertEquals(2, t); - - t = engine.TryEvaluate("if(IsNumber('2016-1-2'),1,2)", 0); - assertEquals(2, t); - } - - @Test - public void IsText_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("if(IsText(1),1,2)", 0); - assertEquals(2, t); - - t = engine.TryEvaluate("if(IsText('e'),1,2)", 0); - assertEquals(1, t); - t = engine.TryEvaluate("if(IsText('11'),1,2)", 0); - assertEquals(1, t); - - t = engine.TryEvaluate("if(IsText('2016-1-2'),1,2)", 0); - assertEquals(1, t); - } - - - @Test - public void ISNONTEXT_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("if(ISNONTEXT(1),1,2)", 0); - assertEquals(1, t); - - t = engine.TryEvaluate("if(ISNONTEXT('e'),1,2)", 0); - assertEquals(2, t); - t = engine.TryEvaluate("if(ISNONTEXT('11'),1,2)", 0); - assertEquals(2, t); - - t = engine.TryEvaluate("if(ISNONTEXT('2016-1-2'),1,2)", 0); - assertEquals(2, t); - } - - - @Test - public void ISLOGICAL_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("if(ISLOGICAL(1),1,2)", 0); - assertEquals(2, t); - - t = engine.TryEvaluate("if(ISLOGICAL('e'),1,2)", 0); - assertEquals(2, t); - - t = engine.TryEvaluate("if(ISLOGICAL(true),1,2)", 0); - assertEquals(1, t); - - t = engine.TryEvaluate("if(ISLOGICAL(false),1,2)", 0); - assertEquals(1, t); - } - - @Test - public void ISEVEN_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("if(ISEVEN(1),1,2)", 0); - assertEquals(2, t); - - t = engine.TryEvaluate("if(ISEVEN(2),1,2)", 0); - assertEquals(1, t); - - t = engine.TryEvaluate("if(ISEVEN('e'),1,2)", 0); - assertEquals(2, t); - } - - @Test - public void ISODD_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("if(ISODD(1),1,2)", 0); - assertEquals(1, t); - - t = engine.TryEvaluate("if(ISODD(2),1,2)", 0); - assertEquals(2, t); - - t = engine.TryEvaluate("if(ISODD('e'),1,2)", 0); - assertEquals(2, t); - } - - @Test - public void And_Test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean t = engine.TryEvaluate("and(true(),1=1)", false); - assertEquals(true, t); - t = engine.TryEvaluate("and(true(),1)", false); - assertEquals(true, t); - - t = engine.TryEvaluate("and(true(),false(),1=1)", true); - assertEquals(false, t); - t = engine.TryEvaluate("and(true(),false(),1)", true); - assertEquals(false, t); - - t = engine.TryEvaluate("and(true(),0)", true); - assertEquals(false, t); - } - - @Test - public void Or_Test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean t = engine.TryEvaluate("or(true(),1=1)", false); - assertEquals(true, t); - t = engine.TryEvaluate("or(true(),1)", false); - assertEquals(true, t); - - t = engine.TryEvaluate("or(true(),false(),1=1)", false); - assertEquals(true, t); - t = engine.TryEvaluate("or(true(),false(),1)", false); - assertEquals(true, t); - - t = engine.TryEvaluate("or(true(),0)", false); - assertEquals(true, t); - - t = engine.TryEvaluate("or(false(),1=2)", true); - assertEquals(false, t); - } - - @Test - public void Not_Test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean t = engine.TryEvaluate("not(true())", true); - assertEquals(false, t); - t = engine.TryEvaluate("not(false())", false); - assertEquals(true, t); - } - - @Test - public void true_Test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean t = engine.TryEvaluate("true()", false); - assertEquals(true, t); - } - - @Test - public void false_Test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean t = engine.TryEvaluate("false()", true); - assertEquals(false, t); - } - - @Test - public void andor_Test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean t = engine.TryEvaluate("1=1 && 2==2 and 3=3", false); - assertEquals(true, t); - - t = engine.TryEvaluate("1=1 && 2!=2", true); - assertEquals(false, t); - - t = engine.TryEvaluate("1=1 && 2!=2", true); - assertEquals(false, t); - - t = engine.TryEvaluate("1=1 || 2!=2", false); - assertEquals(true, t); - - - t = engine.TryEvaluate("1=1 and 2==2", false); - assertEquals(true, t); - - t = engine.TryEvaluate("1=1 and 2!=2", true); - assertEquals(false, t); - - t = engine.TryEvaluate("1=1 and 2!=2", true); - assertEquals(false, t); - - t = engine.TryEvaluate("1=1 or 2!=2", false); - assertEquals(true, t); - - } - - -} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java deleted file mode 100644 index aa6c23618..000000000 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_math.java +++ /dev/null @@ -1,465 +0,0 @@ -package toolgood.algorithm.Tests; - -import static org.junit.Assert.assertEquals; - -import java.math.BigDecimal; - -import org.junit.Test; - -import toolgood.algorithm.AlgorithmEngine; - -//@SuppressWarnings("deprecation") -public class AlgorithmEngineTest_math { - @Test - public void Pi_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("pi()", 0.0); - assertEquals(3.141592654, round(t, 9),0.01); - } - @Test - public void abs_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("abs(-1.2)", 0.0); - assertEquals(1.2, t,0.01); - } - @Test - public void QUOTIENT_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("QUOTIENT(7,3)", 0.0); - assertEquals(2.0, t,0.01); - } - @Test - public void MOD_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("MOD(7,3)", 0.0); - assertEquals(1.0, t,0.01); - } - @Test - public void SIGN_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SIGN(0)", 0); - assertEquals(0, t,0.01); - t = engine.TryEvaluate("SIGN(9)", 0); - assertEquals(1, t,0.01); - t = engine.TryEvaluate("SIGN(-9)", 0); - assertEquals(-1, t,0.01); - } - @Test - public void SQRT_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SQRT(9)", 0.0); - assertEquals(3.0, t,0.01); - } - @Test - public void SUM_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SUM(1,2,3,4)", 0.0); - assertEquals(10.0, t,0.01); - } - @Test - public void TRUNC_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("TRUNC(9.222)", 0.0); - assertEquals(9.0, t,0.01); - t = engine.TryEvaluate("TRUNC(-9.222)", 0.0); - assertEquals(-9.0, t,0.01); - } - @Test - public void int_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("int(9.222)", 0.0); - assertEquals(9.0, t,0.01); - t = engine.TryEvaluate("int(-9.222)", 0.0); - assertEquals(-9.0, t,0.01); - } - @Test - public void GCD_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("GCD(3,5,7)", 0.0); - assertEquals(1.0, t,0.01); - t = engine.TryEvaluate("GCD(30,21)", 0.0); - assertEquals(3.0, t,0.01); - } - @Test - public void LCM_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("LCM(3,5,7)", 0.0); - assertEquals(105.0, t,0.01); - - } - @Test - public void combin_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("combin(10,2)", 0.0); - assertEquals(45.0, t,0.01); - } - @Test - public void PERMUT_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("PERMUT(10,2)", 0.0); - assertEquals(90.0, t,0.01); - - } - - - @Test - public void degrees_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("degrees(pi())", 0.0); - assertEquals(180.0, t,0.01); - } - @Test - public void RADIANS_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("RADIANS(180)", 0.0); - assertEquals(Math.PI, t,0.01); - } - @Test - public void cos_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("cos(1)", 0.0); - t = round(t, 6); - assertEquals(round(0.540302306, 6), t,0.01); - } - @Test - public void cosh_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("cosh(1)", 0.0); - t = round(t, 6); - assertEquals(round(1.543080635, 6), t,0.01); - } - @Test - public void sin_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("sin(1)", 0.0); - t = round(t, 6); - assertEquals(round(0.841470985, 6), t,0.01); - } - @Test - public void sinh_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("sinh(1)", 0.0); - t = round(t, 6); - assertEquals(round(1.175201194, 6), t,0.01); - } - @Test - public void tan_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("tan(1)", 0.0); - t = round(t, 6); - assertEquals(round(1.557407725, 6), t,0.01); - } - @Test - public void tanh_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("tanh(1)", 0.0); - t = round(t, 6); - assertEquals(round(0.761594156, 6), t,0.01); - } - @Test - public void acos_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("acos(0.5)", 0.0); - t = round(t, 6); - assertEquals(round(1.047197551, 6), t,0.01); - } - @Test - public void acosh_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("acosh(1.5)", 0.0); - t = round(t, 6); - assertEquals(round(0.96242365, 6), t,0.01); - } - @Test - public void asin_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("asin(0.5)", 0.0); - t = round(t, 6); - assertEquals(round(0.523598776, 6), t,0.01); - } - @Test - public void asinh_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("asinh(1.5)", 0.0); - t = round(t, 6); - assertEquals(round(1.194763217, 6), t,0.01); - } - @Test - public void atan_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("atan(1)", 0.0); - t = round(t, 6); - assertEquals(round(0.785398163, 6), t,0.01); - } - @Test - public void atanh_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("atanh(0.5)", 0.0); - t = round(t, 6); - assertEquals(round(0.549306144, 6), t,0.01); - } - @Test - public void atan2_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("atan2(1,2)", 0.0); - t = round(t, 6); - assertEquals(round(1.107148718, 6), t,0.01); - } - - - @Test - public void ROUND_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("ROUND(4.333,2)", 0.0); - assertEquals(4.33, t,0.01); - } - @Test - public void ROUNDDOWN_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("ROUNDDOWN(4.333,2)", 0.0); - assertEquals(4.33, t,0.01); - - t = engine.TryEvaluate("ROUNDDOWN(-3.141592, 3)", 0.0); - assertEquals(-3.141, t,0.01); - } - @Test - public void ROUNDUP_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("ROUNDUP(4.333,2)", 0.0); - assertEquals(4.34, t,0.01); - - t = engine.TryEvaluate("ROUNDUP(-3.141592, 3)", 0.0); - assertEquals(-3.142, t,0.01); - } - @Test - public void CEILING_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("CEILING(4.333,0.1)", 0.0); - assertEquals(4.4, t,0.01); - - t = engine.TryEvaluate("CEILING(4.333)", 0.0); - assertEquals(5, t,0.01); - } - @Test - public void FLOOR_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("FLOOR(4.363,0.1)", 0.0); - assertEquals(4.3, t,0.01); - - t = engine.TryEvaluate("FLOOR(4.333)", 0.0); - assertEquals(4, t,0.01); - } - @Test - public void even_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("even(4.363)", 0.0); - assertEquals(6.0, t,0.01); - } - @Test - public void odd_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("odd(4.363)", 0.0); - assertEquals(5, t,0.01); - } - @Test - public void MROUND_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("MROUND(4.363,2)", 0.0); - assertEquals(4, t,0.01); - t = engine.TryEvaluate("MROUND(5.363,2)", 0.0); - assertEquals(6, t,0.01); - } - - - - @Test - public void Rand_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("RAND()", 0.0); - assertEquals(true, t>=0); - assertEquals(true, t<1); - } - @Test - public void RANDBETWEEN_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("RANDBETWEEN(2,99)", 0.0); - assertEquals(true, t>2); - assertEquals(true, t<=99); - } - - public void fact_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("fact(6)", 0.0); - assertEquals(720.0, t,0.01); - t = engine.TryEvaluate("fact(3)", 0.0); - assertEquals(6.0, t,0.01); - } - @Test - public void factdouble_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("factdouble(10)", 0.0); - assertEquals(3840.0, t,0.01); - } - @Test - public void POWER_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("POWER(10,2)", 0.0); - assertEquals(100.0, t,0.01); - } - @Test - public void exp_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("exp(2)", 0.0); - t = round(t, 6); - assertEquals(round(7.389056099, 6), t,0.01); - } - @Test - public void ln_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("ln(4)", 0.0); - t = round(t, 6); - assertEquals(round(1.386294361, 6), t,0.01); - } - @Test - public void log_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("log(10)", 0.0); - t = round(t, 6); - assertEquals(round(1.0, 6), t,0.01); - - t = engine.TryEvaluate("log(8,2)", 0.0); - t = round(t, 6); - assertEquals(round(3.0, 6), t,0.01); - } - @Test - public void log10_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("log10(10)", 0.0); - t = round(t, 6); - assertEquals(round(1.0, 6), t,0.01); - } - @Test - public void MULTINOMIAL_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("MULTINOMIAL(1,2,3)", 0.0); - t = round(t, 6); - assertEquals(round(60.0, 6), t,0.01); - t = engine.TryEvaluate("MULTINOMIAL(1,2,3,4)", 0.0); - t = round(t, 6); - assertEquals(round(12600.0, 6), t,0.01); - } - @Test - public void PRODUCT_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("PRODUCT(1,2,3,4)", 0.0); - t = round(t, 6); - assertEquals(round(24.0, 6), t,0.01); - } - @Test - public void SQRTPI_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SQRTPI(3)", 0.0); - t = round(t, 6); - assertEquals(round(3.069980124, 6), t,0.01); - } - @Test - public void SUMSQ_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SUMSQ(1,2)", 0.0); - t = round(t, 6); - assertEquals(round(5.0, 6), t,0.01); - } - - - @Test - public void transformation_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double num = engine.TryEvaluate("BIN2DEC(10101)", 0); - assertEquals(num, 21,0.001); - num = engine.TryEvaluate("OCT2DEC(12456)", 0); - assertEquals(num, 5422,0.001); - num = engine.TryEvaluate("HEX2DEC('213adf')", 0); - assertEquals(num, 2177759,0.001); - - String t = engine.TryEvaluate("DEC2BIN(10)", ""); - assertEquals(t, "1010"); - t = engine.TryEvaluate("OCT2BIN('721')", ""); - assertEquals(t, "111010001"); - t = engine.TryEvaluate("HEX2BIN('fa')", ""); - assertEquals(t, "11111010"); - t = engine.TryEvaluate("'fa'.HEX2BIN()", ""); - assertEquals(t, "11111010"); - - t = engine.TryEvaluate("BIN2OCT(10)", ""); - assertEquals(t, "2"); - t = engine.TryEvaluate("DEC2OCT('75')", ""); - assertEquals(t, "113"); - t = engine.TryEvaluate("HEX2OCT('f5')", ""); - assertEquals(t, "365"); - - t = engine.TryEvaluate("BIN2HEX('101010100')", ""); - assertEquals(t, "154"); - t = engine.TryEvaluate("OCT2HEX(75212)", ""); - assertEquals(t, "7A8A"); - t = engine.TryEvaluate("DEC2HEX(952)", ""); - assertEquals(t, "3B8"); - - } - - - // @SuppressWarnings("deprecation") - private double round(final double value, final int p) { - final BigDecimal bigD = new BigDecimal(value); - return bigD.setScale(p, BigDecimal.ROUND_HALF_UP).doubleValue(); - } -} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java deleted file mode 100644 index 710ac6f06..000000000 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_string.java +++ /dev/null @@ -1,216 +0,0 @@ -package toolgood.algorithm.Tests; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import toolgood.algorithm.AlgorithmEngine; - -public class AlgorithmEngineTest_string { - @Test - public void ASC_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("asc('abcABC12�?)", ""); - assertEquals(t, "abcABC123"); - } - @Test - public void Jis_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("jis('abcABC123')", ""); - assertEquals(t, "abcABC12�?); - t = engine.TryEvaluate("WIDECHAR('abcABC123')", ""); - assertEquals(t, "abcABC12�?); - } - - @Test - public void CHAR_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("char(49)", ""); - assertEquals(t, "1"); - } - - @Test - public void CLEAN_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("clean('\\r112\\t')", ""); - assertEquals(t, "112"); - } - @Test - public void code_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("code('1')", 0); - assertEquals(t, 49); - } - - @Test - public void CONCATENATE_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("CONCATENATE('tt','33')", ""); - assertEquals(t, "tt33"); - } - @Test - public void EXACT_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean t = engine.TryEvaluate("EXACT('tt','33')", true); - assertEquals(t, false); - t = engine.TryEvaluate("EXACT('tt','tt')", false); - assertEquals(t, true); - t = engine.TryEvaluate("EXACT('33',33)", false); - assertEquals(t, true); - t = engine.TryEvaluate("EXACT('331.1',331.1)", false); - assertEquals(t, true); - t = engine.TryEvaluate("EXACT('TRUE',TRUE())", false); - assertEquals(t, true); - t = engine.TryEvaluate("EXACT('1',TRUE())", true); - assertEquals(t, false); - } - @Test - public void FIND_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("FIND(\"11\",\"12221122\")", 0); - assertEquals(t, 5); - } - - @Test - public void FIXED_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("FIXED(4567.89,1)", ""); - assertEquals(t, "4,567.9"); - //t = engine.TryEvaluate(" FIXED(4567.89,-1)", "");//IsError - //assertEquals(t, "4,570.0"); - t = engine.TryEvaluate("FIXED(-4567.89, 1, TRUE())", ""); - assertEquals(t, "-4567.9"); - t = engine.TryEvaluate("FIXED(77.888)", ""); - assertEquals(t, "77.89"); - } - - @Test - public void LEFT_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("LEFT('123222',3)", ""); - assertEquals(t, "123"); - } - @Test - public void LEN_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("LEN('123222')", 0); - assertEquals(t, 6); - } - @Test - public void LOWER_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("LOWER('ABC')", ""); - assertEquals(t, "abc"); - } - @Test - public void MID_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("MID('ABCDEF',2,3)", ""); - assertEquals(t, "BCD"); - } - @Test - public void PROPER_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("PROPER('abc abc')", ""); - assertEquals(t, "Abc Abc"); - } - @Test - public void REPLACE_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("REPLACE(\"abccd\",2,3,\"2\")", ""); - assertEquals(t, "a2d"); - - String t1 = engine.TryEvaluate("REPLACE(\"abccd\",'bc',\"2\")", ""); - assertEquals(t1, "a2cd"); - } - @Test - public void REPT_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("REPT(\"q\",3)", ""); - assertEquals(t, "qqq"); - } - @Test - public void RIGHT_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("RIGHT(\"123q\",3)", ""); - assertEquals(t, "23q"); - } - @Test - public void RMB_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("rmb(12.3)", ""); - assertEquals(t, "壹拾贰元叁角"); - } - @Test - public void SEARCH_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("SEARCH(\"aa\",\"abbAaddd\")", 0); - assertEquals(t, 4); - } - @Test - public void SUBSTITUTE_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("SUBSTITUTE(\"ababcc\",\"ab\",\"12\")", ""); - assertEquals(t, "1212cc"); - t = engine.TryEvaluate("SUBSTITUTE(\"ababcc\",\"ab\",\"12\",2)", ""); - assertEquals(t, "ab12cc"); - } - @Test - public void T_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("T(12)", ""); - assertEquals(t, ""); - t = engine.TryEvaluate("T('123')", ""); - assertEquals(t, "123"); - } - @Test - public void TEXT_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("TEXT(123,\"0.00\")", ""); - assertEquals(t, "123.00"); - } - @Test - public void TRIM_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("TRIM(\" 123 123 \")", ""); - assertEquals(t, "123 123"); - } - @Test - public void UPPER_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - String t = engine.TryEvaluate("UPPER(\"abc\")", ""); - assertEquals(t, "ABC"); - } - - @Test - public void VALUE_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int t = engine.TryEvaluate("VALUE(\"123\")", 0); - assertEquals(t, 123); - } -} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java deleted file mode 100644 index 5b821d1ae..000000000 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_sum.java +++ /dev/null @@ -1,381 +0,0 @@ -package toolgood.algorithm.Tests; - -import static org.junit.Assert.assertEquals; - -import java.math.BigDecimal; - -import org.junit.Test; - -import toolgood.algorithm.AlgorithmEngine; - -//@SuppressWarnings("deprecation") -public class AlgorithmEngineTest_sum { - @Test - public void MAX_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("max(1,2,3,4,2,2,1,4)", 0.0); - assertEquals(t, 4.0, 0.001); - } - - @Test - public void MEDIAN_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("MEDIAN(1,2,3,4,2,2,1,4)", 0.0); - assertEquals(t, 2.0, 0.001); - } - - @Test - public void MIN_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("MIN(1,2,3,4,2,2,1,4)", 0.0); - assertEquals(t, 1.0, 0.001); - } - - @Test - public void QUARTILE_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),0)", 0.0); - assertEquals(t, 1.0, 0.001); - t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),1)", 0.0); - assertEquals(t, 1.75, 0.001); - t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),2)", 0.0); - assertEquals(t, 2.0, 0.001); - t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),3)", 0.0); - assertEquals(t, 3.25, 0.001); - t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),4)", 0.0); - assertEquals(t, 4.0, 0.001); - } - - @Test - public void MODE_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("MODE(1,2,3,4,2,2,1,4)", 0.0); - assertEquals(t, 2.0, 0.001); - } - - @Test - public void PERCENTILE_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("PERCENTILE(array(1,2,3,4,2,2,1,4)�?.4)", 0.0); - assertEquals(t, 2.0, 0.001); - } - - @Test - public void PERCENTRANK_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("PERCENTRANK(array(1,2,3,4,2,2,1,4)�?)", 0.0); - assertEquals(t, 0.714, 0.001); - } - - @Test - public void AVERAGE_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("AVERAGE(1,2,3,4,2,2,1,4)", 0.0); - assertEquals(t, 2.375, 0.001); - } - - @Test - public void GEOMEAN_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("GEOMEAN(1,2,3,4)", 0.0); - assertEquals(round(t, 6), round(2.213363839, 6), 0.001); - } - - @Test - public void HARMEAN_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("HARMEAN(1,2,3,4)", 0.0); - assertEquals(round(t, 6), round(1.92, 6), 0.001); - } - - @Test - public void COUNT_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("COUNT(1,2,3,4,2,2,1,4)", 0.0); - assertEquals(t, 8.0, 0.001); - } - - @Test - public void AVEDEV_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("AVEDEV(1,2,3,4,2,2,1,4)", 0.0); - assertEquals(t, 0.96875, 0.001); - } - - @Test - public void STDEV_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("STDEV(1,2,3,4,2,2,1,4)", 0.0); - assertEquals(round(t, 6), round(1.187734939, 6), 0.001); - } - - @Test - public void STDEVP_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("STDEVP(1,2,3,4,2,2,1,4)", 0.0); - assertEquals(round(t, 6), round(1.111024302, 6), 0.001); - } - - @Test - public void DEVSQ_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("DEVSQ(1,2,3,4,2,2,1,4)", 0.0); - assertEquals(round(t, 6), round(9.875, 6), 0.001); - } - - @Test - public void VAR_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("VAR(1,2,3,4,2,2,1,4)", 0.0); - assertEquals(round(t, 6), round(1.410714286, 6), 0.001); - } - - @Test - public void VARP_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("VARP(1,2,3,4,2,2,1,4)", 0.0); - assertEquals(round(t, 6), round(1.234375, 6), 0.001); - } - - @Test - public void NORMSDIST_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("NORMSDIST(1)", 0.0); - assertEquals(round(t, 6), round(0.841344746, 6), 0.001); - } - - @Test - public void NORMDIST_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("NORMDIST(3,8,4,1)", 0.0); - assertEquals(round(t, 6), round(0.105649774, 6), 0.001); - t = engine.TryEvaluate("NORMDIST(3,8,4,0)", 0.0); - assertEquals(round(t, 6), round(0.045662271, 6), 0.001); - } - - @Test - public void NORMINV_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("NORMINV(0.8,8,3)", 0.0); - assertEquals(round(t, 6), round(10.5248637, 6), 0.001); - } - - @Test - public void NORMSINV_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("NORMSINV(0.3)", 0.0); - assertEquals(round(t, 6), round(-0.524400513, 6), 0.001); - } - - @Test - public void BETADIST_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("BETADIST(0.5,11,22)", 0.0); - assertEquals(round(t, 6), round(0.97494877, 6), 0.001); - } - - @Test - public void BETAINV_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("BETAINV(0.5,23,45)", 0.0); - assertEquals(round(t, 6), round(0.336640759, 6), 0.001); - } - - @Test - public void BINOMDIST_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("BINOMDIST(12,45,0.5,0)", 0.0); - assertEquals(round(t, 6), round(0.000817409, 6), 0.001); - t = engine.TryEvaluate("BINOMDIST(12,45,0.5,1)", 0.0); - assertEquals(round(t, 6), round(0.00122945, 6), 0.001); - } - - @Test - public void EXPONDIST_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("EXPONDIST(3,1,0)", 0.0); - assertEquals(round(t, 6), round(0.049787068, 6), 0.001); - t = engine.TryEvaluate("EXPONDIST(3,1,1)", 0.0); - assertEquals(round(t, 6), round(0.950212932, 6), 0.001); - } - - @Test - public void FDIST_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("FDIST(0.4,2,3)", 0.0); - assertEquals(round(t, 6), round(0.701465776, 6), 0.001); - } - - @Test - public void FINV_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("FINV(0.7,2,3)", 0.0); - assertEquals(round(t, 6), round(0.402651432, 6), 0.001); - } - - @Test - public void GAMMADIST_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("GAMMADIST(0.5,3,4,0)", 0.0); - assertEquals(round(t, 6), round(0.001723627, 6), 0.001); - t = engine.TryEvaluate("GAMMADIST(0.5,3,4,1)", 0.0); - assertEquals(round(t, 6), round(0.000296478, 6), 0.001); - } - - @Test - public void GAMMAINV_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("GAMMAINV(0.2,3,4)", 0.0); - assertEquals(round(t, 6), round(6.140176811, 6), 0.001); - } - - @Test - public void GAMMALN_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("GAMMALN(4)", 0.0); - assertEquals(round(t, 6), round(1.791759469, 6), 0.001); - } - - @Test - public void HYPGEOMDIST_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("HYPGEOMDIST(23,45,45,100)", 0.0); - assertEquals(round(t, 6), round(0.08715016, 6), 0.001); - } - - @Test - public void LOGINV_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("LOGINV(0.1,45,33)", 0.0); - assertEquals(round(t, 6), round(15.01122624, 6), 0.001); - } - - @Test - public void LOGNORMDIST_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("LOGNORMDIST(15,23,45)", 0.0); - assertEquals(round(t, 6), round(0.326019201, 6), 0.001); - } - - @Test - public void NEGBINOMDIST_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("NEGBINOMDIST(23,45,0.7)", 0.0); - assertEquals(round(t, 6), round(0.053463314, 6), 0.001); - } - - @Test - public void POISSON_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("POISSON(23,23,0)", 0.0); - assertEquals(round(t, 6), round(0.082884384, 6), 0.001); - t = engine.TryEvaluate("POISSON(23,23,1)", 0.0); - assertEquals(round(t, 6), round(0.555149936, 6), 0.001); - } - - @Test - public void TDIST_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("TDIST(1.2,24,1)", 0.0); - assertEquals(round(t, 6), round(0.120925677, 6), 0.001); - t = engine.TryEvaluate("TDIST(1.2,24,2)", 0.0); - assertEquals(round(t, 6), round(0.241851353, 6), 0.001); - } - - @Test - public void TINV_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("TINV(0.12,23)", 0.0); - assertEquals(round(t, 6), round(1.614756561, 6), 0.001); - } - - @Test - public void WEIBULL_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("WEIBULL(1,2,3,1)", 0.0); - assertEquals(round(t, 6), round(0.105160683, 6), 0.001); - t = engine.TryEvaluate("WEIBULL(1,2,3,0)", 0.0); - assertEquals(round(t, 6), round(0.198853182, 6), 0.001); - t = engine.TryEvaluate("WEIBULL(-1,2,3,0)", 0.0); - t = engine.TryEvaluate("WEIBULL(-1,-2,3,0)", 0.0); - t = engine.TryEvaluate("WEIBULL(-1,-2,-3,0)", 0.0); - t = engine.TryEvaluate("WEIBULL(-1,-2,-3,-1)", 0.0); - - } - - @Test - public void FISHER_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("FISHER(0.68)", 0.0); - assertEquals(round(t, 6), round(0.8291140383, 6), 0.001); - } - - @Test - public void FISHERINV_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("FISHERINV(0.6)", 0.0); - assertEquals(round(t, 6), round(0.537049567, 6), 0.001); - } - - @Test - public void LARGE_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("LARGE(array(1,2,3,4,2,2,1,4),3)", 0.0); - assertEquals(round(t, 6), round(3.0, 6), 0.001); - } - - @Test - public void SMALL_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SMALL(array(1,2,3,4,2,2,1,4),3)", 0.0); - assertEquals(round(t, 6), round(2.0, 6), 0.001); - } - - @Test - public void COUNTIF_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'>1')", 0.0); - assertEquals(t, 6.0, 0.001); - } - - @Test - public void SUMIF_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SUMIF(array(1,2,3,4,2,2,1,4),'>1')", 0.0); - assertEquals(t, 17, 0.001); - t = engine.TryEvaluate("SUMIF(array(1,2,3,4,2,2,1,4),'>1',array(1,1,1,1,1,1,1,1))", 0.0); - assertEquals(t, 6, 0.001); - } - - @Test - public void AVERAGEIF_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("AVERAGEIF(array(1,2,3,4,2,2,1,4),'>1')", 0.0); - assertEquals(round(t, 6), round(2.833333333, 6), 0.001); - t = engine.TryEvaluate("AVERAGEIF(array(1,2,3,4,2,2,1,4),'>1',array(1,1,1,1,1,1,1,1))", 0.0); - assertEquals(t, 1, 0.001); - } - - @Test - public void COVAR_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("COVAR(array(3,7,6,11),array(5,15,13,9))", 0.0); - double t1 = engine.TryEvaluate("COVARIANCE.P(array(3,7,6,11),array(5,15,13,9))", 0.0); - assertEquals(round(t, 6), round(3.375, 6), 0.001); - assertEquals(round(t1, 6), round(3.375, 6), 0.001); - } - - @Test - public void COVARIANCES_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("COVARIANCE.S(array(3,7,6,11),array(5,15,13,9))", 0.0); - assertEquals(round(t, 6), round(4.5, 6), 0.001); - } - // @SuppressWarnings("deprecation") - private double round(final double value, final int p) { - final BigDecimal bigD = new BigDecimal(value); - return bigD.setScale(p, BigDecimal.ROUND_HALF_UP).doubleValue(); - } -} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java deleted file mode 100644 index 80d1dc374..000000000 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_v3_5.java +++ /dev/null @@ -1,457 +0,0 @@ -package toolgood.algorithm.Tests; - -import org.junit.Test; -import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.enums.AreaUnitType; -import toolgood.algorithm.enums.DistanceUnitType; -import toolgood.algorithm.enums.MassUnitType; -import toolgood.algorithm.enums.VolumeUnitType; - -import static org.junit.Assert.assertEquals; - -public class AlgorithmEngineTest_v3_5 { - // 取消参数格式 {格式} 改成 {key:val,key2:v2} {1,2,3,} - // 由于 BigDecimal 精度问题 (java版本问题�? 公式 1=0.001*1000 返回 false�?为了绝大部分的正确, 比较前将精度缩小�?2位再进行比较 - - @Test - public void PARAM_test() { - // PARAM 动态获取参�? - Cylinder engine = new Cylinder(10, 15); - int num = engine.TryEvaluate("PARAM('半径')", 0); - assertEquals(num, 10); - num = engine.TryEvaluate("PARAMETER('半径')", 0); - assertEquals(num, 10); - num = engine.TryEvaluate("GETPARAMETER('半径')", 0); - assertEquals(num, 10); - - // 参数名称没有限制�? - num = engine.TryEvaluate("半径", 0); - assertEquals(num, 10); - } - - @Test - public void Error_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - String num = engine.TryEvaluate("Error('出错�?)", ""); - assertEquals(num, ""); - assertEquals(engine.LastError, "出错�?); - } - - @Test - public void Json_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - String str = engine.TryEvaluate("{name:'toolgood', age:'12',}['name']", ""); - assertEquals(str, "toolgood"); - - str = engine.TryEvaluate("{name:'toolgood', age:'12',other:{work:'IT'}}['other']['work']", ""); - assertEquals(str, "IT"); - - // 使用json 方法 使用比较标准�?json格式�?不然会出�? - str = engine.TryEvaluate("json(\"{'name':'toolgood', 'age':'12','other':{'work':'IT'}}\")['name']", ""); - assertEquals(str, "toolgood"); - - str = engine.TryEvaluate("json(\"{'name':'toolgood', 'age':'12','other':{'work':'IT'}}\")['other']['work']", ""); - assertEquals(str, "IT"); - - // 'HAS' | 'HASKEY' |'CONTAINS'|'CONTAINSKEY' 指向同一函数 只支持数组与json类型 - boolean b = engine.TryEvaluate("{name:'toolgood', age:'12',other:{work:'IT'}}.has('age')", false); - assertEquals(b, true); - b = engine.TryEvaluate("{name:'toolgood', age:'12',other:{work:'IT'}}.hasKey('age')", false); - assertEquals(b, true); - - b = engine.TryEvaluate("json(\"{'name':'toolgood', 'age':'12','other':{'work':'IT'}}\").has('age')", false); - assertEquals(b, true); - - // 注意只能获取第一�? - b = engine.TryEvaluate("{name:'toolgood', age:'12',other:{work:'IT'}}.has('work')", true); - assertEquals(b, false); - - - // 'HASVALUE' | 'CONTAINSVALUE' 指向同一函数 只支持数组与json类型 - b = engine.TryEvaluate("{name:'toolgood', age:'12',other:{work:'IT'}}.hasValue('toolgood')", false); - assertEquals(b, true); - - b = engine.TryEvaluate("json(\"{'name':'toolgood', 'age':'12','other':{'work':'IT'}}\").hasValue('toolgood')", false); - assertEquals(b, true); - } - - @Test - public void array_test() { - AlgorithmEngine engine = new AlgorithmEngine(); - engine.UseExcelIndex = true; - int num = engine.TryEvaluate("{1,2,3,4,}[2]", 0); - assertEquals(num,2); - String str = engine.TryEvaluate("{1,2,3,4,'555'}[5]", ""); - assertEquals(str,"555"); - - // 'HAS' | 'HASKEY' |'CONTAINS'|'CONTAINSKEY' 指向同一函数 - // 'HASVALUE' | 'CONTAINSVALUE' 指向同一函数 与上面的逻辑相同 - boolean b = engine.TryEvaluate("{1,2,3,4,}.has('1')", false); - assertEquals(b, true); - b = engine.TryEvaluate("{'abc','age'}.hasKey('age')", false); - assertEquals(b, true); - b = engine.TryEvaluate("{'abc','age'}.hasValue('age')", false); - assertEquals(b, true); - - b = engine.TryEvaluate("json(\"['abc','age']\").has('age')", false); - assertEquals(b, true); - - b = engine.TryEvaluate("json(\"['abc','age']\").hasValue('age')", false); - assertEquals(b, true); - - } - - - @Test - public void Distance_Test() { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean b = engine.TryEvaluate("1=1m", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=10dm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=100cm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000mm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.001km", false); - assertEquals(b, true); - - engine.DistanceUnit = DistanceUnitType.DM; - b = engine.TryEvaluate("1=0.1m", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1dm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=10cm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=100mm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.0001km", false); - assertEquals(b, true); - - engine.DistanceUnit = DistanceUnitType.CM; - b = engine.TryEvaluate("1=0.01m", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.1dm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1cm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=10mm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.00001km", false); - assertEquals(b, true); - - engine.DistanceUnit = DistanceUnitType.MM; - b = engine.TryEvaluate("1=0.001m", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.01dm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.1cm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1mm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.000001km", false); - assertEquals(b, true); - - engine.DistanceUnit = DistanceUnitType.KM; - - b = engine.TryEvaluate("1=1m*1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=10dm*1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=100cm*1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000mm*1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.001km*1000", false); - assertEquals(b, true); - } - - @Test - public void Area_Test() { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean b = engine.TryEvaluate("1=1m*1m", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m2=1m*1m", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m2=10dm*10dm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m2=100cm*100cm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m2=1000mm*1000mm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m2=0.001km*0.001km", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1m2", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=100dm2", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=10000cm2", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000mm2", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.000001km2", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1km2=1km*1km", false); - assertEquals(b, true); - - engine.AreaUnit = AreaUnitType.DM2; - - b = engine.TryEvaluate("1=1m2/100", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=100dm2/100", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=10000cm2/100", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000mm2/100", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.000001km2/100", false); - assertEquals(b, true); - - engine.AreaUnit = AreaUnitType.CM2; - - b = engine.TryEvaluate("1=1m2/100/100", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=100dm2/100/100", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=10000cm2/100/100", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000mm2/100/100", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.000001km2/100/100", false); - assertEquals(b, true); - - engine.AreaUnit = AreaUnitType.MM2; - - b = engine.TryEvaluate("1=1m2/100/100/100", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=100dm2/100/100/100", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=10000cm2/100/100/100", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000mm2/100/100/100", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.000001km2/100/100/100", false); - assertEquals(b, true); - - engine.AreaUnit = AreaUnitType.KM2; - - b = engine.TryEvaluate("1=1m2*1000*1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=100dm2*1000*1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=10000cm2*1000*1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000mm2*1000*1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.000001km2*1000*1000", false); - assertEquals(b, true); - - - } - - @Test - public void Volume_Test() { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean b = engine.TryEvaluate("1=1m*1m*1m", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m3=1m*1m*1m", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m3=1m2*1m", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m3=1000L", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1L=1000ml", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m3=1000ml*1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m3=10dm*10dm*10dm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m3=100cm*100cm*100cm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m3=1000mm*1000mm*1000mm", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1m3=0.001km*0.001km*0.001km", false); - assertEquals(b, true); - - - b = engine.TryEvaluate("1=1m3", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000dm3", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000cm3", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000000mm3", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1km3/1000/1000/1000", false); - assertEquals(b, true); - - engine.VolumeUnit = VolumeUnitType.DM3; - b = engine.TryEvaluate("1=1m3/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000dm3/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000cm3/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000000mm3/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1km3/1000/1000/1000/1000", false); - assertEquals(b, true); - - engine.VolumeUnit = VolumeUnitType.CM3; - b = engine.TryEvaluate("1=1m3/1000/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000dm3/1000/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000cm3/1000/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000000mm3/1000/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1km3/1000/1000/1000/1000/1000", false); - assertEquals(b, true); - - engine.VolumeUnit = VolumeUnitType.MM3; - b = engine.TryEvaluate("1=1m3/1000/1000/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000dm3/1000/1000/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000cm3/1000/1000/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000000000mm3/1000/1000/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1km3/1000/1000/1000/1000/1000/1000", false); - assertEquals(b, true); - - engine.VolumeUnit = VolumeUnitType.KM3; - b = engine.TryEvaluate("1=1m3*1000*1000*1000", false); - assertEquals(b, true); - b = engine.TryEvaluate("1=1000dm3*1000*1000*1000", false); - assertEquals(b, true); - b = engine.TryEvaluate("1=1000000cm3*1000*1000*1000", false); - assertEquals(b, true); - b = engine.TryEvaluate("1=1000000000mm3*1000*1000*1000", false); - assertEquals(b, true); - b = engine.TryEvaluate("1=1km3", false); - assertEquals(b, true); - } - - - @Test - public void Mass_Test() { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean b = engine.TryEvaluate("1=1kg", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000g", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.001t", false); - assertEquals(b, true); - - engine.MassUnit = MassUnitType.G; - - b = engine.TryEvaluate("1=1kg/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000g/1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.001t/1000", false); - assertEquals(b, true); - - engine.MassUnit = MassUnitType.T; - - b = engine.TryEvaluate("1=1kg*1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=1000g*1000", false); - assertEquals(b, true); - - b = engine.TryEvaluate("1=0.001t*1000", false); - assertEquals(b, true); - } - - @Test - public void Unit_Error_Test() { - // 下面是错�?演示�?因为计算时不会考虑单位,所以下面是正常通过�? - AlgorithmEngine engine = new AlgorithmEngine(); - boolean b = engine.TryEvaluate("1m=1kg", false); - assertEquals(b, true); - b = engine.TryEvaluate("1m=1m2", false); - assertEquals(b, true); - b = engine.TryEvaluate("1m=1m3", false); - assertEquals(b, true); - - } -} diff --git a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java b/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java deleted file mode 100644 index 69d032b46..000000000 --- a/java/src/test/java/toolgood/algorithm/Tests/AlgorithmEngineTest_vlookup.java +++ /dev/null @@ -1,49 +0,0 @@ -package toolgood.algorithm.Tests; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import toolgood.algorithm.AlgorithmEngine; - -public class AlgorithmEngineTest_vlookup { - @Test - public void vlookup_test() - { - AlgorithmEngine engine = new AlgorithmEngine(); - int num = engine.TryEvaluate("vlookup(array(array(1,2,3),array(2,3,4),array(3,4,5),array(4,5,6)),3,2)", 0); - assertEquals(num, 4); - - num = engine.TryEvaluate("vlookup(array(array(1,'2',3),array(2,3,4),array(3,'4',5),array(4,'5',6)),3,2)", 0); - assertEquals(num, 4); - - num = engine.TryEvaluate("vlookup(array(array(1,'2',3),array(2,3,4),array(3.1,'4',5),array(4,'5',6)),3.1,2)", 0); - assertEquals(num, 4); - - num = engine.TryEvaluate("vlookup(array(array(1,'2',3),array(2,3,4),array('3a','4',5),array(4,'5',6)),'3a',2)", 0); - assertEquals(num, 4); - - } - @Test - public void lookup_test() - { - String json = "[{'灰色':'L','canBookCount':905,'saleCount':91,'specId':'43b0e72e98731aed69e1f0cc7d64bf4d'},{'灰色':'XL','canBookCount':929,'saleCount':70,'specId':'893746f5330dc3273d24aa1ac1a9a8b5'},{'灰色':'XXL','canBookCount':942,'saleCount':57,'specId':'42d994cba0210528142a743d4069700f'},{'白色':'L','canBookCount':862,'saleCount':136,'specId':'82114cbd2c10b5e97b01af1510807e2d'},{'白色':'XL','canBookCount':881,'saleCount':118,'specId':'c45d8408137e34adf8e695250c42a2e9'},{'白色':'XXL','canBookCount':917,'saleCount':82,'specId':'df78564262818d6eb0c428a37ab4a251'},{'蓝色':'L','canBookCount':962,'saleCount':35,'specId':'e959b6ab7c355e403a3312c75bd3d5b4','key':null},{'蓝色':'XL','canBookCount':973,'saleCount':26,'specId':'27402e07efd89afa50733afa94cd6976'},{'蓝色':'XXL','canBookCount':985,'saleCount':14,'specId':'358b6c3b52bf711ac8ecfe7513a4f3ad'}]"; - AlgorithmEngine engine = new AlgorithmEngine(); - engine.AddParameter("jsonArray", json); - // 第二种方�? - //engine.AddParameter("jsonArray",Operand.CreateJson( json)); - - String num = engine.TryEvaluate("lookup([jsonArray].Json(),'[saleCount]=91','specId')", ""); - assertEquals(num, "43b0e72e98731aed69e1f0cc7d64bf4d"); - - num = engine.TryEvaluate("lookup([jsonArray].Json(),'[saleCount]=35','specId')", ""); - assertEquals(num, "e959b6ab7c355e403a3312c75bd3d5b4"); - - num = engine.TryEvaluate("lookup([jsonArray].Json(),'[蓝色]=\"L\"','specId')", ""); - assertEquals(num, "e959b6ab7c355e403a3312c75bd3d5b4"); - - num = engine.TryEvaluate("lookup([jsonArray].Json(),'[蓝色]=\"L\"','key')", "1"); - assertEquals(null, num); - } - -} diff --git a/java/src/test/java/toolgood/algorithm/Tests/CompareTest.java b/java/src/test/java/toolgood/algorithm/Tests/CompareTest.java new file mode 100644 index 000000000..1861d7250 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/CompareTest.java @@ -0,0 +1,134 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import toolgood.algorithm.AlgorithmEngine; + +import static org.junit.Assert.assertEquals; + +class CompareTest { + + @Test + void base_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean b = engine.TryEvaluate("1=1", false); + assertEquals(b, true); + + b = engine.TryEvaluate("1=2", true); + assertEquals(b, false); + + b = engine.TryEvaluate("1<>2", false); + assertEquals(b, true); + + b = engine.TryEvaluate("1!=2", false); + assertEquals(b, true); + + b = engine.TryEvaluate("1>2", true); + assertEquals(b, false); + + b = engine.TryEvaluate("1<2", false); + assertEquals(b, true); + + b = engine.TryEvaluate("1<=2", false); + assertEquals(b, true); + + b = engine.TryEvaluate("1>=2", true); + assertEquals(b, false); + + b = engine.TryEvaluate("'1'='1'", false); + assertEquals(b, true); + b = engine.TryEvaluate("'e'='e'", false); + assertEquals(b, true); + b = engine.TryEvaluate("'1'='2'", true); + assertEquals(b, false); + b = engine.TryEvaluate("'1'!='2'", false); + assertEquals(b, true); + } + + @Test + void strict_equality_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean b = engine.TryEvaluate("1===1", false); + assertEquals(b, true); + + b = engine.TryEvaluate("1===2", true); + assertEquals(b, false); + + b = engine.TryEvaluate("'1'==='1'", false); + assertEquals(b, true); + + b = engine.TryEvaluate("'1'==='2'", true); + assertEquals(b, false); + + b = engine.TryEvaluate("1!==2", false); + assertEquals(b, true); + + b = engine.TryEvaluate("1!==1", true); + assertEquals(b, false); + + b = engine.TryEvaluate("'1'!=='2'", false); + assertEquals(b, true); + + b = engine.TryEvaluate("'1'!=='1'", true); + assertEquals(b, false); + } + + @Test + void null_compare_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + + boolean bb2 = engine.TryEvaluate("1>null", false); + assertEquals(bb2, false); + + bb2 = engine.TryEvaluate("1>=null", false); + assertEquals(bb2, false); + + bb2 = engine.TryEvaluate("1<=null", false); + assertEquals(bb2, false); + + bb2 = engine.TryEvaluate("1 (-2)", false); + assertEquals(value, true); + + value = engine.TryEvaluate("(-1) > (-2)", false); + assertEquals(value, true); + + value = engine.TryEvaluate("-1 > (-2)", false); + assertEquals(value, true); + + value = engine.TryEvaluate("-1 > -2", false); + assertEquals(value, true); + + boolean value3 = engine.TryEvaluate("-7 < -2", false); + assertEquals(value3, true); + + value3 = engine.TryEvaluate("-7*Yes < -2", false); + assertEquals(value3, true); + + value3 = engine.TryEvaluate("-7*No > -2", false); + assertEquals(value3, true); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/CsharpSecurityTest.java b/java/src/test/java/toolgood/algorithm/Tests/CsharpSecurityTest.java new file mode 100644 index 000000000..9cbee1982 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/CsharpSecurityTest.java @@ -0,0 +1,118 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import static org.junit.Assert.*; + +import toolgood.algorithm.AlgorithmEngine; + +public class CsharpSecurityTest { + @Test + public void Md5_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("Md5('&=我中国人 >||')", ""); + assertEquals("2E1CEFBDFA3677725B7856E02D225819", dt); + dt = engine.TryEvaluate("Md5('123')", ""); + assertEquals("202CB962AC59075B964B07152D234B70", dt); + dt = engine.TryEvaluate("Md5('&=我中国人 >||','GGG')", ""); + assertEquals("", dt); + } + + @Test + public void Sha1_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("Sha1('&=我中国人 >||')", ""); + assertEquals("F2C250C58F3A40DC54B5A47F0F6B1187AD5AC2EE", dt); + dt = engine.TryEvaluate("Sha1('123')", ""); + assertEquals("40BD001563085FC35165329EA1FF5C5ECBDBBEEF", dt); + } + + @Test + public void Sha256_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("Sha256('&=我中国人 >||')", ""); + assertEquals("FA5BF04D13AEF750D62040E492479A16B6B10888D0B19923A1E7B9339990632A", dt); + dt = engine.TryEvaluate("Sha256('123')", ""); + assertEquals("A665A45920422F9D417E4867EFDC4FB8A04A1F3FFF1FA07E998E86F7F7A27AE3", dt); + } + + @Test + public void Sha512_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("Sha512('&=我中国人 >||')", ""); + assertEquals("FFEAC98C39D76CD86A3AB8ECEF16BE23166F68E1A3C5C9809A8AD2CE417170465286E4CF6FFA17924613CD7477533B9109A5DD504A2462F9DB693D56AD365C14", dt); + dt = engine.TryEvaluate("Sha512('123')", ""); + assertEquals("3C9909AFEC25354D551DAE21590BB26E38D53F2173B8D3DC3EEE4C047E7AB1C1EB8B85103E3BE7BA613B31BB5C9C36214DC9F14A42FD7A2FDB84856BCA5C44C2", dt); + } + + @Test + public void HmacMd5_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("HmacMd5('&=我中国人 >||','12')", ""); + assertEquals("CF3923196E21B1E270FD72B089B092BB", dt); + dt = engine.TryEvaluate("HmacMd5('123','123')", ""); + assertEquals("B2A1EC0F3E0607099D7F39791C04E9A4", dt); + } + + @Test + public void HmacSha1_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("HmacSha1('&=我中国人 >||','12')", ""); + assertEquals("EB4D4FC2AA5637060FD12004DF845801D8902105", dt); + dt = engine.TryEvaluate("HmacSha1('123','123')", ""); + assertEquals("A3C024F01CCCB3B63457D848B0D2F89C1F744A3D", dt); + } + + @Test + public void HmacSha256_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("HmacSha256('&=我中国人 >||','12')", ""); + assertEquals("3E25E0D14039E8258BBBBD15F7E3B91BB497A8966C12E1DEA3D651BF03CB4B97", dt); + dt = engine.TryEvaluate("HmacSha256('123','123')", ""); + assertEquals("3CAFE40F92BE6AC77D2792B4B267C2DA11E3F3087B93BB19C6C5133786984B44", dt); + } + + @Test + public void HmacSha512_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("HmacSha512('&=我中国人 >||','12')", ""); + assertEquals("4E9CE785C46569965C7C712A841EC7382C64D918D49F992EDB3504BED9C3A5EFBB1C8F712968F6B904417E07F9D72E707FCF148D55A4D3EDF1A9866B7BAC2049", dt); + dt = engine.TryEvaluate("HmacSha512('123','123')", ""); + assertEquals("0634FD04380BBAF5069C8C46A74C7D21DF7414888D980C27A16D5E262CB8C9059139C212D0926000FAF026E483904CEFAE2F5E9D9BD5F51FBC2AC4C4DE518115", dt); + } + + @Test + public void Guid() { + AlgorithmEngine engine = new AlgorithmEngine(); + String r = engine.TryEvaluate("Guid()", ""); + assertNotNull(r); + } + + // 方法式调用测试 - 加密类 + @Test + public void MethodStyle_MD5_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("'123'.MD5()", ""); + assertEquals("202CB962AC59075B964B07152D234B70", dt); + } + + @Test + public void MethodStyle_SHA1_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("'123'.SHA1()", ""); + assertEquals("40BD001563085FC35165329EA1FF5C5ECBDBBEEF", dt); + } + + @Test + public void MethodStyle_SHA256_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("'123'.SHA256()", ""); + assertEquals("A665A45920422F9D417E4867EFDC4FB8A04A1F3FFF1FA07E998E86F7F7A27AE3", dt); + } + + @Test + public void MethodStyle_SHA512_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("'123'.SHA512()", ""); + assertEquals("3C9909AFEC25354D551DAE21590BB26E38D53F2173B8D3DC3EEE4C047E7AB1C1EB8B85103E3BE7BA613B31BB5C9C36214DC9F14A42FD7A2FDB84856BCA5C44C2", dt); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/CsharpTest.java b/java/src/test/java/toolgood/algorithm/Tests/CsharpTest.java new file mode 100644 index 000000000..30c620fb4 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/CsharpTest.java @@ -0,0 +1,456 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import static org.junit.Assert.*; + +import toolgood.algorithm.AlgorithmEngine; + +public class CsharpTest { + @Test + public void Regex_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.setUseExcelIndex(false); + String r = engine.TryEvaluate("Regex('abcd','a.*c')", ""); + assertEquals("abc", r); + } + + @Test + public void REGEXREPLACE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String r = engine.TryEvaluate("REGEXREPLACE('abc123def', '\\\\d+', 'X')", ""); + assertEquals("abcXdef", r); + + r = engine.TryEvaluate("REGEXREPLACE('hello world', 'world', 'there')", ""); + assertEquals("hello there", r); + + r = engine.TryEvaluate("REGEXREPLACE('123-456-789', '-', '')", ""); + assertEquals("123456789", r); + } + + @Test + public void MethodStyle_REGEX_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String r = engine.TryEvaluate("'abcd'.REGEX('a.*c')", ""); + assertEquals("abc", r); + } + + @Test + public void MethodStyle_REGEXREPLACE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String r = engine.TryEvaluate("'abc123def'.REGEXREPLACE('\\\\d+', 'X')", ""); + assertEquals("abcXdef", r); + } + + @Test + public void MethodStyle_ISREGEX_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean r = engine.TryEvaluate("'abcd'.ISREGEX('a.*c')", false); + assertEquals(true, r); + + r = engine.TryEvaluate("'abcd'.ISREGEX('x.*z')", true); + assertEquals(false, r); + } + + @Test + public void IsRegex_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean r = engine.TryEvaluate("IsRegex('abcd','a.*c')", false); + assertEquals(true, r); + r = engine.TryEvaluate("IsRegex('abcd','da.*c')", true); + assertEquals(false, r); + } + + @Test + public void IsRegex_ALIAS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean r = engine.TryEvaluate("ISMATCH('abcd','a.*c')", false); + assertEquals(true, r); + r = engine.TryEvaluate("ISMATCH('abcd','da.*c')", true); + assertEquals(false, r); + } + + @Test + public void IndexOf() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.setUseExcelIndex(false); + int dt = engine.TryEvaluate("IndexOf('abcd','cd')", -1); + assertEquals(2, dt); + dt = engine.TryEvaluate("LastIndexOf('abcd','cd')", -1); + assertEquals(2, dt); + } + + @Test + public void Split() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("Split('1,2,3,4',',')[3]", ""); + assertEquals("3", dt); + } + + @Test + public void TrimStart() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("TrimStart(' 123 ')", ""); + assertEquals("123 ", dt); + + dt = engine.TryEvaluate("TrimStart(' 123 ',' 1')", ""); + assertEquals("23 ", dt); + } + + @Test + public void TrimStart_ALIAS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("LTRIM(' 123 ')", ""); + assertEquals("123 ", dt); + + dt = engine.TryEvaluate("LTRIM(' 123 ',' 1')", ""); + assertEquals("23 ", dt); + } + + @Test + public void TrimEnd() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("TrimEnd(' 123 ')", ""); + assertEquals(" 123", dt); + + dt = engine.TryEvaluate("TrimEnd(' 123 ','3 ')", ""); + assertEquals(" 12", dt); + } + + @Test + public void TrimEnd_ALIAS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("RTRIM(' 123 ')", ""); + assertEquals(" 123", dt); + + dt = engine.TryEvaluate("RTRIM(' 123 ','3 ')", ""); + assertEquals(" 12", dt); + } + + @Test + public void Join() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("Join(',',1,2,5,6)", ""); + assertEquals("1,2,5,6", dt); + dt = engine.TryEvaluate("Join(',',1,2,5,6,split('7,8,9',','))", ""); + assertEquals("1,2,5,6,7,8,9", dt); + + dt = engine.TryEvaluate("Join(',',1,2,5,6,'tt')", ""); + assertEquals("1,2,5,6,tt", dt); + } + + @Test + public void Substring() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("Substring('123456789',1,2)", ""); + assertEquals("12", dt); + } + + @Test + public void StartsWith() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean dt = engine.TryEvaluate("StartsWith('123456789','12')", false); + assertEquals(true, dt); + dt = engine.TryEvaluate("StartsWith('123456789','127')", true); + assertEquals(false, dt); + } + + @Test + public void EndsWith() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean dt = engine.TryEvaluate("EndsWith('123456789','89')", false); + assertEquals(true, dt); + dt = engine.TryEvaluate("EndsWith('123456789','127')", true); + assertEquals(false, dt); + } + + @Test + public void IsNullOrEmpty() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean dt = engine.TryEvaluate("IsNullOrEmpty('')", false); + assertEquals(true, dt); + dt = engine.TryEvaluate("IsNullOrEmpty(' ')", true); + assertEquals(false, dt); + } + + @Test + public void IsNullOrWhiteSpace() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean dt = engine.TryEvaluate("IsNullOrWhiteSpace('')", false); + assertEquals(true, dt); + dt = engine.TryEvaluate("IsNullOrWhiteSpace(' ')", false); + assertEquals(true, dt); + dt = engine.TryEvaluate("IsNullOrWhiteSpace(' f ')", true); + assertEquals(false, dt); + } + + @Test + public void RemoveStart() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("RemoveStart('123456789','12')", ""); + assertEquals("3456789", dt); + dt = engine.TryEvaluate("RemoveStart('123456789','127')", ""); + assertEquals("123456789", dt); + } + + @Test + public void RemoveEnd() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("RemoveEnd('123456789','89')", ""); + assertEquals("1234567", dt); + dt = engine.TryEvaluate("RemoveEnd('123456789','127')", ""); + assertEquals("123456789", dt); + } + + @Test + public void Json_Object_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("json('{\"Name\":\"William Shakespeare\",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}').Age", ""); + assertEquals("51", dt); + String dt2 = engine.TryEvaluate("json('{\"Name\":\"William Shakespeare\",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}')['Birthday']", ""); + assertEquals("04/26/1564 00:00:00", dt2); + } + + @Test + public void Json_Array_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("json('[1,2,3]')[1]", ""); + assertEquals("1", dt); + } + + @Test + public void Json_MethodChain_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("json('{\"Name\":\"William Shakespeare \",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}')['Name'].Trim()", ""); + assertEquals("William Shakespeare", dt); + + dt = engine.TryEvaluate("json('{\"Name1\":\"William Shakespeare \",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}')['Name'& 1].Trim().substring(2,3)", ""); + assertEquals("ill", dt); + } + + @Test + public void Json_Invalid_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("json('12346{\"Name1\":\"William Shakespeare \",\"Age\":51,\"Birthday\":\"04/26/1564 00:00:00\"}')['Name'& 1].Trim().substring(2,3)", ""); + assertEquals("", dt); + + dt = engine.TryEvaluate("json('[1,2,3,4,5,6]')[1].Trim()", ""); + assertEquals("1", dt); + + dt = engine.TryEvaluate("json('[1,2,3,4,5,6]22')[1].Trim()", ""); + assertEquals("", dt); + + dt = engine.TryEvaluate("json('22[1,2,3,4,5,6]')[1].Trim()", ""); + assertEquals("", dt); + } + + @Test + public void Json_Boolean_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean dt2 = engine.TryEvaluate("json('{\"w11\":true}')['w11']", false); + assertEquals(true, dt2); + } + + @Test + public void Json_Raw_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt3 = engine.TryEvaluate("{\"w11\":false}", ""); + assertEquals("{\"w11\":false}", dt3); + + dt3 = engine.TryEvaluate("[1,2,3,4]", ""); + assertEquals("[1,2,3,4]", dt3); + } + + // 方法式调用测试 - 字符串扩展方法 + @Test + public void MethodStyle_TRIMSTART_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("' 123 '.TRIMSTART()", ""); + assertEquals("123 ", dt); + + dt = engine.TryEvaluate("' 123 '.TRIMSTART(' 1')", ""); + assertEquals("23 ", dt); + } + + @Test + public void MethodStyle_TRIMEND_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("' 123 '.TRIMEND()", ""); + assertEquals(" 123", dt); + + dt = engine.TryEvaluate("' 123 '.TRIMEND('3 ')", ""); + assertEquals(" 12", dt); + } + + @Test + public void MethodStyle_INDEXOF_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.setUseExcelIndex(false); + int dt = engine.TryEvaluate("'abcd'.INDEXOF('cd')", -1); + assertEquals(2, dt); + + dt = engine.TryEvaluate("'abcd'.INDEXOF('cd',0)", -1); + assertEquals(2, dt); + } + + @Test + public void MethodStyle_LASTINDEXOF_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.setUseExcelIndex(false); + int dt = engine.TryEvaluate("'abcdcd'.LASTINDEXOF('cd')", -1); + assertEquals(4, dt); + } + + @Test + public void MethodStyle_SPLIT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("'1,2,3,4'.SPLIT(',')[3]", ""); + assertEquals("3", dt); + } + + @Test + public void MethodStyle_JOIN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("','.JOIN(1,2,3)", ""); + assertEquals("1,2,3", dt); + } + + @Test + public void MethodStyle_SUBSTRING_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("'123456789'.SUBSTRING(1,2)", ""); + assertEquals("12", dt); + + dt = engine.TryEvaluate("'123456789'.SUBSTRING(3)", ""); + assertEquals("3456789", dt); + } + + @Test + public void MethodStyle_STARTSWITH_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean dt = engine.TryEvaluate("'123456789'.STARTSWITH('12')", false); + assertEquals(true, dt); + + dt = engine.TryEvaluate("'123456789'.STARTSWITH('127')", true); + assertEquals(false, dt); + } + + @Test + public void MethodStyle_ENDSWITH_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean dt = engine.TryEvaluate("'123456789'.ENDSWITH('89')", false); + assertEquals(true, dt); + + dt = engine.TryEvaluate("'123456789'.ENDSWITH('127')", true); + assertEquals(false, dt); + } + + @Test + public void MethodStyle_ISNULLOREMPTY_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean dt = engine.TryEvaluate("''.ISNULLOREMPTY()", false); + assertEquals(true, dt); + + dt = engine.TryEvaluate("' '.ISNULLOREMPTY()", true); + assertEquals(false, dt); + } + + @Test + public void MethodStyle_ISNULLORWHITESPACE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean dt = engine.TryEvaluate("''.ISNULLORWHITESPACE()", false); + assertEquals(true, dt); + + dt = engine.TryEvaluate("' '.ISNULLORWHITESPACE()", false); + assertEquals(true, dt); + + dt = engine.TryEvaluate("' f '.ISNULLORWHITESPACE()", true); + assertEquals(false, dt); + } + + @Test + public void MethodStyle_REMOVESTART_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("'123456789'.REMOVESTART('12')", ""); + assertEquals("3456789", dt); + + dt = engine.TryEvaluate("'123456789'.REMOVESTART('127')", ""); + assertEquals("123456789", dt); + } + + @Test + public void MethodStyle_REMOVEEND_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("'123456789'.REMOVEEND('89')", ""); + assertEquals("1234567", dt); + + dt = engine.TryEvaluate("'123456789'.REMOVEEND('127')", ""); + assertEquals("123456789", dt); + } + + @Test + public void MethodStyle_JSON_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("'{\"Name\":\"William Shakespeare\",\"Age\":51}'.JSON()['Age']", ""); + assertEquals("51", dt); + } + + @Test + public void MethodStyle_HAS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean dt = engine.TryEvaluate("{\"name\":\"toolgood\",\"age\":\"12\"}.HAS('age')", false); + assertEquals(true, dt); + + dt = engine.TryEvaluate("{\"name\":\"toolgood\",\"age\":\"12\"}.HASKEY('age')", false); + assertEquals(true, dt); + + dt = engine.TryEvaluate("{\"name\":\"toolgood\",\"age\":\"12\"}.CONTAINS('age')", false); + assertEquals(true, dt); + + dt = engine.TryEvaluate("{\"name\":\"toolgood\",\"age\":\"12\"}.CONTAINSKEY('age')", false); + assertEquals(true, dt); + } + + @Test + public void MethodStyle_HASVALUE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean dt = engine.TryEvaluate("{\"name\":\"toolgood\",\"age\":\"12\"}.HASVALUE('toolgood')", false); + assertEquals(true, dt); + + dt = engine.TryEvaluate("{\"name\":\"toolgood\",\"age\":\"12\"}.CONTAINSVALUE('toolgood')", false); + assertEquals(true, dt); + } + + @Test + public void LookFloor_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + + double num = engine.TryEvaluate("LookFloor(2,[0,1,2,3,4])", 0.0); + assertEquals(2.0, num, 0.001); + + num = engine.TryEvaluate("LookFloor(2.1,[0,1,2,3,4])", 0.0); + assertEquals(2.0, num, 0.001); + + num = engine.TryEvaluate("LookFloor(-2.1,[0,1,2,3,4])", 0.0); + assertEquals(0.0, num, 0.001); + + num = engine.TryEvaluate("LookFloor(5,[0,1,2,3,4])", 0.0); + assertEquals(4.0, num, 0.001); + } + + @Test + public void LookCeiling_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + + double num = engine.TryEvaluate("LookCeiling(2,[0,1,2,3,4])", 0.0); + assertEquals(2.0, num, 0.001); + + num = engine.TryEvaluate("LookCeiling(2.1,[0,1,2,3,4])", 0.0); + assertEquals(3.0, num, 0.001); + + num = engine.TryEvaluate("LookCeiling(-2.1,[0,1,2,3,4])", 0.0); + assertEquals(0.0, num, 0.001); + + num = engine.TryEvaluate("LookCeiling(5,[0,1,2,3,4])", 0.0); + assertEquals(4.0, num, 0.001); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/CsharpWebTest.java b/java/src/test/java/toolgood/algorithm/Tests/CsharpWebTest.java new file mode 100644 index 000000000..12ab241c8 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/CsharpWebTest.java @@ -0,0 +1,79 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import static org.junit.Assert.*; + +import toolgood.algorithm.AlgorithmEngine; + +public class CsharpWebTest { + @Test + public void UrlDecode() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("UrlDecode('%26%3d%e6%88%91%e4%b8%ad%e5%9b%bd%e4%ba%ba+%3e%7c%7c')", ""); + assertEquals("&=我中国人 >||", dt); + } + + @Test + public void UrlEncode() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("UrlEncode('&=我中国人 >||')", ""); + assertEquals("%26%3d%e6%88%91%e4%b8%ad%e5%9b%bd%e4%ba%ba+%3e%7c%7c", dt); + } + + @Test + public void HtmlEncode() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("HtmlEncode('&=我中国人 >||')", ""); + assertEquals("&=我中国人 >||", dt); + } + + @Test + public void HtmlDecode() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("HtmlDecode('&=我中国人 >||')", ""); + assertEquals("&=我中国人 >||", dt); + } + + @Test + public void TextToBase64() { + AlgorithmEngine engine = new AlgorithmEngine(); + String r = engine.TryEvaluate("TextToBase64('&=我中国人 >||')", ""); + assertEquals("Jj3miJHkuK3lm73kurogPnx8", r); + } + + @Test + public void TextToBase64Url() { + AlgorithmEngine engine = new AlgorithmEngine(); + String r = engine.TryEvaluate("TextToBase64Url('&=我中国人 >||')", ""); + assertEquals("Jj3miJHkuK3lm73kurogPnx8", r); + } + + @Test + public void Base64ToText() { + AlgorithmEngine engine = new AlgorithmEngine(); + String r = engine.TryEvaluate("Base64ToText('Jj3miJHkuK3lm73kurogPnx8')", ""); + assertEquals("&=我中国人 >||", r); + } + + @Test + public void Base64UrlToText() { + AlgorithmEngine engine = new AlgorithmEngine(); + String r = engine.TryEvaluate("Base64UrlToText('Jj3miJHkuK3lm73kurogPnx8')", ""); + assertEquals("&=我中国人 >||", r); + } + + // 方法式调用测试 - 编码类 + @Test + public void MethodStyle_URLENCODE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("'&=我中国人 >||'.URLENCODE()", ""); + assertEquals("%26%3d%e6%88%91%e4%b8%ad%e5%9b%bd%e4%ba%ba+%3e%7c%7c", dt); + } + + @Test + public void MethodStyle_URLDECODE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String dt = engine.TryEvaluate("'%26%3d%e6%88%91%e4%b8%ad%e5%9b%bd%e4%ba%ba+%3e%7c%7c'.URLDECODE()", ""); + assertEquals("&=我中国人 >||", dt); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java b/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java index b64ef8cea..b44965197 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java +++ b/java/src/test/java/toolgood/algorithm/Tests/Cylinder.java @@ -1,47 +1,39 @@ package toolgood.algorithm.Tests; import java.util.List; - -import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.AlgorithmEngineEx; import toolgood.algorithm.Operand; -import toolgood.algorithm.internals.MyParameter; -public class Cylinder extends AlgorithmEngine { - private int _radius; - private int _height; +public class Cylinder extends AlgorithmEngineEx { + private double _radius; + private double _height; - public Cylinder(int radius, int height) { + public Cylinder(double radius, double height) { _radius = radius; _height = height; } - @Override - protected Operand GetParameter(MyParameter parameter) { - if (parameter.Name.equals("半径")) { + public Operand GetParameterEx(String parameter) { + if(parameter.equals("半径")) { return Operand.Create(_radius); } - if (parameter.Name.equals("直径")) - { + if(parameter.equals("直径")) { return Operand.Create(_radius * 2); } - if (parameter.Name.equals("�?)) - { + if(parameter.equals("高")) { return Operand.Create(_height); } return super.GetParameter(parameter); } @Override - protected Operand ExecuteDiyFunction(String funcName, List operands) - { - if (funcName.equals("求面�?)) - { - if (operands.size() == 1) - { - int r =(int) operands.get(0).ToNumber(null).NumberValue().intValue(); + public Operand ExecuteDiyFunction(String funcName, List operands) { + if (funcName.equals("求面积")) { + if (operands.size() == 1) { + double r = operands.get(0).ToNumber("").DoubleValue(); return Operand.Create(r * r * Math.PI); } } return super.ExecuteDiyFunction(funcName, operands); } -} +} \ No newline at end of file diff --git a/java/src/test/java/toolgood/algorithm/Tests/DateTimesTest.java b/java/src/test/java/toolgood/algorithm/Tests/DateTimesTest.java new file mode 100644 index 000000000..ae8b05b11 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/DateTimesTest.java @@ -0,0 +1,524 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import toolgood.algorithm.AlgorithmEngine; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.temporal.ChronoUnit; + +import static org.junit.Assert.assertEquals; + +class DateTimesTest { + + @Test + void DATEVALUE_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("DATEVALUE('2016-01-01')", ""); + assertEquals(dt, LocalDate.of(2016, 1, 1)); + + dt = engine.TryEvaluate("DATEVALUE('2016/01/01')", ""); + assertEquals(dt, LocalDate.of(2016, 1, 1)); + + dt = engine.TryEvaluate("DATEVALUE('1691234899000',0)", 0); + assertEquals(dt, LocalDateTime.of(2023, 8, 5, 19, 28, 19)); + + dt = engine.TryEvaluate("DATEVALUE('1691234899',0)", 0); + assertEquals(dt, LocalDateTime.of(2023, 8, 5, 19, 28, 19)); + + engine.UseLocalTime = true; + dt = engine.TryEvaluate("DATEVALUE('1691234899000',0)", 0); + assertEquals(dt, LocalDateTime.of(2023, 8, 5, 19, 28, 19)); + + dt = engine.TryEvaluate("DATEVALUE('1691234899',0)", 0); + assertEquals(dt, LocalDateTime.of(2023, 8, 5, 19, 28, 19)); + + dt = engine.TryEvaluate("DATEVALUE('1691234899000')", ""); + assertEquals(dt, LocalDateTime.of(2023, 8, 5, 19, 28, 19)); + + dt = engine.TryEvaluate("DATEVALUE('1691234899')", ""); + assertEquals(dt, LocalDateTime.of(2023, 8, 5, 19, 28, 19)); + } + + @Test + void TIMESTAMP_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.UseLocalTime = true; + + Object dt = engine.TryEvaluate("TIMESTAMP('2016-01-01')", 0L); + assertEquals(dt, 1451577600000L); + + dt = engine.TryEvaluate("TIMESTAMP('2016/01/01')", 0L); + assertEquals(dt, 1451577600000L); + + dt = engine.TryEvaluate("TIMESTAMP('2016-01-01',0)", 0L); + assertEquals(dt, 1451577600000L); + + dt = engine.TryEvaluate("TIMESTAMP('2016-01-01',1)", 0L); + assertEquals(dt, 1451577600L); + } + + @Test + void TIMEVALUE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("TIMEVALUE('12:12:12')", ""); + assertEquals(dt, LocalTime.of(12, 12, 12)); + } + + @Test + void DATE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("DATE(2016,1,1)", ""); + assertEquals(dt, LocalDate.of(2016, 1, 1)); + } + + @Test + void time_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("time(11,12,13)", ""); + assertEquals(dt, LocalTime.of(11, 12, 13)); + } + + @Test + void Now_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("now()", ""); + LocalDateTime now = LocalDateTime.now(); + LocalDateTime result = (LocalDateTime) dt; + assertEquals(result.getYear(), now.getYear()); + assertEquals(result.getMonth(), now.getMonth()); + assertEquals(result.getDayOfMonth(), now.getDayOfMonth()); + assertEquals(result.getHour(), now.getHour()); + assertEquals(result.getMinute(), now.getMinute()); + } + + @Test + void Today_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("Today()", ""); + LocalDate today = LocalDate.now(); + assertEquals(dt, today); + } + + @Test + void Year_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("year(now())", 0); + int year = LocalDateTime.now().getYear(); + assertEquals(dt, year); + } + + @Test + void Month_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("Month(now())", 0); + int month = LocalDateTime.now().getMonthValue(); + assertEquals(dt, month); + } + + @Test + void Day_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("Day(now())", 0); + int day = LocalDateTime.now().getDayOfMonth(); + assertEquals(dt, day); + } + + @Test + void Hour_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("Hour(now())", 0); + int hour = LocalDateTime.now().getHour(); + assertEquals(dt, hour); + } + + @Test + void Minute_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("Minute(now())", 0); + int minute = LocalDateTime.now().getMinute(); + assertEquals(dt, minute); + } + + @Test + void Second_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("Second(now())", 0); + int second = LocalDateTime.now().getSecond(); + assertEquals(dt, second); + } + + @Test + void WEEKDAY_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("WEEKDAY(date(2017,1,7))", 0); + assertEquals(dt, 7); + dt = engine.TryEvaluate("WEEKDAY(date(2017,1,7),1)", 0); + assertEquals(dt, 7); + dt = engine.TryEvaluate("WEEKDAY(date(2017,1,7),2)", 0); + assertEquals(dt, 6); + dt = engine.TryEvaluate("WEEKDAY(date(2017,1,7),3)", 0); + assertEquals(dt, 5); + + dt = engine.TryEvaluate("WEEKDAY(date(2017,1,8),1)", 0); + assertEquals(dt, 1); + dt = engine.TryEvaluate("WEEKDAY(date(2017,1,8),2)", 0); + assertEquals(dt, 7); + dt = engine.TryEvaluate("WEEKDAY(date(2017,1,8),3)", 0); + assertEquals(dt, 6); + + dt = engine.TryEvaluate("WEEKDAY(date(2017,1,2),1)", 0); + assertEquals(dt, 2); + dt = engine.TryEvaluate("WEEKDAY(date(2017,1,2),2)", 0); + assertEquals(dt, 1); + dt = engine.TryEvaluate("WEEKDAY(date(2017,1,2),3)", 0); + assertEquals(dt, 0); + } + + @Test + void DATEDIF_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','y')", 0); + assertEquals(dt, 41); + + dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','m')", 0); + assertEquals(dt, 503); + + dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','d')", 0); + assertEquals(dt, 15318); + + dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','yd')", 0); + assertEquals(dt, 342); + + dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','ym')", 0); + assertEquals(dt, 11); + + dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','md')", 0); + assertEquals(dt, 8); + } + + @Test + void DAYS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("DAYS('2017-1-7','1975-1-30')", 0); + assertEquals(dt, 15318); + + dt = engine.TryEvaluate("DAYS('2016-3-1','2016-2-28')", 0); + assertEquals(dt, 2); + + dt = engine.TryEvaluate("DAYS('2016-2-28','2016-3-1')", 0); + assertEquals(dt, -2); + } + + @Test + void DAYS360_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("DAYS360('1975-1-30','2017-1-7')", 0); + assertEquals(dt, 15097); + } + + @Test + void EDATE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("EDATE('2012-1-31',32)", ""); + assertEquals(dt, LocalDate.of(2014, 9, 30)); + } + + @Test + void EOMONTH_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("EOMONTH('2012-2-1',32)", ""); + assertEquals(dt, LocalDate.of(2014, 10, 31)); + } + + @Test + void NETWORKDAYS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("NETWORKDAYS('2012-1-1','2013-1-1')", 0); + assertEquals(dt, 262); + } + + @Test + void WORKDAY_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("WORKDAY('2012-1-2',145)", ""); + assertEquals(dt, LocalDate.of(2012, 7, 23)); + } + + @Test + void WEEKNUM_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("WEEKNUM('2016-1-3')", 0); + assertEquals(dt, 2); + dt = engine.TryEvaluate("WEEKNUM('2016-1-2')", 0); + assertEquals(dt, 1); + + dt = engine.TryEvaluate("WEEKNUM('2016-1-4',2)", 0); + assertEquals(dt, 2); + dt = engine.TryEvaluate("WEEKNUM('2016-1-3',2)", 0); + assertEquals(dt, 1); + dt = engine.TryEvaluate("WEEKNUM('2016-1-2',2)", 0); + assertEquals(dt, 1); + } + + @Test + void YEARFRAC_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("YEARFRAC('2012-1-1', '2012-7-1')", 0.0); + assertEquals(Math.round((Double) t * 1000) / 1000.0, Math.round(0.5 * 1000) / 1000.0); + + t = engine.TryEvaluate("YEARFRAC('2012-1-1', '2013-1-1')", 0.0); + assertEquals(Math.round((Double) t * 1000) / 1000.0, Math.round(1.0 * 1000) / 1000.0); + + t = engine.TryEvaluate("YEARFRAC('2012-1-1', '2012-7-1', 0)", 0.0); + assertEquals(Math.round((Double) t * 1000) / 1000.0, Math.round(0.5 * 1000) / 1000.0); + + t = engine.TryEvaluate("YEARFRAC('2012-1-1', '2012-7-1', 1)", 0.0); + assertEquals(Math.round((Double) t * 1000) / 1000.0, Math.round(0.49726776 * 1000) / 1000.0); + + t = engine.TryEvaluate("YEARFRAC('2012-1-1', '2012-7-1', 2)", 0.0); + assertEquals(Math.round((Double) t * 1000) / 1000.0, Math.round(0.505555556 * 1000) / 1000.0); + + t = engine.TryEvaluate("YEARFRAC('2012-1-1', '2012-7-1', 3)", 0.0); + assertEquals(Math.round((Double) t * 1000) / 1000.0, Math.round(0.498630137 * 1000) / 1000.0); + + t = engine.TryEvaluate("YEARFRAC('2012-1-1', '2012-7-1', 4)", 0.0); + assertEquals(Math.round((Double) t * 1000) / 1000.0, Math.round(0.5 * 1000) / 1000.0); + } + + @Test + void AddYears_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2000-02-01'.addYears(1).year()", 0); + assertEquals(dt, 2001); + + dt = engine.TryEvaluate("'2000/02/01'.addYears(1).year()", 0); + assertEquals(dt, 2001); + } + + @Test + void AddMonths_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2000-02-01'.AddMonths(1).Month()", 0); + assertEquals(dt, 3); + } + + @Test + void AddDays_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2000-02-01'.AddDays(1).Day()", 0); + assertEquals(dt, 2); + } + + @Test + void AddHours_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2000-02-01 12:05:06'.AddHours(1).Hour()", 0); + assertEquals(dt, 13); + } + + @Test + void AddMinutes_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2000-02-01 12:05:06'.AddMinutes(1).Minute()", 0); + assertEquals(dt, 6); + } + + @Test + void AddSeconds_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2000-02-01 12:05:06'.AddSeconds(1).Second()", 0); + assertEquals(dt, 7); + + dt = engine.TryEvaluate("'2000-02-01 10:05:06'.AddSeconds(1).Second()", 0); + assertEquals(dt, 7); + + dt = engine.TryEvaluate("'2000-02-01 20:05:06'.AddSeconds(1).Second()", 0); + assertEquals(dt, 7); + + dt = engine.TryEvaluate("'2000-02-01 9:05:06'.AddSeconds(1).Second()", 0); + assertEquals(dt, 7); + + dt = engine.TryEvaluate("'7:05:06'.AddSeconds(1).Second()", 0); + assertEquals(dt, 7); + + dt = engine.TryEvaluate("'10:05:06'.AddSeconds(1).Second()", 0); + assertEquals(dt, 7); + + dt = engine.TryEvaluate("'20:05:06'.AddSeconds(1).Second()", 0); + assertEquals(dt, 7); + + dt = engine.TryEvaluate("'2000-02-01 24:05:06'.AddSeconds(1).Second()", 0); + assertEquals(dt, 0); + } + + // 方法式调用测试 + @Test + void MethodStyle_DATEVALUE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2016-01-01'.DATEVALUE()", ""); + assertEquals(dt, LocalDate.of(2016, 1, 1)); + } + + @Test + void MethodStyle_TIMEVALUE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'12:12:12'.TIMEVALUE()", ""); + assertEquals(dt, LocalTime.of(12, 12, 12)); + } + + @Test + void MethodStyle_YEAR_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2016-05-15'.YEAR()", 0); + assertEquals(dt, 2016); + } + + @Test + void MethodStyle_MONTH_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2016-05-15'.MONTH()", 0); + assertEquals(dt, 5); + } + + @Test + void MethodStyle_DAY_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2016-05-15'.DAY()", 0); + assertEquals(dt, 15); + } + + @Test + void MethodStyle_HOUR_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'12:30:45'.HOUR()", 0); + assertEquals(dt, 12); + } + + @Test + void MethodStyle_MINUTE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'12:30:45'.MINUTE()", 0); + assertEquals(dt, 30); + } + + @Test + void MethodStyle_SECOND_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'12:30:45'.SECOND()", 0); + assertEquals(dt, 45); + } + + @Test + void MethodStyle_ADDYEARS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2000-01-01'.ADDYEARS(1).YEAR()", 0); + assertEquals(dt, 2001); + } + + @Test + void MethodStyle_ADDMONTHS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2000-01-15'.ADDMONTHS(2).MONTH()", 0); + assertEquals(dt, 3); + } + + @Test + void MethodStyle_ADDDAYS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2000-01-01'.ADDDAYS(10).DAY()", 0); + assertEquals(dt, 11); + } + + @Test + void MethodStyle_ADDHOURS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2000-01-01 10:00:00'.ADDHOURS(5).HOUR()", 0); + assertEquals(dt, 15); + } + + @Test + void MethodStyle_ADDMINUTES_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2000-01-01 10:30:00'.ADDMINUTES(45).MINUTE()", 0); + assertEquals(dt, 15); + } + + @Test + void MethodStyle_ADDSECONDS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2000-01-01 10:00:30'.ADDSECONDS(45).SECOND()", 0); + assertEquals(dt, 15); + } + + @Test + void MethodStyle_TIMESTAMP_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.UseLocalTime = true; + Object dt = engine.TryEvaluate("'2016-01-01'.TIMESTAMP()", 0L); + assertEquals(dt, 1451577600000L); + + dt = engine.TryEvaluate("'2016-01-01'.TIMESTAMP(1)", 0L); + assertEquals(dt, 1451577600L); + } + + // 边界值测试 + @Test + void LeapYear_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("DATE(2020,2,29)", ""); + assertEquals(dt, LocalDate.of(2020, 2, 29)); + + dt = engine.TryEvaluate("DATE(2024,2,29)", ""); + assertEquals(dt, LocalDate.of(2024, 2, 29)); + + dt = engine.TryEvaluate("DATE(2019,2,28)", ""); + assertEquals(dt, LocalDate.of(2019, 2, 28)); + + Object year = engine.TryEvaluate("'2020-02-29'.YEAR()", 0); + assertEquals(year, 2020); + Object month = engine.TryEvaluate("'2020-02-29'.MONTH()", 0); + assertEquals(month, 2); + Object day = engine.TryEvaluate("'2020-02-29'.DAY()", 0); + assertEquals(day, 29); + } + + @Test + void LeapYear_AddDays_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("'2020-02-28'.ADDDAYS(1).DAY()", 0); + assertEquals(dt, 29); + + dt = engine.TryEvaluate("'2020-03-01'.ADDDAYS(-1).DAY()", 0); + assertEquals(dt, 29); + } + + @Test + void MonthBoundary_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("DATE(2020,1,31).ADDMONTHS(1).MONTH()", 0); + assertEquals(dt, 2); + + dt = engine.TryEvaluate("DATE(2020,3,31).ADDMONTHS(-1).MONTH()", 0); + assertEquals(dt, 2); + } + + @Test + void YearBoundary_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object dt = engine.TryEvaluate("DATE(2020,12,31).ADDDAYS(1).YEAR()", 0); + assertEquals(dt, 2021); + dt = engine.TryEvaluate("DATE(2020,12,31).ADDDAYS(1).MONTH()", 0); + assertEquals(dt, 1); + dt = engine.TryEvaluate("DATE(2020,12,31).ADDDAYS(1).DAY()", 0); + assertEquals(dt, 1); + + dt = engine.TryEvaluate("DATE(2021,1,1).ADDDAYS(-1).YEAR()", 0); + assertEquals(dt, 2020); + dt = engine.TryEvaluate("DATE(2021,1,1).ADDDAYS(-1).MONTH()", 0); + assertEquals(dt, 12); + dt = engine.TryEvaluate("DATE(2021,1,1).ADDDAYS(-1).DAY()", 0); + assertEquals(dt, 31); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/EngineTest.java b/java/src/test/java/toolgood/algorithm/Tests/EngineTest.java new file mode 100644 index 000000000..e78611312 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/EngineTest.java @@ -0,0 +1,71 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import static org.junit.Assert.assertEquals; + + +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; +import toolgood.algorithm.operands.MyDate; + +public class EngineTest { + @Test + public void base_test2() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("1+(3*2+2)/2 & '11' & '11:20'*9 & isnumber(22)*3", ""); + } + + @Test + public void base_test3() { + AlgorithmEngine engine = new AlgorithmEngine(); + + int c = engine.TryEvaluate("(2)+/*123456*/3", 0); + assertEquals(5, c); + + c = engine.TryEvaluate("2+3//eee", 0); + assertEquals(5, c); + + c = engine.TryEvaluate("(2)+/*123456*/3 ee22+22", 0); + assertEquals(0, c); + } + + @Test + public void base_test4() { + AlgorithmEngine engine = new AlgorithmEngine(); + + String c = engine.TryEvaluate("'4dd'&'55' rr", ""); + assertEquals("", c); + } + + @Test + public void base_test5() { + AlgorithmEngine engine = new AlgorithmEngine(); + + String c = engine.TryEvaluate("'4dd'&'55'.left(1)", ""); + assertEquals("4dd5", c); + } + + @Test + public void Cylinder_Test() { + Cylinder c = new Cylinder(3, 10); + double t2 = c.TryEvaluate("半径*半径*pi()", 0.0); + + double t = c.TryEvaluate("直径*pi()", 0.0); + t = c.TryEvaluate("半径*半径*pi()*高", 0.0); + + t = c.TryEvaluate("'半径'*半径*pi()*高", 0.0); + + t = c.TryEvaluate("求面积(10)", 0.0); + assertEquals(10 * 10 * Math.PI, t, 10); + + String json = "{'灰色':'L','canBookCount':905,'saleCount':91,'specId':'43b0e72e98731aed69e1f0cc7d64bf4d'}"; + try { + c.AddParameterFromJson(json); + } catch (Exception e) { + e.printStackTrace(); + } + + String tt = c.TryEvaluate("灰色", ""); + assertEquals("L", tt); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/FinancialTest.java b/java/src/test/java/toolgood/algorithm/Tests/FinancialTest.java new file mode 100644 index 000000000..ee3a88d89 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/FinancialTest.java @@ -0,0 +1,125 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import toolgood.algorithm.AlgorithmEngine; + +import static org.junit.Assert.assertEquals; + +class FinancialTest { + + @Test + void PMT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("PMT(0.08/12, 10, 10000)", null); + assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(-1037.0321 * 10000) / 10000.0); + } + + @Test + void PPMT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("PPMT(0.08/12, 1, 10, 10000)", null); + assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(-970.3654 * 10000) / 10000.0); + } + + @Test + void IPMT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("IPMT(0.08/12, 1, 10, 10000)", null); + assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(-66.6667 * 10000) / 10000.0); + } + + @Test + void PV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("PV(0.08/12, 10, -1000)", null); + assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(9642.90 * 100) / 100.0); + } + + @Test + void FV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("FV(0.08/12, 10, -1000)", null); + assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(10305.40 * 100) / 100.0); + } + + @Test + void NPER_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("NPER(0.08/12, -1000, 10000)", null); + assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(10.38 * 100) / 100.0); + } + + @Test + void RATE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("RATE(12,-100,400,0,0,0.1)", null); + assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(0.2289 * 10000) / 10000.0); + } + + @Test + void NPV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("NPV(0.1, -10000, 3000, 4200, 6800)", null); + assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(1188.44 * 100) / 100.0); + } + + @Test + void IRR_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("IRR(array(-70000, 12000, 15000, 18000, 21000, 26000))", null); + assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(0.0866 * 10000) / 10000.0); + } + + @Test + void MIRR_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("MIRR(array(-70000, 12000, 15000, 18000, 21000, 26000), 0.1, 0.12)", null); + assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(0.0987 * 10000) / 10000.0); + } + + @Test + void SLN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("SLN(30000, 7500, 10)", null); + assertEquals(t, 2250.0); + } + + @Test + void SYD_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("SYD(30000, 7500, 10, 1)", null); + assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(4090.91 * 100) / 100.0); + } + + @Test + void DDB_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("DDB(2400, 300, 10, 2)", null); + assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(384.0 * 100) / 100.0); + } + + @Test + void DB_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("DB(1000000, 100000, 6, 1)", null); + assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(319000.0 * 100) / 100.0); + } + + @Test + void XNPV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + // Java版本可能需要不同的方式来处理数组参数 + // 这里使用字符串数组的方式 + Object t = engine.TryEvaluate("XNPV(0.09, array(-10000, 2750, 4250, 3250, 2750), array('2008-1-1', '2008-3-1', '2008-10-30', '2009-2-15', '2009-4-1'))", null); + assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(2086.65 * 100) / 100.0); + } + + @Test + void XIRR_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + // Java版本可能需要不同的方式来处理数组参数 + // 这里使用字符串数组的方式 + Object t = engine.TryEvaluate("XIRR(array(-10000, 2750, 4250, 3250, 2750), array('2008-1-1', '2008-3-1', '2008-10-30', '2009-2-15', '2009-4-1'))", null); + assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(0.3734 * 10000) / 10000.0); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/FlowTest.java b/java/src/test/java/toolgood/algorithm/Tests/FlowTest.java new file mode 100644 index 000000000..43068d568 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/FlowTest.java @@ -0,0 +1,346 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import toolgood.algorithm.AlgorithmEngine; + +import static org.junit.Assert.assertEquals; + +class FlowTest { + + @Test + void If_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("if(1=1,1,2)", 0.0); + assertEquals(t, 1); + t = engine.TryEvaluate("if(1=1,1)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("if(1=1,1)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("if('1',1,2)", 0.0); + assertEquals(t, 1); + t = engine.TryEvaluate("if(0,1,2)", 0.0); + assertEquals(t, 2); + } + + @Test + void iferror_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("iferror(1/0,1,2)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("iferror(1-'rrr',1,2)", 0.0); + assertEquals(t, 1); + } + + @Test + void iserror_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("iserror(1/0,1)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("iserror(1-'rrr',1)", 0.0); + assertEquals(t, 1); + } + + @Test + void ifnull_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("isnull(null,1)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("isnull(1,2)", 0.0); + assertEquals(t, 1); + } + + @Test + void isnullorerror_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("isnullorerror(null,1)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("isnullorerror(1/0,1)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("isnullorerror(1,2)", 0.0); + assertEquals(t, 1); + } + + @Test + void ISNUMBER_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("if(ISNUMBER(1),1,2)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("if(ISNUMBER('e'),1,2)", 0.0); + assertEquals(t, 2); + t = engine.TryEvaluate("if(ISNUMBER('11'),1,2)", 0.0); + assertEquals(t, 2); + + t = engine.TryEvaluate("if(ISNUMBER('2016-1-2'),1,2)", 0.0); + assertEquals(t, 2); + } + + @Test + void ISTEXT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("if(ISTEXT(1),1,2)", 0.0); + assertEquals(t, 2); + + t = engine.TryEvaluate("if(ISTEXT('e'),1,2)", 0.0); + assertEquals(t, 1); + t = engine.TryEvaluate("if(ISTEXT('11'),1,2)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("if(ISTEXT('2016-1-2'),1,2)", 0.0); + assertEquals(t, 1); + } + + @Test + void ISNONTEXT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("if(ISNONTEXT(1),1,2)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("if(ISNONTEXT('e'),1,2)", 0.0); + assertEquals(t, 2); + t = engine.TryEvaluate("if(ISNONTEXT('11'),1,2)", 0.0); + assertEquals(t, 2); + + t = engine.TryEvaluate("if(ISNONTEXT('2016-1-2'),1,2)", 0.0); + assertEquals(t, 2); + } + + @Test + void ISLOGICAL_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("if(ISLOGICAL(1),1,2)", 0.0); + assertEquals(t, 2); + + t = engine.TryEvaluate("if(ISLOGICAL('e'),1,2)", 0.0); + assertEquals(t, 2); + + t = engine.TryEvaluate("if(ISLOGICAL(true),1,2)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("if(ISLOGICAL(false),1,2)", 0.0); + assertEquals(t, 1); + } + + @Test + void ISEVEN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("if(ISEVEN(1),1,2)", 0.0); + assertEquals(t, 2); + + t = engine.TryEvaluate("if(ISEVEN(2),1,2)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("if(ISEVEN('e'),1,2)", 0.0); + assertEquals(t, 2); + } + + @Test + void ISODD_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("if(ISODD(1),1,2)", 0.0); + assertEquals(t, 1); + + t = engine.TryEvaluate("if(ISODD(2),1,2)", 0.0); + assertEquals(t, 2); + + t = engine.TryEvaluate("if(ISODD('e'),1,2)", 0.0); + assertEquals(t, 2); + } + + @Test + void And_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("and(true(),1=1)", 0.0); + assertEquals(t, true); + t = engine.TryEvaluate("and(true(),1)", 0.0); + assertEquals(t, true); + + t = engine.TryEvaluate("and(true(),false(),1=1)", 0.0); + assertEquals(t, false); + t = engine.TryEvaluate("and(true(),false(),1)", 0.0); + assertEquals(t, false); + + t = engine.TryEvaluate("and(true(),0)", 0.0); + assertEquals(t, false); + } + + @Test + void Or_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("or(true(),1=1)", 0.0); + assertEquals(t, true); + t = engine.TryEvaluate("or(true(),1)", 0.0); + assertEquals(t, true); + + t = engine.TryEvaluate("or(true(),false(),1=1)", 0.0); + assertEquals(t, true); + t = engine.TryEvaluate("or(true(),false(),1)", 0.0); + assertEquals(t, true); + + t = engine.TryEvaluate("or(true(),0)", 0.0); + assertEquals(t, true); + + t = engine.TryEvaluate("or(false(),1=2)", 0.0); + assertEquals(t, false); + } + + @Test + void Not_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("not(true())", 0.0); + assertEquals(t, false); + t = engine.TryEvaluate("not(false())", 0.0); + assertEquals(t, true); + } + + @Test + void true_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("true()", 0.0); + assertEquals(t, true); + } + + @Test + void false_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("false()", 0.0); + assertEquals(t, false); + } + + @Test + void andor_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean t = engine.TryEvaluate("1=1 && 2==2 && 3=3", false); + assertEquals(t, true); + + t = engine.TryEvaluate("1=1 && 2!=2", false); + assertEquals(t, false); + + t = engine.TryEvaluate("1=1 || 2!=2", false); + assertEquals(t, true); + } + + @Test + void IFS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("IFS(1=1, 'a', 1=2, 'b')", 0.0); + assertEquals(t, "a"); + + t = engine.TryEvaluate("IFS(1=2, 'a', 2=2, 'b')", 0.0); + assertEquals(t, "b"); + + Object t2 = engine.TryEvaluate("IFS(1=1, 100, 1=2, 200)", 0.0); + assertEquals(t2, 100); + } + + @Test + void SWITCH_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SWITCH(1, 1, 'one', 2, 'two')", 0.0); + assertEquals(t, "one"); + + t = engine.TryEvaluate("SWITCH(2, 1, 'one', 2, 'two')", 0.0); + assertEquals(t, "two"); + + Object t2 = engine.TryEvaluate("SWITCH('a', 'a', 1, 'b', 2)", 0.0); + assertEquals(t2, 1); + + t = engine.TryEvaluate("SWITCH(5, 1, 'one', 2, 'two')", 0.0); + assertEquals(t, ""); + } + + @Test + void XOR_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean t = engine.TryEvaluate("XOR(true(), false())", false); + assertEquals(t, true); + + t = engine.TryEvaluate("XOR(true(), true())", false); + assertEquals(t, false); + + t = engine.TryEvaluate("XOR(false(), false())", false); + assertEquals(t, false); + + t = engine.TryEvaluate("XOR(true(), true(), true())", false); + assertEquals(t, true); + + t = engine.TryEvaluate("XOR(true(), false(), false())", false); + assertEquals(t, true); + + t = engine.TryEvaluate("XOR(1, 0)", false); + assertEquals(t, true); + + t = engine.TryEvaluate("XOR(1, 1)", false); + assertEquals(t, false); + } + + @Test + void MethodStyle_ISNUMBER_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean t = engine.TryEvaluate("123.ISNUMBER()", false); + assertEquals(t, true); + + t = engine.TryEvaluate("'abc'.ISNUMBER()", false); + assertEquals(t, false); + + t = engine.TryEvaluate("true.ISNUMBER()", false); + assertEquals(t, false); + } + + @Test + void MethodStyle_ISTEXT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean t = engine.TryEvaluate("'abc'.ISTEXT()", false); + assertEquals(t, true); + + t = engine.TryEvaluate("123.ISTEXT()", false); + assertEquals(t, false); + } + + @Test + void MethodStyle_ISNONTEXT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean t = engine.TryEvaluate("123.ISNONTEXT()", false); + assertEquals(t, true); + + t = engine.TryEvaluate("'abc'.ISNONTEXT()", false); + assertEquals(t, false); + } + + @Test + void MethodStyle_ISLOGICAL_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean t = engine.TryEvaluate("true.ISLOGICAL()", false); + assertEquals(t, true); + + t = engine.TryEvaluate("false.ISLOGICAL()", false); + assertEquals(t, true); + + t = engine.TryEvaluate("123.ISLOGICAL()", false); + assertEquals(t, false); + } + + @Test + void MethodStyle_ISNULL_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean t = engine.TryEvaluate("null.ISNULL()", false); + assertEquals(t, true); + + t = engine.TryEvaluate("123.ISNULL()", false); + assertEquals(t, false); + } + + @Test + void MethodStyle_ISNULLORERROR_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean t = engine.TryEvaluate("null.ISNULLORERROR()", false); + assertEquals(t, true); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/IssuesTest.java b/java/src/test/java/toolgood/algorithm/Tests/IssuesTest.java deleted file mode 100644 index 48b9abf8c..000000000 --- a/java/src/test/java/toolgood/algorithm/Tests/IssuesTest.java +++ /dev/null @@ -1,44 +0,0 @@ -package toolgood.algorithm.Tests; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import toolgood.algorithm.AlgorithmEngine; -import toolgood.algorithm.MyDate; - -public class IssuesTest { - - @Test - public void issues_12() { - AlgorithmEngine engine = new AlgorithmEngine(); - boolean dt = engine.TryEvaluate("Year(44406)=2021", false); - assertEquals(dt, true); - dt = engine.TryEvaluate("MONTH(44406)=7", false); - assertEquals(dt, true); - dt = engine.TryEvaluate("DAY(44406)=29", false); - assertEquals(dt, true); - - int num = engine.TryEvaluate("date(2011,2,2)", 0); - assertEquals(num, 40576); - } - - public void issues_13() { - AlgorithmEngine engine = new AlgorithmEngine(); - int dt = engine.TryEvaluate("days360(date(2020,5,31),date(2023,12,15))", 0); - assertEquals(dt, 1275); - - } - - @Test - public void issues_27() - { - AlgorithmEngine engine = new AlgorithmEngine(); - MyDate dt = engine.TryEvaluate("DATE(2024, 8, 1) + TIME(8, 0, 0)", MyDate.now()); - assertEquals(dt.toString(), "2024-08-01 08:00:00"); - - MyDate dt2 = engine.TryEvaluate("DATE(2024, 8, 1, 16,0,0) - TIME(8, 0, 0)", MyDate.now()); - assertEquals(dt2.toString(), "2024-08-01 08:00:00"); - } - -} diff --git a/java/src/test/java/toolgood/algorithm/Tests/MathBaseTest.java b/java/src/test/java/toolgood/algorithm/Tests/MathBaseTest.java new file mode 100644 index 000000000..858145dfd --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/MathBaseTest.java @@ -0,0 +1,462 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import toolgood.algorithm.AlgorithmEngine; + +import static org.junit.Assert.*; + +class MathBaseTest { + + @Test + void Pi_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("pi()", 0.0); + assertEquals(3.141592654, Math.round((Double) t * 1000000000L) / 1000000000.0); + } + + @Test + void abs_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("abs(-1.2)", 0.0); + assertEquals(1.2, t); + } + + @Test + void QUOTIENT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("QUOTIENT(7,3)", 0.0); + assertEquals(2.0, t); + } + + @Test + void MOD_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("MOD(7,3)", 0.0); + assertEquals(1.0, t); + } + + @Test + void SIGN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SIGN(0)", 0.0); + assertEquals(0, t); + t = engine.TryEvaluate("SIGN(9)", 0.0); + assertEquals(1, t); + t = engine.TryEvaluate("SIGN(-9)", 0.0); + assertEquals(-1, t); + } + + @Test + void SQRT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SQRT(9)", 0.0); + assertEquals(3.0, t); + } + + @Test + void SUM_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SUM(1,2,3,4)", 0.0); + assertEquals(10.0, t); + } + + @Test + void TRUNC_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("TRUNC(9.222)", 0.0); + assertEquals(9.0, t); + t = engine.TryEvaluate("TRUNC(-9.222)", 0.0); + assertEquals(-9.0, t); + } + + @Test + void int_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("int(9.222)", 0.0); + assertEquals(9.0, t); + t = engine.TryEvaluate("int(-9.222)", 0.0); + assertEquals(-9.0, t); + } + + @Test + void GCD_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("GCD(3,5,7)", 0.0); + assertEquals(1.0, t); + t = engine.TryEvaluate("GCD(30,21)", 0.0); + assertEquals(3.0, t); + } + + @Test + void LCM_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("LCM(3,5,7)", 0.0); + assertEquals(105.0, t); + } + + @Test + void combin_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("combin(10,2)", 0.0); + assertEquals(45.0, t); + } + + @Test + void PERMUT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("PERMUT(10,2)", 0.0); + assertEquals(90.0, t); + } + + // 四舍五入 + @Test + void ROUND_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("ROUND(4.333,2)", 0.0); + assertEquals(4.33, t); + } + + @Test + void ROUND_single_param_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("ROUND(4.5)", 0.0); + assertEquals(5.0, t); + + t = engine.TryEvaluate("ROUND(4.4)", 0.0); + assertEquals(4.0, t); + + t = engine.TryEvaluate("ROUND(-4.5)", 0.0); + assertEquals(-5.0, t); + } + + @Test + void ROUNDDOWN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("ROUNDDOWN(4.333,2)", 0.0); + assertEquals(4.33, t); + + t = engine.TryEvaluate("ROUNDDOWN(-3.141592, 3)", 0.0); + assertEquals(-3.141, t); + } + + @Test + void ROUNDUP_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("ROUNDUP(4.333,2)", 0.0); + assertEquals(4.34, t); + + t = engine.TryEvaluate("ROUNDUP(-3.141592, 3)", 0.0); + assertEquals(-3.142, t); + } + + @Test + void CEILING_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("CEILING(4.333,0.1)", 0.0); + assertEquals(4.4, t); + + t = engine.TryEvaluate("CEILING(4.333)", 0.0); + assertEquals(5, t); + } + + @Test + void FLOOR_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("FLOOR(4.363,0.1)", 0.0); + assertEquals(4.3, t); + + t = engine.TryEvaluate("FLOOR(4.333)", 0.0); + assertEquals(4, t); + } + + @Test + void even_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("even(4.363)", 0.0); + assertEquals(6.0, t); + } + + @Test + void odd_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("odd(4.363)", 0.0); + assertEquals(5, t); + } + + @Test + void MROUND_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("MROUND(4.363,2)", 0.0); + assertEquals(4, t); + t = engine.TryEvaluate("MROUND(5.363,2)", 0.0); + assertEquals(6, t); + } + + // 随机数 + @Test + void Rand_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("RAND()", 0.0); + double value = (Double) t; + assertTrue(value > 0); + assertTrue(value <= 1); + } + + @Test + void RANDBETWEEN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("RANDBETWEEN(2,99)", 0.0); + double value = (Double) t; + assertTrue(value > 2); + assertTrue(value <= 99); + } + + // 幂/对数/阶乘 + @Test + void fact_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("fact(6)", 0.0); + assertEquals(720.0, t); + t = engine.TryEvaluate("fact(3)", 0.0); + assertEquals(6.0, t); + } + + @Test + void factdouble_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("factdouble(10)", 0.0); + assertEquals(3840.0, t); + } + + @Test + void POWER_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("POWER(10,2)", 0.0); + assertEquals(100.0, t); + } + + @Test + void exp_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("exp(2)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(7.389056099 * 1000000) / 1000000.0, rounded); + } + + @Test + void ln_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("ln(4)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(1.386294361 * 1000000) / 1000000.0, rounded); + } + + @Test + void log_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("log(10)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(1.0 * 1000000) / 1000000.0, rounded); + + t = engine.TryEvaluate("log(8,2)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(3.0 * 1000000) / 1000000.0, rounded); + } + + @Test + void log10_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("log10(10)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(1.0 * 1000000) / 1000000.0, rounded); + } + + @Test + void MULTINOMIAL_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("MULTINOMIAL(1,2,3)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(60.0 * 1000000) / 1000000.0, rounded); + t = engine.TryEvaluate("MULTINOMIAL(1,2,3,4)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(12600.0 * 1000000) / 1000000.0, rounded); + t = engine.TryEvaluate("MULTINOMIAL(1,2,3,4.1)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(12600.0 * 1000000) / 1000000.0, rounded); + } + + @Test + void PRODUCT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("PRODUCT(1,2,3,4)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(24.0 * 1000000) / 1000000.0, rounded); + } + + @Test + void SQRTPI_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SQRTPI(3)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(3.069980124 * 1000000) / 1000000.0, rounded); + } + + @Test + void SUMSQ_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SUMSQ(1,2)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(5.0 * 1000000) / 1000000.0, rounded); + } + + // 工程函数 + @Test + void ERF_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("ERF(0)", 0.0); + assertEquals(0.0, Math.round((Double) t * 1000000) / 1000000.0); + + t = engine.TryEvaluate("ERF(1)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(0.842701, rounded); + + t = engine.TryEvaluate("ERF(-1)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(-0.842701, rounded); + + t = engine.TryEvaluate("ERF(0.5)", 0.0); + assertEquals(0.520499878, (Double) t, 6); + + t = engine.TryEvaluate("ERF(4)", 0.0); + assertEquals(0.999999985, (Double) t, 6); + + t = engine.TryEvaluate("ERF(5)", 0.0); + assertEquals(1, (Double) t, 6); + + t = engine.TryEvaluate("ERF(7)", 0.0); + assertEquals(1, (Double) t, 6); + } + + @Test + void ERFC_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("ERFC(0)", 0.0); + assertEquals(1.0, Math.round((Double) t * 1000000) / 1000000.0); + + t = engine.TryEvaluate("ERFC(1)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(0.157299, rounded); + + t = engine.TryEvaluate("ERFC(-3)", 0.0); + assertEquals(1.99997791, (Double) t, 6); + + t = engine.TryEvaluate("ERFC(1.5)", 0.0); + assertEquals(0.033894854, (Double) t, 6); + } + + @Test + void DELTA_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("DELTA(5, 5)", 0.0); + assertEquals(1.0, t); + + t = engine.TryEvaluate("DELTA(5, 4)", 0.0); + assertEquals(0.0, t); + + t = engine.TryEvaluate("DELTA(5)", 0.0); + assertEquals(0.0, t); + + t = engine.TryEvaluate("DELTA(0)", 0.0); + assertEquals(1.0, t); + } + + @Test + void GESTEP_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("GESTEP(5, 4)", 0.0); + assertEquals(1.0, t); + + t = engine.TryEvaluate("GESTEP(5, 5)", 0.0); + assertEquals(1.0, t); + + t = engine.TryEvaluate("GESTEP(5, 6)", 0.0); + assertEquals(0.0, t); + + t = engine.TryEvaluate("GESTEP(5)", 0.0); + assertEquals(1.0, t); + + t = engine.TryEvaluate("GESTEP(-1)", 0.0); + assertEquals(0.0, t); + } + + // 百分比 + @Test + void Percentage_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("50%", 0.0); + assertEquals(0.5, t); + + t = engine.TryEvaluate("100%", 0.0); + assertEquals(1.0, t); + + t = engine.TryEvaluate("1%", 0.0); + assertEquals(0.01, t); + + t = engine.TryEvaluate("0%", 0.0); + assertEquals(0.0, t); + + t = engine.TryEvaluate("200%", 0.0); + assertEquals(2.0, t); + + t = engine.TryEvaluate("25.5%", 0.0); + assertEquals(0.255, t); + } + + // 边界值测试 + @Test + void DivisionByZero_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("1/0", 0.0); + assertEquals(t, 0); + + t = engine.TryEvaluate("0/0", 0.0); + assertEquals(t, 0); + } + + @Test + void Overflow_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("99999999999999999999*99999999999999999999", 0.0); + assertEquals(t, 0); + } + + @Test + void NullOperation_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("null+1", 0.0); + assertEquals(t, 0); + + t = engine.TryEvaluate("null*100", 0.0); + assertEquals(t, 0); + + t = engine.TryEvaluate("null-null", 0.0); + assertEquals(t, 0); + } + + @Test + void SquareRootNegative_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("sqrt(-1)", 0.0); + assertEquals(t, 0); + } + + @Test + void LogNegative_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("log(-1)", 0.0); + assertEquals(t, 0); + + t = engine.TryEvaluate("ln(0)", 0.0); + assertEquals(t, 0); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/MathSum2Test.java b/java/src/test/java/toolgood/algorithm/Tests/MathSum2Test.java new file mode 100644 index 000000000..44646eb02 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/MathSum2Test.java @@ -0,0 +1,267 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import toolgood.algorithm.AlgorithmEngine; + +import static org.junit.Assert.assertEquals; + +class MathSum2Test { + + @Test + void NORMSDIST_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("NORMSDIST(1)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.841344746 * 1000000) / 1000000.0, rounded); + } + + @Test + void NORMDIST_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("NORMDIST(3,8,4,1)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.105649774 * 1000000) / 1000000.0, rounded); + t = engine.TryEvaluate("NORMDIST(3,8,4,0)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.045662271 * 1000000) / 1000000.0, rounded); + } + + @Test + void NORMINV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("NORMINV(0.8,8,3)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(10.5248637 * 1000000) / 1000000.0, rounded); + } + + @Test + void NORMSINV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("NORMSINV(0.3)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(-0.524400513 * 1000000) / 1000000.0, rounded); + } + + @Test + void BETADIST_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("BETADIST(0.5,11,22)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.97494877 * 1000000) / 1000000.0, rounded); + } + + @Test + void BETAINV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("BETAINV(0.5,23,45)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.336640759 * 1000000) / 1000000.0, rounded); + } + + @Test + void BINOMDIST_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("BINOMDIST(12,45,0.5,0)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.000817409 * 1000000) / 1000000.0, rounded); + t = engine.TryEvaluate("BINOMDIST(12,45,0.5,1)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.00122945 * 1000000) / 1000000.0, rounded); + } + + @Test + void EXPONDIST_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("EXPONDIST(3,1,0)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.049787068 * 1000000) / 1000000.0, rounded); + t = engine.TryEvaluate("EXPONDIST(3,1,1)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.950212932 * 1000000) / 1000000.0, rounded); + } + + @Test + void FDIST_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("FDIST(0.4,2,3)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.701465776 * 1000000) / 1000000.0, rounded); + } + + @Test + void FINV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("FINV(0.7,2,3)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.402651432 * 1000000) / 1000000.0, rounded); + } + + @Test + void GAMMADIST_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("GAMMADIST(0.5,3,4,0)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.001723627 * 1000000) / 1000000.0, rounded); + t = engine.TryEvaluate("GAMMADIST(0.5,3,4,1)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.000296478 * 1000000) / 1000000.0, rounded); + } + + @Test + void GAMMAINV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("GAMMAINV(0.2,3,4)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(6.140176811 * 1000000) / 1000000.0, rounded); + } + + @Test + void GAMMALN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("GAMMALN(4)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(1.791759469 * 1000000) / 1000000.0, rounded); + } + + @Test + void HYPGEOMDIST_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("HYPGEOMDIST(23,45,45,100)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.08715016 * 1000000) / 1000000.0, rounded); + } + + @Test + void LOGINV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("LOGINV(0.1,45,33)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(15.01122624 * 1000000) / 1000000.0, rounded); + } + + @Test + void LOGNORMDIST_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("LOGNORMDIST(15,23,45)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.326019201 * 1000000) / 1000000.0, rounded); + } + + @Test + void NEGBINOMDIST_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("NEGBINOMDIST(23,45,0.7)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.053463314 * 1000000) / 1000000.0, rounded); + } + + @Test + void POISSON_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("POISSON(23,23,0)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.082884384 * 1000000) / 1000000.0, rounded); + t = engine.TryEvaluate("POISSON(23,23,1)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.555149936 * 1000000) / 1000000.0, rounded); + } + + @Test + void TDIST_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("TDIST(1.2,24,1)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.120925677 * 1000000) / 1000000.0, rounded); + t = engine.TryEvaluate("TDIST(1.2,24,2)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.241851353 * 1000000) / 1000000.0, rounded); + } + + @Test + void TINV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("TINV(0.12,23)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(1.614756561 * 1000000) / 1000000.0, rounded); + } + + @Test + void WEIBULL_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("WEIBULL(1,2,3,1)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.105160683 * 1000000) / 1000000.0, rounded); + t = engine.TryEvaluate("WEIBULL(1,2,3,0)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.198853182 * 1000000) / 1000000.0, rounded); + t = engine.TryEvaluate("WEIBULL(-1,2,3,0)", 0.0); + t = engine.TryEvaluate("WEIBULL(-1,-2,3,0)", 0.0); + t = engine.TryEvaluate("WEIBULL(-1,-2,-3,0)", 0.0); + t = engine.TryEvaluate("WEIBULL(-1,-2,-3,-1)", 0.0); + } + + @Test + void FISHER_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("FISHER(0.68)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.8291140383 * 1000000) / 1000000.0, rounded); + } + + @Test + void FISHERINV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("FISHERINV(0.6)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(Math.round(0.537049567 * 1000000) / 1000000.0, rounded); + } + + // Bessel函数 + @Test + void BESSELI_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("BESSELI(1.5, 1)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(0.981666, rounded); + + t = engine.TryEvaluate("BESSELI(1.5, 0)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(1.646723, rounded); + } + + @Test + void BESSELJ_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("BESSELJ(1.5, 1)", 0.0); + double rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(0.557937, rounded); + + t = engine.TryEvaluate("BESSELJ(1.5, 0)", 0.0); + rounded = Math.round((Double) t * 1000000) / 1000000.0; + assertEquals(0.511828, rounded); + } + + @Test + void BESSELK_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("BESSELK(1.5, 1)", 0.0); + double rounded = Math.round((Double) t * 1000) / 1000.0; + assertEquals(0.277, rounded, 0.01); + + t = engine.TryEvaluate("BESSELK(1.5, 0)", 0.0); + rounded = Math.round((Double) t * 1000) / 1000.0; + assertEquals(0.214, rounded, 0.01); + } + + @Test + void BESSELY_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("BESSELY(1.5, 1)", 0.0); + double rounded = Math.round((Double) t * 1000) / 1000.0; + assertEquals(-0.412, rounded, 0.01); + + t = engine.TryEvaluate("BESSELY(2.5, 0)", 0.0); + rounded = Math.round((Double) t * 1000) / 1000.0; + assertEquals(0.498, rounded, 0.01); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/MathSumTest.java b/java/src/test/java/toolgood/algorithm/Tests/MathSumTest.java new file mode 100644 index 000000000..8f0e3b086 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/MathSumTest.java @@ -0,0 +1,321 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import toolgood.algorithm.AlgorithmEngine; + +import static org.junit.Assert.assertEquals; + +class MathSumTest { + + // 简单统计 + @Test + void MAX_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("max(1,2,3,4,2,2,1,4)", 0.0); + assertEquals(4.0, t, 0.0001); + } + + @Test + void MEDIAN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("MEDIAN(1,2,3,4,2,2,1,4)", 0.0); + assertEquals(2.0, t, 0.0001); + + t = engine.TryEvaluate("MEDIAN(1,1,2,2)", 0.0); + assertEquals(1.5, t, 0.0001); + } + + @Test + void MIN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("MIN(1,2,3,4,2,2,1,4)", 0.0); + assertEquals(1.0, t, 0.0001); + } + + @Test + void QUARTILE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),0)", 0.0); + assertEquals(1.0, t, 0.0001); + t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),1)", 0.0); + assertEquals(1.75, t, 0.0001); + t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),2)", 0.0); + assertEquals(2.0, t, 0.0001); + t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),3)", 0.0); + assertEquals(3.25, t, 0.0001); + t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),4)", 0.0); + assertEquals(4.0, t, 0.0001); + } + + @Test + void MODE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("MODE(1,2,3,4,2,2,1,4)", 0.0); + assertEquals(2.0, t, 0.0001); + } + + @Test + void PERCENTILE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("PERCENTILE(array(1,2,3,4,2,2,1,4),0.4)", 0.0); + assertEquals(2.0, t, 0.0001); + } + + @Test + void PERCENTRANK_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("PERCENTRANK(array(1,2,3,4,2,2,1,4),3)", 0.0); + assertEquals(0.714, t, 0.001); + } + + @Test + void AVERAGE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("AVERAGE(1,2,3,4,2,2,1,4)", 0.0); + assertEquals(2.375, t, 0.0001); + } + + @Test + void GEOMEAN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("GEOMEAN(1,2,3,4)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(2.213363839 * 1000000) / 1000000.0, rounded); + } + + @Test + void HARMEAN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("HARMEAN(1,2,3,4)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.92 * 1000000) / 1000000.0, rounded); + } + + @Test + void COUNT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("COUNT(1,2,3,4,2,2,1,4)", 0.0); + assertEquals(8.0, t, 0.0001); + } + + @Test + void AVEDEV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("AVEDEV(1,2,3,4,2,2,1,4)", 0.0); + assertEquals(0.96875, t, 0.0001); + } + + @Test + void STDEV_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("STDEV(1,2,3,4,2,2,1,4)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.187734939 * 1000000) / 1000000.0, rounded); + } + + @Test + void STDEVP_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("STDEVP(1,2,3,4,2,2,1,4)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.111024302 * 1000000) / 1000000.0, rounded); + } + + @Test + void DEVSQ_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("DEVSQ(1,2,3,4,2,2,1,4)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(9.875 * 1000000) / 1000000.0, rounded); + } + + @Test + void VAR_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("VAR(1,2,3,4,2,2,1,4)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.410714286 * 1000000) / 1000000.0, rounded); + } + + @Test + void VARP_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("VARP(1,2,3,4,2,2,1,4)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.234375 * 1000000) / 1000000.0, rounded); + } + + // 统计函数 + @Test + void RANK_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("RANK(3, array(1, 2, 3, 4, 5))", 0.0); + assertEquals(3, t, 0.0001); + + t = engine.TryEvaluate("RANK(3, array(1, 2, 3, 4, 5), 0)", 0.0); + assertEquals(3, t, 0.0001); + + t = engine.TryEvaluate("RANK(3, array(1, 2, 3, 4, 5), 1)", 0.0); + assertEquals(3, t, 0.0001); + + t = engine.TryEvaluate("RANK(5, array(1, 2, 3, 4, 5))", 0.0); + assertEquals(1, t, 0.0001); + + t = engine.TryEvaluate("RANK(1, array(1, 2, 3, 4, 5))", 0.0); + assertEquals(5, t, 0.0001); + } + + @Test + void FORECAST_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("FORECAST(30, array(6, 7, 9, 15, 21), array(20, 28, 31, 38, 40))", 0.0); + double rounded = Math.round(t * 10000) / 10000.0; + assertEquals(Math.round(10.6073 * 10000) / 10000.0, rounded); + } + + @Test + void INTERCEPT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("INTERCEPT(array(2, 3, 9, 1, 8), array(6, 5, 11, 7, 5))", 0.0); + double rounded = Math.round(t * 10000) / 10000.0; + assertEquals(Math.round(0.0484 * 10000) / 10000.0, rounded); + } + + @Test + void SLOPE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SLOPE(array(2, 3, 9, 1, 8), array(6, 5, 11, 7, 5))", 0.0); + double rounded = Math.round(t * 10000) / 10000.0; + assertEquals(Math.round(0.6694 * 10000) / 10000.0, rounded); + } + + @Test + void CORREL_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("CORREL(array(3, 2, 4, 5, 6), array(9, 7, 12, 15, 17))", 0.0); + double rounded = Math.round(t * 10000) / 10000.0; + assertEquals(Math.round(0.9971 * 10000) / 10000.0, rounded); + } + + @Test + void PEARSON_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("PEARSON(array(3, 2, 4, 5, 6), array(9, 7, 12, 15, 17))", 0.0); + double rounded = Math.round(t * 10000) / 10000.0; + assertEquals(Math.round(0.9971 * 10000) / 10000.0, rounded); + } + + @Test + void LARGE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("LARGE(array(1,2,3,4,2,2,1,4),3)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(3.0 * 1000000) / 1000000.0, rounded); + } + + @Test + void SMALL_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SMALL(array(1,2,3,4,2,2,1,4),3)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(2.0 * 1000000) / 1000000.0, rounded); + } + + @Test + void COVAR_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("COVAR(array(3,7,6,11),array(5,15,13,9))", 0.0); + double t1 = engine.TryEvaluate("COVARIANCE.P(array(3,7,6,11),array(5,15,13,9))", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + double rounded1 = Math.round(t1 * 1000000) / 1000000.0; + assertEquals(Math.round(3.375 * 1000000) / 1000000.0, rounded); + assertEquals(Math.round(3.375 * 1000000) / 1000000.0, rounded1); + } + + @Test + void COVARIANCES_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("COVARIANCE.S(array(3,7,6,11),array(5,15,13,9))", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(4.5 * 1000000) / 1000000.0, rounded); + } + + // 条件统计 + @Test + void COUNTIF_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'>1')", 0.0); + assertEquals(t, 6.0); + t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'>=1')", 0.0); + assertEquals(t, 8.0); + t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'!=1')", 0.0); + assertEquals(t, 6.0); + t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'=1')", 0.0); + assertEquals(t, 2.0); + t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'<=1')", 0.0); + assertEquals(t, 2.0); + t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'<2')", 0.0); + assertEquals(t, 2.0); + } + + @Test + void SUMIF_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SUMIF(array(1,2,3,4,2,2,1,4),'>1')", 0.0); + assertEquals(t, 17); + t = engine.TryEvaluate("SUMIF(array(1,2,3,4,2,2,1,4),'>1',array(1,1,1,1,1,1,1,1))", 0.0); + assertEquals(t, 6); + t = engine.TryEvaluate("SUMIF(array(1,2,3,4,2,2,1,4),'>=2',array(1,1,1,1,1,1,1,1))", 0.0); + assertEquals(t, 6); + t = engine.TryEvaluate("SUMIF(array(1,2,3,4,2,2,1,4),'<1',array(1,1,1,1,1,1,1,1))", 0.0); + assertEquals(t, 0); + t = engine.TryEvaluate("SUMIF(array(1,2,3,4,2,2,1,4),'==1',array(1,1,1,1,1,1,1,1))", 0.0); + assertEquals(t, 2); + } + + @Test + void AVERAGEIF_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("AVERAGEIF(array(1,2,3,4,2,2,1,4),'>1')", 0.0); + assertEquals(t, 2.833333333, 6); + + t = engine.TryEvaluate("AVERAGEIF(array(1,2,3,4,2,2,1,4),'>1',array(1,1,1,1,1,1,1,1))", 0.0); + assertEquals(t, 1); + } + + // 数组运算 + @Test + void SERIESSUM_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SERIESSUM(2, 0, 1, array(1, 1, 1, 1))", 0.0); + assertEquals(t, 15.0); + } + + @Test + void SUMPRODUCT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SUMPRODUCT(array(1, 2, 3), array(4, 5, 6))", 0.0); + assertEquals(t, 32.0); + } + + @Test + void SUMX2MY2_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SUMX2MY2(array(1, 2, 3), array(4, 5, 6))", 0.0); + assertEquals(t, -63.0); + } + + @Test + void SUMX2PY2_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SUMX2PY2(array(1, 2, 3), array(4, 5, 6))", 0.0); + assertEquals(t, 91.0); + } + + @Test + void SUMXMY2_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("SUMXMY2(array(1, 2, 3), array(4, 5, 6))", 0.0); + assertEquals(t, 27.0); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/MathTransformationTest.java b/java/src/test/java/toolgood/algorithm/Tests/MathTransformationTest.java new file mode 100644 index 000000000..6f3c65d68 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/MathTransformationTest.java @@ -0,0 +1,181 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import toolgood.algorithm.AlgorithmEngine; + +import static org.junit.Assert.assertEquals; + +class MathTransformationTest { + + @Test + void BIN2DEC_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object num = engine.TryEvaluate("BIN2DEC(10101)", 0); + assertEquals(num, 21); + } + + @Test + void OCT2DEC_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object num = engine.TryEvaluate("OCT2DEC(12456)", 0); + assertEquals(num, 5422); + } + + @Test + void HEX2DEC_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object num = engine.TryEvaluate("HEX2DEC('213adf')", 0); + assertEquals(num, 2177759); + } + + @Test + void DEC2BIN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("DEC2BIN(10)", ""); + assertEquals(t, "1010"); + t = engine.TryEvaluate("DEC2BIN(10,8)", ""); + assertEquals(t, "00001010"); + } + + @Test + void OCT2BIN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("OCT2BIN('721')", ""); + assertEquals(t, "111010001"); + } + + @Test + void HEX2BIN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("HEX2BIN('fa')", ""); + assertEquals(t, "11111010"); + } + + @Test + void BIN2OCT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("BIN2OCT(10)", ""); + assertEquals(t, "2"); + } + + @Test + void DEC2OCT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("DEC2OCT('75')", ""); + assertEquals(t, "113"); + } + + @Test + void HEX2OCT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("HEX2OCT('f5')", ""); + assertEquals(t, "365"); + } + + @Test + void BIN2HEX_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("BIN2HEX(101010100)", ""); + assertEquals(t, "154"); + } + + @Test + void OCT2HEX_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("OCT2HEX(75212)", ""); + assertEquals(t, "7A8A"); + } + + @Test + void DEC2HEX_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("DEC2HEX(952)", ""); + assertEquals(t, "3B8"); + } + + @Test + void ARABIC_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("ARABIC('I')", 0); + assertEquals(t, 1); + + t = engine.TryEvaluate("ARABIC('IV')", 0); + assertEquals(t, 4); + + t = engine.TryEvaluate("ARABIC('IX')", 0); + assertEquals(t, 9); + + t = engine.TryEvaluate("ARABIC('X')", 0); + assertEquals(t, 10); + + t = engine.TryEvaluate("ARABIC('XL')", 0); + assertEquals(t, 40); + + t = engine.TryEvaluate("ARABIC('L')", 0); + assertEquals(t, 50); + + t = engine.TryEvaluate("ARABIC('XC')", 0); + assertEquals(t, 90); + + t = engine.TryEvaluate("ARABIC('C')", 0); + assertEquals(t, 100); + + t = engine.TryEvaluate("ARABIC('CD')", 0); + assertEquals(t, 400); + + t = engine.TryEvaluate("ARABIC('D')", 0); + assertEquals(t, 500); + + t = engine.TryEvaluate("ARABIC('CM')", 0); + assertEquals(t, 900); + + t = engine.TryEvaluate("ARABIC('M')", 0); + assertEquals(t, 1000); + + t = engine.TryEvaluate("ARABIC('MMXXIII')", 0); + assertEquals(t, 2023); + } + + @Test + void ROMAN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + Object t = engine.TryEvaluate("ROMAN(1)", ""); + assertEquals(t, "I"); + + t = engine.TryEvaluate("ROMAN(4)", ""); + assertEquals(t, "IV"); + + t = engine.TryEvaluate("ROMAN(9)", ""); + assertEquals(t, "IX"); + + t = engine.TryEvaluate("ROMAN(10)", ""); + assertEquals(t, "X"); + + t = engine.TryEvaluate("ROMAN(40)", ""); + assertEquals(t, "XL"); + + t = engine.TryEvaluate("ROMAN(50)", ""); + assertEquals(t, "L"); + + t = engine.TryEvaluate("ROMAN(90)", ""); + assertEquals(t, "XC"); + + t = engine.TryEvaluate("ROMAN(100)", ""); + assertEquals(t, "C"); + + t = engine.TryEvaluate("ROMAN(400)", ""); + assertEquals(t, "CD"); + + t = engine.TryEvaluate("ROMAN(500)", ""); + assertEquals(t, "D"); + + t = engine.TryEvaluate("ROMAN(900)", ""); + assertEquals(t, "CM"); + + t = engine.TryEvaluate("ROMAN(1000)", ""); + assertEquals(t, "M"); + + t = engine.TryEvaluate("ROMAN(2023)", ""); + assertEquals(t, "MMXXIII"); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/MathTrigonometricTest.java b/java/src/test/java/toolgood/algorithm/Tests/MathTrigonometricTest.java new file mode 100644 index 000000000..ba01c11fb --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/MathTrigonometricTest.java @@ -0,0 +1,191 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import toolgood.algorithm.AlgorithmEngine; + +import static org.junit.Assert.assertEquals; + +class MathTrigonometricTest { + + @Test + void degrees_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("degrees(pi())", 0.0); + assertEquals(180.0, t, 0.0001); + } + + @Test + void RADIANS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("RADIANS(180)", 0.0); + assertEquals(Math.PI, t, 0.0001); + } + + @Test + void cos_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("cos(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(0.540302306 * 1000000) / 1000000.0, rounded); + } + + @Test + void cosh_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("cosh(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.543080635 * 1000000) / 1000000.0, rounded); + } + + @Test + void sin_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("sin(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(0.841470985 * 1000000) / 1000000.0, rounded); + } + + @Test + void sinh_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("sinh(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.175201194 * 1000000) / 1000000.0, rounded); + } + + @Test + void tan_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("tan(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.557407725 * 1000000) / 1000000.0, rounded); + } + + @Test + void tanh_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("tanh(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(0.761594156 * 1000000) / 1000000.0, rounded); + } + + @Test + void acos_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("acos(0.5)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.047197551 * 1000000) / 1000000.0, rounded); + } + + @Test + void acosh_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("acosh(1.5)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(0.96242365 * 1000000) / 1000000.0, rounded); + } + + @Test + void asin_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("asin(0.5)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(0.523598776 * 1000000) / 1000000.0, rounded); + } + + @Test + void asinh_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("asinh(1.5)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.194763217 * 1000000) / 1000000.0, rounded); + } + + @Test + void atan_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("atan(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(0.785398163 * 1000000) / 1000000.0, rounded); + } + + @Test + void atanh_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("atanh(0.5)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(0.549306144 * 1000000) / 1000000.0, rounded); + } + + @Test + void atan2_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("atan2(1,2)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.107148718 * 1000000) / 1000000.0, rounded); + } + + @Test + void cot_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("cot(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(0.642092616 * 1000000) / 1000000.0, rounded); + } + + @Test + void coth_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("coth(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.313035285 * 1000000) / 1000000.0, rounded); + } + + @Test + void csc_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("csc(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.188395106 * 1000000) / 1000000.0, rounded); + } + + @Test + void csch_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("csch(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(0.850918128 * 1000000) / 1000000.0, rounded); + } + + @Test + void sec_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("sec(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(1.850815718 * 1000000) / 1000000.0, rounded); + } + + @Test + void sech_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("sech(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(0.648054274 * 1000000) / 1000000.0, rounded); + } + + @Test + void acot_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("acot(1)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(0.785398163 * 1000000) / 1000000.0, rounded); + } + + @Test + void acoth_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("acoth(2)", 0.0); + double rounded = Math.round(t * 1000000) / 1000000.0; + assertEquals(Math.round(0.549306144 * 1000000) / 1000000.0, rounded); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/OperatorTest.java b/java/src/test/java/toolgood/algorithm/Tests/OperatorTest.java new file mode 100644 index 000000000..f84c86191 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/OperatorTest.java @@ -0,0 +1,92 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import toolgood.algorithm.AlgorithmEngine; + +import static org.junit.Assert.assertEquals; + +class OperatorTest { + + @Test + void arithmetic_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("1+(3*2+2)/2", 0.0); + assertEquals(5, t, 0.0001); + + t = engine.TryEvaluate("(8-3)*(3+2)", 0.0); + assertEquals(25, t, 0.0001); + + t = engine.TryEvaluate("(8-3)*(3+2) % 7", 0.0); + assertEquals(4, t, 0.0001); + + double c = engine.TryEvaluate("2+3", 0.0); + assertEquals(5, c, 0.0001); + c = engine.TryEvaluate("(2)+3", 0.0); + assertEquals(5, c, 0.0001); + c = engine.TryEvaluate("2+3*2+10/2*4", 0.0); + assertEquals(28, c, 0.0001); + + c = engine.TryEvaluate("2.1e3 + 10", 0.0); + assertEquals(2110, c, 0.0001); + + c = engine.TryEvaluate("2.1e+03 + 10", 0.0); + assertEquals(2110, c, 0.0001); + + c = engine.TryEvaluate("2.1e+3 + 10", 0.0); + assertEquals(2110, c, 0.0001); + + double d = engine.TryEvaluate("2.1e-3 + 10", 0.0); + assertEquals(10.0021, d, 0.0001); + } + + @Test + void connect_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String s = engine.TryEvaluate("'aa'&'bb'", ""); + assertEquals("aabb", s); + + s = engine.TryEvaluate("'3'+2", ""); + assertEquals("32", s); + } + + @Test + void conditional_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t1 = engine.TryEvaluate("-7 < -2 ? 1 : 2", 0.0); + assertEquals(1, t1, 0.0001); + + t1 = engine.TryEvaluate("(!(-7 < -2)) ? 1 : 2", 0.0); + assertEquals(2, t1, 0.0001); + t1 = engine.TryEvaluate("1 > 2 ? 1 : 2", 0.0); + assertEquals(2, t1, 0.0001); + + t1 = engine.TryEvaluate("1 != 2 ? 1 : 2", 0.0); + assertEquals(1, t1, 0.0001); + } + + @Test + void percentage_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double t = engine.TryEvaluate("100%", 0.0); + assertEquals(1.0, t, 0.0001); + + t = engine.TryEvaluate("50%", 0.0); + assertEquals(0.5, t, 0.0001); + + t = engine.TryEvaluate("200%", 0.0); + assertEquals(2.0, t, 0.0001); + + t = engine.TryEvaluate("100*50%", 0.0); + assertEquals(50.0, t, 0.0001); + + t = engine.TryEvaluate("100+50%", 0.0); + assertEquals(100.5, t, 0.0001); + } + + @Test + void null_operation_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double tbb2 = engine.TryEvaluate("'111'*null", 0.0); + assertEquals(0, tbb2, 0.0001); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/StringTest.java b/java/src/test/java/toolgood/algorithm/Tests/StringTest.java new file mode 100644 index 000000000..b10b093dd --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/StringTest.java @@ -0,0 +1,438 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import toolgood.algorithm.AlgorithmEngine; + +import static org.junit.Assert.assertEquals; + +class StringTest { + + @Test + void ASC_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("asc('abcABC123')", ""); + assertEquals(t, "abcABC123"); + } + + @Test + void Jis_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("jis('abcABC123')", ""); + assertEquals(t, "abcABC123"); + t = engine.TryEvaluate("WIDECHAR('abcABC123')", ""); + assertEquals(t, "abcABC123"); + } + + @Test + void CHAR_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("char(49)", ""); + assertEquals(t, "1"); + } + + @Test + void CLEAN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("clean('\r112\t')", ""); + assertEquals(t, "112"); + } + + @Test + void code_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("code('1')", ""); + assertEquals(t, 49); + } + + @Test + void unichar_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("unichar(65)", ""); + assertEquals(t, "A"); + t = engine.TryEvaluate("unichar(20013)", ""); + assertEquals(t, "中"); + t = engine.TryEvaluate("unichar(128512)", ""); + assertEquals(t, "😀"); + } + + @Test + void unicode_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("unicode('A')", ""); + assertEquals(t, 65); + t = engine.TryEvaluate("unicode('中')", ""); + assertEquals(t, 20013); + t = engine.TryEvaluate("unicode('😀')", ""); + assertEquals(t, 128512); + } + + @Test + void CONCATENATE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("CONCATENATE('tt','33')", ""); + assertEquals(t, "tt33"); + } + + @Test + void CONCATENATE_ALIAS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("CONCAT('tt','33')", ""); + assertEquals(t, "tt33"); + } + + @Test + void EXACT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("EXACT('tt','33')", ""); + assertEquals(t, false); + t = engine.TryEvaluate("EXACT('tt','tt')", ""); + assertEquals(t, true); + + t = engine.TryEvaluate("EXACT('33',33)", ""); + assertEquals(t, true); + t = engine.TryEvaluate("EXACT('331.1',331.1)", ""); + assertEquals(t, true); + t = engine.TryEvaluate("EXACT('TRUE',TRUE())", ""); + assertEquals(t, true); + t = engine.TryEvaluate("EXACT('1',TRUE())", ""); + assertEquals(t, false); + } + + @Test + void FIND_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("FIND(\"11\",\"12221122\")", ""); + assertEquals(t, 5); + + t = engine.TryEvaluate("FIND(\"12\",\"123456789123456789\",6)", ""); + assertEquals(t, 10); + + t = engine.TryEvaluate("FIND(\"bc\",\"aaabc\",5)", ""); + assertEquals(t, -1); + + t = engine.TryEvaluate("FIND(\"bc\",\"aaabc\",4)", ""); + assertEquals(t, 4); + } + + @Test + void FIXED_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("FIXED(4567.89,1)", ""); + assertEquals(t, "4,567.9"); + t = engine.TryEvaluate("FIXED(-4567.89, 1, TRUE())", ""); + assertEquals(t, "-4567.9"); + t = engine.TryEvaluate("FIXED(77.888)", ""); + assertEquals(t, "77.89"); + } + + @Test + void LEFT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("LEFT('123222',3)", ""); + assertEquals(t, "123"); + } + + @Test + void LEN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("LEN('123222')", ""); + assertEquals(t, 6); + } + + @Test + void LOWER_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("LOWER('ABC')", ""); + assertEquals(t, "abc"); + } + + @Test + void LOWER_ALIAS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("TOLOWER('ABC')", ""); + assertEquals(t, "abc"); + } + + @Test + void MID_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("MID('ABCDEF',2,3)", ""); + assertEquals(t, "BCD"); + } + + @Test + void PROPER_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("PROPER('abc abc')", ""); + assertEquals(t, "Abc Abc"); + } + + @Test + void REPLACE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("REPLACE(\"abccd\",2,3,\"2\")", ""); + assertEquals(t, "a2d"); + + Object t1 = engine.TryEvaluate("REPLACE(\"abccd\",'bc',\"2\")", ""); + assertEquals(t1, "a2cd"); + } + + @Test + void REPT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("REPT(\"q\",3)", ""); + assertEquals(t, "qqq"); + } + + @Test + void RIGHT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("RIGHT(\"123q\",3)", ""); + assertEquals(t, "23q"); + } + + @Test + void RMB_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("rmb(12.3)", ""); + assertEquals(t, "壹拾贰元叁角"); + } + + @Test + void SEARCH_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("SEARCH(\"aa\",\"abbAaddd\")", ""); + assertEquals(t, 4); + } + + @Test + void SUBSTITUTE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("SUBSTITUTE(\"ababcc\",\"ab\",\"12\")", ""); + assertEquals(t, "1212cc"); + t = engine.TryEvaluate("SUBSTITUTE(\"ababcc\",\"ab\",\"12\",2)", ""); + assertEquals(t, "ab12cc"); + + t = engine.TryEvaluate("SUBSTITUTE(\"123456789\",\"123\",\"1111111111111111111111\")", ""); + assertEquals(t, "1111111111111111111111456789"); + + t = engine.TryEvaluate("SUBSTITUTE(\"123456789\",\"1239\",\"1111111111111111111111\")", ""); + assertEquals(t, "123456789"); + + t = engine.TryEvaluate("SUBSTITUTE(\"123456789\",\"9\",\"1111111111111111111111\")", ""); + assertEquals(t, "123456781111111111111111111111"); + } + + @Test + void T_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("T(12)", ""); + assertEquals(t, ""); + t = engine.TryEvaluate("T('123')", ""); + assertEquals(t, "123"); + } + + @Test + void TEXT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("TEXT(123,\"0.00\")", ""); + assertEquals(t, "123.00"); + } + + @Test + void TRIM_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("TRIM(\" 123 123 \")", ""); + assertEquals(t, "123 123"); + } + + @Test + void UPPER_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("UPPER(\"abc\")", ""); + assertEquals(t, "ABC"); + } + + @Test + void UPPER_ALIAS_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("TOUPPER('abc')", ""); + assertEquals(t, "ABC"); + } + + @Test + void VALUE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("VALUE(\"123\")", ""); + assertEquals(t, 123); + } + + // 方法式调用测试 + @Test + void MethodStyle_LEN_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("'abcdef'.LEN()", ""); + assertEquals(t, 6); + } + + @Test + void MethodStyle_LEFT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("'abcdef'.LEFT(3)", ""); + assertEquals(t, "abc"); + + t = engine.TryEvaluate("'abcdef'.LEFT()", ""); + assertEquals(t, "a"); + } + + @Test + void MethodStyle_RIGHT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("'abcdef'.RIGHT(3)", ""); + assertEquals(t, "def"); + + t = engine.TryEvaluate("'abcdef'.RIGHT()", ""); + assertEquals(t, "f"); + } + + @Test + void MethodStyle_MID_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("'abcdef'.MID(2,3)", ""); + assertEquals(t, "bcd"); + } + + @Test + void MethodStyle_LOWER_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("'ABC'.LOWER()", ""); + assertEquals(t, "abc"); + } + + @Test + void MethodStyle_UPPER_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("'abc'.UPPER()", ""); + assertEquals(t, "ABC"); + } + + @Test + void MethodStyle_TRIM_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("' abc '.TRIM()", ""); + assertEquals(t, "abc"); + } + + @Test + void MethodStyle_REPLACE_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("'abcdef'.REPLACE(2,3,'x')", ""); + assertEquals(t, "axef"); + + t = engine.TryEvaluate("'abcdef'.REPLACE('bc','x')", ""); + assertEquals(t, "axdef"); + } + + @Test + void MethodStyle_EXACT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("'abc'.EXACT('abc')", ""); + assertEquals(t, true); + + t = engine.TryEvaluate("'abc'.EXACT('ABC')", ""); + assertEquals(t, false); + } + + @Test + void MethodStyle_T_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("'abc'.T()", ""); + assertEquals(t, "abc"); + + t = engine.TryEvaluate("123.T()", ""); + assertEquals(t, ""); + } + + @Test + void MethodStyle_TEXT_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("123.456.TEXT('0.00')", ""); + assertEquals(t, "123.46"); + } + + @Test + void MethodStyle_VALUE_test2() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("'123'.VALUE()", ""); + assertEquals(t, 123); + } + + @Test + void MethodStyle_RMB_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("123.45.RMB()", ""); + assertEquals(t, "壹佰贰拾叁元肆角伍分"); + } + + // 边界值测试 + @Test + void EmptyString_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("LEN('')", ""); + assertEquals(t, 0); + + Object t2 = engine.TryEvaluate("LEFT('', 1)", ""); + assertEquals(t2, ""); + + t2 = engine.TryEvaluate("RIGHT('', 1)", ""); + assertEquals(t2, ""); + + t2 = engine.TryEvaluate("MID('', 1, 1)", ""); + assertEquals(t2, ""); + } + + @Test + void UnicodeBoundary_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("LEN('中文')", ""); + assertEquals(t, 2); + + Object t2 = engine.TryEvaluate("LEFT('中文测试', 2)", ""); + assertEquals(t2, "中文"); + + t2 = engine.TryEvaluate("MID('中文测试', 1, 2)", ""); + assertEquals(t2, "中文"); + } + + @Test + void SubstringBoundary_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("LEFT('ABC', 100)", ""); + assertEquals(t, "ABC"); + + Object t2 = engine.TryEvaluate("RIGHT('ABC', 100)", ""); + assertEquals(t2, "ABC"); + + t2 = engine.TryEvaluate("MID('ABC', 1, 100)", ""); + assertEquals(t2, "ABC"); + + t2 = engine.TryEvaluate("MID('ABC', 5, 2)", ""); + assertEquals(t2, ""); + } + + @Test + void SubstituteBoundary_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t = engine.TryEvaluate("SUBSTITUTE('aaa', 'a', 'b')", ""); + assertEquals(t, "bbb"); + + Object t2 = engine.TryEvaluate("SUBSTITUTE('aaa', 'x', 'b')", ""); + assertEquals(t2, "aaa"); + + t2 = engine.TryEvaluate("SUBSTITUTE('aabaa', 'a', 'b', 1)", ""); + assertEquals(t2, "babaa"); + + t2 = engine.TryEvaluate("SUBSTITUTE('aabaa', 'a', 'b', 2)", ""); + assertEquals(t2, "abbaa"); + } +} diff --git a/java/src/test/java/toolgood/algorithm/Tests/ValueTest.java b/java/src/test/java/toolgood/algorithm/Tests/ValueTest.java new file mode 100644 index 000000000..d35762ef3 --- /dev/null +++ b/java/src/test/java/toolgood/algorithm/Tests/ValueTest.java @@ -0,0 +1,546 @@ +package toolgood.algorithm.Tests; + +import org.junit.Test; +import static org.junit.Assert.*; +import toolgood.algorithm.AlgorithmEngine; +import toolgood.algorithm.Operand; + +public class ValueTest { + @Test + public void constant_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + double e = engine.TryEvaluate("e", 0.0); + assertEquals(Math.E, e, 10); + e = engine.TryEvaluate("pi", 0.0); + assertEquals(Math.PI, e, 10); + + boolean b = engine.TryEvaluate("true", false); + assertEquals(true, b); + b = engine.TryEvaluate("false", true); + assertEquals(false, b); + } + + @Test + public void boolean_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + int b1 = engine.TryEvaluate("if(true,1,2)", 0); + assertEquals(1, b1); + + b1 = engine.TryEvaluate("if(false,1,2)", 0); + assertEquals(2, b1); + } + + @Test + public void array_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + int r = engine.TryEvaluate("count(Array(1,2,3,4))", 0); + assertEquals(4, r); + + r = engine.TryEvaluate("(1=1)*9+2", 0); + assertEquals(11, r); + r = engine.TryEvaluate("(1=2)*9+2", 0); + assertEquals(2, r); + } + + @Test + public void TestVersion() { + AlgorithmEngine engine = new AlgorithmEngine(); + String t25 = engine.TryEvaluate("Engineversion", ""); + assertEquals("ToolGood.Algorithm 6.2", t25); + String t26 = engine.TryEvaluate("Algorithmversion", ""); + assertEquals("ToolGood.Algorithm 6.2", t26); + } + + @Test + public void Test_Json() { + AlgorithmEngine engine = new AlgorithmEngine(); + toolgood.algorithm.internals.functions.FunctionBase t = engine.Parse("{'灰色':'L','canBookCount':905,'saleCount':91,'specId':'43b0e72e98731aed69e1f0cc7d64bf4d'}"); + String c = engine.Evaluate(t).toString(); + assertEquals("{\"灰色\":\"L\",\"canBookCount\":905,\"saleCount\":91,\"specId\":\"43b0e72e98731aed69e1f0cc7d64bf4d\"}", c); + } + + @Test + public void PARAM_test() { + Cylinder engine = new Cylinder(10, 15); + int num = engine.TryEvaluate("PARAM('半径')", 0); + assertEquals(10, num); + num = engine.TryEvaluate("PARAMETER('半径')", 0); + assertEquals(10, num); + num = engine.TryEvaluate("GETPARAMETER('半径')", 0); + assertEquals(10, num); + + num = engine.TryEvaluate("半径", 0); + assertEquals(10, num); + } + + @Test + public void Error_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String num = engine.TryEvaluate("Error('出错了')", ""); + assertEquals("", num); + assertEquals("出错了", engine.LastError); + } + + @Test + public void Json_test() { + AlgorithmEngine engine = new AlgorithmEngine(); + String str = engine.TryEvaluate("{name:'toolgood', age:'12',}['name']", ""); + assertEquals("toolgood", str); + + str = engine.TryEvaluate("{name:'toolgood', age:'12',other:{work:'IT'}}['other']['work']", ""); + assertEquals("IT", str); + + str = engine.TryEvaluate("json(\"{'name':'toolgood', 'age':'12','other':{'work':'IT'}}\")['name']", ""); + assertEquals("toolgood", str); + + str = engine.TryEvaluate("json(\"{'name':'toolgood', 'age':'12','other':{'work':'IT'}}\")['other']['work']", ""); + assertEquals("IT", str); + + boolean b = engine.TryEvaluate("{name:'toolgood', age:'12',other:{work:'IT'}}.has('age')", false); + assertEquals(true, b); + b = engine.TryEvaluate("{name:'toolgood', age:'12',other:{work:'IT'}}.hasKey('age')", false); + assertEquals(true, b); + + b = engine.TryEvaluate("{e:'toolgood', pi:'12',other:{work:'IT'}}.hasKey('e')", false); + assertEquals(true, b); + + b = engine.TryEvaluate("json(\"{'name':'toolgood', 'age':'12','other':{'work':'IT'}}\").has('age')", false); + assertEquals(true, b); + + b = engine.TryEvaluate("{name:'toolgood', age:'12',other:{work:'IT'}}.has('work')", true); + assertEquals(false, b); + + b = engine.TryEvaluate("{name:'toolgood', age:'12',other:{work:'IT'}}.hasValue('toolgood')", false); + assertEquals(true, b); + + b = engine.TryEvaluate("json(\"{'name':'toolgood', 'age':'12','other':{'work':'IT'}}\").hasValue('toolgood')", false); + assertEquals(true, b); + } + + @Test + public void array_test2() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.setUseExcelIndex(true); + int num = engine.TryEvaluate("[1,2,3,4,][2]", 0); + assertEquals(2, num); + + String str = engine.TryEvaluate("[1,2,3,4,'555'][5]", ""); + assertEquals("555", str); + + boolean b = engine.TryEvaluate("[1,2,3,4,].has('1')", false); + assertEquals(true, b); + b = engine.TryEvaluate("['abc','age'].hasKey('age')", false); + assertEquals(true, b); + b = engine.TryEvaluate("['abc','age'].hasValue('age')", false); + assertEquals(true, b); + + b = engine.TryEvaluate("json(\"['abc','age']\").has('age')", false); + assertEquals(true, b); + + b = engine.TryEvaluate("json(\"['abc','age']\").hasValue('age')", false); + assertEquals(true, b); + } + + @Test + public void Distance_M_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean b = engine.TryEvaluate("1=1m", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=10dm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=100cm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000mm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.001km", false); + assertEquals(true, b); + } + + @Test + public void Distance_DM_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.DistanceUnit = toolgood.algorithm.enums.DistanceUnitType.DM; + boolean b = engine.TryEvaluate("1=0.1m", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1dm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=10cm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=100mm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.0001km", false); + assertEquals(true, b); + } + + @Test + public void Distance_CM_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.DistanceUnit = toolgood.algorithm.enums.DistanceUnitType.CM; + boolean b = engine.TryEvaluate("1=0.01m", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.1dm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1cm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=10mm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.00001km", false); + assertEquals(true, b); + } + + @Test + public void Distance_MM_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.DistanceUnit = toolgood.algorithm.enums.DistanceUnitType.MM; + boolean b = engine.TryEvaluate("1=0.001m", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.01dm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.1cm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1mm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.000001km", false); + assertEquals(true, b); + } + + @Test + public void Distance_KM_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.DistanceUnit = toolgood.algorithm.enums.DistanceUnitType.KM; + + boolean b = engine.TryEvaluate("1=1m*1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=10dm*1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=100cm*1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000mm*1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.001km*1000", false); + assertEquals(true, b); + } + + @Test + public void Area_M2_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean b = engine.TryEvaluate("1=1m*1m", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m2=1m*1m", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m2=10dm*10dm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m2=100cm*100cm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m2=1000mm*1000mm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m2=0.001km*0.001km", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1m2", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=100dm2", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=10000cm2", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000mm2", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.000001km2", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1km2=1km*1km", false); + assertEquals(true, b); + } + + @Test + public void Area_DM2_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.AreaUnit = toolgood.algorithm.enums.AreaUnitType.DM2; + + boolean b = engine.TryEvaluate("1=1m2/100", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=100dm2/100", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=10000cm2/100", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000mm2/100", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.000001km2/100", false); + assertEquals(true, b); + } + + @Test + public void Area_CM2_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.AreaUnit = toolgood.algorithm.enums.AreaUnitType.CM2; + + boolean b = engine.TryEvaluate("1=1m2/100/100", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=100dm2/100/100", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=10000cm2/100/100", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000mm2/100/100", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.000001km2/100/100", false); + assertEquals(true, b); + } + + @Test + public void Area_MM2_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.AreaUnit = toolgood.algorithm.enums.AreaUnitType.MM2; + + boolean b = engine.TryEvaluate("1=1m2/100/100/100", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=100dm2/100/100/100", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=10000cm2/100/100/100", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000mm2/100/100/100", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.000001km2/100/100/100", false); + assertEquals(true, b); + } + + @Test + public void Area_KM2_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.AreaUnit = toolgood.algorithm.enums.AreaUnitType.KM2; + + boolean b = engine.TryEvaluate("1=1m2*1000*1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=100dm2*1000*1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=10000cm2*1000*1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000mm2*1000*1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.000001km2*1000*1000", false); + assertEquals(true, b); + } + + @Test + public void Volume_M3_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean b = engine.TryEvaluate("1=1m*1m*1m", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m3=1m*1m*1m", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m3=1m2*1m", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m3=1000L", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1L=1000ml", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m3=1000ml*1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m3=10dm*10dm*10dm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m3=100cm*100cm*100cm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m3=1000mm*1000mm*1000mm", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1m3=0.001km*0.001km*0.001km", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1m3", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000dm3", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000cm3", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000000mm3", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1km3/1000/1000/1000", false); + assertEquals(true, b); + } + + @Test + public void Volume_DM3_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.VolumeUnit = toolgood.algorithm.enums.VolumeUnitType.DM3; + boolean b = engine.TryEvaluate("1=1m3/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000dm3/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000cm3/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000000mm3/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1km3/1000/1000/1000/1000", false); + assertEquals(true, b); + } + + @Test + public void Volume_CM3_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.VolumeUnit = toolgood.algorithm.enums.VolumeUnitType.CM3; + boolean b = engine.TryEvaluate("1=1m3/1000/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000dm3/1000/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000cm3/1000/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000000mm3/1000/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1km3/1000/1000/1000/1000/1000", false); + assertEquals(true, b); + } + + @Test + public void Volume_MM3_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.VolumeUnit = toolgood.algorithm.enums.VolumeUnitType.MM3; + boolean b = engine.TryEvaluate("1=1m3/1000/1000/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000dm3/1000/1000/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000cm3/1000/1000/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000000000mm3/1000/1000/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1km3/1000/1000/1000/1000/1000/1000", false); + assertEquals(true, b); + } + + @Test + public void Volume_KM3_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.VolumeUnit = toolgood.algorithm.enums.VolumeUnitType.KM3; + boolean b = engine.TryEvaluate("1=1m3*1000*1000*1000", false); + assertEquals(true, b); + b = engine.TryEvaluate("1=1000dm3*1000*1000*1000", false); + assertEquals(true, b); + b = engine.TryEvaluate("1=1000000cm3*1000*1000*1000", false); + assertEquals(true, b); + b = engine.TryEvaluate("1=1000000000mm3*1000*1000*1000", false); + assertEquals(true, b); + b = engine.TryEvaluate("1=1km3", false); + assertEquals(true, b); + } + + @Test + public void Mass_KG_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean b = engine.TryEvaluate("1=1kg", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000g", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.001t", false); + assertEquals(true, b); + } + + @Test + public void Mass_G_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.MassUnit = toolgood.algorithm.enums.MassUnitType.G; + + boolean b = engine.TryEvaluate("1=1kg/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000g/1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.001t/1000", false); + assertEquals(true, b); + } + + @Test + public void Mass_T_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + engine.MassUnit = toolgood.algorithm.enums.MassUnitType.T; + + boolean b = engine.TryEvaluate("1=1kg*1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=1000g*1000", false); + assertEquals(true, b); + + b = engine.TryEvaluate("1=0.001t*1000", false); + assertEquals(true, b); + } + + @Test + public void Unit_Error_Test() { + AlgorithmEngine engine = new AlgorithmEngine(); + boolean b = engine.TryEvaluate("1m=1kg", false); + assertEquals(true, b); + b = engine.TryEvaluate("1m=1m2", false); + assertEquals(true, b); + b = engine.TryEvaluate("1m=1m3", false); + assertEquals(true, b); + } +} \ No newline at end of file From 39a498fbc3f2ea240637e66dc5364347151ce6fd Mon Sep 17 00:00:00 2001 From: linzhijun Date: Wed, 18 Mar 2026 15:53:54 +0800 Subject: [PATCH 86/98] fix --- .../toolgood/algorithm/DemoApplication.java | 5 +- .../algorithm/Tests/FinancialTest.java | 62 +++++++++---------- .../toolgood/algorithm/Tests/ValueTest.java | 2 +- 3 files changed, 35 insertions(+), 34 deletions(-) diff --git a/java/src/test/java/toolgood/algorithm/DemoApplication.java b/java/src/test/java/toolgood/algorithm/DemoApplication.java index 27214020f..ab43619e9 100644 --- a/java/src/test/java/toolgood/algorithm/DemoApplication.java +++ b/java/src/test/java/toolgood/algorithm/DemoApplication.java @@ -1,5 +1,6 @@ package toolgood.algorithm; +import toolgood.algorithm.operands.MyDate; import toolgood.algorithm.Tests3.AlgorithmEngineHelperTest; @@ -7,10 +8,10 @@ public class DemoApplication { public static void main(String[] args) throws Exception { AlgorithmEngine engine = new AlgorithmEngine(); - MyDate dt2 = engine.TryEvaluate("DATE(2024, 8, 1) + TIME(8, 0, 0)", MyDate.now()); + MyDate dt2 = engine.TryEvaluate_MyDate("DATE(2024, 8, 1) + TIME(8, 0, 0)", MyDate.now()); System.out.println(dt2); - MyDate dt3 = engine.TryEvaluate("DATE(2024, 8, 1,1,2,3)", MyDate.now()); + MyDate dt3 = engine.TryEvaluate_MyDate("DATE(2024, 8, 1,1,2,3)", MyDate.now()); System.out.println(dt3); diff --git a/java/src/test/java/toolgood/algorithm/Tests/FinancialTest.java b/java/src/test/java/toolgood/algorithm/Tests/FinancialTest.java index ee3a88d89..96424d3c2 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/FinancialTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/FinancialTest.java @@ -10,99 +10,99 @@ class FinancialTest { @Test void PMT_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("PMT(0.08/12, 10, 10000)", null); - assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(-1037.0321 * 10000) / 10000.0); + double t = engine.TryEvaluate("PMT(0.08/12, 10, 10000)", 0.0); + assertEquals(Math.round(t * 10000) / 10000.0, Math.round(-1037.0321 * 10000) / 10000.0); } @Test void PPMT_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("PPMT(0.08/12, 1, 10, 10000)", null); - assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(-970.3654 * 10000) / 10000.0); + double t = engine.TryEvaluate("PPMT(0.08/12, 1, 10, 10000)", 0.0); + assertEquals(Math.round(t * 10000) / 10000.0, Math.round(-970.3654 * 10000) / 10000.0); } @Test void IPMT_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("IPMT(0.08/12, 1, 10, 10000)", null); - assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(-66.6667 * 10000) / 10000.0); + double t = engine.TryEvaluate("IPMT(0.08/12, 1, 10, 10000)", 0.0); + assertEquals(Math.round(t * 10000) / 10000.0, Math.round(-66.6667 * 10000) / 10000.0); } @Test void PV_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("PV(0.08/12, 10, -1000)", null); - assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(9642.90 * 100) / 100.0); + double t = engine.TryEvaluate("PV(0.08/12, 10, -1000)", 0.0); + assertEquals(Math.round(t * 100) / 100.0, Math.round(9642.90 * 100) / 100.0); } @Test void FV_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("FV(0.08/12, 10, -1000)", null); - assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(10305.40 * 100) / 100.0); + double t = engine.TryEvaluate("FV(0.08/12, 10, -1000)", 0.0); + assertEquals(Math.round(t * 100) / 100.0, Math.round(10305.40 * 100) / 100.0); } @Test void NPER_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("NPER(0.08/12, -1000, 10000)", null); - assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(10.38 * 100) / 100.0); + double t = engine.TryEvaluate("NPER(0.08/12, -1000, 10000)", 0.0); + assertEquals(Math.round(t * 100) / 100.0, Math.round(10.38 * 100) / 100.0); } @Test void RATE_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("RATE(12,-100,400,0,0,0.1)", null); - assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(0.2289 * 10000) / 10000.0); + double t = engine.TryEvaluate("RATE(12,-100,400,0,0,0.1)", 0.0); + assertEquals(Math.round(t * 10000) / 10000.0, Math.round(0.2289 * 10000) / 10000.0); } @Test void NPV_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("NPV(0.1, -10000, 3000, 4200, 6800)", null); - assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(1188.44 * 100) / 100.0); + double t = engine.TryEvaluate("NPV(0.1, -10000, 3000, 4200, 6800)", 0.0); + assertEquals(Math.round(t * 100) / 100.0, Math.round(1188.44 * 100) / 100.0); } @Test void IRR_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("IRR(array(-70000, 12000, 15000, 18000, 21000, 26000))", null); - assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(0.0866 * 10000) / 10000.0); + double t = engine.TryEvaluate("IRR(array(-70000, 12000, 15000, 18000, 21000, 26000))", 0.0); + assertEquals(Math.round(t * 10000) / 10000.0, Math.round(0.0866 * 10000) / 10000.0); } @Test void MIRR_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("MIRR(array(-70000, 12000, 15000, 18000, 21000, 26000), 0.1, 0.12)", null); - assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(0.0987 * 10000) / 10000.0); + double t = engine.TryEvaluate("MIRR(array(-70000, 12000, 15000, 18000, 21000, 26000), 0.1, 0.12)", 0.0); + assertEquals(Math.round(t * 10000) / 10000.0, Math.round(0.0987 * 10000) / 10000.0); } @Test void SLN_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("SLN(30000, 7500, 10)", null); + double t = engine.TryEvaluate("SLN(30000, 7500, 10)", 0.0); assertEquals(t, 2250.0); } @Test void SYD_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("SYD(30000, 7500, 10, 1)", null); - assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(4090.91 * 100) / 100.0); + double t = engine.TryEvaluate("SYD(30000, 7500, 10, 1)", 0.0); + assertEquals(Math.round(t * 100) / 100.0, Math.round(4090.91 * 100) / 100.0); } @Test void DDB_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("DDB(2400, 300, 10, 2)", null); - assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(384.0 * 100) / 100.0); + double t = engine.TryEvaluate("DDB(2400, 300, 10, 2)", 0.0); + assertEquals(Math.round(t * 100) / 100.0, Math.round(384.0 * 100) / 100.0); } @Test void DB_test() { AlgorithmEngine engine = new AlgorithmEngine(); - Object t = engine.TryEvaluate("DB(1000000, 100000, 6, 1)", null); - assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(319000.0 * 100) / 100.0); + double t = engine.TryEvaluate("DB(1000000, 100000, 6, 1)", 0.0); + assertEquals(Math.round(t * 100) / 100.0, Math.round(319000.0 * 100) / 100.0); } @Test @@ -110,8 +110,8 @@ void XNPV_test() { AlgorithmEngine engine = new AlgorithmEngine(); // Java版本可能需要不同的方式来处理数组参数 // 这里使用字符串数组的方式 - Object t = engine.TryEvaluate("XNPV(0.09, array(-10000, 2750, 4250, 3250, 2750), array('2008-1-1', '2008-3-1', '2008-10-30', '2009-2-15', '2009-4-1'))", null); - assertEquals(Math.round((Double) t * 100) / 100.0, Math.round(2086.65 * 100) / 100.0); + double t = engine.TryEvaluate("XNPV(0.09, array(-10000, 2750, 4250, 3250, 2750), array('2008-1-1', '2008-3-1', '2008-10-30', '2009-2-15', '2009-4-1'))", 0.0); + assertEquals(Math.round(t * 100) / 100.0, Math.round(2086.65 * 100) / 100.0); } @Test @@ -119,7 +119,7 @@ void XIRR_test() { AlgorithmEngine engine = new AlgorithmEngine(); // Java版本可能需要不同的方式来处理数组参数 // 这里使用字符串数组的方式 - Object t = engine.TryEvaluate("XIRR(array(-10000, 2750, 4250, 3250, 2750), array('2008-1-1', '2008-3-1', '2008-10-30', '2009-2-15', '2009-4-1'))", null); - assertEquals(Math.round((Double) t * 10000) / 10000.0, Math.round(0.3734 * 10000) / 10000.0); + double t = engine.TryEvaluate("XIRR(array(-10000, 2750, 4250, 3250, 2750), array('2008-1-1', '2008-3-1', '2008-10-30', '2009-2-15', '2009-4-1'))", 0.0); + assertEquals(Math.round(t * 10000) / 10000.0, Math.round(0.3734 * 10000) / 10000.0); } } diff --git a/java/src/test/java/toolgood/algorithm/Tests/ValueTest.java b/java/src/test/java/toolgood/algorithm/Tests/ValueTest.java index d35762ef3..7ad86233d 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/ValueTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/ValueTest.java @@ -52,7 +52,7 @@ public void TestVersion() { } @Test - public void Test_Json() { + public void Test_Json() throws Exception { AlgorithmEngine engine = new AlgorithmEngine(); toolgood.algorithm.internals.functions.FunctionBase t = engine.Parse("{'灰色':'L','canBookCount':905,'saleCount':91,'specId':'43b0e72e98731aed69e1f0cc7d64bf4d'}"); String c = engine.Evaluate(t).toString(); From 5f4ff322acdf4a5c0fd4d99e4d15f9b5d0fe698e Mon Sep 17 00:00:00 2001 From: linzhijun Date: Thu, 19 Mar 2026 14:17:17 +0800 Subject: [PATCH 87/98] fix --- .../algorithm/Tests/FinancialTest.java | 72 ++++----- .../toolgood/algorithm/Tests/FlowTest.java | 54 +++---- .../algorithm/Tests/MathBaseTest.java | 92 +++++------ .../algorithm/Tests/MathSum2Test.java | 56 +++---- .../toolgood/algorithm/Tests/MathSumTest.java | 152 +++++++++--------- 5 files changed, 213 insertions(+), 213 deletions(-) diff --git a/java/src/test/java/toolgood/algorithm/Tests/FinancialTest.java b/java/src/test/java/toolgood/algorithm/Tests/FinancialTest.java index 96424d3c2..7211f294f 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/FinancialTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/FinancialTest.java @@ -5,121 +5,121 @@ import static org.junit.Assert.assertEquals; -class FinancialTest { +public class FinancialTest { @Test - void PMT_test() { + public void PMT_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("PMT(0.08/12, 10, 10000)", 0.0); - assertEquals(Math.round(t * 10000) / 10000.0, Math.round(-1037.0321 * 10000) / 10000.0); + assertEquals(Math.round(-1037.0321 * 10000) / 10000.0, Math.round(t * 10000) / 10000.0, 0.0001); } @Test - void PPMT_test() { + public void PPMT_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("PPMT(0.08/12, 1, 10, 10000)", 0.0); - assertEquals(Math.round(t * 10000) / 10000.0, Math.round(-970.3654 * 10000) / 10000.0); + assertEquals(Math.round(-970.3654 * 10000) / 10000.0, Math.round(t * 10000) / 10000.0, 0.0001); } @Test - void IPMT_test() { + public void IPMT_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("IPMT(0.08/12, 1, 10, 10000)", 0.0); - assertEquals(Math.round(t * 10000) / 10000.0, Math.round(-66.6667 * 10000) / 10000.0); + assertEquals(Math.round(-66.6667 * 10000) / 10000.0, Math.round(t * 10000) / 10000.0, 0.0001); } @Test - void PV_test() { + public void PV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("PV(0.08/12, 10, -1000)", 0.0); - assertEquals(Math.round(t * 100) / 100.0, Math.round(9642.90 * 100) / 100.0); + assertEquals(Math.round(9642.90 * 100) / 100.0, Math.round(t * 100) / 100.0, 0.01); } @Test - void FV_test() { + public void FV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("FV(0.08/12, 10, -1000)", 0.0); - assertEquals(Math.round(t * 100) / 100.0, Math.round(10305.40 * 100) / 100.0); + assertEquals(Math.round(10305.40 * 100) / 100.0, Math.round(t * 100) / 100.0, 0.01); } @Test - void NPER_test() { + public void NPER_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("NPER(0.08/12, -1000, 10000)", 0.0); - assertEquals(Math.round(t * 100) / 100.0, Math.round(10.38 * 100) / 100.0); + assertEquals(Math.round(10.38 * 100) / 100.0, Math.round(t * 100) / 100.0, 0.01); } @Test - void RATE_test() { + public void RATE_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("RATE(12,-100,400,0,0,0.1)", 0.0); - assertEquals(Math.round(t * 10000) / 10000.0, Math.round(0.2289 * 10000) / 10000.0); + assertEquals(Math.round(0.2289 * 10000) / 10000.0, Math.round(t * 10000) / 10000.0, 0.0001); } @Test - void NPV_test() { + public void NPV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("NPV(0.1, -10000, 3000, 4200, 6800)", 0.0); - assertEquals(Math.round(t * 100) / 100.0, Math.round(1188.44 * 100) / 100.0); + assertEquals(Math.round(1188.44 * 100) / 100.0, Math.round(t * 100) / 100.0, 0.01); } @Test - void IRR_test() { + public void IRR_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("IRR(array(-70000, 12000, 15000, 18000, 21000, 26000))", 0.0); - assertEquals(Math.round(t * 10000) / 10000.0, Math.round(0.0866 * 10000) / 10000.0); + double t = engine.TryEvaluate("IRR(ARRAY(-70000, 12000, 15000, 18000, 21000, 26000))", 0.0); + assertEquals(Math.round(0.0866 * 10000) / 10000.0, Math.round(t * 10000) / 10000.0, 0.0001); } @Test - void MIRR_test() { + public void MIRR_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("MIRR(array(-70000, 12000, 15000, 18000, 21000, 26000), 0.1, 0.12)", 0.0); - assertEquals(Math.round(t * 10000) / 10000.0, Math.round(0.0987 * 10000) / 10000.0); + double t = engine.TryEvaluate("MIRR(ARRAY(-70000, 12000, 15000, 18000, 21000, 26000), 0.1, 0.12)", 0.0); + assertEquals(Math.round(0.0987 * 10000) / 10000.0, Math.round(t * 10000) / 10000.0, 0.0001); } @Test - void SLN_test() { + public void SLN_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("SLN(30000, 7500, 10)", 0.0); assertEquals(t, 2250.0); } @Test - void SYD_test() { + public void SYD_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("SYD(30000, 7500, 10, 1)", 0.0); - assertEquals(Math.round(t * 100) / 100.0, Math.round(4090.91 * 100) / 100.0); + assertEquals(Math.round(4090.91 * 100) / 100.0, Math.round(t * 100) / 100.0, 0.01); } @Test - void DDB_test() { + public void DDB_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("DDB(2400, 300, 10, 2)", 0.0); - assertEquals(Math.round(t * 100) / 100.0, Math.round(384.0 * 100) / 100.0); + assertEquals(Math.round(384.0 * 100) / 100.0, Math.round(t * 100) / 100.0, 0.01); } @Test - void DB_test() { + public void DB_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("DB(1000000, 100000, 6, 1)", 0.0); - assertEquals(Math.round(t * 100) / 100.0, Math.round(319000.0 * 100) / 100.0); + assertEquals(Math.round(319000.0 * 100) / 100.0, Math.round(t * 100) / 100.0, 0.01); } @Test - void XNPV_test() { + public void XNPV_test() { AlgorithmEngine engine = new AlgorithmEngine(); // Java版本可能需要不同的方式来处理数组参数 // 这里使用字符串数组的方式 - double t = engine.TryEvaluate("XNPV(0.09, array(-10000, 2750, 4250, 3250, 2750), array('2008-1-1', '2008-3-1', '2008-10-30', '2009-2-15', '2009-4-1'))", 0.0); - assertEquals(Math.round(t * 100) / 100.0, Math.round(2086.65 * 100) / 100.0); + double t = engine.TryEvaluate("XNPV(0.09, ARRAY(-10000, 2750, 4250, 3250, 2750), ARRAY('2008-1-1', '2008-3-1', '2008-10-30', '2009-2-15', '2009-4-1'))", 0.0); + assertEquals(Math.round(2086.65 * 100) / 100.0, Math.round(t * 100) / 100.0, 0.01); } @Test - void XIRR_test() { + public void XIRR_test() { AlgorithmEngine engine = new AlgorithmEngine(); // Java版本可能需要不同的方式来处理数组参数 // 这里使用字符串数组的方式 - double t = engine.TryEvaluate("XIRR(array(-10000, 2750, 4250, 3250, 2750), array('2008-1-1', '2008-3-1', '2008-10-30', '2009-2-15', '2009-4-1'))", 0.0); - assertEquals(Math.round(t * 10000) / 10000.0, Math.round(0.3734 * 10000) / 10000.0); + double t = engine.TryEvaluate("XIRR(ARRAY(-10000, 2750, 4250, 3250, 2750), ARRAY('2008-1-1', '2008-3-1', '2008-10-30', '2009-2-15', '2009-4-1'))", 0.0); + assertEquals(Math.round(0.3734 * 10000) / 10000.0, Math.round(t * 10000) / 10000.0, 0.0001); } } diff --git a/java/src/test/java/toolgood/algorithm/Tests/FlowTest.java b/java/src/test/java/toolgood/algorithm/Tests/FlowTest.java index 43068d568..3366863fc 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/FlowTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/FlowTest.java @@ -5,10 +5,10 @@ import static org.junit.Assert.assertEquals; -class FlowTest { +public class FlowTest { @Test - void If_Test() { + public void If_Test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("if(1=1,1,2)", 0.0); assertEquals(t, 1); @@ -25,7 +25,7 @@ void If_Test() { } @Test - void iferror_test() { + public void iferror_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("iferror(1/0,1,2)", 0.0); assertEquals(t, 1); @@ -35,7 +35,7 @@ void iferror_test() { } @Test - void iserror_test() { + public void iserror_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("iserror(1/0,1)", 0.0); assertEquals(t, 1); @@ -45,7 +45,7 @@ void iserror_test() { } @Test - void ifnull_test() { + public void ifnull_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("isnull(null,1)", 0.0); assertEquals(t, 1); @@ -55,7 +55,7 @@ void ifnull_test() { } @Test - void isnullorerror_test() { + public void isnullorerror_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("isnullorerror(null,1)", 0.0); assertEquals(t, 1); @@ -68,7 +68,7 @@ void isnullorerror_test() { } @Test - void ISNUMBER_test() { + public void ISNUMBER_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("if(ISNUMBER(1),1,2)", 0.0); assertEquals(t, 1); @@ -83,7 +83,7 @@ void ISNUMBER_test() { } @Test - void ISTEXT_test() { + public void ISTEXT_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("if(ISTEXT(1),1,2)", 0.0); assertEquals(t, 2); @@ -98,7 +98,7 @@ void ISTEXT_test() { } @Test - void ISNONTEXT_test() { + public void ISNONTEXT_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("if(ISNONTEXT(1),1,2)", 0.0); assertEquals(t, 1); @@ -113,7 +113,7 @@ void ISNONTEXT_test() { } @Test - void ISLOGICAL_test() { + public void ISLOGICAL_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("if(ISLOGICAL(1),1,2)", 0.0); assertEquals(t, 2); @@ -129,7 +129,7 @@ void ISLOGICAL_test() { } @Test - void ISEVEN_test() { + public void ISEVEN_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("if(ISEVEN(1),1,2)", 0.0); assertEquals(t, 2); @@ -142,7 +142,7 @@ void ISEVEN_test() { } @Test - void ISODD_test() { + public void ISODD_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("if(ISODD(1),1,2)", 0.0); assertEquals(t, 1); @@ -155,7 +155,7 @@ void ISODD_test() { } @Test - void And_Test() { + public void And_Test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("and(true(),1=1)", 0.0); assertEquals(t, true); @@ -172,7 +172,7 @@ void And_Test() { } @Test - void Or_Test() { + public void Or_Test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("or(true(),1=1)", 0.0); assertEquals(t, true); @@ -192,7 +192,7 @@ void Or_Test() { } @Test - void Not_Test() { + public void Not_Test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("not(true())", 0.0); assertEquals(t, false); @@ -201,21 +201,21 @@ void Not_Test() { } @Test - void true_Test() { + public void true_Test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("true()", 0.0); assertEquals(t, true); } @Test - void false_Test() { + public void false_Test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("false()", 0.0); assertEquals(t, false); } @Test - void andor_Test() { + public void andor_Test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean t = engine.TryEvaluate("1=1 && 2==2 && 3=3", false); assertEquals(t, true); @@ -228,7 +228,7 @@ void andor_Test() { } @Test - void IFS_test() { + public void IFS_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("IFS(1=1, 'a', 1=2, 'b')", 0.0); assertEquals(t, "a"); @@ -241,7 +241,7 @@ void IFS_test() { } @Test - void SWITCH_test() { + public void SWITCH_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("SWITCH(1, 1, 'one', 2, 'two')", 0.0); assertEquals(t, "one"); @@ -257,7 +257,7 @@ void SWITCH_test() { } @Test - void XOR_test() { + public void XOR_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean t = engine.TryEvaluate("XOR(true(), false())", false); assertEquals(t, true); @@ -282,7 +282,7 @@ void XOR_test() { } @Test - void MethodStyle_ISNUMBER_test() { + public void MethodStyle_ISNUMBER_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean t = engine.TryEvaluate("123.ISNUMBER()", false); assertEquals(t, true); @@ -295,7 +295,7 @@ void MethodStyle_ISNUMBER_test() { } @Test - void MethodStyle_ISTEXT_test() { + public void MethodStyle_ISTEXT_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean t = engine.TryEvaluate("'abc'.ISTEXT()", false); assertEquals(t, true); @@ -305,7 +305,7 @@ void MethodStyle_ISTEXT_test() { } @Test - void MethodStyle_ISNONTEXT_test() { + public void MethodStyle_ISNONTEXT_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean t = engine.TryEvaluate("123.ISNONTEXT()", false); assertEquals(t, true); @@ -315,7 +315,7 @@ void MethodStyle_ISNONTEXT_test() { } @Test - void MethodStyle_ISLOGICAL_test() { + public void MethodStyle_ISLOGICAL_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean t = engine.TryEvaluate("true.ISLOGICAL()", false); assertEquals(t, true); @@ -328,7 +328,7 @@ void MethodStyle_ISLOGICAL_test() { } @Test - void MethodStyle_ISNULL_test() { + public void MethodStyle_ISNULL_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean t = engine.TryEvaluate("null.ISNULL()", false); assertEquals(t, true); @@ -338,7 +338,7 @@ void MethodStyle_ISNULL_test() { } @Test - void MethodStyle_ISNULLORERROR_test() { + public void MethodStyle_ISNULLORERROR_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean t = engine.TryEvaluate("null.ISNULLORERROR()", false); assertEquals(t, true); diff --git a/java/src/test/java/toolgood/algorithm/Tests/MathBaseTest.java b/java/src/test/java/toolgood/algorithm/Tests/MathBaseTest.java index 858145dfd..65cdc251b 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/MathBaseTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/MathBaseTest.java @@ -5,38 +5,38 @@ import static org.junit.Assert.*; -class MathBaseTest { +public class MathBaseTest { @Test - void Pi_test() { + public void Pi_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("pi()", 0.0); assertEquals(3.141592654, Math.round((Double) t * 1000000000L) / 1000000000.0); } @Test - void abs_test() { + public void abs_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("abs(-1.2)", 0.0); assertEquals(1.2, t); } @Test - void QUOTIENT_test() { + public void QUOTIENT_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("QUOTIENT(7,3)", 0.0); assertEquals(2.0, t); } @Test - void MOD_test() { + public void MOD_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("MOD(7,3)", 0.0); assertEquals(1.0, t); } @Test - void SIGN_test() { + public void SIGN_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("SIGN(0)", 0.0); assertEquals(0, t); @@ -47,21 +47,21 @@ void SIGN_test() { } @Test - void SQRT_test() { + public void SQRT_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("SQRT(9)", 0.0); assertEquals(3.0, t); } @Test - void SUM_test() { + public void SUM_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("SUM(1,2,3,4)", 0.0); assertEquals(10.0, t); } @Test - void TRUNC_test() { + public void TRUNC_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("TRUNC(9.222)", 0.0); assertEquals(9.0, t); @@ -70,7 +70,7 @@ void TRUNC_test() { } @Test - void int_test() { + public void int_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("int(9.222)", 0.0); assertEquals(9.0, t); @@ -79,7 +79,7 @@ void int_test() { } @Test - void GCD_test() { + public void GCD_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("GCD(3,5,7)", 0.0); assertEquals(1.0, t); @@ -88,21 +88,21 @@ void GCD_test() { } @Test - void LCM_test() { + public void LCM_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("LCM(3,5,7)", 0.0); assertEquals(105.0, t); } @Test - void combin_test() { + public void combin_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("combin(10,2)", 0.0); assertEquals(45.0, t); } @Test - void PERMUT_test() { + public void PERMUT_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("PERMUT(10,2)", 0.0); assertEquals(90.0, t); @@ -110,14 +110,14 @@ void PERMUT_test() { // 四舍五入 @Test - void ROUND_test() { + public void ROUND_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("ROUND(4.333,2)", 0.0); assertEquals(4.33, t); } @Test - void ROUND_single_param_test() { + public void ROUND_single_param_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("ROUND(4.5)", 0.0); assertEquals(5.0, t); @@ -130,7 +130,7 @@ void ROUND_single_param_test() { } @Test - void ROUNDDOWN_test() { + public void ROUNDDOWN_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("ROUNDDOWN(4.333,2)", 0.0); assertEquals(4.33, t); @@ -140,7 +140,7 @@ void ROUNDDOWN_test() { } @Test - void ROUNDUP_test() { + public void ROUNDUP_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("ROUNDUP(4.333,2)", 0.0); assertEquals(4.34, t); @@ -150,7 +150,7 @@ void ROUNDUP_test() { } @Test - void CEILING_test() { + public void CEILING_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("CEILING(4.333,0.1)", 0.0); assertEquals(4.4, t); @@ -160,7 +160,7 @@ void CEILING_test() { } @Test - void FLOOR_test() { + public void FLOOR_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("FLOOR(4.363,0.1)", 0.0); assertEquals(4.3, t); @@ -170,21 +170,21 @@ void FLOOR_test() { } @Test - void even_test() { + public void even_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("even(4.363)", 0.0); assertEquals(6.0, t); } @Test - void odd_test() { + public void odd_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("odd(4.363)", 0.0); assertEquals(5, t); } @Test - void MROUND_test() { + public void MROUND_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("MROUND(4.363,2)", 0.0); assertEquals(4, t); @@ -194,7 +194,7 @@ void MROUND_test() { // 随机数 @Test - void Rand_test() { + public void Rand_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("RAND()", 0.0); double value = (Double) t; @@ -203,7 +203,7 @@ void Rand_test() { } @Test - void RANDBETWEEN_test() { + public void RANDBETWEEN_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("RANDBETWEEN(2,99)", 0.0); double value = (Double) t; @@ -213,7 +213,7 @@ void RANDBETWEEN_test() { // 幂/对数/阶乘 @Test - void fact_test() { + public void fact_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("fact(6)", 0.0); assertEquals(720.0, t); @@ -222,21 +222,21 @@ void fact_test() { } @Test - void factdouble_test() { + public void factdouble_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("factdouble(10)", 0.0); assertEquals(3840.0, t); } @Test - void POWER_test() { + public void POWER_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("POWER(10,2)", 0.0); assertEquals(100.0, t); } @Test - void exp_test() { + public void exp_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("exp(2)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -244,7 +244,7 @@ void exp_test() { } @Test - void ln_test() { + public void ln_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("ln(4)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -252,7 +252,7 @@ void ln_test() { } @Test - void log_test() { + public void log_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("log(10)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -264,7 +264,7 @@ void log_test() { } @Test - void log10_test() { + public void log10_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("log10(10)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -272,7 +272,7 @@ void log10_test() { } @Test - void MULTINOMIAL_test() { + public void MULTINOMIAL_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("MULTINOMIAL(1,2,3)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -286,7 +286,7 @@ void MULTINOMIAL_test() { } @Test - void PRODUCT_test() { + public void PRODUCT_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("PRODUCT(1,2,3,4)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -294,7 +294,7 @@ void PRODUCT_test() { } @Test - void SQRTPI_test() { + public void SQRTPI_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("SQRTPI(3)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -302,7 +302,7 @@ void SQRTPI_test() { } @Test - void SUMSQ_test() { + public void SUMSQ_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("SUMSQ(1,2)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -311,7 +311,7 @@ void SUMSQ_test() { // 工程函数 @Test - void ERF_test() { + public void ERF_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("ERF(0)", 0.0); assertEquals(0.0, Math.round((Double) t * 1000000) / 1000000.0); @@ -338,7 +338,7 @@ void ERF_test() { } @Test - void ERFC_test() { + public void ERFC_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("ERFC(0)", 0.0); assertEquals(1.0, Math.round((Double) t * 1000000) / 1000000.0); @@ -355,7 +355,7 @@ void ERFC_test() { } @Test - void DELTA_test() { + public void DELTA_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("DELTA(5, 5)", 0.0); assertEquals(1.0, t); @@ -371,7 +371,7 @@ void DELTA_test() { } @Test - void GESTEP_test() { + public void GESTEP_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("GESTEP(5, 4)", 0.0); assertEquals(1.0, t); @@ -391,7 +391,7 @@ void GESTEP_test() { // 百分比 @Test - void Percentage_test() { + public void Percentage_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("50%", 0.0); assertEquals(0.5, t); @@ -414,7 +414,7 @@ void Percentage_test() { // 边界值测试 @Test - void DivisionByZero_Test() { + public void DivisionByZero_Test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("1/0", 0.0); assertEquals(t, 0); @@ -424,14 +424,14 @@ void DivisionByZero_Test() { } @Test - void Overflow_Test() { + public void Overflow_Test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("99999999999999999999*99999999999999999999", 0.0); assertEquals(t, 0); } @Test - void NullOperation_Test() { + public void NullOperation_Test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("null+1", 0.0); assertEquals(t, 0); @@ -444,14 +444,14 @@ void NullOperation_Test() { } @Test - void SquareRootNegative_Test() { + public void SquareRootNegative_Test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("sqrt(-1)", 0.0); assertEquals(t, 0); } @Test - void LogNegative_Test() { + public void LogNegative_Test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("log(-1)", 0.0); assertEquals(t, 0); diff --git a/java/src/test/java/toolgood/algorithm/Tests/MathSum2Test.java b/java/src/test/java/toolgood/algorithm/Tests/MathSum2Test.java index 44646eb02..e36a8f251 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/MathSum2Test.java +++ b/java/src/test/java/toolgood/algorithm/Tests/MathSum2Test.java @@ -5,10 +5,10 @@ import static org.junit.Assert.assertEquals; -class MathSum2Test { +public class MathSum2Test { @Test - void NORMSDIST_test() { + public void NORMSDIST_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("NORMSDIST(1)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -16,7 +16,7 @@ void NORMSDIST_test() { } @Test - void NORMDIST_test() { + public void NORMDIST_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("NORMDIST(3,8,4,1)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -27,7 +27,7 @@ void NORMDIST_test() { } @Test - void NORMINV_test() { + public void NORMINV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("NORMINV(0.8,8,3)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -35,7 +35,7 @@ void NORMINV_test() { } @Test - void NORMSINV_test() { + public void NORMSINV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("NORMSINV(0.3)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -43,7 +43,7 @@ void NORMSINV_test() { } @Test - void BETADIST_test() { + public void BETADIST_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("BETADIST(0.5,11,22)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -51,7 +51,7 @@ void BETADIST_test() { } @Test - void BETAINV_test() { + public void BETAINV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("BETAINV(0.5,23,45)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -59,7 +59,7 @@ void BETAINV_test() { } @Test - void BINOMDIST_test() { + public void BINOMDIST_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("BINOMDIST(12,45,0.5,0)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -70,7 +70,7 @@ void BINOMDIST_test() { } @Test - void EXPONDIST_test() { + public void EXPONDIST_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("EXPONDIST(3,1,0)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -81,7 +81,7 @@ void EXPONDIST_test() { } @Test - void FDIST_test() { + public void FDIST_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("FDIST(0.4,2,3)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -89,7 +89,7 @@ void FDIST_test() { } @Test - void FINV_test() { + public void FINV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("FINV(0.7,2,3)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -97,7 +97,7 @@ void FINV_test() { } @Test - void GAMMADIST_test() { + public void GAMMADIST_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("GAMMADIST(0.5,3,4,0)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -108,7 +108,7 @@ void GAMMADIST_test() { } @Test - void GAMMAINV_test() { + public void GAMMAINV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("GAMMAINV(0.2,3,4)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -116,7 +116,7 @@ void GAMMAINV_test() { } @Test - void GAMMALN_test() { + public void GAMMALN_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("GAMMALN(4)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -124,7 +124,7 @@ void GAMMALN_test() { } @Test - void HYPGEOMDIST_test() { + public void HYPGEOMDIST_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("HYPGEOMDIST(23,45,45,100)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -132,7 +132,7 @@ void HYPGEOMDIST_test() { } @Test - void LOGINV_test() { + public void LOGINV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("LOGINV(0.1,45,33)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -140,7 +140,7 @@ void LOGINV_test() { } @Test - void LOGNORMDIST_test() { + public void LOGNORMDIST_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("LOGNORMDIST(15,23,45)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -148,7 +148,7 @@ void LOGNORMDIST_test() { } @Test - void NEGBINOMDIST_test() { + public void NEGBINOMDIST_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("NEGBINOMDIST(23,45,0.7)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -156,7 +156,7 @@ void NEGBINOMDIST_test() { } @Test - void POISSON_test() { + public void POISSON_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("POISSON(23,23,0)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -167,7 +167,7 @@ void POISSON_test() { } @Test - void TDIST_test() { + public void TDIST_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("TDIST(1.2,24,1)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -178,7 +178,7 @@ void TDIST_test() { } @Test - void TINV_test() { + public void TINV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("TINV(0.12,23)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -186,7 +186,7 @@ void TINV_test() { } @Test - void WEIBULL_test() { + public void WEIBULL_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("WEIBULL(1,2,3,1)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -201,7 +201,7 @@ void WEIBULL_test() { } @Test - void FISHER_test() { + public void FISHER_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("FISHER(0.68)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -209,7 +209,7 @@ void FISHER_test() { } @Test - void FISHERINV_test() { + public void FISHERINV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("FISHERINV(0.6)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -218,7 +218,7 @@ void FISHERINV_test() { // Bessel函数 @Test - void BESSELI_test() { + public void BESSELI_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("BESSELI(1.5, 1)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -230,7 +230,7 @@ void BESSELI_test() { } @Test - void BESSELJ_test() { + public void BESSELJ_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("BESSELJ(1.5, 1)", 0.0); double rounded = Math.round((Double) t * 1000000) / 1000000.0; @@ -242,7 +242,7 @@ void BESSELJ_test() { } @Test - void BESSELK_test() { + public void BESSELK_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("BESSELK(1.5, 1)", 0.0); double rounded = Math.round((Double) t * 1000) / 1000.0; @@ -254,7 +254,7 @@ void BESSELK_test() { } @Test - void BESSELY_test() { + public void BESSELY_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("BESSELY(1.5, 1)", 0.0); double rounded = Math.round((Double) t * 1000) / 1000.0; diff --git a/java/src/test/java/toolgood/algorithm/Tests/MathSumTest.java b/java/src/test/java/toolgood/algorithm/Tests/MathSumTest.java index 8f0e3b086..599001287 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/MathSumTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/MathSumTest.java @@ -5,18 +5,18 @@ import static org.junit.Assert.assertEquals; -class MathSumTest { +public class MathSumTest { // 简单统计 @Test - void MAX_test() { + public void MAX_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("max(1,2,3,4,2,2,1,4)", 0.0); assertEquals(4.0, t, 0.0001); } @Test - void MEDIAN_test() { + public void MEDIAN_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("MEDIAN(1,2,3,4,2,2,1,4)", 0.0); assertEquals(2.0, t, 0.0001); @@ -26,57 +26,57 @@ void MEDIAN_test() { } @Test - void MIN_test() { + public void MIN_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("MIN(1,2,3,4,2,2,1,4)", 0.0); assertEquals(1.0, t, 0.0001); } @Test - void QUARTILE_test() { + public void QUARTILE_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),0)", 0.0); + double t = engine.TryEvaluate("QUARTILE(ARRAY(1,2,3,4,2,2,1,4),0)", 0.0); assertEquals(1.0, t, 0.0001); - t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),1)", 0.0); + t = engine.TryEvaluate("QUARTILE(ARRAY(1,2,3,4,2,2,1,4),1)", 0.0); assertEquals(1.75, t, 0.0001); - t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),2)", 0.0); + t = engine.TryEvaluate("QUARTILE(ARRAY(1,2,3,4,2,2,1,4),2)", 0.0); assertEquals(2.0, t, 0.0001); - t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),3)", 0.0); + t = engine.TryEvaluate("QUARTILE(ARRAY(1,2,3,4,2,2,1,4),3)", 0.0); assertEquals(3.25, t, 0.0001); - t = engine.TryEvaluate("QUARTILE(array(1,2,3,4,2,2,1,4),4)", 0.0); + t = engine.TryEvaluate("QUARTILE(ARRAY(1,2,3,4,2,2,1,4),4)", 0.0); assertEquals(4.0, t, 0.0001); } @Test - void MODE_test() { + public void MODE_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("MODE(1,2,3,4,2,2,1,4)", 0.0); assertEquals(2.0, t, 0.0001); } @Test - void PERCENTILE_test() { + public void PERCENTILE_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("PERCENTILE(array(1,2,3,4,2,2,1,4),0.4)", 0.0); + double t = engine.TryEvaluate("PERCENTILE(ARRAY(1,2,3,4,2,2,1,4),0.4)", 0.0); assertEquals(2.0, t, 0.0001); } @Test - void PERCENTRANK_test() { + public void PERCENTRANK_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("PERCENTRANK(array(1,2,3,4,2,2,1,4),3)", 0.0); + double t = engine.TryEvaluate("PERCENTRANK(ARRAY(1,2,3,4,2,2,1,4),3)", 0.0); assertEquals(0.714, t, 0.001); } @Test - void AVERAGE_test() { + public void AVERAGE_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("AVERAGE(1,2,3,4,2,2,1,4)", 0.0); assertEquals(2.375, t, 0.0001); } @Test - void GEOMEAN_test() { + public void GEOMEAN_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("GEOMEAN(1,2,3,4)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -84,7 +84,7 @@ void GEOMEAN_test() { } @Test - void HARMEAN_test() { + public void HARMEAN_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("HARMEAN(1,2,3,4)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -92,21 +92,21 @@ void HARMEAN_test() { } @Test - void COUNT_test() { + public void COUNT_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("COUNT(1,2,3,4,2,2,1,4)", 0.0); assertEquals(8.0, t, 0.0001); } @Test - void AVEDEV_test() { + public void AVEDEV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("AVEDEV(1,2,3,4,2,2,1,4)", 0.0); assertEquals(0.96875, t, 0.0001); } @Test - void STDEV_test() { + public void STDEV_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("STDEV(1,2,3,4,2,2,1,4)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -114,7 +114,7 @@ void STDEV_test() { } @Test - void STDEVP_test() { + public void STDEVP_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("STDEVP(1,2,3,4,2,2,1,4)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -122,7 +122,7 @@ void STDEVP_test() { } @Test - void DEVSQ_test() { + public void DEVSQ_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("DEVSQ(1,2,3,4,2,2,1,4)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -130,7 +130,7 @@ void DEVSQ_test() { } @Test - void VAR_test() { + public void VAR_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("VAR(1,2,3,4,2,2,1,4)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -138,7 +138,7 @@ void VAR_test() { } @Test - void VARP_test() { + public void VARP_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("VARP(1,2,3,4,2,2,1,4)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -147,85 +147,85 @@ void VARP_test() { // 统计函数 @Test - void RANK_test() { + public void RANK_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("RANK(3, array(1, 2, 3, 4, 5))", 0.0); + double t = engine.TryEvaluate("RANK(3, ARRAY(1, 2, 3, 4, 5))", 0.0); assertEquals(3, t, 0.0001); - t = engine.TryEvaluate("RANK(3, array(1, 2, 3, 4, 5), 0)", 0.0); + t = engine.TryEvaluate("RANK(3, ARRAY(1, 2, 3, 4, 5), 0)", 0.0); assertEquals(3, t, 0.0001); - t = engine.TryEvaluate("RANK(3, array(1, 2, 3, 4, 5), 1)", 0.0); + t = engine.TryEvaluate("RANK(3, ARRAY(1, 2, 3, 4, 5), 1)", 0.0); assertEquals(3, t, 0.0001); - t = engine.TryEvaluate("RANK(5, array(1, 2, 3, 4, 5))", 0.0); + t = engine.TryEvaluate("RANK(5, ARRAY(1, 2, 3, 4, 5))", 0.0); assertEquals(1, t, 0.0001); - t = engine.TryEvaluate("RANK(1, array(1, 2, 3, 4, 5))", 0.0); + t = engine.TryEvaluate("RANK(1, ARRAY(1, 2, 3, 4, 5))", 0.0); assertEquals(5, t, 0.0001); } @Test - void FORECAST_test() { + public void FORECAST_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("FORECAST(30, array(6, 7, 9, 15, 21), array(20, 28, 31, 38, 40))", 0.0); + double t = engine.TryEvaluate("FORECAST(30, ARRAY(6, 7, 9, 15, 21), ARRAY(20, 28, 31, 38, 40))", 0.0); double rounded = Math.round(t * 10000) / 10000.0; assertEquals(Math.round(10.6073 * 10000) / 10000.0, rounded); } @Test - void INTERCEPT_test() { + public void INTERCEPT_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("INTERCEPT(array(2, 3, 9, 1, 8), array(6, 5, 11, 7, 5))", 0.0); + double t = engine.TryEvaluate("INTERCEPT(ARRAY(2, 3, 9, 1, 8), ARRAY(6, 5, 11, 7, 5))", 0.0); double rounded = Math.round(t * 10000) / 10000.0; assertEquals(Math.round(0.0484 * 10000) / 10000.0, rounded); } @Test - void SLOPE_test() { + public void SLOPE_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SLOPE(array(2, 3, 9, 1, 8), array(6, 5, 11, 7, 5))", 0.0); + double t = engine.TryEvaluate("SLOPE(ARRAY(2, 3, 9, 1, 8), ARRAY(6, 5, 11, 7, 5))", 0.0); double rounded = Math.round(t * 10000) / 10000.0; assertEquals(Math.round(0.6694 * 10000) / 10000.0, rounded); } @Test - void CORREL_test() { + public void CORREL_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("CORREL(array(3, 2, 4, 5, 6), array(9, 7, 12, 15, 17))", 0.0); + double t = engine.TryEvaluate("CORREL(ARRAY(3, 2, 4, 5, 6), ARRAY(9, 7, 12, 15, 17))", 0.0); double rounded = Math.round(t * 10000) / 10000.0; assertEquals(Math.round(0.9971 * 10000) / 10000.0, rounded); } @Test - void PEARSON_test() { + public void PEARSON_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("PEARSON(array(3, 2, 4, 5, 6), array(9, 7, 12, 15, 17))", 0.0); + double t = engine.TryEvaluate("PEARSON(ARRAY(3, 2, 4, 5, 6), ARRAY(9, 7, 12, 15, 17))", 0.0); double rounded = Math.round(t * 10000) / 10000.0; assertEquals(Math.round(0.9971 * 10000) / 10000.0, rounded); } @Test - void LARGE_test() { + public void LARGE_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("LARGE(array(1,2,3,4,2,2,1,4),3)", 0.0); + double t = engine.TryEvaluate("LARGE(ARRAY(1,2,3,4,2,2,1,4),3)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; assertEquals(Math.round(3.0 * 1000000) / 1000000.0, rounded); } @Test - void SMALL_test() { + public void SMALL_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SMALL(array(1,2,3,4,2,2,1,4),3)", 0.0); + double t = engine.TryEvaluate("SMALL(ARRAY(1,2,3,4,2,2,1,4),3)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; assertEquals(Math.round(2.0 * 1000000) / 1000000.0, rounded); } @Test - void COVAR_test() { + public void COVAR_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("COVAR(array(3,7,6,11),array(5,15,13,9))", 0.0); - double t1 = engine.TryEvaluate("COVARIANCE.P(array(3,7,6,11),array(5,15,13,9))", 0.0); + double t = engine.TryEvaluate("COVAR(ARRAY(3,7,6,11),ARRAY(5,15,13,9))", 0.0); + double t1 = engine.TryEvaluate("COVARIANCE.P(ARRAY(3,7,6,11),ARRAY(5,15,13,9))", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; double rounded1 = Math.round(t1 * 1000000) / 1000000.0; assertEquals(Math.round(3.375 * 1000000) / 1000000.0, rounded); @@ -233,89 +233,89 @@ void COVAR_test() { } @Test - void COVARIANCES_test() { + public void COVARIANCES_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("COVARIANCE.S(array(3,7,6,11),array(5,15,13,9))", 0.0); + double t = engine.TryEvaluate("COVARIANCE.S(ARRAY(3,7,6,11),ARRAY(5,15,13,9))", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; assertEquals(Math.round(4.5 * 1000000) / 1000000.0, rounded); } // 条件统计 @Test - void COUNTIF_test() { + public void COUNTIF_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'>1')", 0.0); + double t = engine.TryEvaluate("COUNTIF(ARRAY(1,2,3,4,2,2,1,4),'>1')", 0.0); assertEquals(t, 6.0); - t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'>=1')", 0.0); + t = engine.TryEvaluate("COUNTIF(ARRAY(1,2,3,4,2,2,1,4),'>=1')", 0.0); assertEquals(t, 8.0); - t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'!=1')", 0.0); + t = engine.TryEvaluate("COUNTIF(ARRAY(1,2,3,4,2,2,1,4),'!=1')", 0.0); assertEquals(t, 6.0); - t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'=1')", 0.0); + t = engine.TryEvaluate("COUNTIF(ARRAY(1,2,3,4,2,2,1,4),'=1')", 0.0); assertEquals(t, 2.0); - t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'<=1')", 0.0); + t = engine.TryEvaluate("COUNTIF(ARRAY(1,2,3,4,2,2,1,4),'<=1')", 0.0); assertEquals(t, 2.0); - t = engine.TryEvaluate("COUNTIF(array(1,2,3,4,2,2,1,4),'<2')", 0.0); + t = engine.TryEvaluate("COUNTIF(ARRAY(1,2,3,4,2,2,1,4),'<2')", 0.0); assertEquals(t, 2.0); } @Test - void SUMIF_test() { + public void SUMIF_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SUMIF(array(1,2,3,4,2,2,1,4),'>1')", 0.0); + double t = engine.TryEvaluate("SUMIF(ARRAY(1,2,3,4,2,2,1,4),'>1')", 0.0); assertEquals(t, 17); - t = engine.TryEvaluate("SUMIF(array(1,2,3,4,2,2,1,4),'>1',array(1,1,1,1,1,1,1,1))", 0.0); + t = engine.TryEvaluate("SUMIF(ARRAY(1,2,3,4,2,2,1,4),'>1',ARRAY(1,1,1,1,1,1,1,1))", 0.0); assertEquals(t, 6); - t = engine.TryEvaluate("SUMIF(array(1,2,3,4,2,2,1,4),'>=2',array(1,1,1,1,1,1,1,1))", 0.0); + t = engine.TryEvaluate("SUMIF(ARRAY(1,2,3,4,2,2,1,4),'>=2',ARRAY(1,1,1,1,1,1,1,1))", 0.0); assertEquals(t, 6); - t = engine.TryEvaluate("SUMIF(array(1,2,3,4,2,2,1,4),'<1',array(1,1,1,1,1,1,1,1))", 0.0); + t = engine.TryEvaluate("SUMIF(ARRAY(1,2,3,4,2,2,1,4),'<1',ARRAY(1,1,1,1,1,1,1,1))", 0.0); assertEquals(t, 0); - t = engine.TryEvaluate("SUMIF(array(1,2,3,4,2,2,1,4),'==1',array(1,1,1,1,1,1,1,1))", 0.0); + t = engine.TryEvaluate("SUMIF(ARRAY(1,2,3,4,2,2,1,4),'==1',ARRAY(1,1,1,1,1,1,1,1))", 0.0); assertEquals(t, 2); } @Test - void AVERAGEIF_test() { + public void AVERAGEIF_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("AVERAGEIF(array(1,2,3,4,2,2,1,4),'>1')", 0.0); + double t = engine.TryEvaluate("AVERAGEIF(ARRAY(1,2,3,4,2,2,1,4),'>1')", 0.0); assertEquals(t, 2.833333333, 6); - t = engine.TryEvaluate("AVERAGEIF(array(1,2,3,4,2,2,1,4),'>1',array(1,1,1,1,1,1,1,1))", 0.0); + t = engine.TryEvaluate("AVERAGEIF(ARRAY(1,2,3,4,2,2,1,4),'>1',ARRAY(1,1,1,1,1,1,1,1))", 0.0); assertEquals(t, 1); } // 数组运算 @Test - void SERIESSUM_test() { + public void SERIESSUM_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SERIESSUM(2, 0, 1, array(1, 1, 1, 1))", 0.0); + double t = engine.TryEvaluate("SERIESSUM(2, 0, 1, ARRAY(1, 1, 1, 1))", 0.0); assertEquals(t, 15.0); } @Test - void SUMPRODUCT_test() { + public void SUMPRODUCT_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SUMPRODUCT(array(1, 2, 3), array(4, 5, 6))", 0.0); + double t = engine.TryEvaluate("SUMPRODUCT(ARRAY(1, 2, 3), ARRAY(4, 5, 6))", 0.0); assertEquals(t, 32.0); } @Test - void SUMX2MY2_test() { + public void SUMX2MY2_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SUMX2MY2(array(1, 2, 3), array(4, 5, 6))", 0.0); + double t = engine.TryEvaluate("SUMX2MY2(ARRAY(1, 2, 3), ARRAY(4, 5, 6))", 0.0); assertEquals(t, -63.0); } @Test - void SUMX2PY2_test() { + public void SUMX2PY2_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SUMX2PY2(array(1, 2, 3), array(4, 5, 6))", 0.0); + double t = engine.TryEvaluate("SUMX2PY2(ARRAY(1, 2, 3), ARRAY(4, 5, 6))", 0.0); assertEquals(t, 91.0); } @Test - void SUMXMY2_test() { + public void SUMXMY2_test() { AlgorithmEngine engine = new AlgorithmEngine(); - double t = engine.TryEvaluate("SUMXMY2(array(1, 2, 3), array(4, 5, 6))", 0.0); + double t = engine.TryEvaluate("SUMXMY2(ARRAY(1, 2, 3), ARRAY(4, 5, 6))", 0.0); assertEquals(t, 27.0); } } From 9e9724ec7925ab7db94eb8bbc5f8c30fb3ddcc04 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Thu, 19 Mar 2026 15:17:14 +0800 Subject: [PATCH 88/98] fix --- .../toolgood/algorithm/AlgorithmEngine.java | 21 ++- .../algorithm/AlgorithmEngineHelper.java | 133 ++++-------------- .../internals/visitors/AntlrErrorData.java | 22 +++ .../visitors/AntlrErrorListener.java | 36 +++++ .../visitors/AntlrErrorTextWriter.java | 30 ---- 5 files changed, 98 insertions(+), 144 deletions(-) create mode 100644 java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorData.java create mode 100644 java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorListener.java delete mode 100644 java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorTextWriter.java diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java index 65f933a78..69d17be85 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java @@ -6,13 +6,16 @@ import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.Token; import toolgood.algorithm.enums.AreaUnitType; import toolgood.algorithm.enums.DistanceUnitType; import toolgood.algorithm.enums.MassUnitType; import toolgood.algorithm.enums.VolumeUnitType; import toolgood.algorithm.internals.functions.FunctionBase; -import toolgood.algorithm.internals.visitors.AntlrErrorTextWriter; +import toolgood.algorithm.internals.visitors.AntlrCharStream; +import toolgood.algorithm.internals.visitors.AntlrErrorData; +import toolgood.algorithm.internals.visitors.AntlrErrorListener; import toolgood.algorithm.internals.visitors.MathFunctionVisitor; import toolgood.algorithm.math.mathLexer; import toolgood.algorithm.math.mathParser; @@ -63,7 +66,6 @@ public FunctionBase Parse(String exp) throws Exception { try { return ParseInternal(e); } catch (Exception e1) { - // TODO Auto-generated catch block e1.printStackTrace(); } return null; @@ -73,15 +75,22 @@ public FunctionBase Parse(String exp) throws Exception { } private FunctionBase ParseInternal(String exp) throws Exception { - AntlrErrorTextWriter antlrErrorTextWriter = new AntlrErrorTextWriter(); - org.antlr.v4.runtime.CharStream stream = CharStreams.fromString(exp); + AntlrCharStream stream = new AntlrCharStream(CharStreams.fromString(exp)); mathLexer lexer = new mathLexer(stream); CommonTokenStream tokens = new CommonTokenStream(lexer); mathParser parser = new mathParser(tokens); + AntlrErrorData data = new AntlrErrorData(); + AntlrErrorListener listener = new AntlrErrorListener<>(data); + AntlrErrorListener listener2 = new AntlrErrorListener<>(data); + lexer.removeErrorListeners(); + lexer.addErrorListener(listener); + parser.removeErrorListeners(); + parser.addErrorListener(listener2); + mathParser.ProgContext context = parser.prog(); - if (antlrErrorTextWriter.IsError()) { - LastError = antlrErrorTextWriter.ErrorMsg(); + if (data.isError()) { + LastError = data.getErrorMsg(); throw new Exception(LastError); } MathFunctionVisitor visitor = new MathFunctionVisitor(); diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java index 6602f886d..4678790e6 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java @@ -1,12 +1,10 @@ -/** - * 算法引擎助手 - */ package toolgood.algorithm; import java.util.regex.Pattern; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.Token; import java.math.BigDecimal; import toolgood.algorithm.enums.CalculateTreeType; @@ -17,7 +15,8 @@ import toolgood.algorithm.internals.DiyNameKeyInfo; import toolgood.algorithm.internals.functions.FunctionBase; import toolgood.algorithm.internals.visitors.AntlrCharStream; -import toolgood.algorithm.internals.visitors.AntlrErrorTextWriter; +import toolgood.algorithm.internals.visitors.AntlrErrorData; +import toolgood.algorithm.internals.visitors.AntlrErrorListener; import toolgood.algorithm.internals.visitors.DiyNameVisitor; import toolgood.algorithm.internals.visitors.MathFunctionVisitor; import toolgood.algorithm.internals.visitors.MathSplitVisitor; @@ -33,20 +32,23 @@ public class AlgorithmEngineHelper { private static final Pattern unitRegex = Pattern.compile("[\\s\\(\\)()\\[\\]<>]"); static ParserContext CreateParserContext(String exp) { - AntlrErrorTextWriter errorWriter = new AntlrErrorTextWriter(); + AntlrErrorData data = new AntlrErrorData(); AntlrCharStream stream = new AntlrCharStream(CharStreams.fromString(exp)); mathLexer lexer = new mathLexer(stream); CommonTokenStream tokens = new CommonTokenStream(lexer); mathParser parser = new mathParser(tokens); + + AntlrErrorListener listener = new AntlrErrorListener<>(data); + AntlrErrorListener listener2 = new AntlrErrorListener<>(data); + lexer.removeErrorListeners(); + lexer.addErrorListener(listener); + parser.removeErrorListeners(); + parser.addErrorListener(listener2); + mathParser.ProgContext context = parser.prog(); - return new ParserContext(errorWriter, context); + return new ParserContext(data, context); } - /// - /// 是不是参数 - /// - /// - /// public static boolean IsParameter(String parameter) { if (parameter == null || parameter.trim().isEmpty()) { return false; @@ -65,34 +67,19 @@ public static boolean IsParameter(String parameter) { return false; } - /// - /// 获取 DIY 名称 - /// - /// - /// - /// public static DiyNameInfo GetDiyNames(String exp) throws Exception { if (exp == null || exp.trim().isEmpty()) { throw new Exception("Parameter exp invalid !"); } ParserContext context = CreateParserContext(exp); - if (context.errorWriter.IsError()) { - throw new Exception(context.errorWriter.ErrorMsg()); + if (context.data.isError()) { + throw new Exception(context.data.getErrorMsg()); } DiyNameVisitor visitor = new DiyNameVisitor(); visitor.visit(context.context); return visitor.diy; } - /// - /// 单位转换 - /// - /// - /// - /// - /// - /// - /// public static double UnitConversion(double src, String oldSrcUnit, String oldTarUnit, String name) throws Exception { if (oldSrcUnit == null || oldSrcUnit.trim().isEmpty() || oldTarUnit == null || oldTarUnit.trim().isEmpty()) { return src; @@ -137,41 +124,26 @@ private static Double TryConvert(double src, String srcUnit, String tarUnit) { return null; } - /// - /// 编译公式 - /// - /// 公式 - /// public static FunctionBase ParseFormula(String exp) throws Exception { if (exp == null || exp.trim().isEmpty()) { throw new Exception("Parameter exp invalid !"); } ParserContext context = CreateParserContext(exp); - if (context.errorWriter.IsError()) { - throw new Exception(context.errorWriter.ErrorMsg()); + if (context.data.isError()) { + throw new Exception(context.data.getErrorMsg()); } MathFunctionVisitor visitor = new MathFunctionVisitor(); return visitor.visitProg(context.context); } - /// - /// 检查公式是否正确 - /// - /// - /// public static boolean CheckFormula(String exp) { if (exp == null || exp.trim().isEmpty()) { return false; } ParserContext context = CreateParserContext(exp); - return !context.errorWriter.IsError(); + return !context.data.isError(); } - /// - /// 解析条件 - /// - /// - /// public static ConditionTree ParseCondition(String condition) { ConditionTree tree = new ConditionTree(); if (condition == null || condition.trim().isEmpty()) { @@ -181,9 +153,9 @@ public static ConditionTree ParseCondition(String condition) { } try { ParserContext context = CreateParserContext(condition); - if (context.errorWriter.IsError()) { + if (context.data.isError()) { tree.Type = ConditionTreeType.Error; - tree.ErrorMessage = context.errorWriter.ErrorMsg(); + tree.ErrorMessage = context.data.getErrorMsg(); return tree; } MathSplitVisitor visitor = new MathSplitVisitor(); @@ -195,31 +167,14 @@ public static ConditionTree ParseCondition(String condition) { return tree; } - /// - /// Creates a logical AND function that combines two specified functions. - /// - /// The left operand of the AND operation, representing the first function to be combined. - /// The right operand of the AND operation, representing the second function to be combined. - /// A new instance that represents the logical AND of the specified functions. public static FunctionBase Condition_And(FunctionBase left, FunctionBase right) { return new toolgood.algorithm.internals.functions.operator.Function_AND(left, right); } - /// - /// Creates a logical OR function that combines two specified functions. - /// - /// The left operand of the OR operation, representing the first function to be combined. - /// The right operand of the OR operation, representing the second function to be combined. - /// A new instance that represents the logical OR of the specified functions. public static FunctionBase Condition_Or(FunctionBase left, FunctionBase right) { return new toolgood.algorithm.internals.functions.operator.Function_OR(left, right); } - /// - /// 解析计算表达式 - /// - /// - /// public static CalculateTree ParseCalculate(String exp) { CalculateTree tree = new CalculateTree(); if (exp == null || exp.trim().isEmpty()) { @@ -229,9 +184,9 @@ public static CalculateTree ParseCalculate(String exp) { } try { ParserContext context = CreateParserContext(exp); - if (context.errorWriter.IsError()) { + if (context.data.isError()) { tree.Type = CalculateTreeType.Error; - tree.ErrorMessage = context.errorWriter.ErrorMsg(); + tree.ErrorMessage = context.data.getErrorMsg(); return tree; } MathSplitVisitor2 visitor = new MathSplitVisitor2(); @@ -243,74 +198,36 @@ public static CalculateTree ParseCalculate(String exp) { return tree; } - /// - /// Creates a function that represents the sum of two specified functions. - /// - /// The first function to be added. - /// The second function to be added. - /// A function that computes the sum of the values returned by the specified functions. public static FunctionBase Calculate_Add(FunctionBase left, FunctionBase right) { return new toolgood.algorithm.internals.functions.operator.Function_Add(left, right); } - /// - /// Creates a function that represents the subtraction of two functions. - /// - /// The function to use as the minuend in the subtraction operation. Cannot be null. - /// The function to use as the subtrahend in the subtraction operation. Cannot be null. - /// A function that, when evaluated, returns the result of subtracting the value of the right function from the value - /// of the left function. public static FunctionBase Calculate_Subtract(FunctionBase left, FunctionBase right) { return new toolgood.algorithm.internals.functions.operator.Function_Sub(left, right); } - /// - /// Creates a function that represents the multiplication of two functions. - /// - /// The left operand function to be multiplied. - /// The right operand function to be multiplied. - /// A function representing the product of the specified left and right functions. public static FunctionBase Calculate_Multiply(FunctionBase left, FunctionBase right) { return new toolgood.algorithm.internals.functions.operator.Function_Mul(left, right); } - /// - /// Creates a function that represents the division of two functions. - /// - /// The numerator function to be divided. - /// The denominator function by which to divide. - /// A function representing the result of dividing the left function by the right function. public static FunctionBase Calculate_Divide(FunctionBase left, FunctionBase right) { return new toolgood.algorithm.internals.functions.operator.Function_Div(left, right); } - /// - /// Creates a function that computes the remainder after dividing the result of the left function by the result of the - /// right function. - /// - /// The function representing the dividend in the modulo operation. Cannot be null. - /// The function representing the divisor in the modulo operation. Cannot be null. - /// A function that, when evaluated, returns the result of the left function modulo the right function. public static FunctionBase Calculate_Mod(FunctionBase left, FunctionBase right) { return new toolgood.algorithm.internals.functions.operator.Function_Mod(left, right); } - /// - /// Creates a new function that represents the connection of two functions. - /// - /// The first function to be connected. Cannot be null. - /// The second function to be connected. Cannot be null. - /// A FunctionBase instance representing the connection of the specified left and right functions. public static FunctionBase Calculate_Connect(FunctionBase left, FunctionBase right) { return new toolgood.algorithm.internals.functions.operator.Function_Connect(left, right); } static class ParserContext { - public AntlrErrorTextWriter errorWriter; + public AntlrErrorData data; public mathParser.ProgContext context; - public ParserContext(AntlrErrorTextWriter errorWriter, mathParser.ProgContext context) { - this.errorWriter = errorWriter; + public ParserContext(AntlrErrorData data, mathParser.ProgContext context) { + this.data = data; this.context = context; } } diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorData.java b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorData.java new file mode 100644 index 000000000..41b06444a --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorData.java @@ -0,0 +1,22 @@ +package toolgood.algorithm.internals.visitors; + +public class AntlrErrorData { + private boolean IsError; + private String ErrorMsg; + + public boolean isError() { + return IsError; + } + + public void setError(boolean error) { + IsError = error; + } + + public String getErrorMsg() { + return ErrorMsg; + } + + public void setErrorMsg(String errorMsg) { + ErrorMsg = errorMsg; + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorListener.java b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorListener.java new file mode 100644 index 000000000..62363a4e4 --- /dev/null +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorListener.java @@ -0,0 +1,36 @@ +package toolgood.algorithm.internals.visitors; + +import org.antlr.v4.runtime.ANTLRErrorListener; +import org.antlr.v4.runtime.Parser; +import org.antlr.v4.runtime.RecognitionException; +import org.antlr.v4.runtime.Recognizer; +import org.antlr.v4.runtime.atn.ATNConfigSet; +import org.antlr.v4.runtime.dfa.DFA; + +import java.util.BitSet; + +public class AntlrErrorListener implements ANTLRErrorListener { + private final AntlrErrorData Data; + + public AntlrErrorListener(AntlrErrorData data) { + Data = data; + } + + @Override + public void syntaxError(Recognizer recognizer, Symbol offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { + Data.setError(true); + Data.setErrorMsg(msg); + } + + @Override + public void reportAmbiguity(Parser recognizer, DFA dfa, int startIndex, int stopIndex, boolean exact, BitSet ambigAlts, ATNConfigSet configs) { + } + + @Override + public void reportAttemptingFullContext(Parser recognizer, DFA dfa, int startIndex, int stopIndex, BitSet conflictingAlts, ATNConfigSet configs) { + } + + @Override + public void reportContextSensitivity(Parser recognizer, DFA dfa, int startIndex, int stopIndex, int prediction, ATNConfigSet configs) { + } +} diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorTextWriter.java b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorTextWriter.java deleted file mode 100644 index dc90fd37d..000000000 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorTextWriter.java +++ /dev/null @@ -1,30 +0,0 @@ -package toolgood.algorithm.internals.visitors; - -public class AntlrErrorTextWriter { - private boolean IsError; - private String errorMsg; - - public AntlrErrorTextWriter() { - } - - public boolean IsError() { - return IsError; - } - - public void setError(boolean error) { - IsError = error; - } - - public String ErrorMsg() { - return errorMsg; - } - - public void setErrorMsg(String errorMsg) { - this.errorMsg = errorMsg; - } - - public void writeLine(String value) { - IsError = true; - errorMsg = value; - } -} From d3386e8f9b385eea1cd1330c4d4946750c35eef6 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Thu, 19 Mar 2026 15:28:07 +0800 Subject: [PATCH 89/98] fix --- java/src/main/java/toolgood/algorithm/AlgorithmEngine.java | 6 ++---- .../main/java/toolgood/algorithm/AlgorithmEngineHelper.java | 6 ++---- .../algorithm/internals/visitors/AntlrErrorListener.java | 4 ++-- 3 files changed, 6 insertions(+), 10 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java index 69d17be85..7e749cd80 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngine.java @@ -6,7 +6,6 @@ import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; -import org.antlr.v4.runtime.Token; import toolgood.algorithm.enums.AreaUnitType; import toolgood.algorithm.enums.DistanceUnitType; @@ -81,12 +80,11 @@ private FunctionBase ParseInternal(String exp) throws Exception { mathParser parser = new mathParser(tokens); AntlrErrorData data = new AntlrErrorData(); - AntlrErrorListener listener = new AntlrErrorListener<>(data); - AntlrErrorListener listener2 = new AntlrErrorListener<>(data); + AntlrErrorListener listener = new AntlrErrorListener(data); lexer.removeErrorListeners(); lexer.addErrorListener(listener); parser.removeErrorListeners(); - parser.addErrorListener(listener2); + parser.addErrorListener(listener); mathParser.ProgContext context = parser.prog(); if (data.isError()) { diff --git a/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java b/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java index 4678790e6..a81b4467f 100644 --- a/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java +++ b/java/src/main/java/toolgood/algorithm/AlgorithmEngineHelper.java @@ -4,7 +4,6 @@ import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CommonTokenStream; -import org.antlr.v4.runtime.Token; import java.math.BigDecimal; import toolgood.algorithm.enums.CalculateTreeType; @@ -38,12 +37,11 @@ static ParserContext CreateParserContext(String exp) { CommonTokenStream tokens = new CommonTokenStream(lexer); mathParser parser = new mathParser(tokens); - AntlrErrorListener listener = new AntlrErrorListener<>(data); - AntlrErrorListener listener2 = new AntlrErrorListener<>(data); + AntlrErrorListener listener = new AntlrErrorListener(data); lexer.removeErrorListeners(); lexer.addErrorListener(listener); parser.removeErrorListeners(); - parser.addErrorListener(listener2); + parser.addErrorListener(listener); mathParser.ProgContext context = parser.prog(); return new ParserContext(data, context); diff --git a/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorListener.java b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorListener.java index 62363a4e4..9b1581c03 100644 --- a/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorListener.java +++ b/java/src/main/java/toolgood/algorithm/internals/visitors/AntlrErrorListener.java @@ -9,7 +9,7 @@ import java.util.BitSet; -public class AntlrErrorListener implements ANTLRErrorListener { +public class AntlrErrorListener implements ANTLRErrorListener { private final AntlrErrorData Data; public AntlrErrorListener(AntlrErrorData data) { @@ -17,7 +17,7 @@ public AntlrErrorListener(AntlrErrorData data) { } @Override - public void syntaxError(Recognizer recognizer, Symbol offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { + public void syntaxError(Recognizer recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) { Data.setError(true); Data.setErrorMsg(msg); } From c0c39d69e78b93efe62ea9bccf9f594aa59bfcd1 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Thu, 19 Mar 2026 15:37:16 +0800 Subject: [PATCH 90/98] fix --- .../internals/functions/csharp/Function_INDEXOF.java | 3 ++- .../internals/functions/csharpweb/Function_URLDECODE.java | 4 ++-- .../internals/functions/csharpweb/Function_URLENCODE.java | 4 ++-- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java index 221aa14d7..bc4782657 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharp/Function_INDEXOF.java @@ -52,7 +52,8 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction Date: Thu, 19 Mar 2026 15:46:46 +0800 Subject: [PATCH 91/98] fix --- .../csharpweb/Function_URLDECODE.java | 2 +- .../csharpweb/Function_URLENCODE.java | 2 +- .../toolgood/algorithm/DemoApplication.java | 29 ---- .../toolgood/algorithm/Tests/CompareTest.java | 8 +- .../algorithm/Tests/DateTimesTest.java | 2 +- .../Tests/MathTransformationTest.java | 2 +- .../Tests/MathTrigonometricTest.java | 2 +- .../algorithm/Tests/OperatorTest.java | 2 +- .../toolgood/algorithm/Tests/StringTest.java | 2 +- .../Tests3/AlgorithmEngineHelperTest.java | 93 ------------ .../algorithm/Tests4/ConditionTreeTest.java | 140 ------------------ 11 files changed, 11 insertions(+), 273 deletions(-) delete mode 100644 java/src/test/java/toolgood/algorithm/DemoApplication.java delete mode 100644 java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java delete mode 100644 java/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java index 769cd441a..0165c056e 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLDECODE.java @@ -30,7 +30,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction2?1:2", 0); - if (t!=2){ - System.out.println(t); - } - } -} diff --git a/java/src/test/java/toolgood/algorithm/Tests/CompareTest.java b/java/src/test/java/toolgood/algorithm/Tests/CompareTest.java index 1861d7250..59a96bf89 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/CompareTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/CompareTest.java @@ -5,10 +5,10 @@ import static org.junit.Assert.assertEquals; -class CompareTest { +public class CompareTest { @Test - void base_test() { + public void base_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean b = engine.TryEvaluate("1=1", false); assertEquals(b, true); @@ -45,7 +45,7 @@ void base_test() { } @Test - void strict_equality_test() { + public void strict_equality_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean b = engine.TryEvaluate("1===1", false); assertEquals(b, true); @@ -73,7 +73,7 @@ void strict_equality_test() { } @Test - void null_compare_test() { + public void null_compare_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean bb2 = engine.TryEvaluate("1>null", false); diff --git a/java/src/test/java/toolgood/algorithm/Tests/DateTimesTest.java b/java/src/test/java/toolgood/algorithm/Tests/DateTimesTest.java index ae8b05b11..d2cdd422f 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/DateTimesTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/DateTimesTest.java @@ -10,7 +10,7 @@ import static org.junit.Assert.assertEquals; -class DateTimesTest { +public class DateTimesTest { @Test void DATEVALUE_Test() { diff --git a/java/src/test/java/toolgood/algorithm/Tests/MathTransformationTest.java b/java/src/test/java/toolgood/algorithm/Tests/MathTransformationTest.java index 6f3c65d68..907368054 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/MathTransformationTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/MathTransformationTest.java @@ -5,7 +5,7 @@ import static org.junit.Assert.assertEquals; -class MathTransformationTest { +public class MathTransformationTest { @Test void BIN2DEC_test() { diff --git a/java/src/test/java/toolgood/algorithm/Tests/MathTrigonometricTest.java b/java/src/test/java/toolgood/algorithm/Tests/MathTrigonometricTest.java index ba01c11fb..6ec503201 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/MathTrigonometricTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/MathTrigonometricTest.java @@ -5,7 +5,7 @@ import static org.junit.Assert.assertEquals; -class MathTrigonometricTest { +public class MathTrigonometricTest { @Test void degrees_test() { diff --git a/java/src/test/java/toolgood/algorithm/Tests/OperatorTest.java b/java/src/test/java/toolgood/algorithm/Tests/OperatorTest.java index f84c86191..90f74ec59 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/OperatorTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/OperatorTest.java @@ -5,7 +5,7 @@ import static org.junit.Assert.assertEquals; -class OperatorTest { +public class OperatorTest { @Test void arithmetic_test() { diff --git a/java/src/test/java/toolgood/algorithm/Tests/StringTest.java b/java/src/test/java/toolgood/algorithm/Tests/StringTest.java index b10b093dd..dd6b24d49 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/StringTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/StringTest.java @@ -5,7 +5,7 @@ import static org.junit.Assert.assertEquals; -class StringTest { +public class StringTest { @Test void ASC_test() { diff --git a/java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java b/java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java deleted file mode 100644 index 9f43843b3..000000000 --- a/java/src/test/java/toolgood/algorithm/Tests3/AlgorithmEngineHelperTest.java +++ /dev/null @@ -1,93 +0,0 @@ -package toolgood.algorithm.Tests3; - -import static org.junit.Assert.assertEquals; - -import org.junit.Test; - -import toolgood.algorithm.AlgorithmEngineHelper; -import toolgood.algorithm.DiyNameInfo; - -import java.math.BigDecimal; - -public class AlgorithmEngineHelperTest { - - @Test - public void Test() throws Exception { - DiyNameInfo p = AlgorithmEngineHelper.GetDiyNames("[dd]"); - assertEquals("dd", p.Parameters.get(0)); - p = AlgorithmEngineHelper.GetDiyNames("@dd"); - assertEquals("dd", p.Parameters.get(0)); - p = AlgorithmEngineHelper.GetDiyNames("#dd#"); - assertEquals("dd", p.Parameters.get(0)); - p = AlgorithmEngineHelper.GetDiyNames("dd"); - assertEquals("dd", p.Parameters.get(0)); - - // 注,这里�?ddd 是数组内�?ddd - DiyNameInfo p2 = AlgorithmEngineHelper.GetDiyNames("{ddd}"); - assertEquals("ddd", p2.Parameters.get(0)); - - DiyNameInfo p3 = AlgorithmEngineHelper.GetDiyNames("【dd�?); - assertEquals("dd", p3.Parameters.get(0)); - p3 = AlgorithmEngineHelper.GetDiyNames("【dd.1�?); - assertEquals("dd.1", p3.Parameters.get(0)); - - DiyNameInfo p4 = AlgorithmEngineHelper.GetDiyNames("@ddd+2"); - assertEquals("ddd", p4.Parameters.get(0)); - - p4 = AlgorithmEngineHelper.GetDiyNames("ddd+2"); - assertEquals("ddd", p4.Parameters.get(0)); - - DiyNameInfo p5 = AlgorithmEngineHelper.GetDiyNames("ddd(d1,22)"); - assertEquals("ddd", p5.Functions.get(0)); - assertEquals("d1", p5.Parameters.get(0)); - - DiyNameInfo p6 = AlgorithmEngineHelper.GetDiyNames("�?); - assertEquals("�?, p6.Parameters.get(0)); - - DiyNameInfo p7 = AlgorithmEngineHelper.GetDiyNames("#ddd#+2"); - assertEquals("ddd", p7.Parameters.get(0)); - - } - - @Test - public void Test2() { - boolean b = AlgorithmEngineHelper.IsKeywords("true"); - assertEquals(true, b); - - } - - @Test - public void Test3() throws Exception { - BigDecimal b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1),"�?,"千米","测试" ); - assertEquals(new BigDecimal(0.001).setScale(12,4),b.setScale(12,4)); - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "�?, "分米", "测试"); - assertEquals(new BigDecimal(10).setScale(12,4), b.setScale(12,4)); - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "�?, "厘米", "测试"); - assertEquals(new BigDecimal(100).setScale(12,4), b.setScale(12,4)); - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "�?, "mm", "测试"); - assertEquals(new BigDecimal(1000).setScale(12,4), b.setScale(12,4)); - - - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "m2", "dm2", "测试"); - assertEquals(new BigDecimal(100).setScale(12,4), b.setScale(12,4)); - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "m2", "cm2", "测试"); - assertEquals(new BigDecimal(10000).setScale(12,4), b.setScale(12,4)); - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "m2", "mm2", "测试"); - assertEquals(new BigDecimal(1000000).setScale(12,4), b.setScale(12,4)); - - - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "m3", "dm3", "测试"); - assertEquals(new BigDecimal(1000).setScale(12,4), b.setScale(12,4)); - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "m3", "cm3", "测试"); - assertEquals(new BigDecimal(1000000).setScale(12,4), b.setScale(12,4)); - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "m3", "mm3", "测试"); - assertEquals(new BigDecimal(1000000000).setScale(12,4), b.setScale(12,4)); - - - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "t", "kg", "测试"); - assertEquals(new BigDecimal(1000).setScale(12,4), b.setScale(12,4)); - b = AlgorithmEngineHelper.UnitConversion(new BigDecimal(1), "t", "g", "测试"); - assertEquals(new BigDecimal(1000000).setScale(12,4), b.setScale(12,4)); - - } -} diff --git a/java/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java b/java/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java deleted file mode 100644 index f52ceac2c..000000000 --- a/java/src/test/java/toolgood/algorithm/Tests4/ConditionTreeTest.java +++ /dev/null @@ -1,140 +0,0 @@ -package toolgood.algorithm.Tests4; - -import org.junit.Test; -import toolgood.algorithm.internals.ConditionTree; -import toolgood.algorithm.enums.ConditionTreeType; - -import static org.junit.Assert.assertEquals; - -public class ConditionTreeTest { - - @Test - public void Test1() { - String txt = "AA.IsText() = bb"; - ConditionTree t1 = ConditionTree.Parse(txt); - - assertEquals(t1.Type, ConditionTreeType.String); - assertEquals("AA.IsText() = bb", txt.substring(t1.Start, t1.End + 1)); - assertEquals("AA.IsText()=bb",t1.ConditionString); - - txt = "[bbb]=bb"; - t1 = ConditionTree.Parse(txt); - assertEquals(t1.Type, ConditionTreeType.String); - assertEquals("[bbb]=bb", txt.substring(t1.Start, t1.End + 1)); - } - - @Test - public void Test2() { - String txt = "AA.IsText()=bb && dd=ss"; - ConditionTree tree = ConditionTree.Parse(txt); - - assertEquals(tree.Type, ConditionTreeType.And); - ConditionTree t1 = tree.Nodes.get(0); - ConditionTree t2 = tree.Nodes.get(1); - assertEquals("AA.IsText()=bb", txt.substring(t1.Start, t1.End + 1)); - assertEquals("dd=ss", txt.substring(t2.Start, t2.End + 1)); - } - - @Test - - public void Test3() { - String txt = "AA.IsText()=bb || dd=ss"; - ConditionTree tree = ConditionTree.Parse(txt); - - assertEquals(tree.Type, ConditionTreeType.Or); - ConditionTree t1 = tree.Nodes.get(0); - ConditionTree t2 = tree.Nodes.get(1); - assertEquals("AA.IsText()=bb", txt.substring(t1.Start, t1.End + 1)); - assertEquals("dd=ss", txt.substring(t2.Start, t2.End + 1)); - } - - - @Test - - public void Test4() { - String txt = "AA.IsText()=bb || (dd=ss && tt=22)"; - ConditionTree tree = ConditionTree.Parse(txt); - - assertEquals(tree.Type, ConditionTreeType.Or); - ConditionTree t1 = tree.Nodes.get(0); - ConditionTree t2 = tree.Nodes.get(1); - ConditionTree t3 = t2.Nodes.get(0); - ConditionTree t4 = t2.Nodes.get(1); - assertEquals("AA.IsText()=bb", txt.substring(t1.Start, t1.End + 1)); - assertEquals("dd=ss", txt.substring(t3.Start, t3.End + 1)); - assertEquals("tt=22", txt.substring(t4.Start, t4.End + 1)); - } - - @Test - - public void Test5() { - String txt = "AA.IsText()=bb || AND(dd=ss , tt=22)"; - ConditionTree tree = ConditionTree.Parse(txt); - - assertEquals(tree.Type, ConditionTreeType.Or); - ConditionTree t1 = tree.Nodes.get(0); - ConditionTree t2 = tree.Nodes.get(1); - assertEquals("AA.IsText()=bb", txt.substring(t1.Start, t1.End + 1)); - assertEquals("AND(dd=ss , tt=22)", txt.substring(t2.Start, t2.End + 1)); - } - - @Test - - public void Test6() { - String txt = "AA.IsText()==bb && (dd=ss || tt=22)"; - ConditionTree tree = ConditionTree.Parse(txt); - - assertEquals(tree.Type, ConditionTreeType.And); - ConditionTree t1 = tree.Nodes.get(0); - ConditionTree t2 = tree.Nodes.get(1); - assertEquals(t2.Type, ConditionTreeType.Or); - ConditionTree t3 = t2.Nodes.get(0); - ConditionTree t4 = t2.Nodes.get(1); - - assertEquals("AA.IsText()==bb", txt.substring(t1.Start, t1.End + 1)); - assertEquals("dd=ss", txt.substring(t3.Start, t3.End + 1)); - assertEquals("tt=22", txt.substring(t4.Start, t4.End + 1)); - } - - @Test - public void Test7() { - String txt = "AA.IsText()==bb ? 1:2"; - ConditionTree t1 = ConditionTree.Parse(txt); - assertEquals(t1.Type, ConditionTreeType.String); - assertEquals("AA.IsText()==bb ? 1:2", txt.substring(t1.Start, t1.End + 1)); - } - - @Test - public void Test8() { - String txt = "AA.IsText()==bb && (dd=ss || {tt}=22)"; - ConditionTree tree = ConditionTree.Parse(txt); - - assertEquals(tree.Type, ConditionTreeType.And); - ConditionTree t1 = tree.Nodes.get(0); - ConditionTree t2 = tree.Nodes.get(1); - assertEquals(t2.Type, ConditionTreeType.Or); - ConditionTree t3 = t2.Nodes.get(0); - ConditionTree t4 = t2.Nodes.get(1); - - assertEquals("AA.IsText()==bb", txt.substring(t1.Start, t1.End + 1)); - assertEquals("dd=ss", txt.substring(t3.Start, t3.End + 1)); - assertEquals("{tt}=22", txt.substring(t4.Start, t4.End + 1)); - } - - @Test - public void Test9() { - String txt = "AA.IsText()==bb && (dd=ss || [tt]==22)"; - ConditionTree tree = ConditionTree.Parse(txt); - - assertEquals(tree.Type, ConditionTreeType.And); - ConditionTree t1 = tree.Nodes.get(0); - ConditionTree t2 = tree.Nodes.get(1); - assertEquals(t2.Type, ConditionTreeType.Or); - ConditionTree t3 = t2.Nodes.get(0); - ConditionTree t4 = t2.Nodes.get(1); - - assertEquals("AA.IsText()==bb", txt.substring(t1.Start, t1.End + 1)); - assertEquals("dd=ss", txt.substring(t3.Start, t3.End + 1)); - assertEquals("[tt]==22", txt.substring(t4.Start, t4.End + 1)); - } -} From 9d275dc225e7be0ec7ff53db715caa1142adea83 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Thu, 19 Mar 2026 15:59:53 +0800 Subject: [PATCH 92/98] fix --- .../csharpweb/Function_URLENCODE.java | 2 +- .../toolgood/algorithm/Tests/CompareTest.java | 2 +- .../algorithm/Tests/DateTimesTest.java | 99 +++++++++---------- 3 files changed, 51 insertions(+), 52 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java index 3db636062..dc6ba6b62 100644 --- a/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java +++ b/java/src/main/java/toolgood/algorithm/internals/functions/csharpweb/Function_URLENCODE.java @@ -30,7 +30,7 @@ public Operand Evaluate(AlgorithmEngine engine, BiFunction (-2)", false); assertEquals(value, true); diff --git a/java/src/test/java/toolgood/algorithm/Tests/DateTimesTest.java b/java/src/test/java/toolgood/algorithm/Tests/DateTimesTest.java index d2cdd422f..1f4457fc0 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/DateTimesTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/DateTimesTest.java @@ -6,18 +6,17 @@ import java.time.LocalDate; import java.time.LocalDateTime; import java.time.LocalTime; -import java.time.temporal.ChronoUnit; import static org.junit.Assert.assertEquals; public class DateTimesTest { @Test - void DATEVALUE_Test() { + public void DATEVALUE_Test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("DATEVALUE('2016-01-01')", ""); assertEquals(dt, LocalDate.of(2016, 1, 1)); - + dt = engine.TryEvaluate("DATEVALUE('2016/01/01')", ""); assertEquals(dt, LocalDate.of(2016, 1, 1)); @@ -42,7 +41,7 @@ void DATEVALUE_Test() { } @Test - void TIMESTAMP_Test() { + public void TIMESTAMP_Test() { AlgorithmEngine engine = new AlgorithmEngine(); engine.UseLocalTime = true; @@ -60,28 +59,28 @@ void TIMESTAMP_Test() { } @Test - void TIMEVALUE_test() { + public void TIMEVALUE_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("TIMEVALUE('12:12:12')", ""); assertEquals(dt, LocalTime.of(12, 12, 12)); } @Test - void DATE_test() { + public void DATE_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("DATE(2016,1,1)", ""); assertEquals(dt, LocalDate.of(2016, 1, 1)); } @Test - void time_test() { + public void time_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("time(11,12,13)", ""); assertEquals(dt, LocalTime.of(11, 12, 13)); } @Test - void Now_test() { + public void Now_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("now()", ""); LocalDateTime now = LocalDateTime.now(); @@ -94,7 +93,7 @@ void Now_test() { } @Test - void Today_test() { + public void Today_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("Today()", ""); LocalDate today = LocalDate.now(); @@ -102,7 +101,7 @@ void Today_test() { } @Test - void Year_test() { + public void Year_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("year(now())", 0); int year = LocalDateTime.now().getYear(); @@ -110,7 +109,7 @@ void Year_test() { } @Test - void Month_test() { + public void Month_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("Month(now())", 0); int month = LocalDateTime.now().getMonthValue(); @@ -118,7 +117,7 @@ void Month_test() { } @Test - void Day_test() { + public void Day_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("Day(now())", 0); int day = LocalDateTime.now().getDayOfMonth(); @@ -126,7 +125,7 @@ void Day_test() { } @Test - void Hour_test() { + public void Hour_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("Hour(now())", 0); int hour = LocalDateTime.now().getHour(); @@ -134,7 +133,7 @@ void Hour_test() { } @Test - void Minute_test() { + public void Minute_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("Minute(now())", 0); int minute = LocalDateTime.now().getMinute(); @@ -142,7 +141,7 @@ void Minute_test() { } @Test - void Second_test() { + public void Second_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("Second(now())", 0); int second = LocalDateTime.now().getSecond(); @@ -150,7 +149,7 @@ void Second_test() { } @Test - void WEEKDAY_test() { + public void WEEKDAY_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("WEEKDAY(date(2017,1,7))", 0); assertEquals(dt, 7); @@ -177,7 +176,7 @@ void WEEKDAY_test() { } @Test - void DATEDIF_Test() { + public void DATEDIF_Test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("DATEDIF('1975-1-30','2017-1-7','y')", 0); assertEquals(dt, 41); @@ -199,7 +198,7 @@ void DATEDIF_Test() { } @Test - void DAYS_test() { + public void DAYS_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("DAYS('2017-1-7','1975-1-30')", 0); assertEquals(dt, 15318); @@ -212,42 +211,42 @@ void DAYS_test() { } @Test - void DAYS360_test() { + public void DAYS360_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("DAYS360('1975-1-30','2017-1-7')", 0); assertEquals(dt, 15097); } @Test - void EDATE_test() { + public void EDATE_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("EDATE('2012-1-31',32)", ""); assertEquals(dt, LocalDate.of(2014, 9, 30)); } @Test - void EOMONTH_test() { + public void EOMONTH_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("EOMONTH('2012-2-1',32)", ""); assertEquals(dt, LocalDate.of(2014, 10, 31)); } @Test - void NETWORKDAYS_test() { + public void NETWORKDAYS_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("NETWORKDAYS('2012-1-1','2013-1-1')", 0); assertEquals(dt, 262); } @Test - void WORKDAY_test() { + public void WORKDAY_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("WORKDAY('2012-1-2',145)", ""); assertEquals(dt, LocalDate.of(2012, 7, 23)); } @Test - void WEEKNUM_test() { + public void WEEKNUM_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("WEEKNUM('2016-1-3')", 0); assertEquals(dt, 2); @@ -263,7 +262,7 @@ void WEEKNUM_test() { } @Test - void YEARFRAC_test() { + public void YEARFRAC_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object t = engine.TryEvaluate("YEARFRAC('2012-1-1', '2012-7-1')", 0.0); assertEquals(Math.round((Double) t * 1000) / 1000.0, Math.round(0.5 * 1000) / 1000.0); @@ -288,7 +287,7 @@ void YEARFRAC_test() { } @Test - void AddYears_test() { + public void AddYears_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2000-02-01'.addYears(1).year()", 0); assertEquals(dt, 2001); @@ -298,35 +297,35 @@ void AddYears_test() { } @Test - void AddMonths_test() { + public void AddMonths_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2000-02-01'.AddMonths(1).Month()", 0); assertEquals(dt, 3); } @Test - void AddDays_test() { + public void AddDays_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2000-02-01'.AddDays(1).Day()", 0); assertEquals(dt, 2); } @Test - void AddHours_test() { + public void AddHours_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2000-02-01 12:05:06'.AddHours(1).Hour()", 0); assertEquals(dt, 13); } @Test - void AddMinutes_test() { + public void AddMinutes_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2000-02-01 12:05:06'.AddMinutes(1).Minute()", 0); assertEquals(dt, 6); } @Test - void AddSeconds_test() { + public void AddSeconds_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2000-02-01 12:05:06'.AddSeconds(1).Second()", 0); assertEquals(dt, 7); @@ -355,105 +354,105 @@ void AddSeconds_test() { // 方法式调用测试 @Test - void MethodStyle_DATEVALUE_test() { + public void MethodStyle_DATEVALUE_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2016-01-01'.DATEVALUE()", ""); assertEquals(dt, LocalDate.of(2016, 1, 1)); } @Test - void MethodStyle_TIMEVALUE_test() { + public void MethodStyle_TIMEVALUE_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'12:12:12'.TIMEVALUE()", ""); assertEquals(dt, LocalTime.of(12, 12, 12)); } @Test - void MethodStyle_YEAR_test() { + public void MethodStyle_YEAR_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2016-05-15'.YEAR()", 0); assertEquals(dt, 2016); } @Test - void MethodStyle_MONTH_test() { + public void MethodStyle_MONTH_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2016-05-15'.MONTH()", 0); assertEquals(dt, 5); } @Test - void MethodStyle_DAY_test() { + public void MethodStyle_DAY_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2016-05-15'.DAY()", 0); assertEquals(dt, 15); } @Test - void MethodStyle_HOUR_test() { + public void MethodStyle_HOUR_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'12:30:45'.HOUR()", 0); assertEquals(dt, 12); } @Test - void MethodStyle_MINUTE_test() { + public void MethodStyle_MINUTE_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'12:30:45'.MINUTE()", 0); assertEquals(dt, 30); } @Test - void MethodStyle_SECOND_test() { + public void MethodStyle_SECOND_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'12:30:45'.SECOND()", 0); assertEquals(dt, 45); } @Test - void MethodStyle_ADDYEARS_test() { + public void MethodStyle_ADDYEARS_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2000-01-01'.ADDYEARS(1).YEAR()", 0); assertEquals(dt, 2001); } @Test - void MethodStyle_ADDMONTHS_test() { + public void MethodStyle_ADDMONTHS_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2000-01-15'.ADDMONTHS(2).MONTH()", 0); assertEquals(dt, 3); } @Test - void MethodStyle_ADDDAYS_test() { + public void MethodStyle_ADDDAYS_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2000-01-01'.ADDDAYS(10).DAY()", 0); assertEquals(dt, 11); } @Test - void MethodStyle_ADDHOURS_test() { + public void MethodStyle_ADDHOURS_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2000-01-01 10:00:00'.ADDHOURS(5).HOUR()", 0); assertEquals(dt, 15); } @Test - void MethodStyle_ADDMINUTES_test() { + public void MethodStyle_ADDMINUTES_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2000-01-01 10:30:00'.ADDMINUTES(45).MINUTE()", 0); assertEquals(dt, 15); } @Test - void MethodStyle_ADDSECONDS_test() { + public void MethodStyle_ADDSECONDS_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2000-01-01 10:00:30'.ADDSECONDS(45).SECOND()", 0); assertEquals(dt, 15); } @Test - void MethodStyle_TIMESTAMP_test() { + public void MethodStyle_TIMESTAMP_test() { AlgorithmEngine engine = new AlgorithmEngine(); engine.UseLocalTime = true; Object dt = engine.TryEvaluate("'2016-01-01'.TIMESTAMP()", 0L); @@ -465,7 +464,7 @@ void MethodStyle_TIMESTAMP_test() { // 边界值测试 @Test - void LeapYear_Test() { + public void LeapYear_Test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("DATE(2020,2,29)", ""); assertEquals(dt, LocalDate.of(2020, 2, 29)); @@ -485,7 +484,7 @@ void LeapYear_Test() { } @Test - void LeapYear_AddDays_Test() { + public void LeapYear_AddDays_Test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("'2020-02-28'.ADDDAYS(1).DAY()", 0); assertEquals(dt, 29); @@ -495,7 +494,7 @@ void LeapYear_AddDays_Test() { } @Test - void MonthBoundary_Test() { + public void MonthBoundary_Test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("DATE(2020,1,31).ADDMONTHS(1).MONTH()", 0); assertEquals(dt, 2); @@ -505,7 +504,7 @@ void MonthBoundary_Test() { } @Test - void YearBoundary_Test() { + public void YearBoundary_Test() { AlgorithmEngine engine = new AlgorithmEngine(); Object dt = engine.TryEvaluate("DATE(2020,12,31).ADDDAYS(1).YEAR()", 0); assertEquals(dt, 2021); From 25e9223338975036f49788c84976e90edf8d822e Mon Sep 17 00:00:00 2001 From: linzhijun Date: Thu, 19 Mar 2026 16:08:14 +0800 Subject: [PATCH 93/98] fix --- .../Tests/MathTransformationTest.java | 28 +++++------ .../Tests/MathTrigonometricTest.java | 46 +++++++++---------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/java/src/test/java/toolgood/algorithm/Tests/MathTransformationTest.java b/java/src/test/java/toolgood/algorithm/Tests/MathTransformationTest.java index 907368054..dae4df619 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/MathTransformationTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/MathTransformationTest.java @@ -8,28 +8,28 @@ public class MathTransformationTest { @Test - void BIN2DEC_test() { + public void BIN2DEC_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object num = engine.TryEvaluate("BIN2DEC(10101)", 0); assertEquals(num, 21); } @Test - void OCT2DEC_test() { + public void OCT2DEC_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object num = engine.TryEvaluate("OCT2DEC(12456)", 0); assertEquals(num, 5422); } @Test - void HEX2DEC_test() { + public void HEX2DEC_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object num = engine.TryEvaluate("HEX2DEC('213adf')", 0); assertEquals(num, 2177759); } @Test - void DEC2BIN_test() { + public void DEC2BIN_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object t = engine.TryEvaluate("DEC2BIN(10)", ""); assertEquals(t, "1010"); @@ -38,63 +38,63 @@ void DEC2BIN_test() { } @Test - void OCT2BIN_test() { + public void OCT2BIN_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object t = engine.TryEvaluate("OCT2BIN('721')", ""); assertEquals(t, "111010001"); } @Test - void HEX2BIN_test() { + public void HEX2BIN_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object t = engine.TryEvaluate("HEX2BIN('fa')", ""); assertEquals(t, "11111010"); } @Test - void BIN2OCT_test() { + public void BIN2OCT_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object t = engine.TryEvaluate("BIN2OCT(10)", ""); assertEquals(t, "2"); } @Test - void DEC2OCT_test() { + public void DEC2OCT_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object t = engine.TryEvaluate("DEC2OCT('75')", ""); assertEquals(t, "113"); } @Test - void HEX2OCT_test() { + public void HEX2OCT_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object t = engine.TryEvaluate("HEX2OCT('f5')", ""); assertEquals(t, "365"); } @Test - void BIN2HEX_test() { + public void BIN2HEX_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object t = engine.TryEvaluate("BIN2HEX(101010100)", ""); assertEquals(t, "154"); } @Test - void OCT2HEX_test() { + public void OCT2HEX_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object t = engine.TryEvaluate("OCT2HEX(75212)", ""); assertEquals(t, "7A8A"); } @Test - void DEC2HEX_test() { + public void DEC2HEX_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object t = engine.TryEvaluate("DEC2HEX(952)", ""); assertEquals(t, "3B8"); } @Test - void ARABIC_test() { + public void ARABIC_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object t = engine.TryEvaluate("ARABIC('I')", 0); assertEquals(t, 1); @@ -137,7 +137,7 @@ void ARABIC_test() { } @Test - void ROMAN_test() { + public void ROMAN_test() { AlgorithmEngine engine = new AlgorithmEngine(); Object t = engine.TryEvaluate("ROMAN(1)", ""); assertEquals(t, "I"); diff --git a/java/src/test/java/toolgood/algorithm/Tests/MathTrigonometricTest.java b/java/src/test/java/toolgood/algorithm/Tests/MathTrigonometricTest.java index 6ec503201..f930b4b8e 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/MathTrigonometricTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/MathTrigonometricTest.java @@ -8,21 +8,21 @@ public class MathTrigonometricTest { @Test - void degrees_test() { + public void degrees_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("degrees(pi())", 0.0); assertEquals(180.0, t, 0.0001); } @Test - void RADIANS_test() { + public void RADIANS_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("RADIANS(180)", 0.0); assertEquals(Math.PI, t, 0.0001); } @Test - void cos_test() { + public void cos_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("cos(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -30,7 +30,7 @@ void cos_test() { } @Test - void cosh_test() { + public void cosh_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("cosh(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -38,7 +38,7 @@ void cosh_test() { } @Test - void sin_test() { + public void sin_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("sin(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -46,7 +46,7 @@ void sin_test() { } @Test - void sinh_test() { + public void sinh_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("sinh(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -54,7 +54,7 @@ void sinh_test() { } @Test - void tan_test() { + public void tan_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("tan(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -62,7 +62,7 @@ void tan_test() { } @Test - void tanh_test() { + public void tanh_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("tanh(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -70,7 +70,7 @@ void tanh_test() { } @Test - void acos_test() { + public void acos_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("acos(0.5)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -78,7 +78,7 @@ void acos_test() { } @Test - void acosh_test() { + public void acosh_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("acosh(1.5)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -86,7 +86,7 @@ void acosh_test() { } @Test - void asin_test() { + public void asin_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("asin(0.5)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -94,7 +94,7 @@ void asin_test() { } @Test - void asinh_test() { + public void asinh_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("asinh(1.5)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -102,7 +102,7 @@ void asinh_test() { } @Test - void atan_test() { + public void atan_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("atan(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -110,7 +110,7 @@ void atan_test() { } @Test - void atanh_test() { + public void atanh_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("atanh(0.5)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -118,7 +118,7 @@ void atanh_test() { } @Test - void atan2_test() { + public void atan2_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("atan2(1,2)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -126,7 +126,7 @@ void atan2_test() { } @Test - void cot_test() { + public void cot_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("cot(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -134,7 +134,7 @@ void cot_test() { } @Test - void coth_test() { + public void coth_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("coth(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -142,7 +142,7 @@ void coth_test() { } @Test - void csc_test() { + public void csc_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("csc(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -150,7 +150,7 @@ void csc_test() { } @Test - void csch_test() { + public void csch_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("csch(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -158,7 +158,7 @@ void csch_test() { } @Test - void sec_test() { + public void sec_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("sec(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -166,7 +166,7 @@ void sec_test() { } @Test - void sech_test() { + public void sech_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("sech(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -174,7 +174,7 @@ void sech_test() { } @Test - void acot_test() { + public void acot_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("acot(1)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; @@ -182,7 +182,7 @@ void acot_test() { } @Test - void acoth_test() { + public void acoth_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("acoth(2)", 0.0); double rounded = Math.round(t * 1000000) / 1000000.0; From 7b2bd3c562265066be37f7ce9fdae1dfd496b24f Mon Sep 17 00:00:00 2001 From: linzhijun Date: Thu, 19 Mar 2026 16:12:58 +0800 Subject: [PATCH 94/98] fix --- .../src/test/java/toolgood/algorithm/Tests/CompareTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/src/test/java/toolgood/algorithm/Tests/CompareTest.java b/java/src/test/java/toolgood/algorithm/Tests/CompareTest.java index e5a92a62c..28bd9ddfd 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/CompareTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/CompareTest.java @@ -8,7 +8,7 @@ public class CompareTest { @Test - public void base_test() { + public void base_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean b = engine.TryEvaluate("1=1", false); assertEquals(b, true); @@ -73,7 +73,7 @@ public void strict_equality_test() { } @Test - public void null_compare_test() { + public void null_compare_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean bb2 = engine.TryEvaluate("1>null", false); @@ -108,7 +108,7 @@ public void null_compare_test() { } @Test - public void negative_compare_test() { + public void negative_compare_test() { AlgorithmEngine engine = new AlgorithmEngine(); boolean value = engine.TryEvaluate("1 > (-2)", false); assertEquals(value, true); From b6d3bfa23d8dc46be30c2eb39b5af4d259ab48d4 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Thu, 19 Mar 2026 16:23:06 +0800 Subject: [PATCH 95/98] fix --- .../algorithm/Tests/OperatorTest.java | 10 +- .../toolgood/algorithm/Tests/StringTest.java | 96 +++++++++---------- 2 files changed, 52 insertions(+), 54 deletions(-) diff --git a/java/src/test/java/toolgood/algorithm/Tests/OperatorTest.java b/java/src/test/java/toolgood/algorithm/Tests/OperatorTest.java index 90f74ec59..851ea8368 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/OperatorTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/OperatorTest.java @@ -8,7 +8,7 @@ public class OperatorTest { @Test - void arithmetic_test() { + public void arithmetic_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("1+(3*2+2)/2", 0.0); assertEquals(5, t, 0.0001); @@ -40,7 +40,7 @@ void arithmetic_test() { } @Test - void connect_test() { + public void connect_test() { AlgorithmEngine engine = new AlgorithmEngine(); String s = engine.TryEvaluate("'aa'&'bb'", ""); assertEquals("aabb", s); @@ -50,7 +50,7 @@ void connect_test() { } @Test - void conditional_test() { + public void conditional_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t1 = engine.TryEvaluate("-7 < -2 ? 1 : 2", 0.0); assertEquals(1, t1, 0.0001); @@ -65,7 +65,7 @@ void conditional_test() { } @Test - void percentage_test() { + public void percentage_test() { AlgorithmEngine engine = new AlgorithmEngine(); double t = engine.TryEvaluate("100%", 0.0); assertEquals(1.0, t, 0.0001); @@ -84,7 +84,7 @@ void percentage_test() { } @Test - void null_operation_test() { + public void null_operation_test() { AlgorithmEngine engine = new AlgorithmEngine(); double tbb2 = engine.TryEvaluate("'111'*null", 0.0); assertEquals(0, tbb2, 0.0001); diff --git a/java/src/test/java/toolgood/algorithm/Tests/StringTest.java b/java/src/test/java/toolgood/algorithm/Tests/StringTest.java index dd6b24d49..e6615e12d 100644 --- a/java/src/test/java/toolgood/algorithm/Tests/StringTest.java +++ b/java/src/test/java/toolgood/algorithm/Tests/StringTest.java @@ -8,14 +8,14 @@ public class StringTest { @Test - void ASC_test() { + public void ASC_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("asc('abcABC123')", ""); assertEquals(t, "abcABC123"); } @Test - void Jis_test() { + public void Jis_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("jis('abcABC123')", ""); assertEquals(t, "abcABC123"); @@ -24,28 +24,28 @@ void Jis_test() { } @Test - void CHAR_test() { + public void CHAR_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("char(49)", ""); assertEquals(t, "1"); } @Test - void CLEAN_test() { + public void CLEAN_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("clean('\r112\t')", ""); assertEquals(t, "112"); } @Test - void code_test() { + public void code_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("code('1')", ""); assertEquals(t, 49); } @Test - void unichar_test() { + public void unichar_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("unichar(65)", ""); assertEquals(t, "A"); @@ -56,7 +56,7 @@ void unichar_test() { } @Test - void unicode_test() { + public void unicode_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("unicode('A')", ""); assertEquals(t, 65); @@ -67,21 +67,21 @@ void unicode_test() { } @Test - void CONCATENATE_test() { + public void CONCATENATE_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("CONCATENATE('tt','33')", ""); assertEquals(t, "tt33"); } @Test - void CONCATENATE_ALIAS_test() { + public void CONCATENATE_ALIAS_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("CONCAT('tt','33')", ""); assertEquals(t, "tt33"); } @Test - void EXACT_test() { + public void EXACT_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("EXACT('tt','33')", ""); assertEquals(t, false); @@ -99,7 +99,7 @@ void EXACT_test() { } @Test - void FIND_test() { + public void FIND_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("FIND(\"11\",\"12221122\")", ""); assertEquals(t, 5); @@ -115,7 +115,7 @@ void FIND_test() { } @Test - void FIXED_test() { + public void FIXED_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("FIXED(4567.89,1)", ""); assertEquals(t, "4,567.9"); @@ -126,49 +126,49 @@ void FIXED_test() { } @Test - void LEFT_test() { + public void LEFT_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("LEFT('123222',3)", ""); assertEquals(t, "123"); } @Test - void LEN_test() { + public void LEN_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("LEN('123222')", ""); assertEquals(t, 6); } @Test - void LOWER_test() { + public void LOWER_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("LOWER('ABC')", ""); assertEquals(t, "abc"); } @Test - void LOWER_ALIAS_test() { + public void LOWER_ALIAS_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("TOLOWER('ABC')", ""); assertEquals(t, "abc"); } @Test - void MID_test() { + public void MID_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("MID('ABCDEF',2,3)", ""); assertEquals(t, "BCD"); } @Test - void PROPER_test() { + public void PROPER_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("PROPER('abc abc')", ""); assertEquals(t, "Abc Abc"); } @Test - void REPLACE_test() { + public void REPLACE_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("REPLACE(\"abccd\",2,3,\"2\")", ""); assertEquals(t, "a2d"); @@ -178,35 +178,35 @@ void REPLACE_test() { } @Test - void REPT_test() { + public void REPT_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("REPT(\"q\",3)", ""); assertEquals(t, "qqq"); } @Test - void RIGHT_test() { + public void RIGHT_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("RIGHT(\"123q\",3)", ""); assertEquals(t, "23q"); } @Test - void RMB_test() { + public void RMB_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("rmb(12.3)", ""); assertEquals(t, "壹拾贰元叁角"); } @Test - void SEARCH_test() { + public void SEARCH_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("SEARCH(\"aa\",\"abbAaddd\")", ""); assertEquals(t, 4); } @Test - void SUBSTITUTE_test() { + public void SUBSTITUTE_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("SUBSTITUTE(\"ababcc\",\"ab\",\"12\")", ""); assertEquals(t, "1212cc"); @@ -224,7 +224,7 @@ void SUBSTITUTE_test() { } @Test - void T_test() { + public void T_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("T(12)", ""); assertEquals(t, ""); @@ -233,50 +233,49 @@ void T_test() { } @Test - void TEXT_test() { + public void TEXT_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("TEXT(123,\"0.00\")", ""); assertEquals(t, "123.00"); } @Test - void TRIM_test() { + public void TRIM_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("TRIM(\" 123 123 \")", ""); assertEquals(t, "123 123"); } @Test - void UPPER_test() { + public void UPPER_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("UPPER(\"abc\")", ""); assertEquals(t, "ABC"); } @Test - void UPPER_ALIAS_test() { + public void UPPER_ALIAS_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("TOUPPER('abc')", ""); assertEquals(t, "ABC"); } @Test - void VALUE_test() { + public void VALUE_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("VALUE(\"123\")", ""); assertEquals(t, 123); } - // 方法式调用测试 @Test - void MethodStyle_LEN_test() { + public void MethodStyle_LEN_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("'abcdef'.LEN()", ""); assertEquals(t, 6); } @Test - void MethodStyle_LEFT_test() { + public void MethodStyle_LEFT_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("'abcdef'.LEFT(3)", ""); assertEquals(t, "abc"); @@ -286,7 +285,7 @@ void MethodStyle_LEFT_test() { } @Test - void MethodStyle_RIGHT_test() { + public void MethodStyle_RIGHT_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("'abcdef'.RIGHT(3)", ""); assertEquals(t, "def"); @@ -296,35 +295,35 @@ void MethodStyle_RIGHT_test() { } @Test - void MethodStyle_MID_test() { + public void MethodStyle_MID_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("'abcdef'.MID(2,3)", ""); assertEquals(t, "bcd"); } @Test - void MethodStyle_LOWER_test() { + public void MethodStyle_LOWER_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("'ABC'.LOWER()", ""); assertEquals(t, "abc"); } @Test - void MethodStyle_UPPER_test() { + public void MethodStyle_UPPER_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("'abc'.UPPER()", ""); assertEquals(t, "ABC"); } @Test - void MethodStyle_TRIM_test() { + public void MethodStyle_TRIM_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("' abc '.TRIM()", ""); assertEquals(t, "abc"); } @Test - void MethodStyle_REPLACE_test() { + public void MethodStyle_REPLACE_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("'abcdef'.REPLACE(2,3,'x')", ""); assertEquals(t, "axef"); @@ -334,7 +333,7 @@ void MethodStyle_REPLACE_test() { } @Test - void MethodStyle_EXACT_test() { + public void MethodStyle_EXACT_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("'abc'.EXACT('abc')", ""); assertEquals(t, true); @@ -344,7 +343,7 @@ void MethodStyle_EXACT_test() { } @Test - void MethodStyle_T_test() { + public void MethodStyle_T_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("'abc'.T()", ""); assertEquals(t, "abc"); @@ -354,29 +353,28 @@ void MethodStyle_T_test() { } @Test - void MethodStyle_TEXT_test() { + public void MethodStyle_TEXT_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("123.456.TEXT('0.00')", ""); assertEquals(t, "123.46"); } @Test - void MethodStyle_VALUE_test2() { + public void MethodStyle_VALUE_test2() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("'123'.VALUE()", ""); assertEquals(t, 123); } @Test - void MethodStyle_RMB_test() { + public void MethodStyle_RMB_test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("123.45.RMB()", ""); assertEquals(t, "壹佰贰拾叁元肆角伍分"); } - // 边界值测试 @Test - void EmptyString_Test() { + public void EmptyString_Test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("LEN('')", ""); assertEquals(t, 0); @@ -392,7 +390,7 @@ void EmptyString_Test() { } @Test - void UnicodeBoundary_Test() { + public void UnicodeBoundary_Test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("LEN('中文')", ""); assertEquals(t, 2); @@ -405,7 +403,7 @@ void UnicodeBoundary_Test() { } @Test - void SubstringBoundary_Test() { + public void SubstringBoundary_Test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("LEFT('ABC', 100)", ""); assertEquals(t, "ABC"); @@ -421,7 +419,7 @@ void SubstringBoundary_Test() { } @Test - void SubstituteBoundary_Test() { + public void SubstituteBoundary_Test() { AlgorithmEngine engine = new AlgorithmEngine(); String t = engine.TryEvaluate("SUBSTITUTE('aaa', 'a', 'b')", ""); assertEquals(t, "bbb"); From a44b699a258f8f15e21a75f641c38c26498ac84c Mon Sep 17 00:00:00 2001 From: linzhijun Date: Thu, 19 Mar 2026 16:35:39 +0800 Subject: [PATCH 96/98] fix --- java/src/main/java/toolgood/algorithm/system/MathEx.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/system/MathEx.java b/java/src/main/java/toolgood/algorithm/system/MathEx.java index 7c2cb7127..cb3944629 100644 --- a/java/src/main/java/toolgood/algorithm/system/MathEx.java +++ b/java/src/main/java/toolgood/algorithm/system/MathEx.java @@ -153,16 +153,16 @@ public static BigDecimal Cos(BigDecimal x) { BigDecimal xx = xCopy.multiply(xCopy); - BigDecimal yy = xx.multiply(Half.negate()); - BigDecimal y = One.add(yy); + BigDecimal term = xx.multiply(Half.negate()); + BigDecimal y = One.add(term); BigDecimal cachedY = y.subtract(One); for (int i = 1; cachedY.compareTo(y) != 0 && i < MaximumIterations; i++) { cachedY = y; BigDecimal factor = new BigDecimal(i * (i + i + 3) + 1); factor = Half.divide(factor, MathContext.DECIMAL128).negate(); - xx = xx.multiply(xCopy).multiply(xCopy).multiply(factor); - y = y.add(xx); + term = term.multiply(xx).multiply(factor); + y = y.add(term); } return y; From 5294afcab08e5d9fa01028396e182a19ced041df Mon Sep 17 00:00:00 2001 From: linzhijun Date: Fri, 20 Mar 2026 09:05:11 +0800 Subject: [PATCH 97/98] fix --- java/src/main/java/toolgood/algorithm/system/MathEx.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/system/MathEx.java b/java/src/main/java/toolgood/algorithm/system/MathEx.java index cb3944629..56c7ede4b 100644 --- a/java/src/main/java/toolgood/algorithm/system/MathEx.java +++ b/java/src/main/java/toolgood/algorithm/system/MathEx.java @@ -151,9 +151,9 @@ public static BigDecimal Cos(BigDecimal x) { return Cos(xCopy.add(PI)).negate(); } - BigDecimal xx = xCopy.multiply(xCopy); + xCopy = xCopy.multiply(xCopy); - BigDecimal term = xx.multiply(Half.negate()); + BigDecimal term = xCopy.multiply(Half.negate()); BigDecimal y = One.add(term); BigDecimal cachedY = y.subtract(One); for (int i = 1; cachedY.compareTo(y) != 0 && i < MaximumIterations; i++) { @@ -161,7 +161,7 @@ public static BigDecimal Cos(BigDecimal x) { BigDecimal factor = new BigDecimal(i * (i + i + 3) + 1); factor = Half.divide(factor, MathContext.DECIMAL128).negate(); - term = term.multiply(xx).multiply(factor); + term = term.multiply(xCopy).multiply(factor); y = y.add(term); } From 965b1a6a3da8b5bde60d52af6595f33084645537 Mon Sep 17 00:00:00 2001 From: linzhijun Date: Fri, 20 Mar 2026 15:50:55 +0800 Subject: [PATCH 98/98] fix --- java/src/main/java/toolgood/algorithm/system/MathEx.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/java/src/main/java/toolgood/algorithm/system/MathEx.java b/java/src/main/java/toolgood/algorithm/system/MathEx.java index 56c7ede4b..f5c3cafc7 100644 --- a/java/src/main/java/toolgood/algorithm/system/MathEx.java +++ b/java/src/main/java/toolgood/algorithm/system/MathEx.java @@ -2,6 +2,7 @@ import java.math.BigDecimal; import java.math.MathContext; +import java.math.RoundingMode; public class MathEx { public static final BigDecimal E = new BigDecimal("2.7182818284590452353602874713526624977572470936999595749"); @@ -21,6 +22,8 @@ public class MathEx { private static final BigDecimal Log10Inv = new BigDecimal("0.434294481903251827651128918916605082294397005803666566114"); private static final int MaximumIterations = 100; + + private static final MathContext PRECISION_28 = new MathContext(28, RoundingMode.HALF_UP); private static final BigDecimal HalfPi = new BigDecimal("1.570796326794896619231321691639751442098584699687552910487"); @@ -81,8 +84,8 @@ public static BigDecimal Asin(BigDecimal x) { BigDecimal xx = x.multiply(x); do { cachedResult = result; - result = result.multiply(xx).multiply(One.subtract(Half.divide(new BigDecimal(i), MathContext.DECIMAL128))); - y = y.add(result.divide(new BigDecimal(2 * i + 1), MathContext.DECIMAL128)); + result = result.multiply(xx).multiply(One.subtract(Half.divide(new BigDecimal(i), PRECISION_28))); + y = y.add(result.divide(new BigDecimal(2 * i + 1), PRECISION_28)); i++; } while (cachedResult.compareTo(result) != 0); @@ -193,7 +196,7 @@ public static BigDecimal Exp(BigDecimal x) { BigDecimal cachedResult; do { cachedResult = result; - factor = factor.multiply(xCopy.divide(new BigDecimal(iteration++), MathContext.DECIMAL128)); + factor = factor.multiply(xCopy.divide(new BigDecimal(iteration++), PRECISION_28)); result = result.add(factor); } while (cachedResult.compareTo(result) != 0);