From 3d043320cdee8dda92758f4ea1c324a82c7d9094 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Hannu=20Niemist=C3=B6?= Date: Wed, 25 Apr 2018 15:02:43 +0300 Subject: [PATCH 1/1] New SCL syntax <> Change-Id: Iec61620d424e583b854a743ccc4ac37dc8e8f56f --- .../internal/parsing/parser/SCL.grammar | 3 + .../internal/parsing/parser/SCLLexer.flex | 2 + .../internal/parsing/parser/SCLLexer.java | 906 +++++++++--------- .../internal/parsing/parser/SCLParser.dat | Bin 25352 -> 25666 bytes .../internal/parsing/parser/SCLParser.java | 204 ++-- .../parsing/parser/SCLParserImpl.java | 23 + .../internal/parsing/parser/SCLTerminals.java | 8 +- .../parsing/types/TPlainEffectAst.java | 61 ++ .../internal/types/effects/EffectIdMap.java | 24 +- .../compiler/tests/ModuleRegressionTests.java | 1 + .../scl/compiler/tests/scl/Lazy1.scl | 36 + 11 files changed, 712 insertions(+), 556 deletions(-) create mode 100644 bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/types/TPlainEffectAst.java create mode 100644 tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/scl/Lazy1.scl diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCL.grammar b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCL.grammar index 01a66a9ee..3b3d5f7db 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCL.grammar +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCL.grammar @@ -300,6 +300,7 @@ btype atype = ID # TypeVar + | DOUBLE_LESS ID (COMMA ID)* DOUBLE_GREATER # PlainEffect | LPAREN (type (COMMA type)*)? RPAREN # TupleType | LBRACKET type RBRACKET # ListType | LBRACKET RBRACKET # ListTypeConstructor @@ -321,6 +322,8 @@ symbol | MINUS # Minus | LESS # Less | GREATER # Greater + | DOUBLE_LESS # DoubleLess + | DOUBLE_GREATER # DoubleGreater | SEPARATED_DOT # Dot ; diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.flex b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.flex index 595c082ca..e1abd5fd3 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.flex +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.flex @@ -158,7 +158,9 @@ char_literal = "'" ([^'\\\ufffd] | "\\" [^\ufffd]) "'" "." { return sym(SCLTerminals.ATTACHED_DOT, "."); } "-" { return sym(SCLTerminals.MINUS, "-"); } // "<" {existentialVar} ">" { yybegin(XML); return sym(SCLTerminals.XML_BEGIN); } + "<<" { return sym(SCLTerminals.DOUBLE_LESS, "<<"); } "<" { return sym(SCLTerminals.LESS, "<"); } + ">>" { return sym(SCLTerminals.DOUBLE_GREATER, ">>"); } ">" { return sym(SCLTerminals.GREATER, ">"); } ";" { return sym(SCLTerminals.SEMICOLON); } "|" { return sym(SCLTerminals.BAR); } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.java index 0caade6bf..ca25d241a 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLLexer.java @@ -68,26 +68,26 @@ public class SCLLexer { "\1\23\1\24\1\25\1\26\1\27\1\30\1\31\1\32"+ "\1\33\1\13\1\34\1\35\1\36\1\0\1\37\1\36"+ "\1\40\2\35\2\40\5\0\1\4\1\41\1\42\1\43"+ - "\3\0\1\2\4\0\1\4\1\44\1\45\1\46\1\4"+ - "\2\0\2\2\1\47\2\2\1\50\1\51\12\2\1\52"+ - "\3\2\1\53\2\2\1\54\4\2\1\55\1\56\1\57"+ - "\1\0\1\60\1\61\1\62\1\63\1\64\1\60\1\65"+ - "\2\0\2\66\1\0\1\67\1\70\1\2\1\0\1\71"+ - "\2\0\2\72\1\0\1\4\1\0\3\2\1\73\14\2"+ - "\1\74\11\2\1\75\1\76\1\0\1\77\2\0\1\46"+ - "\1\0\1\2\1\100\6\2\1\101\1\102\2\2\1\103"+ - "\3\2\1\104\1\2\1\105\2\2\1\106\3\2\1\0"+ - "\1\46\1\0\3\2\1\107\11\2\1\110\1\2\1\111"+ - "\1\2\1\112\1\2\1\0\1\113\1\114\2\2\1\115"+ - "\1\116\2\2\1\117\1\2\1\120\1\121\2\2\1\122"+ - "\3\2\1\123\1\124\2\2\1\125\2\2\1\126\1\127"+ - "\1\0\4\2\1\130\2\2\2\0\1\2\1\131\2\0"+ - "\2\2\2\0\1\2\2\0\1\132\1\2\2\0\1\133"+ - "\2\0\1\2\4\0\1\2\1\134\2\0\1\135\1\2"+ - "\2\0\1\136\2\0\1\137\1\0\1\140"; + "\3\0\1\2\4\0\1\44\1\4\1\45\1\46\1\47"+ + "\1\50\1\4\2\0\2\2\1\51\2\2\1\52\1\53"+ + "\12\2\1\54\3\2\1\55\2\2\1\56\4\2\1\57"+ + "\1\60\1\61\1\0\1\62\1\63\1\64\1\65\1\66"+ + "\1\62\1\67\2\0\2\70\1\0\1\71\1\72\1\2"+ + "\1\0\1\73\2\0\2\74\1\0\1\4\1\0\3\2"+ + "\1\75\14\2\1\76\11\2\1\77\1\100\1\0\1\101"+ + "\2\0\1\50\1\0\1\2\1\102\6\2\1\103\1\104"+ + "\2\2\1\105\3\2\1\106\1\2\1\107\2\2\1\110"+ + "\3\2\1\0\1\50\1\0\3\2\1\111\11\2\1\112"+ + "\1\2\1\113\1\2\1\114\1\2\1\0\1\115\1\116"+ + "\2\2\1\117\1\120\2\2\1\121\1\2\1\122\1\123"+ + "\2\2\1\124\3\2\1\125\1\126\2\2\1\127\2\2"+ + "\1\130\1\131\1\0\4\2\1\132\2\2\2\0\1\2"+ + "\1\133\2\0\2\2\2\0\1\2\2\0\1\134\1\2"+ + "\2\0\1\135\2\0\1\2\4\0\1\2\1\136\2\0"+ + "\1\137\1\2\2\0\1\140\2\0\1\141\1\0\1\142"; private static int [] zzUnpackAction() { - int [] result = new int[298]; + int [] result = new int[300]; int offset = 0; offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); return result; @@ -114,45 +114,45 @@ public class SCLLexer { private static final String ZZ_ROWMAP_PACKED_0 = "\0\0\0\76\0\174\0\272\0\272\0\370\0\u0136\0\u0174"+ "\0\u01b2\0\u01f0\0\u022e\0\u026c\0\u02aa\0\272\0\272\0\u02e8"+ - "\0\u0326\0\u0364\0\u03a2\0\u01b2\0\u03e0\0\u041e\0\u045c\0\272"+ - "\0\u049a\0\u04d8\0\u0516\0\u0554\0\u0592\0\u05d0\0\u060e\0\u064c"+ - "\0\u068a\0\u06c8\0\u0706\0\u0744\0\u0782\0\u07c0\0\u07fe\0\272"+ - "\0\272\0\272\0\272\0\u083c\0\u087a\0\272\0\u01b2\0\u08b8"+ - "\0\370\0\272\0\272\0\u08f6\0\u0934\0\u0972\0\272\0\272"+ - "\0\u09b0\0\u09ee\0\u0a2c\0\u08f6\0\272\0\u0a6a\0\u0aa8\0\u0ae6"+ - "\0\u0b24\0\u0b62\0\u0ba0\0\272\0\u0bde\0\u0c1c\0\u0c5a\0\u0c98"+ - "\0\u0cd6\0\u0d14\0\u0d52\0\u0d90\0\u0dce\0\u0e0c\0\u0e4a\0\u01b2"+ - "\0\u01b2\0\u0e88\0\u0ec6\0\u0f04\0\u0f42\0\u0f80\0\u0fbe\0\370"+ - "\0\u0ffc\0\u103a\0\370\0\u1078\0\u10b6\0\u10f4\0\u1132\0\u1170"+ - "\0\u11ae\0\u11ec\0\u122a\0\u1268\0\u12a6\0\u12e4\0\370\0\u1322"+ - "\0\u1360\0\u139e\0\370\0\u13dc\0\u141a\0\370\0\u1458\0\u1496"+ - "\0\u14d4\0\u1512\0\u01b2\0\u01b2\0\u01b2\0\u1550\0\272\0\272"+ - "\0\272\0\272\0\272\0\u158e\0\272\0\u15cc\0\u02e8\0\u160a"+ - "\0\u1648\0\u1648\0\272\0\272\0\272\0\u1686\0\272\0\u16c4"+ - "\0\u1702\0\272\0\u01b2\0\u1740\0\u177e\0\u17bc\0\u17fa\0\u1838"+ - "\0\u1876\0\370\0\u18b4\0\u18f2\0\u1930\0\u196e\0\u19ac\0\u19ea"+ - "\0\u1a28\0\u1a66\0\u1aa4\0\u1ae2\0\u1b20\0\u1b5e\0\370\0\u1b9c"+ - "\0\u1bda\0\u1c18\0\u1c56\0\u1c94\0\u1cd2\0\u1d10\0\u1d4e\0\u1d8c"+ - "\0\370\0\272\0\u1dca\0\272\0\u1e08\0\u1e46\0\u01b2\0\u1e84"+ - "\0\u1ec2\0\u1f00\0\u1f3e\0\u1f7c\0\u1fba\0\u1ff8\0\u2036\0\u2074"+ - "\0\370\0\370\0\u20b2\0\u20f0\0\370\0\u212e\0\u216c\0\u21aa"+ - "\0\370\0\u21e8\0\370\0\u2226\0\u2264\0\370\0\u22a2\0\u22e0"+ - "\0\u231e\0\u235c\0\272\0\u239a\0\u23d8\0\u2416\0\u2454\0\u2492"+ - "\0\u24d0\0\u250e\0\u254c\0\u258a\0\u25c8\0\u2606\0\u2644\0\u2682"+ - "\0\u26c0\0\370\0\u26fe\0\370\0\u273c\0\370\0\u277a\0\u27b8"+ - "\0\272\0\370\0\u27f6\0\u2834\0\370\0\370\0\u2872\0\u28b0"+ - "\0\u28ee\0\u292c\0\370\0\370\0\u296a\0\u29a8\0\u29e6\0\u2a24"+ - "\0\u2a62\0\u2aa0\0\272\0\370\0\u2ade\0\u2b1c\0\370\0\u2b5a"+ - "\0\u2b98\0\370\0\370\0\u2bd6\0\u2c14\0\u2c52\0\u2c90\0\u2cce"+ - "\0\370\0\u2d0c\0\u2d4a\0\u2d88\0\u2dc6\0\u2e04\0\370\0\u2e42"+ - "\0\u2e80\0\u2ebe\0\u2efc\0\u2f3a\0\u2f78\0\u2fb6\0\u2ff4\0\u3032"+ - "\0\370\0\u3070\0\u30ae\0\u30ec\0\370\0\u312a\0\u3168\0\u31a6"+ - "\0\u31e4\0\u3222\0\u3260\0\u329e\0\u32dc\0\272\0\u331a\0\u3358"+ - "\0\272\0\u3396\0\u33d4\0\u3412\0\370\0\u3450\0\u348e\0\272"+ - "\0\u34cc\0\272"; + "\0\u0326\0\u0364\0\u03a2\0\u03e0\0\u041e\0\u045c\0\u049a\0\272"+ + "\0\u04d8\0\u0516\0\u0554\0\u0592\0\u05d0\0\u060e\0\u064c\0\u068a"+ + "\0\u06c8\0\u0706\0\u0744\0\u0782\0\u07c0\0\u07fe\0\u083c\0\272"+ + "\0\272\0\272\0\272\0\u087a\0\u08b8\0\272\0\u01b2\0\u08f6"+ + "\0\370\0\272\0\272\0\u0934\0\u0972\0\u09b0\0\272\0\272"+ + "\0\u09ee\0\u0a2c\0\u0a6a\0\u0934\0\272\0\u0aa8\0\u0ae6\0\u0b24"+ + "\0\u0b62\0\u0ba0\0\u0bde\0\272\0\u0c1c\0\u0c5a\0\u0c98\0\u0cd6"+ + "\0\u0d14\0\u0d52\0\u0d90\0\u0dce\0\u0e0c\0\u0e4a\0\u01b2\0\u0e88"+ + "\0\u01b2\0\u01b2\0\u01b2\0\u0ec6\0\u0f04\0\u0f42\0\u0f80\0\u0fbe"+ + "\0\u0ffc\0\370\0\u103a\0\u1078\0\370\0\u10b6\0\u10f4\0\u1132"+ + "\0\u1170\0\u11ae\0\u11ec\0\u122a\0\u1268\0\u12a6\0\u12e4\0\u1322"+ + "\0\370\0\u1360\0\u139e\0\u13dc\0\370\0\u141a\0\u1458\0\370"+ + "\0\u1496\0\u14d4\0\u1512\0\u1550\0\u01b2\0\u01b2\0\u01b2\0\u158e"+ + "\0\272\0\272\0\272\0\272\0\272\0\u15cc\0\272\0\u160a"+ + "\0\u02e8\0\u1648\0\u1686\0\u1686\0\272\0\272\0\272\0\u16c4"+ + "\0\272\0\u1702\0\u1740\0\272\0\u01b2\0\u177e\0\u17bc\0\u17fa"+ + "\0\u1838\0\u1876\0\u18b4\0\370\0\u18f2\0\u1930\0\u196e\0\u19ac"+ + "\0\u19ea\0\u1a28\0\u1a66\0\u1aa4\0\u1ae2\0\u1b20\0\u1b5e\0\u1b9c"+ + "\0\370\0\u1bda\0\u1c18\0\u1c56\0\u1c94\0\u1cd2\0\u1d10\0\u1d4e"+ + "\0\u1d8c\0\u1dca\0\370\0\272\0\u1e08\0\272\0\u1e46\0\u1e84"+ + "\0\u01b2\0\u1ec2\0\u1f00\0\u1f3e\0\u1f7c\0\u1fba\0\u1ff8\0\u2036"+ + "\0\u2074\0\u20b2\0\370\0\370\0\u20f0\0\u212e\0\370\0\u216c"+ + "\0\u21aa\0\u21e8\0\370\0\u2226\0\370\0\u2264\0\u22a2\0\370"+ + "\0\u22e0\0\u231e\0\u235c\0\u239a\0\272\0\u23d8\0\u2416\0\u2454"+ + "\0\u2492\0\u24d0\0\u250e\0\u254c\0\u258a\0\u25c8\0\u2606\0\u2644"+ + "\0\u2682\0\u26c0\0\u26fe\0\370\0\u273c\0\370\0\u277a\0\370"+ + "\0\u27b8\0\u27f6\0\272\0\370\0\u2834\0\u2872\0\370\0\370"+ + "\0\u28b0\0\u28ee\0\u292c\0\u296a\0\370\0\370\0\u29a8\0\u29e6"+ + "\0\u2a24\0\u2a62\0\u2aa0\0\u2ade\0\272\0\370\0\u2b1c\0\u2b5a"+ + "\0\370\0\u2b98\0\u2bd6\0\370\0\370\0\u2c14\0\u2c52\0\u2c90"+ + "\0\u2cce\0\u2d0c\0\370\0\u2d4a\0\u2d88\0\u2dc6\0\u2e04\0\u2e42"+ + "\0\370\0\u2e80\0\u2ebe\0\u2efc\0\u2f3a\0\u2f78\0\u2fb6\0\u2ff4"+ + "\0\u3032\0\u3070\0\370\0\u30ae\0\u30ec\0\u312a\0\370\0\u3168"+ + "\0\u31a6\0\u31e4\0\u3222\0\u3260\0\u329e\0\u32dc\0\u331a\0\272"+ + "\0\u3358\0\u3396\0\272\0\u33d4\0\u3412\0\u3450\0\370\0\u348e"+ + "\0\u34cc\0\272\0\u350a\0\272"; private static int [] zzUnpackRowMap() { - int [] result = new int[298]; + int [] result = new int[300]; int offset = 0; offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); return result; @@ -202,264 +202,266 @@ public class SCLLexer { "\6\0\30\112\11\0\1\112\77\0\1\62\2\0\1\113"+ "\1\0\1\113\5\0\1\114\2\0\1\115\5\0\1\113"+ "\6\0\30\113\11\0\1\113\10\0\2\11\1\0\1\11"+ - "\3\0\1\116\2\0\1\11\1\117\1\11\1\0\1\120"+ - "\1\0\2\11\1\0\1\11\34\0\2\11\1\0\1\117"+ - "\12\0\2\11\1\0\1\11\6\0\2\11\1\121\1\0"+ + "\3\0\1\116\2\0\1\117\1\120\1\11\1\0\1\121"+ + "\1\0\2\11\1\0\1\11\34\0\2\11\1\0\1\120"+ + "\12\0\2\11\1\0\1\11\6\0\2\11\1\122\1\0"+ "\1\11\1\0\2\11\1\0\1\11\34\0\2\11\1\0"+ - "\1\11\31\0\1\26\56\0\2\11\1\0\1\11\6\0"+ - "\3\11\1\0\1\11\1\0\1\122\1\123\1\0\1\11"+ - "\34\0\2\11\1\0\1\11\12\0\2\11\1\0\1\11"+ - "\6\0\3\11\1\0\1\11\1\124\2\11\1\0\1\11"+ - "\21\0\1\125\12\0\2\11\1\0\1\11\6\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\1\6\1\126\26\6"+ - "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\14\6\1\127\13\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\12\6\1\130\2\6"+ - "\1\131\12\6\11\0\1\6\4\0\4\6\2\0\1\76"+ - "\12\0\1\6\6\0\10\6\1\132\17\6\11\0\1\6"+ - "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\1\133"+ - "\10\6\1\134\7\6\1\135\6\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\2\6\1\136"+ - "\4\6\1\137\16\6\1\140\1\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\5\6\1\141"+ - "\22\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\1\142\3\6\1\143\4\6\1\144\5\6"+ - "\1\145\1\146\3\6\1\147\3\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\10\6\1\150"+ - "\17\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\5\6\1\151\1\6\1\152\20\6\11\0"+ - "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ - "\26\6\1\153\1\6\11\0\1\6\4\0\4\6\2\0"+ - "\1\76\12\0\1\6\6\0\1\6\1\154\2\6\1\155"+ - "\23\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\1\6\1\156\1\6\1\157\4\6\1\160"+ - "\17\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\3\6\1\161\14\6\1\162\7\6\11\0"+ - "\1\6\10\0\2\11\1\0\1\11\6\0\2\11\1\163"+ + "\1\11\12\0\2\11\1\0\1\11\6\0\2\11\1\123"+ "\1\0\1\11\1\0\2\11\1\0\1\11\34\0\2\11"+ - "\1\0\1\11\12\0\2\11\1\0\1\11\6\0\3\11"+ - "\1\0\1\164\1\0\2\11\1\0\1\11\34\0\1\11"+ - "\1\165\1\0\1\11\76\0\1\166\4\0\15\64\1\0"+ - "\11\64\2\0\40\64\1\0\2\64\1\0\1\64\74\0"+ - "\1\70\1\0\4\167\1\170\4\167\1\171\3\167\1\0"+ - "\12\167\1\170\2\167\1\172\3\167\1\173\2\167\1\75"+ - "\2\167\1\174\23\167\1\170\1\167\2\0\1\167\74\0"+ - "\1\75\12\0\1\175\155\0\1\176\5\0\1\6\1\0"+ - "\1\6\10\0\1\177\5\0\1\6\6\0\30\6\11\0"+ - "\1\6\5\0\1\200\75\0\1\201\20\0\1\202\56\0"+ - "\1\203\71\0\27\101\1\0\46\101\15\0\1\103\6\0"+ - "\1\103\47\0\1\103\16\0\1\105\6\0\1\105\47\0"+ - "\1\105\2\0\4\106\15\0\1\106\6\0\30\106\11\0"+ - "\1\106\10\0\2\107\1\0\1\107\2\0\1\204\3\0"+ - "\3\107\1\0\1\107\1\0\2\107\1\0\1\107\34\0"+ - "\2\107\1\0\1\107\20\0\1\204\74\0\1\111\1\205"+ - "\63\0\4\112\15\0\1\112\6\0\30\112\11\0\1\112"+ - "\4\0\4\113\2\0\1\206\6\0\1\207\3\0\1\113"+ - "\6\0\30\113\11\0\1\113\15\0\1\210\64\0\1\211"+ - "\1\0\1\211\16\0\1\211\6\0\30\211\11\0\1\211"+ - "\24\0\1\212\61\0\2\11\1\0\1\11\6\0\2\11"+ - "\1\213\1\0\1\11\1\0\2\11\1\0\1\11\34\0"+ - "\2\11\1\0\1\11\5\0\15\122\1\0\56\122\1\0"+ - "\1\122\5\214\2\123\1\214\1\123\6\214\3\123\1\214"+ - "\1\123\1\214\1\123\1\215\1\214\1\123\34\214\2\123"+ - "\1\214\1\123\5\214\24\0\1\124\25\0\1\125\57\0"+ - "\1\216\42\0\4\6\2\0\1\76\12\0\1\6\6\0"+ - "\2\6\1\217\25\6\11\0\1\6\4\0\4\6\2\0"+ - "\1\76\12\0\1\6\6\0\4\6\1\220\23\6\11\0"+ - "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ - "\12\6\1\221\15\6\11\0\1\6\4\0\4\6\2\0"+ - "\1\76\12\0\1\6\6\0\6\6\1\222\21\6\11\0"+ + "\1\0\1\11\31\0\1\26\56\0\2\11\1\0\1\11"+ + "\6\0\3\11\1\0\1\11\1\0\1\124\1\125\1\0"+ + "\1\11\34\0\2\11\1\0\1\11\12\0\2\11\1\0"+ + "\1\11\6\0\3\11\1\0\1\11\1\126\2\11\1\0"+ + "\1\11\21\0\1\127\12\0\2\11\1\0\1\11\6\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\1\6\1\130"+ + "\26\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\14\6\1\131\13\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\12\6\1\132"+ + "\2\6\1\133\12\6\11\0\1\6\4\0\4\6\2\0"+ + "\1\76\12\0\1\6\6\0\10\6\1\134\17\6\11\0"+ "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ - "\1\223\11\6\1\224\3\6\1\225\11\6\11\0\1\6"+ - "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\22\6"+ - "\1\226\5\6\11\0\1\6\4\0\4\6\2\0\1\76"+ - "\12\0\1\6\6\0\3\6\1\227\24\6\11\0\1\6"+ + "\1\135\10\6\1\136\7\6\1\137\6\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\2\6"+ + "\1\140\4\6\1\141\16\6\1\142\1\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\5\6"+ + "\1\143\22\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\1\144\3\6\1\145\4\6\1\146"+ + "\5\6\1\147\1\150\3\6\1\151\3\6\11\0\1\6"+ "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\10\6"+ - "\1\230\17\6\11\0\1\6\4\0\4\6\2\0\1\76"+ - "\12\0\1\6\6\0\22\6\1\231\5\6\11\0\1\6"+ - "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\20\6"+ - "\1\232\7\6\11\0\1\6\4\0\4\6\2\0\1\76"+ - "\12\0\1\6\6\0\1\233\27\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\12\6\1\234"+ - "\15\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\1\235\27\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\6\6\1\236\21\6"+ - "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\1\6\1\237\26\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\4\6\1\240\23\6"+ - "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\6\6\1\241\21\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\10\6\1\242\17\6"+ - "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\11\6\1\243\16\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\3\6\1\244\24\6"+ + "\1\152\17\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\5\6\1\153\1\6\1\154\20\6"+ "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\6\6\1\245\21\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\2\6\1\246\25\6"+ + "\6\0\26\6\1\155\1\6\11\0\1\6\4\0\4\6"+ + "\2\0\1\76\12\0\1\6\6\0\1\6\1\156\2\6"+ + "\1\157\23\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\1\6\1\160\1\6\1\161\4\6"+ + "\1\162\17\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\3\6\1\163\14\6\1\164\7\6"+ + "\11\0\1\6\10\0\2\11\1\0\1\11\6\0\2\11"+ + "\1\165\1\0\1\11\1\0\2\11\1\0\1\11\34\0"+ + "\2\11\1\0\1\11\12\0\2\11\1\0\1\11\6\0"+ + "\3\11\1\0\1\166\1\0\2\11\1\0\1\11\34\0"+ + "\1\11\1\167\1\0\1\11\76\0\1\170\4\0\15\64"+ + "\1\0\11\64\2\0\40\64\1\0\2\64\1\0\1\64"+ + "\74\0\1\70\1\0\4\171\1\172\4\171\1\173\3\171"+ + "\1\0\12\171\1\172\2\171\1\174\3\171\1\175\2\171"+ + "\1\75\2\171\1\176\23\171\1\172\1\171\2\0\1\171"+ + "\74\0\1\75\12\0\1\177\155\0\1\200\5\0\1\6"+ + "\1\0\1\6\10\0\1\201\5\0\1\6\6\0\30\6"+ + "\11\0\1\6\5\0\1\202\75\0\1\203\20\0\1\204"+ + "\56\0\1\205\71\0\27\101\1\0\46\101\15\0\1\103"+ + "\6\0\1\103\47\0\1\103\16\0\1\105\6\0\1\105"+ + "\47\0\1\105\2\0\4\106\15\0\1\106\6\0\30\106"+ + "\11\0\1\106\10\0\2\107\1\0\1\107\2\0\1\206"+ + "\3\0\3\107\1\0\1\107\1\0\2\107\1\0\1\107"+ + "\34\0\2\107\1\0\1\107\20\0\1\206\74\0\1\111"+ + "\1\207\63\0\4\112\15\0\1\112\6\0\30\112\11\0"+ + "\1\112\4\0\4\113\2\0\1\210\6\0\1\211\3\0"+ + "\1\113\6\0\30\113\11\0\1\113\15\0\1\212\64\0"+ + "\1\213\1\0\1\213\16\0\1\213\6\0\30\213\11\0"+ + "\1\213\24\0\1\214\61\0\2\11\1\0\1\11\6\0"+ + "\2\11\1\215\1\0\1\11\1\0\2\11\1\0\1\11"+ + "\34\0\2\11\1\0\1\11\5\0\15\124\1\0\56\124"+ + "\1\0\1\124\5\216\2\125\1\216\1\125\6\216\3\125"+ + "\1\216\1\125\1\216\1\125\1\217\1\216\1\125\34\216"+ + "\2\125\1\216\1\125\5\216\24\0\1\126\25\0\1\127"+ + "\57\0\1\220\42\0\4\6\2\0\1\76\12\0\1\6"+ + "\6\0\2\6\1\221\25\6\11\0\1\6\4\0\4\6"+ + "\2\0\1\76\12\0\1\6\6\0\4\6\1\222\23\6"+ "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\6\6\1\247\13\6\1\250\5\6\11\0\1\6"+ - "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\1\6"+ - "\1\251\26\6\11\0\1\6\74\0\1\252\6\0\2\253"+ - "\16\0\1\253\6\0\1\253\2\0\1\253\4\0\1\253"+ - "\4\0\2\253\1\0\1\253\115\0\1\254\6\0\1\200"+ - "\17\0\1\100\16\0\1\100\36\0\1\201\74\0\1\113"+ - "\1\0\1\113\10\0\1\115\5\0\1\113\6\0\30\113"+ - "\11\0\1\113\15\0\1\210\1\255\63\0\4\211\11\0"+ - "\1\207\3\0\1\211\6\0\30\211\11\0\1\211\3\0"+ - "\26\214\1\256\54\214\2\123\1\214\1\123\6\214\3\123"+ - "\1\214\1\123\1\214\1\257\1\215\1\214\1\123\34\214"+ - "\2\123\1\214\1\123\5\214\37\0\1\260\37\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\3\6\1\261\24\6"+ + "\6\0\12\6\1\223\15\6\11\0\1\6\4\0\4\6"+ + "\2\0\1\76\12\0\1\6\6\0\6\6\1\224\21\6"+ "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\10\6\1\262\17\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\6\6\1\263\21\6"+ - "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\5\6\1\264\22\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\6\6\1\265\21\6"+ - "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\4\6\1\266\23\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\1\6\1\267\26\6"+ - "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\11\6\1\270\16\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\11\6\1\271\16\6"+ - "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\10\6\1\272\17\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\5\6\1\273\22\6"+ - "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\10\6\1\274\17\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\10\6\1\275\17\6"+ - "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\1\6\1\276\26\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\10\6\1\277\17\6"+ - "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\10\6\1\300\17\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\7\6\1\301\20\6"+ - "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\2\6\1\302\6\6\1\303\16\6\11\0\1\6"+ + "\6\0\1\225\11\6\1\226\3\6\1\227\11\6\11\0"+ + "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ + "\22\6\1\230\5\6\11\0\1\6\4\0\4\6\2\0"+ + "\1\76\12\0\1\6\6\0\3\6\1\231\24\6\11\0"+ + "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ + "\10\6\1\232\17\6\11\0\1\6\4\0\4\6\2\0"+ + "\1\76\12\0\1\6\6\0\22\6\1\233\5\6\11\0"+ + "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ + "\20\6\1\234\7\6\11\0\1\6\4\0\4\6\2\0"+ + "\1\76\12\0\1\6\6\0\1\235\27\6\11\0\1\6"+ "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\12\6"+ - "\1\304\15\6\11\0\1\6\4\0\4\6\2\0\1\76"+ - "\12\0\1\6\6\0\12\6\1\305\15\6\11\0\1\6"+ - "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\3\6"+ - "\1\306\24\6\11\0\1\6\4\0\4\6\2\0\1\76"+ - "\12\0\1\6\6\0\5\6\1\307\22\6\11\0\1\6"+ - "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\16\6"+ - "\1\310\11\6\11\0\1\6\4\0\4\6\2\0\1\76"+ - "\12\0\1\6\6\0\22\6\1\311\5\6\11\0\1\6"+ - "\5\0\2\312\16\0\1\312\6\0\1\312\2\0\1\312"+ - "\4\0\1\312\4\0\2\312\1\0\1\312\42\0\1\207"+ - "\57\0\25\214\1\313\1\256\47\214\47\0\1\314\27\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\4\6\1\315"+ + "\1\236\15\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\1\237\27\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\6\6\1\240"+ + "\21\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\1\6\1\241\26\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\4\6\1\242"+ "\23\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\12\6\1\316\15\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\2\6\1\317"+ - "\25\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\17\6\1\320\10\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\3\6\1\321"+ + "\1\6\6\0\6\6\1\243\21\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\10\6\1\244"+ + "\17\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\11\6\1\245\16\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\3\6\1\246"+ "\24\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\14\6\1\322\13\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\2\6\1\323"+ - "\25\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\12\6\1\324\15\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\11\6\1\325"+ - "\16\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\16\6\1\326\11\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\2\6\1\327"+ + "\1\6\6\0\6\6\1\247\21\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\2\6\1\250"+ "\25\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\11\6\1\330\16\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\16\6\1\331"+ - "\11\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\10\6\1\332\17\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\6\6\1\333"+ + "\1\6\6\0\6\6\1\251\13\6\1\252\5\6\11\0"+ + "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ + "\1\6\1\253\26\6\11\0\1\6\74\0\1\254\6\0"+ + "\2\255\16\0\1\255\6\0\1\255\2\0\1\255\4\0"+ + "\1\255\4\0\2\255\1\0\1\255\115\0\1\256\6\0"+ + "\1\202\17\0\1\100\16\0\1\100\36\0\1\203\74\0"+ + "\1\113\1\0\1\113\10\0\1\115\5\0\1\113\6\0"+ + "\30\113\11\0\1\113\15\0\1\212\1\257\63\0\4\213"+ + "\11\0\1\211\3\0\1\213\6\0\30\213\11\0\1\213"+ + "\3\0\26\216\1\260\54\216\2\125\1\216\1\125\6\216"+ + "\3\125\1\216\1\125\1\216\1\261\1\217\1\216\1\125"+ + "\34\216\2\125\1\216\1\125\5\216\37\0\1\262\37\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\3\6\1\263"+ + "\24\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\10\6\1\264\17\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\6\6\1\265"+ + "\21\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\5\6\1\266\22\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\6\6\1\267"+ "\21\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\12\6\1\334\15\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\25\6\1\335"+ - "\2\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\7\6\1\336\20\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\5\6\1\337"+ - "\22\6\11\0\1\6\5\0\2\340\16\0\1\340\6\0"+ - "\1\340\2\0\1\340\4\0\1\340\4\0\2\340\1\0"+ - "\1\340\64\0\1\341\36\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\4\6\1\342\23\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\10\6\1\343"+ + "\1\6\6\0\4\6\1\270\23\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\1\6\1\271"+ + "\26\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\11\6\1\272\16\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\11\6\1\273"+ + "\16\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\10\6\1\274\17\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\5\6\1\275"+ + "\22\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\10\6\1\276\17\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\10\6\1\277"+ + "\17\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\1\6\1\300\26\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\10\6\1\301"+ "\17\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\3\6\1\344\24\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\2\6\1\345"+ - "\1\6\1\346\23\6\11\0\1\6\4\0\4\6\2\0"+ - "\1\76\12\0\1\6\6\0\11\6\1\347\16\6\11\0"+ + "\1\6\6\0\10\6\1\302\17\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\7\6\1\303"+ + "\20\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\2\6\1\304\6\6\1\305\16\6\11\0"+ "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ - "\20\6\1\350\7\6\11\0\1\6\4\0\4\6\2\0"+ - "\1\76\12\0\1\6\6\0\6\6\1\351\21\6\11\0"+ + "\12\6\1\306\15\6\11\0\1\6\4\0\4\6\2\0"+ + "\1\76\12\0\1\6\6\0\12\6\1\307\15\6\11\0"+ "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ - "\1\352\27\6\11\0\1\6\4\0\4\6\2\0\1\76"+ - "\12\0\1\6\6\0\23\6\1\353\4\6\11\0\1\6"+ - "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\6\6"+ - "\1\354\21\6\11\0\1\6\4\0\4\6\2\0\1\76"+ - "\12\0\1\6\6\0\16\6\1\355\11\6\11\0\1\6"+ - "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\20\6"+ - "\1\356\7\6\11\0\1\6\4\0\4\6\2\0\1\76"+ - "\12\0\1\6\6\0\6\6\1\357\21\6\11\0\1\6"+ + "\3\6\1\310\24\6\11\0\1\6\4\0\4\6\2\0"+ + "\1\76\12\0\1\6\6\0\5\6\1\311\22\6\11\0"+ + "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ + "\16\6\1\312\11\6\11\0\1\6\4\0\4\6\2\0"+ + "\1\76\12\0\1\6\6\0\22\6\1\313\5\6\11\0"+ + "\1\6\5\0\2\314\16\0\1\314\6\0\1\314\2\0"+ + "\1\314\4\0\1\314\4\0\2\314\1\0\1\314\42\0"+ + "\1\211\57\0\25\216\1\315\1\260\47\216\47\0\1\316"+ + "\27\0\4\6\2\0\1\76\12\0\1\6\6\0\4\6"+ + "\1\317\23\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\12\6\1\320\15\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\2\6"+ + "\1\321\25\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\17\6\1\322\10\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\3\6"+ + "\1\323\24\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\14\6\1\324\13\6\11\0\1\6"+ "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\2\6"+ - "\1\360\25\6\11\0\1\6\4\0\4\6\2\0\1\76"+ - "\12\0\1\6\6\0\5\6\1\361\22\6\11\0\1\6"+ + "\1\325\25\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\12\6\1\326\15\6\11\0\1\6"+ "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\11\6"+ - "\1\362\16\6\11\0\1\6\5\0\2\363\16\0\1\363"+ - "\6\0\1\363\2\0\1\363\4\0\1\363\4\0\2\363"+ - "\1\0\1\363\25\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\6\6\1\364\21\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\16\6\1\365\11\6"+ + "\1\327\16\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\16\6\1\330\11\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\2\6"+ + "\1\331\25\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\11\6\1\332\16\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\16\6"+ + "\1\333\11\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\10\6\1\334\17\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\6\6"+ + "\1\335\21\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\12\6\1\336\15\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\25\6"+ + "\1\337\2\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\7\6\1\340\20\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\5\6"+ + "\1\341\22\6\11\0\1\6\5\0\2\342\16\0\1\342"+ + "\6\0\1\342\2\0\1\342\4\0\1\342\4\0\2\342"+ + "\1\0\1\342\64\0\1\343\36\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\4\6\1\344\23\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\10\6"+ + "\1\345\17\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\3\6\1\346\24\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\2\6"+ + "\1\347\1\6\1\350\23\6\11\0\1\6\4\0\4\6"+ + "\2\0\1\76\12\0\1\6\6\0\11\6\1\351\16\6"+ "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\16\6\1\366\11\6\11\0\1\6\4\0\4\6"+ - "\2\0\1\76\12\0\1\6\6\0\10\6\1\367\17\6"+ + "\6\0\20\6\1\352\7\6\11\0\1\6\4\0\4\6"+ + "\2\0\1\76\12\0\1\6\6\0\6\6\1\353\21\6"+ "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ - "\6\0\27\6\1\370\11\0\1\6\4\0\4\6\2\0"+ - "\1\76\12\0\1\6\6\0\1\6\1\371\26\6\11\0"+ + "\6\0\1\354\27\6\11\0\1\6\4\0\4\6\2\0"+ + "\1\76\12\0\1\6\6\0\23\6\1\355\4\6\11\0"+ "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ - "\10\6\1\372\17\6\11\0\1\6\4\0\4\6\2\0"+ - "\1\76\12\0\1\6\6\0\12\6\1\373\15\6\11\0"+ - "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\1\0"+ - "\1\374\4\0\30\6\11\0\1\6\4\0\4\6\2\0"+ - "\1\76\12\0\1\6\6\0\3\6\1\375\24\6\11\0"+ + "\6\6\1\356\21\6\11\0\1\6\4\0\4\6\2\0"+ + "\1\76\12\0\1\6\6\0\16\6\1\357\11\6\11\0"+ "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ - "\11\6\1\376\16\6\11\0\1\6\4\0\4\6\2\0"+ - "\1\76\12\0\1\6\6\0\23\6\1\377\4\6\11\0"+ + "\20\6\1\360\7\6\11\0\1\6\4\0\4\6\2\0"+ + "\1\76\12\0\1\6\6\0\6\6\1\361\21\6\11\0"+ "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ - "\6\6\1\u0100\21\6\11\0\1\6\4\0\4\6\2\0"+ - "\1\76\12\0\1\6\6\0\10\6\1\u0101\17\6\11\0"+ + "\2\6\1\362\25\6\11\0\1\6\4\0\4\6\2\0"+ + "\1\76\12\0\1\6\6\0\5\6\1\363\22\6\11\0"+ "\1\6\4\0\4\6\2\0\1\76\12\0\1\6\6\0"+ - "\3\6\1\u0102\24\6\11\0\1\6\4\0\4\6\2\0"+ - "\1\76\12\0\1\6\6\0\2\6\1\u0103\25\6\11\0"+ - "\1\6\27\0\1\374\4\0\1\u0104\17\0\1\u0105\25\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\5\6\1\u0106"+ - "\22\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\23\6\1\u0107\4\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\1\0\1\u0108\4\0"+ - "\30\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\1\0\1\u0109\4\0\30\6\11\0\1\6\4\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\25\6\1\u010a"+ - "\2\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\21\6\1\u010b\6\6\11\0\1\6\41\0"+ - "\1\u010c\75\0\1\u010d\40\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\11\6\1\u010e\16\6\11\0\1\6\27\0"+ - "\1\u0108\6\0\1\u010f\66\0\1\u0109\6\0\1\u0110\43\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\3\6\1\u0111"+ - "\24\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\3\6\1\u0112\24\6\11\0\1\6\36\0"+ - "\1\u0113\105\0\1\u0114\33\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\6\6\1\u0115\21\6\11\0\1\6\44\0"+ - "\1\u0116\101\0\1\u0117\31\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\6\6\1\u0118\21\6\11\0\1\6\46\0"+ - "\1\u0119\71\0\1\u011a\73\0\1\u011b\75\0\1\u011c\41\0"+ - "\4\6\2\0\1\76\12\0\1\6\6\0\5\6\1\u011d"+ - "\22\6\11\0\1\6\42\0\1\u011e\74\0\1\u011f\73\0"+ - "\1\u0120\102\0\1\u0121\35\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\1\6\1\u0122\26\6\11\0\1\6\45\0"+ - "\1\u0123\72\0\1\u0124\37\0\4\6\2\0\1\76\12\0"+ - "\1\6\6\0\11\6\1\u0125\16\6\11\0\1\6\52\0"+ - "\1\u0126\64\0\1\u0127\76\0\1\u0128\70\0\1\u0129\105\0"+ - "\1\u012a\33\0"; + "\11\6\1\364\16\6\11\0\1\6\5\0\2\365\16\0"+ + "\1\365\6\0\1\365\2\0\1\365\4\0\1\365\4\0"+ + "\2\365\1\0\1\365\25\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\6\6\1\366\21\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\16\6\1\367"+ + "\11\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\16\6\1\370\11\6\11\0\1\6\4\0"+ + "\4\6\2\0\1\76\12\0\1\6\6\0\10\6\1\371"+ + "\17\6\11\0\1\6\4\0\4\6\2\0\1\76\12\0"+ + "\1\6\6\0\27\6\1\372\11\0\1\6\4\0\4\6"+ + "\2\0\1\76\12\0\1\6\6\0\1\6\1\373\26\6"+ + "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ + "\6\0\10\6\1\374\17\6\11\0\1\6\4\0\4\6"+ + "\2\0\1\76\12\0\1\6\6\0\12\6\1\375\15\6"+ + "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ + "\1\0\1\376\4\0\30\6\11\0\1\6\4\0\4\6"+ + "\2\0\1\76\12\0\1\6\6\0\3\6\1\377\24\6"+ + "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ + "\6\0\11\6\1\u0100\16\6\11\0\1\6\4\0\4\6"+ + "\2\0\1\76\12\0\1\6\6\0\23\6\1\u0101\4\6"+ + "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ + "\6\0\6\6\1\u0102\21\6\11\0\1\6\4\0\4\6"+ + "\2\0\1\76\12\0\1\6\6\0\10\6\1\u0103\17\6"+ + "\11\0\1\6\4\0\4\6\2\0\1\76\12\0\1\6"+ + "\6\0\3\6\1\u0104\24\6\11\0\1\6\4\0\4\6"+ + "\2\0\1\76\12\0\1\6\6\0\2\6\1\u0105\25\6"+ + "\11\0\1\6\27\0\1\376\4\0\1\u0106\17\0\1\u0107"+ + "\25\0\4\6\2\0\1\76\12\0\1\6\6\0\5\6"+ + "\1\u0108\22\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\23\6\1\u0109\4\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\1\0\1\u010a"+ + "\4\0\30\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\1\0\1\u010b\4\0\30\6\11\0\1\6"+ + "\4\0\4\6\2\0\1\76\12\0\1\6\6\0\25\6"+ + "\1\u010c\2\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\21\6\1\u010d\6\6\11\0\1\6"+ + "\41\0\1\u010e\75\0\1\u010f\40\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\11\6\1\u0110\16\6\11\0\1\6"+ + "\27\0\1\u010a\6\0\1\u0111\66\0\1\u010b\6\0\1\u0112"+ + "\43\0\4\6\2\0\1\76\12\0\1\6\6\0\3\6"+ + "\1\u0113\24\6\11\0\1\6\4\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\3\6\1\u0114\24\6\11\0\1\6"+ + "\36\0\1\u0115\105\0\1\u0116\33\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\6\6\1\u0117\21\6\11\0\1\6"+ + "\44\0\1\u0118\101\0\1\u0119\31\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\6\6\1\u011a\21\6\11\0\1\6"+ + "\46\0\1\u011b\71\0\1\u011c\73\0\1\u011d\75\0\1\u011e"+ + "\41\0\4\6\2\0\1\76\12\0\1\6\6\0\5\6"+ + "\1\u011f\22\6\11\0\1\6\42\0\1\u0120\74\0\1\u0121"+ + "\73\0\1\u0122\102\0\1\u0123\35\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\1\6\1\u0124\26\6\11\0\1\6"+ + "\45\0\1\u0125\72\0\1\u0126\37\0\4\6\2\0\1\76"+ + "\12\0\1\6\6\0\11\6\1\u0127\16\6\11\0\1\6"+ + "\52\0\1\u0128\64\0\1\u0129\76\0\1\u012a\70\0\1\u012b"+ + "\105\0\1\u012c\33\0"; private static int [] zzUnpackTrans() { - int [] result = new int[13578]; + int [] result = new int[13640]; int offset = 0; offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); return result; @@ -500,7 +502,7 @@ public class SCLLexer { "\3\0\1\10\1\11\10\1\2\11\10\1\1\11\17\1"+ "\4\11\2\1\1\11\3\1\2\11\2\1\1\0\2\11"+ "\4\1\1\11\5\0\1\1\1\11\2\1\3\0\1\1"+ - "\4\0\5\1\2\0\40\1\1\0\5\11\1\1\1\11"+ + "\4\0\7\1\2\0\40\1\1\0\5\11\1\1\1\11"+ "\2\0\2\1\1\0\3\11\1\0\1\11\2\0\1\11"+ "\1\1\1\0\1\1\1\0\33\1\1\11\1\0\1\11"+ "\2\0\1\1\1\0\31\1\1\0\1\11\1\0\23\1"+ @@ -510,7 +512,7 @@ public class SCLLexer { "\1\1\2\0\1\1\2\0\1\11\1\0\1\11"; private static int [] zzUnpackAttribute() { - int [] result = new int[298]; + int [] result = new int[300]; int offset = 0; offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); return result; @@ -928,11 +930,11 @@ public class SCLLexer { case STRING: { throw new SCLSyntaxErrorException(Locations.location(stringStart, yychar), "Unclosed string literal."); } - case 299: break; + case 301: break; case LONG_STRING: { throw new SCLSyntaxErrorException(Locations.location(stringStart, yychar), "Unclosed string literal."); } - case 300: break; + case 302: break; default: { return sym(SCLTerminals.EOF); } @@ -943,39 +945,39 @@ public class SCLLexer { case 1: { throw new SCLSyntaxErrorException(Locations.location(yychar, yychar+1), "Illegal character '" + yytext() + "'."); } - case 97: break; + case 99: break; case 2: { return sym(SCLTerminals.ID); } - case 98: break; + case 100: break; case 3: { return sym(SCLTerminals.INTEGER); } - case 99: break; + case 101: break; case 4: { return sym(SCLTerminals.SYMBOL, yytext().trim()); } - case 100: break; + case 102: break; case 5: { return sym(SCLTerminals.ATTACHED_HASH, "#"); } - case 101: break; + case 103: break; case 6: { return sym(SCLTerminals.ATTACHED_DOT, "."); } - case 102: break; + case 104: break; case 7: { return sym(SCLTerminals.AT); } - case 103: break; + case 105: break; case 8: { ++parenCount; return sym(SCLTerminals.LPAREN); } - case 104: break; + case 106: break; case 9: { return sym(SCLTerminals.COMMA); } - case 105: break; + case 107: break; case 10: { --parenCount; if(parenCount == 0 && !parenCountStack.isEmpty()) { @@ -988,363 +990,371 @@ public class SCLLexer { else return sym(SCLTerminals.RPAREN); } - case 106: break; + case 108: break; case 11: { return new Token(SCLTerminals.EOL, yychar, yychar+yylength(), ""); } - case 107: break; + case 109: break; case 12: { return sym(SCLTerminals.LESS, "<"); } - case 108: break; + case 110: break; case 13: { return sym(SCLTerminals.GREATER, ">"); } - case 109: break; + case 111: break; case 14: { return sym(SCLTerminals.MINUS, "-"); } - case 110: break; + case 112: break; case 15: { } - case 111: break; + case 113: break; case 16: { throw new SCLSyntaxErrorException(Locations.location(yychar, yychar+1), "Character does not conform to UTF-8 encoding."); } - case 112: break; + case 114: break; case 17: { return sym(SCLTerminals.LAMBDA); } - case 113: break; + case 115: break; case 18: { return sym(SCLTerminals.LBRACE); } - case 114: break; + case 116: break; case 19: { return sym(SCLTerminals.RBRACE); } - case 115: break; + case 117: break; case 20: { return sym(SCLTerminals.LBRACKET); } - case 116: break; + case 118: break; case 21: { return sym(SCLTerminals.RBRACKET); } - case 117: break; + case 119: break; case 22: { return sym(SCLTerminals.EQUALS); } - case 118: break; + case 120: break; case 23: { return sym(SCLTerminals.COLON); } - case 119: break; + case 121: break; case 24: { return sym(SCLTerminals.SEMICOLON); } - case 120: break; + case 122: break; case 25: { return sym(SCLTerminals.BAR); } - case 121: break; + case 123: break; case 26: { string.setLength(0); stringStart=yychar; yybegin(STRING); return sym(SCLTerminals.BEGIN_STRING); } - case 122: break; + case 124: break; case 27: { return sym(SCLTerminals.BLANK); } - case 123: break; + case 125: break; case 28: { throw new SCLSyntaxErrorException(Locations.location(yychar, yychar+1), "Tabulator is not allowed except inside string literals."); } - case 124: break; + case 126: break; case 29: { string.append( yytext() ); } - case 125: break; + case 127: break; case 30: { throw new SCLSyntaxErrorException(Locations.location(stringStart, yychar), "Unclosed string literal."); } - case 126: break; + case 128: break; case 31: { yybegin(YYINITIAL); return new Token(SCLTerminals.END_STRING, stringStart, yychar+1, string.toString()); } - case 127: break; + case 129: break; case 32: { string.append('\n'); } - case 128: break; + case 130: break; case 33: { return sym(SCLTerminals.DOTDOT, "."); } - case 129: break; + case 131: break; case 34: { return sym(SCLTerminals.SEPARATED_DOT, "."); } - case 130: break; + case 132: break; case 35: { return sym(SCLTerminals.ANNOTATION_ID); } - case 131: break; + case 133: break; case 36: - { return sym(SCLTerminals.BINDS); + { return sym(SCLTerminals.DOUBLE_LESS, "<<"); } - case 132: break; + case 134: break; case 37: - { return sym(SCLTerminals.ARROW); + { return sym(SCLTerminals.BINDS); } - case 133: break; + case 135: break; case 38: - { return sym(SCLTerminals.COMMENT); + { return sym(SCLTerminals.DOUBLE_GREATER, ">>"); } - case 134: break; + case 136: break; case 39: - { return sym(SCLTerminals.AS); + { return sym(SCLTerminals.ARROW); } - case 135: break; + case 137: break; case 40: - { return sym(SCLTerminals.IF); + { return sym(SCLTerminals.COMMENT); } - case 136: break; + case 138: break; case 41: - { return sym(SCLTerminals.IN); + { return sym(SCLTerminals.AS); } - case 137: break; + case 139: break; case 42: - { return sym(options.supportEq ? SCLTerminals.EQ : SCLTerminals.ID); + { return sym(SCLTerminals.IF); } - case 138: break; + case 140: break; case 43: - { return sym(SCLTerminals.BY); + { return sym(SCLTerminals.IN); } - case 139: break; + case 141: break; case 44: - { return sym(SCLTerminals.DO); + { return sym(options.supportEq ? SCLTerminals.EQ : SCLTerminals.ID); } - case 140: break; + case 142: break; case 45: - { return sym(SCLTerminals.IMPLIES); + { return sym(SCLTerminals.BY); } - case 141: break; + case 143: break; case 46: - { return sym(SCLTerminals.FOLLOWS); + { return sym(SCLTerminals.DO); } - case 142: break; + case 144: break; case 47: - { return sym(SCLTerminals.HASTYPE); + { return sym(SCLTerminals.IMPLIES); } - case 143: break; + case 145: break; case 48: - { throw new SCLSyntaxErrorException(Locations.location(stringStart, yychar), "Illegal string escape character."); + { return sym(SCLTerminals.FOLLOWS); } - case 144: break; + case 146: break; case 49: - { string.append(yytext().substring(1)); + { return sym(SCLTerminals.HASTYPE); } - case 145: break; + case 147: break; case 50: + { throw new SCLSyntaxErrorException(Locations.location(stringStart, yychar), "Illegal string escape character."); + } + case 148: break; + case 51: + { string.append(yytext().substring(1)); + } + case 149: break; + case 52: { parenCountStack.add(parenCount); parenCount = 1; stateStack.add(STRING); yybegin(YYINITIAL); return new Token(SCLTerminals.SUSPEND_STRING, stringStart, yychar+1, string.toString()); } - case 146: break; - case 51: + case 150: break; + case 53: { string.append('\r'); } - case 147: break; - case 52: + case 151: break; + case 54: { string.append('\t'); } - case 148: break; - case 53: + case 152: break; + case 55: { parenCountStack.add(parenCount); parenCount = 1; stateStack.add(LONG_STRING); yybegin(YYINITIAL); return new Token(SCLTerminals.SUSPEND_STRING, stringStart, yychar+1, string.toString()); } - case 149: break; - case 54: + case 153: break; + case 56: { return sym(SCLTerminals.FLOAT); } - case 150: break; - case 55: + case 154: break; + case 57: { return sym(SCLTerminals.CHAR); } - case 151: break; - case 56: + case 155: break; + case 58: { String text = yytext(); return sym(SCLTerminals.ID, text.substring(1, text.length()-1)); } - case 152: break; - case 57: + case 156: break; + case 59: { String text = yytext(); return sym(SCLTerminals.SYMBOL, text.substring(1, text.length()-1)); } - case 153: break; - case 58: + case 157: break; + case 60: { return sym(SCLTerminals.QUERY_OP); } - case 154: break; - case 59: + case 158: break; + case 61: { return sym(SCLTerminals.LET); } - case 155: break; - case 60: + case 159: break; + case 62: { return sym(supportEDO() ? SCLTerminals.EDO : SCLTerminals.ID); } - case 156: break; - case 61: + case 160: break; + case 63: { return sym(SCLTerminals.MDO); } - case 157: break; - case 62: + case 161: break; + case 64: { string.setLength(0); stringStart=yychar; yybegin(LONG_STRING); return sym(SCLTerminals.BEGIN_STRING); } - case 158: break; - case 63: + case 162: break; + case 65: { yybegin(YYINITIAL); return new Token(SCLTerminals.END_STRING, stringStart, yychar+3, string.toString()); } - case 159: break; - case 64: + case 163: break; + case 66: { return sym(supportCHR() ? SCLTerminals.ID : SCLTerminals.RULE); } - case 160: break; - case 65: + case 164: break; + case 67: { return sym(SCLTerminals.THEN); } - case 161: break; - case 66: + case 165: break; + case 68: { return sym(SCLTerminals.TYPE); } - case 162: break; - case 67: + case 166: break; + case 69: { return sym(SCLTerminals.ELSE); } - case 163: break; - case 68: + case 167: break; + case 70: { return sym(SCLTerminals.WITH); } - case 164: break; - case 69: + case 168: break; + case 71: { return sym(SCLTerminals.WHEN); } - case 165: break; - case 70: + case 169: break; + case 72: { return sym(SCLTerminals.DATA); } - case 166: break; - case 71: + case 170: break; + case 73: { return sym(SCLTerminals.INFIX); } - case 167: break; - case 72: + case 171: break; + case 74: { return sym(SCLTerminals.WHERE); } - case 168: break; - case 73: + case 172: break; + case 75: { return sym(SCLTerminals.CLASS); } - case 169: break; - case 74: + case 173: break; + case 76: { return sym(SCLTerminals.MATCH); } - case 170: break; - case 75: + case 174: break; + case 77: { return sym(SCLTerminals.LAMBDA_MATCH); } - case 171: break; - case 76: + case 175: break; + case 78: { return sym(SCLTerminals.FORALL); } - case 172: break; - case 77: + case 176: break; + case 79: { return sym(SCLTerminals.INFIXR); } - case 173: break; - case 78: + case 177: break; + case 80: { return sym(SCLTerminals.INFIXL); } - case 174: break; - case 79: + case 178: break; + case 81: { return sym(SCLTerminals.IMPORT); } - case 175: break; - case 80: + case 179: break; + case 82: { return sym(SCLTerminals.HIDING); } - case 176: break; - case 81: + case 180: break; + case 83: { return sym(SCLTerminals.EFFECT); } - case 177: break; - case 82: + case 181: break; + case 84: { return sym(supportCHR() ? SCLTerminals.CHR_SELECT : SCLTerminals.SELECT); } - case 178: break; - case 83: + case 182: break; + case 85: { string.append((char)Integer.parseInt(yytext().substring(2), 16)); } - case 179: break; - case 84: + case 183: break; + case 86: { return sym(supportCHR() ? SCLTerminals.RULESET : SCLTerminals.ID); } - case 180: break; - case 85: + case 184: break; + case 87: { return sym(SCLTerminals.INCLUDE); } - case 181: break; - case 86: + case 185: break; + case 88: { return sym(SCLTerminals.ENFORCE); } - case 182: break; - case 87: + case 186: break; + case 89: { return sym(SCLTerminals.EXTENDS); } - case 183: break; - case 88: + case 187: break; + case 90: { return sym(SCLTerminals.INSTANCE); } - case 184: break; - case 89: + case 188: break; + case 91: { return sym(SCLTerminals.DERIVING); } - case 185: break; - case 90: + case 189: break; + case 92: { return sym(SCLTerminals.IMPORTJAVA); } - case 186: break; - case 91: + case 190: break; + case 93: { return sym(SCLTerminals.CONSTRAINT); } - case 187: break; - case 92: + case 191: break; + case 94: { return sym(SCLTerminals.SELECT_FIRST); } - case 188: break; - case 93: + case 192: break; + case 95: { return sym(SCLTerminals.ABSTRACT_RULE); } - case 189: break; - case 94: + case 193: break; + case 96: { return sym(supportCHR() ? SCLTerminals.ID : SCLTerminals.TRANSFORMATION); } - case 190: break; - case 95: + case 194: break; + case 97: { return sym(SCLTerminals.SELECT_DISTINCT); } - case 191: break; - case 96: + case 195: break; + case 98: { return sym(SCLTerminals.MAPPING_RELATION); } - case 192: break; + case 196: break; default: zzScanError(ZZ_NO_MATCH); } diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParser.dat b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParser.dat index c24abdb0f00e248cb7844d94fee23ae2c4d6b63b..69770a94064cca1633e4666371b7ed60f445a4f5 100644 GIT binary patch literal 25666 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 literal 25352 zcmcg!3A`OudH?2Z+4t>*C7cU^B!sZk!u!te`_6a1^DSq- zv&@}&$%r^OL?oI94)uhy6sK+!ne=Os$!B|6U1ZuW;89a&;$^B&o5^=8c6=Z8_aML8 z*L41K;OA6EIWam}>nWFujG6@=KAc|Y$5^J^r+U#HsK4Ru`cMg+CFGA!PiJcw5!#sa2d|@1&4*)ldbj^T#XVj;{=2+F~x(n@xRIlrI zsBvxG^O2_qp@V#JT-~d*2GyKW_5+p8ehf8iSa*NY%OUFN(tc3sIRb<^Bfz%jdem+C zbMnul?-|YCsMAruANXzHDs=uZKEC^Du;b35iJ@HeX7m@j&LRP;aQ z7g~>-WKB=`yJqGBIEV~UIM&V$H^RxdqVY?kMW~* zj>j)S{%%G4X5g1ZW-LRl-+&%+;A+HjYXmiYPV0x>ub?*(c)Q21LLb06<@|E)xqfCH z2;0+P^AU7_qo4CQac|TZU+?5JC%s=&z1|bF zp74RhFeF4|A8*G1!I#HP$JJ?BMLEx7@CmoF%z&*}3_uQ;2kyGpe;>?di4u8|1 zLK|m-n;Ym&dnc`QkFe%kavr8%;bpL)%&jx%&){4^#+)+-=aK8k0rK6u9x{8@ zws8!U^ID0#z8wz6^*!eid!IbdD(;bhvwntg0N8ebv2uMfmRqBK4{@yAy8-Cm0rXmG zHadWvK%N=hK{^#1k(Qm;1u9=Aoj290Ne>U7q~lcVFvdCzX-TDa37EKyB`qi zOppsX0Ep{#F%LqGedXeE3LS@~*ZxqM$X8!PK&QRNi*4Pw2kvP9l5mq)vqoy^W=7qg?8QaRY{VS3Gcv%u_W zb~k66)684vU{asBDvJuVj|mVJI!vkQzk|e zO;-Yl7R!GpiFqhVDm%+@(Jquh+M_kNL&!--Xlotq)z&_swJmGSSXjMgUNE!dRk=zw zn8(eh%%7RFjHRaeBzhO3{)E}v{AsjrxHi|fhgsixZPA{U3F)=LYMn+ibDe%9_n2EM z7uiX6lDrRin|v%u>{a$EQswMb@_dj)5jkyz-XLKe?b9yRX!J#pdz{zhcDXszf|f0^ zLy@M;ZkK8lyFAq7?6LM(IhV9-QJZ#c>1>zyD947{g0oBQQkg?qw&2Z8Crf!d(^+5MD~ zD^rTK^HLuL-U&X=UG^^UplLA&rF@>tYMaHOKPy$4j{@%mdzU#J^gw%{QgUTVv36eS zqrf}C$LX>-`E8dRZNagmT#&TZ)XtZ@)JJjm73~GR!``8kT$xg=otOG(@J{e?4zRcr zS$Db~(QeH3^n_&7(~qrrogEydb-sgDBh1bPR3kA06) za%Bp&WmUUos}J`3D9zf%xz*kZ&0Ed+tO?-%N}e!(i{F4hR0*jxQl6Z-u(iFdmfUA9 zhVS><_bMeLShx z7kPzzL9hya&qeY(a?+t4 zcUM#mdx_Tak*tNiM2oZae2}R{wiSE?59~vXTkI{QxV9&?2a>{b!d|GwMe}@+sYSNc z?t^`Zv&OC=Rdk-#Se!9=uor7_I-UNXr(vqexRdWqW+I zd7-x8>}mEirR2(#V(q-tM}c>Ok8_wk3_NJrf^*=5dELAZ9|hhCw8+xDhhjrWV;&-UlUiik(7=cdE^|rS|%^K(1-8*W#jiKFHJ}+sgZ(#JbayRB*Re zu-B7C%?oN7-64_dYqYv-jt3cM5O9rRuHU8Fb_C#W1xQphAFS!i!Z$p274#!=gzVoy;@ zu1qP`&P#PH^iJ?`_O<(h2S)y{61d7qs*$DC$U@}Lh^%beyuH$1iD;l@OR;udsJ;hlUMYwoadfp;01&t6}A;LMy z_sUt2zsa_S&PQ&S+u3$DqV1umUZP!x?ya1K?XVq)gk3>Y5EHoVUE94aeqj)0L+~y0 zR1(_Tqn6Loi`~KQfJpxc+!(ydA%WZ8b#y_}K+Jb4s(0}xX&OuXNuEju=eDMAceA@8 z5>T4=?h3B9445I@zvcK!FV_9}RzUHaC&Kk9m_PFMM}uU0)%I+AHm;3$WAJGn3|uM; zlC9U~9b4}UJ$9_ciR|#^AdAkBeWNpRwP)I6 zYNsL^FonqfzK#4Fv9xEnoZZRpglNDND#xe%_T}t!I~~!0DMbERIhAZLPTYMOgj_T z22A1Y+W{Iw{sh-|cZl~k-n-AVxNj0i0<5w4tx6mTu)Ek@5DhpIU@NwQXuy#GJHz5x zi8vBqceQw;A&vytQFauf0Y?JtN=8xo_Q$gqxM+@!K(t{>=qI#@h$t7$NeGJUee_8=N?B*2cd;}8uv z5->fQc1V{@dKj^`0At4NBT3aIbL zP3Wt(E2~mapz>1;PjGuDj=@!dgcjuijK#72GOd6Wmz&!|&BIx=ww0vMlyJ z4Gy;+&#B=*iLI?CjVKh8)G z!u)~SO&bmV|Jv%4*Y?VSzNa4@-6i!EQ}4rn=yS?ptQ!|5b%Am(l#_wJwJvg_npEp? z97$&%9QHTI%Gm(83&e$S4Il?x18xyy$BOU^5dMMc+FrwaAg_%TQ@@oPYt8jJQb&@) zf~jJx$g7TZLz29Xr1cH>_)eS32u=bnMyb^s$Y9LrttU5aTnPIIY6w5M@9EVik_}hq1=Eu+F|JriyDop{~hsjcPSXumoc)LG+{H`@$Niwd^gOts1ld4U+6w z2L=W(R={zh`@xPRH4Pd))y}l7cxdCOQs*}4#k_|dm&FiyO>8s(}!&w{mOXKCA(xYARASHo>liT3-zW z>lIVoT(2kUdfhad8S#M!A!aHwI#2Z*0nN;qi>$CjqDmol83Qgb=QWmHZWG_5G0$|aAv)ULnHL}udfA` zbxe|G2fL}7-CN9_%U}}L>({f&dMk2S4{HG1g=-)N;u!cPh&u*xK?7@&YBCVV?C=mK z$u)W3>aRZ^4kXIlozCkfv74mdgeK}OzpaAyB|mhs#s*egL}9G`HA)naS9jm4xxDtT zr?_pPeCZ>eX_K{&Ho*K;FAm-C3*<|f=WJCfhLa3N&`tk`5DDbA!S8GuKe z*f;SvA=UtwQc?qA32w&mt_y`iLapX1Ph4Ib8?vI*Gk%gjjeEhX%drNI>WgpxJ#HLs z*tIGRV&Ip_AUtE>$N=LnpYkNZ`3mqJw~&8@%1Mm`kl$Ng*(W2vYvb4%I^varz+Ja` z^rEbCQhyK%u?ydvgJ6ofmf>47rqh!dt6q9jU$3~u9=QNyk0ISuD)*_XyTih}i8pUZ zI{keMTJBod3VN)jMWVn~=*)ZF534fH!JhVH|d{IJm?I3;EM)i*;_DPCD44MtD7 zh9_<*R;#I~zvaSsayMtfU3Xvh!usFbKuaIZRZc0mYg7ZrOXP*sbX9pV7k3jHYskj2 z6I30I{pxZJJ?7Ucuk_7yaA6eBw=B|XR(k^*w*a45I^}@o^VX|;-on~X8g4K#`j_K? z!_VhF_fUYg!W*utYQrVPk2O}2E*0h7T5x;9xAnqmRW@UwvuD8OnFT%o!pH6BtKk18 zNipowCT?%Hb-OQ{P)5Cgq0O3b0r1nnhu8r4FUL4O`2RgVUc#@S6hOqUvv`Qkf!>YU zh&~>qzP`P!9b#tVwZ+N$ZnI9CS^LFa?8hBFfj0OKeqjdCahleSUk%E>yS*&frYer> z_(Dd&Tmd>B*V^&;`c5alK;w{KnIVL{X{&{HE`#o+D(bwer7PFyyx;46*VoVZI?=kF zcFk#*h;$v5mt`ekUc26%l@7xDdF;aTDxvFMt+SMCAglw*b8CS@pQEmCvH?Fo^>tlq zwd zGSI`X76E!r)w-SbT&a?t&$snpeG__~)jCT@@oP%$(7tCf{iFCbB@clgbzG3N)gezo z|B|-;AivWyZTcS9UbVn5EH9^10}&=+J1HIn1myw@V@~Mx$h6- zo}i*BGBY}d*1XfnH_hkd>w~E+(QlXy)Qb} z^qc+70pUIg*;3#h&idcvbjr=mz-#0J^5WhYMV-)j58LR0HAk*3CvhW(?mxShT6=9u zqW7ZjRC0q^M;)$Tt=%)JGjPu*%Bi)S5?W5*$5xpi`FB$d$^1NOy>9AAk@aJ#wRs&n zCkcMGXx56aTlF<|Y73i}tXwJ74yVY9uX^ow>$jRSxtp!;=YqB47{z3b_~^t$n_IPUNBXchK1 z`2gFp4tkuiln<@38_TO&8;$=?P0p}8C4~v ztXoc|tf#`P-8pF1{vfp+S^v{;tj)g%Yx!}=d3qniEDm}nk{<uzqe>)|vN_Zz1-}!-<{R z7SC98&|otr|CibiedMVves>+1ZI$8W_o>#(<;;o|)`HktpkWc)4 z3lNZR0s@9N5aBIE_DuxeB(x*Hdp%OfHyV5!GQ%U^1oEv1-+qKQBz#N4HzQf(+Y-Jt zDMG$c;TxcU27Cp$D{wd9+ydmAwk+~3@4O7o2Txo8+|%Pi)B*Pb&o_pA3%w6;U*LYg I{ecJkKiNrC_5c6? diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParser.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParser.java index 6852771b1..627881709 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParser.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParser.java @@ -13,15 +13,15 @@ public abstract class SCLParser { public static final boolean TRACE = false; private static final int INITIAL_CAPACITY = 16; - private static final int STATE_COUNT = 363; - private static final int TERMINAL_COUNT = 86; + private static final int STATE_COUNT = 368; + private static final int TERMINAL_COUNT = 88; private static final int NONTERMINAL_COUNT = 52; - private static final int PRODUCT_COUNT = 139; + private static final int PRODUCT_COUNT = 142; private static final int[] ACTION_ROW_ID = new int[STATE_COUNT]; private static final int[] ACTION_COLUMN_ID = new int[TERMINAL_COUNT]; - private static final short[] ACTION_TABLE = new short[6765]; - private static final int[] ERROR_TABLE = new int[976]; + private static final short[] ACTION_TABLE = new short[6820]; + private static final int[] ERROR_TABLE = new int[1012]; private static final int[] GOTO_ROW_ID = new int[STATE_COUNT]; private static final int[] GOTO_COLUMN_ID = new int[NONTERMINAL_COUNT]; private static final short[] GOTO_TABLE = new short[1953]; @@ -118,6 +118,8 @@ public abstract class SCLParser { "BY", "QUERY_OP", "FORALL", + "DOUBLE_LESS", + "DOUBLE_GREATER", "COMMENT", "EOL", "EOF" @@ -397,19 +399,19 @@ public abstract class SCLParser { return parse(0); } public Object parseCommands() { - return parse(347); + return parse(352); } public Object parseImport() { - return parse(355); + return parse(360); } public Object parseType() { - return parse(357); + return parse(362); } public Object parseExp() { - return parse(359); + return parse(364); } public Object parseEquationBlock() { - return parse(361); + return parse(366); } @@ -517,170 +519,176 @@ public abstract class SCLParser { case 49: return reduceTypeVar(); case 50: - return reduceTupleType(); + return reducePlainEffect(); case 51: - return reduceListType(); + return reduceTupleType(); case 52: - return reduceListTypeConstructor(); + return reduceListType(); case 53: - return reduceTupleTypeConstructor(); + return reduceListTypeConstructor(); case 54: - return reduceLambda(); + return reduceTupleTypeConstructor(); case 55: - return reduceLambdaMatch(); + return reduceLambda(); case 56: - return reduceLet(); + return reduceLambdaMatch(); case 57: - return reduceIf(); + return reduceLet(); case 58: - return reduceMatch(); + return reduceIf(); case 59: - return reduceDo(); + return reduceMatch(); case 60: - return reduceSelect(); + return reduceDo(); case 61: - return reduceCHRSelect(); + return reduceSelect(); case 62: - return reduceEnforce(); + return reduceCHRSelect(); case 63: - return reduceVar(); + return reduceEnforce(); case 64: - return reduceHashedId(); + return reduceVar(); case 65: - return reduceBlank(); + return reduceHashedId(); case 66: - return reduceInteger(); + return reduceBlank(); case 67: - return reduceFloat(); + return reduceInteger(); case 68: - return reduceString(); + return reduceFloat(); case 69: - return reduceChar(); + return reduceString(); case 70: - return reduceTuple(); + return reduceChar(); case 71: - return reduceViewPattern(); + return reduceTuple(); case 72: - return reduceRightSection(); + return reduceViewPattern(); case 73: - return reduceLeftSection(); + return reduceRightSection(); case 74: - return reduceListLiteral(); + return reduceLeftSection(); case 75: - return reduceRange(); + return reduceListLiteral(); case 76: - return reduceListComprehension(); + return reduceRange(); case 77: - return reduceAs(); + return reduceListComprehension(); case 78: - return reduceRecord(); + return reduceAs(); case 79: - return reduceTransformation(); + return reduceRecord(); case 80: - return reduceEq(); + return reduceTransformation(); case 81: - return reduceRuleDeclarations(); + return reduceEq(); case 82: - return reduceStatements(); + return reduceRuleDeclarations(); case 83: - return reduceImportShowing(); + return reduceStatements(); case 84: - return reduceImportHiding(); + return reduceImportShowing(); case 85: - return reduceImportValueItem(); + return reduceImportHiding(); case 86: - return reduceFieldDescription(); + return reduceImportValueItem(); case 87: - return reduceGuardedExpEq(); + return reduceFieldDescription(); case 88: - return reduceFundep(); + return reduceGuardedExpEq(); case 89: - return reduceQueryRuleDeclaration(); + return reduceFundep(); case 90: - return reduceAnnotation(); + return reduceQueryRuleDeclaration(); case 91: - return reduceGuardQuery(); + return reduceAnnotation(); case 92: - return reduceEqualsQuery(); + return reduceGuardQuery(); case 93: - return reduceBindQuery(); + return reduceEqualsQuery(); case 94: - return reduceCompositeQuery(); + return reduceBindQuery(); case 95: - return reduceApply(); + return reduceCompositeQuery(); case 96: - return reduceSymbol(); + return reduceApply(); case 97: - return reduceEscapedId(); + return reduceSymbol(); case 98: - return reduceMinus(); + return reduceEscapedId(); case 99: - return reduceLess(); + return reduceMinus(); case 100: - return reduceGreater(); + return reduceLess(); case 101: - return reduceDot(); + return reduceGreater(); case 102: - return reduceFieldAccess(); + return reduceDoubleLess(); case 103: - return reduceIdAccessor(); + return reduceDoubleGreater(); case 104: - return reduceStringAccessor(); + return reduceDot(); case 105: - return reduceExpAccessor(); + return reduceFieldAccess(); case 106: - return reduceCase(); + return reduceIdAccessor(); case 107: - return reduceQueryBlock(); + return reduceStringAccessor(); case 108: - return reduceVerboseCHRConjunction(); + return reduceExpAccessor(); case 109: - return reduceStringLiteral(); + return reduceCase(); case 110: - return reduceSymbol(); + return reduceQueryBlock(); case 111: - return reduceEscapedId(); + return reduceVerboseCHRConjunction(); case 112: - return reduceLess(); + return reduceStringLiteral(); case 113: - return reduceGreater(); + return reduceSymbol(); case 114: - return reduceDot(); + return reduceEscapedId(); case 115: - return reduceGuardQualifier(); + return reduceLess(); case 116: - return reduceLetQualifier(); + return reduceGreater(); case 117: - return reduceBindQualifier(); + return reduceDot(); case 118: - return reduceThenQualifier(); + return reduceGuardQualifier(); case 119: - return reduceCHRConjunction(); + return reduceLetQualifier(); case 120: - return reduceCHRAtom(); + return reduceBindQualifier(); case 121: - return reduceCHREquals(); + return reduceThenQualifier(); case 122: - return reduceCHRBinds(); + return reduceCHRConjunction(); case 123: - return reduceSimpleCaseRhs(); + return reduceCHRAtom(); case 124: - return reduceGuardedCaseRhs(); + return reduceCHREquals(); case 125: - return reduceGuardedExpArrow(); + return reduceCHRBinds(); case 126: - return reduceGuardEquation(); + return reduceSimpleCaseRhs(); case 127: - return reduceBasicEquation(); + return reduceGuardedCaseRhs(); case 128: - return reduceEffect(); + return reduceGuardedExpArrow(); case 129: - return reduceJustEtype(); + return reduceGuardEquation(); case 130: - return reduceForAll(); + return reduceBasicEquation(); case 131: - return reduceApplyType(); + return reduceEffect(); case 132: + return reduceJustEtype(); + case 133: + return reduceForAll(); + case 134: + return reduceApplyType(); + case 135: return reduceDummy(); default: @@ -901,6 +909,10 @@ public abstract class SCLParser { * atype ::= ID */ protected abstract Object reduceTypeVar(); + /** + * atype ::= DOUBLE_LESS ID (COMMA ID)* DOUBLE_GREATER + */ + protected abstract Object reducePlainEffect(); /** * atype ::= LPAREN (type (COMMA (type COMMA)* type)?)? RPAREN */ @@ -1101,6 +1113,14 @@ public abstract class SCLParser { * symbol ::= GREATER */ protected abstract Object reduceGreater(); + /** + * symbol ::= DOUBLE_LESS + */ + protected abstract Object reduceDoubleLess(); + /** + * symbol ::= DOUBLE_GREATER + */ + protected abstract Object reduceDoubleGreater(); /** * symbol ::= SEPARATED_DOT */ diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParserImpl.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParserImpl.java index 9c1a61535..08200a44d 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParserImpl.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/parsing/parser/SCLParserImpl.java @@ -111,6 +111,7 @@ import org.simantics.scl.compiler.internal.parsing.types.TEffectAst; import org.simantics.scl.compiler.internal.parsing.types.TForAllAst; import org.simantics.scl.compiler.internal.parsing.types.TFunctionAst; import org.simantics.scl.compiler.internal.parsing.types.TListAst; +import org.simantics.scl.compiler.internal.parsing.types.TPlainEffectAst; import org.simantics.scl.compiler.internal.parsing.types.TPredAst; import org.simantics.scl.compiler.internal.parsing.types.TTupleAst; import org.simantics.scl.compiler.internal.parsing.types.TVarAst; @@ -822,6 +823,16 @@ public class SCLParserImpl extends SCLParser { protected Object reduceGreater() { return new EVar(((Token)get(0)).text); } + + @Override + protected Object reduceDoubleLess() { + return new EVar(((Token)get(0)).text); + } + + @Override + protected Object reduceDoubleGreater() { + return new EVar(((Token)get(0)).text); + } @Override protected Object reduceDot() { @@ -1356,4 +1367,16 @@ public class SCLParserImpl extends SCLParser { return new FieldAssignment(FieldAssignment.WILDCARD, null); } + @Override + protected Object reducePlainEffect() { + ArrayList effects = new ArrayList(length()/2); + for(int i=1;i effects) { + this(effects.toArray(new TypeAst[effects.size()])); + } + + @Override + public void toString(StringBuilder b) { + b.append("<<"); + boolean first = true; + for(TypeAst effect : effects) { + if(first) + first = false; + else + b.append(","); + effect.toString(b); + } + b.append(">>"); + } + + @Override + public Type toType(TypeTranslationContext context, Kind expectedKind) { + return TFunctionAst.toEffect(context, effects); + } + + @Override + public Type toType(TypeElaborationContext context) { + return TFunctionAst.toEffect(context, effects); + } + + @Override + public int getPrecedence() { + return 0; + } + + @Override + public void collectReferences(TObjectIntHashMap typeNameMap, + TIntHashSet set) { + for(TypeAst effect : effects) + effect.collectReferences(typeNameMap, set); + } +} diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/types/effects/EffectIdMap.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/types/effects/EffectIdMap.java index 4168fff93..8ba0e6783 100644 --- a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/types/effects/EffectIdMap.java +++ b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/internal/types/effects/EffectIdMap.java @@ -17,19 +17,17 @@ public class EffectIdMap { public static final int MAX = 0xffffffff; private static final int FIRST_FREE_EFFECT_ID = 16; - private static ArrayList effectCons = new ArrayList(); - private static TObjectIntHashMap effectCodes = new TObjectIntHashMap(); + private static ArrayList EFFECT_CONS = new ArrayList(); + private static TObjectIntHashMap EFFECT_CODES = new TObjectIntHashMap(); - private static void add(String module, String name, int code) { - TCon con = Types.con(module, name); - effectCodes.put(con, code); - effectCons.add(con); + private static void add(TCon con, int code) { + EFFECT_CODES.put(con, code); + EFFECT_CONS.add(con); } static { - add("Simantics/DB", "WriteGraph", 12); - add("Simantics/DB", "ReadGraph", 4); - add(Types.BUILTIN, "Proc", 1); + add(Types.WRITE_GRAPH, 0b11); + add(Types.READ_GRAPH, 0b01); } private ArrayList localCons = new ArrayList(); @@ -44,8 +42,8 @@ public class EffectIdMap { id |= toId(e, metaVars); return id; } - else if(effectCodes.contains(type)) { - return effectCodes.get(type); + else if(EFFECT_CODES.contains(type)) { + return EFFECT_CODES.get(type); } else if(type instanceof TMetaVar) { metaVars.add((TMetaVar)type); @@ -67,8 +65,8 @@ public class EffectIdMap { if(id == 0) return Types.NO_EFFECTS; ArrayList components = new ArrayList(); - for(TCon con : effectCons) { - int conId = effectCodes.get(con); + for(TCon con : EFFECT_CONS) { + int conId = EFFECT_CODES.get(con); if((id&conId) == conId) { components.add(con); id ^= conId; diff --git a/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/ModuleRegressionTests.java b/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/ModuleRegressionTests.java index 3eb098933..8c2053e6f 100644 --- a/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/ModuleRegressionTests.java +++ b/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/ModuleRegressionTests.java @@ -136,6 +136,7 @@ public class ModuleRegressionTests extends TestBase { @Test public void JavaMethods() { test(); } @Test public void JavaTypes() { test(); } @Test public void Kinds1() { test(); } + @Test public void Lazy1() { test(); } @Test public void Lambda() { test(); } @Test public void LambdaMatch() { test(); } @Test public void Layout1() { test(); } diff --git a/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/scl/Lazy1.scl b/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/scl/Lazy1.scl new file mode 100644 index 000000000..7989992ca --- /dev/null +++ b/tests/org.simantics.scl.compiler.tests/src/org/simantics/scl/compiler/tests/scl/Lazy1.scl @@ -0,0 +1,36 @@ +import "Prelude" +import "Lazy" + +data Node = Node { + name :: String, + children :: Lazy <> [Node] +} + +root = genNode "" + where + genNode name = do + print "genNode \(name)" + Node { + name, + children = lazy [genNode (name + "A"), genNode (name + "B")] + } + +nameOf Node { name } = name +childrenOf Node { children } = force children + +main = for (childrenOf root) $ \c -> + for (childrenOf c) $ \c2 -> + print "visit \(nameOf c2)" +-- +genNode +genNode A +genNode B +genNode AA +genNode AB +visit AA +visit AB +genNode BA +genNode BB +visit BA +visit BB +() \ No newline at end of file -- 2.43.2