From 33d748adf080dd885479781aaa504389f33a3e22 Mon Sep 17 00:00:00 2001 From: miks1965 Date: Thu, 1 Dec 2016 23:46:54 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9B=D1=8F=D0=BC=D0=B1=D0=B4=D1=8B=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=BD=D0=B5=D1=81=D0=B5=D0=BD=D1=8B=20=D0=B2?= =?UTF-8?q?=20=D0=B3=D1=80=D0=B0=D0=BC=D0=BC=D0=B0=D1=82=D0=B8=D0=BA=D0=B5?= =?UTF-8?q?=20=D0=BD=D0=B0=20=D0=B2=D0=B5=D1=80=D1=85=D0=BD=D0=B8=D0=B9=20?= =?UTF-8?q?=D1=83=D1=80=D0=BE=D0=B2=D0=B5=D0=BD=D1=8C=20=D0=B2=D0=B5=D0=B7?= =?UTF-8?q?=D0=B4=D0=B5.=20=D0=9D=D0=B5=D0=BA=D0=BE=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BD=D0=BE=D1=81=D1=8B?= =?UTF-8?q?=20Replace=20=D0=BC=D0=B5=D0=B6=D0=B4=D1=83=20=D0=B2=D0=B8?= =?UTF-8?q?=D0=B7=D0=B8=D1=82=D0=BE=D1=80=D0=B0=D0=BC=D0=B8=20=D0=B8=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D1=81=D0=B2=D0=B0=D0=B8=D0=B2=D0=B0=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F=20Parent?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Configuration/GlobalAssemblyInfo.cs | 2 +- Configuration/Version.defs | 4 +- .../PascalABCParserNewSaushkin/ABCPascal.cs | 239 +- .../PascalABCParserNewSaushkin/ABCPascal.lex | 1 - .../PascalABCParserNewSaushkin/ABCPascal.y | 124 +- .../ABCPascalYacc.cs | 7274 ++++++++--------- Parsers/PascalABCParserNewSaushkin/PABC.tags | 4 +- Parsers/PascalABCParserNewSaushkin/PABC.ymc | 11 +- PascalABCNET.axml | 2 +- ReleaseGenerators/PascalABCNET_version.nsh | 2 +- ...xprWithLambdaInForeachSequenceConverter.cs | 25 +- SyntaxTree/SyntaxTree.csproj | 1 + SyntaxTree/tree/BaseChangeVisitor.cs | 55 +- SyntaxTree/tree/TreeHelper.cs | 7 +- SyntaxTree/tree/WalkingVisitorNew.cs | 10 +- TestSuite/CompilationSamples/PABCSystem.pas | 44 +- .../TreeConversion/syntax_tree_visitor.cs | 10 +- VisualPascalABCNET/VisualPascalABCNET.csproj | 1 + bin/Lib/PABCRtl.dll | Bin 543232 -> 543744 bytes bin/Lib/PABCSystem.pas | 44 +- 20 files changed, 3955 insertions(+), 3905 deletions(-) diff --git a/Configuration/GlobalAssemblyInfo.cs b/Configuration/GlobalAssemblyInfo.cs index b5e32faea..c4003385a 100644 --- a/Configuration/GlobalAssemblyInfo.cs +++ b/Configuration/GlobalAssemblyInfo.cs @@ -15,7 +15,7 @@ internal static class RevisionClass public const string Major = "3"; public const string Minor = "2"; public const string Build = "0"; - public const string Revision = "1352"; + public const string Revision = "1355"; public const string MainVersion = Major + "." + Minor; public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision; diff --git a/Configuration/Version.defs b/Configuration/Version.defs index 918f0fa26..c8b8289b2 100644 --- a/Configuration/Version.defs +++ b/Configuration/Version.defs @@ -1,4 +1,4 @@ -%MINOR%=2 -%REVISION%=1352 %COREVERSION%=0 +%REVISION%=1355 +%MINOR%=2 %MAJOR%=3 diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs index f0c9d12f2..226674168 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.cs @@ -2,7 +2,7 @@ // This CSharp output file generated by Gardens Point LEX // Version: 1.1.3.301 // Machine: DESKTOP-8EAQPI9 -// DateTime: 21.11.2016 15:52:41 +// DateTime: 01.12.2016 23:40:27 // UserName: ????????? // GPLEX input file // GPLEX frame file @@ -124,8 +124,8 @@ namespace GPPGParserScanner enum Result {accept, noMatch, contextFound}; - const int maxAccept = 63; - const int initial = 64; + const int maxAccept = 62; + const int initial = 63; const int eofNum = 0; const int goStart = -1; const int INITIAL = 0; @@ -177,7 +177,7 @@ public PT parsertools; } }; - static int[] startState = new int[] {64, 98, 99, 100, 100, 101, + static int[] startState = new int[] {63, 97, 98, 99, 99, 100, 0}; #region TwoLevelCharacterMap @@ -189,9 +189,9 @@ public PT parsertools; static sbyte[] mLo0 = new sbyte[256] { /* '\0' */ 47, 40, 47, 47, 47, 47, 47, 47, 47, 5, 0, 47, 47, 6, 47, 47, /* '\x10' */ 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, -/* '\x20' */ 5, 25, 47, 46, 4, 47, 10, 45, 7, 9, 8, 21, 11, 22, 13, 1, -/* '0' */ 42, 42, 27, 42, 42, 42, 42, 42, 42, 26, 12, 14, 23, 18, 19, 17, -/* '@' */ 20, 43, 43, 43, 43, 44, 43, 41, 41, 41, 41, 41, 41, 41, 41, 41, +/* '\x20' */ 5, 25, 47, 46, 4, 47, 10, 45, 7, 9, 8, 20, 11, 21, 13, 1, +/* '0' */ 42, 42, 27, 42, 42, 42, 42, 42, 42, 26, 12, 14, 23, 19, 22, 17, +/* '@' */ 18, 43, 43, 43, 43, 44, 43, 41, 41, 41, 41, 41, 41, 41, 41, 41, /* 'P' */ 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 41, 15, 47, 16, 24, 41, /* '`' */ 47, 37, 43, 43, 43, 28, 43, 41, 41, 33, 41, 41, 41, 38, 35, 34, /* 'p' */ 30, 41, 31, 32, 36, 41, 41, 41, 29, 39, 41, 3, 47, 2, 47, 47, @@ -1177,52 +1177,52 @@ public PT parsertools; return MapC(code); } - static Table[] NxS = new Table[103] { + static Table[] NxS = new Table[102] { /* NxS[ 0] */ new Table(0, 0, 0, null), -/* NxS[ 1] */ new Table(1, 18, -1, new sbyte[] {52, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 53}), +/* NxS[ 1] */ new Table(1, 19, -1, new sbyte[] {51, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 52}), /* NxS[ 2] */ new Table(0, 0, -1, null), -/* NxS[ 3] */ new Table(4, 1, -1, new sbyte[] {97}), -/* NxS[ 4] */ new Table(26, 19, -1, new sbyte[] {50, 50, 50, -1, -1, -1, - -1, -1, -1, -1, -1, 50, -1, -1, -1, -1, 50, 50, 50}), -/* NxS[ 5] */ new Table(8, 1, -1, new sbyte[] {49}), -/* NxS[ 6] */ new Table(18, 1, -1, new sbyte[] {48}), +/* NxS[ 3] */ new Table(4, 1, -1, new sbyte[] {96}), +/* NxS[ 4] */ new Table(26, 19, -1, new sbyte[] {49, 49, 49, -1, -1, -1, + -1, -1, -1, -1, -1, 49, -1, -1, -1, -1, 49, 49, 49}), +/* NxS[ 5] */ new Table(8, 1, -1, new sbyte[] {48}), +/* NxS[ 6] */ new Table(19, 1, -1, new sbyte[] {47}), /* NxS[ 7] */ new Table(0, 0, -1, null), /* NxS[ 8] */ new Table(28, 17, -1, new sbyte[] {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -1, 25, -1, 25, 25}), /* NxS[ 9] */ new Table(0, 0, -1, null), -/* NxS[ 10] */ new Table(18, 1, -1, new sbyte[] {47}), -/* NxS[ 11] */ new Table(13, 1, -1, new sbyte[] {46}), +/* NxS[ 10] */ new Table(19, 1, -1, new sbyte[] {46}), +/* NxS[ 11] */ new Table(13, 1, -1, new sbyte[] {45}), /* NxS[ 12] */ new Table(0, 0, -1, null), /* NxS[ 13] */ new Table(0, 0, -1, null), /* NxS[ 14] */ new Table(0, 0, -1, null), -/* NxS[ 15] */ new Table(13, 1, -1, new sbyte[] {45}), -/* NxS[ 16] */ new Table(19, 1, -1, new sbyte[] {44}), -/* NxS[ 17] */ new Table(18, 1, -1, new sbyte[] {43}), -/* NxS[ 18] */ new Table(0, 0, -1, null), -/* NxS[ 19] */ new Table(18, 1, -1, new sbyte[] {42}), -/* NxS[ 20] */ new Table(18, 2, -1, new sbyte[] {40, 41}), -/* NxS[ 21] */ new Table(18, 6, -1, new sbyte[] {35, 36, -1, -1, -1, 70}), +/* NxS[ 15] */ new Table(13, 1, -1, new sbyte[] {44}), +/* NxS[ 16] */ new Table(0, 0, -1, null), +/* NxS[ 17] */ new Table(0, 0, -1, null), +/* NxS[ 18] */ new Table(19, 1, -1, new sbyte[] {43}), +/* NxS[ 19] */ new Table(19, 4, -1, new sbyte[] {41, -1, -1, 42}), +/* NxS[ 20] */ new Table(19, 1, -1, new sbyte[] {40}), +/* NxS[ 21] */ new Table(19, 5, -1, new sbyte[] {35, -1, -1, 36, 69}), /* NxS[ 22] */ new Table(0, 0, -1, null), -/* NxS[ 23] */ new Table(26, 1, -1, new sbyte[] {69}), -/* NxS[ 24] */ new Table(13, 32, -1, new sbyte[] {66, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 24, 24, 67, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 24, -1, 67}), +/* NxS[ 23] */ new Table(26, 1, -1, new sbyte[] {68}), +/* NxS[ 24] */ new Table(13, 32, -1, new sbyte[] {65, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 24, 24, 66, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 24, -1, 66}), /* NxS[ 25] */ new Table(26, 19, -1, new sbyte[] {25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, -1, 25, 25, 25, 25}), /* NxS[ 26] */ new Table(0, 0, -1, null), -/* NxS[ 27] */ new Table(45, 4, 65, new sbyte[] {31, 65, 65, -1}), +/* NxS[ 27] */ new Table(45, 4, 64, new sbyte[] {31, 64, 64, -1}), /* NxS[ 28] */ new Table(26, 19, -1, new sbyte[] {29, 29, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, -1, 30, 29, 30, 30}), /* NxS[ 29] */ new Table(26, 17, -1, new sbyte[] {29, 29, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 29}), /* NxS[ 30] */ new Table(26, 19, -1, new sbyte[] {30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, 30, -1, 30, 30, 30, 30}), -/* NxS[ 31] */ new Table(45, 1, -1, new sbyte[] {65}), +/* NxS[ 31] */ new Table(45, 1, -1, new sbyte[] {64}), /* NxS[ 32] */ new Table(26, 17, -1, new sbyte[] {32, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 32}), -/* NxS[ 33] */ new Table(26, 19, -1, new sbyte[] {33, 33, 67, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 67}), +/* NxS[ 33] */ new Table(26, 19, -1, new sbyte[] {33, 33, 66, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33, -1, 66}), /* NxS[ 34] */ new Table(0, 0, -1, null), /* NxS[ 35] */ new Table(0, 0, -1, null), /* NxS[ 36] */ new Table(0, 0, -1, null), @@ -1238,70 +1238,70 @@ public PT parsertools; /* NxS[ 46] */ new Table(0, 0, -1, null), /* NxS[ 47] */ new Table(0, 0, -1, null), /* NxS[ 48] */ new Table(0, 0, -1, null), -/* NxS[ 49] */ new Table(0, 0, -1, null), -/* NxS[ 50] */ new Table(26, 19, -1, new sbyte[] {50, 50, 50, -1, -1, -1, - -1, -1, -1, -1, -1, 50, -1, -1, -1, -1, 50, 50, 50}), -/* NxS[ 51] */ new Table(0, 0, -1, null), -/* NxS[ 52] */ new Table(0, 7, 52, new sbyte[] {-1, 52, 52, 52, 52, 52, +/* NxS[ 49] */ new Table(26, 19, -1, new sbyte[] {49, 49, 49, -1, -1, -1, + -1, -1, -1, -1, -1, 49, -1, -1, -1, -1, 49, 49, 49}), +/* NxS[ 50] */ new Table(0, 0, -1, null), +/* NxS[ 51] */ new Table(0, 7, 51, new sbyte[] {-1, 51, 51, 51, 51, 51, -1}), +/* NxS[ 52] */ new Table(0, 0, -1, null), /* NxS[ 53] */ new Table(0, 0, -1, null), /* NxS[ 54] */ new Table(0, 0, -1, null), /* NxS[ 55] */ new Table(0, 0, -1, null), -/* NxS[ 56] */ new Table(0, 0, -1, null), -/* NxS[ 57] */ new Table(9, 1, -1, new sbyte[] {58}), +/* NxS[ 56] */ new Table(9, 1, -1, new sbyte[] {57}), +/* NxS[ 57] */ new Table(0, 0, -1, null), /* NxS[ 58] */ new Table(0, 0, -1, null), -/* NxS[ 59] */ new Table(0, 0, -1, null), -/* NxS[ 60] */ new Table(1, 1, -1, new sbyte[] {63}), -/* NxS[ 61] */ new Table(4, 1, -1, new sbyte[] {102}), -/* NxS[ 62] */ new Table(0, 0, -1, null), -/* NxS[ 63] */ new Table(0, 7, 63, new sbyte[] {-1, 63, 63, 63, 63, 63, +/* NxS[ 59] */ new Table(1, 1, -1, new sbyte[] {62}), +/* NxS[ 60] */ new Table(4, 1, -1, new sbyte[] {101}), +/* NxS[ 61] */ new Table(0, 0, -1, null), +/* NxS[ 62] */ new Table(0, 7, 62, new sbyte[] {-1, 62, 62, 62, 62, 62, -1}), -/* NxS[ 64] */ new Table(40, 36, 25, new sbyte[] {26, 25, 24, 25, 25, 27, +/* NxS[ 63] */ new Table(40, 36, 25, new sbyte[] {26, 25, 24, 25, 25, 27, 28, 2, -1, 1, 2, 3, 4, -1, -1, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 24}), -/* NxS[ 65] */ new Table(45, 4, 65, new sbyte[] {31, 65, 65, -1}), -/* NxS[ 66] */ new Table(26, 17, -1, new sbyte[] {33, 33, -1, -1, -1, -1, +/* NxS[ 64] */ new Table(45, 4, 64, new sbyte[] {31, 64, 64, -1}), +/* NxS[ 65] */ new Table(26, 17, -1, new sbyte[] {33, 33, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 33}), -/* NxS[ 67] */ new Table(21, 22, -1, new sbyte[] {68, 68, -1, -1, -1, 32, - 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 32}), -/* NxS[ 68] */ new Table(26, 17, -1, new sbyte[] {32, 32, -1, -1, -1, -1, +/* NxS[ 66] */ new Table(20, 23, -1, new sbyte[] {67, 67, -1, -1, -1, -1, + 32, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 32}), +/* NxS[ 67] */ new Table(26, 17, -1, new sbyte[] {32, 32, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 32}), -/* NxS[ 69] */ new Table(27, 1, -1, new sbyte[] {34}), -/* NxS[ 70] */ new Table(28, 9, -1, new sbyte[] {71, -1, -1, -1, 72, -1, - -1, -1, 73}), -/* NxS[ 71] */ new Table(29, 1, -1, new sbyte[] {87}), -/* NxS[ 72] */ new Table(36, 1, -1, new sbyte[] {78}), -/* NxS[ 73] */ new Table(39, 1, -1, new sbyte[] {74}), -/* NxS[ 74] */ new Table(30, 1, -1, new sbyte[] {75}), -/* NxS[ 75] */ new Table(28, 1, -1, new sbyte[] {76}), -/* NxS[ 76] */ new Table(19, 1, -1, new sbyte[] {77}), -/* NxS[ 77] */ new Table(19, 1, -1, new sbyte[] {37}), -/* NxS[ 78] */ new Table(37, 1, -1, new sbyte[] {79}), -/* NxS[ 79] */ new Table(36, 1, -1, new sbyte[] {80}), -/* NxS[ 80] */ new Table(28, 1, -1, new sbyte[] {81}), -/* NxS[ 81] */ new Table(38, 1, -1, new sbyte[] {82}), -/* NxS[ 82] */ new Table(28, 1, -1, new sbyte[] {83}), -/* NxS[ 83] */ new Table(35, 1, -1, new sbyte[] {84}), -/* NxS[ 84] */ new Table(36, 1, -1, new sbyte[] {85}), -/* NxS[ 85] */ new Table(19, 1, -1, new sbyte[] {86}), -/* NxS[ 86] */ new Table(19, 1, -1, new sbyte[] {38}), -/* NxS[ 87] */ new Table(30, 1, -1, new sbyte[] {88}), -/* NxS[ 88] */ new Table(31, 1, -1, new sbyte[] {89}), -/* NxS[ 89] */ new Table(28, 1, -1, new sbyte[] {90}), +/* NxS[ 68] */ new Table(27, 1, -1, new sbyte[] {34}), +/* NxS[ 69] */ new Table(28, 9, -1, new sbyte[] {70, -1, -1, -1, 71, -1, + -1, -1, 72}), +/* NxS[ 70] */ new Table(29, 1, -1, new sbyte[] {86}), +/* NxS[ 71] */ new Table(36, 1, -1, new sbyte[] {77}), +/* NxS[ 72] */ new Table(39, 1, -1, new sbyte[] {73}), +/* NxS[ 73] */ new Table(30, 1, -1, new sbyte[] {74}), +/* NxS[ 74] */ new Table(28, 1, -1, new sbyte[] {75}), +/* NxS[ 75] */ new Table(22, 1, -1, new sbyte[] {76}), +/* NxS[ 76] */ new Table(22, 1, -1, new sbyte[] {37}), +/* NxS[ 77] */ new Table(37, 1, -1, new sbyte[] {78}), +/* NxS[ 78] */ new Table(36, 1, -1, new sbyte[] {79}), +/* NxS[ 79] */ new Table(28, 1, -1, new sbyte[] {80}), +/* NxS[ 80] */ new Table(38, 1, -1, new sbyte[] {81}), +/* NxS[ 81] */ new Table(28, 1, -1, new sbyte[] {82}), +/* NxS[ 82] */ new Table(35, 1, -1, new sbyte[] {83}), +/* NxS[ 83] */ new Table(36, 1, -1, new sbyte[] {84}), +/* NxS[ 84] */ new Table(22, 1, -1, new sbyte[] {85}), +/* NxS[ 85] */ new Table(22, 1, -1, new sbyte[] {38}), +/* NxS[ 86] */ new Table(30, 1, -1, new sbyte[] {87}), +/* NxS[ 87] */ new Table(31, 1, -1, new sbyte[] {88}), +/* NxS[ 88] */ new Table(28, 1, -1, new sbyte[] {89}), +/* NxS[ 89] */ new Table(32, 1, -1, new sbyte[] {90}), /* NxS[ 90] */ new Table(32, 1, -1, new sbyte[] {91}), -/* NxS[ 91] */ new Table(32, 1, -1, new sbyte[] {92}), -/* NxS[ 92] */ new Table(33, 1, -1, new sbyte[] {93}), -/* NxS[ 93] */ new Table(34, 1, -1, new sbyte[] {94}), -/* NxS[ 94] */ new Table(35, 1, -1, new sbyte[] {95}), -/* NxS[ 95] */ new Table(19, 1, -1, new sbyte[] {96}), -/* NxS[ 96] */ new Table(19, 1, -1, new sbyte[] {39}), -/* NxS[ 97] */ new Table(0, 7, 97, new sbyte[] {-1, 97, 51, 97, 97, 97, +/* NxS[ 91] */ new Table(33, 1, -1, new sbyte[] {92}), +/* NxS[ 92] */ new Table(34, 1, -1, new sbyte[] {93}), +/* NxS[ 93] */ new Table(35, 1, -1, new sbyte[] {94}), +/* NxS[ 94] */ new Table(22, 1, -1, new sbyte[] {95}), +/* NxS[ 95] */ new Table(22, 1, -1, new sbyte[] {39}), +/* NxS[ 96] */ new Table(0, 7, 96, new sbyte[] {-1, 96, 50, 96, 96, 96, -1}), -/* NxS[ 98] */ new Table(2, 1, 54, new sbyte[] {55}), -/* NxS[ 99] */ new Table(8, 1, 56, new sbyte[] {57}), -/* NxS[ 100] */ new Table(0, 0, -1, null), -/* NxS[ 101] */ new Table(1, 3, 59, new sbyte[] {60, 59, 61}), -/* NxS[ 102] */ new Table(0, 7, 102, new sbyte[] {-1, 102, 62, 102, 102, 102, +/* NxS[ 97] */ new Table(2, 1, 53, new sbyte[] {54}), +/* NxS[ 98] */ new Table(8, 1, 55, new sbyte[] {56}), +/* NxS[ 99] */ new Table(0, 0, -1, null), +/* NxS[ 100] */ new Table(1, 3, 58, new sbyte[] {59, 58, 60}), +/* NxS[ 101] */ new Table(0, 7, 101, new sbyte[] {-1, 101, 61, 101, 101, 101, -1}), }; @@ -1780,20 +1780,20 @@ return (int)Tokens.tkSquareClose; return (int)Tokens.tkQuestion; break; case 16: -yylval = new Union(); yylval.op = new op_type_node(Operators.Equal); return (int)Tokens.tkEqual; - break; - case 17: -yylval = new Union(); yylval.op = new op_type_node(Operators.Greater); return (int)Tokens.tkGreater; - break; - case 18: yylval = new Union(); yylval.op = new op_type_node(Operators.AddressOf); return (int)Tokens.tkAddressOf; break; - case 19: + case 17: +yylval = new Union(); yylval.op = new op_type_node(Operators.Equal); return (int)Tokens.tkEqual; + break; + case 18: yylval = new Union(); yylval.op = new op_type_node(Operators.Plus); return (int)Tokens.tkPlus; break; - case 20: + case 19: yylval = new Union(); yylval.op = new op_type_node(Operators.Minus); return (int)Tokens.tkMinus; break; + case 20: +yylval = new Union(); yylval.op = new op_type_node(Operators.Greater); return (int)Tokens.tkGreater; + break; case 21: yylval = new Union(); yylval.op = new op_type_node(Operators.Less); return (int)Tokens.tkLower; break; @@ -2049,42 +2049,39 @@ return (int)Tokens.tkParseModeStatement; return (int)Tokens.tkParseModeExpression; break; case 40: -yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentSubtraction); return (int)Tokens.tkMinusEqual; - break; - case 41: -yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; - break; - case 42: -yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentAddition); return (int)Tokens.tkPlusEqual; - break; - case 43: yylval = new Union(); yylval.op = new op_type_node(Operators.GreaterEqual); return (int)Tokens.tkGreaterEqual; break; - case 44: -return (int)Tokens.tkMatching; + case 41: +yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentSubtraction); return (int)Tokens.tkMinusEqual; break; - case 45: + case 42: +yylval = new Union(); yylval.ti = new token_info(yytext); return (int)Tokens.tkArrow; + break; + case 43: +yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentAddition); return (int)Tokens.tkPlusEqual; + break; + case 44: return (int)Tokens.tkQuestionPoint; break; - case 46: + case 45: return (int)Tokens.tkDotDot; break; - case 47: + case 46: yylval = new Union(); yylval.op = new op_type_node(Operators.Assignment); return (int)Tokens.tkAssign; break; - case 48: + case 47: yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentMultiplication); return (int)Tokens.tkMultEqual; break; - case 49: + case 48: BEGIN(COMMENT1); break; - case 50: + case 49: yylval = new Union(); currentLexLocation = CurrentLexLocation; yylval.ex = parsertools.create_hex_const(yytext,currentLexLocation); return (int)Tokens.tkHex; break; - case 51: + case 50: if (parsertools.build_tree_for_formatter) break; @@ -2135,36 +2132,36 @@ if (parsertools.build_tree_for_formatter) Defines.Add(directiveparam); } break; - case 52: + case 51: { } break; - case 53: + case 52: yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentDivision); return (int)Tokens.tkDivEqual; break; - case 54: + case 53: { } break; + case 54: +BEGIN(INITIAL); + break; case 55: -BEGIN(INITIAL); - break; case 56: - case 57: { } break; + case 57: +BEGIN(INITIAL); + break; case 58: -BEGIN(INITIAL); - break; case 59: case 60: - case 61: { } break; - case 62: + case 61: parsertools.DivideDirectiveOn(yytext,out directivename,out directiveparam); parsertools.CheckDirectiveParams(directivename,directiveparam); // directivename in UPPERCASE! if (directivename == "IFDEF") @@ -2196,7 +2193,7 @@ parsertools.DivideDirectiveOn(yytext,out directivename,out directiveparam); BEGIN(INITIAL); } break; - case 63: + case 62: { } diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.lex b/Parsers/PascalABCParserNewSaushkin/ABCPascal.lex index 8b1e05e95..622772b4a 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.lex +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.lex @@ -186,7 +186,6 @@ UNICODEARROW \x890 "]" { return (int)Tokens.tkSquareClose; } "?" { return (int)Tokens.tkQuestion; } "?." { return (int)Tokens.tkQuestionPoint; } -"=>" { return (int)Tokens.tkMatching; } "@" { yylval = new Union(); yylval.op = new op_type_node(Operators.AddressOf); return (int)Tokens.tkAddressOf; } ":=" { yylval = new Union(); yylval.op = new op_type_node(Operators.Assignment); return (int)Tokens.tkAssign; } "+=" { yylval = new Union(); yylval.op = new op_type_node(Operators.AssignmentAddition); return (int)Tokens.tkPlusEqual; } diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascal.y b/Parsers/PascalABCParserNewSaushkin/ABCPascal.y index 9777c474d..7459d5fe9 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascal.y +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascal.y @@ -29,7 +29,7 @@ %start parse_goal -%token tkDirectiveName tkAmpersend tkColon tkDotDot tkPoint tkRoundOpen tkRoundClose tkSemiColon tkSquareOpen tkSquareClose tkQuestion tkMatching tkQuestionPoint +%token tkDirectiveName tkAmpersend tkColon tkDotDot tkPoint tkRoundOpen tkRoundClose tkSemiColon tkSquareOpen tkSquareClose tkQuestion tkQuestionPoint %token tkSizeOf tkTypeOf tkWhere tkArray tkCase tkClass tkAuto tkConst tkConstructor tkDestructor tkElse tkExcept tkFile tkFor tkForeach tkFunction %token tkIf tkImplementation tkInherited tkInterface tkProcedure tkOperator tkProperty tkRaise tkRecord tkSet tkType tkThen tkUses tkVar tkWhile tkWith tkNil %token tkGoto tkOf tkLabel tkLock tkProgram tkEvent tkDefault tkTemplate tkPacked tkExports tkResourceString tkThreadvar tkSealed tkPartial tkTo tkDownto @@ -67,7 +67,7 @@ %type program_decl_sect_list int_decl_sect_list1 inclass_decl_sect_list1 interface_decl_sect_list decl_sect_list decl_sect_list1 inclass_decl_sect_list %type field_or_const_definition abc_decl_sect decl_sect int_decl_sect type_decl simple_type_decl simple_field_or_const_definition res_str_decl_sect %type method_decl_withattr method_or_property_decl property_definition fp_sect -%type default_expr +%type default_expr tuple %type expr_as_stmt %type exception_block %type external_block @@ -77,7 +77,7 @@ %type typed_const_list1 typed_const_list optional_expr_list elem_list optional_expr_list_with_bracket expr_list const_elem_list1 const_func_expr_list case_label_list const_elem_list optional_const_func_expr_list elem_list1 %type enumeration_id expr_l1_list %type enumeration_id_list -%type const_simple_expr term typed_const typed_const_or_new expr expr_with_func_decl_lambda const_expr elem range_expr const_elem array_const factor relop_expr expr_l1 simple_expr range_term range_factor +%type const_simple_expr term typed_const typed_const_plus typed_var_init_expression expr expr_with_func_decl_lambda const_expr elem range_expr const_elem array_const factor relop_expr expr_l1 simple_expr range_term range_factor %type external_directive_ident init_const_expr case_label variable var_reference simple_expr_or_nothing // var_question_colon %type for_cycle_type %type format_expr @@ -689,36 +689,6 @@ const_expr { $$ = $1; } - | identifier tkArrow lambda_function_body - { - var idList = new ident_list($1, @1); - var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), parametr_kind.none, null, @1), @1); - $$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), $3 as statement_list, @$); - } - | tkRoundOpen tkRoundClose lambda_type_ref tkArrow lambda_function_body - { - $$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), null, $3, $5 as statement_list, @$); - } - | tkRoundOpen typed_const_list tkRoundClose tkArrow lambda_function_body - { - var el = $2 as expression_list; - var cnt = el.expressions.Count; - - var idList = new ident_list(); - idList.source_context = @2; - - for (int j = 0; j < cnt; j++) - { - if (!(el.expressions[j] is ident)) - parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",el.expressions[j].source_context); - idList.idents.Add(el.expressions[j] as ident); - } - - var any = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); - - var formalPars = new formal_parameters(new typed_parameters(idList, any, parametr_kind.none, null, @2), @2); - $$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, any, $5 as statement_list, @$); - } | const_simple_expr const_relop const_simple_expr { $$ = new bin_expr($1, $3, $2.type, @$); @@ -967,11 +937,11 @@ typed_const_list ; typed_const_list1 - : typed_const_or_new + : typed_const_plus { $$ = new expression_list($1, @$); } - | typed_const_list1 tkComma typed_const_or_new + | typed_const_list1 tkComma typed_const_plus { $$ = ($1 as expression_list).Add($3, @$); } @@ -1879,17 +1849,50 @@ var_decl_part { $$ = new var_def_statement($1 as ident_list, null, $3, definition_attribute.None, false, @$); } - | ident_list tkColon type_ref tkAssignOrEqual typed_const_or_new + | ident_list tkColon type_ref tkAssignOrEqual typed_var_init_expression // typed_const_plus óæå äàâíî íå êîíñòàíòà :) Íî ñþäà íå ïîïàëè Tuples, ïîñêîëüêó îíè êîíêóðèðóþò ñ äóðàöêèìè ñòàðûìè èíèöèàëèçàòîðàìè ìàññèâîâ { $$ = new var_def_statement($1 as ident_list, $3, $5, definition_attribute.None, false, @$); } - | ident_list tkColon type_ref tkAssignOrEqual expl_func_decl_lambda - { - $$ = new var_def_statement($1 as ident_list, $3, $5, definition_attribute.None, false, @$); - } ; -typed_const_or_new +typed_var_init_expression + : typed_const_plus + { $$ = $1; } + | expl_func_decl_lambda + { $$ = $1; } + | identifier tkArrow lambda_function_body + { + var idList = new ident_list($1, @1); + var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), parametr_kind.none, null, @1), @1); + $$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), $3 as statement_list, @$); + } + | tkRoundOpen tkRoundClose lambda_type_ref tkArrow lambda_function_body + { + $$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), null, $3, $5 as statement_list, @$); + } + | tkRoundOpen typed_const_list tkRoundClose tkArrow lambda_function_body + { + var el = $2 as expression_list; + var cnt = el.expressions.Count; + + var idList = new ident_list(); + idList.source_context = @2; + + for (int j = 0; j < cnt; j++) + { + if (!(el.expressions[j] is ident)) + parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",el.expressions[j].source_context); + idList.idents.Add(el.expressions[j] as ident); + } + + var any = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); + + var formalPars = new formal_parameters(new typed_parameters(idList, any, parametr_kind.none, null, @2), @2); + $$ = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, any, $5 as statement_list, @$); + } + ; + +typed_const_plus : typed_const { $$ = $1; } | new_expr @@ -2815,10 +2818,6 @@ relop_expr { $$ = new bin_expr($1, $3, $2.type, @$); } - | relop_expr tkMatching simple_expr - { - $$ = new matching_expression($1, $3, @$); - } ; simple_expr_or_nothing @@ -2943,6 +2942,23 @@ default_expr } ; +tuple + : tkRoundOpen expr_l1 tkComma expr_l1_list lambda_type_ref optional_full_lambda_fp_list tkRoundClose // lambda_type_ref optional_full_lambda_fp_list íóæíî îñòàâèòü ÷òîáû íå áûëî êîíôëèêòîâ ñ ãðàììàòèêîé ëÿìáä + { + ($4 as expression_list).expressions.Insert(0,$2); + if (($4 as expression_list).expressions.Count>7) + parsertools.AddErrorFromResource("TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7",@5); + + if (parsertools.build_tree_for_formatter) + $$ = new tuple_node_for_formatter($4 as expression_list,@$); + else + { + var dn = new dot_node(new dot_node(new ident("?System"),new ident("Tuple")),new ident("Create",@$)); + $$ = new method_call(dn,$4 as expression_list,@$); + } + } + ; + factor : tkNil { @@ -2971,21 +2987,9 @@ factor } | var_reference { $$ = $1; } - | tkRoundOpen expr_l1 tkComma expr_l1_list lambda_type_ref optional_full_lambda_fp_list tkRoundClose - { - ($4 as expression_list).expressions.Insert(0,$2); - if (($4 as expression_list).expressions.Count>7) - parsertools.AddErrorFromResource("TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7",@5); - - if (parsertools.build_tree_for_formatter) - $$ = new tuple_node_for_formatter($4 as expression_list,@$); - else - { - var dn = new dot_node(new dot_node(new ident("?System"),new ident("Tuple")),new ident("Create",@$)); - $$ = new method_call(dn,$4 as expression_list,@$); - } - } - ; + | tuple + { $$ = $1; } + ; literal_or_number : literal diff --git a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs index 30a4aa272..7e9395e93 100644 --- a/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs +++ b/Parsers/PascalABCParserNewSaushkin/ABCPascalYacc.cs @@ -2,9 +2,9 @@ // GPPG version 1.3.6 // Machine: DESKTOP-8EAQPI9 -// DateTime: 21.11.2016 15:52:42 +// DateTime: 01.12.2016 23:40:28 // UserName: ????????? -// Input file +// Input file // options: no-lines gplex @@ -24,28 +24,28 @@ namespace GPPGParserScanner public enum Tokens { error=1,EOF=2,tkDirectiveName=3,tkAmpersend=4,tkColon=5,tkDotDot=6, tkPoint=7,tkRoundOpen=8,tkRoundClose=9,tkSemiColon=10,tkSquareOpen=11,tkSquareClose=12, - tkQuestion=13,tkMatching=14,tkQuestionPoint=15,tkSizeOf=16,tkTypeOf=17,tkWhere=18, - tkArray=19,tkCase=20,tkClass=21,tkAuto=22,tkConst=23,tkConstructor=24, - tkDestructor=25,tkElse=26,tkExcept=27,tkFile=28,tkFor=29,tkForeach=30, - tkFunction=31,tkIf=32,tkImplementation=33,tkInherited=34,tkInterface=35,tkProcedure=36, - tkOperator=37,tkProperty=38,tkRaise=39,tkRecord=40,tkSet=41,tkType=42, - tkThen=43,tkUses=44,tkVar=45,tkWhile=46,tkWith=47,tkNil=48, - tkGoto=49,tkOf=50,tkLabel=51,tkLock=52,tkProgram=53,tkEvent=54, - tkDefault=55,tkTemplate=56,tkPacked=57,tkExports=58,tkResourceString=59,tkThreadvar=60, - tkSealed=61,tkPartial=62,tkTo=63,tkDownto=64,tkCycle=65,tkSequence=66, - tkYield=67,tkNew=68,tkOn=69,tkName=70,tkPrivate=71,tkProtected=72, - tkPublic=73,tkInternal=74,tkRead=75,tkWrite=76,tkParseModeExpression=77,tkParseModeStatement=78, - tkParseModeType=79,tkBegin=80,tkEnd=81,tkAsmBody=82,tkILCode=83,tkError=84, - INVISIBLE=85,tkRepeat=86,tkUntil=87,tkDo=88,tkComma=89,tkFinally=90, - tkTry=91,tkInitialization=92,tkFinalization=93,tkUnit=94,tkLibrary=95,tkExternal=96, - tkParams=97,tkAssign=98,tkPlusEqual=99,tkMinusEqual=100,tkMultEqual=101,tkDivEqual=102, - tkMinus=103,tkPlus=104,tkSlash=105,tkStar=106,tkEqual=107,tkGreater=108, - tkGreaterEqual=109,tkLower=110,tkLowerEqual=111,tkNotEqual=112,tkCSharpStyleOr=113,tkArrow=114, - tkOr=115,tkXor=116,tkAnd=117,tkDiv=118,tkMod=119,tkShl=120, - tkShr=121,tkNot=122,tkAs=123,tkIn=124,tkIs=125,tkImplicit=126, - tkExplicit=127,tkAddressOf=128,tkDeref=129,tkIdentifier=130,tkStringLiteral=131,tkAsciiChar=132, - tkAbstract=133,tkForward=134,tkOverload=135,tkReintroduce=136,tkOverride=137,tkVirtual=138, - tkExtensionMethod=139,tkInteger=140,tkFloat=141,tkHex=142}; + tkQuestion=13,tkQuestionPoint=14,tkSizeOf=15,tkTypeOf=16,tkWhere=17,tkArray=18, + tkCase=19,tkClass=20,tkAuto=21,tkConst=22,tkConstructor=23,tkDestructor=24, + tkElse=25,tkExcept=26,tkFile=27,tkFor=28,tkForeach=29,tkFunction=30, + tkIf=31,tkImplementation=32,tkInherited=33,tkInterface=34,tkProcedure=35,tkOperator=36, + tkProperty=37,tkRaise=38,tkRecord=39,tkSet=40,tkType=41,tkThen=42, + tkUses=43,tkVar=44,tkWhile=45,tkWith=46,tkNil=47,tkGoto=48, + tkOf=49,tkLabel=50,tkLock=51,tkProgram=52,tkEvent=53,tkDefault=54, + tkTemplate=55,tkPacked=56,tkExports=57,tkResourceString=58,tkThreadvar=59,tkSealed=60, + tkPartial=61,tkTo=62,tkDownto=63,tkCycle=64,tkSequence=65,tkYield=66, + tkNew=67,tkOn=68,tkName=69,tkPrivate=70,tkProtected=71,tkPublic=72, + tkInternal=73,tkRead=74,tkWrite=75,tkParseModeExpression=76,tkParseModeStatement=77,tkParseModeType=78, + tkBegin=79,tkEnd=80,tkAsmBody=81,tkILCode=82,tkError=83,INVISIBLE=84, + tkRepeat=85,tkUntil=86,tkDo=87,tkComma=88,tkFinally=89,tkTry=90, + tkInitialization=91,tkFinalization=92,tkUnit=93,tkLibrary=94,tkExternal=95,tkParams=96, + tkAssign=97,tkPlusEqual=98,tkMinusEqual=99,tkMultEqual=100,tkDivEqual=101,tkMinus=102, + tkPlus=103,tkSlash=104,tkStar=105,tkEqual=106,tkGreater=107,tkGreaterEqual=108, + tkLower=109,tkLowerEqual=110,tkNotEqual=111,tkCSharpStyleOr=112,tkArrow=113,tkOr=114, + tkXor=115,tkAnd=116,tkDiv=117,tkMod=118,tkShl=119,tkShr=120, + tkNot=121,tkAs=122,tkIn=123,tkIs=124,tkImplicit=125,tkExplicit=126, + tkAddressOf=127,tkDeref=128,tkIdentifier=129,tkStringLiteral=130,tkAsciiChar=131,tkAbstract=132, + tkForward=133,tkOverload=134,tkReintroduce=135,tkOverride=136,tkVirtual=137,tkExtensionMethod=138, + tkInteger=139,tkFloat=140,tkHex=141}; // Abstract base class for GPLEX scanners public abstract class ScanBase : AbstractScanner { @@ -56,7 +56,7 @@ public abstract class ScanBase : AbstractScanner { - // Verbatim content from ABCPascal.y + // Verbatim content from J:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y // ��� ���������� ����������� � ����� GPPGParser, �������������� ����� ������, ������������ �������� gppg public syntax_tree_node root; // �������� ���� ��������������� ������ @@ -68,12 +68,12 @@ public partial class GPPGParser: ShiftReduceParser scanner) : base(scanner) { } - // End verbatim content from ABCPascal.y + // End verbatim content from J:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y #pragma warning disable 649 private static Dictionary aliasses; #pragma warning restore 649 - private static Rule[] rules = new Rule[813]; + private static Rule[] rules = new Rule[814]; private static State[] states = new State[1302]; private static string[] nonTerms = new string[] { "parse_goal", "unit_key_word", "assignment", "optional_array_initializer", @@ -88,17 +88,17 @@ public partial class GPPGParser: ShiftReduceParser identifier, tkArrow, lambda_function_body + case 111: // const_expr -> const_simple_expr, const_relop, const_simple_expr +{ + CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); + } + break; + case 112: // const_expr -> question_constexpr +{ + CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; + } + break; + case 113: // question_constexpr -> const_expr, tkQuestion, const_expr, tkColon, const_expr +{ CurrentSemanticValue.ex = new question_colon_expression(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } + break; + case 114: // const_relop -> tkEqual +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 115: // const_relop -> tkNotEqual +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 116: // const_relop -> tkLower +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 117: // const_relop -> tkGreater +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 118: // const_relop -> tkLowerEqual +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 119: // const_relop -> tkGreaterEqual +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 120: // const_relop -> tkIn +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 121: // const_simple_expr -> const_term +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 122: // const_simple_expr -> const_simple_expr, const_addop, const_term +{ CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); } + break; + case 123: // const_addop -> tkPlus +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 124: // const_addop -> tkMinus +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 125: // const_addop -> tkOr +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 126: // const_addop -> tkXor +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 127: // as_is_constexpr -> const_term, typecast_op, simple_or_template_type_reference +{ + CurrentSemanticValue.ex = NewAsIsConstexpr(ValueStack[ValueStack.Depth-3].ex, (op_typecast)ValueStack[ValueStack.Depth-2].ob, ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); + } + break; + case 128: // const_term -> const_factor +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 129: // const_term -> as_is_constexpr +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 130: // const_term -> const_term, const_mulop, const_factor +{ CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); } + break; + case 131: // const_mulop -> tkStar +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 132: // const_mulop -> tkSlash +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 133: // const_mulop -> tkDiv +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 134: // const_mulop -> tkMod +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 135: // const_mulop -> tkShl +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 136: // const_mulop -> tkShr +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 137: // const_mulop -> tkAnd +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 138: // const_factor -> const_variable +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 139: // const_factor -> const_set +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 140: // const_factor -> unsigned_number +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 141: // const_factor -> literal +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 142: // const_factor -> tkNil +{ + CurrentSemanticValue.ex = new nil_const(); + CurrentSemanticValue.ex.source_context = CurrentLocationSpan; + } + break; + case 143: // const_factor -> tkAddressOf, const_factor +{ + CurrentSemanticValue.ex = new get_address(ValueStack[ValueStack.Depth-1].ex as addressed_value, CurrentLocationSpan); + } + break; + case 144: // const_factor -> tkRoundOpen, const_expr, tkRoundClose +{ + CurrentSemanticValue.ex = new bracket_expr(ValueStack[ValueStack.Depth-2].ex, CurrentLocationSpan); + } + break; + case 145: // const_factor -> tkNot, const_factor +{ + CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); + } + break; + case 146: // const_factor -> sign, const_factor +{ + CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); + } + break; + case 147: // const_factor -> tkDeref, const_factor +{ + CurrentSemanticValue.ex = new roof_dereference(ValueStack[ValueStack.Depth-1].ex as addressed_value, CurrentLocationSpan); + } + break; + case 148: // const_set -> tkSquareOpen, const_elem_list, tkSquareClose +{ + CurrentSemanticValue.ex = new pascal_set_constant(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); + } + break; + case 149: // sign -> tkPlus +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 150: // sign -> tkMinus +{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } + break; + case 151: // const_variable -> identifier +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].id; } + break; + case 152: // const_variable -> sizeof_expr +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 153: // const_variable -> typeof_expr +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 154: // const_variable -> const_variable, const_variable_2 +{ + CurrentSemanticValue.ex = NewConstVariable(ValueStack[ValueStack.Depth-2].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); + } + break; + case 155: // const_variable_2 -> tkPoint, identifier_or_keyword +{ + CurrentSemanticValue.ex = new dot_node(null, ValueStack[ValueStack.Depth-1].id as addressed_value, CurrentLocationSpan); + } + break; + case 156: // const_variable_2 -> tkDeref +{ + CurrentSemanticValue.ex = new roof_dereference(); + CurrentSemanticValue.ex.source_context = CurrentLocationSpan; + } + break; + case 157: // const_variable_2 -> tkRoundOpen, optional_const_func_expr_list, tkRoundClose +{ + CurrentSemanticValue.ex = new method_call(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); + } + break; + case 158: // const_variable_2 -> tkSquareOpen, const_elem_list, tkSquareClose +{ + CurrentSemanticValue.ex = new indexer(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); + } + break; + case 159: // optional_const_func_expr_list -> const_func_expr_list +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 160: // optional_const_func_expr_list -> /* empty */ +{ CurrentSemanticValue.stn = null; } + break; + case 161: // const_func_expr_list -> const_expr +{ + CurrentSemanticValue.stn = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); + } + break; + case 162: // const_func_expr_list -> const_func_expr_list, tkComma, const_expr +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as expression_list).Add(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); + } + break; + case 163: // const_elem_list -> const_elem_list1 +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 165: // const_elem_list1 -> const_elem +{ + CurrentSemanticValue.stn = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); + } + break; + case 166: // const_elem_list1 -> const_elem_list1, tkComma, const_elem +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as expression_list).Add(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); + } + break; + case 167: // const_elem -> const_expr +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 168: // const_elem -> const_expr, tkDotDot, const_expr +{ + CurrentSemanticValue.ex = new diapason_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); + } + break; + case 169: // unsigned_number -> tkInteger +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 170: // unsigned_number -> tkHex +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 171: // unsigned_number -> tkFloat +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 172: // typed_const -> const_expr +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 173: // typed_const -> array_const +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 174: // typed_const -> record_const +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 175: // array_const -> tkRoundOpen, typed_const_list, tkRoundClose +{ + CurrentSemanticValue.ex = new array_const(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); + } + break; + case 176: // array_const -> tkRoundOpen, record_const, tkRoundClose +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-2].ex; } + break; + case 177: // array_const -> tkRoundOpen, array_const, tkRoundClose +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-2].ex; } + break; + case 179: // typed_const_list -> typed_const_list1 +{ + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; + } + break; + case 180: // typed_const_list1 -> typed_const_plus +{ + CurrentSemanticValue.stn = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); + } + break; + case 181: // typed_const_list1 -> typed_const_list1, tkComma, typed_const_plus +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as expression_list).Add(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); + } + break; + case 182: // record_const -> tkRoundOpen, const_field_list, tkRoundClose +{ + CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-2].ex; + CurrentSemanticValue.ex.source_context = CurrentLocationSpan; + } + break; + case 183: // const_field_list -> const_field_list_1 +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 184: // const_field_list -> const_field_list_1, tkSemiColon +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-2].ex; } + break; + case 185: // const_field_list_1 -> const_field +{ + CurrentSemanticValue.ex = new record_const(ValueStack[ValueStack.Depth-1].stn as record_const_definition, CurrentLocationSpan); + } + break; + case 186: // const_field_list_1 -> const_field_list_1, tkSemiColon, const_field +{ + CurrentSemanticValue.ex = (ValueStack[ValueStack.Depth-3].ex as record_const).Add(ValueStack[ValueStack.Depth-1].stn as record_const_definition, CurrentLocationSpan); + } + break; + case 187: // const_field -> const_field_name, tkColon, typed_const +{ + CurrentSemanticValue.stn = new record_const_definition(ValueStack[ValueStack.Depth-3].id, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); + } + break; + case 188: // const_field_name -> identifier +{ CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } + break; + case 189: // type_decl -> attribute_declarations, simple_type_decl +{ + (ValueStack[ValueStack.Depth-1].stn as declaration).attributes = ValueStack[ValueStack.Depth-2].stn as attribute_list; + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; + CurrentSemanticValue.stn.source_context = LocationStack[LocationStack.Depth-1]; + } + break; + case 190: // attribute_declarations -> attribute_declaration +{ + CurrentSemanticValue.stn = new attribute_list(ValueStack[ValueStack.Depth-1].stn as simple_attribute_list, CurrentLocationSpan); + } + break; + case 191: // attribute_declarations -> attribute_declarations, attribute_declaration +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-2].stn as attribute_list).Add(ValueStack[ValueStack.Depth-1].stn as simple_attribute_list, CurrentLocationSpan); + } + break; + case 192: // attribute_declarations -> /* empty */ +{ CurrentSemanticValue.stn = null; } + break; + case 193: // attribute_declaration -> tkSquareOpen, one_or_some_attribute, tkSquareClose +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } + break; + case 194: // one_or_some_attribute -> one_attribute +{ + CurrentSemanticValue.stn = new simple_attribute_list(ValueStack[ValueStack.Depth-1].stn as attribute, CurrentLocationSpan); + } + break; + case 195: // one_or_some_attribute -> one_or_some_attribute, tkComma, one_attribute +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as simple_attribute_list).Add(ValueStack[ValueStack.Depth-1].stn as attribute, CurrentLocationSpan); + } + break; + case 196: // one_attribute -> attribute_variable +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 197: // one_attribute -> identifier, tkColon, attribute_variable +{ + (ValueStack[ValueStack.Depth-1].stn as attribute).qualifier = ValueStack[ValueStack.Depth-3].id; + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; + CurrentSemanticValue.stn.source_context = CurrentLocationSpan; + } + break; + case 198: // simple_type_decl -> type_decl_identifier, tkEqual, type_decl_type, tkSemiColon +{ + CurrentSemanticValue.stn = new type_declaration(ValueStack[ValueStack.Depth-4].id, ValueStack[ValueStack.Depth-2].td, CurrentLocationSpan); + } + break; + case 199: // simple_type_decl -> template_identifier_with_equal, type_decl_type, tkSemiColon +{ + CurrentSemanticValue.stn = new type_declaration(ValueStack[ValueStack.Depth-3].id, ValueStack[ValueStack.Depth-2].td, CurrentLocationSpan); + } + break; + case 200: // type_decl_identifier -> identifier +{ CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } + break; + case 201: // type_decl_identifier -> identifier, template_arguments +{ + CurrentSemanticValue.id = new template_type_name(ValueStack[ValueStack.Depth-2].id.name, ValueStack[ValueStack.Depth-1].stn as ident_list, CurrentLocationSpan); + } + break; + case 202: // template_identifier_with_equal -> identifier, tkLower, ident_list, + // tkGreaterEqual +{ + CurrentSemanticValue.id = new template_type_name(ValueStack[ValueStack.Depth-4].id.name, ValueStack[ValueStack.Depth-2].stn as ident_list, CurrentLocationSpan); + } + break; + case 203: // type_decl_type -> type_ref +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 204: // type_decl_type -> object_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 205: // type_ref -> simple_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 206: // type_ref -> string_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 207: // type_ref -> pointer_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 208: // type_ref -> structured_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 209: // type_ref -> procedural_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 210: // type_ref -> template_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 211: // template_type -> simple_type_identifier, template_type_params +{ + CurrentSemanticValue.td = new template_type_reference(ValueStack[ValueStack.Depth-2].td as named_type_reference, ValueStack[ValueStack.Depth-1].stn as template_param_list, CurrentLocationSpan); + } + break; + case 212: // template_type_params -> tkLower, template_param_list, tkGreater +{ + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; + CurrentSemanticValue.stn.source_context = CurrentLocationSpan; + } + break; + case 213: // template_param_list -> template_param +{ + CurrentSemanticValue.stn = new template_param_list(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); + } + break; + case 214: // template_param_list -> template_param_list, tkComma, template_param +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as template_param_list).Add(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); + } + break; + case 215: // template_param -> simple_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 216: // template_param -> structured_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 217: // template_param -> procedural_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 218: // template_param -> template_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 219: // simple_type -> range_expr +{ + CurrentSemanticValue.td = parsertools.ConvertDotNodeOrIdentToNamedTypeReference(ValueStack[ValueStack.Depth-1].ex); + } + break; + case 220: // simple_type -> range_expr, tkDotDot, range_expr +{ + CurrentSemanticValue.td = new diapason(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); + } + break; + case 221: // simple_type -> tkRoundOpen, enumeration_id_list, tkRoundClose +{ + CurrentSemanticValue.td = new enum_type_definition(ValueStack[ValueStack.Depth-2].stn as enumerator_list, CurrentLocationSpan); + } + break; + case 222: // range_expr -> range_term +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 223: // range_expr -> range_expr, const_addop, range_term +{ + CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); + } + break; + case 224: // range_term -> range_factor +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 225: // range_term -> range_term, const_mulop, range_factor +{ + CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); + } + break; + case 226: // range_factor -> simple_type_identifier +{ + CurrentSemanticValue.ex = parsertools.ConvertNamedTypeReferenceToDotNodeOrIdent(ValueStack[ValueStack.Depth-1].td as named_type_reference); + } + break; + case 227: // range_factor -> unsigned_number +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 228: // range_factor -> sign, range_factor +{ + CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); + } + break; + case 229: // range_factor -> literal +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 230: // range_factor -> range_factor, tkRoundOpen, const_elem_list, tkRoundClose +{ + CurrentSemanticValue.ex = new method_call(ValueStack[ValueStack.Depth-4].ex as addressed_value, ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); + } + break; + case 231: // simple_type_identifier -> identifier +{ + CurrentSemanticValue.td = new named_type_reference(ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); + } + break; + case 232: // simple_type_identifier -> simple_type_identifier, tkPoint, + // identifier_or_keyword +{ + CurrentSemanticValue.td = (ValueStack[ValueStack.Depth-3].td as named_type_reference).Add(ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); + } + break; + case 233: // enumeration_id_list -> enumeration_id, tkComma, enumeration_id +{ + CurrentSemanticValue.stn = new enumerator_list(ValueStack[ValueStack.Depth-3].stn as enumerator, CurrentLocationSpan); + (CurrentSemanticValue.stn as enumerator_list).Add(ValueStack[ValueStack.Depth-1].stn as enumerator, CurrentLocationSpan); + } + break; + case 234: // enumeration_id_list -> enumeration_id_list, tkComma, enumeration_id +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as enumerator_list).Add(ValueStack[ValueStack.Depth-1].stn as enumerator, CurrentLocationSpan); + } + break; + case 235: // enumeration_id -> type_ref +{ + CurrentSemanticValue.stn = new enumerator(ValueStack[ValueStack.Depth-1].td, null, CurrentLocationSpan); + } + break; + case 236: // enumeration_id -> type_ref, tkEqual, expr +{ + CurrentSemanticValue.stn = new enumerator(ValueStack[ValueStack.Depth-3].td, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); + } + break; + case 237: // pointer_type -> tkDeref, fptype +{ + CurrentSemanticValue.td = new ref_type(ValueStack[ValueStack.Depth-1].td,CurrentLocationSpan); + } + break; + case 238: // structured_type -> unpacked_structured_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 239: // structured_type -> tkPacked, unpacked_structured_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 240: // unpacked_structured_type -> array_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 241: // unpacked_structured_type -> record_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 242: // unpacked_structured_type -> set_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 243: // unpacked_structured_type -> file_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 244: // unpacked_structured_type -> sequence_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 245: // sequence_type -> tkSequence, tkOf, type_ref +{ + CurrentSemanticValue.td = new sequence_type(ValueStack[ValueStack.Depth-1].td,CurrentLocationSpan); + } + break; + case 246: // array_type -> tkArray, tkSquareOpen, simple_type_list, tkSquareClose, tkOf, + // type_ref +{ + CurrentSemanticValue.td = new array_type(ValueStack[ValueStack.Depth-4].stn as indexers_types, ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); + } + break; + case 247: // array_type -> unsized_array_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 248: // unsized_array_type -> tkArray, tkOf, type_ref +{ + CurrentSemanticValue.td = new array_type(null, ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); + } + break; + case 249: // simple_type_list -> simple_type_or_ +{ + CurrentSemanticValue.stn = new indexers_types(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); + } + break; + case 250: // simple_type_list -> simple_type_list, tkComma, simple_type_or_ +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as indexers_types).Add(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); + } + break; + case 251: // simple_type_or_ -> simple_type +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 252: // simple_type_or_ -> /* empty */ +{ CurrentSemanticValue.td = null; } + break; + case 253: // set_type -> tkSet, tkOf, simple_type +{ + CurrentSemanticValue.td = new set_type_definition(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); + } + break; + case 254: // file_type -> tkFile, tkOf, type_ref +{ + CurrentSemanticValue.td = new file_type(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); + } + break; + case 255: // file_type -> tkFile +{ + CurrentSemanticValue.td = new file_type(); + CurrentSemanticValue.td.source_context = CurrentLocationSpan; + } + break; + case 256: // string_type -> tkIdentifier, tkSquareOpen, const_expr, tkSquareClose +{ + CurrentSemanticValue.td = new string_num_definition(ValueStack[ValueStack.Depth-2].ex, ValueStack[ValueStack.Depth-4].id, CurrentLocationSpan); + } + break; + case 257: // procedural_type -> procedural_type_kind +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 258: // procedural_type_kind -> proc_type_decl +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 259: // proc_type_decl -> tkProcedure, fp_list +{ + CurrentSemanticValue.td = new procedure_header(ValueStack[ValueStack.Depth-1].stn as formal_parameters,null,null,false,false,null,null,CurrentLocationSpan); + } + break; + case 260: // proc_type_decl -> tkFunction, fp_list +{ + CurrentSemanticValue.td = new function_header(ValueStack[ValueStack.Depth-1].stn as formal_parameters, null, null, null, null, CurrentLocationSpan); + } + break; + case 261: // proc_type_decl -> tkFunction, fp_list, tkColon, fptype +{ + CurrentSemanticValue.td = new function_header(ValueStack[ValueStack.Depth-3].stn as formal_parameters, null, null, null, ValueStack[ValueStack.Depth-1].td as type_definition, CurrentLocationSpan); + } + break; + case 262: // proc_type_decl -> simple_type_identifier, tkArrow, template_param +{ + CurrentSemanticValue.td = new modern_proc_type(ValueStack[ValueStack.Depth-3].td,null,ValueStack[ValueStack.Depth-1].td,CurrentLocationSpan); + } + break; + case 263: // proc_type_decl -> template_type, tkArrow, template_param +{ + CurrentSemanticValue.td = new modern_proc_type(ValueStack[ValueStack.Depth-3].td,null,ValueStack[ValueStack.Depth-1].td,CurrentLocationSpan); + } + break; + case 264: // proc_type_decl -> tkRoundOpen, tkRoundClose, tkArrow, template_param +{ + CurrentSemanticValue.td = new modern_proc_type(null,null,ValueStack[ValueStack.Depth-1].td,CurrentLocationSpan); + } + break; + case 265: // proc_type_decl -> tkRoundOpen, enumeration_id_list, tkRoundClose, tkArrow, + // template_param +{ + CurrentSemanticValue.td = new modern_proc_type(null,ValueStack[ValueStack.Depth-4].stn as enumerator_list,ValueStack[ValueStack.Depth-1].td,CurrentLocationSpan); + } + break; + case 266: // proc_type_decl -> simple_type_identifier, tkArrow, tkRoundOpen, tkRoundClose +{ + CurrentSemanticValue.td = new modern_proc_type(ValueStack[ValueStack.Depth-4].td,null,null,CurrentLocationSpan); + } + break; + case 267: // proc_type_decl -> template_type, tkArrow, tkRoundOpen, tkRoundClose +{ + CurrentSemanticValue.td = new modern_proc_type(ValueStack[ValueStack.Depth-4].td,null,null,CurrentLocationSpan); + } + break; + case 268: // proc_type_decl -> tkRoundOpen, tkRoundClose, tkArrow, tkRoundOpen, tkRoundClose +{ + CurrentSemanticValue.td = new modern_proc_type(null,null,null,CurrentLocationSpan); + } + break; + case 269: // proc_type_decl -> tkRoundOpen, enumeration_id_list, tkRoundClose, tkArrow, + // tkRoundOpen, tkRoundClose +{ + CurrentSemanticValue.td = new modern_proc_type(null,ValueStack[ValueStack.Depth-5].stn as enumerator_list,null,CurrentLocationSpan); + } + break; + case 270: // object_type -> class_attributes, class_or_interface_keyword, + // optional_base_classes, optional_where_section, + // optional_component_list_seq_end +{ + CurrentSemanticValue.td = NewObjectType((class_attribute)ValueStack[ValueStack.Depth-5].ob, ValueStack[ValueStack.Depth-4].ti, ValueStack[ValueStack.Depth-3].stn as named_type_reference_list, ValueStack[ValueStack.Depth-2].stn as where_definition_list, ValueStack[ValueStack.Depth-1].stn as class_body, CurrentLocationSpan); + } + break; + case 271: // record_type -> tkRecord, optional_base_classes, optional_where_section, + // member_list_section, tkEnd +{ + CurrentSemanticValue.td = NewRecordType(ValueStack[ValueStack.Depth-4].stn as named_type_reference_list, ValueStack[ValueStack.Depth-3].stn as where_definition_list, ValueStack[ValueStack.Depth-2].stn as class_body, CurrentLocationSpan); + } + break; + case 272: // class_attribute -> tkSealed +{ CurrentSemanticValue.ob = class_attribute.Sealed; } + break; + case 273: // class_attribute -> tkPartial +{ CurrentSemanticValue.ob = class_attribute.Partial; } + break; + case 274: // class_attribute -> tkAbstract +{ CurrentSemanticValue.ob = class_attribute.Abstract; } + break; + case 275: // class_attribute -> tkAuto +{ CurrentSemanticValue.ob = class_attribute.Auto; } + break; + case 276: // class_attributes -> /* empty */ +{ + CurrentSemanticValue.ob = class_attribute.None; + } + break; + case 277: // class_attributes -> class_attributes1 +{ + CurrentSemanticValue.ob = ValueStack[ValueStack.Depth-1].ob; + } + break; + case 278: // class_attributes1 -> class_attribute +{ + CurrentSemanticValue.ob = ValueStack[ValueStack.Depth-1].ob; + } + break; + case 279: // class_attributes1 -> class_attributes1, class_attribute +{ + ValueStack[ValueStack.Depth-2].ob = ((class_attribute)ValueStack[ValueStack.Depth-2].ob) | ((class_attribute)ValueStack[ValueStack.Depth-1].ob); + CurrentSemanticValue.ob = ValueStack[ValueStack.Depth-2].ob; + } + break; + case 280: // class_or_interface_keyword -> tkClass +{ CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } + break; + case 281: // class_or_interface_keyword -> tkInterface +{ CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } + break; + case 282: // class_or_interface_keyword -> tkTemplate +{ + CurrentSemanticValue.ti = NewClassOrInterfaceKeyword(ValueStack[ValueStack.Depth-1].ti); + } + break; + case 283: // class_or_interface_keyword -> tkTemplate, tkClass +{ + CurrentSemanticValue.ti = NewClassOrInterfaceKeyword(ValueStack[ValueStack.Depth-2].ti, "c", CurrentLocationSpan); + } + break; + case 284: // class_or_interface_keyword -> tkTemplate, tkRecord +{ + CurrentSemanticValue.ti = NewClassOrInterfaceKeyword(ValueStack[ValueStack.Depth-2].ti, "r", CurrentLocationSpan); + } + break; + case 285: // class_or_interface_keyword -> tkTemplate, tkInterface +{ + CurrentSemanticValue.ti = NewClassOrInterfaceKeyword(ValueStack[ValueStack.Depth-2].ti, "i", CurrentLocationSpan); + } + break; + case 286: // optional_component_list_seq_end -> /* empty */ +{ CurrentSemanticValue.stn = null; } + break; + case 287: // optional_component_list_seq_end -> member_list_section, tkEnd +{ + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; + CurrentSemanticValue.stn.source_context = CurrentLocationSpan; + } + break; + case 289: // optional_base_classes -> tkRoundOpen, base_classes_names_list, tkRoundClose +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } + break; + case 290: // base_classes_names_list -> base_class_name +{ + CurrentSemanticValue.stn = new named_type_reference_list(ValueStack[ValueStack.Depth-1].stn as named_type_reference, CurrentLocationSpan); + } + break; + case 291: // base_classes_names_list -> base_classes_names_list, tkComma, base_class_name +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as named_type_reference_list).Add(ValueStack[ValueStack.Depth-1].stn as named_type_reference, CurrentLocationSpan); + } + break; + case 292: // base_class_name -> simple_type_identifier +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].td; } + break; + case 293: // base_class_name -> template_type +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].td; } + break; + case 294: // template_arguments -> tkLower, ident_list, tkGreater +{ + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; + CurrentSemanticValue.stn.source_context = CurrentLocationSpan; + } + break; + case 295: // optional_where_section -> /* empty */ +{ CurrentSemanticValue.stn = null; } + break; + case 296: // optional_where_section -> where_part_list +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 297: // where_part_list -> where_part +{ + CurrentSemanticValue.stn = new where_definition_list(ValueStack[ValueStack.Depth-1].stn as where_definition, CurrentLocationSpan); + } + break; + case 298: // where_part_list -> where_part_list, where_part +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-2].stn as where_definition_list).Add(ValueStack[ValueStack.Depth-1].stn as where_definition, CurrentLocationSpan); + } + break; + case 299: // where_part -> tkWhere, ident_list, tkColon, type_ref_and_secific_list, + // tkSemiColon +{ + CurrentSemanticValue.stn = new where_definition(ValueStack[ValueStack.Depth-4].stn as ident_list, ValueStack[ValueStack.Depth-2].stn as where_type_specificator_list, CurrentLocationSpan); + } + break; + case 300: // type_ref_and_secific_list -> type_ref_or_secific +{ + CurrentSemanticValue.stn = new where_type_specificator_list(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); + } + break; + case 301: // type_ref_and_secific_list -> type_ref_and_secific_list, tkComma, + // type_ref_or_secific +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as where_type_specificator_list).Add(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); + } + break; + case 302: // type_ref_or_secific -> type_ref +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 303: // type_ref_or_secific -> tkClass +{ + CurrentSemanticValue.td = new declaration_specificator(DeclarationSpecificator.WhereDefClass, ValueStack[ValueStack.Depth-1].ti.text, CurrentLocationSpan); + } + break; + case 304: // type_ref_or_secific -> tkRecord +{ + CurrentSemanticValue.td = new declaration_specificator(DeclarationSpecificator.WhereDefValueType, ValueStack[ValueStack.Depth-1].ti.text, CurrentLocationSpan); + } + break; + case 305: // type_ref_or_secific -> tkConstructor +{ + CurrentSemanticValue.td = new declaration_specificator(DeclarationSpecificator.WhereDefConstructor, ValueStack[ValueStack.Depth-1].ti.text, CurrentLocationSpan); + } + break; + case 306: // member_list_section -> member_list +{ + CurrentSemanticValue.stn = new class_body(ValueStack[ValueStack.Depth-1].stn as class_members, CurrentLocationSpan); + } + break; + case 307: // member_list_section -> member_list_section, ot_visibility_specifier, + // member_list +{ + (ValueStack[ValueStack.Depth-1].stn as class_members).access_mod = ValueStack[ValueStack.Depth-2].stn as access_modifer_node; + (ValueStack[ValueStack.Depth-3].stn as class_body).Add(ValueStack[ValueStack.Depth-1].stn as class_members,CurrentLocationSpan); + + if ((ValueStack[ValueStack.Depth-3].stn as class_body).class_def_blocks[0].members.Count == 0) + (ValueStack[ValueStack.Depth-3].stn as class_body).class_def_blocks.RemoveAt(0); + + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-3].stn; + } + break; + case 308: // ot_visibility_specifier -> tkInternal +{ CurrentSemanticValue.stn = new access_modifer_node(access_modifer.internal_modifer, CurrentLocationSpan); } + break; + case 309: // ot_visibility_specifier -> tkPublic +{ CurrentSemanticValue.stn = new access_modifer_node(access_modifer.public_modifer, CurrentLocationSpan); } + break; + case 310: // ot_visibility_specifier -> tkProtected +{ CurrentSemanticValue.stn = new access_modifer_node(access_modifer.protected_modifer, CurrentLocationSpan); } + break; + case 311: // ot_visibility_specifier -> tkPrivate +{ CurrentSemanticValue.stn = new access_modifer_node(access_modifer.private_modifer, CurrentLocationSpan); } + break; + case 312: // member_list -> /* empty */ +{ CurrentSemanticValue.stn = new class_members(); } + break; + case 313: // member_list -> field_or_const_definition_list, optional_semicolon +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } + break; + case 314: // member_list -> method_decl_list +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 315: // member_list -> field_or_const_definition_list, tkSemiColon, method_decl_list +{ + (ValueStack[ValueStack.Depth-3].stn as class_members).members.AddRange((ValueStack[ValueStack.Depth-1].stn as class_members).members); + (ValueStack[ValueStack.Depth-3].stn as class_members).source_context = CurrentLocationSpan; + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-3].stn; + } + break; + case 316: // ident_list -> identifier +{ + CurrentSemanticValue.stn = new ident_list(ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); + } + break; + case 317: // ident_list -> ident_list, tkComma, identifier +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as ident_list).Add(ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); + } + break; + case 318: // optional_semicolon -> /* empty */ +{ CurrentSemanticValue.ob = null; } + break; + case 319: // optional_semicolon -> tkSemiColon +{ CurrentSemanticValue.ob = ValueStack[ValueStack.Depth-1].ti; } + break; + case 320: // field_or_const_definition_list -> field_or_const_definition +{ + CurrentSemanticValue.stn = new class_members(ValueStack[ValueStack.Depth-1].stn as declaration, CurrentLocationSpan); + } + break; + case 321: // field_or_const_definition_list -> field_or_const_definition_list, tkSemiColon, + // field_or_const_definition +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as class_members).Add(ValueStack[ValueStack.Depth-1].stn as declaration, CurrentLocationSpan); + } + break; + case 322: // field_or_const_definition -> attribute_declarations, + // simple_field_or_const_definition +{ + (ValueStack[ValueStack.Depth-1].stn as declaration).attributes = ValueStack[ValueStack.Depth-2].stn as attribute_list; + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; + } + break; + case 323: // method_decl_list -> method_or_property_decl +{ + CurrentSemanticValue.stn = new class_members(ValueStack[ValueStack.Depth-1].stn as declaration, CurrentLocationSpan); + } + break; + case 324: // method_decl_list -> method_decl_list, method_or_property_decl +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-2].stn as class_members).Add(ValueStack[ValueStack.Depth-1].stn as declaration, CurrentLocationSpan); + } + break; + case 325: // method_or_property_decl -> method_decl_withattr +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 326: // method_or_property_decl -> property_definition +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 327: // simple_field_or_const_definition -> tkConst, only_const_decl +{ + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; + CurrentSemanticValue.stn.source_context = CurrentLocationSpan; + } + break; + case 328: // simple_field_or_const_definition -> field_definition +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 329: // simple_field_or_const_definition -> tkClass, field_definition +{ + (ValueStack[ValueStack.Depth-1].stn as var_def_statement).var_attr = definition_attribute.Static; + (ValueStack[ValueStack.Depth-1].stn as var_def_statement).source_context = CurrentLocationSpan; + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; + } + break; + case 330: // field_definition -> var_decl_part +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 331: // field_definition -> tkEvent, ident_list, tkColon, type_ref +{ + CurrentSemanticValue.stn = new var_def_statement(ValueStack[ValueStack.Depth-3].stn as ident_list, ValueStack[ValueStack.Depth-1].td, null, definition_attribute.None, true, CurrentLocationSpan); + } + break; + case 332: // method_decl_withattr -> attribute_declarations, method_header +{ + (ValueStack[ValueStack.Depth-1].td as declaration).attributes = ValueStack[ValueStack.Depth-2].stn as attribute_list; + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].td; + } + break; + case 333: // method_decl_withattr -> attribute_declarations, method_decl +{ + (ValueStack[ValueStack.Depth-1].stn as declaration).attributes = ValueStack[ValueStack.Depth-2].stn as attribute_list; + CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; + } + break; + case 334: // method_decl -> inclass_proc_func_decl +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 335: // method_decl -> inclass_constr_destr_decl +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 336: // method_header -> tkClass, method_procfunc_header +{ + (ValueStack[ValueStack.Depth-1].td as procedure_header).class_keyword = true; + CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; + } + break; + case 337: // method_header -> method_procfunc_header +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 338: // method_header -> constr_destr_header +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 339: // method_procfunc_header -> proc_func_header +{ + CurrentSemanticValue.td = NewProcfuncHeading(ValueStack[ValueStack.Depth-1].td as procedure_header); + } + break; + case 340: // proc_func_header -> proc_header +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 341: // proc_func_header -> func_header +{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } + break; + case 342: // constr_destr_header -> tkConstructor, optional_proc_name, fp_list, + // optional_method_modificators +{ + CurrentSemanticValue.td = new constructor(null,ValueStack[ValueStack.Depth-2].stn as formal_parameters,ValueStack[ValueStack.Depth-1].stn as procedure_attributes_list,ValueStack[ValueStack.Depth-3].stn as method_name,false,false,null,null,CurrentLocationSpan); + } + break; + case 343: // constr_destr_header -> tkClass, tkConstructor, optional_proc_name, fp_list, + // optional_method_modificators +{ + CurrentSemanticValue.td = new constructor(null,ValueStack[ValueStack.Depth-2].stn as formal_parameters,ValueStack[ValueStack.Depth-1].stn as procedure_attributes_list,ValueStack[ValueStack.Depth-3].stn as method_name,false,true,null,null,CurrentLocationSpan); + } + break; + case 344: // constr_destr_header -> tkDestructor, optional_proc_name, fp_list, + // optional_method_modificators +{ + CurrentSemanticValue.td = new destructor(null,ValueStack[ValueStack.Depth-2].stn as formal_parameters,ValueStack[ValueStack.Depth-1].stn as procedure_attributes_list,ValueStack[ValueStack.Depth-3].stn as method_name, false,false,null,null,CurrentLocationSpan); + } + break; + case 345: // optional_proc_name -> proc_name +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 346: // optional_proc_name -> /* empty */ +{ CurrentSemanticValue.stn = null; } + break; + case 347: // qualified_identifier -> identifier +{ CurrentSemanticValue.stn = new method_name(null,null,ValueStack[ValueStack.Depth-1].id,null,CurrentLocationSpan); } + break; + case 348: // qualified_identifier -> visibility_specifier +{ CurrentSemanticValue.stn = new method_name(null,null,ValueStack[ValueStack.Depth-1].id,null,CurrentLocationSpan); } + break; + case 349: // qualified_identifier -> qualified_identifier, tkPoint, identifier +{ + CurrentSemanticValue.stn = NewQualifiedIdentifier(ValueStack[ValueStack.Depth-3].stn as method_name, ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); + } + break; + case 350: // qualified_identifier -> qualified_identifier, tkPoint, visibility_specifier +{ + CurrentSemanticValue.stn = NewQualifiedIdentifier(ValueStack[ValueStack.Depth-3].stn as method_name, ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); + } + break; + case 351: // property_definition -> attribute_declarations, simple_prim_property_definition +{ + CurrentSemanticValue.stn = NewPropertyDefinition(ValueStack[ValueStack.Depth-2].stn as attribute_list, ValueStack[ValueStack.Depth-1].stn as declaration, LocationStack[LocationStack.Depth-1]); + } + break; + case 352: // simple_prim_property_definition -> simple_property_definition +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } + break; + case 353: // simple_prim_property_definition -> tkClass, simple_property_definition +{ + CurrentSemanticValue.stn = NewSimplePrimPropertyDefinition(ValueStack[ValueStack.Depth-1].stn as simple_property, CurrentLocationSpan); + } + break; + case 354: // simple_property_definition -> tkProperty, qualified_identifier, + // property_interface, property_specifiers, + // tkSemiColon, array_defaultproperty +{ + CurrentSemanticValue.stn = NewSimplePropertyDefinition(ValueStack[ValueStack.Depth-5].stn as method_name, ValueStack[ValueStack.Depth-4].stn as property_interface, ValueStack[ValueStack.Depth-3].stn as property_accessors, ValueStack[ValueStack.Depth-1].stn as property_array_default, CurrentLocationSpan); + } + break; + case 355: // array_defaultproperty -> /* empty */ +{ CurrentSemanticValue.stn = null; } + break; + case 356: // array_defaultproperty -> tkDefault, tkSemiColon +{ + CurrentSemanticValue.stn = new property_array_default(); + CurrentSemanticValue.stn.source_context = CurrentLocationSpan; + } + break; + case 357: // property_interface -> /* empty */ +{ CurrentSemanticValue.stn = null; } + break; + case 358: // property_interface -> property_parameter_list, tkColon, fptype +{ + CurrentSemanticValue.stn = new property_interface(ValueStack[ValueStack.Depth-3].stn as property_parameter_list, ValueStack[ValueStack.Depth-1].td, null, CurrentLocationSpan); + } + break; + case 359: // property_parameter_list -> /* empty */ +{ CurrentSemanticValue.stn = null; } + break; + case 360: // property_parameter_list -> tkSquareOpen, parameter_decl_list, tkSquareClose +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } + break; + case 361: // parameter_decl_list -> parameter_decl +{ + CurrentSemanticValue.stn = new property_parameter_list(ValueStack[ValueStack.Depth-1].stn as property_parameter, CurrentLocationSpan); + } + break; + case 362: // parameter_decl_list -> parameter_decl_list, tkSemiColon, parameter_decl +{ + CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as property_parameter_list).Add(ValueStack[ValueStack.Depth-1].stn as property_parameter, CurrentLocationSpan); + } + break; + case 363: // parameter_decl -> ident_list, tkColon, fptype +{ + CurrentSemanticValue.stn = new property_parameter(ValueStack[ValueStack.Depth-3].stn as ident_list, ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); + } + break; + case 364: // optional_identifier -> identifier +{ CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } + break; + case 365: // optional_identifier -> /* empty */ +{ CurrentSemanticValue.id = null; } + break; + case 367: // property_specifiers -> tkRead, optional_identifier, property_specifiers +{ + CurrentSemanticValue.stn = NewPropertySpecifiersRead(ValueStack[ValueStack.Depth-3].id, ValueStack[ValueStack.Depth-2].id, ValueStack[ValueStack.Depth-1].stn as property_accessors, CurrentLocationSpan); + } + break; + case 368: // property_specifiers -> tkWrite, optional_identifier, property_specifiers +{ + CurrentSemanticValue.stn = NewPropertySpecifiersWrite(ValueStack[ValueStack.Depth-3].id, ValueStack[ValueStack.Depth-2].id, ValueStack[ValueStack.Depth-1].stn as property_accessors, CurrentLocationSpan); + } + break; + case 369: // var_decl -> var_decl_part, tkSemiColon +{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } + break; + case 372: // var_decl_part -> ident_list, tkColon, type_ref +{ + CurrentSemanticValue.stn = new var_def_statement(ValueStack[ValueStack.Depth-3].stn as ident_list, ValueStack[ValueStack.Depth-1].td, null, definition_attribute.None, false, CurrentLocationSpan); + } + break; + case 373: // var_decl_part -> ident_list, tkAssign, expr +{ + CurrentSemanticValue.stn = new var_def_statement(ValueStack[ValueStack.Depth-3].stn as ident_list, null, ValueStack[ValueStack.Depth-1].ex, definition_attribute.None, false, CurrentLocationSpan); + } + break; + case 374: // var_decl_part -> ident_list, tkColon, type_ref, tkAssignOrEqual, + // typed_var_init_expression +{ + CurrentSemanticValue.stn = new var_def_statement(ValueStack[ValueStack.Depth-5].stn as ident_list, ValueStack[ValueStack.Depth-3].td, ValueStack[ValueStack.Depth-1].ex, definition_attribute.None, false, CurrentLocationSpan); + } + break; + case 375: // typed_var_init_expression -> typed_const_plus +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 376: // typed_var_init_expression -> expl_func_decl_lambda +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 377: // typed_var_init_expression -> identifier, tkArrow, lambda_function_body { var idList = new ident_list(ValueStack[ValueStack.Depth-3].id, LocationStack[LocationStack.Depth-3]); var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), parametr_kind.none, null, LocationStack[LocationStack.Depth-3]), LocationStack[LocationStack.Depth-3]); CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), ValueStack[ValueStack.Depth-1].stn as statement_list, CurrentLocationSpan); } break; - case 112: // const_expr -> tkRoundOpen, tkRoundClose, lambda_type_ref, tkArrow, - // lambda_function_body + case 378: // typed_var_init_expression -> tkRoundOpen, tkRoundClose, lambda_type_ref, + // tkArrow, lambda_function_body { CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), null, ValueStack[ValueStack.Depth-3].td, ValueStack[ValueStack.Depth-1].stn as statement_list, CurrentLocationSpan); } break; - case 113: // const_expr -> tkRoundOpen, typed_const_list, tkRoundClose, tkArrow, - // lambda_function_body + case 379: // typed_var_init_expression -> tkRoundOpen, typed_const_list, tkRoundClose, + // tkArrow, lambda_function_body { var el = ValueStack[ValueStack.Depth-4].stn as expression_list; var cnt = el.expressions.Count; @@ -2793,1150 +3890,54 @@ public partial class GPPGParser: ShiftReduceParser const_simple_expr, const_relop, const_simple_expr -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); - } - break; - case 115: // const_expr -> question_constexpr -{ - CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; - } - break; - case 116: // question_constexpr -> const_expr, tkQuestion, const_expr, tkColon, const_expr -{ CurrentSemanticValue.ex = new question_colon_expression(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } - break; - case 117: // const_relop -> tkEqual -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 118: // const_relop -> tkNotEqual -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 119: // const_relop -> tkLower -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 120: // const_relop -> tkGreater -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 121: // const_relop -> tkLowerEqual -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 122: // const_relop -> tkGreaterEqual -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 123: // const_relop -> tkIn -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 124: // const_simple_expr -> const_term + case 380: // typed_const_plus -> typed_const { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 125: // const_simple_expr -> const_simple_expr, const_addop, const_term -{ CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); } - break; - case 126: // const_addop -> tkPlus -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 127: // const_addop -> tkMinus -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 128: // const_addop -> tkOr -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 129: // const_addop -> tkXor -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 130: // as_is_constexpr -> const_term, typecast_op, simple_or_template_type_reference -{ - CurrentSemanticValue.ex = NewAsIsConstexpr(ValueStack[ValueStack.Depth-3].ex, (op_typecast)ValueStack[ValueStack.Depth-2].ob, ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); - } - break; - case 131: // const_term -> const_factor + case 381: // typed_const_plus -> new_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 132: // const_term -> as_is_constexpr + case 382: // typed_const_plus -> default_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 133: // const_term -> const_term, const_mulop, const_factor -{ CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); } - break; - case 134: // const_mulop -> tkStar -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 135: // const_mulop -> tkSlash -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 136: // const_mulop -> tkDiv -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 137: // const_mulop -> tkMod -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 138: // const_mulop -> tkShl -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 139: // const_mulop -> tkShr -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 140: // const_mulop -> tkAnd -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 141: // const_factor -> const_variable -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 142: // const_factor -> const_set -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 143: // const_factor -> unsigned_number -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 144: // const_factor -> literal -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 145: // const_factor -> tkNil -{ - CurrentSemanticValue.ex = new nil_const(); - CurrentSemanticValue.ex.source_context = CurrentLocationSpan; - } - break; - case 146: // const_factor -> tkAddressOf, const_factor -{ - CurrentSemanticValue.ex = new get_address(ValueStack[ValueStack.Depth-1].ex as addressed_value, CurrentLocationSpan); - } - break; - case 147: // const_factor -> tkRoundOpen, const_expr, tkRoundClose -{ - CurrentSemanticValue.ex = new bracket_expr(ValueStack[ValueStack.Depth-2].ex, CurrentLocationSpan); - } - break; - case 148: // const_factor -> tkNot, const_factor -{ - CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); - } - break; - case 149: // const_factor -> sign, const_factor -{ - CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); - } - break; - case 150: // const_factor -> tkDeref, const_factor -{ - CurrentSemanticValue.ex = new roof_dereference(ValueStack[ValueStack.Depth-1].ex as addressed_value, CurrentLocationSpan); - } - break; - case 151: // const_set -> tkSquareOpen, const_elem_list, tkSquareClose -{ - CurrentSemanticValue.ex = new pascal_set_constant(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); - } - break; - case 152: // sign -> tkPlus -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 153: // sign -> tkMinus -{ CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } - break; - case 154: // const_variable -> identifier -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].id; } - break; - case 155: // const_variable -> sizeof_expr -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 156: // const_variable -> typeof_expr -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 157: // const_variable -> const_variable, const_variable_2 -{ - CurrentSemanticValue.ex = NewConstVariable(ValueStack[ValueStack.Depth-2].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 158: // const_variable_2 -> tkPoint, identifier_or_keyword -{ - CurrentSemanticValue.ex = new dot_node(null, ValueStack[ValueStack.Depth-1].id as addressed_value, CurrentLocationSpan); - } - break; - case 159: // const_variable_2 -> tkDeref -{ - CurrentSemanticValue.ex = new roof_dereference(); - CurrentSemanticValue.ex.source_context = CurrentLocationSpan; - } - break; - case 160: // const_variable_2 -> tkRoundOpen, optional_const_func_expr_list, tkRoundClose -{ - CurrentSemanticValue.ex = new method_call(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); - } - break; - case 161: // const_variable_2 -> tkSquareOpen, const_elem_list, tkSquareClose -{ - CurrentSemanticValue.ex = new indexer(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); - } - break; - case 162: // optional_const_func_expr_list -> const_func_expr_list -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 163: // optional_const_func_expr_list -> /* empty */ -{ CurrentSemanticValue.stn = null; } - break; - case 164: // const_func_expr_list -> const_expr -{ - CurrentSemanticValue.stn = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 165: // const_func_expr_list -> const_func_expr_list, tkComma, const_expr -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as expression_list).Add(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 166: // const_elem_list -> const_elem_list1 -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 168: // const_elem_list1 -> const_elem -{ - CurrentSemanticValue.stn = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 169: // const_elem_list1 -> const_elem_list1, tkComma, const_elem -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as expression_list).Add(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 170: // const_elem -> const_expr -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 171: // const_elem -> const_expr, tkDotDot, const_expr -{ - CurrentSemanticValue.ex = new diapason_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 172: // unsigned_number -> tkInteger -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 173: // unsigned_number -> tkHex -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 174: // unsigned_number -> tkFloat -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 175: // typed_const -> const_expr -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 176: // typed_const -> array_const -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 177: // typed_const -> record_const -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 178: // array_const -> tkRoundOpen, typed_const_list, tkRoundClose -{ - CurrentSemanticValue.ex = new array_const(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); - } - break; - case 179: // array_const -> tkRoundOpen, record_const, tkRoundClose -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-2].ex; } - break; - case 180: // array_const -> tkRoundOpen, array_const, tkRoundClose -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-2].ex; } - break; - case 182: // typed_const_list -> typed_const_list1 -{ - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; - } - break; - case 183: // typed_const_list1 -> typed_const_or_new -{ - CurrentSemanticValue.stn = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 184: // typed_const_list1 -> typed_const_list1, tkComma, typed_const_or_new -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as expression_list).Add(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 185: // record_const -> tkRoundOpen, const_field_list, tkRoundClose -{ - CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-2].ex; - CurrentSemanticValue.ex.source_context = CurrentLocationSpan; - } - break; - case 186: // const_field_list -> const_field_list_1 -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 187: // const_field_list -> const_field_list_1, tkSemiColon -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-2].ex; } - break; - case 188: // const_field_list_1 -> const_field -{ - CurrentSemanticValue.ex = new record_const(ValueStack[ValueStack.Depth-1].stn as record_const_definition, CurrentLocationSpan); - } - break; - case 189: // const_field_list_1 -> const_field_list_1, tkSemiColon, const_field -{ - CurrentSemanticValue.ex = (ValueStack[ValueStack.Depth-3].ex as record_const).Add(ValueStack[ValueStack.Depth-1].stn as record_const_definition, CurrentLocationSpan); - } - break; - case 190: // const_field -> const_field_name, tkColon, typed_const -{ - CurrentSemanticValue.stn = new record_const_definition(ValueStack[ValueStack.Depth-3].id, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 191: // const_field_name -> identifier -{ CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } - break; - case 192: // type_decl -> attribute_declarations, simple_type_decl -{ - (ValueStack[ValueStack.Depth-1].stn as declaration).attributes = ValueStack[ValueStack.Depth-2].stn as attribute_list; - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; - CurrentSemanticValue.stn.source_context = LocationStack[LocationStack.Depth-1]; - } - break; - case 193: // attribute_declarations -> attribute_declaration -{ - CurrentSemanticValue.stn = new attribute_list(ValueStack[ValueStack.Depth-1].stn as simple_attribute_list, CurrentLocationSpan); - } - break; - case 194: // attribute_declarations -> attribute_declarations, attribute_declaration -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-2].stn as attribute_list).Add(ValueStack[ValueStack.Depth-1].stn as simple_attribute_list, CurrentLocationSpan); - } - break; - case 195: // attribute_declarations -> /* empty */ -{ CurrentSemanticValue.stn = null; } - break; - case 196: // attribute_declaration -> tkSquareOpen, one_or_some_attribute, tkSquareClose -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } - break; - case 197: // one_or_some_attribute -> one_attribute -{ - CurrentSemanticValue.stn = new simple_attribute_list(ValueStack[ValueStack.Depth-1].stn as attribute, CurrentLocationSpan); - } - break; - case 198: // one_or_some_attribute -> one_or_some_attribute, tkComma, one_attribute -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as simple_attribute_list).Add(ValueStack[ValueStack.Depth-1].stn as attribute, CurrentLocationSpan); - } - break; - case 199: // one_attribute -> attribute_variable -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 200: // one_attribute -> identifier, tkColon, attribute_variable -{ - (ValueStack[ValueStack.Depth-1].stn as attribute).qualifier = ValueStack[ValueStack.Depth-3].id; - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; - CurrentSemanticValue.stn.source_context = CurrentLocationSpan; - } - break; - case 201: // simple_type_decl -> type_decl_identifier, tkEqual, type_decl_type, tkSemiColon -{ - CurrentSemanticValue.stn = new type_declaration(ValueStack[ValueStack.Depth-4].id, ValueStack[ValueStack.Depth-2].td, CurrentLocationSpan); - } - break; - case 202: // simple_type_decl -> template_identifier_with_equal, type_decl_type, tkSemiColon -{ - CurrentSemanticValue.stn = new type_declaration(ValueStack[ValueStack.Depth-3].id, ValueStack[ValueStack.Depth-2].td, CurrentLocationSpan); - } - break; - case 203: // type_decl_identifier -> identifier -{ CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } - break; - case 204: // type_decl_identifier -> identifier, template_arguments -{ - CurrentSemanticValue.id = new template_type_name(ValueStack[ValueStack.Depth-2].id.name, ValueStack[ValueStack.Depth-1].stn as ident_list, CurrentLocationSpan); - } - break; - case 205: // template_identifier_with_equal -> identifier, tkLower, ident_list, - // tkGreaterEqual -{ - CurrentSemanticValue.id = new template_type_name(ValueStack[ValueStack.Depth-4].id.name, ValueStack[ValueStack.Depth-2].stn as ident_list, CurrentLocationSpan); - } - break; - case 206: // type_decl_type -> type_ref -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 207: // type_decl_type -> object_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 208: // type_ref -> simple_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 209: // type_ref -> string_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 210: // type_ref -> pointer_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 211: // type_ref -> structured_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 212: // type_ref -> procedural_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 213: // type_ref -> template_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 214: // template_type -> simple_type_identifier, template_type_params -{ - CurrentSemanticValue.td = new template_type_reference(ValueStack[ValueStack.Depth-2].td as named_type_reference, ValueStack[ValueStack.Depth-1].stn as template_param_list, CurrentLocationSpan); - } - break; - case 215: // template_type_params -> tkLower, template_param_list, tkGreater -{ - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; - CurrentSemanticValue.stn.source_context = CurrentLocationSpan; - } - break; - case 216: // template_param_list -> template_param -{ - CurrentSemanticValue.stn = new template_param_list(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); - } - break; - case 217: // template_param_list -> template_param_list, tkComma, template_param -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as template_param_list).Add(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); - } - break; - case 218: // template_param -> simple_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 219: // template_param -> structured_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 220: // template_param -> procedural_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 221: // template_param -> template_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 222: // simple_type -> range_expr -{ - CurrentSemanticValue.td = parsertools.ConvertDotNodeOrIdentToNamedTypeReference(ValueStack[ValueStack.Depth-1].ex); - } - break; - case 223: // simple_type -> range_expr, tkDotDot, range_expr -{ - CurrentSemanticValue.td = new diapason(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 224: // simple_type -> tkRoundOpen, enumeration_id_list, tkRoundClose -{ - CurrentSemanticValue.td = new enum_type_definition(ValueStack[ValueStack.Depth-2].stn as enumerator_list, CurrentLocationSpan); - } - break; - case 225: // range_expr -> range_term -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 226: // range_expr -> range_expr, const_addop, range_term -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); - } - break; - case 227: // range_term -> range_factor -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 228: // range_term -> range_term, const_mulop, range_factor -{ - CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); - } - break; - case 229: // range_factor -> simple_type_identifier -{ - CurrentSemanticValue.ex = parsertools.ConvertNamedTypeReferenceToDotNodeOrIdent(ValueStack[ValueStack.Depth-1].td as named_type_reference); - } - break; - case 230: // range_factor -> unsigned_number -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 231: // range_factor -> sign, range_factor -{ - CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); - } - break; - case 232: // range_factor -> literal -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 233: // range_factor -> range_factor, tkRoundOpen, const_elem_list, tkRoundClose -{ - CurrentSemanticValue.ex = new method_call(ValueStack[ValueStack.Depth-4].ex as addressed_value, ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); - } - break; - case 234: // simple_type_identifier -> identifier -{ - CurrentSemanticValue.td = new named_type_reference(ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); - } - break; - case 235: // simple_type_identifier -> simple_type_identifier, tkPoint, - // identifier_or_keyword -{ - CurrentSemanticValue.td = (ValueStack[ValueStack.Depth-3].td as named_type_reference).Add(ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); - } - break; - case 236: // enumeration_id_list -> enumeration_id, tkComma, enumeration_id -{ - CurrentSemanticValue.stn = new enumerator_list(ValueStack[ValueStack.Depth-3].stn as enumerator, CurrentLocationSpan); - (CurrentSemanticValue.stn as enumerator_list).Add(ValueStack[ValueStack.Depth-1].stn as enumerator, CurrentLocationSpan); - } - break; - case 237: // enumeration_id_list -> enumeration_id_list, tkComma, enumeration_id -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as enumerator_list).Add(ValueStack[ValueStack.Depth-1].stn as enumerator, CurrentLocationSpan); - } - break; - case 238: // enumeration_id -> type_ref -{ - CurrentSemanticValue.stn = new enumerator(ValueStack[ValueStack.Depth-1].td, null, CurrentLocationSpan); - } - break; - case 239: // enumeration_id -> type_ref, tkEqual, expr -{ - CurrentSemanticValue.stn = new enumerator(ValueStack[ValueStack.Depth-3].td, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; - case 240: // pointer_type -> tkDeref, fptype -{ - CurrentSemanticValue.td = new ref_type(ValueStack[ValueStack.Depth-1].td,CurrentLocationSpan); - } - break; - case 241: // structured_type -> unpacked_structured_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 242: // structured_type -> tkPacked, unpacked_structured_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 243: // unpacked_structured_type -> array_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 244: // unpacked_structured_type -> record_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 245: // unpacked_structured_type -> set_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 246: // unpacked_structured_type -> file_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 247: // unpacked_structured_type -> sequence_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 248: // sequence_type -> tkSequence, tkOf, type_ref -{ - CurrentSemanticValue.td = new sequence_type(ValueStack[ValueStack.Depth-1].td,CurrentLocationSpan); - } - break; - case 249: // array_type -> tkArray, tkSquareOpen, simple_type_list, tkSquareClose, tkOf, - // type_ref -{ - CurrentSemanticValue.td = new array_type(ValueStack[ValueStack.Depth-4].stn as indexers_types, ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); - } - break; - case 250: // array_type -> unsized_array_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 251: // unsized_array_type -> tkArray, tkOf, type_ref -{ - CurrentSemanticValue.td = new array_type(null, ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); - } - break; - case 252: // simple_type_list -> simple_type_or_ -{ - CurrentSemanticValue.stn = new indexers_types(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); - } - break; - case 253: // simple_type_list -> simple_type_list, tkComma, simple_type_or_ -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as indexers_types).Add(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); - } - break; - case 254: // simple_type_or_ -> simple_type -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 255: // simple_type_or_ -> /* empty */ -{ CurrentSemanticValue.td = null; } - break; - case 256: // set_type -> tkSet, tkOf, simple_type -{ - CurrentSemanticValue.td = new set_type_definition(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); - } - break; - case 257: // file_type -> tkFile, tkOf, type_ref -{ - CurrentSemanticValue.td = new file_type(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); - } - break; - case 258: // file_type -> tkFile -{ - CurrentSemanticValue.td = new file_type(); - CurrentSemanticValue.td.source_context = CurrentLocationSpan; - } - break; - case 259: // string_type -> tkIdentifier, tkSquareOpen, const_expr, tkSquareClose -{ - CurrentSemanticValue.td = new string_num_definition(ValueStack[ValueStack.Depth-2].ex, ValueStack[ValueStack.Depth-4].id, CurrentLocationSpan); - } - break; - case 260: // procedural_type -> procedural_type_kind -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 261: // procedural_type_kind -> proc_type_decl -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 262: // proc_type_decl -> tkProcedure, fp_list -{ - CurrentSemanticValue.td = new procedure_header(ValueStack[ValueStack.Depth-1].stn as formal_parameters,null,null,false,false,null,null,CurrentLocationSpan); - } - break; - case 263: // proc_type_decl -> tkFunction, fp_list -{ - CurrentSemanticValue.td = new function_header(ValueStack[ValueStack.Depth-1].stn as formal_parameters, null, null, null, null, CurrentLocationSpan); - } - break; - case 264: // proc_type_decl -> tkFunction, fp_list, tkColon, fptype -{ - CurrentSemanticValue.td = new function_header(ValueStack[ValueStack.Depth-3].stn as formal_parameters, null, null, null, ValueStack[ValueStack.Depth-1].td as type_definition, CurrentLocationSpan); - } - break; - case 265: // proc_type_decl -> simple_type_identifier, tkArrow, template_param -{ - CurrentSemanticValue.td = new modern_proc_type(ValueStack[ValueStack.Depth-3].td,null,ValueStack[ValueStack.Depth-1].td,CurrentLocationSpan); - } - break; - case 266: // proc_type_decl -> template_type, tkArrow, template_param -{ - CurrentSemanticValue.td = new modern_proc_type(ValueStack[ValueStack.Depth-3].td,null,ValueStack[ValueStack.Depth-1].td,CurrentLocationSpan); - } - break; - case 267: // proc_type_decl -> tkRoundOpen, tkRoundClose, tkArrow, template_param -{ - CurrentSemanticValue.td = new modern_proc_type(null,null,ValueStack[ValueStack.Depth-1].td,CurrentLocationSpan); - } - break; - case 268: // proc_type_decl -> tkRoundOpen, enumeration_id_list, tkRoundClose, tkArrow, - // template_param -{ - CurrentSemanticValue.td = new modern_proc_type(null,ValueStack[ValueStack.Depth-4].stn as enumerator_list,ValueStack[ValueStack.Depth-1].td,CurrentLocationSpan); - } - break; - case 269: // proc_type_decl -> simple_type_identifier, tkArrow, tkRoundOpen, tkRoundClose -{ - CurrentSemanticValue.td = new modern_proc_type(ValueStack[ValueStack.Depth-4].td,null,null,CurrentLocationSpan); - } - break; - case 270: // proc_type_decl -> template_type, tkArrow, tkRoundOpen, tkRoundClose -{ - CurrentSemanticValue.td = new modern_proc_type(ValueStack[ValueStack.Depth-4].td,null,null,CurrentLocationSpan); - } - break; - case 271: // proc_type_decl -> tkRoundOpen, tkRoundClose, tkArrow, tkRoundOpen, tkRoundClose -{ - CurrentSemanticValue.td = new modern_proc_type(null,null,null,CurrentLocationSpan); - } - break; - case 272: // proc_type_decl -> tkRoundOpen, enumeration_id_list, tkRoundClose, tkArrow, - // tkRoundOpen, tkRoundClose -{ - CurrentSemanticValue.td = new modern_proc_type(null,ValueStack[ValueStack.Depth-5].stn as enumerator_list,null,CurrentLocationSpan); - } - break; - case 273: // object_type -> class_attributes, class_or_interface_keyword, - // optional_base_classes, optional_where_section, - // optional_component_list_seq_end -{ - CurrentSemanticValue.td = NewObjectType((class_attribute)ValueStack[ValueStack.Depth-5].ob, ValueStack[ValueStack.Depth-4].ti, ValueStack[ValueStack.Depth-3].stn as named_type_reference_list, ValueStack[ValueStack.Depth-2].stn as where_definition_list, ValueStack[ValueStack.Depth-1].stn as class_body, CurrentLocationSpan); - } - break; - case 274: // record_type -> tkRecord, optional_base_classes, optional_where_section, - // member_list_section, tkEnd -{ - CurrentSemanticValue.td = NewRecordType(ValueStack[ValueStack.Depth-4].stn as named_type_reference_list, ValueStack[ValueStack.Depth-3].stn as where_definition_list, ValueStack[ValueStack.Depth-2].stn as class_body, CurrentLocationSpan); - } - break; - case 275: // class_attribute -> tkSealed -{ CurrentSemanticValue.ob = class_attribute.Sealed; } - break; - case 276: // class_attribute -> tkPartial -{ CurrentSemanticValue.ob = class_attribute.Partial; } - break; - case 277: // class_attribute -> tkAbstract -{ CurrentSemanticValue.ob = class_attribute.Abstract; } - break; - case 278: // class_attribute -> tkAuto -{ CurrentSemanticValue.ob = class_attribute.Auto; } - break; - case 279: // class_attributes -> /* empty */ -{ - CurrentSemanticValue.ob = class_attribute.None; - } - break; - case 280: // class_attributes -> class_attributes1 -{ - CurrentSemanticValue.ob = ValueStack[ValueStack.Depth-1].ob; - } - break; - case 281: // class_attributes1 -> class_attribute -{ - CurrentSemanticValue.ob = ValueStack[ValueStack.Depth-1].ob; - } - break; - case 282: // class_attributes1 -> class_attributes1, class_attribute -{ - ValueStack[ValueStack.Depth-2].ob = ((class_attribute)ValueStack[ValueStack.Depth-2].ob) | ((class_attribute)ValueStack[ValueStack.Depth-1].ob); - CurrentSemanticValue.ob = ValueStack[ValueStack.Depth-2].ob; - } - break; - case 283: // class_or_interface_keyword -> tkClass -{ CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } - break; - case 284: // class_or_interface_keyword -> tkInterface -{ CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } - break; - case 285: // class_or_interface_keyword -> tkTemplate -{ - CurrentSemanticValue.ti = NewClassOrInterfaceKeyword(ValueStack[ValueStack.Depth-1].ti); - } - break; - case 286: // class_or_interface_keyword -> tkTemplate, tkClass -{ - CurrentSemanticValue.ti = NewClassOrInterfaceKeyword(ValueStack[ValueStack.Depth-2].ti, "c", CurrentLocationSpan); - } - break; - case 287: // class_or_interface_keyword -> tkTemplate, tkRecord -{ - CurrentSemanticValue.ti = NewClassOrInterfaceKeyword(ValueStack[ValueStack.Depth-2].ti, "r", CurrentLocationSpan); - } - break; - case 288: // class_or_interface_keyword -> tkTemplate, tkInterface -{ - CurrentSemanticValue.ti = NewClassOrInterfaceKeyword(ValueStack[ValueStack.Depth-2].ti, "i", CurrentLocationSpan); - } - break; - case 289: // optional_component_list_seq_end -> /* empty */ -{ CurrentSemanticValue.stn = null; } - break; - case 290: // optional_component_list_seq_end -> member_list_section, tkEnd -{ - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; - CurrentSemanticValue.stn.source_context = CurrentLocationSpan; - } - break; - case 292: // optional_base_classes -> tkRoundOpen, base_classes_names_list, tkRoundClose -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } - break; - case 293: // base_classes_names_list -> base_class_name -{ - CurrentSemanticValue.stn = new named_type_reference_list(ValueStack[ValueStack.Depth-1].stn as named_type_reference, CurrentLocationSpan); - } - break; - case 294: // base_classes_names_list -> base_classes_names_list, tkComma, base_class_name -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as named_type_reference_list).Add(ValueStack[ValueStack.Depth-1].stn as named_type_reference, CurrentLocationSpan); - } - break; - case 295: // base_class_name -> simple_type_identifier -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].td; } - break; - case 296: // base_class_name -> template_type -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].td; } - break; - case 297: // template_arguments -> tkLower, ident_list, tkGreater -{ - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; - CurrentSemanticValue.stn.source_context = CurrentLocationSpan; - } - break; - case 298: // optional_where_section -> /* empty */ -{ CurrentSemanticValue.stn = null; } - break; - case 299: // optional_where_section -> where_part_list -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 300: // where_part_list -> where_part -{ - CurrentSemanticValue.stn = new where_definition_list(ValueStack[ValueStack.Depth-1].stn as where_definition, CurrentLocationSpan); - } - break; - case 301: // where_part_list -> where_part_list, where_part -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-2].stn as where_definition_list).Add(ValueStack[ValueStack.Depth-1].stn as where_definition, CurrentLocationSpan); - } - break; - case 302: // where_part -> tkWhere, ident_list, tkColon, type_ref_and_secific_list, - // tkSemiColon -{ - CurrentSemanticValue.stn = new where_definition(ValueStack[ValueStack.Depth-4].stn as ident_list, ValueStack[ValueStack.Depth-2].stn as where_type_specificator_list, CurrentLocationSpan); - } - break; - case 303: // type_ref_and_secific_list -> type_ref_or_secific -{ - CurrentSemanticValue.stn = new where_type_specificator_list(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); - } - break; - case 304: // type_ref_and_secific_list -> type_ref_and_secific_list, tkComma, - // type_ref_or_secific -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as where_type_specificator_list).Add(ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); - } - break; - case 305: // type_ref_or_secific -> type_ref -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 306: // type_ref_or_secific -> tkClass -{ - CurrentSemanticValue.td = new declaration_specificator(DeclarationSpecificator.WhereDefClass, ValueStack[ValueStack.Depth-1].ti.text, CurrentLocationSpan); - } - break; - case 307: // type_ref_or_secific -> tkRecord -{ - CurrentSemanticValue.td = new declaration_specificator(DeclarationSpecificator.WhereDefValueType, ValueStack[ValueStack.Depth-1].ti.text, CurrentLocationSpan); - } - break; - case 308: // type_ref_or_secific -> tkConstructor -{ - CurrentSemanticValue.td = new declaration_specificator(DeclarationSpecificator.WhereDefConstructor, ValueStack[ValueStack.Depth-1].ti.text, CurrentLocationSpan); - } - break; - case 309: // member_list_section -> member_list -{ - CurrentSemanticValue.stn = new class_body(ValueStack[ValueStack.Depth-1].stn as class_members, CurrentLocationSpan); - } - break; - case 310: // member_list_section -> member_list_section, ot_visibility_specifier, - // member_list -{ - (ValueStack[ValueStack.Depth-1].stn as class_members).access_mod = ValueStack[ValueStack.Depth-2].stn as access_modifer_node; - (ValueStack[ValueStack.Depth-3].stn as class_body).Add(ValueStack[ValueStack.Depth-1].stn as class_members,CurrentLocationSpan); - - if ((ValueStack[ValueStack.Depth-3].stn as class_body).class_def_blocks[0].members.Count == 0) - (ValueStack[ValueStack.Depth-3].stn as class_body).class_def_blocks.RemoveAt(0); - - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-3].stn; - } - break; - case 311: // ot_visibility_specifier -> tkInternal -{ CurrentSemanticValue.stn = new access_modifer_node(access_modifer.internal_modifer, CurrentLocationSpan); } - break; - case 312: // ot_visibility_specifier -> tkPublic -{ CurrentSemanticValue.stn = new access_modifer_node(access_modifer.public_modifer, CurrentLocationSpan); } - break; - case 313: // ot_visibility_specifier -> tkProtected -{ CurrentSemanticValue.stn = new access_modifer_node(access_modifer.protected_modifer, CurrentLocationSpan); } - break; - case 314: // ot_visibility_specifier -> tkPrivate -{ CurrentSemanticValue.stn = new access_modifer_node(access_modifer.private_modifer, CurrentLocationSpan); } - break; - case 315: // member_list -> /* empty */ -{ CurrentSemanticValue.stn = new class_members(); } - break; - case 316: // member_list -> field_or_const_definition_list, optional_semicolon -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } - break; - case 317: // member_list -> method_decl_list -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 318: // member_list -> field_or_const_definition_list, tkSemiColon, method_decl_list -{ - (ValueStack[ValueStack.Depth-3].stn as class_members).members.AddRange((ValueStack[ValueStack.Depth-1].stn as class_members).members); - (ValueStack[ValueStack.Depth-3].stn as class_members).source_context = CurrentLocationSpan; - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-3].stn; - } - break; - case 319: // ident_list -> identifier -{ - CurrentSemanticValue.stn = new ident_list(ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); - } - break; - case 320: // ident_list -> ident_list, tkComma, identifier -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as ident_list).Add(ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); - } - break; - case 321: // optional_semicolon -> /* empty */ -{ CurrentSemanticValue.ob = null; } - break; - case 322: // optional_semicolon -> tkSemiColon -{ CurrentSemanticValue.ob = ValueStack[ValueStack.Depth-1].ti; } - break; - case 323: // field_or_const_definition_list -> field_or_const_definition -{ - CurrentSemanticValue.stn = new class_members(ValueStack[ValueStack.Depth-1].stn as declaration, CurrentLocationSpan); - } - break; - case 324: // field_or_const_definition_list -> field_or_const_definition_list, tkSemiColon, - // field_or_const_definition -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as class_members).Add(ValueStack[ValueStack.Depth-1].stn as declaration, CurrentLocationSpan); - } - break; - case 325: // field_or_const_definition -> attribute_declarations, - // simple_field_or_const_definition -{ - (ValueStack[ValueStack.Depth-1].stn as declaration).attributes = ValueStack[ValueStack.Depth-2].stn as attribute_list; - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; - } - break; - case 326: // method_decl_list -> method_or_property_decl -{ - CurrentSemanticValue.stn = new class_members(ValueStack[ValueStack.Depth-1].stn as declaration, CurrentLocationSpan); - } - break; - case 327: // method_decl_list -> method_decl_list, method_or_property_decl -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-2].stn as class_members).Add(ValueStack[ValueStack.Depth-1].stn as declaration, CurrentLocationSpan); - } - break; - case 328: // method_or_property_decl -> method_decl_withattr -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 329: // method_or_property_decl -> property_definition -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 330: // simple_field_or_const_definition -> tkConst, only_const_decl -{ - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; - CurrentSemanticValue.stn.source_context = CurrentLocationSpan; - } - break; - case 331: // simple_field_or_const_definition -> field_definition -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 332: // simple_field_or_const_definition -> tkClass, field_definition -{ - (ValueStack[ValueStack.Depth-1].stn as var_def_statement).var_attr = definition_attribute.Static; - (ValueStack[ValueStack.Depth-1].stn as var_def_statement).source_context = CurrentLocationSpan; - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; - } - break; - case 333: // field_definition -> var_decl_part -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 334: // field_definition -> tkEvent, ident_list, tkColon, type_ref -{ - CurrentSemanticValue.stn = new var_def_statement(ValueStack[ValueStack.Depth-3].stn as ident_list, ValueStack[ValueStack.Depth-1].td, null, definition_attribute.None, true, CurrentLocationSpan); - } - break; - case 335: // method_decl_withattr -> attribute_declarations, method_header -{ - (ValueStack[ValueStack.Depth-1].td as declaration).attributes = ValueStack[ValueStack.Depth-2].stn as attribute_list; - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].td; - } - break; - case 336: // method_decl_withattr -> attribute_declarations, method_decl -{ - (ValueStack[ValueStack.Depth-1].stn as declaration).attributes = ValueStack[ValueStack.Depth-2].stn as attribute_list; - CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; - } - break; - case 337: // method_decl -> inclass_proc_func_decl -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 338: // method_decl -> inclass_constr_destr_decl -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 339: // method_header -> tkClass, method_procfunc_header -{ - (ValueStack[ValueStack.Depth-1].td as procedure_header).class_keyword = true; - CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; - } - break; - case 340: // method_header -> method_procfunc_header -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 341: // method_header -> constr_destr_header -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 342: // method_procfunc_header -> proc_func_header -{ - CurrentSemanticValue.td = NewProcfuncHeading(ValueStack[ValueStack.Depth-1].td as procedure_header); - } - break; - case 343: // proc_func_header -> proc_header -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 344: // proc_func_header -> func_header -{ CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } - break; - case 345: // constr_destr_header -> tkConstructor, optional_proc_name, fp_list, - // optional_method_modificators -{ - CurrentSemanticValue.td = new constructor(null,ValueStack[ValueStack.Depth-2].stn as formal_parameters,ValueStack[ValueStack.Depth-1].stn as procedure_attributes_list,ValueStack[ValueStack.Depth-3].stn as method_name,false,false,null,null,CurrentLocationSpan); - } - break; - case 346: // constr_destr_header -> tkClass, tkConstructor, optional_proc_name, fp_list, - // optional_method_modificators -{ - CurrentSemanticValue.td = new constructor(null,ValueStack[ValueStack.Depth-2].stn as formal_parameters,ValueStack[ValueStack.Depth-1].stn as procedure_attributes_list,ValueStack[ValueStack.Depth-3].stn as method_name,false,true,null,null,CurrentLocationSpan); - } - break; - case 347: // constr_destr_header -> tkDestructor, optional_proc_name, fp_list, - // optional_method_modificators -{ - CurrentSemanticValue.td = new destructor(null,ValueStack[ValueStack.Depth-2].stn as formal_parameters,ValueStack[ValueStack.Depth-1].stn as procedure_attributes_list,ValueStack[ValueStack.Depth-3].stn as method_name, false,false,null,null,CurrentLocationSpan); - } - break; - case 348: // optional_proc_name -> proc_name -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 349: // optional_proc_name -> /* empty */ -{ CurrentSemanticValue.stn = null; } - break; - case 350: // qualified_identifier -> identifier -{ CurrentSemanticValue.stn = new method_name(null,null,ValueStack[ValueStack.Depth-1].id,null,CurrentLocationSpan); } - break; - case 351: // qualified_identifier -> visibility_specifier -{ CurrentSemanticValue.stn = new method_name(null,null,ValueStack[ValueStack.Depth-1].id,null,CurrentLocationSpan); } - break; - case 352: // qualified_identifier -> qualified_identifier, tkPoint, identifier -{ - CurrentSemanticValue.stn = NewQualifiedIdentifier(ValueStack[ValueStack.Depth-3].stn as method_name, ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); - } - break; - case 353: // qualified_identifier -> qualified_identifier, tkPoint, visibility_specifier -{ - CurrentSemanticValue.stn = NewQualifiedIdentifier(ValueStack[ValueStack.Depth-3].stn as method_name, ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); - } - break; - case 354: // property_definition -> attribute_declarations, simple_prim_property_definition -{ - CurrentSemanticValue.stn = NewPropertyDefinition(ValueStack[ValueStack.Depth-2].stn as attribute_list, ValueStack[ValueStack.Depth-1].stn as declaration, LocationStack[LocationStack.Depth-1]); - } - break; - case 355: // simple_prim_property_definition -> simple_property_definition -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } - break; - case 356: // simple_prim_property_definition -> tkClass, simple_property_definition -{ - CurrentSemanticValue.stn = NewSimplePrimPropertyDefinition(ValueStack[ValueStack.Depth-1].stn as simple_property, CurrentLocationSpan); - } - break; - case 357: // simple_property_definition -> tkProperty, qualified_identifier, - // property_interface, property_specifiers, - // tkSemiColon, array_defaultproperty -{ - CurrentSemanticValue.stn = NewSimplePropertyDefinition(ValueStack[ValueStack.Depth-5].stn as method_name, ValueStack[ValueStack.Depth-4].stn as property_interface, ValueStack[ValueStack.Depth-3].stn as property_accessors, ValueStack[ValueStack.Depth-1].stn as property_array_default, CurrentLocationSpan); - } - break; - case 358: // array_defaultproperty -> /* empty */ -{ CurrentSemanticValue.stn = null; } - break; - case 359: // array_defaultproperty -> tkDefault, tkSemiColon -{ - CurrentSemanticValue.stn = new property_array_default(); - CurrentSemanticValue.stn.source_context = CurrentLocationSpan; - } - break; - case 360: // property_interface -> /* empty */ -{ CurrentSemanticValue.stn = null; } - break; - case 361: // property_interface -> property_parameter_list, tkColon, fptype -{ - CurrentSemanticValue.stn = new property_interface(ValueStack[ValueStack.Depth-3].stn as property_parameter_list, ValueStack[ValueStack.Depth-1].td, null, CurrentLocationSpan); - } - break; - case 362: // property_parameter_list -> /* empty */ -{ CurrentSemanticValue.stn = null; } - break; - case 363: // property_parameter_list -> tkSquareOpen, parameter_decl_list, tkSquareClose -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } - break; - case 364: // parameter_decl_list -> parameter_decl -{ - CurrentSemanticValue.stn = new property_parameter_list(ValueStack[ValueStack.Depth-1].stn as property_parameter, CurrentLocationSpan); - } - break; - case 365: // parameter_decl_list -> parameter_decl_list, tkSemiColon, parameter_decl -{ - CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as property_parameter_list).Add(ValueStack[ValueStack.Depth-1].stn as property_parameter, CurrentLocationSpan); - } - break; - case 366: // parameter_decl -> ident_list, tkColon, fptype -{ - CurrentSemanticValue.stn = new property_parameter(ValueStack[ValueStack.Depth-3].stn as ident_list, ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); - } - break; - case 367: // optional_identifier -> identifier -{ CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } - break; - case 368: // optional_identifier -> /* empty */ -{ CurrentSemanticValue.id = null; } - break; - case 370: // property_specifiers -> tkRead, optional_identifier, property_specifiers -{ - CurrentSemanticValue.stn = NewPropertySpecifiersRead(ValueStack[ValueStack.Depth-3].id, ValueStack[ValueStack.Depth-2].id, ValueStack[ValueStack.Depth-1].stn as property_accessors, CurrentLocationSpan); - } - break; - case 371: // property_specifiers -> tkWrite, optional_identifier, property_specifiers -{ - CurrentSemanticValue.stn = NewPropertySpecifiersWrite(ValueStack[ValueStack.Depth-3].id, ValueStack[ValueStack.Depth-2].id, ValueStack[ValueStack.Depth-1].stn as property_accessors, CurrentLocationSpan); - } - break; - case 372: // var_decl -> var_decl_part, tkSemiColon -{ CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } - break; - case 375: // var_decl_part -> ident_list, tkColon, type_ref -{ - CurrentSemanticValue.stn = new var_def_statement(ValueStack[ValueStack.Depth-3].stn as ident_list, ValueStack[ValueStack.Depth-1].td, null, definition_attribute.None, false, CurrentLocationSpan); - } - break; - case 376: // var_decl_part -> ident_list, tkAssign, expr -{ - CurrentSemanticValue.stn = new var_def_statement(ValueStack[ValueStack.Depth-3].stn as ident_list, null, ValueStack[ValueStack.Depth-1].ex, definition_attribute.None, false, CurrentLocationSpan); - } - break; - case 377: // var_decl_part -> ident_list, tkColon, type_ref, tkAssignOrEqual, - // typed_const_or_new -{ - CurrentSemanticValue.stn = new var_def_statement(ValueStack[ValueStack.Depth-5].stn as ident_list, ValueStack[ValueStack.Depth-3].td, ValueStack[ValueStack.Depth-1].ex, definition_attribute.None, false, CurrentLocationSpan); - } - break; - case 378: // var_decl_part -> ident_list, tkColon, type_ref, tkAssignOrEqual, - // expl_func_decl_lambda -{ - CurrentSemanticValue.stn = new var_def_statement(ValueStack[ValueStack.Depth-5].stn as ident_list, ValueStack[ValueStack.Depth-3].td, ValueStack[ValueStack.Depth-1].ex, definition_attribute.None, false, CurrentLocationSpan); - } - break; - case 379: // typed_const_or_new -> typed_const -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 380: // typed_const_or_new -> new_expr -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 381: // typed_const_or_new -> default_expr -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 382: // constr_destr_decl -> constr_destr_header, block + case 383: // constr_destr_decl -> constr_destr_header, block { CurrentSemanticValue.stn = new procedure_definition(ValueStack[ValueStack.Depth-2].td as procedure_header, ValueStack[ValueStack.Depth-1].stn as block, CurrentLocationSpan); } break; - case 383: // inclass_constr_destr_decl -> constr_destr_header, inclass_block + case 384: // inclass_constr_destr_decl -> constr_destr_header, inclass_block { CurrentSemanticValue.stn = new procedure_definition(ValueStack[ValueStack.Depth-2].td as procedure_header, ValueStack[ValueStack.Depth-1].stn as block, CurrentLocationSpan); } break; - case 384: // proc_func_decl -> proc_func_decl_noclass + case 385: // proc_func_decl -> proc_func_decl_noclass { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 385: // proc_func_decl -> tkClass, proc_func_decl_noclass + case 386: // proc_func_decl -> tkClass, proc_func_decl_noclass { (ValueStack[ValueStack.Depth-1].stn as procedure_definition).proc_header.class_keyword = true; CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 386: // proc_func_decl_noclass -> proc_func_header, proc_func_external_block + case 387: // proc_func_decl_noclass -> proc_func_header, proc_func_external_block { CurrentSemanticValue.stn = new procedure_definition(ValueStack[ValueStack.Depth-2].td as procedure_header, ValueStack[ValueStack.Depth-1].stn as proc_block, CurrentLocationSpan); } break; - case 387: // proc_func_decl_noclass -> tkFunction, func_name, fp_list, tkColon, fptype, + case 388: // proc_func_decl_noclass -> tkFunction, func_name, fp_list, tkColon, fptype, // optional_method_modificators1, tkAssign, relop_expr, // tkSemiColon { CurrentSemanticValue.stn = SyntaxTreeBuilder.BuildShortFuncDefinition(ValueStack[ValueStack.Depth-7].stn as formal_parameters, ValueStack[ValueStack.Depth-4].stn as procedure_attributes_list, ValueStack[ValueStack.Depth-8].stn as method_name, ValueStack[ValueStack.Depth-5].td as type_definition, ValueStack[ValueStack.Depth-2].ex, LocationStack[LocationStack.Depth-9].Merge(LocationStack[LocationStack.Depth-5])); } break; - case 388: // proc_func_decl_noclass -> tkFunction, func_name, fp_list, + case 389: // proc_func_decl_noclass -> tkFunction, func_name, fp_list, // optional_method_modificators1, tkAssign, relop_expr, // tkSemiColon { CurrentSemanticValue.stn = SyntaxTreeBuilder.BuildShortFuncDefinition(ValueStack[ValueStack.Depth-5].stn as formal_parameters, ValueStack[ValueStack.Depth-4].stn as procedure_attributes_list, ValueStack[ValueStack.Depth-6].stn as method_name, null, ValueStack[ValueStack.Depth-2].ex, LocationStack[LocationStack.Depth-7].Merge(LocationStack[LocationStack.Depth-5])); } break; - case 389: // proc_func_decl_noclass -> tkProcedure, proc_name, fp_list, + case 390: // proc_func_decl_noclass -> tkProcedure, proc_name, fp_list, // optional_method_modificators1, tkAssign, // unlabelled_stmt, tkSemiColon { @@ -3945,28 +3946,28 @@ public partial class GPPGParser: ShiftReduceParser proc_func_header, tkForward, tkSemiColon + case 391: // proc_func_decl_noclass -> proc_func_header, tkForward, tkSemiColon { CurrentSemanticValue.stn = new procedure_definition(ValueStack[ValueStack.Depth-3].td as procedure_header, null, CurrentLocationSpan); (CurrentSemanticValue.stn as procedure_definition).proc_header.proc_attributes.Add((procedure_attribute)ValueStack[ValueStack.Depth-2].id, ValueStack[ValueStack.Depth-2].id.source_context); } break; - case 391: // inclass_proc_func_decl -> inclass_proc_func_decl_noclass + case 392: // inclass_proc_func_decl -> inclass_proc_func_decl_noclass { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 392: // inclass_proc_func_decl -> tkClass, inclass_proc_func_decl_noclass + case 393: // inclass_proc_func_decl -> tkClass, inclass_proc_func_decl_noclass { if ((ValueStack[ValueStack.Depth-1].stn as procedure_definition).proc_header != null) (ValueStack[ValueStack.Depth-1].stn as procedure_definition).proc_header.class_keyword = true; CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 393: // inclass_proc_func_decl_noclass -> proc_func_header, inclass_block + case 394: // inclass_proc_func_decl_noclass -> proc_func_header, inclass_block { CurrentSemanticValue.stn = new procedure_definition(ValueStack[ValueStack.Depth-2].td as procedure_header, ValueStack[ValueStack.Depth-1].stn as proc_block, CurrentLocationSpan); } break; - case 394: // inclass_proc_func_decl_noclass -> tkFunction, func_name, fp_list, tkColon, + case 395: // inclass_proc_func_decl_noclass -> tkFunction, func_name, fp_list, tkColon, // fptype, optional_method_modificators1, // tkAssign, relop_expr, tkSemiColon { @@ -3975,7 +3976,7 @@ public partial class GPPGParser: ShiftReduceParser tkFunction, func_name, fp_list, + case 396: // inclass_proc_func_decl_noclass -> tkFunction, func_name, fp_list, // optional_method_modificators1, tkAssign, // relop_expr, tkSemiColon { @@ -3984,7 +3985,7 @@ public partial class GPPGParser: ShiftReduceParser tkProcedure, proc_name, fp_list, + case 397: // inclass_proc_func_decl_noclass -> tkProcedure, proc_name, fp_list, // optional_method_modificators1, tkAssign, // unlabelled_stmt, tkSemiColon { @@ -3993,21 +3994,21 @@ public partial class GPPGParser: ShiftReduceParser block + case 398: // proc_func_external_block -> block { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 398: // proc_func_external_block -> external_block + case 399: // proc_func_external_block -> external_block { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 399: // proc_name -> func_name + case 400: // proc_name -> func_name { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 400: // func_name -> func_meth_name_ident + case 401: // func_name -> func_meth_name_ident { CurrentSemanticValue.stn = new method_name(null,null, ValueStack[ValueStack.Depth-1].id, null, CurrentLocationSpan); } break; - case 401: // func_name -> func_class_name_ident_list, tkPoint, func_meth_name_ident + case 402: // func_name -> func_class_name_ident_list, tkPoint, func_meth_name_ident { var ln = ValueStack[ValueStack.Depth-3].ob as List; var cnt = (ValueStack[ValueStack.Depth-3].ob as List).Count; @@ -4017,282 +4018,282 @@ public partial class GPPGParser: ShiftReduceParser func_name_with_template_args + case 403: // func_class_name_ident -> func_name_with_template_args { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 403: // func_class_name_ident_list -> func_class_name_ident + case 404: // func_class_name_ident_list -> func_class_name_ident { CurrentSemanticValue.ob = new List(); (CurrentSemanticValue.ob as List).Add(ValueStack[ValueStack.Depth-1].id); } break; - case 404: // func_class_name_ident_list -> func_class_name_ident_list, tkPoint, + case 405: // func_class_name_ident_list -> func_class_name_ident_list, tkPoint, // func_class_name_ident { (ValueStack[ValueStack.Depth-3].ob as List).Add(ValueStack[ValueStack.Depth-1].id); CurrentSemanticValue.ob = ValueStack[ValueStack.Depth-3].ob; } break; - case 405: // func_meth_name_ident -> func_name_with_template_args + case 406: // func_meth_name_ident -> func_name_with_template_args { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 406: // func_meth_name_ident -> operator_name_ident + case 407: // func_meth_name_ident -> operator_name_ident { CurrentSemanticValue.id = (ident)ValueStack[ValueStack.Depth-1].ex; } break; - case 407: // func_meth_name_ident -> operator_name_ident, template_arguments + case 408: // func_meth_name_ident -> operator_name_ident, template_arguments { CurrentSemanticValue.id = new template_operator_name(null, ValueStack[ValueStack.Depth-1].stn as ident_list, ValueStack[ValueStack.Depth-2].ex as operator_name_ident, CurrentLocationSpan); } break; - case 408: // func_name_with_template_args -> func_name_ident + case 409: // func_name_with_template_args -> func_name_ident { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 409: // func_name_with_template_args -> func_name_ident, template_arguments + case 410: // func_name_with_template_args -> func_name_ident, template_arguments { CurrentSemanticValue.id = new template_type_name(ValueStack[ValueStack.Depth-2].id.name, ValueStack[ValueStack.Depth-1].stn as ident_list, CurrentLocationSpan); } break; - case 410: // func_name_ident -> identifier + case 411: // func_name_ident -> identifier { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 411: // proc_header -> tkProcedure, proc_name, fp_list, optional_method_modificators, + case 412: // proc_header -> tkProcedure, proc_name, fp_list, optional_method_modificators, // optional_where_section { CurrentSemanticValue.td = new procedure_header(ValueStack[ValueStack.Depth-3].stn as formal_parameters, ValueStack[ValueStack.Depth-2].stn as procedure_attributes_list, ValueStack[ValueStack.Depth-4].stn as method_name, ValueStack[ValueStack.Depth-1].stn as where_definition_list, CurrentLocationSpan); } break; - case 412: // func_header -> tkFunction, func_name, fp_list, optional_method_modificators, + case 413: // func_header -> tkFunction, func_name, fp_list, optional_method_modificators, // optional_where_section { CurrentSemanticValue.td = new function_header(ValueStack[ValueStack.Depth-3].stn as formal_parameters, ValueStack[ValueStack.Depth-2].stn as procedure_attributes_list, ValueStack[ValueStack.Depth-4].stn as method_name, ValueStack[ValueStack.Depth-1].stn as where_definition_list, null, CurrentLocationSpan); } break; - case 413: // func_header -> tkFunction, func_name, fp_list, tkColon, fptype, + case 414: // func_header -> tkFunction, func_name, fp_list, tkColon, fptype, // optional_method_modificators, optional_where_section { CurrentSemanticValue.td = new function_header(ValueStack[ValueStack.Depth-5].stn as formal_parameters, ValueStack[ValueStack.Depth-2].stn as procedure_attributes_list, ValueStack[ValueStack.Depth-6].stn as method_name, ValueStack[ValueStack.Depth-1].stn as where_definition_list, ValueStack[ValueStack.Depth-3].td as type_definition, CurrentLocationSpan); } break; - case 414: // external_block -> tkExternal, external_directive_ident, tkName, + case 415: // external_block -> tkExternal, external_directive_ident, tkName, // external_directive_ident, tkSemiColon { CurrentSemanticValue.stn = new external_directive(ValueStack[ValueStack.Depth-4].ex, ValueStack[ValueStack.Depth-2].ex, CurrentLocationSpan); } break; - case 415: // external_block -> tkExternal, external_directive_ident, tkSemiColon + case 416: // external_block -> tkExternal, external_directive_ident, tkSemiColon { CurrentSemanticValue.stn = new external_directive(ValueStack[ValueStack.Depth-2].ex, null, CurrentLocationSpan); } break; - case 416: // external_block -> tkExternal, tkSemiColon + case 417: // external_block -> tkExternal, tkSemiColon { CurrentSemanticValue.stn = new external_directive(null, null, CurrentLocationSpan); } break; - case 417: // external_directive_ident -> identifier + case 418: // external_directive_ident -> identifier { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].id; } break; - case 418: // external_directive_ident -> literal + case 419: // external_directive_ident -> literal { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 419: // block -> decl_sect_list, compound_stmt, tkSemiColon + case 420: // block -> decl_sect_list, compound_stmt, tkSemiColon { CurrentSemanticValue.stn = new block(ValueStack[ValueStack.Depth-3].stn as declarations, ValueStack[ValueStack.Depth-2].stn as statement_list, CurrentLocationSpan); } break; - case 420: // inclass_block -> inclass_decl_sect_list, compound_stmt, tkSemiColon + case 421: // inclass_block -> inclass_decl_sect_list, compound_stmt, tkSemiColon { CurrentSemanticValue.stn = new block(ValueStack[ValueStack.Depth-3].stn as declarations, ValueStack[ValueStack.Depth-2].stn as statement_list, CurrentLocationSpan); } break; - case 421: // fp_list -> /* empty */ + case 422: // fp_list -> /* empty */ { CurrentSemanticValue.stn = null; } break; - case 422: // fp_list -> tkRoundOpen, tkRoundClose + case 423: // fp_list -> tkRoundOpen, tkRoundClose { CurrentSemanticValue.stn = null; } break; - case 423: // fp_list -> tkRoundOpen, fp_sect_list, tkRoundClose + case 424: // fp_list -> tkRoundOpen, fp_sect_list, tkRoundClose { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; if (CurrentSemanticValue.stn != null) CurrentSemanticValue.stn.source_context = CurrentLocationSpan; } break; - case 424: // fp_sect_list -> fp_sect + case 425: // fp_sect_list -> fp_sect { CurrentSemanticValue.stn = new formal_parameters(ValueStack[ValueStack.Depth-1].stn as typed_parameters, CurrentLocationSpan); } break; - case 425: // fp_sect_list -> fp_sect_list, tkSemiColon, fp_sect + case 426: // fp_sect_list -> fp_sect_list, tkSemiColon, fp_sect { CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as formal_parameters).Add(ValueStack[ValueStack.Depth-1].stn as typed_parameters, CurrentLocationSpan); } break; - case 426: // fp_sect -> attribute_declarations, simple_fp_sect + case 427: // fp_sect -> attribute_declarations, simple_fp_sect { (ValueStack[ValueStack.Depth-1].stn as declaration).attributes = ValueStack[ValueStack.Depth-2].stn as attribute_list; CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 427: // simple_fp_sect -> param_name_list, tkColon, fptype + case 428: // simple_fp_sect -> param_name_list, tkColon, fptype { CurrentSemanticValue.stn = new typed_parameters(ValueStack[ValueStack.Depth-3].stn as ident_list, ValueStack[ValueStack.Depth-1].td, parametr_kind.none, null, CurrentLocationSpan); } break; - case 428: // simple_fp_sect -> tkVar, param_name_list, tkColon, fptype + case 429: // simple_fp_sect -> tkVar, param_name_list, tkColon, fptype { CurrentSemanticValue.stn = new typed_parameters(ValueStack[ValueStack.Depth-3].stn as ident_list, ValueStack[ValueStack.Depth-1].td, parametr_kind.var_parametr, null, CurrentLocationSpan); } break; - case 429: // simple_fp_sect -> tkConst, param_name_list, tkColon, fptype + case 430: // simple_fp_sect -> tkConst, param_name_list, tkColon, fptype { CurrentSemanticValue.stn = new typed_parameters(ValueStack[ValueStack.Depth-3].stn as ident_list, ValueStack[ValueStack.Depth-1].td, parametr_kind.const_parametr, null, CurrentLocationSpan); } break; - case 430: // simple_fp_sect -> tkParams, param_name_list, tkColon, fptype + case 431: // simple_fp_sect -> tkParams, param_name_list, tkColon, fptype { CurrentSemanticValue.stn = new typed_parameters(ValueStack[ValueStack.Depth-3].stn as ident_list, ValueStack[ValueStack.Depth-1].td,parametr_kind.params_parametr,null, CurrentLocationSpan); } break; - case 431: // simple_fp_sect -> param_name_list, tkColon, fptype, tkAssign, const_expr + case 432: // simple_fp_sect -> param_name_list, tkColon, fptype, tkAssign, const_expr { CurrentSemanticValue.stn = new typed_parameters(ValueStack[ValueStack.Depth-5].stn as ident_list, ValueStack[ValueStack.Depth-3].td, parametr_kind.none, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 432: // simple_fp_sect -> tkVar, param_name_list, tkColon, fptype, tkAssign, const_expr + case 433: // simple_fp_sect -> tkVar, param_name_list, tkColon, fptype, tkAssign, const_expr { CurrentSemanticValue.stn = new typed_parameters(ValueStack[ValueStack.Depth-5].stn as ident_list, ValueStack[ValueStack.Depth-3].td, parametr_kind.var_parametr, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 433: // simple_fp_sect -> tkConst, param_name_list, tkColon, fptype, tkAssign, + case 434: // simple_fp_sect -> tkConst, param_name_list, tkColon, fptype, tkAssign, // const_expr { CurrentSemanticValue.stn = new typed_parameters(ValueStack[ValueStack.Depth-5].stn as ident_list, ValueStack[ValueStack.Depth-3].td, parametr_kind.const_parametr, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 434: // param_name_list -> param_name + case 435: // param_name_list -> param_name { CurrentSemanticValue.stn = new ident_list(ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); } break; - case 435: // param_name_list -> param_name_list, tkComma, param_name + case 436: // param_name_list -> param_name_list, tkComma, param_name { CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as ident_list).Add(ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); } break; - case 436: // param_name -> identifier + case 437: // param_name -> identifier { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 437: // fptype -> type_ref + case 438: // fptype -> type_ref { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 438: // fptype_noproctype -> simple_type + case 439: // fptype_noproctype -> simple_type { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 439: // fptype_noproctype -> string_type + case 440: // fptype_noproctype -> string_type { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 440: // fptype_noproctype -> pointer_type + case 441: // fptype_noproctype -> pointer_type { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 441: // fptype_noproctype -> structured_type + case 442: // fptype_noproctype -> structured_type { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 442: // fptype_noproctype -> template_type + case 443: // fptype_noproctype -> template_type { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 443: // stmt -> unlabelled_stmt + case 444: // stmt -> unlabelled_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 444: // stmt -> label_name, tkColon, stmt + case 445: // stmt -> label_name, tkColon, stmt { CurrentSemanticValue.stn = new labeled_statement(ValueStack[ValueStack.Depth-3].id, ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 445: // unlabelled_stmt -> /* empty */ + case 446: // unlabelled_stmt -> /* empty */ { CurrentSemanticValue.stn = new empty_statement(); CurrentSemanticValue.stn.source_context = null; } break; - case 446: // unlabelled_stmt -> assignment + case 447: // unlabelled_stmt -> assignment { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 447: // unlabelled_stmt -> proc_call + case 448: // unlabelled_stmt -> proc_call { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 448: // unlabelled_stmt -> goto_stmt + case 449: // unlabelled_stmt -> goto_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 449: // unlabelled_stmt -> compound_stmt + case 450: // unlabelled_stmt -> compound_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 450: // unlabelled_stmt -> if_stmt + case 451: // unlabelled_stmt -> if_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 451: // unlabelled_stmt -> case_stmt + case 452: // unlabelled_stmt -> case_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 452: // unlabelled_stmt -> repeat_stmt + case 453: // unlabelled_stmt -> repeat_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 453: // unlabelled_stmt -> while_stmt + case 454: // unlabelled_stmt -> while_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 454: // unlabelled_stmt -> for_stmt + case 455: // unlabelled_stmt -> for_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 455: // unlabelled_stmt -> with_stmt + case 456: // unlabelled_stmt -> with_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 456: // unlabelled_stmt -> inherited_message + case 457: // unlabelled_stmt -> inherited_message { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 457: // unlabelled_stmt -> try_stmt + case 458: // unlabelled_stmt -> try_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 458: // unlabelled_stmt -> raise_stmt + case 459: // unlabelled_stmt -> raise_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 459: // unlabelled_stmt -> foreach_stmt + case 460: // unlabelled_stmt -> foreach_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 460: // unlabelled_stmt -> var_stmt + case 461: // unlabelled_stmt -> var_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 461: // unlabelled_stmt -> expr_as_stmt + case 462: // unlabelled_stmt -> expr_as_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 462: // unlabelled_stmt -> lock_stmt + case 463: // unlabelled_stmt -> lock_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 463: // unlabelled_stmt -> yield_stmt + case 464: // unlabelled_stmt -> yield_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 464: // unlabelled_stmt -> yield_sequence_stmt + case 465: // unlabelled_stmt -> yield_sequence_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 465: // yield_stmt -> tkYield, expr_l1 + case 466: // yield_stmt -> tkYield, expr_l1 { CurrentSemanticValue.stn = new yield_node(ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan); } break; - case 466: // yield_sequence_stmt -> tkYield, tkSequence, expr_l1 + case 467: // yield_sequence_stmt -> tkYield, tkSequence, expr_l1 { CurrentSemanticValue.stn = new yield_sequence_node(ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan); } break; - case 467: // var_stmt -> tkVar, var_decl_part + case 468: // var_stmt -> tkVar, var_decl_part { CurrentSemanticValue.stn = new var_statement(ValueStack[ValueStack.Depth-1].stn as var_def_statement, CurrentLocationSpan); } break; - case 468: // assignment -> var_reference, assign_operator, expr_with_func_decl_lambda + case 469: // assignment -> var_reference, assign_operator, expr_with_func_decl_lambda { CurrentSemanticValue.stn = new assign(ValueStack[ValueStack.Depth-3].ex as addressed_value, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); } break; - case 469: // assignment -> tkRoundOpen, variable, tkComma, variable_list, tkRoundClose, + case 470: // assignment -> tkRoundOpen, variable, tkComma, variable_list, tkRoundClose, // assign_operator, expr { if (ValueStack[ValueStack.Depth-2].op.type != Operators.Assignment) @@ -4302,7 +4303,7 @@ public partial class GPPGParser: ShiftReduceParser tkRoundOpen, tkVar, variable, tkComma, var_variable_list, + case 471: // assignment -> tkRoundOpen, tkVar, variable, tkComma, var_variable_list, // tkRoundClose, assign_operator, expr { if (ValueStack[ValueStack.Depth-2].op.type != Operators.Assignment) @@ -4312,41 +4313,41 @@ public partial class GPPGParser: ShiftReduceParser variable + case 472: // variable_list -> variable { CurrentSemanticValue.ob = new addressed_value_list(ValueStack[ValueStack.Depth-1].ex as addressed_value,LocationStack[LocationStack.Depth-1]); } break; - case 472: // variable_list -> variable_list, tkComma, variable + case 473: // variable_list -> variable_list, tkComma, variable { (ValueStack[ValueStack.Depth-3].ob as addressed_value_list).Add(ValueStack[ValueStack.Depth-1].ex as addressed_value); (ValueStack[ValueStack.Depth-3].ob as addressed_value_list).source_context = LexLocation.MergeAll(LocationStack[LocationStack.Depth-3],LocationStack[LocationStack.Depth-2],LocationStack[LocationStack.Depth-1]); CurrentSemanticValue.ob = ValueStack[ValueStack.Depth-3].ob; } break; - case 473: // var_variable_list -> tkVar, variable + case 474: // var_variable_list -> tkVar, variable { CurrentSemanticValue.ob = new addressed_value_list(ValueStack[ValueStack.Depth-1].ex as addressed_value,CurrentLocationSpan); } break; - case 474: // var_variable_list -> var_variable_list, tkComma, tkVar, variable + case 475: // var_variable_list -> var_variable_list, tkComma, tkVar, variable { (ValueStack[ValueStack.Depth-4].ob as addressed_value_list).Add(ValueStack[ValueStack.Depth-1].ex as addressed_value); (ValueStack[ValueStack.Depth-4].ob as addressed_value_list).source_context = LexLocation.MergeAll(LocationStack[LocationStack.Depth-4],LocationStack[LocationStack.Depth-3],LocationStack[LocationStack.Depth-2],LocationStack[LocationStack.Depth-1]); CurrentSemanticValue.ob = ValueStack[ValueStack.Depth-4].ob; } break; - case 475: // proc_call -> var_reference + case 476: // proc_call -> var_reference { CurrentSemanticValue.stn = new procedure_call(ValueStack[ValueStack.Depth-1].ex as addressed_value, CurrentLocationSpan); } break; - case 476: // goto_stmt -> tkGoto, label_name + case 477: // goto_stmt -> tkGoto, label_name { CurrentSemanticValue.stn = new goto_statement(ValueStack[ValueStack.Depth-1].id, CurrentLocationSpan); } break; - case 477: // compound_stmt -> tkBegin, stmt_list, tkEnd + case 478: // compound_stmt -> tkBegin, stmt_list, tkEnd { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; (CurrentSemanticValue.stn as statement_list).left_logical_bracket = ValueStack[ValueStack.Depth-3].ti; @@ -4354,73 +4355,73 @@ public partial class GPPGParser: ShiftReduceParser stmt + case 479: // stmt_list -> stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, LocationStack[LocationStack.Depth-1]); } break; - case 479: // stmt_list -> stmt_list, tkSemiColon, stmt + case 480: // stmt_list -> stmt_list, tkSemiColon, stmt { CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as statement_list).Add(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 480: // if_stmt -> tkIf, expr_l1, tkThen, unlabelled_stmt + case 481: // if_stmt -> tkIf, expr_l1, tkThen, unlabelled_stmt { CurrentSemanticValue.stn = new if_node(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].stn as statement, null, CurrentLocationSpan); } break; - case 481: // if_stmt -> tkIf, expr_l1, tkThen, unlabelled_stmt, tkElse, unlabelled_stmt + case 482: // if_stmt -> tkIf, expr_l1, tkThen, unlabelled_stmt, tkElse, unlabelled_stmt { CurrentSemanticValue.stn = new if_node(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].stn as statement, ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 482: // case_stmt -> tkCase, expr_l1, tkOf, case_list, else_case, tkEnd + case 483: // case_stmt -> tkCase, expr_l1, tkOf, case_list, else_case, tkEnd { CurrentSemanticValue.stn = new case_node(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].stn as case_variants, ValueStack[ValueStack.Depth-2].stn as statement, CurrentLocationSpan); } break; - case 483: // case_list -> case_item + case 484: // case_list -> case_item { if (ValueStack[ValueStack.Depth-1].stn is empty_statement) CurrentSemanticValue.stn = NewCaseItem(ValueStack[ValueStack.Depth-1].stn, null); else CurrentSemanticValue.stn = NewCaseItem(ValueStack[ValueStack.Depth-1].stn, CurrentLocationSpan); } break; - case 484: // case_list -> case_list, tkSemiColon, case_item + case 485: // case_list -> case_list, tkSemiColon, case_item { CurrentSemanticValue.stn = AddCaseItem(ValueStack[ValueStack.Depth-3].stn as case_variants, ValueStack[ValueStack.Depth-1].stn, CurrentLocationSpan); } break; - case 485: // case_item -> /* empty */ + case 486: // case_item -> /* empty */ { CurrentSemanticValue.stn = new empty_statement(); } break; - case 486: // case_item -> case_label_list, tkColon, unlabelled_stmt + case 487: // case_item -> case_label_list, tkColon, unlabelled_stmt { CurrentSemanticValue.stn = new case_variant(ValueStack[ValueStack.Depth-3].stn as expression_list, ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 487: // case_label_list -> case_label + case 488: // case_label_list -> case_label { CurrentSemanticValue.stn = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 488: // case_label_list -> case_label_list, tkComma, case_label + case 489: // case_label_list -> case_label_list, tkComma, case_label { CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as expression_list).Add(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 489: // case_label -> const_elem + case 490: // case_label -> const_elem { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 490: // else_case -> /* empty */ + case 491: // else_case -> /* empty */ { CurrentSemanticValue.stn = null;} break; - case 491: // else_case -> tkElse, stmt_list + case 492: // else_case -> tkElse, stmt_list { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 492: // repeat_stmt -> tkRepeat, stmt_list, tkUntil, expr + case 493: // repeat_stmt -> tkRepeat, stmt_list, tkUntil, expr { CurrentSemanticValue.stn = new repeat_node(ValueStack[ValueStack.Depth-3].stn as statement_list, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); (ValueStack[ValueStack.Depth-3].stn as statement_list).left_logical_bracket = ValueStack[ValueStack.Depth-4].ti; @@ -4428,23 +4429,23 @@ public partial class GPPGParser: ShiftReduceParser tkWhile, expr_l1, optional_tk_do, unlabelled_stmt + case 494: // while_stmt -> tkWhile, expr_l1, optional_tk_do, unlabelled_stmt { CurrentSemanticValue.stn = NewWhileStmt(ValueStack[ValueStack.Depth-4].ti, ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-2].ti, ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 494: // optional_tk_do -> tkDo + case 495: // optional_tk_do -> tkDo { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 495: // optional_tk_do -> /* empty */ + case 496: // optional_tk_do -> /* empty */ { CurrentSemanticValue.ti = null; } break; - case 496: // lock_stmt -> tkLock, expr_l1, tkDo, unlabelled_stmt + case 497: // lock_stmt -> tkLock, expr_l1, tkDo, unlabelled_stmt { CurrentSemanticValue.stn = new lock_stmt(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 497: // foreach_stmt -> tkForeach, identifier, foreach_stmt_ident_dype_opt, tkIn, + case 498: // foreach_stmt -> tkForeach, identifier, foreach_stmt_ident_dype_opt, tkIn, // expr_l1, tkDo, unlabelled_stmt { CurrentSemanticValue.stn = new foreach_stmt(ValueStack[ValueStack.Depth-6].id, ValueStack[ValueStack.Depth-5].td, ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); @@ -4452,68 +4453,68 @@ public partial class GPPGParser: ShiftReduceParser tkForeach, tkVar, identifier, tkColon, type_ref, tkIn, expr_l1, + case 499: // foreach_stmt -> tkForeach, tkVar, identifier, tkColon, type_ref, tkIn, expr_l1, // tkDo, unlabelled_stmt { CurrentSemanticValue.stn = new foreach_stmt(ValueStack[ValueStack.Depth-7].id, ValueStack[ValueStack.Depth-5].td, ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 499: // foreach_stmt -> tkForeach, tkVar, identifier, tkIn, expr_l1, tkDo, + case 500: // foreach_stmt -> tkForeach, tkVar, identifier, tkIn, expr_l1, tkDo, // unlabelled_stmt { CurrentSemanticValue.stn = new foreach_stmt(ValueStack[ValueStack.Depth-5].id, new no_type_foreach(), ValueStack[ValueStack.Depth-3].ex, (statement)ValueStack[ValueStack.Depth-1].stn, CurrentLocationSpan); } break; - case 500: // foreach_stmt_ident_dype_opt -> tkColon, type_ref + case 501: // foreach_stmt_ident_dype_opt -> tkColon, type_ref { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 502: // for_stmt -> tkFor, optional_var, identifier, for_stmt_decl_or_assign, expr_l1, + case 503: // for_stmt -> tkFor, optional_var, identifier, for_stmt_decl_or_assign, expr_l1, // for_cycle_type, expr_l1, optional_tk_do, unlabelled_stmt { CurrentSemanticValue.stn = NewForStmt((bool)ValueStack[ValueStack.Depth-8].ob, ValueStack[ValueStack.Depth-7].id, ValueStack[ValueStack.Depth-6].td, ValueStack[ValueStack.Depth-5].ex, (for_cycle_type)ValueStack[ValueStack.Depth-4].ob, ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-2].ti, ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 503: // optional_var -> tkVar + case 504: // optional_var -> tkVar { CurrentSemanticValue.ob = true; } break; - case 504: // optional_var -> /* empty */ + case 505: // optional_var -> /* empty */ { CurrentSemanticValue.ob = false; } break; - case 506: // for_stmt_decl_or_assign -> tkColon, simple_type_identifier, tkAssign + case 507: // for_stmt_decl_or_assign -> tkColon, simple_type_identifier, tkAssign { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-2].td; } break; - case 507: // for_cycle_type -> tkTo + case 508: // for_cycle_type -> tkTo { CurrentSemanticValue.ob = for_cycle_type.to; } break; - case 508: // for_cycle_type -> tkDownto + case 509: // for_cycle_type -> tkDownto { CurrentSemanticValue.ob = for_cycle_type.downto; } break; - case 509: // with_stmt -> tkWith, expr_list, tkDo, unlabelled_stmt + case 510: // with_stmt -> tkWith, expr_list, tkDo, unlabelled_stmt { CurrentSemanticValue.stn = new with_statement(ValueStack[ValueStack.Depth-1].stn as statement, ValueStack[ValueStack.Depth-3].stn as expression_list, CurrentLocationSpan); } break; - case 510: // inherited_message -> tkInherited + case 511: // inherited_message -> tkInherited { CurrentSemanticValue.stn = new inherited_message(); CurrentSemanticValue.stn.source_context = CurrentLocationSpan; } break; - case 511: // try_stmt -> tkTry, stmt_list, try_handler + case 512: // try_stmt -> tkTry, stmt_list, try_handler { CurrentSemanticValue.stn = new try_stmt(ValueStack[ValueStack.Depth-2].stn as statement_list, ValueStack[ValueStack.Depth-1].stn as try_handler, CurrentLocationSpan); (ValueStack[ValueStack.Depth-2].stn as statement_list).left_logical_bracket = ValueStack[ValueStack.Depth-3].ti; ValueStack[ValueStack.Depth-2].stn.source_context = LocationStack[LocationStack.Depth-3].Merge(LocationStack[LocationStack.Depth-2]); } break; - case 512: // try_handler -> tkFinally, stmt_list, tkEnd + case 513: // try_handler -> tkFinally, stmt_list, tkEnd { CurrentSemanticValue.stn = new try_handler_finally(ValueStack[ValueStack.Depth-2].stn as statement_list, CurrentLocationSpan); (ValueStack[ValueStack.Depth-2].stn as statement_list).left_logical_bracket = ValueStack[ValueStack.Depth-3].ti; (ValueStack[ValueStack.Depth-2].stn as statement_list).right_logical_bracket = ValueStack[ValueStack.Depth-1].ti; } break; - case 513: // try_handler -> tkExcept, exception_block, tkEnd + case 514: // try_handler -> tkExcept, exception_block, tkEnd { CurrentSemanticValue.stn = new try_handler_except((exception_block)ValueStack[ValueStack.Depth-2].stn, CurrentLocationSpan); if ((ValueStack[ValueStack.Depth-2].stn as exception_block).stmt_list != null) @@ -4523,154 +4524,154 @@ public partial class GPPGParser: ShiftReduceParser exception_handler_list, exception_block_else_branch + case 515: // exception_block -> exception_handler_list, exception_block_else_branch { CurrentSemanticValue.stn = new exception_block(null, (exception_handler_list)ValueStack[ValueStack.Depth-2].stn, (statement_list)ValueStack[ValueStack.Depth-1].stn, CurrentLocationSpan); } break; - case 515: // exception_block -> exception_handler_list, tkSemiColon, + case 516: // exception_block -> exception_handler_list, tkSemiColon, // exception_block_else_branch { CurrentSemanticValue.stn = new exception_block(null, (exception_handler_list)ValueStack[ValueStack.Depth-3].stn, (statement_list)ValueStack[ValueStack.Depth-1].stn, CurrentLocationSpan); } break; - case 516: // exception_block -> stmt_list + case 517: // exception_block -> stmt_list { CurrentSemanticValue.stn = new exception_block(ValueStack[ValueStack.Depth-1].stn as statement_list, null, null, LocationStack[LocationStack.Depth-1]); } break; - case 517: // exception_handler_list -> exception_handler + case 518: // exception_handler_list -> exception_handler { CurrentSemanticValue.stn = new exception_handler_list(ValueStack[ValueStack.Depth-1].stn as exception_handler, CurrentLocationSpan); } break; - case 518: // exception_handler_list -> exception_handler_list, tkSemiColon, + case 519: // exception_handler_list -> exception_handler_list, tkSemiColon, // exception_handler { CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as exception_handler_list).Add(ValueStack[ValueStack.Depth-1].stn as exception_handler, CurrentLocationSpan); } break; - case 519: // exception_block_else_branch -> /* empty */ + case 520: // exception_block_else_branch -> /* empty */ { CurrentSemanticValue.stn = null; } break; - case 520: // exception_block_else_branch -> tkElse, stmt_list + case 521: // exception_block_else_branch -> tkElse, stmt_list { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 521: // exception_handler -> tkOn, exception_identifier, tkDo, unlabelled_stmt + case 522: // exception_handler -> tkOn, exception_identifier, tkDo, unlabelled_stmt { CurrentSemanticValue.stn = new exception_handler((ValueStack[ValueStack.Depth-3].stn as exception_ident).variable, (ValueStack[ValueStack.Depth-3].stn as exception_ident).type_name, ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 522: // exception_identifier -> exception_class_type_identifier + case 523: // exception_identifier -> exception_class_type_identifier { CurrentSemanticValue.stn = new exception_ident(null, (named_type_reference)ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); } break; - case 523: // exception_identifier -> exception_variable, tkColon, + case 524: // exception_identifier -> exception_variable, tkColon, // exception_class_type_identifier { CurrentSemanticValue.stn = new exception_ident(ValueStack[ValueStack.Depth-3].id, (named_type_reference)ValueStack[ValueStack.Depth-1].td, CurrentLocationSpan); } break; - case 524: // exception_class_type_identifier -> simple_type_identifier + case 525: // exception_class_type_identifier -> simple_type_identifier { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 525: // exception_variable -> identifier + case 526: // exception_variable -> identifier { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 526: // raise_stmt -> tkRaise + case 527: // raise_stmt -> tkRaise { CurrentSemanticValue.stn = new raise_stmt(); CurrentSemanticValue.stn.source_context = CurrentLocationSpan; } break; - case 527: // raise_stmt -> tkRaise, expr + case 528: // raise_stmt -> tkRaise, expr { CurrentSemanticValue.stn = new raise_stmt(ValueStack[ValueStack.Depth-1].ex, null, CurrentLocationSpan); } break; - case 528: // expr_list -> expr_with_func_decl_lambda + case 529: // expr_list -> expr_with_func_decl_lambda { CurrentSemanticValue.stn = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 529: // expr_list -> expr_list, tkComma, expr_with_func_decl_lambda + case 530: // expr_list -> expr_list, tkComma, expr_with_func_decl_lambda { CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as expression_list).Add(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 530: // expr_as_stmt -> allowable_expr_as_stmt + case 531: // expr_as_stmt -> allowable_expr_as_stmt { CurrentSemanticValue.stn = new expression_as_statement(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 531: // allowable_expr_as_stmt -> new_expr + case 532: // allowable_expr_as_stmt -> new_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 532: // expr_with_func_decl_lambda -> expr + case 533: // expr_with_func_decl_lambda -> expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 533: // expr_with_func_decl_lambda -> func_decl_lambda + case 534: // expr_with_func_decl_lambda -> func_decl_lambda { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 534: // expr -> expr_l1 + case 535: // expr -> expr_l1 { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 535: // expr -> format_expr + case 536: // expr -> format_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 536: // expr_l1 -> relop_expr + case 537: // expr_l1 -> relop_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 537: // expr_l1 -> question_expr + case 538: // expr_l1 -> question_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 538: // sizeof_expr -> tkSizeOf, tkRoundOpen, simple_or_template_type_reference, + case 539: // sizeof_expr -> tkSizeOf, tkRoundOpen, simple_or_template_type_reference, // tkRoundClose { CurrentSemanticValue.ex = new sizeof_operator((named_type_reference)ValueStack[ValueStack.Depth-2].td, null, CurrentLocationSpan); } break; - case 539: // typeof_expr -> tkTypeOf, tkRoundOpen, simple_or_template_type_reference, + case 540: // typeof_expr -> tkTypeOf, tkRoundOpen, simple_or_template_type_reference, // tkRoundClose { CurrentSemanticValue.ex = new typeof_operator((named_type_reference)ValueStack[ValueStack.Depth-2].td, CurrentLocationSpan); } break; - case 540: // question_expr -> expr_l1, tkQuestion, expr_l1, tkColon, expr_l1 + case 541: // question_expr -> expr_l1, tkQuestion, expr_l1, tkColon, expr_l1 { CurrentSemanticValue.ex = new question_colon_expression(ValueStack[ValueStack.Depth-5].ex, ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 541: // simple_or_template_type_reference -> simple_type_identifier + case 542: // simple_or_template_type_reference -> simple_type_identifier { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 542: // simple_or_template_type_reference -> simple_type_identifier, + case 543: // simple_or_template_type_reference -> simple_type_identifier, // template_type_params { CurrentSemanticValue.td = new template_type_reference((named_type_reference)ValueStack[ValueStack.Depth-2].td, (template_param_list)ValueStack[ValueStack.Depth-1].stn, CurrentLocationSpan); } break; - case 543: // simple_or_template_type_reference -> simple_type_identifier, tkAmpersend, + case 544: // simple_or_template_type_reference -> simple_type_identifier, tkAmpersend, // template_type_params { CurrentSemanticValue.td = new template_type_reference((named_type_reference)ValueStack[ValueStack.Depth-3].td, (template_param_list)ValueStack[ValueStack.Depth-1].stn, CurrentLocationSpan); } break; - case 544: // optional_array_initializer -> tkRoundOpen, typed_const_list, tkRoundClose + case 545: // optional_array_initializer -> tkRoundOpen, typed_const_list, tkRoundClose { CurrentSemanticValue.stn = new array_const((expression_list)ValueStack[ValueStack.Depth-2].stn, CurrentLocationSpan); } break; - case 546: // new_expr -> tkNew, simple_or_template_type_reference, + case 547: // new_expr -> tkNew, simple_or_template_type_reference, // optional_expr_list_with_bracket { CurrentSemanticValue.ex = new new_expr(ValueStack[ValueStack.Depth-2].td, ValueStack[ValueStack.Depth-1].stn as expression_list, false, null, CurrentLocationSpan); } break; - case 547: // new_expr -> tkNew, array_name_for_new_expr, tkSquareOpen, optional_expr_list, + case 548: // new_expr -> tkNew, array_name_for_new_expr, tkSquareOpen, optional_expr_list, // tkSquareClose, optional_array_initializer { var el = ValueStack[ValueStack.Depth-3].stn as expression_list; @@ -4686,7 +4687,7 @@ public partial class GPPGParser: ShiftReduceParser tkNew, tkClass, tkRoundOpen, list_fields_in_unnamed_object, + case 549: // new_expr -> tkNew, tkClass, tkRoundOpen, list_fields_in_unnamed_object, // tkRoundClose { // sugared node @@ -4701,12 +4702,12 @@ public partial class GPPGParser: ShiftReduceParser identifier, tkAssign, relop_expr + case 550: // field_in_unnamed_object -> identifier, tkAssign, relop_expr { CurrentSemanticValue.ob = new name_assign_expr(ValueStack[ValueStack.Depth-3].id,ValueStack[ValueStack.Depth-1].ex,CurrentLocationSpan); } break; - case 550: // field_in_unnamed_object -> relop_expr + case 551: // field_in_unnamed_object -> relop_expr { ident name = null; var id = ValueStack[ValueStack.Depth-1].ex as ident; @@ -4726,13 +4727,13 @@ public partial class GPPGParser: ShiftReduceParser field_in_unnamed_object + case 552: // list_fields_in_unnamed_object -> field_in_unnamed_object { var l = new name_assign_expr_list(); CurrentSemanticValue.ob = l.Add(ValueStack[ValueStack.Depth-1].ob as name_assign_expr); } break; - case 552: // list_fields_in_unnamed_object -> list_fields_in_unnamed_object, tkComma, + case 553: // list_fields_in_unnamed_object -> list_fields_in_unnamed_object, tkComma, // field_in_unnamed_object { var nel = ValueStack[ValueStack.Depth-3].ob as name_assign_expr_list; @@ -4743,32 +4744,27 @@ public partial class GPPGParser: ShiftReduceParser simple_type_identifier + case 554: // array_name_for_new_expr -> simple_type_identifier { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 554: // array_name_for_new_expr -> unsized_array_type + case 555: // array_name_for_new_expr -> unsized_array_type { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 555: // optional_expr_list_with_bracket -> /* empty */ + case 556: // optional_expr_list_with_bracket -> /* empty */ { CurrentSemanticValue.stn = null; } break; - case 556: // optional_expr_list_with_bracket -> tkRoundOpen, optional_expr_list, + case 557: // optional_expr_list_with_bracket -> tkRoundOpen, optional_expr_list, // tkRoundClose { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } break; - case 557: // relop_expr -> simple_expr + case 558: // relop_expr -> simple_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 558: // relop_expr -> relop_expr, relop, simple_expr + case 559: // relop_expr -> relop_expr, relop, simple_expr { CurrentSemanticValue.ex = new bin_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); } break; - case 559: // relop_expr -> relop_expr, tkMatching, simple_expr -{ - CurrentSemanticValue.ex = new matching_expression(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); - } - break; case 560: // simple_expr_or_nothing -> simple_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; @@ -4898,43 +4894,8 @@ public partial class GPPGParser: ShiftReduceParser tkNil -{ - CurrentSemanticValue.ex = new nil_const(); - CurrentSemanticValue.ex.source_context = CurrentLocationSpan; - } - break; - case 596: // factor -> literal_or_number -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 597: // factor -> default_expr -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 598: // factor -> tkSquareOpen, elem_list, tkSquareClose -{ - CurrentSemanticValue.ex = new pascal_set_constant(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); - } - break; - case 599: // factor -> tkNot, factor -{ - CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); - } - break; - case 600: // factor -> sign, factor -{ - CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); - } - break; - case 601: // factor -> tkDeref, factor -{ - CurrentSemanticValue.ex = new roof_dereference(ValueStack[ValueStack.Depth-1].ex as addressed_value, CurrentLocationSpan); - } - break; - case 602: // factor -> var_reference -{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } - break; - case 603: // factor -> tkRoundOpen, expr_l1, tkComma, expr_l1_list, lambda_type_ref, - // optional_full_lambda_fp_list, tkRoundClose + case 595: // tuple -> tkRoundOpen, expr_l1, tkComma, expr_l1_list, lambda_type_ref, + // optional_full_lambda_fp_list, tkRoundClose { (ValueStack[ValueStack.Depth-4].stn as expression_list).expressions.Insert(0,ValueStack[ValueStack.Depth-6].ex); if ((ValueStack[ValueStack.Depth-4].stn as expression_list).expressions.Count>7) @@ -4949,61 +4910,99 @@ public partial class GPPGParser: ShiftReduceParser literal + case 596: // factor -> tkNil +{ + CurrentSemanticValue.ex = new nil_const(); + CurrentSemanticValue.ex.source_context = CurrentLocationSpan; + } + break; + case 597: // factor -> literal_or_number { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 605: // literal_or_number -> unsigned_number + case 598: // factor -> default_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 606: // var_reference -> var_address, variable + case 599: // factor -> tkSquareOpen, elem_list, tkSquareClose +{ + CurrentSemanticValue.ex = new pascal_set_constant(ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); + } + break; + case 600: // factor -> tkNot, factor +{ + CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); + } + break; + case 601: // factor -> sign, factor +{ + CurrentSemanticValue.ex = new un_expr(ValueStack[ValueStack.Depth-1].ex, ValueStack[ValueStack.Depth-2].op.type, CurrentLocationSpan); + } + break; + case 602: // factor -> tkDeref, factor +{ + CurrentSemanticValue.ex = new roof_dereference(ValueStack[ValueStack.Depth-1].ex as addressed_value, CurrentLocationSpan); + } + break; + case 603: // factor -> var_reference +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 604: // factor -> tuple +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 605: // literal_or_number -> literal +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 606: // literal_or_number -> unsigned_number +{ CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } + break; + case 607: // var_reference -> var_address, variable { CurrentSemanticValue.ex = NewVarReference(ValueStack[ValueStack.Depth-2].stn as get_address, ValueStack[ValueStack.Depth-1].ex as addressed_value, CurrentLocationSpan); } break; - case 607: // var_reference -> variable + case 608: // var_reference -> variable { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 608: // var_address -> tkAddressOf + case 609: // var_address -> tkAddressOf { CurrentSemanticValue.stn = NewVarAddress(CurrentLocationSpan); } break; - case 609: // var_address -> var_address, tkAddressOf + case 610: // var_address -> var_address, tkAddressOf { CurrentSemanticValue.stn = NewVarAddress(ValueStack[ValueStack.Depth-2].stn as get_address, CurrentLocationSpan); } break; - case 610: // attribute_variable -> simple_type_identifier, optional_expr_list_with_bracket + case 611: // attribute_variable -> simple_type_identifier, optional_expr_list_with_bracket { CurrentSemanticValue.stn = new attribute(null, ValueStack[ValueStack.Depth-2].td as named_type_reference, ValueStack[ValueStack.Depth-1].stn as expression_list, CurrentLocationSpan); } break; - case 611: // dotted_identifier -> identifier + case 612: // dotted_identifier -> identifier { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].id; } break; - case 612: // dotted_identifier -> dotted_identifier, tkPoint, identifier_or_keyword + case 613: // dotted_identifier -> dotted_identifier, tkPoint, identifier_or_keyword { CurrentSemanticValue.ex = new dot_node(ValueStack[ValueStack.Depth-3].ex as addressed_value, ValueStack[ValueStack.Depth-1].id as addressed_value, CurrentLocationSpan); } break; - case 613: // variable_as_type -> dotted_identifier + case 614: // variable_as_type -> dotted_identifier { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex;} break; - case 614: // variable_as_type -> dotted_identifier, template_type_params + case 615: // variable_as_type -> dotted_identifier, template_type_params { CurrentSemanticValue.ex = new ident_with_templateparams(ValueStack[ValueStack.Depth-2].ex as addressed_value, ValueStack[ValueStack.Depth-1].stn as template_param_list, CurrentLocationSpan); } break; - case 615: // variable -> identifier + case 616: // variable -> identifier { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].id; } break; - case 616: // variable -> operator_name_ident + case 617: // variable -> operator_name_ident { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 617: // variable -> tkInherited, identifier + case 618: // variable -> tkInherited, identifier { CurrentSemanticValue.ex = new inherited_ident(ValueStack[ValueStack.Depth-1].id.name, CurrentLocationSpan); } break; - case 618: // variable -> tkRoundOpen, expr, tkRoundClose + case 619: // variable -> tkRoundOpen, expr, tkRoundClose { if (!parsertools.build_tree_for_formatter) { @@ -5013,18 +5012,18 @@ public partial class GPPGParser: ShiftReduceParser sizeof_expr + case 620: // variable -> sizeof_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 620: // variable -> typeof_expr + case 621: // variable -> typeof_expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 621: // variable -> literal_or_number, tkPoint, identifier_or_keyword + case 622: // variable -> literal_or_number, tkPoint, identifier_or_keyword { CurrentSemanticValue.ex = new dot_node(ValueStack[ValueStack.Depth-3].ex as addressed_value, ValueStack[ValueStack.Depth-1].id as addressed_value, CurrentLocationSpan); } break; - case 622: // variable -> variable, tkSquareOpen, expr_list, tkSquareClose + case 623: // variable -> variable, tkSquareOpen, expr_list, tkSquareClose { var el = ValueStack[ValueStack.Depth-2].stn as expression_list; // SSM 10/03/16 if (el.expressions.Count==1 && el.expressions[0] is format_expr) @@ -5035,491 +5034,491 @@ public partial class GPPGParser: ShiftReduceParser variable, tkRoundOpen, optional_expr_list, tkRoundClose + case 624: // variable -> variable, tkRoundOpen, optional_expr_list, tkRoundClose { CurrentSemanticValue.ex = new method_call(ValueStack[ValueStack.Depth-4].ex as addressed_value,ValueStack[ValueStack.Depth-2].stn as expression_list, CurrentLocationSpan); } break; - case 624: // variable -> variable, tkPoint, identifier_keyword_operatorname + case 625: // variable -> variable, tkPoint, identifier_keyword_operatorname { CurrentSemanticValue.ex = new dot_node(ValueStack[ValueStack.Depth-3].ex as addressed_value, ValueStack[ValueStack.Depth-1].id as addressed_value, CurrentLocationSpan); } break; - case 625: // variable -> variable, tkDeref + case 626: // variable -> variable, tkDeref { CurrentSemanticValue.ex = new roof_dereference(ValueStack[ValueStack.Depth-2].ex as addressed_value,CurrentLocationSpan); } break; - case 626: // variable -> variable, tkAmpersend, template_type_params + case 627: // variable -> variable, tkAmpersend, template_type_params { CurrentSemanticValue.ex = new ident_with_templateparams(ValueStack[ValueStack.Depth-3].ex as addressed_value, ValueStack[ValueStack.Depth-1].stn as template_param_list, CurrentLocationSpan); } break; - case 627: // optional_expr_list -> expr_list + case 628: // optional_expr_list -> expr_list { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 628: // optional_expr_list -> /* empty */ + case 629: // optional_expr_list -> /* empty */ { CurrentSemanticValue.stn = null; } break; - case 629: // elem_list -> elem_list1 + case 630: // elem_list -> elem_list1 { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 630: // elem_list -> /* empty */ + case 631: // elem_list -> /* empty */ { CurrentSemanticValue.stn = null; } break; - case 631: // elem_list1 -> elem + case 632: // elem_list1 -> elem { CurrentSemanticValue.stn = new expression_list(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 632: // elem_list1 -> elem_list1, tkComma, elem + case 633: // elem_list1 -> elem_list1, tkComma, elem { CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as expression_list).Add(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 633: // elem -> expr + case 634: // elem -> expr { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 634: // elem -> expr, tkDotDot, expr + case 635: // elem -> expr, tkDotDot, expr { CurrentSemanticValue.ex = new diapason_expr(ValueStack[ValueStack.Depth-3].ex, ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 635: // one_literal -> tkStringLiteral + case 636: // one_literal -> tkStringLiteral { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].stn as literal; } break; - case 636: // one_literal -> tkAsciiChar + case 637: // one_literal -> tkAsciiChar { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].stn as literal; } break; - case 637: // literal -> literal_list + case 638: // literal -> literal_list { CurrentSemanticValue.ex = NewLiteral(ValueStack[ValueStack.Depth-1].stn as literal_const_line); } break; - case 638: // literal_list -> one_literal + case 639: // literal_list -> one_literal { CurrentSemanticValue.stn = new literal_const_line(ValueStack[ValueStack.Depth-1].ex as literal, CurrentLocationSpan); } break; - case 639: // literal_list -> literal_list, one_literal + case 640: // literal_list -> literal_list, one_literal { CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-2].stn as literal_const_line).Add(ValueStack[ValueStack.Depth-1].ex as literal, CurrentLocationSpan); } break; - case 640: // operator_name_ident -> tkOperator, overload_operator + case 641: // operator_name_ident -> tkOperator, overload_operator { CurrentSemanticValue.ex = new operator_name_ident((ValueStack[ValueStack.Depth-1].op as op_type_node).text, (ValueStack[ValueStack.Depth-1].op as op_type_node).type, CurrentLocationSpan); } break; - case 641: // optional_method_modificators -> tkSemiColon + case 642: // optional_method_modificators -> tkSemiColon { CurrentSemanticValue.stn = new procedure_attributes_list(new List(),CurrentLocationSpan); } break; - case 642: // optional_method_modificators -> tkSemiColon, meth_modificators, tkSemiColon + case 643: // optional_method_modificators -> tkSemiColon, meth_modificators, tkSemiColon { //parsertools.AddModifier((procedure_attributes_list)$2, proc_attribute.attr_overload); CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-2].stn; } break; - case 643: // optional_method_modificators1 -> /* empty */ + case 644: // optional_method_modificators1 -> /* empty */ { CurrentSemanticValue.stn = new procedure_attributes_list(new List(),CurrentLocationSpan); } break; - case 644: // optional_method_modificators1 -> tkSemiColon, meth_modificators + case 645: // optional_method_modificators1 -> tkSemiColon, meth_modificators { //parsertools.AddModifier((procedure_attributes_list)$2, proc_attribute.attr_overload); CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 645: // meth_modificators -> meth_modificator + case 646: // meth_modificators -> meth_modificator { CurrentSemanticValue.stn = new procedure_attributes_list(ValueStack[ValueStack.Depth-1].id as procedure_attribute, CurrentLocationSpan); } break; - case 646: // meth_modificators -> meth_modificators, tkSemiColon, meth_modificator + case 647: // meth_modificators -> meth_modificators, tkSemiColon, meth_modificator { CurrentSemanticValue.stn = (ValueStack[ValueStack.Depth-3].stn as procedure_attributes_list).Add(ValueStack[ValueStack.Depth-1].id as procedure_attribute, CurrentLocationSpan); } break; - case 647: // identifier -> tkIdentifier + case 648: // identifier -> tkIdentifier { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 648: // identifier -> property_specifier_directives + case 649: // identifier -> property_specifier_directives { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 649: // identifier -> non_reserved + case 650: // identifier -> non_reserved { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 650: // identifier_or_keyword -> identifier + case 651: // identifier_or_keyword -> identifier { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 651: // identifier_or_keyword -> keyword + case 652: // identifier_or_keyword -> keyword { CurrentSemanticValue.id = new ident(ValueStack[ValueStack.Depth-1].ti.text, CurrentLocationSpan); } break; - case 652: // identifier_or_keyword -> reserved_keyword + case 653: // identifier_or_keyword -> reserved_keyword { CurrentSemanticValue.id = new ident(ValueStack[ValueStack.Depth-1].ti.text, CurrentLocationSpan); } break; - case 653: // identifier_keyword_operatorname -> identifier + case 654: // identifier_keyword_operatorname -> identifier { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 654: // identifier_keyword_operatorname -> keyword + case 655: // identifier_keyword_operatorname -> keyword { CurrentSemanticValue.id = new ident(ValueStack[ValueStack.Depth-1].ti.text, CurrentLocationSpan); } break; - case 655: // identifier_keyword_operatorname -> operator_name_ident + case 656: // identifier_keyword_operatorname -> operator_name_ident { CurrentSemanticValue.id = (ident)ValueStack[ValueStack.Depth-1].ex; } break; - case 656: // meth_modificator -> tkAbstract + case 657: // meth_modificator -> tkAbstract { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 657: // meth_modificator -> tkOverload + case 658: // meth_modificator -> tkOverload { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; parsertools.AddWarningFromResource("OVERLOAD_IS_NOT_USED", ValueStack[ValueStack.Depth-1].id.source_context); } break; - case 658: // meth_modificator -> tkReintroduce + case 659: // meth_modificator -> tkReintroduce { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 659: // meth_modificator -> tkOverride + case 660: // meth_modificator -> tkOverride { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 660: // meth_modificator -> tkExtensionMethod + case 661: // meth_modificator -> tkExtensionMethod { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 661: // meth_modificator -> tkVirtual + case 662: // meth_modificator -> tkVirtual { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 662: // property_specifier_directives -> tkRead + case 663: // property_specifier_directives -> tkRead { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 663: // property_specifier_directives -> tkWrite + case 664: // property_specifier_directives -> tkWrite { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 664: // non_reserved -> tkName + case 665: // non_reserved -> tkName { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 665: // non_reserved -> tkNew + case 666: // non_reserved -> tkNew { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 666: // visibility_specifier -> tkInternal + case 667: // visibility_specifier -> tkInternal { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 667: // visibility_specifier -> tkPublic + case 668: // visibility_specifier -> tkPublic { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 668: // visibility_specifier -> tkProtected + case 669: // visibility_specifier -> tkProtected { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 669: // visibility_specifier -> tkPrivate + case 670: // visibility_specifier -> tkPrivate { CurrentSemanticValue.id = ValueStack[ValueStack.Depth-1].id; } break; - case 670: // keyword -> visibility_specifier + case 671: // keyword -> visibility_specifier { CurrentSemanticValue.ti = new token_info(ValueStack[ValueStack.Depth-1].id.name, CurrentLocationSpan); } break; - case 671: // keyword -> tkSealed + case 672: // keyword -> tkSealed { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 672: // keyword -> tkTemplate + case 673: // keyword -> tkTemplate { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 673: // keyword -> tkOr + case 674: // keyword -> tkOr { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].op; } break; - case 674: // keyword -> tkTypeOf + case 675: // keyword -> tkTypeOf { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 675: // keyword -> tkSizeOf + case 676: // keyword -> tkSizeOf { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 676: // keyword -> tkDefault + case 677: // keyword -> tkDefault { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 677: // keyword -> tkWhere + case 678: // keyword -> tkWhere { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 678: // keyword -> tkXor + case 679: // keyword -> tkXor { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].op; } break; - case 679: // keyword -> tkAnd + case 680: // keyword -> tkAnd { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].op; } break; - case 680: // keyword -> tkDiv + case 681: // keyword -> tkDiv { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].op; } break; - case 681: // keyword -> tkMod + case 682: // keyword -> tkMod { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].op; } break; - case 682: // keyword -> tkShl + case 683: // keyword -> tkShl { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].op; } break; - case 683: // keyword -> tkShr + case 684: // keyword -> tkShr { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].op; } break; - case 684: // keyword -> tkNot + case 685: // keyword -> tkNot { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].op; } break; - case 685: // keyword -> tkAs + case 686: // keyword -> tkAs { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].op; } break; - case 686: // keyword -> tkIn + case 687: // keyword -> tkIn { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].op; } break; - case 687: // keyword -> tkIs + case 688: // keyword -> tkIs { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].op; } break; - case 688: // keyword -> tkArray + case 689: // keyword -> tkArray { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 689: // keyword -> tkSequence + case 690: // keyword -> tkSequence { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 690: // keyword -> tkBegin + case 691: // keyword -> tkBegin { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 691: // keyword -> tkCase + case 692: // keyword -> tkCase { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 692: // keyword -> tkClass + case 693: // keyword -> tkClass { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 693: // keyword -> tkConst + case 694: // keyword -> tkConst { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 694: // keyword -> tkConstructor + case 695: // keyword -> tkConstructor { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 695: // keyword -> tkDestructor + case 696: // keyword -> tkDestructor { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 696: // keyword -> tkDownto + case 697: // keyword -> tkDownto { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 697: // keyword -> tkDo + case 698: // keyword -> tkDo { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 698: // keyword -> tkElse + case 699: // keyword -> tkElse { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 699: // keyword -> tkExcept + case 700: // keyword -> tkExcept { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 700: // keyword -> tkFile + case 701: // keyword -> tkFile { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 701: // keyword -> tkAuto + case 702: // keyword -> tkAuto { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 702: // keyword -> tkFinalization + case 703: // keyword -> tkFinalization { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 703: // keyword -> tkFinally + case 704: // keyword -> tkFinally { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 704: // keyword -> tkFor + case 705: // keyword -> tkFor { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 705: // keyword -> tkForeach + case 706: // keyword -> tkForeach { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 706: // keyword -> tkFunction + case 707: // keyword -> tkFunction { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 707: // keyword -> tkIf + case 708: // keyword -> tkIf { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 708: // keyword -> tkImplementation + case 709: // keyword -> tkImplementation { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 709: // keyword -> tkInherited + case 710: // keyword -> tkInherited { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 710: // keyword -> tkInitialization + case 711: // keyword -> tkInitialization { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 711: // keyword -> tkInterface + case 712: // keyword -> tkInterface { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 712: // keyword -> tkProcedure + case 713: // keyword -> tkProcedure { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 713: // keyword -> tkProperty + case 714: // keyword -> tkProperty { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 714: // keyword -> tkRaise + case 715: // keyword -> tkRaise { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 715: // keyword -> tkRecord + case 716: // keyword -> tkRecord { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 716: // keyword -> tkRepeat + case 717: // keyword -> tkRepeat { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 717: // keyword -> tkSet + case 718: // keyword -> tkSet { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 718: // keyword -> tkTry + case 719: // keyword -> tkTry { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 719: // keyword -> tkType + case 720: // keyword -> tkType { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 720: // keyword -> tkThen + case 721: // keyword -> tkThen { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 721: // keyword -> tkTo + case 722: // keyword -> tkTo { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 722: // keyword -> tkUntil + case 723: // keyword -> tkUntil { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 723: // keyword -> tkUses + case 724: // keyword -> tkUses { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 724: // keyword -> tkVar + case 725: // keyword -> tkVar { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 725: // keyword -> tkWhile + case 726: // keyword -> tkWhile { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 726: // keyword -> tkWith + case 727: // keyword -> tkWith { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 727: // keyword -> tkNil + case 728: // keyword -> tkNil { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 728: // keyword -> tkGoto + case 729: // keyword -> tkGoto { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 729: // keyword -> tkOf + case 730: // keyword -> tkOf { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 730: // keyword -> tkLabel + case 731: // keyword -> tkLabel { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 731: // keyword -> tkProgram + case 732: // keyword -> tkProgram { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 732: // keyword -> tkUnit + case 733: // keyword -> tkUnit { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 733: // keyword -> tkLibrary + case 734: // keyword -> tkLibrary { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 734: // keyword -> tkExternal + case 735: // keyword -> tkExternal { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 735: // keyword -> tkParams + case 736: // keyword -> tkParams { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 736: // keyword -> tkEvent + case 737: // keyword -> tkEvent { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 737: // keyword -> tkYield + case 738: // keyword -> tkYield { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 738: // reserved_keyword -> tkOperator + case 739: // reserved_keyword -> tkOperator { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 739: // reserved_keyword -> tkEnd + case 740: // reserved_keyword -> tkEnd { CurrentSemanticValue.ti = ValueStack[ValueStack.Depth-1].ti; } break; - case 740: // overload_operator -> tkMinus + case 741: // overload_operator -> tkMinus { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 741: // overload_operator -> tkPlus + case 742: // overload_operator -> tkPlus { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 742: // overload_operator -> tkSlash + case 743: // overload_operator -> tkSlash { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 743: // overload_operator -> tkStar + case 744: // overload_operator -> tkStar { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 744: // overload_operator -> tkEqual + case 745: // overload_operator -> tkEqual { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 745: // overload_operator -> tkGreater + case 746: // overload_operator -> tkGreater { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 746: // overload_operator -> tkGreaterEqual + case 747: // overload_operator -> tkGreaterEqual { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 747: // overload_operator -> tkLower + case 748: // overload_operator -> tkLower { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 748: // overload_operator -> tkLowerEqual + case 749: // overload_operator -> tkLowerEqual { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 749: // overload_operator -> tkNotEqual + case 750: // overload_operator -> tkNotEqual { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 750: // overload_operator -> tkOr + case 751: // overload_operator -> tkOr { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 751: // overload_operator -> tkXor + case 752: // overload_operator -> tkXor { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 752: // overload_operator -> tkAnd + case 753: // overload_operator -> tkAnd { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 753: // overload_operator -> tkDiv + case 754: // overload_operator -> tkDiv { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 754: // overload_operator -> tkMod + case 755: // overload_operator -> tkMod { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 755: // overload_operator -> tkShl + case 756: // overload_operator -> tkShl { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 756: // overload_operator -> tkShr + case 757: // overload_operator -> tkShr { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 757: // overload_operator -> tkNot + case 758: // overload_operator -> tkNot { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 758: // overload_operator -> tkIn + case 759: // overload_operator -> tkIn { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 759: // overload_operator -> tkImplicit + case 760: // overload_operator -> tkImplicit { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 760: // overload_operator -> tkExplicit + case 761: // overload_operator -> tkExplicit { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 761: // overload_operator -> assign_operator + case 762: // overload_operator -> assign_operator { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 762: // assign_operator -> tkAssign + case 763: // assign_operator -> tkAssign { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 763: // assign_operator -> tkPlusEqual + case 764: // assign_operator -> tkPlusEqual { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 764: // assign_operator -> tkMinusEqual + case 765: // assign_operator -> tkMinusEqual { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 765: // assign_operator -> tkMultEqual + case 766: // assign_operator -> tkMultEqual { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 766: // assign_operator -> tkDivEqual + case 767: // assign_operator -> tkDivEqual { CurrentSemanticValue.op = ValueStack[ValueStack.Depth-1].op; } break; - case 767: // func_decl_lambda -> identifier, tkArrow, lambda_function_body + case 768: // func_decl_lambda -> identifier, tkArrow, lambda_function_body { var idList = new ident_list(ValueStack[ValueStack.Depth-3].id, LocationStack[LocationStack.Depth-3]); var formalPars = new formal_parameters(new typed_parameters(idList, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), parametr_kind.none, null, LocationStack[LocationStack.Depth-3]), LocationStack[LocationStack.Depth-3]); CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null), ValueStack[ValueStack.Depth-1].stn as statement_list, CurrentLocationSpan); } break; - case 768: // func_decl_lambda -> tkRoundOpen, tkRoundClose, lambda_type_ref_noproctype, + case 769: // func_decl_lambda -> tkRoundOpen, tkRoundClose, lambda_type_ref_noproctype, // tkArrow, lambda_function_body { CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), null, ValueStack[ValueStack.Depth-3].td, ValueStack[ValueStack.Depth-1].stn as statement_list, CurrentLocationSpan); } break; - case 769: // func_decl_lambda -> tkRoundOpen, identifier, tkColon, fptype, tkRoundClose, + case 770: // func_decl_lambda -> tkRoundOpen, identifier, tkColon, fptype, tkRoundClose, // lambda_type_ref_noproctype, tkArrow, lambda_function_body { var idList = new ident_list(ValueStack[ValueStack.Depth-7].id, LocationStack[LocationStack.Depth-7]); @@ -5528,7 +5527,7 @@ public partial class GPPGParser: ShiftReduceParser tkRoundOpen, identifier, tkSemiColon, full_lambda_fp_list, + case 771: // func_decl_lambda -> tkRoundOpen, identifier, tkSemiColon, full_lambda_fp_list, // tkRoundClose, lambda_type_ref_noproctype, tkArrow, // lambda_function_body { @@ -5539,7 +5538,7 @@ public partial class GPPGParser: ShiftReduceParser tkRoundOpen, identifier, tkColon, fptype, tkSemiColon, + case 772: // func_decl_lambda -> tkRoundOpen, identifier, tkColon, fptype, tkSemiColon, // full_lambda_fp_list, tkRoundClose, // lambda_type_ref_noproctype, tkArrow, lambda_function_body { @@ -5551,144 +5550,123 @@ public partial class GPPGParser: ShiftReduceParser tkRoundOpen, expr_l1, tkComma, expr_l1_list, + case 773: // func_decl_lambda -> tkRoundOpen, expr_l1, tkComma, expr_l1_list, // lambda_type_ref, optional_full_lambda_fp_list, // tkRoundClose, rem_lambda { - if (ValueStack[ValueStack.Depth-1].ob==null) // It is a tuple - check for nothing except expr_list is in parentheses + var pair = ValueStack[ValueStack.Depth-1].ob as pair_type_stlist; + + if (ValueStack[ValueStack.Depth-4].td is lambda_inferred_type) { - if (!(ValueStack[ValueStack.Depth-4].td is lambda_inferred_type)) - parsertools.AddErrorFromResource("BAD_TUPLE",LocationStack[LocationStack.Depth-4]); - if (ValueStack[ValueStack.Depth-3].stn != null) - parsertools.AddErrorFromResource("BAD_TUPLE",LocationStack[LocationStack.Depth-4]); - (ValueStack[ValueStack.Depth-5].stn as expression_list).expressions.Insert(0,ValueStack[ValueStack.Depth-7].ex); - if ((ValueStack[ValueStack.Depth-5].stn as expression_list).expressions.Count>7) - parsertools.AddErrorFromResource("TUPLE_ELEMENTS_COUNT_MUST_BE_LESSEQUAL_7",LocationStack[LocationStack.Depth-4]); - - if (parsertools.build_tree_for_formatter) - CurrentSemanticValue.ex = new tuple_node_for_formatter(ValueStack[ValueStack.Depth-5].stn as expression_list,CurrentLocationSpan); - else + var formal_pars = new formal_parameters(); + var idd = ValueStack[ValueStack.Depth-7].ex as ident; + if (idd==null) + parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",LocationStack[LocationStack.Depth-7]); + var lambda_inf_type = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); + var new_typed_pars = new typed_parameters(new ident_list(idd, idd.source_context), lambda_inf_type, parametr_kind.none, null, idd.source_context); + formal_pars.Add(new_typed_pars); + foreach (var id in (ValueStack[ValueStack.Depth-5].stn as expression_list).expressions) { - var dn = new dot_node(new dot_node(new ident("?System"),new ident("Tuple")),new ident("Create",CurrentLocationSpan)); - CurrentSemanticValue.ex = new method_call(dn,ValueStack[ValueStack.Depth-5].stn as expression_list,CurrentLocationSpan); - } - } - else // It is a lambda-expression. Expressions in parameters must be identifiers. - { - var pair = ValueStack[ValueStack.Depth-1].ob as pair_type_stlist; - - if (ValueStack[ValueStack.Depth-4].td is lambda_inferred_type) - { - var formal_pars = new formal_parameters(); - var idd = ValueStack[ValueStack.Depth-7].ex as ident; - if (idd==null) - parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",LocationStack[LocationStack.Depth-7]); - var lambda_inf_type = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); - var new_typed_pars = new typed_parameters(new ident_list(idd, idd.source_context), lambda_inf_type, parametr_kind.none, null, idd.source_context); + var idd1 = id as ident; + if (idd1==null) + parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",id.source_context); + + lambda_inf_type = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); + new_typed_pars = new typed_parameters(new ident_list(idd1, idd1.source_context), lambda_inf_type, parametr_kind.none, null, idd1.source_context); formal_pars.Add(new_typed_pars); - foreach (var id in (ValueStack[ValueStack.Depth-5].stn as expression_list).expressions) - { - var idd1 = id as ident; - if (idd1==null) - parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",id.source_context); - - lambda_inf_type = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); - new_typed_pars = new typed_parameters(new ident_list(idd1, idd1.source_context), lambda_inf_type, parametr_kind.none, null, idd1.source_context); - formal_pars.Add(new_typed_pars); - } - - if (ValueStack[ValueStack.Depth-3].stn != null) - for (int i = 0; i < (ValueStack[ValueStack.Depth-3].stn as formal_parameters).params_list.Count; i++) - formal_pars.Add((ValueStack[ValueStack.Depth-3].stn as formal_parameters).params_list[i]); - - formal_pars.source_context = LexLocation.MergeAll(LocationStack[LocationStack.Depth-7],LocationStack[LocationStack.Depth-6],LocationStack[LocationStack.Depth-5],LocationStack[LocationStack.Depth-4]); - CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formal_pars, pair.tn, pair.exprs, CurrentLocationSpan); } - else - { - var loc = LexLocation.MergeAll(LocationStack[LocationStack.Depth-7],LocationStack[LocationStack.Depth-6],LocationStack[LocationStack.Depth-5]); - var idd = ValueStack[ValueStack.Depth-7].ex as ident; - if (idd==null) - parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",LocationStack[LocationStack.Depth-7]); + + if (ValueStack[ValueStack.Depth-3].stn != null) + for (int i = 0; i < (ValueStack[ValueStack.Depth-3].stn as formal_parameters).params_list.Count; i++) + formal_pars.Add((ValueStack[ValueStack.Depth-3].stn as formal_parameters).params_list[i]); - var idList = new ident_list(idd, loc); + formal_pars.source_context = LexLocation.MergeAll(LocationStack[LocationStack.Depth-7],LocationStack[LocationStack.Depth-6],LocationStack[LocationStack.Depth-5],LocationStack[LocationStack.Depth-4]); + CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formal_pars, pair.tn, pair.exprs, CurrentLocationSpan); + } + else + { + var loc = LexLocation.MergeAll(LocationStack[LocationStack.Depth-7],LocationStack[LocationStack.Depth-6],LocationStack[LocationStack.Depth-5]); + var idd = ValueStack[ValueStack.Depth-7].ex as ident; + if (idd==null) + parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",LocationStack[LocationStack.Depth-7]); + + var idList = new ident_list(idd, loc); + + var iddlist = (ValueStack[ValueStack.Depth-5].stn as expression_list).expressions; + + for (int j = 0; j < iddlist.Count; j++) + { + var idd2 = iddlist[j] as ident; + if (idd2==null) + parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",idd2.source_context); + idList.idents.Add(idd2); + } + var parsType = ValueStack[ValueStack.Depth-4].td; + var formalPars = new formal_parameters(new typed_parameters(idList, parsType, parametr_kind.none, null, loc), LexLocation.MergeAll(LocationStack[LocationStack.Depth-7],LocationStack[LocationStack.Depth-6],LocationStack[LocationStack.Depth-5],LocationStack[LocationStack.Depth-4],LocationStack[LocationStack.Depth-3])); + + if (ValueStack[ValueStack.Depth-3].stn != null) + for (int i = 0; i < (ValueStack[ValueStack.Depth-3].stn as formal_parameters).params_list.Count; i++) + formalPars.Add((ValueStack[ValueStack.Depth-3].stn as formal_parameters).params_list[i]); - var iddlist = (ValueStack[ValueStack.Depth-5].stn as expression_list).expressions; - - for (int j = 0; j < iddlist.Count; j++) - { - var idd2 = iddlist[j] as ident; - if (idd2==null) - parsertools.AddErrorFromResource("ONE_TKIDENTIFIER",idd2.source_context); - idList.idents.Add(idd2); - } - var parsType = ValueStack[ValueStack.Depth-4].td; - var formalPars = new formal_parameters(new typed_parameters(idList, parsType, parametr_kind.none, null, loc), LexLocation.MergeAll(LocationStack[LocationStack.Depth-7],LocationStack[LocationStack.Depth-6],LocationStack[LocationStack.Depth-5],LocationStack[LocationStack.Depth-4],LocationStack[LocationStack.Depth-3])); - - if (ValueStack[ValueStack.Depth-3].stn != null) - for (int i = 0; i < (ValueStack[ValueStack.Depth-3].stn as formal_parameters).params_list.Count; i++) - formalPars.Add((ValueStack[ValueStack.Depth-3].stn as formal_parameters).params_list[i]); - - CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, pair.tn, pair.exprs, CurrentLocationSpan); - } - } + CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), formalPars, pair.tn, pair.exprs, CurrentLocationSpan); + } } break; - case 773: // func_decl_lambda -> expl_func_decl_lambda + case 774: // func_decl_lambda -> expl_func_decl_lambda { CurrentSemanticValue.ex = ValueStack[ValueStack.Depth-1].ex; } break; - case 774: // optional_full_lambda_fp_list -> /* empty */ + case 775: // optional_full_lambda_fp_list -> /* empty */ { CurrentSemanticValue.stn = null; } break; - case 775: // optional_full_lambda_fp_list -> tkSemiColon, full_lambda_fp_list + case 776: // optional_full_lambda_fp_list -> tkSemiColon, full_lambda_fp_list { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 776: // rem_lambda -> lambda_type_ref_noproctype, tkArrow, lambda_function_body + case 777: // rem_lambda -> lambda_type_ref_noproctype, tkArrow, lambda_function_body { CurrentSemanticValue.ob = new pair_type_stlist(ValueStack[ValueStack.Depth-3].td,ValueStack[ValueStack.Depth-1].stn as statement_list); } break; - case 777: // expl_func_decl_lambda -> tkFunction, lambda_type_ref, tkArrow, + case 778: // expl_func_decl_lambda -> tkFunction, lambda_type_ref, tkArrow, // lambda_function_body { CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), null, ValueStack[ValueStack.Depth-3].td, ValueStack[ValueStack.Depth-1].stn as statement_list, 1, CurrentLocationSpan); } break; - case 778: // expl_func_decl_lambda -> tkFunction, tkRoundOpen, tkRoundClose, lambda_type_ref, + case 779: // expl_func_decl_lambda -> tkFunction, tkRoundOpen, tkRoundClose, lambda_type_ref, // tkArrow, lambda_function_body { CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), null, ValueStack[ValueStack.Depth-3].td, ValueStack[ValueStack.Depth-1].stn as statement_list, 1, CurrentLocationSpan); } break; - case 779: // expl_func_decl_lambda -> tkFunction, tkRoundOpen, full_lambda_fp_list, + case 780: // expl_func_decl_lambda -> tkFunction, tkRoundOpen, full_lambda_fp_list, // tkRoundClose, lambda_type_ref, tkArrow, // lambda_function_body { CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), ValueStack[ValueStack.Depth-5].stn as formal_parameters, ValueStack[ValueStack.Depth-3].td, ValueStack[ValueStack.Depth-1].stn as statement_list, 1, CurrentLocationSpan); } break; - case 780: // expl_func_decl_lambda -> tkProcedure, tkArrow, lambda_procedure_body + case 781: // expl_func_decl_lambda -> tkProcedure, tkArrow, lambda_procedure_body { CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), null, null, ValueStack[ValueStack.Depth-1].stn as statement_list, 2, CurrentLocationSpan); } break; - case 781: // expl_func_decl_lambda -> tkProcedure, tkRoundOpen, tkRoundClose, tkArrow, + case 782: // expl_func_decl_lambda -> tkProcedure, tkRoundOpen, tkRoundClose, tkArrow, // lambda_procedure_body { CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), null, null, ValueStack[ValueStack.Depth-1].stn as statement_list, 2, CurrentLocationSpan); } break; - case 782: // expl_func_decl_lambda -> tkProcedure, tkRoundOpen, full_lambda_fp_list, + case 783: // expl_func_decl_lambda -> tkProcedure, tkRoundOpen, full_lambda_fp_list, // tkRoundClose, tkArrow, lambda_procedure_body { CurrentSemanticValue.ex = new function_lambda_definition(lambdaHelper.CreateLambdaName(), ValueStack[ValueStack.Depth-4].stn as formal_parameters, null, ValueStack[ValueStack.Depth-1].stn as statement_list, 2, CurrentLocationSpan); } break; - case 783: // full_lambda_fp_list -> lambda_simple_fp_sect + case 784: // full_lambda_fp_list -> lambda_simple_fp_sect { var typed_pars = ValueStack[ValueStack.Depth-1].stn as typed_parameters; if (typed_pars.vars_type is lambda_inferred_type) @@ -5708,147 +5686,147 @@ public partial class GPPGParser: ShiftReduceParser full_lambda_fp_list, tkSemiColon, lambda_simple_fp_sect + case 785: // full_lambda_fp_list -> full_lambda_fp_list, tkSemiColon, lambda_simple_fp_sect { CurrentSemanticValue.stn =(ValueStack[ValueStack.Depth-3].stn as formal_parameters).Add(ValueStack[ValueStack.Depth-1].stn as typed_parameters, CurrentLocationSpan); } break; - case 785: // lambda_simple_fp_sect -> ident_list, lambda_type_ref + case 786: // lambda_simple_fp_sect -> ident_list, lambda_type_ref { CurrentSemanticValue.stn = new typed_parameters(ValueStack[ValueStack.Depth-2].stn as ident_list, ValueStack[ValueStack.Depth-1].td, parametr_kind.none, null, CurrentLocationSpan); } break; - case 786: // lambda_type_ref -> /* empty */ + case 787: // lambda_type_ref -> /* empty */ { CurrentSemanticValue.td = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); } break; - case 787: // lambda_type_ref -> tkColon, fptype + case 788: // lambda_type_ref -> tkColon, fptype { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 788: // lambda_type_ref_noproctype -> /* empty */ + case 789: // lambda_type_ref_noproctype -> /* empty */ { CurrentSemanticValue.td = new lambda_inferred_type(new PascalABCCompiler.TreeRealization.lambda_any_type_node(), null); } break; - case 789: // lambda_type_ref_noproctype -> tkColon, fptype_noproctype + case 790: // lambda_type_ref_noproctype -> tkColon, fptype_noproctype { CurrentSemanticValue.td = ValueStack[ValueStack.Depth-1].td; } break; - case 790: // lambda_function_body -> expr_l1 + case 791: // lambda_function_body -> expr_l1 { CurrentSemanticValue.stn = NewLambdaBody(ValueStack[ValueStack.Depth-1].ex, CurrentLocationSpan); } break; - case 791: // lambda_function_body -> compound_stmt + case 792: // lambda_function_body -> compound_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 792: // lambda_function_body -> if_stmt + case 793: // lambda_function_body -> if_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 793: // lambda_function_body -> while_stmt + case 794: // lambda_function_body -> while_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 794: // lambda_function_body -> repeat_stmt + case 795: // lambda_function_body -> repeat_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 795: // lambda_function_body -> for_stmt + case 796: // lambda_function_body -> for_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 796: // lambda_function_body -> foreach_stmt + case 797: // lambda_function_body -> foreach_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 797: // lambda_function_body -> case_stmt + case 798: // lambda_function_body -> case_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 798: // lambda_function_body -> try_stmt + case 799: // lambda_function_body -> try_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 799: // lambda_function_body -> lock_stmt + case 800: // lambda_function_body -> lock_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 800: // lambda_function_body -> yield_stmt + case 801: // lambda_function_body -> yield_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 801: // lambda_procedure_body -> proc_call + case 802: // lambda_procedure_body -> proc_call { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 802: // lambda_procedure_body -> compound_stmt + case 803: // lambda_procedure_body -> compound_stmt { CurrentSemanticValue.stn = ValueStack[ValueStack.Depth-1].stn; } break; - case 803: // lambda_procedure_body -> if_stmt + case 804: // lambda_procedure_body -> if_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 804: // lambda_procedure_body -> while_stmt + case 805: // lambda_procedure_body -> while_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 805: // lambda_procedure_body -> repeat_stmt + case 806: // lambda_procedure_body -> repeat_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 806: // lambda_procedure_body -> for_stmt + case 807: // lambda_procedure_body -> for_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 807: // lambda_procedure_body -> foreach_stmt + case 808: // lambda_procedure_body -> foreach_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 808: // lambda_procedure_body -> case_stmt + case 809: // lambda_procedure_body -> case_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 809: // lambda_procedure_body -> try_stmt + case 810: // lambda_procedure_body -> try_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 810: // lambda_procedure_body -> lock_stmt + case 811: // lambda_procedure_body -> lock_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 811: // lambda_procedure_body -> yield_stmt + case 812: // lambda_procedure_body -> yield_stmt { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } break; - case 812: // lambda_procedure_body -> assignment + case 813: // lambda_procedure_body -> assignment { CurrentSemanticValue.stn = new statement_list(ValueStack[ValueStack.Depth-1].stn as statement, CurrentLocationSpan); } diff --git a/Parsers/PascalABCParserNewSaushkin/PABC.tags b/Parsers/PascalABCParserNewSaushkin/PABC.tags index 760bba25e..c69384e54 100644 --- a/Parsers/PascalABCParserNewSaushkin/PABC.tags +++ b/Parsers/PascalABCParserNewSaushkin/PABC.tags @@ -17,7 +17,6 @@ - @@ -28,18 +27,17 @@ - + - diff --git a/Parsers/PascalABCParserNewSaushkin/PABC.ymc b/Parsers/PascalABCParserNewSaushkin/PABC.ymc index b025afa15..29f95060c 100644 --- a/Parsers/PascalABCParserNewSaushkin/PABC.ymc +++ b/Parsers/PascalABCParserNewSaushkin/PABC.ymc @@ -4,9 +4,12 @@ lexGen=J:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\ yaccGen=J:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\gppg.exe lexGenOpt=/unicode yaccGenOpt=/gplex +useCustomScript script= -"J:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\gplex.exe" /unicode "D:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.lex" -"J:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\gppg.exe" /no-lines /gplex "D:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y" +"J:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\gplex.exe" /unicode "J:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.lex" + +"J:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\GPLex_GPPG\gppg.exe" /no-lines /gplex "J:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\ABCPascal.y" + "J:\PascalABC.NET\!PABC_Git\Parsers\PascalABCParserNewSaushkin\convert4.exe" @@ -141,6 +144,10 @@ script= + + + + diff --git a/PascalABCNET.axml b/PascalABCNET.axml index 75b45f82d..160c84409 100644 --- a/PascalABCNET.axml +++ b/PascalABCNET.axml @@ -837,7 +837,7 @@ - + \Compiler\Compiler.cs CurrentUnit.SyntaxTree = syntaxTreeConvertersController.Convert(CurrentUnit.SyntaxTree) as SyntaxTree.compilation_unit; diff --git a/ReleaseGenerators/PascalABCNET_version.nsh b/ReleaseGenerators/PascalABCNET_version.nsh index 6afc6fa93..0ec390ace 100644 --- a/ReleaseGenerators/PascalABCNET_version.nsh +++ b/ReleaseGenerators/PascalABCNET_version.nsh @@ -1 +1 @@ -!define VERSION '3.2.0.1352' +!define VERSION '3.2.0.1355' diff --git a/StandardSyntaxTreeConverter/StandOutExprWithLambdaInForeachSequenceConverter.cs b/StandardSyntaxTreeConverter/StandOutExprWithLambdaInForeachSequenceConverter.cs index 6f814ae47..b8acd68fc 100644 --- a/StandardSyntaxTreeConverter/StandOutExprWithLambdaInForeachSequenceConverter.cs +++ b/StandardSyntaxTreeConverter/StandOutExprWithLambdaInForeachSequenceConverter.cs @@ -3,7 +3,7 @@ using System.Collections.Generic; using System.Linq; using PascalABCCompiler.SyntaxTree; -public class StandOutExprWithLambdaInForeachSequenceVisitor : BaseEnterExitVisitor +public class StandOutExprWithLambdaInForeachSequenceVisitor : BaseChangeVisitor { public static StandOutExprWithLambdaInForeachSequenceVisitor New { @@ -20,25 +20,6 @@ public class StandOutExprWithLambdaInForeachSequenceVisitor : BaseEnterExitVisit return new ident("$GenContFE" + GenIdNum.ToString()); } - public void ReplaceStatement(statement from, IEnumerable to, Desc d = Desc.DirectDescendants) - { - foreach (var x in to) - x.Parent = from.Parent; - var sl = from.Parent as statement_list; - if (sl != null) - { - sl.ReplaceInList(from, to); - } - else - { - var l = new statement_list(); - l.AddMany(to); - l.source_context = from.source_context; - from.Parent.Replace(from, l, d); - } - } - - public override void visit(foreach_stmt fe) { if (fe.in_what.DescendantNodes().OfType().Count()>0) @@ -47,9 +28,7 @@ public class StandOutExprWithLambdaInForeachSequenceVisitor : BaseEnterExitVisit id.Parent = fe; var ass = new var_statement(id, fe.in_what, fe.in_what.source_context); fe.in_what = id; - var l = new List(); - l.Add(ass); - l.Add(fe); + var l = new List { ass,fe }; ReplaceStatement(fe, l); } diff --git a/SyntaxTree/SyntaxTree.csproj b/SyntaxTree/SyntaxTree.csproj index f74abb921..91058aa20 100644 --- a/SyntaxTree/SyntaxTree.csproj +++ b/SyntaxTree/SyntaxTree.csproj @@ -70,6 +70,7 @@ prompt AllRules.ruleset false + false ..\bin\ diff --git a/SyntaxTree/tree/BaseChangeVisitor.cs b/SyntaxTree/tree/BaseChangeVisitor.cs index dbaee1eb9..4b42995fc 100644 --- a/SyntaxTree/tree/BaseChangeVisitor.cs +++ b/SyntaxTree/tree/BaseChangeVisitor.cs @@ -13,13 +13,6 @@ namespace PascalABCCompiler.SyntaxTree { public override void DefaultVisit(syntax_tree_node n) { - // frninja 07/12/15 - // SSM - это - идиотский код, приводивший к двойному обходу визитором всех узлов - /*if (!_rootAdded) - { - _rootAdded = true; - ProcessNode(n); - }*/ - // Элементы списков - с конца в начало чтобы можно было эти элементы изменять по ходу (удалять/вставлять/заменять один несколькими) var Сount = n.subnodes_count; var СountWithoutListElements = n.subnodes_without_list_elements_count; @@ -36,7 +29,41 @@ namespace PascalABCCompiler.SyntaxTree var upper = UpperNode(); if (upper == null) throw new Exception("У корневого элемента нельзя получить UpperNode"); - upper.Replace(from, to); + upper.ReplaceDescendant(from, to); + } + + public void ReplaceStatement(statement from, IEnumerable to, Desc d = Desc.DirectDescendants) + { + foreach (var x in to) + x.Parent = from.Parent; + var sl = from.Parent as statement_list; + if (sl != null) + { + sl.ReplaceInList(from, to); + } + else + { + var l = new statement_list(); + l.AddMany(to); + l.source_context = from.source_context; + from.Parent.ReplaceDescendant(from, l, d); + } + } + + + public void ReplaceStatement(statement from, statement to) + { + to.Parent = from.Parent; + var stl = UpperNodeAs(); + stl.ReplaceInList(from, to); + } + + public void ReplaceStatement(statement from, IEnumerable to) + { + foreach (var x in to) + x.Parent = from.Parent; + var stl = UpperNodeAs(); + stl.ReplaceInList(from, to); } public T UpperNodeAs(int up = 1) where T : syntax_tree_node @@ -84,18 +111,6 @@ namespace PascalABCCompiler.SyntaxTree else l.Add(st); return l; } - - public void ReplaceStatement(statement from, statement to) - { - var stl = UpperNodeAs(); - stl.ReplaceInList(from, to); - } - - public void ReplaceStatement(statement from, IEnumerable to) - { - var stl = UpperNodeAs(); - stl.ReplaceInList(from, to); - } } } diff --git a/SyntaxTree/tree/TreeHelper.cs b/SyntaxTree/tree/TreeHelper.cs index 20c6a705e..fc19ca77f 100644 --- a/SyntaxTree/tree/TreeHelper.cs +++ b/SyntaxTree/tree/TreeHelper.cs @@ -52,17 +52,18 @@ namespace PascalABCCompiler.SyntaxTree return ind; } - /*public void Replace(syntax_tree_node from, syntax_tree_node to, Desc d = Desc.All) // есть риск, что типы не совпадут + /*public void ReplaceDescendant(syntax_tree_node from, syntax_tree_node to, Desc d = Desc.All) // есть риск, что типы не совпадут { var ind = FindIndex(from,d); this[ind] = to; }*/ - // Безопасная версия Replace - public void Replace(T from, T1 to, Desc d = Desc.All) where T: syntax_tree_node where T1 : T + // Безопасная версия Replace - не сработает если менять foreach_node на if_node. Плохо + public void ReplaceDescendant(T from, T1 to, Desc d = Desc.All) where T: syntax_tree_node where T1 : T { var ind = FindIndex(from,d); this[ind] = to; + to.Parent = from.Parent; } /// diff --git a/SyntaxTree/tree/WalkingVisitorNew.cs b/SyntaxTree/tree/WalkingVisitorNew.cs index 531d42160..dee9e8eea 100644 --- a/SyntaxTree/tree/WalkingVisitorNew.cs +++ b/SyntaxTree/tree/WalkingVisitorNew.cs @@ -44,6 +44,14 @@ namespace PascalABCCompiler.SyntaxTree for (var i = 0; i < count; i++) ProcessNode(n[i]); } + + // Можно перенести сюда поскольку замена 1 на 1 позволяет пользоваться текущим DefaultVisit + public void ReplaceByVisitor(syntax_tree_node from, syntax_tree_node to) + { + if (from.Parent == null) + throw new Exception("У корневого элемента нельзя получить Parent"); + from.Parent.ReplaceDescendant(from, to); + } } - + } \ No newline at end of file diff --git a/TestSuite/CompilationSamples/PABCSystem.pas b/TestSuite/CompilationSamples/PABCSystem.pas index 3ae68eb24..54aca3abf 100644 --- a/TestSuite/CompilationSamples/PABCSystem.pas +++ b/TestSuite/CompilationSamples/PABCSystem.pas @@ -1510,6 +1510,10 @@ procedure Sort(l: List; less: (T,T)->boolean); procedure Reverse(a: array of T); /// Изменяет порядок элементов на противоположный в диапазоне динамического массива длины length начиная с индекса index procedure Reverse(a: array of T; index,length: integer); +/// Перемешивает динамический массив случайным образом +procedure Shuffle(a: array of T); +/// Перемешивает список случайным образом +procedure Shuffle(l: List); // ----------------------------------------------------- //>> Подпрограммы для генерации последовательностей # Subroutines for sequence generation @@ -1617,7 +1621,7 @@ function ReadArrReal(const prompt: string; n: integer): array of real; function ReadArrString(const prompt: string; n: integer): array of string; // ----------------------------------------------------- -//>> Подпрограммы для генерации случайных матриц # Subroutines for matrix generation +//>> Подпрограммы для матриц # Subroutines for matrixes // ----------------------------------------------------- /// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями function MatrRandom(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 100): array [,] of integer; @@ -1629,6 +1633,8 @@ function MatrRandomReal(m: integer := 5; n: integer := 5; a: real := 0; b: real function MatrFill(m,n: integer; x: T): array [,] of T; /// Возвращает двумерный массив размера m x n, заполненный элементами x function MatrGen(m,n: integer; gen: (integer,integer)->T): array [,] of T; +/// Транспонирует двумерный массив +function Transpose(a: array [,] of T): array [,] of T; // ----------------------------------------------------- //>> Подпрограммы для создания кортежей # Subroutines for tuple generation @@ -7008,6 +7014,24 @@ begin System.Array.Reverse(a,index,length); end; +procedure Shuffle(a: array of T); +begin + var n := a.Length; + for var i:=0 to n-1 do + Swap(a[i],a[Random(n)]); +end; + +procedure Shuffle(l: List); +begin + var n := l.Count; + for var i:=0 to n-1 do + begin + var v := l[i]; + l[i] := l[Random(n)]; + l[Random(n)] := v; + end; +end; + // ----------------------------------------------------- // Char and String: implementation // ----------------------------------------------------- @@ -8759,6 +8783,16 @@ begin Result[i,j] := gen(i,j); end; +function Transpose(a: array [,] of T): array [,] of T; +begin + var m := a.RowCount; + var n := a.ColCount; + Result := new T[n,m]; + for var i:=0 to Result.RowCount-1 do + for var j:=0 to Result.ColCount-1 do + Result[i,j] := a[j,i] +end; + // ----------------------------------------------------- //>> Методы расширения типа array of T # Extension methods for array of T // ----------------------------------------------------- @@ -8772,7 +8806,7 @@ function Shuffle(Self: array of T): array of T; extensionmethod; begin var n := Self.Length; for var i:=0 to n-1 do - Swap(Self[i],Self[PABCSystem.Random(n)]); + Swap(Self[i],Self[Random(n)]); Result := Self; end; @@ -9271,16 +9305,16 @@ end; /// Предыдущий символ function Pred(Self: char): char; extensionmethod; begin - Result := PABCSystem.pred(Self); + Result := PABCSystem.Pred(Self); end; /// Следующий символ function Succ(Self: char): char; extensionmethod; begin - Result := PABCSystem.succ(Self); + Result := PABCSystem.Succ(Self); end; -/// Код символа +/// Код символа в кодировке Unicode function Code(Self: char): integer; extensionmethod; begin Result := word(Self); diff --git a/TreeConverter/TreeConversion/syntax_tree_visitor.cs b/TreeConverter/TreeConversion/syntax_tree_visitor.cs index eacbc7234..b024e083d 100644 --- a/TreeConverter/TreeConversion/syntax_tree_visitor.cs +++ b/TreeConverter/TreeConversion/syntax_tree_visitor.cs @@ -38,7 +38,7 @@ namespace PascalABCCompiler.TreeConverter } }*/ - public class syntax_tree_visitor : SyntaxTree.WalkingVisitorNew + public class syntax_tree_visitor : SyntaxTree.BaseChangeVisitor { public convertion_data_and_alghoritms convertion_data_and_alghoritms; @@ -16611,12 +16611,6 @@ namespace PascalABCCompiler.TreeConverter return new ident("$GenId" + GenIdNum.ToString()); } - public void ReplaceSTV(syntax_tree_node from, syntax_tree_node to) - { - from.Parent.Replace(from, to); - to.Parent = from.Parent; - } - public override void visit(SyntaxTree.foreach_stmt _foreach_stmt) { var lambdaSearcher = new LambdaSearcher(_foreach_stmt.in_what); @@ -16678,7 +16672,7 @@ namespace PascalABCCompiler.TreeConverter var fornode = new SyntaxTree.for_node(i, 0, high, newbody, for_cycle_type.to, null, null, true); var stl = new SyntaxTree.statement_list(vdarr, fornode); - ReplaceSTV(_foreach_stmt, stl); + ReplaceByVisitor(_foreach_stmt, stl); visit(stl); //visit(vdarr); diff --git a/VisualPascalABCNET/VisualPascalABCNET.csproj b/VisualPascalABCNET/VisualPascalABCNET.csproj index ed6291cfd..8270c1714 100644 --- a/VisualPascalABCNET/VisualPascalABCNET.csproj +++ b/VisualPascalABCNET/VisualPascalABCNET.csproj @@ -49,6 +49,7 @@ 4 AllRules.ruleset false + false PdbOnly diff --git a/bin/Lib/PABCRtl.dll b/bin/Lib/PABCRtl.dll index da55c30bc11fd0b6ff2455d5551794f42bdfe2b2..4297d733b397bf047bd54d7a91792ef865d83df6 100644 GIT binary patch delta 121039 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 Tn1`5*(UoM9`Uk$qR`ve@FZVt- delta 120261 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 diff --git a/bin/Lib/PABCSystem.pas b/bin/Lib/PABCSystem.pas index 3ae68eb24..54aca3abf 100644 --- a/bin/Lib/PABCSystem.pas +++ b/bin/Lib/PABCSystem.pas @@ -1510,6 +1510,10 @@ procedure Sort(l: List; less: (T,T)->boolean); procedure Reverse(a: array of T); /// Изменяет порядок элементов на противоположный в диапазоне динамического массива длины length начиная с индекса index procedure Reverse(a: array of T; index,length: integer); +/// Перемешивает динамический массив случайным образом +procedure Shuffle(a: array of T); +/// Перемешивает список случайным образом +procedure Shuffle(l: List); // ----------------------------------------------------- //>> Подпрограммы для генерации последовательностей # Subroutines for sequence generation @@ -1617,7 +1621,7 @@ function ReadArrReal(const prompt: string; n: integer): array of real; function ReadArrString(const prompt: string; n: integer): array of string; // ----------------------------------------------------- -//>> Подпрограммы для генерации случайных матриц # Subroutines for matrix generation +//>> Подпрограммы для матриц # Subroutines for matrixes // ----------------------------------------------------- /// Возвращает двумерный массив размера m x n, заполненный случайными целыми значениями function MatrRandom(m: integer := 5; n: integer := 5; a: integer := 0; b: integer := 100): array [,] of integer; @@ -1629,6 +1633,8 @@ function MatrRandomReal(m: integer := 5; n: integer := 5; a: real := 0; b: real function MatrFill(m,n: integer; x: T): array [,] of T; /// Возвращает двумерный массив размера m x n, заполненный элементами x function MatrGen(m,n: integer; gen: (integer,integer)->T): array [,] of T; +/// Транспонирует двумерный массив +function Transpose(a: array [,] of T): array [,] of T; // ----------------------------------------------------- //>> Подпрограммы для создания кортежей # Subroutines for tuple generation @@ -7008,6 +7014,24 @@ begin System.Array.Reverse(a,index,length); end; +procedure Shuffle(a: array of T); +begin + var n := a.Length; + for var i:=0 to n-1 do + Swap(a[i],a[Random(n)]); +end; + +procedure Shuffle(l: List); +begin + var n := l.Count; + for var i:=0 to n-1 do + begin + var v := l[i]; + l[i] := l[Random(n)]; + l[Random(n)] := v; + end; +end; + // ----------------------------------------------------- // Char and String: implementation // ----------------------------------------------------- @@ -8759,6 +8783,16 @@ begin Result[i,j] := gen(i,j); end; +function Transpose(a: array [,] of T): array [,] of T; +begin + var m := a.RowCount; + var n := a.ColCount; + Result := new T[n,m]; + for var i:=0 to Result.RowCount-1 do + for var j:=0 to Result.ColCount-1 do + Result[i,j] := a[j,i] +end; + // ----------------------------------------------------- //>> Методы расширения типа array of T # Extension methods for array of T // ----------------------------------------------------- @@ -8772,7 +8806,7 @@ function Shuffle(Self: array of T): array of T; extensionmethod; begin var n := Self.Length; for var i:=0 to n-1 do - Swap(Self[i],Self[PABCSystem.Random(n)]); + Swap(Self[i],Self[Random(n)]); Result := Self; end; @@ -9271,16 +9305,16 @@ end; /// Предыдущий символ function Pred(Self: char): char; extensionmethod; begin - Result := PABCSystem.pred(Self); + Result := PABCSystem.Pred(Self); end; /// Следующий символ function Succ(Self: char): char; extensionmethod; begin - Result := PABCSystem.succ(Self); + Result := PABCSystem.Succ(Self); end; -/// Код символа +/// Код символа в кодировке Unicode function Code(Self: char): integer; extensionmethod; begin Result := word(Self);