From 0787c9b0d7e2560f29c126e606d1ac702212a1bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A0=81=E5=86=9C=E5=B0=8F=E6=98=93?= <237972113@qq.com> Date: Thu, 12 Oct 2023 23:17:12 +0800 Subject: [PATCH] =?UTF-8?q?##=20[1.2.4]=20-=202023-10-12=20-=20=E6=96=B0?= =?UTF-8?q?=E5=A2=9E=20=E6=94=AF=E6=8C=81.must()=20=E5=85=B3=E9=94=AE?= =?UTF-8?q?=E8=AF=8D=20-=20=E6=96=B0=E5=A2=9E=20=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=AE=9E=E9=AA=8C=E6=80=A7=E7=89=88=E6=9C=AC=E7=9A=84=E7=BB=A7?= =?UTF-8?q?=E6=89=BF=E7=89=B9=E6=80=A7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- CHANGELOG.md | 4 + gradle.properties | 4 +- .../system/language/_LiteFlowLexer.java | 746 +++++++++--------- .../system/language/parse/LiteFlowParser.java | 119 ++- .../psi/LiteFlowLiteFlowMustExpress.java | 13 + .../LiteFlowLiteFlowPlaceHolderStatement.java | 13 + .../LiteFlowLiteFlowPlaceholderExpress.java | 19 + .../psi/LiteFlowLiteFlowWhenSubExpress.java | 3 + .../language/psi/LiteFlowStatement.java | 3 + .../system/language/psi/LiteFlowTypes.java | 13 + .../system/language/psi/LiteFlowVisitor.java | 12 + .../impl/LiteFlowLiteFlowMustExpressImpl.java | 36 + ...eFlowLiteFlowPlaceHolderStatementImpl.java | 36 + ...iteFlowLiteFlowPlaceholderExpressImpl.java | 48 ++ .../LiteFlowLiteFlowWhenSubExpressImpl.java | 6 + .../psi/impl/LiteFlowStatementImpl.java | 6 + .../liteflowx/system/language/LiteFlow.bnf | 14 +- .../system/language/_LiteFlowLexer.flex | 193 ++--- .../LiteFlowBaseCompletionContributor.java | 1 + .../highlight/LiteFlowSyntaxHighlighter.java | 1 + 20 files changed, 810 insertions(+), 480 deletions(-) create mode 100644 src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowMustExpress.java create mode 100644 src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowPlaceHolderStatement.java create mode 100644 src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowPlaceholderExpress.java create mode 100644 src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowMustExpressImpl.java create mode 100644 src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowPlaceHolderStatementImpl.java create mode 100644 src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowPlaceholderExpressImpl.java diff --git a/CHANGELOG.md b/CHANGELOG.md index 2248ef4..2d60d03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,10 @@ ## [Unreleased] +## [1.2.4] - 2023-10-12 +- 新增 支持.must() 关键词 +- 新增 支持实验性版本的继承特性 + ## [1.2.3] - 2023-08-30 - 新增对 xml 文件的自动注入 JAVA 语言 diff --git a/gradle.properties b/gradle.properties index b52d92a..e650d97 100644 --- a/gradle.properties +++ b/gradle.properties @@ -4,12 +4,12 @@ pluginGroup = top.xystudio.plugin.idea pluginName = LiteFlowX # SemVer format -> https://semver.org -pluginVersion = 1.2.3 +pluginVersion = 1.2.4 # See https://plugins.jetbrains.com/docs/intellij/build-number-ranges.html # for insight into build numbers and IntelliJ Platform versions. pluginSinceBuild = 203.* -pluginUntilBuild = 232.* +pluginUntilBuild = 233.* # IntelliJ Platform Properties -> https://github.com/JetBrains/gradle-intellij-plugin#intellij-platform-properties platformType = IU diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/_LiteFlowLexer.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/_LiteFlowLexer.java index 54dd982..3cd6ad6 100644 --- a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/_LiteFlowLexer.java +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/_LiteFlowLexer.java @@ -131,22 +131,22 @@ private static int zzUnpackcmap_blocks(String packed, int offset, int [] result) "\1\41\1\0\1\16\1\0\1\16\1\0\1\16\1\42"+ "\1\43\1\44\1\45\1\46\4\25\1\47\3\25\1\50"+ "\2\25\1\51\3\25\1\52\20\25\1\53\1\54\1\25"+ - "\1\55\12\25\1\56\2\25\1\57\1\35\1\60\1\16"+ + "\1\55\13\25\1\56\2\25\1\57\1\35\1\60\1\16"+ "\1\0\2\16\1\61\6\25\1\62\2\25\1\63\1\64"+ "\7\25\1\65\6\25\1\66\3\25\1\67\5\25\1\70"+ - "\1\71\1\25\1\72\3\25\1\73\3\25\1\60\3\25"+ - "\1\74\1\75\2\25\1\76\1\25\1\77\1\25\1\100"+ - "\5\25\1\101\2\25\1\102\1\103\4\25\1\104\2\25"+ - "\1\105\1\106\3\25\1\107\1\25\1\60\1\110\1\111"+ - "\5\25\1\112\1\113\1\25\1\114\1\115\1\116\2\25"+ - "\1\117\2\25\1\120\4\25\1\121\1\60\3\25\1\122"+ - "\1\123\7\25\1\124\1\25\1\125\1\126\12\25\1\127"+ - "\1\25\1\130\2\25\1\131\2\25\1\132\3\25\1\133"+ - "\7\25\1\134\1\25\1\135\1\136\6\25\1\137\2\25"+ - "\1\140"; + "\1\25\1\71\1\25\1\72\3\25\1\73\3\25\1\60"+ + "\3\25\1\74\1\75\2\25\1\76\1\25\1\77\1\25"+ + "\1\100\5\25\1\101\2\25\1\102\1\103\4\25\1\104"+ + "\2\25\1\105\1\106\1\107\3\25\1\110\1\25\1\60"+ + "\1\111\1\112\5\25\1\113\1\114\1\25\1\115\1\116"+ + "\1\117\2\25\1\120\2\25\1\121\4\25\1\122\1\60"+ + "\3\25\1\123\1\124\7\25\1\125\1\25\1\126\1\127"+ + "\12\25\1\130\1\25\1\131\2\25\1\132\2\25\1\133"+ + "\3\25\1\134\7\25\1\135\1\25\1\136\1\137\6\25"+ + "\1\140\2\25\1\141"; private static int [] zzUnpackAction() { - int [] result = new int[307]; + int [] result = new int[310]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -186,33 +186,33 @@ private static int zzUnpackAction(String packed, int offset, int [] result) { "\0\u0666\0\u141c\0\u146a\0\u14b8\0\u1506\0\u1554\0\u15a2\0\u15f0"+ "\0\u163e\0\u168c\0\u16da\0\u1728\0\u1776\0\u17c4\0\u1812\0\u1860"+ "\0\u18ae\0\u0666\0\u0666\0\u18fc\0\u0666\0\u194a\0\u1998\0\u19e6"+ - "\0\u1a34\0\u1a82\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u0666"+ - "\0\u1c56\0\u1ca4\0\116\0\u0138\0\u1cf2\0\u1d40\0\u1d8e\0\u1ddc"+ - "\0\u0fd8\0\u0666\0\u1e2a\0\u1e78\0\u1ec6\0\u1f14\0\u1f62\0\u1fb0"+ - "\0\u0666\0\u1ffe\0\u204c\0\u0666\0\u0666\0\u209a\0\u20e8\0\u2136"+ - "\0\u2184\0\u21d2\0\u2220\0\u226e\0\u0666\0\u22bc\0\u230a\0\u2358"+ - "\0\u23a6\0\u23f4\0\u2442\0\u0666\0\u2490\0\u24de\0\u252c\0\u0666"+ - "\0\u257a\0\u25c8\0\u2616\0\u2664\0\u26b2\0\u0666\0\u0666\0\u2700"+ - "\0\u0666\0\u274e\0\u279c\0\u27ea\0\u0666\0\u2838\0\u2886\0\u28d4"+ - "\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u0666\0\u0666\0\u2a5a\0\u2aa8"+ - "\0\u0666\0\u2af6\0\u0666\0\u2b44\0\u0666\0\u2b92\0\u2be0\0\u2c2e"+ - "\0\u2c7c\0\u2cca\0\u0666\0\u2d18\0\u2d66\0\u0666\0\u0666\0\u2db4"+ - "\0\u2e02\0\u2e50\0\u2e9e\0\u0666\0\u2eec\0\u2f3a\0\u0666\0\u0666"+ - "\0\u2f88\0\u2fd6\0\u3024\0\u0666\0\u3072\0\u30c0\0\u0666\0\u0666"+ - "\0\u310e\0\u315c\0\u31aa\0\u31f8\0\u3246\0\u0666\0\u0666\0\u3294"+ - "\0\u0666\0\u0666\0\u0666\0\u32e2\0\u3330\0\u0666\0\u337e\0\u33cc"+ - "\0\u0666\0\u341a\0\u3468\0\u34b6\0\u3504\0\u0666\0\116\0\u3552"+ - "\0\u35a0\0\u35ee\0\u0666\0\u0666\0\u363c\0\u368a\0\u36d8\0\u3726"+ - "\0\u3774\0\u37c2\0\u3810\0\u0666\0\u385e\0\u0666\0\u0666\0\u38ac"+ - "\0\u38fa\0\u3948\0\u3996\0\u39e4\0\u3a32\0\u3a80\0\u3ace\0\u3b1c"+ - "\0\u3b6a\0\u0666\0\u3bb8\0\u0666\0\u3c06\0\u3c54\0\u0666\0\u3ca2"+ - "\0\u3cf0\0\u0666\0\u3d3e\0\u3d8c\0\u3dda\0\u0666\0\u3e28\0\u3e76"+ - "\0\u3ec4\0\u3f12\0\u3f60\0\u3fae\0\u3ffc\0\u0666\0\u404a\0\u0666"+ - "\0\u0666\0\u4098\0\u40e6\0\u4134\0\u4182\0\u41d0\0\u421e\0\u0666"+ - "\0\u426c\0\u42ba\0\u0666"; + "\0\u1a34\0\u1a82\0\u1ad0\0\u1b1e\0\u1b6c\0\u1bba\0\u1c08\0\u1c56"+ + "\0\u0666\0\u1ca4\0\u1cf2\0\116\0\u0138\0\u1d40\0\u1d8e\0\u1ddc"+ + "\0\u1e2a\0\u0fd8\0\u0666\0\u1e78\0\u1ec6\0\u1f14\0\u1f62\0\u1fb0"+ + "\0\u1ffe\0\u0666\0\u204c\0\u209a\0\u0666\0\u0666\0\u20e8\0\u2136"+ + "\0\u2184\0\u21d2\0\u2220\0\u226e\0\u22bc\0\u0666\0\u230a\0\u2358"+ + "\0\u23a6\0\u23f4\0\u2442\0\u2490\0\u0666\0\u24de\0\u252c\0\u257a"+ + "\0\u0666\0\u25c8\0\u2616\0\u2664\0\u26b2\0\u2700\0\u0666\0\u274e"+ + "\0\u0666\0\u279c\0\u0666\0\u27ea\0\u2838\0\u2886\0\u0666\0\u28d4"+ + "\0\u2922\0\u2970\0\u29be\0\u2a0c\0\u2a5a\0\u2aa8\0\u0666\0\u0666"+ + "\0\u2af6\0\u2b44\0\u0666\0\u2b92\0\u0666\0\u2be0\0\u0666\0\u2c2e"+ + "\0\u2c7c\0\u2cca\0\u2d18\0\u2d66\0\u0666\0\u2db4\0\u2e02\0\u0666"+ + "\0\u0666\0\u2e50\0\u2e9e\0\u2eec\0\u2f3a\0\u0666\0\u2f88\0\u2fd6"+ + "\0\u0666\0\u0666\0\u0666\0\u3024\0\u3072\0\u30c0\0\u0666\0\u310e"+ + "\0\u315c\0\u0666\0\u0666\0\u31aa\0\u31f8\0\u3246\0\u3294\0\u32e2"+ + "\0\u0666\0\u0666\0\u3330\0\u0666\0\u0666\0\u0666\0\u337e\0\u33cc"+ + "\0\u0666\0\u341a\0\u3468\0\u0666\0\u34b6\0\u3504\0\u3552\0\u35a0"+ + "\0\u0666\0\116\0\u35ee\0\u363c\0\u368a\0\u0666\0\u0666\0\u36d8"+ + "\0\u3726\0\u3774\0\u37c2\0\u3810\0\u385e\0\u38ac\0\u0666\0\u38fa"+ + "\0\u0666\0\u0666\0\u3948\0\u3996\0\u39e4\0\u3a32\0\u3a80\0\u3ace"+ + "\0\u3b1c\0\u3b6a\0\u3bb8\0\u3c06\0\u0666\0\u3c54\0\u0666\0\u3ca2"+ + "\0\u3cf0\0\u0666\0\u3d3e\0\u3d8c\0\u0666\0\u3dda\0\u3e28\0\u3e76"+ + "\0\u0666\0\u3ec4\0\u3f12\0\u3f60\0\u3fae\0\u3ffc\0\u404a\0\u4098"+ + "\0\u0666\0\u40e6\0\u0666\0\u0666\0\u4134\0\u4182\0\u41d0\0\u421e"+ + "\0\u426c\0\u42ba\0\u0666\0\u4308\0\u4356\0\u0666"; private static int [] zzUnpackRowMap() { - int [] result = new int[307]; + int [] result = new int[310]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -284,225 +284,228 @@ private static int zzUnpackRowMap(String packed, int offset, int [] result) { "\1\163\1\164\5\37\1\165\11\37\3\0\1\37\21\0"+ "\2\37\6\0\27\37\4\0\10\37\1\166\15\37\3\0"+ "\1\37\21\0\2\37\6\0\27\37\4\0\1\167\14\37"+ - "\1\170\10\37\3\0\1\37\21\0\2\37\6\0\27\37"+ - "\4\0\4\37\1\171\10\37\1\172\4\37\1\173\3\37"+ - "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\1\174"+ - "\25\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\4\37\1\175\21\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\1\176\6\37\1\177\5\37\1\200\1\37"+ - "\1\201\6\37\3\0\1\37\21\0\2\37\6\0\27\37"+ - "\4\0\7\37\1\202\16\37\3\0\1\37\113\0\1\203"+ - "\3\0\4\75\1\204\53\75\1\77\35\75\2\101\1\0"+ - "\112\101\13\0\1\205\103\0\2\106\1\0\112\106\21\0"+ - "\2\206\112\0\1\107\1\0\2\110\12\0\1\111\6\0"+ - "\1\112\23\0\1\111\41\0\1\207\1\0\1\207\2\0"+ - "\2\210\114\0\2\211\6\0\6\211\25\0\6\211\70\0"+ - "\1\112\72\0\2\37\6\0\3\37\1\212\23\37\4\0"+ - "\26\37\3\0\1\37\21\0\2\37\6\0\4\37\1\213"+ + "\1\170\4\37\1\171\3\37\3\0\1\37\21\0\2\37"+ + "\6\0\27\37\4\0\4\37\1\172\10\37\1\173\4\37"+ + "\1\174\3\37\3\0\1\37\21\0\2\37\6\0\27\37"+ + "\4\0\1\175\25\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\4\37\1\176\21\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\1\177\6\37\1\200\5\37"+ + "\1\201\1\37\1\202\6\37\3\0\1\37\21\0\2\37"+ + "\6\0\27\37\4\0\7\37\1\203\16\37\3\0\1\37"+ + "\113\0\1\204\3\0\4\75\1\205\53\75\1\77\35\75"+ + "\2\101\1\0\112\101\13\0\1\206\103\0\2\106\1\0"+ + "\112\106\21\0\2\207\112\0\1\107\1\0\2\110\12\0"+ + "\1\111\6\0\1\112\23\0\1\111\41\0\1\210\1\0"+ + "\1\210\2\0\2\211\114\0\2\212\6\0\6\212\25\0"+ + "\6\212\70\0\1\112\72\0\2\37\6\0\3\37\1\213"+ + "\23\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ + "\4\37\1\214\22\37\4\0\26\37\3\0\1\37\21\0"+ + "\2\37\6\0\21\37\1\215\5\37\4\0\26\37\3\0"+ + "\1\37\21\0\2\37\6\0\5\37\1\216\21\37\4\0"+ + "\26\37\3\0\1\37\21\0\2\37\6\0\10\37\1\217"+ + "\7\37\1\220\6\37\4\0\26\37\3\0\1\37\21\0"+ + "\2\37\6\0\14\37\1\221\12\37\4\0\26\37\3\0"+ + "\1\37\21\0\2\37\6\0\17\37\1\222\7\37\4\0"+ + "\26\37\3\0\1\37\21\0\2\37\6\0\4\37\1\223"+ "\22\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ - "\21\37\1\214\5\37\4\0\26\37\3\0\1\37\21\0"+ - "\2\37\6\0\5\37\1\215\21\37\4\0\26\37\3\0"+ - "\1\37\21\0\2\37\6\0\10\37\1\216\7\37\1\217"+ - "\6\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ - "\14\37\1\220\12\37\4\0\26\37\3\0\1\37\21\0"+ - "\2\37\6\0\17\37\1\221\7\37\4\0\26\37\3\0"+ - "\1\37\21\0\2\37\6\0\4\37\1\222\22\37\4\0"+ - "\26\37\3\0\1\37\21\0\2\37\6\0\3\37\1\223"+ - "\15\37\1\224\5\37\4\0\26\37\3\0\1\37\21\0"+ - "\2\37\6\0\4\37\1\225\22\37\4\0\26\37\3\0"+ - "\1\37\21\0\2\37\6\0\10\37\1\226\16\37\4\0"+ - "\26\37\3\0\1\37\21\0\2\37\6\0\4\37\1\227"+ - "\22\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\12\37\1\230\13\37\3\0\1\37\21\0"+ - "\2\37\6\0\4\37\1\231\3\37\1\232\16\37\4\0"+ - "\26\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\10\37\1\233\15\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\15\37\1\234\7\37\1\235\3\0\1\37"+ - "\21\0\2\37\6\0\27\37\4\0\17\37\1\236\6\37"+ - "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\4\37"+ - "\1\237\21\37\3\0\1\37\21\0\2\37\6\0\27\37"+ - "\4\0\20\37\1\240\5\37\3\0\1\37\21\0\2\37"+ - "\6\0\27\37\4\0\1\241\25\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\14\37\1\242\11\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\21\37\1\243"+ - "\4\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\5\37\1\244\20\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\20\37\1\245\5\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\16\37\1\246\7\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\12\37\1\247"+ - "\13\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\17\37\1\250\6\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\14\37\1\251\11\37\3\0\1\37\21\0"+ + "\3\37\1\224\15\37\1\225\5\37\4\0\26\37\3\0"+ + "\1\37\21\0\2\37\6\0\4\37\1\226\22\37\4\0"+ + "\26\37\3\0\1\37\21\0\2\37\6\0\10\37\1\227"+ + "\16\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ + "\4\37\1\230\22\37\4\0\26\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\12\37\1\231\13\37\3\0"+ + "\1\37\21\0\2\37\6\0\4\37\1\232\3\37\1\233"+ + "\16\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\10\37\1\234\15\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\15\37\1\235\7\37\1\236"+ + "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\17\37"+ + "\1\237\6\37\3\0\1\37\21\0\2\37\6\0\27\37"+ + "\4\0\4\37\1\240\21\37\3\0\1\37\21\0\2\37"+ + "\6\0\27\37\4\0\20\37\1\241\5\37\3\0\1\37"+ + "\21\0\2\37\6\0\27\37\4\0\1\242\25\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\14\37\1\243"+ + "\11\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\21\37\1\244\4\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\5\37\1\245\20\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\20\37\1\246\5\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\16\37\1\247"+ + "\7\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\12\37\1\250\13\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\17\37\1\251\6\37\3\0\1\37\21\0"+ "\2\37\6\0\27\37\4\0\14\37\1\252\11\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\11\37\1\253"+ - "\14\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\2\37\1\254\21\37\1\255\1\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\3\37\1\256\22\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\23\37\1\257"+ - "\2\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\3\37\1\260\13\37\1\261\6\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\12\37\1\262\13\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\17\37\1\263"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\14\37\1\253"+ + "\11\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\11\37\1\254\14\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\2\37\1\255\21\37\1\256\1\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\3\37\1\257"+ + "\22\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\20\37\1\260\5\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\23\37\1\261\2\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\3\37\1\262\13\37\1\263"+ "\6\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\21\37\1\264\4\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\6\37\1\265\17\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\17\37\1\266\6\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\22\37\1\267"+ - "\3\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\10\37\1\270\15\37\3\0\1\37\1\0\12\205\1\271"+ - "\103\205\20\0\2\206\12\0\1\111\6\0\1\112\23\0"+ - "\1\111\46\0\2\210\114\0\2\210\21\0\1\112\72\0"+ - "\2\37\6\0\1\272\26\37\4\0\26\37\3\0\1\37"+ - "\21\0\2\37\6\0\2\37\1\273\24\37\4\0\26\37"+ - "\3\0\1\37\21\0\2\37\6\0\1\274\26\37\4\0"+ - "\26\37\3\0\1\37\21\0\2\37\6\0\5\37\1\275"+ - "\21\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ - "\4\37\1\276\22\37\4\0\26\37\3\0\1\37\21\0"+ - "\2\37\6\0\1\277\26\37\4\0\26\37\3\0\1\37"+ - "\21\0\2\37\6\0\17\37\1\300\7\37\4\0\26\37"+ - "\3\0\1\37\21\0\2\37\6\0\4\37\1\301\22\37"+ - "\4\0\26\37\3\0\1\37\21\0\2\37\6\0\21\37"+ - "\1\302\5\37\4\0\26\37\3\0\1\37\21\0\2\37"+ - "\6\0\14\37\1\303\12\37\4\0\26\37\3\0\1\37"+ - "\21\0\2\37\6\0\27\37\4\0\1\304\25\37\3\0"+ - "\1\37\21\0\2\37\6\0\14\37\1\305\12\37\4\0"+ - "\26\37\3\0\1\37\21\0\2\37\6\0\12\37\1\306"+ - "\14\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\1\307\25\37\3\0\1\37\21\0\2\37"+ - "\6\0\27\37\4\0\14\37\1\310\11\37\3\0\1\37"+ - "\21\0\2\37\6\0\27\37\4\0\1\311\25\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\1\312\25\37"+ - "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\21\37"+ - "\1\313\4\37\3\0\1\37\21\0\2\37\6\0\27\37"+ - "\4\0\20\37\1\314\5\37\3\0\1\37\21\0\2\37"+ + "\12\37\1\264\13\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\17\37\1\265\6\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\21\37\1\266\4\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\6\37\1\267"+ + "\17\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\17\37\1\270\6\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\22\37\1\271\3\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\10\37\1\272\15\37\3\0"+ + "\1\37\1\0\12\206\1\273\103\206\20\0\2\207\12\0"+ + "\1\111\6\0\1\112\23\0\1\111\46\0\2\211\114\0"+ + "\2\211\21\0\1\112\72\0\2\37\6\0\1\274\26\37"+ + "\4\0\26\37\3\0\1\37\21\0\2\37\6\0\2\37"+ + "\1\275\24\37\4\0\26\37\3\0\1\37\21\0\2\37"+ + "\6\0\1\276\26\37\4\0\26\37\3\0\1\37\21\0"+ + "\2\37\6\0\5\37\1\277\21\37\4\0\26\37\3\0"+ + "\1\37\21\0\2\37\6\0\4\37\1\300\22\37\4\0"+ + "\26\37\3\0\1\37\21\0\2\37\6\0\1\301\26\37"+ + "\4\0\26\37\3\0\1\37\21\0\2\37\6\0\17\37"+ + "\1\302\7\37\4\0\26\37\3\0\1\37\21\0\2\37"+ + "\6\0\4\37\1\303\22\37\4\0\26\37\3\0\1\37"+ + "\21\0\2\37\6\0\21\37\1\304\5\37\4\0\26\37"+ + "\3\0\1\37\21\0\2\37\6\0\14\37\1\305\12\37"+ + "\4\0\26\37\3\0\1\37\21\0\2\37\6\0\27\37"+ + "\4\0\1\306\25\37\3\0\1\37\21\0\2\37\6\0"+ + "\14\37\1\307\12\37\4\0\26\37\3\0\1\37\21\0"+ + "\2\37\6\0\12\37\1\310\14\37\4\0\26\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\1\311\25\37"+ + "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\14\37"+ + "\1\312\11\37\3\0\1\37\21\0\2\37\6\0\27\37"+ + "\4\0\1\313\25\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\1\314\25\37\3\0\1\37\21\0\2\37"+ "\6\0\27\37\4\0\21\37\1\315\4\37\3\0\1\37"+ - "\21\0\2\37\6\0\27\37\4\0\1\316\25\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\4\37\1\317"+ - "\21\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\15\37\1\320\10\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\20\37\1\321\5\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\2\37\1\322\23\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\15\37\1\323"+ - "\10\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\4\37\1\324\21\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\17\37\1\325\6\37\3\0\1\37\21\0"+ - "\2\37\6\0\24\37\1\326\2\37\4\0\26\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\4\37\1\327"+ - "\21\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\12\37\1\330\13\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\1\331\25\37\3\0\1\37\21\0\2\37"+ - "\6\0\27\37\4\0\22\37\1\332\3\37\3\0\1\37"+ - "\21\0\2\37\6\0\27\37\4\0\4\37\1\333\21\37"+ - "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\4\37"+ - "\1\334\21\37\3\0\1\37\21\0\2\37\6\0\27\37"+ - "\4\0\12\37\1\335\13\37\3\0\1\37\1\0\12\205"+ - "\1\336\103\205\20\0\2\37\6\0\11\37\1\337\15\37"+ - "\4\0\26\37\3\0\1\37\21\0\2\37\6\0\7\37"+ - "\1\340\17\37\4\0\26\37\3\0\1\37\21\0\2\37"+ - "\6\0\22\37\1\341\4\37\4\0\26\37\3\0\1\37"+ - "\21\0\2\37\6\0\12\37\1\342\14\37\4\0\26\37"+ - "\3\0\1\37\21\0\2\37\6\0\1\343\26\37\4\0"+ - "\26\37\3\0\1\37\21\0\2\37\6\0\2\37\1\344"+ - "\24\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\20\37\1\345\5\37\3\0\1\37\21\0"+ - "\2\37\6\0\4\37\1\346\22\37\4\0\26\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\20\37\1\347"+ + "\21\0\2\37\6\0\27\37\4\0\20\37\1\316\5\37"+ + "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\21\37"+ + "\1\317\4\37\3\0\1\37\21\0\2\37\6\0\27\37"+ + "\4\0\1\320\25\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\4\37\1\321\21\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\15\37\1\322\10\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\20\37\1\323"+ "\5\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\25\37\1\350\3\0\1\37\21\0\2\37\6\0\27\37"+ - "\4\0\25\37\1\351\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\11\37\1\352\14\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\20\37\1\353\5\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\10\37\1\354"+ - "\15\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\17\37\1\355\6\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\4\37\1\356\21\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\21\37\1\357\4\37\3\0"+ + "\2\37\1\324\23\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\15\37\1\325\10\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\4\37\1\326\21\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\17\37\1\327"+ + "\6\37\3\0\1\37\21\0\2\37\6\0\24\37\1\330"+ + "\2\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\21\37\1\331\4\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\4\37\1\332\21\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\12\37\1\333"+ + "\13\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\1\334\25\37\3\0\1\37\21\0\2\37\6\0\27\37"+ + "\4\0\22\37\1\335\3\37\3\0\1\37\21\0\2\37"+ + "\6\0\27\37\4\0\4\37\1\336\21\37\3\0\1\37"+ + "\21\0\2\37\6\0\27\37\4\0\4\37\1\337\21\37"+ + "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\12\37"+ + "\1\340\13\37\3\0\1\37\1\0\12\206\1\341\103\206"+ + "\20\0\2\37\6\0\11\37\1\342\15\37\4\0\26\37"+ + "\3\0\1\37\21\0\2\37\6\0\7\37\1\343\17\37"+ + "\4\0\26\37\3\0\1\37\21\0\2\37\6\0\22\37"+ + "\1\344\4\37\4\0\26\37\3\0\1\37\21\0\2\37"+ + "\6\0\12\37\1\345\14\37\4\0\26\37\3\0\1\37"+ + "\21\0\2\37\6\0\1\346\26\37\4\0\26\37\3\0"+ + "\1\37\21\0\2\37\6\0\2\37\1\347\24\37\4\0"+ + "\26\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\20\37\1\350\5\37\3\0\1\37\21\0\2\37\6\0"+ + "\4\37\1\351\22\37\4\0\26\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\20\37\1\352\5\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\25\37\1\353"+ + "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\25\37"+ + "\1\354\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\11\37\1\355\14\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\20\37\1\356\5\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\10\37\1\357\15\37\3\0"+ "\1\37\21\0\2\37\6\0\27\37\4\0\17\37\1\360"+ "\6\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\15\37\1\361\10\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\1\362\25\37\3\0\1\37\21\0\2\37"+ - "\6\0\27\37\4\0\12\37\1\363\13\37\3\0\1\37"+ - "\21\0\2\37\6\0\27\37\4\0\17\37\1\364\6\37"+ - "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\1\365"+ - "\25\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\4\37\1\366\21\37\3\0\1\37\1\0\12\205\1\336"+ - "\4\205\1\367\76\205\20\0\2\37\6\0\12\37\1\370"+ + "\4\37\1\361\21\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\21\37\1\362\4\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\17\37\1\363\6\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\15\37\1\364"+ + "\10\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\1\365\25\37\3\0\1\37\21\0\2\37\6\0\27\37"+ + "\4\0\12\37\1\366\13\37\3\0\1\37\21\0\2\37"+ + "\6\0\27\37\4\0\17\37\1\367\6\37\3\0\1\37"+ + "\21\0\2\37\6\0\27\37\4\0\1\370\25\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\4\37\1\371"+ + "\21\37\3\0\1\37\1\0\12\206\1\341\4\206\1\372"+ + "\76\206\20\0\2\37\6\0\12\37\1\373\14\37\4\0"+ + "\26\37\3\0\1\37\21\0\2\37\6\0\12\37\1\374"+ "\14\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ - "\12\37\1\371\14\37\4\0\26\37\3\0\1\37\21\0"+ - "\2\37\6\0\21\37\1\372\5\37\4\0\26\37\3\0"+ - "\1\37\21\0\2\37\6\0\7\37\1\373\17\37\4\0"+ - "\26\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\20\37\1\374\5\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\13\37\1\375\12\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\14\37\1\376\11\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\21\37\1\377"+ - "\4\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\10\37\1\u0100\15\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\4\37\1\u0101\21\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\10\37\1\u0102\15\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\12\37\1\u0103"+ - "\13\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\14\37\1\u0104\11\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\3\37\1\u0105\22\37\3\0\1\37\21\0"+ - "\2\37\6\0\21\37\1\u0106\5\37\4\0\26\37\3\0"+ - "\1\37\21\0\2\37\6\0\26\37\1\u0107\4\0\26\37"+ - "\3\0\1\37\21\0\2\37\6\0\15\37\1\u0108\11\37"+ - "\4\0\26\37\3\0\1\37\21\0\2\37\6\0\27\37"+ - "\4\0\15\37\1\u0109\10\37\3\0\1\37\21\0\2\37"+ - "\6\0\27\37\4\0\22\37\1\u010a\3\37\3\0\1\37"+ - "\21\0\2\37\6\0\1\u010b\2\37\1\u010c\23\37\4\0"+ - "\26\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\15\37\1\u010d\10\37\3\0\1\37\21\0\2\37\6\0"+ - "\4\37\1\u010e\22\37\4\0\26\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\21\37\1\u010f\4\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\4\37\1\u0110"+ - "\21\37\3\0\1\37\21\0\2\37\6\0\16\37\1\u0111"+ - "\10\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ - "\17\37\1\u0112\7\37\4\0\26\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\22\37\1\u0113\3\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\4\37\1\u0114"+ - "\21\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\12\37\1\u0115\13\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\4\37\1\u0116\21\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\14\37\1\u0117\11\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\17\37\1\u0118"+ - "\6\37\3\0\1\37\21\0\2\37\6\0\20\37\1\u0119"+ - "\6\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\12\37\1\u011a\13\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\15\37\1\u011b\10\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\20\37\1\u011c"+ + "\21\37\1\375\5\37\4\0\26\37\3\0\1\37\21\0"+ + "\2\37\6\0\7\37\1\376\17\37\4\0\26\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\20\37\1\377"+ "\5\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\10\37\1\u011d\15\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\5\37\1\u011e\20\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\17\37\1\u011f\6\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\4\37\1\u0120"+ - "\21\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\15\37\1\u0121\10\37\3\0\1\37\21\0\2\37\6\0"+ - "\14\37\1\u0122\12\37\4\0\26\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\1\u0123\25\37\3\0\1\37"+ - "\21\0\2\37\6\0\27\37\4\0\15\37\1\u0124\10\37"+ - "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\2\37"+ - "\1\u0125\23\37\3\0\1\37\21\0\2\37\6\0\27\37"+ - "\4\0\12\37\1\u0126\13\37\3\0\1\37\21\0\2\37"+ - "\6\0\27\37\4\0\4\37\1\u0127\21\37\3\0\1\37"+ - "\21\0\2\37\6\0\27\37\4\0\20\37\1\u0128\5\37"+ - "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\17\37"+ - "\1\u0129\6\37\3\0\1\37\21\0\2\37\6\0\27\37"+ - "\4\0\15\37\1\u012a\10\37\3\0\1\37\21\0\2\37"+ - "\6\0\27\37\4\0\23\37\1\u012b\2\37\3\0\1\37"+ - "\21\0\2\37\6\0\27\37\4\0\14\37\1\u012c\11\37"+ - "\3\0\1\37\21\0\2\37\6\0\1\u012d\26\37\4\0"+ + "\13\37\1\u0100\12\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\14\37\1\u0101\11\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\21\37\1\u0102\4\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\10\37\1\u0103"+ + "\15\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\4\37\1\u0104\21\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\10\37\1\u0105\15\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\12\37\1\u0106\13\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\14\37\1\u0107"+ + "\11\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\3\37\1\u0108\22\37\3\0\1\37\21\0\2\37\6\0"+ + "\21\37\1\u0109\5\37\4\0\26\37\3\0\1\37\21\0"+ + "\2\37\6\0\26\37\1\u010a\4\0\26\37\3\0\1\37"+ + "\21\0\2\37\6\0\15\37\1\u010b\11\37\4\0\26\37"+ + "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\15\37"+ + "\1\u010c\10\37\3\0\1\37\21\0\2\37\6\0\27\37"+ + "\4\0\22\37\1\u010d\3\37\3\0\1\37\21\0\2\37"+ + "\6\0\1\u010e\2\37\1\u010f\23\37\4\0\26\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\15\37\1\u0110"+ + "\10\37\3\0\1\37\21\0\2\37\6\0\4\37\1\u0111"+ + "\22\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\21\37\1\u0112\4\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\4\37\1\u0113\21\37\3\0"+ + "\1\37\21\0\2\37\6\0\16\37\1\u0114\10\37\4\0"+ + "\26\37\3\0\1\37\21\0\2\37\6\0\17\37\1\u0115"+ + "\7\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\22\37\1\u0116\3\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\4\37\1\u0117\21\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\12\37\1\u0118"+ + "\13\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\4\37\1\u0119\21\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\14\37\1\u011a\11\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\17\37\1\u011b\6\37\3\0"+ + "\1\37\21\0\2\37\6\0\20\37\1\u011c\6\37\4\0"+ "\26\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\3\37\1\u012e\22\37\3\0\1\37\21\0\2\37\6\0"+ - "\27\37\4\0\17\37\1\u012f\6\37\3\0\1\37\21\0"+ - "\2\37\6\0\27\37\4\0\20\37\1\u0130\5\37\3\0"+ - "\1\37\21\0\2\37\6\0\27\37\4\0\17\37\1\u0131"+ - "\6\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ - "\1\u0132\25\37\3\0\1\37\21\0\2\37\6\0\27\37"+ - "\4\0\25\37\1\u0133\3\0\1\37\1\0"; + "\12\37\1\u011d\13\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\15\37\1\u011e\10\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\20\37\1\u011f\5\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\10\37\1\u0120"+ + "\15\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\5\37\1\u0121\20\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\17\37\1\u0122\6\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\4\37\1\u0123\21\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\15\37\1\u0124"+ + "\10\37\3\0\1\37\21\0\2\37\6\0\14\37\1\u0125"+ + "\12\37\4\0\26\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\1\u0126\25\37\3\0\1\37\21\0\2\37"+ + "\6\0\27\37\4\0\15\37\1\u0127\10\37\3\0\1\37"+ + "\21\0\2\37\6\0\27\37\4\0\2\37\1\u0128\23\37"+ + "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\12\37"+ + "\1\u0129\13\37\3\0\1\37\21\0\2\37\6\0\27\37"+ + "\4\0\4\37\1\u012a\21\37\3\0\1\37\21\0\2\37"+ + "\6\0\27\37\4\0\20\37\1\u012b\5\37\3\0\1\37"+ + "\21\0\2\37\6\0\27\37\4\0\17\37\1\u012c\6\37"+ + "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\15\37"+ + "\1\u012d\10\37\3\0\1\37\21\0\2\37\6\0\27\37"+ + "\4\0\23\37\1\u012e\2\37\3\0\1\37\21\0\2\37"+ + "\6\0\27\37\4\0\14\37\1\u012f\11\37\3\0\1\37"+ + "\21\0\2\37\6\0\1\u0130\26\37\4\0\26\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\3\37\1\u0131"+ + "\22\37\3\0\1\37\21\0\2\37\6\0\27\37\4\0"+ + "\17\37\1\u0132\6\37\3\0\1\37\21\0\2\37\6\0"+ + "\27\37\4\0\20\37\1\u0133\5\37\3\0\1\37\21\0"+ + "\2\37\6\0\27\37\4\0\17\37\1\u0134\6\37\3\0"+ + "\1\37\21\0\2\37\6\0\27\37\4\0\1\u0135\25\37"+ + "\3\0\1\37\21\0\2\37\6\0\27\37\4\0\25\37"+ + "\1\u0136\3\0\1\37\1\0"; private static int [] zzUnpacktrans() { - int [] result = new int[17160]; + int [] result = new int[17316]; int offset = 0; offset = zzUnpacktrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -544,11 +547,11 @@ private static int zzUnpacktrans(String packed, int offset, int [] result) { "\1\1\1\11\3\1\2\11\3\1\1\11\17\1\3\11"+ "\16\1\1\11\1\1\2\11\1\0\1\11\1\0\1\11"+ "\2\0\2\11\1\0\1\1\1\0\1\1\1\0\1\11"+ - "\1\0\1\1\5\11\61\1\1\11\3\1\1\0\157\1"+ + "\1\0\1\1\5\11\62\1\1\11\3\1\1\0\161\1"+ "\1\11\74\1"; private static int [] zzUnpackAttribute() { - int [] result = new int[307]; + int [] result = new int[310]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -866,482 +869,487 @@ else if (zzAtEOF) { { return BAD_CHARACTER; } // fall through - case 97: break; + case 98: break; case 2: { return WHITE_SPACE; } // fall through - case 98: break; + case 99: break; case 3: { return LITEFLOW_NOT; } // fall through - case 99: break; + case 100: break; case 4: { return LITEFLOW_REMAINDER; } // fall through - case 100: break; + case 101: break; case 5: { return LITEFLOW_BIT_AND; } // fall through - case 101: break; + case 102: break; case 6: { return LITEFLOW_PAREN_LEFT; } // fall through - case 102: break; + case 103: break; case 7: { return LITEFLOW_PAREN_RIGHT; } // fall through - case 103: break; + case 104: break; case 8: { return LITEFLOW_MUL; } // fall through - case 104: break; + case 105: break; case 9: { return LITEFLOW_PLUS; } // fall through - case 105: break; + case 106: break; case 10: { return LITEFLOW_COMMA; } // fall through - case 106: break; + case 107: break; case 11: { return LITEFLOW_MINUS; } // fall through - case 107: break; + case 108: break; case 12: { return LITEFLOW_DOT; } // fall through - case 108: break; + case 109: break; case 13: { return LITEFLOW_QUOTIENT; } // fall through - case 109: break; + case 110: break; case 14: { return LITEFLOW_NUMBER; } // fall through - case 110: break; + case 111: break; case 15: { return LITEFLOW_COLON; } // fall through - case 111: break; + case 112: break; case 16: { return LITEFLOW_SEMICOLON; } // fall through - case 112: break; + case 113: break; case 17: { return LITEFLOW_LESS; } // fall through - case 113: break; + case 114: break; case 18: { return LITEFLOW_ASSIGN; } // fall through - case 114: break; + case 115: break; case 19: { return LITEFLOW_GREATER; } // fall through - case 115: break; + case 116: break; case 20: { return LITEFLOW_QUESTION; } // fall through - case 116: break; + case 117: break; case 21: { return LITEFLOW_IDENTIFIER; } // fall through - case 117: break; + case 118: break; case 22: { return LITEFLOW_BRACK_LEFT; } // fall through - case 118: break; + case 119: break; case 23: { return LITEFLOW_BRACK_RIGHT; } // fall through - case 119: break; + case 120: break; case 24: { return LITEFLOW_BIT_XOR; } // fall through - case 120: break; + case 121: break; case 25: { return LITEFLOW_BRACE_LEFT; } // fall through - case 121: break; + case 122: break; case 26: { return LITEFLOW_BIT_OR; } // fall through - case 122: break; + case 123: break; case 27: { return LITEFLOW_BRACE_RIGHT; } // fall through - case 123: break; + case 124: break; case 28: { return LITEFLOW_NOT_EQ; } // fall through - case 124: break; + case 125: break; case 29: { return LITEFLOW_STRING; } // fall through - case 125: break; + case 126: break; case 30: { return LITEFLOW_COND_AND; } // fall through - case 126: break; + case 127: break; case 31: { return LITEFLOW_PLUS_PLUS; } // fall through - case 127: break; + case 128: break; case 32: { return LITEFLOW_MINUS_MINUS; } // fall through - case 128: break; + case 129: break; case 33: { return LITEFLOW_LINE_COMMENT; } // fall through - case 129: break; + case 130: break; case 34: { return LITEFLOW_SHIFT_LEFT; } // fall through - case 130: break; + case 131: break; case 35: { return LITEFLOW_LESS_OR_EQUAL; } // fall through - case 131: break; + case 132: break; case 36: { return LITEFLOW_EQ; } // fall through - case 132: break; + case 133: break; case 37: { return LITEFLOW_GREATER_OR_EQUAL; } // fall through - case 133: break; + case 134: break; case 38: { return LITEFLOW_SHIFT_RIGHT; } // fall through - case 134: break; + case 135: break; case 39: { return LITEFLOW_DO; } // fall through - case 135: break; + case 136: break; case 40: { return LITEFLOW_LIF; } // fall through - case 136: break; + case 137: break; case 41: { return LITEFLOW_LOR; } // fall through - case 137: break; + case 138: break; case 42: { return LITEFLOW_UTO; } // fall through - case 138: break; + case 139: break; case 43: { return LITEFLOW_ID; } // fall through - case 139: break; + case 140: break; case 44: { return LITEFLOW_IF; } // fall through - case 140: break; + case 141: break; case 45: { return LITEFLOW_IN; } // fall through - case 141: break; + case 142: break; case 46: { return LITEFLOW_TO; } // fall through - case 142: break; + case 143: break; case 47: { return LITEFLOW_COND_OR; } // fall through - case 143: break; + case 144: break; case 48: { return LITEFLOW_BLOCK_COMMENT; } // fall through - case 144: break; + case 145: break; case 49: { return LITEFLOW_LAND; } // fall through - case 145: break; + case 146: break; case 50: { return LITEFLOW_LFOR; } // fall through - case 146: break; + case 147: break; case 51: { return LITEFLOW_LNOT; } // fall through - case 147: break; + case 148: break; case 52: { return LITEFLOW_PRE; } // fall through - case 148: break; + case 149: break; case 53: { return LITEFLOW_ANY; } // fall through - case 149: break; + case 150: break; case 54: { return LITEFLOW_DEF; } // fall through - case 150: break; + case 151: break; case 55: { return LITEFLOW_FOR; } // fall through - case 151: break; + case 152: break; case 56: { return LITEFLOW_MOD; } // fall through - case 152: break; + case 153: break; case 57: { return LITEFLOW_NEW; } // fall through - case 153: break; + case 154: break; case 58: { return LITEFLOW_NOR; } // fall through - case 154: break; + case 155: break; case 59: { return LITEFLOW_TAG; } // fall through - case 155: break; + case 156: break; case 60: { return LITEFLOW_LELIF; } // fall through - case 156: break; + case 157: break; case 61: { return LITEFLOW_LELSE; } // fall through - case 157: break; + case 158: break; case 62: { return LITEFLOW_UNODE; } // fall through - case 158: break; + case 159: break; case 63: { return LITEFLOW_THEN; } // fall through - case 159: break; + case 160: break; case 64: { return LITEFLOW_WHEN; } // fall through - case 160: break; + case 161: break; case 65: { return LITEFLOW_CAST; } // fall through - case 161: break; + case 162: break; case 66: { return LITEFLOW_DATA; } // fall through - case 162: break; + case 163: break; case 67: { return LITEFLOW_ELSE; } // fall through - case 163: break; + case 164: break; case 68: { return LITEFLOW_LIKE; } // fall through - case 164: break; + case 165: break; case 69: - { return LITEFLOW_NODE; + { return LITEFLOW_MUST; } // fall through - case 165: break; + case 166: break; case 70: - { return LITEFLOW_NULL; + { return LITEFLOW_NODE; } // fall through - case 166: break; + case 167: break; case 71: - { return LITEFLOW_TRUE; + { return LITEFLOW_NULL; } // fall through - case 167: break; + case 168: break; case 72: - { return LITEFLOW_LBREAK; + { return LITEFLOW_TRUE; } // fall through - case 168: break; + case 169: break; case 73: - { return LITEFLOW_LCATCH; + { return LITEFLOW_LBREAK; } // fall through - case 169: break; + case 170: break; case 74: - { return LITEFLOW_LWHILE; + { return LITEFLOW_LCATCH; } // fall through - case 170: break; + case 171: break; case 75: - { return LITEFLOW_ALIAS; + { return LITEFLOW_LWHILE; } // fall through - case 171: break; + case 172: break; case 76: - { return LITEFLOW_ARRAY; + { return LITEFLOW_ALIAS; } // fall through - case 172: break; + case 173: break; case 77: - { return LITEFLOW_BREAK; + { return LITEFLOW_ARRAY; } // fall through - case 173: break; + case 174: break; case 78: - { return LITEFLOW_CLASS; + { return LITEFLOW_BREAK; } // fall through - case 174: break; + case 175: break; case 79: - { return LITEFLOW_FALSE; + { return LITEFLOW_CLASS; } // fall through - case 175: break; + case 176: break; case 80: - { return LITEFLOW_MACRO; + { return LITEFLOW_FALSE; } // fall through - case 176: break; + case 177: break; case 81: - { return LITEFLOW_WHILE; + { return LITEFLOW_MACRO; } // fall through - case 177: break; + case 178: break; case 82: - { return LITEFLOW_SWITCH; + { return LITEFLOW_WHILE; } // fall through - case 178: break; + case 179: break; case 83: - { return LITEFLOW_VCLASS; + { return LITEFLOW_SWITCH; } // fall through - case 179: break; + case 180: break; case 84: - { return LITEFLOW_RETURN; + { return LITEFLOW_VCLASS; } // fall through - case 180: break; + case 181: break; case 85: - { return LITEFLOW_DEFAULT; + { return LITEFLOW_RETURN; } // fall through - case 181: break; + case 182: break; case 86: - { return LITEFLOW_FINALLY; + { return LITEFLOW_DEFAULT; } // fall through - case 182: break; + case 183: break; case 87: - { return LITEFLOW_LITERATOR; + { return LITEFLOW_FINALLY; } // fall through - case 183: break; + case 184: break; case 88: - { return LITEFLOW_CONTINUE; + { return LITEFLOW_LITERATOR; } // fall through - case 184: break; + case 185: break; case 89: - { return LITEFLOW_FUNCTION; + { return LITEFLOW_CONTINUE; } // fall through - case 185: break; + case 186: break; case 90: - { return LITEFLOW_PARALLEL; + { return LITEFLOW_FUNCTION; } // fall through - case 186: break; + case 187: break; case 91: - { return LITEFLOW_EXPORTDEF; + { return LITEFLOW_PARALLEL; } // fall through - case 187: break; + case 188: break; case 92: - { return LITEFLOW_THREADPOOL; + { return LITEFLOW_EXPORTDEF; } // fall through - case 188: break; + case 189: break; case 93: - { return LITEFLOW_EXPORTALIAS; + { return LITEFLOW_THREADPOOL; } // fall through - case 189: break; + case 190: break; case 94: - { return LITEFLOW_IGNOREERROR; + { return LITEFLOW_EXPORTALIAS; } // fall through - case 190: break; + case 191: break; case 95: - { return LITEFLOW_MAXWAITSECONDS; + { return LITEFLOW_IGNOREERROR; } // fall through - case 191: break; + case 192: break; case 96: + { return LITEFLOW_MAXWAITSECONDS; + } + // fall through + case 193: break; + case 97: { return LITEFLOW_ANONYMOUSNEWARRAY; } // fall through - case 192: break; + case 194: break; default: zzScanError(ZZ_NO_MATCH); } diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/parse/LiteFlowParser.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/parse/LiteFlowParser.java index d71c426..5762b54 100644 --- a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/parse/LiteFlowParser.java +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/parse/LiteFlowParser.java @@ -1403,6 +1403,62 @@ private static boolean liteFlowMaxWaitSeconds_2(PsiBuilder b, int l) { return r; } + /* ********************************************************** */ + // must PAREN_LEFT (liteFlowNodeRefExpress | string) {COMMA (liteFlowNodeRefExpress | string)}* PAREN_RIGHT + public static boolean liteFlowMustExpress(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "liteFlowMustExpress")) return false; + if (!nextTokenIs(b, LITEFLOW_MUST)) return false; + boolean r, p; + Marker m = enter_section_(b, l, _NONE_, LITEFLOW_LITE_FLOW_MUST_EXPRESS, null); + r = consumeTokens(b, 1, LITEFLOW_MUST, LITEFLOW_PAREN_LEFT); + p = r; // pin = 1 + r = r && report_error_(b, liteFlowMustExpress_2(b, l + 1)); + r = p && report_error_(b, liteFlowMustExpress_3(b, l + 1)) && r; + r = p && consumeToken(b, LITEFLOW_PAREN_RIGHT) && r; + exit_section_(b, l, m, r, p, null); + return r || p; + } + + // liteFlowNodeRefExpress | string + private static boolean liteFlowMustExpress_2(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "liteFlowMustExpress_2")) return false; + boolean r; + r = liteFlowNodeRefExpress(b, l + 1); + if (!r) r = consumeToken(b, LITEFLOW_STRING); + return r; + } + + // {COMMA (liteFlowNodeRefExpress | string)}* + private static boolean liteFlowMustExpress_3(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "liteFlowMustExpress_3")) return false; + while (true) { + int c = current_position_(b); + if (!liteFlowMustExpress_3_0(b, l + 1)) break; + if (!empty_element_parsed_guard_(b, "liteFlowMustExpress_3", c)) break; + } + return true; + } + + // COMMA (liteFlowNodeRefExpress | string) + private static boolean liteFlowMustExpress_3_0(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "liteFlowMustExpress_3_0")) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, LITEFLOW_COMMA); + r = r && liteFlowMustExpress_3_0_1(b, l + 1); + exit_section_(b, m, null, r); + return r; + } + + // liteFlowNodeRefExpress | string + private static boolean liteFlowMustExpress_3_0_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "liteFlowMustExpress_3_0_1")) return false; + boolean r; + r = liteFlowNodeRefExpress(b, l + 1); + if (!r) r = consumeToken(b, LITEFLOW_STRING); + return r; + } + /* ********************************************************** */ // identifier public static boolean liteFlowNodeRef(PsiBuilder b, int l) { @@ -1662,6 +1718,43 @@ public static boolean liteFlowParallelExpress(PsiBuilder b, int l) { return r || p; } + /* ********************************************************** */ + // liteFlowPlaceholderExpress SEMICOLON + public static boolean liteFlowPlaceHolderStatement(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "liteFlowPlaceHolderStatement")) return false; + boolean r, p; + Marker m = enter_section_(b, l, _NONE_, LITEFLOW_LITE_FLOW_PLACE_HOLDER_STATEMENT, ""); + r = liteFlowPlaceholderExpress(b, l + 1); + p = r; // pin = 1 + r = r && consumeToken(b, LITEFLOW_SEMICOLON); + exit_section_(b, l, m, r, p, LiteFlowParser::recover_liteFlowStatement); + return r || p; + } + + /* ********************************************************** */ + // BRACE_LEFT (refExpress|number) BRACE_RIGHT ASSIGN liteFlowConditionExpress + public static boolean liteFlowPlaceholderExpress(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "liteFlowPlaceholderExpress")) return false; + if (!nextTokenIs(b, LITEFLOW_BRACE_LEFT)) return false; + boolean r; + Marker m = enter_section_(b); + r = consumeToken(b, LITEFLOW_BRACE_LEFT); + r = r && liteFlowPlaceholderExpress_1(b, l + 1); + r = r && consumeTokens(b, 0, LITEFLOW_BRACE_RIGHT, LITEFLOW_ASSIGN); + r = r && liteFlowConditionExpress(b, l + 1); + exit_section_(b, m, LITEFLOW_LITE_FLOW_PLACEHOLDER_EXPRESS, r); + return r; + } + + // refExpress|number + private static boolean liteFlowPlaceholderExpress_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "liteFlowPlaceholderExpress_1")) return false; + boolean r; + r = refExpress(b, l + 1); + if (!r) r = consumeToken(b, LITEFLOW_NUMBER); + return r; + } + /* ********************************************************** */ // PRE PAREN_LEFT liteFlowAllExpress {COMMA liteFlowAllExpress}* PAREN_RIGHT public static boolean liteFlowPreExpress(PsiBuilder b, int l) { @@ -1930,7 +2023,7 @@ private static boolean liteFlowWhenExpress_5_0(PsiBuilder b, int l) { } /* ********************************************************** */ - // DOT (liteFlowIgnoreErrorExpress | liteFlowAnyExpress | liteFlowThreadPoolExpress) + // DOT (liteFlowIgnoreErrorExpress | liteFlowAnyExpress | liteFlowThreadPoolExpress | liteFlowMustExpress) public static boolean liteFlowWhenSubExpress(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "liteFlowWhenSubExpress")) return false; if (!nextTokenIs(b, LITEFLOW_DOT)) return false; @@ -1942,13 +2035,14 @@ public static boolean liteFlowWhenSubExpress(PsiBuilder b, int l) { return r; } - // liteFlowIgnoreErrorExpress | liteFlowAnyExpress | liteFlowThreadPoolExpress + // liteFlowIgnoreErrorExpress | liteFlowAnyExpress | liteFlowThreadPoolExpress | liteFlowMustExpress private static boolean liteFlowWhenSubExpress_1(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "liteFlowWhenSubExpress_1")) return false; boolean r; r = liteFlowIgnoreErrorExpress(b, l + 1); if (!r) r = liteFlowAnyExpress(b, l + 1); if (!r) r = liteFlowThreadPoolExpress(b, l + 1); + if (!r) r = liteFlowMustExpress(b, l + 1); return r; } @@ -2245,7 +2339,7 @@ public static boolean opSelfStatement(PsiBuilder b, int l) { } /* ********************************************************** */ - // !(SEMICOLON | liteFlowStatement | assignStatement | line_comment | block_comment | fnInvokeStatement) + // !(SEMICOLON | liteFlowStatement | assignStatement | liteFlowPlaceHolderStatement | line_comment | block_comment | fnInvokeStatement) static boolean recover_liteFlowStatement(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "recover_liteFlowStatement")) return false; boolean r; @@ -2255,7 +2349,7 @@ static boolean recover_liteFlowStatement(PsiBuilder b, int l) { return r; } - // SEMICOLON | liteFlowStatement | assignStatement | line_comment | block_comment | fnInvokeStatement + // SEMICOLON | liteFlowStatement | assignStatement | liteFlowPlaceHolderStatement | line_comment | block_comment | fnInvokeStatement private static boolean recover_liteFlowStatement_0(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "recover_liteFlowStatement_0")) return false; boolean r; @@ -2263,6 +2357,7 @@ private static boolean recover_liteFlowStatement_0(PsiBuilder b, int l) { r = consumeToken(b, LITEFLOW_SEMICOLON); if (!r) r = liteFlowStatement(b, l + 1); if (!r) r = assignStatement(b, l + 1); + if (!r) r = liteFlowPlaceHolderStatement(b, l + 1); if (!r) r = consumeToken(b, LITEFLOW_LINE_COMMENT); if (!r) r = consumeToken(b, LITEFLOW_BLOCK_COMMENT); if (!r) r = fnInvokeStatement(b, l + 1); @@ -2322,6 +2417,7 @@ private static boolean returnStatement_1(PsiBuilder b, int l) { // returnStatement | // opSelfStatement | // liteFlowStatement | + // liteFlowPlaceHolderStatement | // BRACE_LEFT statement* BRACE_RIGHT public static boolean statement(PsiBuilder b, int l) { if (!recursion_guard_(b, l, "statement")) return false; @@ -2341,30 +2437,31 @@ public static boolean statement(PsiBuilder b, int l) { if (!r) r = returnStatement(b, l + 1); if (!r) r = opSelfStatement(b, l + 1); if (!r) r = liteFlowStatement(b, l + 1); - if (!r) r = statement_14(b, l + 1); + if (!r) r = liteFlowPlaceHolderStatement(b, l + 1); + if (!r) r = statement_15(b, l + 1); exit_section_(b, l, m, r, false, null); return r; } // BRACE_LEFT statement* BRACE_RIGHT - private static boolean statement_14(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "statement_14")) return false; + private static boolean statement_15(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "statement_15")) return false; boolean r; Marker m = enter_section_(b); r = consumeToken(b, LITEFLOW_BRACE_LEFT); - r = r && statement_14_1(b, l + 1); + r = r && statement_15_1(b, l + 1); r = r && consumeToken(b, LITEFLOW_BRACE_RIGHT); exit_section_(b, m, null, r); return r; } // statement* - private static boolean statement_14_1(PsiBuilder b, int l) { - if (!recursion_guard_(b, l, "statement_14_1")) return false; + private static boolean statement_15_1(PsiBuilder b, int l) { + if (!recursion_guard_(b, l, "statement_15_1")) return false; while (true) { int c = current_position_(b); if (!statement(b, l + 1)) break; - if (!empty_element_parsed_guard_(b, "statement_14_1", c)) break; + if (!empty_element_parsed_guard_(b, "statement_15_1", c)) break; } return true; } diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowMustExpress.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowMustExpress.java new file mode 100644 index 0000000..23db4c8 --- /dev/null +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowMustExpress.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package top.xystudio.plugin.idea.liteflowx.system.language.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface LiteFlowLiteFlowMustExpress extends PsiElement { + + @NotNull + List getLiteFlowNodeRefExpressList(); + +} diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowPlaceHolderStatement.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowPlaceHolderStatement.java new file mode 100644 index 0000000..26bd22b --- /dev/null +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowPlaceHolderStatement.java @@ -0,0 +1,13 @@ +// This is a generated file. Not intended for manual editing. +package top.xystudio.plugin.idea.liteflowx.system.language.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface LiteFlowLiteFlowPlaceHolderStatement extends PsiElement { + + @NotNull + LiteFlowLiteFlowPlaceholderExpress getLiteFlowPlaceholderExpress(); + +} diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowPlaceholderExpress.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowPlaceholderExpress.java new file mode 100644 index 0000000..b9f9b6b --- /dev/null +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowPlaceholderExpress.java @@ -0,0 +1,19 @@ +// This is a generated file. Not intended for manual editing. +package top.xystudio.plugin.idea.liteflowx.system.language.psi; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.psi.PsiElement; + +public interface LiteFlowLiteFlowPlaceholderExpress extends PsiElement { + + @NotNull + LiteFlowLiteFlowConditionExpress getLiteFlowConditionExpress(); + + @Nullable + LiteFlowRefExpress getRefExpress(); + + @Nullable + PsiElement getNumber(); + +} diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowWhenSubExpress.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowWhenSubExpress.java index 150376d..cfdf276 100644 --- a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowWhenSubExpress.java +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowLiteFlowWhenSubExpress.java @@ -13,6 +13,9 @@ public interface LiteFlowLiteFlowWhenSubExpress extends PsiElement { @Nullable LiteFlowLiteFlowIgnoreErrorExpress getLiteFlowIgnoreErrorExpress(); + @Nullable + LiteFlowLiteFlowMustExpress getLiteFlowMustExpress(); + @Nullable LiteFlowLiteFlowThreadPoolExpress getLiteFlowThreadPoolExpress(); diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowStatement.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowStatement.java index e147e1f..843b186 100644 --- a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowStatement.java +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowStatement.java @@ -25,6 +25,9 @@ public interface LiteFlowStatement extends PsiElement { @Nullable LiteFlowIfStatement getIfStatement(); + @Nullable + LiteFlowLiteFlowPlaceHolderStatement getLiteFlowPlaceHolderStatement(); + @Nullable LiteFlowLiteFlowStatement getLiteFlowStatement(); diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowTypes.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowTypes.java index 71041ea..7619255 100644 --- a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowTypes.java +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowTypes.java @@ -48,6 +48,7 @@ public interface LiteFlowTypes { IElementType LITEFLOW_LITE_FLOW_ITERATOR_SUB_EXPRESS = new LiteFlowElementType("LITEFLOW_LITE_FLOW_ITERATOR_SUB_EXPRESS"); IElementType LITEFLOW_LITE_FLOW_LOGIC_EXPRESS = new LiteFlowElementType("LITEFLOW_LITE_FLOW_LOGIC_EXPRESS"); IElementType LITEFLOW_LITE_FLOW_MAX_WAIT_SECONDS = new LiteFlowElementType("LITEFLOW_LITE_FLOW_MAX_WAIT_SECONDS"); + IElementType LITEFLOW_LITE_FLOW_MUST_EXPRESS = new LiteFlowElementType("LITEFLOW_LITE_FLOW_MUST_EXPRESS"); IElementType LITEFLOW_LITE_FLOW_NODE_REF = new LiteFlowElementType("LITEFLOW_LITE_FLOW_NODE_REF"); IElementType LITEFLOW_LITE_FLOW_NODE_REF_EXPRESS = new LiteFlowElementType("LITEFLOW_LITE_FLOW_NODE_REF_EXPRESS"); IElementType LITEFLOW_LITE_FLOW_NODE_REF_SUB_EXPRESS = new LiteFlowElementType("LITEFLOW_LITE_FLOW_NODE_REF_SUB_EXPRESS"); @@ -56,6 +57,8 @@ public interface LiteFlowTypes { IElementType LITEFLOW_LITE_FLOW_NOT_EXPRESS = new LiteFlowElementType("LITEFLOW_LITE_FLOW_NOT_EXPRESS"); IElementType LITEFLOW_LITE_FLOW_OR_EXPRESS = new LiteFlowElementType("LITEFLOW_LITE_FLOW_OR_EXPRESS"); IElementType LITEFLOW_LITE_FLOW_PARALLEL_EXPRESS = new LiteFlowElementType("LITEFLOW_LITE_FLOW_PARALLEL_EXPRESS"); + IElementType LITEFLOW_LITE_FLOW_PLACEHOLDER_EXPRESS = new LiteFlowElementType("LITEFLOW_LITE_FLOW_PLACEHOLDER_EXPRESS"); + IElementType LITEFLOW_LITE_FLOW_PLACE_HOLDER_STATEMENT = new LiteFlowElementType("LITEFLOW_LITE_FLOW_PLACE_HOLDER_STATEMENT"); IElementType LITEFLOW_LITE_FLOW_PRE_EXPRESS = new LiteFlowElementType("LITEFLOW_LITE_FLOW_PRE_EXPRESS"); IElementType LITEFLOW_LITE_FLOW_STATEMENT = new LiteFlowElementType("LITEFLOW_LITE_FLOW_STATEMENT"); IElementType LITEFLOW_LITE_FLOW_SWITCH_EXPRESS = new LiteFlowElementType("LITEFLOW_LITE_FLOW_SWITCH_EXPRESS"); @@ -146,6 +149,7 @@ public interface LiteFlowTypes { IElementType LITEFLOW_MINUS_MINUS = new LiteFlowTokenType("--"); IElementType LITEFLOW_MOD = new LiteFlowTokenType("mod"); IElementType LITEFLOW_MUL = new LiteFlowTokenType("*"); + IElementType LITEFLOW_MUST = new LiteFlowTokenType("must"); IElementType LITEFLOW_NEW = new LiteFlowTokenType("new"); IElementType LITEFLOW_NODE = new LiteFlowTokenType("node"); IElementType LITEFLOW_NOR = new LiteFlowTokenType("nor"); @@ -302,6 +306,9 @@ else if (type == LITEFLOW_LITE_FLOW_LOGIC_EXPRESS) { else if (type == LITEFLOW_LITE_FLOW_MAX_WAIT_SECONDS) { return new LiteFlowLiteFlowMaxWaitSecondsImpl(node); } + else if (type == LITEFLOW_LITE_FLOW_MUST_EXPRESS) { + return new LiteFlowLiteFlowMustExpressImpl(node); + } else if (type == LITEFLOW_LITE_FLOW_NODE_REF) { return new LiteFlowLiteFlowNodeRefImpl(node); } @@ -326,6 +333,12 @@ else if (type == LITEFLOW_LITE_FLOW_OR_EXPRESS) { else if (type == LITEFLOW_LITE_FLOW_PARALLEL_EXPRESS) { return new LiteFlowLiteFlowParallelExpressImpl(node); } + else if (type == LITEFLOW_LITE_FLOW_PLACEHOLDER_EXPRESS) { + return new LiteFlowLiteFlowPlaceholderExpressImpl(node); + } + else if (type == LITEFLOW_LITE_FLOW_PLACE_HOLDER_STATEMENT) { + return new LiteFlowLiteFlowPlaceHolderStatementImpl(node); + } else if (type == LITEFLOW_LITE_FLOW_PRE_EXPRESS) { return new LiteFlowLiteFlowPreExpressImpl(node); } diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowVisitor.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowVisitor.java index 0aba036..d3434b6 100644 --- a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowVisitor.java +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/LiteFlowVisitor.java @@ -167,6 +167,10 @@ public void visitLiteFlowMaxWaitSeconds(@NotNull LiteFlowLiteFlowMaxWaitSeconds visitPsiElement(o); } + public void visitLiteFlowMustExpress(@NotNull LiteFlowLiteFlowMustExpress o) { + visitPsiElement(o); + } + public void visitLiteFlowNodeRef(@NotNull LiteFlowLiteFlowNodeRef o) { visitPsiElement(o); } @@ -199,6 +203,14 @@ public void visitLiteFlowParallelExpress(@NotNull LiteFlowLiteFlowParallelExpres visitPsiElement(o); } + public void visitLiteFlowPlaceHolderStatement(@NotNull LiteFlowLiteFlowPlaceHolderStatement o) { + visitPsiElement(o); + } + + public void visitLiteFlowPlaceholderExpress(@NotNull LiteFlowLiteFlowPlaceholderExpress o) { + visitPsiElement(o); + } + public void visitLiteFlowPreExpress(@NotNull LiteFlowLiteFlowPreExpress o) { visitPsiElement(o); } diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowMustExpressImpl.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowMustExpressImpl.java new file mode 100644 index 0000000..a742772 --- /dev/null +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowMustExpressImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package top.xystudio.plugin.idea.liteflowx.system.language.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static top.xystudio.plugin.idea.liteflowx.system.language.psi.LiteFlowTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import top.xystudio.plugin.idea.liteflowx.system.language.psi.*; + +public class LiteFlowLiteFlowMustExpressImpl extends ASTWrapperPsiElement implements LiteFlowLiteFlowMustExpress { + + public LiteFlowLiteFlowMustExpressImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull LiteFlowVisitor visitor) { + visitor.visitLiteFlowMustExpress(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof LiteFlowVisitor) accept((LiteFlowVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public List getLiteFlowNodeRefExpressList() { + return PsiTreeUtil.getChildrenOfTypeAsList(this, LiteFlowLiteFlowNodeRefExpress.class); + } + +} diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowPlaceHolderStatementImpl.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowPlaceHolderStatementImpl.java new file mode 100644 index 0000000..ac931b1 --- /dev/null +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowPlaceHolderStatementImpl.java @@ -0,0 +1,36 @@ +// This is a generated file. Not intended for manual editing. +package top.xystudio.plugin.idea.liteflowx.system.language.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static top.xystudio.plugin.idea.liteflowx.system.language.psi.LiteFlowTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import top.xystudio.plugin.idea.liteflowx.system.language.psi.*; + +public class LiteFlowLiteFlowPlaceHolderStatementImpl extends ASTWrapperPsiElement implements LiteFlowLiteFlowPlaceHolderStatement { + + public LiteFlowLiteFlowPlaceHolderStatementImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull LiteFlowVisitor visitor) { + visitor.visitLiteFlowPlaceHolderStatement(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof LiteFlowVisitor) accept((LiteFlowVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public LiteFlowLiteFlowPlaceholderExpress getLiteFlowPlaceholderExpress() { + return findNotNullChildByClass(LiteFlowLiteFlowPlaceholderExpress.class); + } + +} diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowPlaceholderExpressImpl.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowPlaceholderExpressImpl.java new file mode 100644 index 0000000..6cb15c6 --- /dev/null +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowPlaceholderExpressImpl.java @@ -0,0 +1,48 @@ +// This is a generated file. Not intended for manual editing. +package top.xystudio.plugin.idea.liteflowx.system.language.psi.impl; + +import java.util.List; +import org.jetbrains.annotations.*; +import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiElementVisitor; +import com.intellij.psi.util.PsiTreeUtil; +import static top.xystudio.plugin.idea.liteflowx.system.language.psi.LiteFlowTypes.*; +import com.intellij.extapi.psi.ASTWrapperPsiElement; +import top.xystudio.plugin.idea.liteflowx.system.language.psi.*; + +public class LiteFlowLiteFlowPlaceholderExpressImpl extends ASTWrapperPsiElement implements LiteFlowLiteFlowPlaceholderExpress { + + public LiteFlowLiteFlowPlaceholderExpressImpl(@NotNull ASTNode node) { + super(node); + } + + public void accept(@NotNull LiteFlowVisitor visitor) { + visitor.visitLiteFlowPlaceholderExpress(this); + } + + @Override + public void accept(@NotNull PsiElementVisitor visitor) { + if (visitor instanceof LiteFlowVisitor) accept((LiteFlowVisitor)visitor); + else super.accept(visitor); + } + + @Override + @NotNull + public LiteFlowLiteFlowConditionExpress getLiteFlowConditionExpress() { + return findNotNullChildByClass(LiteFlowLiteFlowConditionExpress.class); + } + + @Override + @Nullable + public LiteFlowRefExpress getRefExpress() { + return findChildByClass(LiteFlowRefExpress.class); + } + + @Override + @Nullable + public PsiElement getNumber() { + return findChildByType(LITEFLOW_NUMBER); + } + +} diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowWhenSubExpressImpl.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowWhenSubExpressImpl.java index a14cbb4..26c098e 100644 --- a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowWhenSubExpressImpl.java +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowLiteFlowWhenSubExpressImpl.java @@ -39,6 +39,12 @@ public LiteFlowLiteFlowIgnoreErrorExpress getLiteFlowIgnoreErrorExpress() { return findChildByClass(LiteFlowLiteFlowIgnoreErrorExpress.class); } + @Override + @Nullable + public LiteFlowLiteFlowMustExpress getLiteFlowMustExpress() { + return findChildByClass(LiteFlowLiteFlowMustExpress.class); + } + @Override @Nullable public LiteFlowLiteFlowThreadPoolExpress getLiteFlowThreadPoolExpress() { diff --git a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowStatementImpl.java b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowStatementImpl.java index 81ac5d5..4b09050 100644 --- a/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowStatementImpl.java +++ b/src/main/gen/top/xystudio/plugin/idea/liteflowx/system/language/psi/impl/LiteFlowStatementImpl.java @@ -63,6 +63,12 @@ public LiteFlowIfStatement getIfStatement() { return findChildByClass(LiteFlowIfStatement.class); } + @Override + @Nullable + public LiteFlowLiteFlowPlaceHolderStatement getLiteFlowPlaceHolderStatement() { + return findChildByClass(LiteFlowLiteFlowPlaceHolderStatement.class); + } + @Override @Nullable public LiteFlowLiteFlowStatement getLiteFlowStatement() { diff --git a/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/LiteFlow.bnf b/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/LiteFlow.bnf index d748851..1734d1c 100644 --- a/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/LiteFlow.bnf +++ b/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/LiteFlow.bnf @@ -137,6 +137,7 @@ threadPool = "threadPool" maxWaitSeconds = "maxWaitSeconds" parallel = "parallel" + must = "must" to = "to" UTO = "TO" data = "data" @@ -145,6 +146,7 @@ DO = "DO" LBREAK = "BREAK" DEFAULT = "DEFAULT" + ] } @@ -168,6 +170,7 @@ statement ::= ( returnStatement | opSelfStatement | liteFlowStatement | + liteFlowPlaceHolderStatement | BRACE_LEFT statement* BRACE_RIGHT ) @@ -187,7 +190,8 @@ breakStatement ::= break SEMICOLON continueStatement ::= continue SEMICOLON opSelfStatement ::= opSelfExpress SEMICOLON liteFlowStatement ::= liteFlowConditionExpress SEMICOLON {pin=1 recoverWhile=recover_liteFlowStatement} -private recover_liteFlowStatement ::= !(SEMICOLON | liteFlowStatement | assignStatement | line_comment | block_comment | fnInvokeStatement) +liteFlowPlaceHolderStatement ::= liteFlowPlaceholderExpress SEMICOLON {pin=1 recoverWhile=recover_liteFlowStatement} +private recover_liteFlowStatement ::= !(SEMICOLON | liteFlowStatement | assignStatement | liteFlowPlaceHolderStatement | line_comment | block_comment | fnInvokeStatement) /** Statement Start **/ @@ -233,6 +237,9 @@ fnInvokeExpress ::= refExpress fnParamExpress // 函数应用分隔符表达式 fnParamExpress ::= {PAREN_LEFT [allExpress {COMMA (allExpress|op)}*] PAREN_RIGHT}+ +// LiteFlow 占位符表达式 +liteFlowPlaceholderExpress ::= BRACE_LEFT (refExpress|number) BRACE_RIGHT ASSIGN liteFlowConditionExpress + // LiteFlow 通用表达式 liteFlowAllExpress ::= liteFlowConditionExpress | liteFlowNodeRefExpress @@ -280,7 +287,7 @@ liteFlowThenExpress ::= THEN PAREN_LEFT liteFlowAllExpress {COMMA liteFlowAllExp // LiteFlow WHEN() 表达式 liteFlowWhenExpress ::= WHEN PAREN_LEFT liteFlowAllExpress {COMMA liteFlowAllExpress}* PAREN_RIGHT { liteFlowWhenSubExpress }* {pin=1} -liteFlowWhenSubExpress ::= DOT (liteFlowIgnoreErrorExpress | liteFlowAnyExpress | liteFlowThreadPoolExpress) +liteFlowWhenSubExpress ::= DOT (liteFlowIgnoreErrorExpress | liteFlowAnyExpress | liteFlowThreadPoolExpress | liteFlowMustExpress) // LiteFlow SWITCH() 表达式 liteFlowSwitchExpress ::= SWITCH PAREN_LEFT liteFlowNodeRefExpress PAREN_RIGHT DOT (liteFlowToExpress | liteFlowDefaultExpress) {pin=1} @@ -327,6 +334,9 @@ liteFlowIgnoreErrorExpress ::= ignoreError PAREN_LEFT boolean PAREN_RIGHT {pin=1 // LiteFlow .any() 表达式 liteFlowAnyExpress ::= any PAREN_LEFT boolean PAREN_RIGHT {pin=1} +// LiteFlow .must() 表达式 +liteFlowMustExpress ::= must PAREN_LEFT (liteFlowNodeRefExpress | string) {COMMA (liteFlowNodeRefExpress | string)}* PAREN_RIGHT {pin=1} + // LiteFlow .threadPool() 表达式 liteFlowThreadPoolExpress ::= threadPool PAREN_LEFT string PAREN_RIGHT {pin=1} diff --git a/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/_LiteFlowLexer.flex b/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/_LiteFlowLexer.flex index 0ea51d3..ca8763a 100644 --- a/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/_LiteFlowLexer.flex +++ b/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/_LiteFlowLexer.flex @@ -34,104 +34,105 @@ NUMBER=-?(0[xX][0-9a-fA-F]+|[0-9]|[1-9][0-9]*N?M?|[0-9]+(\.[0-9]+)?([Ee][+-]?[0- %% { - {WHITE_SPACE} { return WHITE_SPACE; } + {WHITE_SPACE} { return WHITE_SPACE; } - "{" { return LITEFLOW_BRACE_LEFT; } - "}" { return LITEFLOW_BRACE_RIGHT; } - "[" { return LITEFLOW_BRACK_LEFT; } - "]" { return LITEFLOW_BRACK_RIGHT; } - "(" { return LITEFLOW_PAREN_LEFT; } - ")" { return LITEFLOW_PAREN_RIGHT; } - ":" { return LITEFLOW_COLON; } - ";" { return LITEFLOW_SEMICOLON; } - "," { return LITEFLOW_COMMA; } - "==" { return LITEFLOW_EQ; } - "=" { return LITEFLOW_ASSIGN; } - "!=" { return LITEFLOW_NOT_EQ; } - "!" { return LITEFLOW_NOT; } - "++" { return LITEFLOW_PLUS_PLUS; } - "+" { return LITEFLOW_PLUS; } - "--" { return LITEFLOW_MINUS_MINUS; } - "-" { return LITEFLOW_MINUS; } - "||" { return LITEFLOW_COND_OR; } - "&&" { return LITEFLOW_COND_AND; } - "&" { return LITEFLOW_BIT_AND; } - "|" { return LITEFLOW_BIT_OR; } - "<<" { return LITEFLOW_SHIFT_LEFT; } - "<=" { return LITEFLOW_LESS_OR_EQUAL; } - "<" { return LITEFLOW_LESS; } - "^" { return LITEFLOW_BIT_XOR; } - "*" { return LITEFLOW_MUL; } - "/" { return LITEFLOW_QUOTIENT; } - "%" { return LITEFLOW_REMAINDER; } - ">>" { return LITEFLOW_SHIFT_RIGHT; } - ">=" { return LITEFLOW_GREATER_OR_EQUAL; } - ">" { return LITEFLOW_GREATER; } - "." { return LITEFLOW_DOT; } - "?" { return LITEFLOW_QUESTION; } - "null" { return LITEFLOW_NULL; } - "true" { return LITEFLOW_TRUE; } - "false" { return LITEFLOW_FALSE; } - "mod" { return LITEFLOW_MOD; } - "nor" { return LITEFLOW_NOR; } - "in" { return LITEFLOW_IN; } - "for" { return LITEFLOW_FOR; } - "while" { return LITEFLOW_WHILE; } - "if" { return LITEFLOW_IF; } - "WHEN" { return LITEFLOW_WHEN; } - "THEN" { return LITEFLOW_THEN; } - "else" { return LITEFLOW_ELSE; } - "exportAlias" { return LITEFLOW_EXPORTALIAS; } - "alias" { return LITEFLOW_ALIAS; } - "break" { return LITEFLOW_BREAK; } - "continue" { return LITEFLOW_CONTINUE; } - "return" { return LITEFLOW_RETURN; } - "macro" { return LITEFLOW_MACRO; } - "function" { return LITEFLOW_FUNCTION; } - "def" { return LITEFLOW_DEF; } - "exportDef" { return LITEFLOW_EXPORTDEF; } - "new" { return LITEFLOW_NEW; } - "array" { return LITEFLOW_ARRAY; } - "anonymousNewArray" { return LITEFLOW_ANONYMOUSNEWARRAY; } - "like" { return LITEFLOW_LIKE; } - "class" { return LITEFLOW_CLASS; } - "VClass" { return LITEFLOW_VCLASS; } - "cast" { return LITEFLOW_CAST; } - "SWITCH" { return LITEFLOW_SWITCH; } - "PRE" { return LITEFLOW_PRE; } - "FINALLY" { return LITEFLOW_FINALLY; } - "CATCH" { return LITEFLOW_LCATCH; } - "IF" { return LITEFLOW_LIF; } - "ELIF" { return LITEFLOW_LELIF; } - "ELSE" { return LITEFLOW_LELSE; } - "AND" { return LITEFLOW_LAND; } - "OR" { return LITEFLOW_LOR; } - "NOT" { return LITEFLOW_LNOT; } - "FOR" { return LITEFLOW_LFOR; } - "ITERATOR" { return LITEFLOW_LITERATOR; } - "WHILE" { return LITEFLOW_LWHILE; } - "any" { return LITEFLOW_ANY; } - "id" { return LITEFLOW_ID; } - "ignoreError" { return LITEFLOW_IGNOREERROR; } - "tag" { return LITEFLOW_TAG; } - "threadPool" { return LITEFLOW_THREADPOOL; } - "maxWaitSeconds" { return LITEFLOW_MAXWAITSECONDS; } - "parallel" { return LITEFLOW_PARALLEL; } - "to" { return LITEFLOW_TO; } - "TO" { return LITEFLOW_UTO; } - "data" { return LITEFLOW_DATA; } - "node" { return LITEFLOW_NODE; } - "NODE" { return LITEFLOW_UNODE; } - "DO" { return LITEFLOW_DO; } - "BREAK" { return LITEFLOW_LBREAK; } - "DEFAULT" { return LITEFLOW_DEFAULT; } + "{" { return LITEFLOW_BRACE_LEFT; } + "}" { return LITEFLOW_BRACE_RIGHT; } + "[" { return LITEFLOW_BRACK_LEFT; } + "]" { return LITEFLOW_BRACK_RIGHT; } + "(" { return LITEFLOW_PAREN_LEFT; } + ")" { return LITEFLOW_PAREN_RIGHT; } + ":" { return LITEFLOW_COLON; } + ";" { return LITEFLOW_SEMICOLON; } + "," { return LITEFLOW_COMMA; } + "==" { return LITEFLOW_EQ; } + "=" { return LITEFLOW_ASSIGN; } + "!=" { return LITEFLOW_NOT_EQ; } + "!" { return LITEFLOW_NOT; } + "++" { return LITEFLOW_PLUS_PLUS; } + "+" { return LITEFLOW_PLUS; } + "--" { return LITEFLOW_MINUS_MINUS; } + "-" { return LITEFLOW_MINUS; } + "||" { return LITEFLOW_COND_OR; } + "&&" { return LITEFLOW_COND_AND; } + "&" { return LITEFLOW_BIT_AND; } + "|" { return LITEFLOW_BIT_OR; } + "<<" { return LITEFLOW_SHIFT_LEFT; } + "<=" { return LITEFLOW_LESS_OR_EQUAL; } + "<" { return LITEFLOW_LESS; } + "^" { return LITEFLOW_BIT_XOR; } + "*" { return LITEFLOW_MUL; } + "/" { return LITEFLOW_QUOTIENT; } + "%" { return LITEFLOW_REMAINDER; } + ">>" { return LITEFLOW_SHIFT_RIGHT; } + ">=" { return LITEFLOW_GREATER_OR_EQUAL; } + ">" { return LITEFLOW_GREATER; } + "." { return LITEFLOW_DOT; } + "?" { return LITEFLOW_QUESTION; } + "null" { return LITEFLOW_NULL; } + "true" { return LITEFLOW_TRUE; } + "false" { return LITEFLOW_FALSE; } + "mod" { return LITEFLOW_MOD; } + "nor" { return LITEFLOW_NOR; } + "in" { return LITEFLOW_IN; } + "for" { return LITEFLOW_FOR; } + "while" { return LITEFLOW_WHILE; } + "if" { return LITEFLOW_IF; } + "WHEN" { return LITEFLOW_WHEN; } + "THEN" { return LITEFLOW_THEN; } + "else" { return LITEFLOW_ELSE; } + "exportAlias" { return LITEFLOW_EXPORTALIAS; } + "alias" { return LITEFLOW_ALIAS; } + "break" { return LITEFLOW_BREAK; } + "continue" { return LITEFLOW_CONTINUE; } + "return" { return LITEFLOW_RETURN; } + "macro" { return LITEFLOW_MACRO; } + "function" { return LITEFLOW_FUNCTION; } + "def" { return LITEFLOW_DEF; } + "exportDef" { return LITEFLOW_EXPORTDEF; } + "new" { return LITEFLOW_NEW; } + "array" { return LITEFLOW_ARRAY; } + "anonymousNewArray" { return LITEFLOW_ANONYMOUSNEWARRAY; } + "like" { return LITEFLOW_LIKE; } + "class" { return LITEFLOW_CLASS; } + "VClass" { return LITEFLOW_VCLASS; } + "cast" { return LITEFLOW_CAST; } + "SWITCH" { return LITEFLOW_SWITCH; } + "PRE" { return LITEFLOW_PRE; } + "FINALLY" { return LITEFLOW_FINALLY; } + "CATCH" { return LITEFLOW_LCATCH; } + "IF" { return LITEFLOW_LIF; } + "ELIF" { return LITEFLOW_LELIF; } + "ELSE" { return LITEFLOW_LELSE; } + "AND" { return LITEFLOW_LAND; } + "OR" { return LITEFLOW_LOR; } + "NOT" { return LITEFLOW_LNOT; } + "FOR" { return LITEFLOW_LFOR; } + "ITERATOR" { return LITEFLOW_LITERATOR; } + "WHILE" { return LITEFLOW_LWHILE; } + "any" { return LITEFLOW_ANY; } + "id" { return LITEFLOW_ID; } + "ignoreError" { return LITEFLOW_IGNOREERROR; } + "tag" { return LITEFLOW_TAG; } + "threadPool" { return LITEFLOW_THREADPOOL; } + "maxWaitSeconds" { return LITEFLOW_MAXWAITSECONDS; } + "parallel" { return LITEFLOW_PARALLEL; } + "must" { return LITEFLOW_MUST; } + "to" { return LITEFLOW_TO; } + "TO" { return LITEFLOW_UTO; } + "data" { return LITEFLOW_DATA; } + "node" { return LITEFLOW_NODE; } + "NODE" { return LITEFLOW_UNODE; } + "DO" { return LITEFLOW_DO; } + "BREAK" { return LITEFLOW_LBREAK; } + "DEFAULT" { return LITEFLOW_DEFAULT; } - {IDENTIFIER} { return LITEFLOW_IDENTIFIER; } - {LINE_COMMENT} { return LITEFLOW_LINE_COMMENT; } - {BLOCK_COMMENT} { return LITEFLOW_BLOCK_COMMENT; } - {SPACE} { return LITEFLOW_SPACE; } - {STRING} { return LITEFLOW_STRING; } - {NUMBER} { return LITEFLOW_NUMBER; } + {IDENTIFIER} { return LITEFLOW_IDENTIFIER; } + {LINE_COMMENT} { return LITEFLOW_LINE_COMMENT; } + {BLOCK_COMMENT} { return LITEFLOW_BLOCK_COMMENT; } + {SPACE} { return LITEFLOW_SPACE; } + {STRING} { return LITEFLOW_STRING; } + {NUMBER} { return LITEFLOW_NUMBER; } } diff --git a/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/completion/LiteFlowBaseCompletionContributor.java b/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/completion/LiteFlowBaseCompletionContributor.java index be7a133..ad6df02 100644 --- a/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/completion/LiteFlowBaseCompletionContributor.java +++ b/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/completion/LiteFlowBaseCompletionContributor.java @@ -58,6 +58,7 @@ protected void addCompletions(@NotNull CompletionParameters parameters, @NotNull if (position.getText().equals("IntellijIdeaRulezzz")){ resultSet.addElement(LookupElementBuilder.create("id").withInsertHandler(parenHandler)); resultSet.addElement(LookupElementBuilder.create("any").withInsertHandler(parenHandler)); + resultSet.addElement(LookupElementBuilder.create("must").withInsertHandler(parenHandler)); resultSet.addElement(LookupElementBuilder.create("ignoreError").withInsertHandler(parenHandler)); resultSet.addElement(LookupElementBuilder.create("threadPool").withInsertHandler(parenHandler)); resultSet.addElement(LookupElementBuilder.create("maxWaitSeconds").withInsertHandler(parenHandler)); diff --git a/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/highlight/LiteFlowSyntaxHighlighter.java b/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/highlight/LiteFlowSyntaxHighlighter.java index 99de9e4..bd2b580 100644 --- a/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/highlight/LiteFlowSyntaxHighlighter.java +++ b/src/main/java/top/xystudio/plugin/idea/liteflowx/system/language/highlight/LiteFlowSyntaxHighlighter.java @@ -86,6 +86,7 @@ public TextAttributesKey[] getTokenHighlights(IElementType tokenType) { || tokenType.equals(LiteFlowTypes.LITEFLOW_ID) || tokenType.equals(LiteFlowTypes.LITEFLOW_IGNOREERROR) || tokenType.equals(LiteFlowTypes.LITEFLOW_ANY) + || tokenType.equals(LiteFlowTypes.LITEFLOW_MUST) || tokenType.equals(LiteFlowTypes.LITEFLOW_THREADPOOL) || tokenType.equals(LiteFlowTypes.LITEFLOW_PARALLEL) || tokenType.equals(LiteFlowTypes.LITEFLOW_MAXWAITSECONDS)