From af50fcaf60eb47f1d336982174cf254ca5384320 Mon Sep 17 00:00:00 2001 From: Markus Palme Date: Sat, 28 Oct 2006 10:32:23 +0000 Subject: [PATCH] removed sharpcoco binary because it's not used. removed sharpcoco source code because it doesn't match the version used. git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1977 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61 --- .../Src/Parser/Frames/OldSharpCoco.exe | Bin 81920 -> 0 bytes .../Src/Parser/Frames/Parser.frame.new | 55 - .../Src/Parser/Frames/Parser.frame.old | 50 - .../Project/Src/Parser/VBNet/Parser.cs | 6496 ----------------- .../NRefactory/Project/Src/Parser/gen.bat | 22 +- src/Tools/SharpCoco/bin/Debug/SharpCoco.exe | Bin 77824 -> 0 bytes src/Tools/SharpCoco/bin/Debug/SharpCoco.pdb | Bin 136704 -> 0 bytes src/Tools/SharpCoco/readme.txt | 14 - src/Tools/SharpCoco/src/AssemblyInfo.cs | 32 - src/Tools/SharpCoco/src/Coco.atg | 461 -- src/Tools/SharpCoco/src/Coco.cs | 97 - src/Tools/SharpCoco/src/DFA.cs | 952 --- src/Tools/SharpCoco/src/Parser.cs | 785 -- src/Tools/SharpCoco/src/Parser.frame | 140 - src/Tools/SharpCoco/src/ParserGen.cs | 432 -- src/Tools/SharpCoco/src/Scanner.cs | 358 - src/Tools/SharpCoco/src/Scanner.frame | 202 - src/Tools/SharpCoco/src/SharpCoco.csproj | 53 - src/Tools/SharpCoco/src/SharpCoco.csproj.user | 6 - src/Tools/SharpCoco/src/Tab.cs | 1082 --- src/Tools/SharpCoco/src/Trace.cs | 69 - 21 files changed, 2 insertions(+), 11304 deletions(-) delete mode 100644 src/Libraries/NRefactory/Project/Src/Parser/Frames/OldSharpCoco.exe delete mode 100644 src/Libraries/NRefactory/Project/Src/Parser/Frames/Parser.frame.new delete mode 100644 src/Libraries/NRefactory/Project/Src/Parser/Frames/Parser.frame.old delete mode 100644 src/Tools/SharpCoco/bin/Debug/SharpCoco.exe delete mode 100644 src/Tools/SharpCoco/bin/Debug/SharpCoco.pdb delete mode 100644 src/Tools/SharpCoco/readme.txt delete mode 100644 src/Tools/SharpCoco/src/AssemblyInfo.cs delete mode 100644 src/Tools/SharpCoco/src/Coco.atg delete mode 100644 src/Tools/SharpCoco/src/Coco.cs delete mode 100644 src/Tools/SharpCoco/src/DFA.cs delete mode 100644 src/Tools/SharpCoco/src/Parser.cs delete mode 100644 src/Tools/SharpCoco/src/Parser.frame delete mode 100644 src/Tools/SharpCoco/src/ParserGen.cs delete mode 100644 src/Tools/SharpCoco/src/Scanner.cs delete mode 100644 src/Tools/SharpCoco/src/Scanner.frame delete mode 100644 src/Tools/SharpCoco/src/SharpCoco.csproj delete mode 100644 src/Tools/SharpCoco/src/SharpCoco.csproj.user delete mode 100644 src/Tools/SharpCoco/src/Tab.cs delete mode 100644 src/Tools/SharpCoco/src/Trace.cs diff --git a/src/Libraries/NRefactory/Project/Src/Parser/Frames/OldSharpCoco.exe b/src/Libraries/NRefactory/Project/Src/Parser/Frames/OldSharpCoco.exe deleted file mode 100644 index d5a898b6e930ad1011cb1c0551ecb53ecbc4d38c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 81920 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 -/* - Parser.frame file for NRefactory. - */ -using System; -using System.Reflection; - --->namespace - - -internal class Parser : AbstractParser -{ --->constants - const bool T = true; - const bool x = false; - --->declarations - -/* --->pragmas -*/ - --->productions - public Parser(ILexer lexer) : base(lexer) - { - } - - public override void Parse() - { --->parseRoot - } - - private bool StartOf(int s) - { - return set[s, lexer.LookAhead.kind]; - } - - static bool[,] set = { --->initialization - }; - - protected override void SynErr(int line, int col, int errorNumber) - { - errors.count++; - string s; - switch (errorNumber) { --->errors - default: s = "error " + errorNumber; break; - } - this.Errors.Error(line, col, s); - } - -} // end Parser - -$$$ diff --git a/src/Libraries/NRefactory/Project/Src/Parser/Frames/Parser.frame.old b/src/Libraries/NRefactory/Project/Src/Parser/Frames/Parser.frame.old deleted file mode 100644 index 2cb1f273c9..0000000000 --- a/src/Libraries/NRefactory/Project/Src/Parser/Frames/Parser.frame.old +++ /dev/null @@ -1,50 +0,0 @@ -/* - Parser.frame file for NRefactory. - */ -using System; -using System.Reflection; - --->namespace - --->tokens - -partial class Parser : AbstractParser -{ --->constants - const bool T = true; - const bool x = false; - --->declarations - -/* --->pragmas -*/ - --->productions - - public override void Parse() - { --->parseRoot - } - - protected override void SynErr(int line, int col, int errorNumber) - { - string s; - switch (errorNumber) { --->errors - default: s = "error " + errorNumber; break; - } - this.Errors.Error(line, col, s); - } - - private bool StartOf(int s) - { - return set[s, lexer.LookAhead.kind]; - } - - static bool[,] set = { --->initialization - }; -} // end Parser - -$$$ diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs index d993bda87f..e69de29bb2 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs +++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Parser.cs @@ -1,6496 +0,0 @@ - -#line 1 "VBNET.ATG" -using System; -using System.Collections; -using System.Collections.Generic; -using System.Reflection; - -using ICSharpCode.NRefactory.Ast; -using ASTAttribute = ICSharpCode.NRefactory.Ast.Attribute; - -/* - Parser.frame file for NRefactory. - */ - - - -namespace ICSharpCode.NRefactory.Parser.VB { - - - -partial class Parser : AbstractParser -{ - const int maxT = 205; - - const bool T = true; - const bool x = false; - - -#line 12 "VBNET.ATG" - - -/* - -*/ - - void VBNET() { - -#line 230 "VBNET.ATG" - lexer.NextToken(); // get the first token - compilationUnit = new CompilationUnit(); - - while (la.kind == 1) { - lexer.NextToken(); - } - while (la.kind == 136) { - OptionStmt(); - } - while (la.kind == 108) { - ImportsStmt(); - } - while ( -#line 236 "VBNET.ATG" -IsGlobalAttrTarget()) { - GlobalAttributeSection(); - } - while (StartOf(1)) { - NamespaceMemberDecl(); - } - Expect(0); - } - - void OptionStmt() { - -#line 241 "VBNET.ATG" - INode node = null; bool val = true; - Expect(136); - -#line 242 "VBNET.ATG" - Location startPos = t.Location; - if (la.kind == 95) { - lexer.NextToken(); - if (la.kind == 134 || la.kind == 135) { - OptionValue( -#line 244 "VBNET.ATG" -ref val); - } - -#line 245 "VBNET.ATG" - node = new OptionDeclaration(OptionType.Explicit, val); - } else if (la.kind == 164) { - lexer.NextToken(); - if (la.kind == 134 || la.kind == 135) { - OptionValue( -#line 247 "VBNET.ATG" -ref val); - } - -#line 248 "VBNET.ATG" - node = new OptionDeclaration(OptionType.Strict, val); - } else if (la.kind == 70) { - lexer.NextToken(); - if (la.kind == 51) { - lexer.NextToken(); - -#line 250 "VBNET.ATG" - node = new OptionDeclaration(OptionType.CompareBinary, val); - } else if (la.kind == 169) { - lexer.NextToken(); - -#line 251 "VBNET.ATG" - node = new OptionDeclaration(OptionType.CompareText, val); - } else SynErr(206); - } else SynErr(207); - EndOfStmt(); - -#line 256 "VBNET.ATG" - if (node != null) { - node.StartLocation = startPos; - node.EndLocation = t.Location; - compilationUnit.AddChild(node); - } - - } - - void ImportsStmt() { - -#line 279 "VBNET.ATG" - List usings = new List(); - - Expect(108); - -#line 283 "VBNET.ATG" - Location startPos = t.Location; - Using u; - - ImportClause( -#line 286 "VBNET.ATG" -out u); - -#line 286 "VBNET.ATG" - if (u != null) { usings.Add(u); } - while (la.kind == 12) { - lexer.NextToken(); - ImportClause( -#line 288 "VBNET.ATG" -out u); - -#line 288 "VBNET.ATG" - if (u != null) { usings.Add(u); } - } - EndOfStmt(); - -#line 292 "VBNET.ATG" - UsingDeclaration usingDeclaration = new UsingDeclaration(usings); - usingDeclaration.StartLocation = startPos; - usingDeclaration.EndLocation = t.Location; - compilationUnit.AddChild(usingDeclaration); - - } - - void GlobalAttributeSection() { - -#line 2013 "VBNET.ATG" - Location startPos = t.Location; - Expect(27); - if (la.kind == 49) { - lexer.NextToken(); - } else if (la.kind == 121) { - lexer.NextToken(); - } else SynErr(208); - -#line 2015 "VBNET.ATG" - string attributeTarget = t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture); - List attributes = new List(); - ASTAttribute attribute; - - Expect(13); - Attribute( -#line 2019 "VBNET.ATG" -out attribute); - -#line 2019 "VBNET.ATG" - attributes.Add(attribute); - while ( -#line 2020 "VBNET.ATG" -NotFinalComma()) { - if (la.kind == 12) { - lexer.NextToken(); - if (la.kind == 49) { - lexer.NextToken(); - } else if (la.kind == 121) { - lexer.NextToken(); - } else SynErr(209); - Expect(13); - } - Attribute( -#line 2020 "VBNET.ATG" -out attribute); - -#line 2020 "VBNET.ATG" - attributes.Add(attribute); - } - if (la.kind == 12) { - lexer.NextToken(); - } - Expect(26); - EndOfStmt(); - -#line 2025 "VBNET.ATG" - AttributeSection section = new AttributeSection(attributeTarget, attributes); - section.StartLocation = startPos; - section.EndLocation = t.EndLocation; - compilationUnit.AddChild(section); - - } - - void NamespaceMemberDecl() { - -#line 321 "VBNET.ATG" - ModifierList m = new ModifierList(); - AttributeSection section; - List attributes = new List(); - string qualident; - - if (la.kind == 126) { - lexer.NextToken(); - -#line 328 "VBNET.ATG" - Location startPos = t.Location; - - Qualident( -#line 330 "VBNET.ATG" -out qualident); - -#line 332 "VBNET.ATG" - INode node = new NamespaceDeclaration(qualident); - node.StartLocation = startPos; - compilationUnit.AddChild(node); - compilationUnit.BlockStart(node); - - Expect(1); - NamespaceBody(); - -#line 340 "VBNET.ATG" - node.EndLocation = t.Location; - compilationUnit.BlockEnd(); - - } else if (StartOf(2)) { - while (la.kind == 27) { - AttributeSection( -#line 344 "VBNET.ATG" -out section); - -#line 344 "VBNET.ATG" - attributes.Add(section); - } - while (StartOf(3)) { - TypeModifier( -#line 345 "VBNET.ATG" -m); - } - NonModuleDeclaration( -#line 345 "VBNET.ATG" -m, attributes); - } else SynErr(210); - } - - void OptionValue( -#line 264 "VBNET.ATG" -ref bool val) { - if (la.kind == 135) { - lexer.NextToken(); - -#line 266 "VBNET.ATG" - val = true; - } else if (la.kind == 134) { - lexer.NextToken(); - -#line 268 "VBNET.ATG" - val = false; - } else SynErr(211); - } - - void EndOfStmt() { - if (la.kind == 1) { - lexer.NextToken(); - } else if (la.kind == 13) { - lexer.NextToken(); - if (la.kind == 1) { - lexer.NextToken(); - } - } else SynErr(212); - } - - void ImportClause( -#line 299 "VBNET.ATG" -out Using u) { - -#line 301 "VBNET.ATG" - string qualident = null; - TypeReference aliasedType = null; - u = null; - - Qualident( -#line 305 "VBNET.ATG" -out qualident); - if (la.kind == 11) { - lexer.NextToken(); - TypeName( -#line 306 "VBNET.ATG" -out aliasedType); - } - -#line 308 "VBNET.ATG" - if (qualident != null && qualident.Length > 0) { - if (aliasedType != null) { - u = new Using(qualident, aliasedType); - } else { - u = new Using(qualident); - } - } - - } - - void Qualident( -#line 2733 "VBNET.ATG" -out string qualident) { - -#line 2735 "VBNET.ATG" - string name; - qualidentBuilder.Length = 0; - - Identifier(); - -#line 2739 "VBNET.ATG" - qualidentBuilder.Append(t.val); - while ( -#line 2740 "VBNET.ATG" -DotAndIdentOrKw()) { - Expect(10); - IdentifierOrKeyword( -#line 2740 "VBNET.ATG" -out name); - -#line 2740 "VBNET.ATG" - qualidentBuilder.Append('.'); qualidentBuilder.Append(name); - } - -#line 2742 "VBNET.ATG" - qualident = qualidentBuilder.ToString(); - } - - void TypeName( -#line 1906 "VBNET.ATG" -out TypeReference typeref) { - -#line 1907 "VBNET.ATG" - ArrayList rank = null; - NonArrayTypeName( -#line 1909 "VBNET.ATG" -out typeref, false); - ArrayTypeModifiers( -#line 1910 "VBNET.ATG" -out rank); - -#line 1911 "VBNET.ATG" - if (rank != null && typeref != null) { - typeref.RankSpecifier = (int[])rank.ToArray(typeof(int)); - } - - } - - void NamespaceBody() { - while (StartOf(1)) { - NamespaceMemberDecl(); - } - Expect(88); - Expect(126); - Expect(1); - } - - void AttributeSection( -#line 2083 "VBNET.ATG" -out AttributeSection section) { - -#line 2085 "VBNET.ATG" - string attributeTarget = "";List attributes = new List(); - ASTAttribute attribute; - - - Expect(27); - -#line 2089 "VBNET.ATG" - Location startPos = t.Location; - if ( -#line 2090 "VBNET.ATG" -IsLocalAttrTarget()) { - if (la.kind == 93) { - lexer.NextToken(); - -#line 2091 "VBNET.ATG" - attributeTarget = "event"; - } else if (la.kind == 154) { - lexer.NextToken(); - -#line 2092 "VBNET.ATG" - attributeTarget = "return"; - } else { - Identifier(); - -#line 2095 "VBNET.ATG" - string val = t.val.ToLower(System.Globalization.CultureInfo.InvariantCulture); - if (val != "field" || val != "method" || - val != "module" || val != "param" || - val != "property" || val != "type") - Error("attribute target specifier (event, return, field," + - "method, module, param, property, or type) expected"); - attributeTarget = t.val; - - } - Expect(13); - } - Attribute( -#line 2105 "VBNET.ATG" -out attribute); - -#line 2105 "VBNET.ATG" - attributes.Add(attribute); - while ( -#line 2106 "VBNET.ATG" -NotFinalComma()) { - Expect(12); - Attribute( -#line 2106 "VBNET.ATG" -out attribute); - -#line 2106 "VBNET.ATG" - attributes.Add(attribute); - } - if (la.kind == 12) { - lexer.NextToken(); - } - Expect(26); - -#line 2110 "VBNET.ATG" - section = new AttributeSection(attributeTarget, attributes); - section.StartLocation = startPos; - section.EndLocation = t.EndLocation; - - } - - void TypeModifier( -#line 2809 "VBNET.ATG" -ModifierList m) { - switch (la.kind) { - case 148: { - lexer.NextToken(); - -#line 2810 "VBNET.ATG" - m.Add(Modifiers.Public, t.Location); - break; - } - case 147: { - lexer.NextToken(); - -#line 2811 "VBNET.ATG" - m.Add(Modifiers.Protected, t.Location); - break; - } - case 99: { - lexer.NextToken(); - -#line 2812 "VBNET.ATG" - m.Add(Modifiers.Internal, t.Location); - break; - } - case 145: { - lexer.NextToken(); - -#line 2813 "VBNET.ATG" - m.Add(Modifiers.Private, t.Location); - break; - } - case 158: { - lexer.NextToken(); - -#line 2814 "VBNET.ATG" - m.Add(Modifiers.Static, t.Location); - break; - } - case 157: { - lexer.NextToken(); - -#line 2815 "VBNET.ATG" - m.Add(Modifiers.New, t.Location); - break; - } - case 122: { - lexer.NextToken(); - -#line 2816 "VBNET.ATG" - m.Add(Modifiers.Abstract, t.Location); - break; - } - case 131: { - lexer.NextToken(); - -#line 2817 "VBNET.ATG" - m.Add(Modifiers.Sealed, t.Location); - break; - } - case 203: { - lexer.NextToken(); - -#line 2818 "VBNET.ATG" - m.Add(Modifiers.Partial, t.Location); - break; - } - default: SynErr(213); break; - } - } - - void NonModuleDeclaration( -#line 404 "VBNET.ATG" -ModifierList m, List attributes) { - -#line 406 "VBNET.ATG" - TypeReference typeRef = null; - List baseInterfaces = null; - - switch (la.kind) { - case 67: { - -#line 409 "VBNET.ATG" - m.Check(Modifiers.Classes); - lexer.NextToken(); - -#line 412 "VBNET.ATG" - TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes); - newType.StartLocation = t.Location; - compilationUnit.AddChild(newType); - compilationUnit.BlockStart(newType); - - newType.Type = ClassType.Class; - - Identifier(); - -#line 419 "VBNET.ATG" - newType.Name = t.val; - TypeParameterList( -#line 420 "VBNET.ATG" -newType.Templates); - EndOfStmt(); - -#line 422 "VBNET.ATG" - newType.BodyStartLocation = t.Location; - if (la.kind == 110) { - ClassBaseType( -#line 423 "VBNET.ATG" -out typeRef); - -#line 423 "VBNET.ATG" - newType.BaseTypes.Add(typeRef); - } - while (la.kind == 107) { - TypeImplementsClause( -#line 424 "VBNET.ATG" -out baseInterfaces); - -#line 424 "VBNET.ATG" - newType.BaseTypes.AddRange(baseInterfaces); - } - ClassBody( -#line 425 "VBNET.ATG" -newType); - -#line 427 "VBNET.ATG" - compilationUnit.BlockEnd(); - - break; - } - case 121: { - lexer.NextToken(); - -#line 431 "VBNET.ATG" - m.Check(Modifiers.VBModules); - TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes); - compilationUnit.AddChild(newType); - compilationUnit.BlockStart(newType); - newType.StartLocation = m.GetDeclarationLocation(t.Location); - newType.Type = ClassType.Module; - - Identifier(); - -#line 438 "VBNET.ATG" - newType.Name = t.val; - Expect(1); - -#line 440 "VBNET.ATG" - newType.BodyStartLocation = t.Location; - ModuleBody( -#line 441 "VBNET.ATG" -newType); - -#line 443 "VBNET.ATG" - compilationUnit.BlockEnd(); - - break; - } - case 166: { - lexer.NextToken(); - -#line 447 "VBNET.ATG" - m.Check(Modifiers.VBStructures); - TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes); - compilationUnit.AddChild(newType); - compilationUnit.BlockStart(newType); - newType.StartLocation = m.GetDeclarationLocation(t.Location); - newType.Type = ClassType.Struct; - - Identifier(); - -#line 454 "VBNET.ATG" - newType.Name = t.val; - TypeParameterList( -#line 455 "VBNET.ATG" -newType.Templates); - Expect(1); - -#line 457 "VBNET.ATG" - newType.BodyStartLocation = t.Location; - while (la.kind == 107) { - TypeImplementsClause( -#line 458 "VBNET.ATG" -out baseInterfaces); - -#line 458 "VBNET.ATG" - newType.BaseTypes.AddRange(baseInterfaces); - } - StructureBody( -#line 459 "VBNET.ATG" -newType); - -#line 461 "VBNET.ATG" - compilationUnit.BlockEnd(); - - break; - } - case 90: { - lexer.NextToken(); - -#line 466 "VBNET.ATG" - m.Check(Modifiers.VBEnums); - TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes); - newType.StartLocation = m.GetDeclarationLocation(t.Location); - compilationUnit.AddChild(newType); - compilationUnit.BlockStart(newType); - - newType.Type = ClassType.Enum; - - Identifier(); - -#line 474 "VBNET.ATG" - newType.Name = t.val; - if (la.kind == 48) { - lexer.NextToken(); - NonArrayTypeName( -#line 475 "VBNET.ATG" -out typeRef, false); - -#line 475 "VBNET.ATG" - newType.BaseTypes.Add(typeRef); - } - Expect(1); - -#line 477 "VBNET.ATG" - newType.BodyStartLocation = t.Location; - EnumBody( -#line 478 "VBNET.ATG" -newType); - -#line 480 "VBNET.ATG" - compilationUnit.BlockEnd(); - - break; - } - case 112: { - lexer.NextToken(); - -#line 485 "VBNET.ATG" - m.Check(Modifiers.VBInterfacs); - TypeDeclaration newType = new TypeDeclaration(m.Modifier, attributes); - newType.StartLocation = m.GetDeclarationLocation(t.Location); - compilationUnit.AddChild(newType); - compilationUnit.BlockStart(newType); - newType.Type = ClassType.Interface; - - Identifier(); - -#line 492 "VBNET.ATG" - newType.Name = t.val; - TypeParameterList( -#line 493 "VBNET.ATG" -newType.Templates); - EndOfStmt(); - -#line 495 "VBNET.ATG" - newType.BodyStartLocation = t.Location; - while (la.kind == 110) { - InterfaceBase( -#line 496 "VBNET.ATG" -out baseInterfaces); - -#line 496 "VBNET.ATG" - newType.BaseTypes.AddRange(baseInterfaces); - } - InterfaceBody( -#line 497 "VBNET.ATG" -newType); - -#line 499 "VBNET.ATG" - compilationUnit.BlockEnd(); - - break; - } - case 80: { - lexer.NextToken(); - -#line 504 "VBNET.ATG" - m.Check(Modifiers.VBDelegates); - DelegateDeclaration delegateDeclr = new DelegateDeclaration(m.Modifier, attributes); - delegateDeclr.ReturnType = new TypeReference("", "System.Void"); - delegateDeclr.StartLocation = m.GetDeclarationLocation(t.Location); - List p = new List(); - - if (la.kind == 167) { - lexer.NextToken(); - Identifier(); - -#line 511 "VBNET.ATG" - delegateDeclr.Name = t.val; - TypeParameterList( -#line 512 "VBNET.ATG" -delegateDeclr.Templates); - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 513 "VBNET.ATG" -p); - } - Expect(25); - -#line 513 "VBNET.ATG" - delegateDeclr.Parameters = p; - } - } else if (la.kind == 100) { - lexer.NextToken(); - Identifier(); - -#line 515 "VBNET.ATG" - delegateDeclr.Name = t.val; - TypeParameterList( -#line 516 "VBNET.ATG" -delegateDeclr.Templates); - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 517 "VBNET.ATG" -p); - } - Expect(25); - -#line 517 "VBNET.ATG" - delegateDeclr.Parameters = p; - } - if (la.kind == 48) { - lexer.NextToken(); - -#line 518 "VBNET.ATG" - TypeReference type; - TypeName( -#line 518 "VBNET.ATG" -out type); - -#line 518 "VBNET.ATG" - delegateDeclr.ReturnType = type; - } - } else SynErr(214); - -#line 520 "VBNET.ATG" - delegateDeclr.EndLocation = t.EndLocation; - Expect(1); - -#line 523 "VBNET.ATG" - compilationUnit.AddChild(delegateDeclr); - - break; - } - default: SynErr(215); break; - } - } - - void TypeParameterList( -#line 349 "VBNET.ATG" -List templates) { - -#line 351 "VBNET.ATG" - TemplateDefinition template; - - if ( -#line 354 "VBNET.ATG" -la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) { - lexer.NextToken(); - Expect(200); - TypeParameter( -#line 355 "VBNET.ATG" -out template); - -#line 357 "VBNET.ATG" - if (template != null) templates.Add(template); - - while (la.kind == 12) { - lexer.NextToken(); - TypeParameter( -#line 360 "VBNET.ATG" -out template); - -#line 362 "VBNET.ATG" - if (template != null) templates.Add(template); - - } - Expect(25); - } - } - - void TypeParameter( -#line 370 "VBNET.ATG" -out TemplateDefinition template) { - Identifier(); - -#line 372 "VBNET.ATG" - template = new TemplateDefinition(t.val, null); - if (la.kind == 48) { - TypeParameterConstraints( -#line 373 "VBNET.ATG" -template); - } - } - - void Identifier() { - switch (la.kind) { - case 2: { - lexer.NextToken(); - break; - } - case 169: { - lexer.NextToken(); - break; - } - case 51: { - lexer.NextToken(); - break; - } - case 70: { - lexer.NextToken(); - break; - } - case 204: { - lexer.NextToken(); - break; - } - case 49: { - lexer.NextToken(); - break; - } - case 47: { - lexer.NextToken(); - break; - } - case 50: { - lexer.NextToken(); - break; - } - case 144: { - lexer.NextToken(); - break; - } - case 176: { - lexer.NextToken(); - break; - } - case 177: { - lexer.NextToken(); - break; - } - default: SynErr(216); break; - } - } - - void TypeParameterConstraints( -#line 377 "VBNET.ATG" -TemplateDefinition template) { - -#line 379 "VBNET.ATG" - TypeReference constraint; - - Expect(48); - if (la.kind == 22) { - lexer.NextToken(); - TypeParameterConstraint( -#line 385 "VBNET.ATG" -out constraint); - -#line 385 "VBNET.ATG" - if (constraint != null) { template.Bases.Add(constraint); } - while (la.kind == 12) { - lexer.NextToken(); - TypeParameterConstraint( -#line 388 "VBNET.ATG" -out constraint); - -#line 388 "VBNET.ATG" - if (constraint != null) { template.Bases.Add(constraint); } - } - Expect(23); - } else if (StartOf(5)) { - TypeParameterConstraint( -#line 391 "VBNET.ATG" -out constraint); - -#line 391 "VBNET.ATG" - if (constraint != null) { template.Bases.Add(constraint); } - } else SynErr(217); - } - - void TypeParameterConstraint( -#line 395 "VBNET.ATG" -out TypeReference constraint) { - -#line 396 "VBNET.ATG" - constraint = null; - if (la.kind == 67) { - lexer.NextToken(); - -#line 397 "VBNET.ATG" - constraint = TypeReference.ClassConstraint; - } else if (la.kind == 166) { - lexer.NextToken(); - -#line 398 "VBNET.ATG" - constraint = TypeReference.StructConstraint; - } else if (la.kind == 127) { - lexer.NextToken(); - -#line 399 "VBNET.ATG" - constraint = TypeReference.NewConstraint; - } else if (StartOf(6)) { - TypeName( -#line 400 "VBNET.ATG" -out constraint); - } else SynErr(218); - } - - void ClassBaseType( -#line 700 "VBNET.ATG" -out TypeReference typeRef) { - -#line 702 "VBNET.ATG" - typeRef = null; - - Expect(110); - TypeName( -#line 705 "VBNET.ATG" -out typeRef); - EndOfStmt(); - } - - void TypeImplementsClause( -#line 1478 "VBNET.ATG" -out List baseInterfaces) { - -#line 1480 "VBNET.ATG" - baseInterfaces = new List(); - TypeReference type = null; - - Expect(107); - TypeName( -#line 1483 "VBNET.ATG" -out type); - -#line 1485 "VBNET.ATG" - baseInterfaces.Add(type); - - while (la.kind == 12) { - lexer.NextToken(); - TypeName( -#line 1488 "VBNET.ATG" -out type); - -#line 1489 "VBNET.ATG" - baseInterfaces.Add(type); - } - EndOfStmt(); - } - - void ClassBody( -#line 533 "VBNET.ATG" -TypeDeclaration newType) { - -#line 534 "VBNET.ATG" - AttributeSection section; - while (StartOf(7)) { - -#line 536 "VBNET.ATG" - List attributes = new List(); - ModifierList m = new ModifierList(); - - while (la.kind == 27) { - AttributeSection( -#line 539 "VBNET.ATG" -out section); - -#line 539 "VBNET.ATG" - attributes.Add(section); - } - while (StartOf(8)) { - MemberModifier( -#line 540 "VBNET.ATG" -m); - } - ClassMemberDecl( -#line 541 "VBNET.ATG" -m, attributes); - } - Expect(88); - Expect(67); - -#line 543 "VBNET.ATG" - newType.EndLocation = t.EndLocation; - Expect(1); - } - - void ModuleBody( -#line 562 "VBNET.ATG" -TypeDeclaration newType) { - -#line 563 "VBNET.ATG" - AttributeSection section; - while (StartOf(7)) { - -#line 565 "VBNET.ATG" - List attributes = new List(); - ModifierList m = new ModifierList(); - - while (la.kind == 27) { - AttributeSection( -#line 568 "VBNET.ATG" -out section); - -#line 568 "VBNET.ATG" - attributes.Add(section); - } - while (StartOf(8)) { - MemberModifier( -#line 569 "VBNET.ATG" -m); - } - ClassMemberDecl( -#line 570 "VBNET.ATG" -m, attributes); - } - Expect(88); - Expect(121); - -#line 572 "VBNET.ATG" - newType.EndLocation = t.EndLocation; - Expect(1); - } - - void StructureBody( -#line 547 "VBNET.ATG" -TypeDeclaration newType) { - -#line 548 "VBNET.ATG" - AttributeSection section; - while (StartOf(7)) { - -#line 550 "VBNET.ATG" - List attributes = new List(); - ModifierList m = new ModifierList(); - - while (la.kind == 27) { - AttributeSection( -#line 553 "VBNET.ATG" -out section); - -#line 553 "VBNET.ATG" - attributes.Add(section); - } - while (StartOf(8)) { - MemberModifier( -#line 554 "VBNET.ATG" -m); - } - StructureMemberDecl( -#line 555 "VBNET.ATG" -m, attributes); - } - Expect(88); - Expect(166); - -#line 557 "VBNET.ATG" - newType.EndLocation = t.EndLocation; - Expect(1); - } - - void NonArrayTypeName( -#line 1929 "VBNET.ATG" -out TypeReference typeref, bool canBeUnbound) { - -#line 1931 "VBNET.ATG" - string name; - typeref = null; - bool isGlobal = false; - - if (StartOf(9)) { - if (la.kind == 198) { - lexer.NextToken(); - Expect(10); - -#line 1936 "VBNET.ATG" - isGlobal = true; - } - QualIdentAndTypeArguments( -#line 1937 "VBNET.ATG" -out typeref, canBeUnbound); - -#line 1938 "VBNET.ATG" - typeref.IsGlobal = isGlobal; - while (la.kind == 10) { - lexer.NextToken(); - -#line 1939 "VBNET.ATG" - TypeReference nestedTypeRef; - QualIdentAndTypeArguments( -#line 1940 "VBNET.ATG" -out nestedTypeRef, canBeUnbound); - -#line 1941 "VBNET.ATG" - typeref = new InnerClassTypeReference(typeref, nestedTypeRef.Type, nestedTypeRef.GenericTypes); - } - } else if (la.kind == 133) { - lexer.NextToken(); - -#line 1944 "VBNET.ATG" - typeref = new TypeReference("System.Object"); - } else if (StartOf(10)) { - PrimitiveTypeName( -#line 1945 "VBNET.ATG" -out name); - -#line 1945 "VBNET.ATG" - typeref = new TypeReference(name); - } else SynErr(219); - } - - void EnumBody( -#line 576 "VBNET.ATG" -TypeDeclaration newType) { - -#line 577 "VBNET.ATG" - FieldDeclaration f; - while (StartOf(11)) { - EnumMemberDecl( -#line 579 "VBNET.ATG" -out f); - -#line 579 "VBNET.ATG" - compilationUnit.AddChild(f); - } - Expect(88); - Expect(90); - -#line 581 "VBNET.ATG" - newType.EndLocation = t.EndLocation; - Expect(1); - } - - void InterfaceBase( -#line 1463 "VBNET.ATG" -out List bases) { - -#line 1465 "VBNET.ATG" - TypeReference type; - bases = new List(); - - Expect(110); - TypeName( -#line 1469 "VBNET.ATG" -out type); - -#line 1469 "VBNET.ATG" - bases.Add(type); - while (la.kind == 12) { - lexer.NextToken(); - TypeName( -#line 1472 "VBNET.ATG" -out type); - -#line 1472 "VBNET.ATG" - bases.Add(type); - } - Expect(1); - } - - void InterfaceBody( -#line 585 "VBNET.ATG" -TypeDeclaration newType) { - while (StartOf(12)) { - InterfaceMemberDecl(); - } - Expect(88); - Expect(112); - -#line 587 "VBNET.ATG" - newType.EndLocation = t.EndLocation; - Expect(1); - } - - void FormalParameterList( -#line 2117 "VBNET.ATG" -List parameter) { - -#line 2119 "VBNET.ATG" - ParameterDeclarationExpression p; - AttributeSection section; - List attributes = new List(); - - while (la.kind == 27) { - AttributeSection( -#line 2123 "VBNET.ATG" -out section); - -#line 2123 "VBNET.ATG" - attributes.Add(section); - } - FormalParameter( -#line 2125 "VBNET.ATG" -out p); - -#line 2127 "VBNET.ATG" - bool paramsFound = false; - p.Attributes = attributes; - parameter.Add(p); - - while (la.kind == 12) { - lexer.NextToken(); - -#line 2132 "VBNET.ATG" - if (paramsFound) Error("params array must be at end of parameter list"); - while (la.kind == 27) { - AttributeSection( -#line 2133 "VBNET.ATG" -out section); - -#line 2133 "VBNET.ATG" - attributes.Add(section); - } - FormalParameter( -#line 2135 "VBNET.ATG" -out p); - -#line 2135 "VBNET.ATG" - p.Attributes = attributes; parameter.Add(p); - } - } - - void MemberModifier( -#line 2821 "VBNET.ATG" -ModifierList m) { - switch (la.kind) { - case 122: { - lexer.NextToken(); - -#line 2822 "VBNET.ATG" - m.Add(Modifiers.Abstract, t.Location); - break; - } - case 79: { - lexer.NextToken(); - -#line 2823 "VBNET.ATG" - m.Add(Modifiers.Default, t.Location); - break; - } - case 99: { - lexer.NextToken(); - -#line 2824 "VBNET.ATG" - m.Add(Modifiers.Internal, t.Location); - break; - } - case 157: { - lexer.NextToken(); - -#line 2825 "VBNET.ATG" - m.Add(Modifiers.New, t.Location); - break; - } - case 142: { - lexer.NextToken(); - -#line 2826 "VBNET.ATG" - m.Add(Modifiers.Override, t.Location); - break; - } - case 123: { - lexer.NextToken(); - -#line 2827 "VBNET.ATG" - m.Add(Modifiers.Abstract, t.Location); - break; - } - case 145: { - lexer.NextToken(); - -#line 2828 "VBNET.ATG" - m.Add(Modifiers.Private, t.Location); - break; - } - case 147: { - lexer.NextToken(); - -#line 2829 "VBNET.ATG" - m.Add(Modifiers.Protected, t.Location); - break; - } - case 148: { - lexer.NextToken(); - -#line 2830 "VBNET.ATG" - m.Add(Modifiers.Public, t.Location); - break; - } - case 131: { - lexer.NextToken(); - -#line 2831 "VBNET.ATG" - m.Add(Modifiers.Sealed, t.Location); - break; - } - case 132: { - lexer.NextToken(); - -#line 2832 "VBNET.ATG" - m.Add(Modifiers.Sealed, t.Location); - break; - } - case 158: { - lexer.NextToken(); - -#line 2833 "VBNET.ATG" - m.Add(Modifiers.Static, t.Location); - break; - } - case 141: { - lexer.NextToken(); - -#line 2834 "VBNET.ATG" - m.Add(Modifiers.Virtual, t.Location); - break; - } - case 140: { - lexer.NextToken(); - -#line 2835 "VBNET.ATG" - m.Add(Modifiers.Overloads, t.Location); - break; - } - case 150: { - lexer.NextToken(); - -#line 2836 "VBNET.ATG" - m.Add(Modifiers.ReadOnly, t.Location); - break; - } - case 184: { - lexer.NextToken(); - -#line 2837 "VBNET.ATG" - m.Add(Modifiers.WriteOnly, t.Location); - break; - } - case 183: { - lexer.NextToken(); - -#line 2838 "VBNET.ATG" - m.Add(Modifiers.WithEvents, t.Location); - break; - } - case 81: { - lexer.NextToken(); - -#line 2839 "VBNET.ATG" - m.Add(Modifiers.Dim, t.Location); - break; - } - default: SynErr(220); break; - } - } - - void ClassMemberDecl( -#line 696 "VBNET.ATG" -ModifierList m, List attributes) { - StructureMemberDecl( -#line 697 "VBNET.ATG" -m, attributes); - } - - void StructureMemberDecl( -#line 710 "VBNET.ATG" -ModifierList m, List attributes) { - -#line 712 "VBNET.ATG" - TypeReference type = null; - List p = new List(); - Statement stmt = null; - List variableDeclarators = new List(); - List templates = new List(); - - switch (la.kind) { - case 67: case 80: case 90: case 112: case 121: case 166: { - NonModuleDeclaration( -#line 719 "VBNET.ATG" -m, attributes); - break; - } - case 167: { - lexer.NextToken(); - -#line 723 "VBNET.ATG" - Location startPos = t.Location; - - if (StartOf(13)) { - -#line 727 "VBNET.ATG" - string name = String.Empty; - MethodDeclaration methodDeclaration; List handlesClause = null; - List implementsClause = null; - - Identifier(); - -#line 733 "VBNET.ATG" - name = t.val; - m.Check(Modifiers.VBMethods); - - TypeParameterList( -#line 736 "VBNET.ATG" -templates); - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 737 "VBNET.ATG" -p); - } - Expect(25); - } - if (la.kind == 105 || la.kind == 107) { - if (la.kind == 107) { - ImplementsClause( -#line 740 "VBNET.ATG" -out implementsClause); - } else { - HandlesClause( -#line 742 "VBNET.ATG" -out handlesClause); - } - } - -#line 745 "VBNET.ATG" - Location endLocation = t.EndLocation; - Expect(1); - if ( -#line 749 "VBNET.ATG" -IsMustOverride(m)) { - -#line 751 "VBNET.ATG" - methodDeclaration = new MethodDeclaration(name, m.Modifier, null, p, attributes); - methodDeclaration.StartLocation = m.GetDeclarationLocation(startPos); - methodDeclaration.EndLocation = endLocation; - methodDeclaration.TypeReference = new TypeReference("", "System.Void"); - - methodDeclaration.Templates = templates; - methodDeclaration.HandlesClause = handlesClause; - methodDeclaration.InterfaceImplementations = implementsClause; - - compilationUnit.AddChild(methodDeclaration); - - } else if (StartOf(14)) { - -#line 764 "VBNET.ATG" - methodDeclaration = new MethodDeclaration(name, m.Modifier, null, p, attributes); - methodDeclaration.StartLocation = m.GetDeclarationLocation(startPos); - methodDeclaration.EndLocation = endLocation; - methodDeclaration.TypeReference = new TypeReference("", "System.Void"); - - methodDeclaration.Templates = templates; - methodDeclaration.HandlesClause = handlesClause; - methodDeclaration.InterfaceImplementations = implementsClause; - - compilationUnit.AddChild(methodDeclaration); - - -#line 776 "VBNET.ATG" - if (ParseMethodBodies) { - Block( -#line 777 "VBNET.ATG" -out stmt); - Expect(88); - Expect(167); - -#line 779 "VBNET.ATG" - } else { - // don't parse method body - lexer.SkipCurrentBlock(Tokens.Sub); stmt = new BlockStatement(); - } - - -#line 785 "VBNET.ATG" - methodDeclaration.Body = (BlockStatement)stmt; - -#line 786 "VBNET.ATG" - methodDeclaration.Body.EndLocation = t.EndLocation; - Expect(1); - } else SynErr(221); - } else if (la.kind == 127) { - lexer.NextToken(); - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 789 "VBNET.ATG" -p); - } - Expect(25); - } - -#line 790 "VBNET.ATG" - m.Check(Modifiers.Constructors); - -#line 791 "VBNET.ATG" - Location constructorEndLocation = t.EndLocation; - Expect(1); - -#line 794 "VBNET.ATG" - if (ParseMethodBodies) { - Block( -#line 795 "VBNET.ATG" -out stmt); - Expect(88); - Expect(167); - -#line 797 "VBNET.ATG" - } else { - // don't parse method body - lexer.SkipCurrentBlock(Tokens.Sub); stmt = new BlockStatement(); - } - - -#line 803 "VBNET.ATG" - Location endLocation = t.EndLocation; - Expect(1); - -#line 805 "VBNET.ATG" - ConstructorDeclaration cd = new ConstructorDeclaration("New", m.Modifier, p, attributes); - cd.StartLocation = m.GetDeclarationLocation(startPos); - cd.EndLocation = constructorEndLocation; - cd.Body = (BlockStatement)stmt; - cd.Body.EndLocation = endLocation; - compilationUnit.AddChild(cd); - - } else SynErr(222); - break; - } - case 100: { - lexer.NextToken(); - -#line 817 "VBNET.ATG" - m.Check(Modifiers.VBMethods); - string name = String.Empty; - Location startPos = t.Location; - MethodDeclaration methodDeclaration;List handlesClause = null; - List implementsClause = null; - AttributeSection returnTypeAttributeSection = null; - - Identifier(); - -#line 824 "VBNET.ATG" - name = t.val; - TypeParameterList( -#line 825 "VBNET.ATG" -templates); - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 826 "VBNET.ATG" -p); - } - Expect(25); - } - if (la.kind == 48) { - lexer.NextToken(); - while (la.kind == 27) { - AttributeSection( -#line 827 "VBNET.ATG" -out returnTypeAttributeSection); - } - TypeName( -#line 827 "VBNET.ATG" -out type); - } - -#line 829 "VBNET.ATG" - if(type == null) { - type = new TypeReference("System.Object"); - } - - if (la.kind == 105 || la.kind == 107) { - if (la.kind == 107) { - ImplementsClause( -#line 835 "VBNET.ATG" -out implementsClause); - } else { - HandlesClause( -#line 837 "VBNET.ATG" -out handlesClause); - } - } - Expect(1); - if ( -#line 843 "VBNET.ATG" -IsMustOverride(m)) { - -#line 845 "VBNET.ATG" - methodDeclaration = new MethodDeclaration(name, m.Modifier, type, p, attributes); - methodDeclaration.StartLocation = m.GetDeclarationLocation(startPos); - methodDeclaration.EndLocation = t.EndLocation; - - methodDeclaration.HandlesClause = handlesClause; - methodDeclaration.Templates = templates; - methodDeclaration.InterfaceImplementations = implementsClause; - if (returnTypeAttributeSection != null) { - returnTypeAttributeSection.AttributeTarget = "return"; - methodDeclaration.Attributes.Add(returnTypeAttributeSection); - } - compilationUnit.AddChild(methodDeclaration); - - } else if (StartOf(14)) { - -#line 860 "VBNET.ATG" - methodDeclaration = new MethodDeclaration(name, m.Modifier, type, p, attributes); - methodDeclaration.StartLocation = m.GetDeclarationLocation(startPos); - methodDeclaration.EndLocation = t.EndLocation; - - methodDeclaration.Templates = templates; - methodDeclaration.HandlesClause = handlesClause; - methodDeclaration.InterfaceImplementations = implementsClause; - if (returnTypeAttributeSection != null) { - returnTypeAttributeSection.AttributeTarget = "return"; - methodDeclaration.Attributes.Add(returnTypeAttributeSection); - } - - compilationUnit.AddChild(methodDeclaration); - - if (ParseMethodBodies) { - Block( -#line 875 "VBNET.ATG" -out stmt); - Expect(88); - Expect(100); - -#line 877 "VBNET.ATG" - } else { - // don't parse method body - lexer.SkipCurrentBlock(Tokens.Function); stmt = new BlockStatement(); - } - methodDeclaration.Body = (BlockStatement)stmt; - methodDeclaration.Body.StartLocation = methodDeclaration.EndLocation; - methodDeclaration.Body.EndLocation = t.EndLocation; - - Expect(1); - } else SynErr(223); - break; - } - case 78: { - lexer.NextToken(); - -#line 891 "VBNET.ATG" - m.Check(Modifiers.VBExternalMethods); - Location startPos = t.Location; - CharsetModifier charsetModifer = CharsetModifier.None; - string library = String.Empty; - string alias = null; - string name = String.Empty; - - if (StartOf(15)) { - Charset( -#line 898 "VBNET.ATG" -out charsetModifer); - } - if (la.kind == 167) { - lexer.NextToken(); - Identifier(); - -#line 901 "VBNET.ATG" - name = t.val; - Expect(115); - Expect(3); - -#line 902 "VBNET.ATG" - library = t.literalValue as string; - if (la.kind == 44) { - lexer.NextToken(); - Expect(3); - -#line 903 "VBNET.ATG" - alias = t.literalValue as string; - } - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 904 "VBNET.ATG" -p); - } - Expect(25); - } - Expect(1); - -#line 907 "VBNET.ATG" - DeclareDeclaration declareDeclaration = new DeclareDeclaration(name, m.Modifier, null, p, attributes, library, alias, charsetModifer); - declareDeclaration.StartLocation = m.GetDeclarationLocation(startPos); - declareDeclaration.EndLocation = t.EndLocation; - compilationUnit.AddChild(declareDeclaration); - - } else if (la.kind == 100) { - lexer.NextToken(); - Identifier(); - -#line 914 "VBNET.ATG" - name = t.val; - Expect(115); - Expect(3); - -#line 915 "VBNET.ATG" - library = t.literalValue as string; - if (la.kind == 44) { - lexer.NextToken(); - Expect(3); - -#line 916 "VBNET.ATG" - alias = t.literalValue as string; - } - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 917 "VBNET.ATG" -p); - } - Expect(25); - } - if (la.kind == 48) { - lexer.NextToken(); - TypeName( -#line 918 "VBNET.ATG" -out type); - } - Expect(1); - -#line 921 "VBNET.ATG" - DeclareDeclaration declareDeclaration = new DeclareDeclaration(name, m.Modifier, type, p, attributes, library, alias, charsetModifer); - declareDeclaration.StartLocation = m.GetDeclarationLocation(startPos); - declareDeclaration.EndLocation = t.EndLocation; - compilationUnit.AddChild(declareDeclaration); - - } else SynErr(224); - break; - } - case 93: { - lexer.NextToken(); - -#line 931 "VBNET.ATG" - m.Check(Modifiers.VBEvents); - Location startPos = t.Location; - EventDeclaration eventDeclaration; - string name = String.Empty; - List implementsClause = null; - - Identifier(); - -#line 937 "VBNET.ATG" - name= t.val; - if (la.kind == 48) { - lexer.NextToken(); - TypeName( -#line 939 "VBNET.ATG" -out type); - } else if (la.kind == 1 || la.kind == 24 || la.kind == 107) { - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 941 "VBNET.ATG" -p); - } - Expect(25); - } - } else SynErr(225); - if (la.kind == 107) { - ImplementsClause( -#line 943 "VBNET.ATG" -out implementsClause); - } - -#line 945 "VBNET.ATG" - eventDeclaration = new EventDeclaration(type, m.Modifier, p, attributes, name, implementsClause); - eventDeclaration.StartLocation = m.GetDeclarationLocation(startPos); - eventDeclaration.EndLocation = t.EndLocation; - compilationUnit.AddChild(eventDeclaration); - - Expect(1); - break; - } - case 2: case 47: case 49: case 50: case 51: case 70: case 144: case 169: case 176: case 177: { - -#line 952 "VBNET.ATG" - Location startPos = t.Location; - -#line 954 "VBNET.ATG" - m.Check(Modifiers.Fields); - FieldDeclaration fd = new FieldDeclaration(attributes, null, m.Modifier); - fd.StartLocation = m.GetDeclarationLocation(startPos); - - IdentifierForFieldDeclaration(); - -#line 958 "VBNET.ATG" - string name = t.val; - VariableDeclaratorPartAfterIdentifier( -#line 959 "VBNET.ATG" -variableDeclarators, name); - while (la.kind == 12) { - lexer.NextToken(); - VariableDeclarator( -#line 960 "VBNET.ATG" -variableDeclarators); - } - Expect(1); - -#line 963 "VBNET.ATG" - fd.EndLocation = t.EndLocation; - fd.Fields = variableDeclarators; - compilationUnit.AddChild(fd); - - break; - } - case 71: { - -#line 968 "VBNET.ATG" - m.Check(Modifiers.Fields); - lexer.NextToken(); - -#line 969 "VBNET.ATG" - m.Add(Modifiers.Const, t.Location); - -#line 971 "VBNET.ATG" - FieldDeclaration fd = new FieldDeclaration(attributes, type, m.Modifier); - fd.StartLocation = m.GetDeclarationLocation(t.Location); - List constantDeclarators = new List(); - - ConstantDeclarator( -#line 975 "VBNET.ATG" -constantDeclarators); - while (la.kind == 12) { - lexer.NextToken(); - ConstantDeclarator( -#line 976 "VBNET.ATG" -constantDeclarators); - } - -#line 978 "VBNET.ATG" - fd.Fields = constantDeclarators; - fd.EndLocation = t.Location; - - Expect(1); - -#line 983 "VBNET.ATG" - fd.EndLocation = t.EndLocation; - compilationUnit.AddChild(fd); - - break; - } - case 146: { - lexer.NextToken(); - -#line 989 "VBNET.ATG" - m.Check(Modifiers.VBProperties); - Location startPos = t.Location; - List implementsClause = null; - - Identifier(); - -#line 993 "VBNET.ATG" - string propertyName = t.val; - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 994 "VBNET.ATG" -p); - } - Expect(25); - } - if (la.kind == 48) { - lexer.NextToken(); - TypeName( -#line 995 "VBNET.ATG" -out type); - } - -#line 997 "VBNET.ATG" - if(type == null) { - type = new TypeReference("System.Object"); - } - - if (la.kind == 107) { - ImplementsClause( -#line 1001 "VBNET.ATG" -out implementsClause); - } - Expect(1); - if ( -#line 1005 "VBNET.ATG" -IsMustOverride(m)) { - -#line 1007 "VBNET.ATG" - PropertyDeclaration pDecl = new PropertyDeclaration(propertyName, type, m.Modifier, attributes); - pDecl.StartLocation = m.GetDeclarationLocation(startPos); - pDecl.EndLocation = t.Location; - pDecl.TypeReference = type; - pDecl.InterfaceImplementations = implementsClause; - pDecl.Parameters = p; - compilationUnit.AddChild(pDecl); - - } else if (StartOf(16)) { - -#line 1017 "VBNET.ATG" - PropertyDeclaration pDecl = new PropertyDeclaration(propertyName, type, m.Modifier, attributes); - pDecl.StartLocation = m.GetDeclarationLocation(startPos); - pDecl.EndLocation = t.Location; - pDecl.BodyStart = t.Location; - pDecl.TypeReference = type; - pDecl.InterfaceImplementations = implementsClause; - pDecl.Parameters = p; - PropertyGetRegion getRegion; - PropertySetRegion setRegion; - - AccessorDecls( -#line 1027 "VBNET.ATG" -out getRegion, out setRegion); - Expect(88); - Expect(146); - Expect(1); - -#line 1031 "VBNET.ATG" - pDecl.GetRegion = getRegion; - pDecl.SetRegion = setRegion; - pDecl.BodyEnd = t.EndLocation; - compilationUnit.AddChild(pDecl); - - } else SynErr(226); - break; - } - case 204: { - lexer.NextToken(); - -#line 1038 "VBNET.ATG" - Location startPos = t.Location; - Expect(93); - -#line 1040 "VBNET.ATG" - m.Check(Modifiers.VBCustomEvents); - EventAddRemoveRegion eventAccessorDeclaration; - EventAddRegion addHandlerAccessorDeclaration = null; - EventRemoveRegion removeHandlerAccessorDeclaration = null; - EventRaiseRegion raiseEventAccessorDeclaration = null; - List implementsClause = null; - - Identifier(); - -#line 1047 "VBNET.ATG" - string customEventName = t.val; - Expect(48); - TypeName( -#line 1048 "VBNET.ATG" -out type); - if (la.kind == 107) { - ImplementsClause( -#line 1049 "VBNET.ATG" -out implementsClause); - } - Expect(1); - while (StartOf(17)) { - EventAccessorDeclaration( -#line 1052 "VBNET.ATG" -out eventAccessorDeclaration); - -#line 1054 "VBNET.ATG" - if(eventAccessorDeclaration is EventAddRegion) - { - addHandlerAccessorDeclaration = (EventAddRegion)eventAccessorDeclaration; - } - else if(eventAccessorDeclaration is EventRemoveRegion) - { - removeHandlerAccessorDeclaration = (EventRemoveRegion)eventAccessorDeclaration; - } - else if(eventAccessorDeclaration is EventRaiseRegion) - { - raiseEventAccessorDeclaration = (EventRaiseRegion)eventAccessorDeclaration; - } - - } - Expect(88); - Expect(93); - Expect(1); - -#line 1070 "VBNET.ATG" - if(addHandlerAccessorDeclaration == null) - { - Error("Need to provide AddHandler accessor."); - } - - if(removeHandlerAccessorDeclaration == null) - { - Error("Need to provide RemoveHandler accessor."); - } - - if(raiseEventAccessorDeclaration == null) - { - Error("Need to provide RaiseEvent accessor."); - } - - EventDeclaration decl = new EventDeclaration(type, customEventName, m.Modifier, attributes, null); - decl.StartLocation = m.GetDeclarationLocation(startPos); - decl.EndLocation = t.EndLocation; - decl.AddRegion = addHandlerAccessorDeclaration; - decl.RemoveRegion = removeHandlerAccessorDeclaration; - decl.RaiseRegion = raiseEventAccessorDeclaration; - compilationUnit.AddChild(decl); - - break; - } - case 187: case 201: case 202: { - -#line 1093 "VBNET.ATG" - ConversionType opConversionType = ConversionType.None; - if (la.kind == 201 || la.kind == 202) { - if (la.kind == 202) { - lexer.NextToken(); - -#line 1094 "VBNET.ATG" - opConversionType = ConversionType.Implicit; - } else { - lexer.NextToken(); - -#line 1095 "VBNET.ATG" - opConversionType = ConversionType.Explicit; - } - } - Expect(187); - -#line 1098 "VBNET.ATG" - m.Check(Modifiers.VBOperators); - Location startPos = t.Location; - TypeReference returnType = NullTypeReference.Instance; - TypeReference operandType = NullTypeReference.Instance; - string operandName; - OverloadableOperatorType operatorType; - AttributeSection section; - List parameters = new List(); - List returnTypeAttributes = new List(); - - OverloadableOperator( -#line 1108 "VBNET.ATG" -out operatorType); - Expect(24); - if (la.kind == 55) { - lexer.NextToken(); - } - Identifier(); - -#line 1109 "VBNET.ATG" - operandName = t.val; - if (la.kind == 48) { - lexer.NextToken(); - TypeName( -#line 1110 "VBNET.ATG" -out operandType); - } - -#line 1111 "VBNET.ATG" - parameters.Add(new ParameterDeclarationExpression(operandType, operandName, ParameterModifiers.In)); - while (la.kind == 12) { - lexer.NextToken(); - if (la.kind == 55) { - lexer.NextToken(); - } - Identifier(); - -#line 1115 "VBNET.ATG" - operandName = t.val; - if (la.kind == 48) { - lexer.NextToken(); - TypeName( -#line 1116 "VBNET.ATG" -out operandType); - } - -#line 1117 "VBNET.ATG" - parameters.Add(new ParameterDeclarationExpression(operandType, operandName, ParameterModifiers.In)); - } - Expect(25); - -#line 1120 "VBNET.ATG" - Location endPos = t.EndLocation; - if (la.kind == 48) { - lexer.NextToken(); - while (la.kind == 27) { - AttributeSection( -#line 1121 "VBNET.ATG" -out section); - -#line 1121 "VBNET.ATG" - returnTypeAttributes.Add(section); - } - TypeName( -#line 1121 "VBNET.ATG" -out returnType); - -#line 1121 "VBNET.ATG" - endPos = t.EndLocation; - Expect(1); - } - Block( -#line 1122 "VBNET.ATG" -out stmt); - Expect(88); - Expect(187); - Expect(1); - -#line 1124 "VBNET.ATG" - OperatorDeclaration operatorDeclaration = new OperatorDeclaration(m.Modifier, - attributes, - parameters, - returnType, - operatorType - ); - operatorDeclaration.ConversionType = opConversionType; - operatorDeclaration.ReturnTypeAttributes = returnTypeAttributes; - operatorDeclaration.Body = (BlockStatement)stmt; - operatorDeclaration.StartLocation = m.GetDeclarationLocation(startPos); - operatorDeclaration.EndLocation = endPos; - operatorDeclaration.Body.StartLocation = startPos; - operatorDeclaration.Body.EndLocation = t.Location; - compilationUnit.AddChild(operatorDeclaration); - - break; - } - default: SynErr(227); break; - } - } - - void EnumMemberDecl( -#line 678 "VBNET.ATG" -out FieldDeclaration f) { - -#line 680 "VBNET.ATG" - Expression expr = null;List attributes = new List(); - AttributeSection section = null; - VariableDeclaration varDecl = null; - - while (la.kind == 27) { - AttributeSection( -#line 684 "VBNET.ATG" -out section); - -#line 684 "VBNET.ATG" - attributes.Add(section); - } - Identifier(); - -#line 687 "VBNET.ATG" - f = new FieldDeclaration(attributes); - varDecl = new VariableDeclaration(t.val); - f.Fields.Add(varDecl); - f.StartLocation = t.Location; - - if (la.kind == 11) { - lexer.NextToken(); - Expr( -#line 692 "VBNET.ATG" -out expr); - -#line 692 "VBNET.ATG" - varDecl.Initializer = expr; - } - Expect(1); - } - - void InterfaceMemberDecl() { - -#line 595 "VBNET.ATG" - TypeReference type =null; - List p = new List(); - List templates = new List(); - AttributeSection section, returnTypeAttributeSection = null; - ModifierList mod = new ModifierList(); - List attributes = new List(); - string name; - - if (StartOf(18)) { - while (la.kind == 27) { - AttributeSection( -#line 603 "VBNET.ATG" -out section); - -#line 603 "VBNET.ATG" - attributes.Add(section); - } - while (StartOf(8)) { - MemberModifier( -#line 606 "VBNET.ATG" -mod); - } - if (la.kind == 93) { - lexer.NextToken(); - -#line 609 "VBNET.ATG" - mod.Check(Modifiers.VBInterfaceEvents); - Identifier(); - -#line 610 "VBNET.ATG" - name = t.val; - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 611 "VBNET.ATG" -p); - } - Expect(25); - } - if (la.kind == 48) { - lexer.NextToken(); - TypeName( -#line 612 "VBNET.ATG" -out type); - } - Expect(1); - -#line 615 "VBNET.ATG" - EventDeclaration ed = new EventDeclaration(type, mod.Modifier, p, attributes, name, null); - compilationUnit.AddChild(ed); - ed.EndLocation = t.EndLocation; - - } else if (la.kind == 167) { - lexer.NextToken(); - -#line 621 "VBNET.ATG" - mod.Check(Modifiers.VBInterfaceMethods); - Identifier(); - -#line 622 "VBNET.ATG" - name = t.val; - TypeParameterList( -#line 623 "VBNET.ATG" -templates); - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 624 "VBNET.ATG" -p); - } - Expect(25); - } - Expect(1); - -#line 627 "VBNET.ATG" - MethodDeclaration md = new MethodDeclaration(name, mod.Modifier, null, p, attributes); - md.TypeReference = new TypeReference("", "System.Void"); - md.EndLocation = t.EndLocation; - md.Templates = templates; - compilationUnit.AddChild(md); - - } else if (la.kind == 100) { - lexer.NextToken(); - -#line 635 "VBNET.ATG" - mod.Check(Modifiers.VBInterfaceMethods); - Identifier(); - -#line 636 "VBNET.ATG" - name = t.val; - TypeParameterList( -#line 637 "VBNET.ATG" -templates); - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 638 "VBNET.ATG" -p); - } - Expect(25); - } - if (la.kind == 48) { - lexer.NextToken(); - while (la.kind == 27) { - AttributeSection( -#line 639 "VBNET.ATG" -out returnTypeAttributeSection); - } - TypeName( -#line 639 "VBNET.ATG" -out type); - } - -#line 641 "VBNET.ATG" - if(type == null) { - type = new TypeReference("System.Object"); - } - MethodDeclaration md = new MethodDeclaration(name, mod.Modifier, type, p, attributes); - if (returnTypeAttributeSection != null) { - returnTypeAttributeSection.AttributeTarget = "return"; - md.Attributes.Add(returnTypeAttributeSection); - } - md.EndLocation = t.EndLocation; - md.Templates = templates; - compilationUnit.AddChild(md); - - Expect(1); - } else if (la.kind == 146) { - lexer.NextToken(); - -#line 656 "VBNET.ATG" - mod.Check(Modifiers.VBInterfaceProperties); - Identifier(); - -#line 657 "VBNET.ATG" - name = t.val; - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 658 "VBNET.ATG" -p); - } - Expect(25); - } - if (la.kind == 48) { - lexer.NextToken(); - TypeName( -#line 659 "VBNET.ATG" -out type); - } - -#line 661 "VBNET.ATG" - if(type == null) { - type = new TypeReference("System.Object"); - } - - Expect(1); - -#line 667 "VBNET.ATG" - PropertyDeclaration pd = new PropertyDeclaration(name, type, mod.Modifier, attributes); - pd.Parameters = p; - pd.EndLocation = t.EndLocation; - compilationUnit.AddChild(pd); - - } else SynErr(228); - } else if (StartOf(19)) { - NonModuleDeclaration( -#line 674 "VBNET.ATG" -mod, attributes); - } else SynErr(229); - } - - void Expr( -#line 1524 "VBNET.ATG" -out Expression expr) { - DisjunctionExpr( -#line 1526 "VBNET.ATG" -out expr); - } - - void ImplementsClause( -#line 1495 "VBNET.ATG" -out List baseInterfaces) { - -#line 1497 "VBNET.ATG" - baseInterfaces = new List(); - TypeReference type = null; - string memberName = null; - - Expect(107); - NonArrayTypeName( -#line 1502 "VBNET.ATG" -out type, false); - -#line 1503 "VBNET.ATG" - if (type != null) memberName = TypeReference.StripLastIdentifierFromType(ref type); - -#line 1504 "VBNET.ATG" - baseInterfaces.Add(new InterfaceImplementation(type, memberName)); - while (la.kind == 12) { - lexer.NextToken(); - NonArrayTypeName( -#line 1506 "VBNET.ATG" -out type, false); - -#line 1507 "VBNET.ATG" - if (type != null) memberName = TypeReference.StripLastIdentifierFromType(ref type); - -#line 1508 "VBNET.ATG" - baseInterfaces.Add(new InterfaceImplementation(type, memberName)); - } - } - - void HandlesClause( -#line 1453 "VBNET.ATG" -out List handlesClause) { - -#line 1455 "VBNET.ATG" - handlesClause = new List(); - string name; - - Expect(105); - EventMemberSpecifier( -#line 1458 "VBNET.ATG" -out name); - -#line 1458 "VBNET.ATG" - handlesClause.Add(name); - while (la.kind == 12) { - lexer.NextToken(); - EventMemberSpecifier( -#line 1459 "VBNET.ATG" -out name); - -#line 1459 "VBNET.ATG" - handlesClause.Add(name); - } - } - - void Block( -#line 2173 "VBNET.ATG" -out Statement stmt) { - -#line 2176 "VBNET.ATG" - BlockStatement blockStmt = new BlockStatement(); - blockStmt.StartLocation = t.Location; - compilationUnit.BlockStart(blockStmt); - - while (StartOf(20) || -#line 2181 "VBNET.ATG" -IsEndStmtAhead()) { - if ( -#line 2181 "VBNET.ATG" -IsEndStmtAhead()) { - Expect(88); - EndOfStmt(); - -#line 2181 "VBNET.ATG" - compilationUnit.AddChild(new EndStatement()); - } else { - Statement(); - EndOfStmt(); - } - } - -#line 2186 "VBNET.ATG" - stmt = blockStmt; - blockStmt.EndLocation = t.EndLocation; - compilationUnit.BlockEnd(); - - } - - void Charset( -#line 1445 "VBNET.ATG" -out CharsetModifier charsetModifier) { - -#line 1446 "VBNET.ATG" - charsetModifier = CharsetModifier.None; - if (la.kind == 100 || la.kind == 167) { - } else if (la.kind == 47) { - lexer.NextToken(); - -#line 1447 "VBNET.ATG" - charsetModifier = CharsetModifier.Ansi; - } else if (la.kind == 50) { - lexer.NextToken(); - -#line 1448 "VBNET.ATG" - charsetModifier = CharsetModifier.Auto; - } else if (la.kind == 176) { - lexer.NextToken(); - -#line 1449 "VBNET.ATG" - charsetModifier = CharsetModifier.Unicode; - } else SynErr(230); - } - - void IdentifierForFieldDeclaration() { - switch (la.kind) { - case 2: { - lexer.NextToken(); - break; - } - case 169: { - lexer.NextToken(); - break; - } - case 51: { - lexer.NextToken(); - break; - } - case 70: { - lexer.NextToken(); - break; - } - case 49: { - lexer.NextToken(); - break; - } - case 47: { - lexer.NextToken(); - break; - } - case 50: { - lexer.NextToken(); - break; - } - case 144: { - lexer.NextToken(); - break; - } - case 176: { - lexer.NextToken(); - break; - } - case 177: { - lexer.NextToken(); - break; - } - default: SynErr(231); break; - } - } - - void VariableDeclaratorPartAfterIdentifier( -#line 1325 "VBNET.ATG" -List fieldDeclaration, string name) { - -#line 1327 "VBNET.ATG" - Expression expr = null; - TypeReference type = null; - ArrayList rank = null; - List dimension = null; - - if ( -#line 1332 "VBNET.ATG" -IsSize() && !IsDims()) { - ArrayInitializationModifier( -#line 1332 "VBNET.ATG" -out dimension); - } - if ( -#line 1333 "VBNET.ATG" -IsDims()) { - ArrayNameModifier( -#line 1333 "VBNET.ATG" -out rank); - } - if ( -#line 1335 "VBNET.ATG" -IsObjectCreation()) { - Expect(48); - ObjectCreateExpression( -#line 1335 "VBNET.ATG" -out expr); - -#line 1337 "VBNET.ATG" - if (expr is ObjectCreateExpression) { - type = ((ObjectCreateExpression)expr).CreateType; - } else { - type = ((ArrayCreateExpression)expr).CreateType; - } - - } else if (StartOf(21)) { - if (la.kind == 48) { - lexer.NextToken(); - TypeName( -#line 1344 "VBNET.ATG" -out type); - -#line 1346 "VBNET.ATG" - if (type != null) { - for (int i = fieldDeclaration.Count - 1; i >= 0; i--) { - VariableDeclaration vd = fieldDeclaration[i]; - if (vd.TypeReference.Type.Length > 0) break; - TypeReference newType = type.Clone(); - newType.RankSpecifier = vd.TypeReference.RankSpecifier; - vd.TypeReference = newType; - } - } - - } - -#line 1358 "VBNET.ATG" - if (type == null && (dimension != null || rank != null)) { - type = new TypeReference(""); - } - if (dimension != null) { - if(type.RankSpecifier != null) { - Error("array rank only allowed one time"); - } else { - for (int i = 0; i < dimension.Count; i++) - dimension[i] = Expression.AddInteger(dimension[i], 1); - if (rank == null) { - type.RankSpecifier = new int[] { dimension.Count - 1 }; - } else { - rank.Insert(0, dimension.Count - 1); - type.RankSpecifier = (int[])rank.ToArray(typeof(int)); - } - expr = new ArrayCreateExpression(type, dimension); - } - } else if (rank != null) { - if(type.RankSpecifier != null) { - Error("array rank only allowed one time"); - } else { - type.RankSpecifier = (int[])rank.ToArray(typeof(int)); - } - } - - if (la.kind == 11) { - lexer.NextToken(); - VariableInitializer( -#line 1383 "VBNET.ATG" -out expr); - } - } else SynErr(232); - -#line 1385 "VBNET.ATG" - fieldDeclaration.Add(new VariableDeclaration(name, expr, type)); - } - - void VariableDeclarator( -#line 1319 "VBNET.ATG" -List fieldDeclaration) { - Identifier(); - -#line 1321 "VBNET.ATG" - string name = t.val; - VariableDeclaratorPartAfterIdentifier( -#line 1322 "VBNET.ATG" -fieldDeclaration, name); - } - - void ConstantDeclarator( -#line 1302 "VBNET.ATG" -List constantDeclaration) { - -#line 1304 "VBNET.ATG" - Expression expr = null; - TypeReference type = null; - string name = String.Empty; - - Identifier(); - -#line 1308 "VBNET.ATG" - name = t.val; - if (la.kind == 48) { - lexer.NextToken(); - TypeName( -#line 1309 "VBNET.ATG" -out type); - } - Expect(11); - Expr( -#line 1310 "VBNET.ATG" -out expr); - -#line 1312 "VBNET.ATG" - VariableDeclaration f = new VariableDeclaration(name, expr); - f.TypeReference = type; - constantDeclaration.Add(f); - - } - - void AccessorDecls( -#line 1236 "VBNET.ATG" -out PropertyGetRegion getBlock, out PropertySetRegion setBlock) { - -#line 1238 "VBNET.ATG" - List attributes = new List(); - AttributeSection section; - getBlock = null; - setBlock = null; - - while (la.kind == 27) { - AttributeSection( -#line 1243 "VBNET.ATG" -out section); - -#line 1243 "VBNET.ATG" - attributes.Add(section); - } - if (StartOf(22)) { - GetAccessorDecl( -#line 1245 "VBNET.ATG" -out getBlock, attributes); - if (StartOf(23)) { - -#line 1247 "VBNET.ATG" - attributes = new List(); - while (la.kind == 27) { - AttributeSection( -#line 1248 "VBNET.ATG" -out section); - -#line 1248 "VBNET.ATG" - attributes.Add(section); - } - SetAccessorDecl( -#line 1249 "VBNET.ATG" -out setBlock, attributes); - } - } else if (StartOf(24)) { - SetAccessorDecl( -#line 1252 "VBNET.ATG" -out setBlock, attributes); - if (StartOf(25)) { - -#line 1254 "VBNET.ATG" - attributes = new List(); - while (la.kind == 27) { - AttributeSection( -#line 1255 "VBNET.ATG" -out section); - -#line 1255 "VBNET.ATG" - attributes.Add(section); - } - GetAccessorDecl( -#line 1256 "VBNET.ATG" -out getBlock, attributes); - } - } else SynErr(233); - } - - void EventAccessorDeclaration( -#line 1199 "VBNET.ATG" -out EventAddRemoveRegion eventAccessorDeclaration) { - -#line 1201 "VBNET.ATG" - Statement stmt = null; - List p = new List(); - AttributeSection section; - List attributes = new List(); - eventAccessorDeclaration = null; - - while (la.kind == 27) { - AttributeSection( -#line 1207 "VBNET.ATG" -out section); - -#line 1207 "VBNET.ATG" - attributes.Add(section); - } - if (la.kind == 42) { - lexer.NextToken(); - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 1209 "VBNET.ATG" -p); - } - Expect(25); - } - Expect(1); - Block( -#line 1210 "VBNET.ATG" -out stmt); - Expect(88); - Expect(42); - Expect(1); - -#line 1212 "VBNET.ATG" - eventAccessorDeclaration = new EventAddRegion(attributes); - eventAccessorDeclaration.Block = (BlockStatement)stmt; - eventAccessorDeclaration.Parameters = p; - - } else if (la.kind == 152) { - lexer.NextToken(); - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 1217 "VBNET.ATG" -p); - } - Expect(25); - } - Expect(1); - Block( -#line 1218 "VBNET.ATG" -out stmt); - Expect(88); - Expect(152); - Expect(1); - -#line 1220 "VBNET.ATG" - eventAccessorDeclaration = new EventRemoveRegion(attributes); - eventAccessorDeclaration.Block = (BlockStatement)stmt; - eventAccessorDeclaration.Parameters = p; - - } else if (la.kind == 149) { - lexer.NextToken(); - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 1225 "VBNET.ATG" -p); - } - Expect(25); - } - Expect(1); - Block( -#line 1226 "VBNET.ATG" -out stmt); - Expect(88); - Expect(149); - Expect(1); - -#line 1228 "VBNET.ATG" - eventAccessorDeclaration = new EventRaiseRegion(attributes); - eventAccessorDeclaration.Block = (BlockStatement)stmt; - eventAccessorDeclaration.Parameters = p; - - } else SynErr(234); - } - - void OverloadableOperator( -#line 1141 "VBNET.ATG" -out OverloadableOperatorType operatorType) { - -#line 1142 "VBNET.ATG" - operatorType = OverloadableOperatorType.None; - switch (la.kind) { - case 14: { - lexer.NextToken(); - -#line 1144 "VBNET.ATG" - operatorType = OverloadableOperatorType.Add; - break; - } - case 15: { - lexer.NextToken(); - -#line 1146 "VBNET.ATG" - operatorType = OverloadableOperatorType.Subtract; - break; - } - case 16: { - lexer.NextToken(); - -#line 1148 "VBNET.ATG" - operatorType = OverloadableOperatorType.Multiply; - break; - } - case 17: { - lexer.NextToken(); - -#line 1150 "VBNET.ATG" - operatorType = OverloadableOperatorType.Divide; - break; - } - case 18: { - lexer.NextToken(); - -#line 1152 "VBNET.ATG" - operatorType = OverloadableOperatorType.DivideInteger; - break; - } - case 19: { - lexer.NextToken(); - -#line 1154 "VBNET.ATG" - operatorType = OverloadableOperatorType.Concat; - break; - } - case 116: { - lexer.NextToken(); - -#line 1156 "VBNET.ATG" - operatorType = OverloadableOperatorType.Like; - break; - } - case 120: { - lexer.NextToken(); - -#line 1158 "VBNET.ATG" - operatorType = OverloadableOperatorType.Modulus; - break; - } - case 45: { - lexer.NextToken(); - -#line 1160 "VBNET.ATG" - operatorType = OverloadableOperatorType.BitwiseAnd; - break; - } - case 138: { - lexer.NextToken(); - -#line 1162 "VBNET.ATG" - operatorType = OverloadableOperatorType.BitwiseOr; - break; - } - case 185: { - lexer.NextToken(); - -#line 1164 "VBNET.ATG" - operatorType = OverloadableOperatorType.ExclusiveOr; - break; - } - case 20: { - lexer.NextToken(); - -#line 1166 "VBNET.ATG" - operatorType = OverloadableOperatorType.Power; - break; - } - case 31: { - lexer.NextToken(); - -#line 1168 "VBNET.ATG" - operatorType = OverloadableOperatorType.ShiftLeft; - break; - } - case 32: { - lexer.NextToken(); - -#line 1170 "VBNET.ATG" - operatorType = OverloadableOperatorType.ShiftRight; - break; - } - case 11: { - lexer.NextToken(); - -#line 1172 "VBNET.ATG" - operatorType = OverloadableOperatorType.Equality; - break; - } - case 28: { - lexer.NextToken(); - -#line 1174 "VBNET.ATG" - operatorType = OverloadableOperatorType.InEquality; - break; - } - case 27: { - lexer.NextToken(); - -#line 1176 "VBNET.ATG" - operatorType = OverloadableOperatorType.LessThan; - break; - } - case 30: { - lexer.NextToken(); - -#line 1178 "VBNET.ATG" - operatorType = OverloadableOperatorType.LessThanOrEqual; - break; - } - case 26: { - lexer.NextToken(); - -#line 1180 "VBNET.ATG" - operatorType = OverloadableOperatorType.GreaterThan; - break; - } - case 29: { - lexer.NextToken(); - -#line 1182 "VBNET.ATG" - operatorType = OverloadableOperatorType.GreaterThanOrEqual; - break; - } - case 75: { - lexer.NextToken(); - -#line 1184 "VBNET.ATG" - operatorType = OverloadableOperatorType.CType; - break; - } - case 2: case 47: case 49: case 50: case 51: case 70: case 144: case 169: case 176: case 177: case 204: { - Identifier(); - -#line 1188 "VBNET.ATG" - string opName = t.val; - if (string.Equals(opName, "istrue", StringComparison.InvariantCultureIgnoreCase)) { - operatorType = OverloadableOperatorType.IsTrue; - } else if (string.Equals(opName, "isfalse", StringComparison.InvariantCultureIgnoreCase)) { - operatorType = OverloadableOperatorType.IsFalse; - } else { - Error("Invalid operator. Possible operators are '+', '-', 'Not', 'IsTrue', 'IsFalse'."); - } - - break; - } - default: SynErr(235); break; - } - } - - void GetAccessorDecl( -#line 1262 "VBNET.ATG" -out PropertyGetRegion getBlock, List attributes) { - -#line 1263 "VBNET.ATG" - Statement stmt = null; Modifiers m; - PropertyAccessorAccessModifier( -#line 1265 "VBNET.ATG" -out m); - Expect(101); - -#line 1267 "VBNET.ATG" - Location startLocation = t.Location; - Expect(1); - Block( -#line 1269 "VBNET.ATG" -out stmt); - -#line 1270 "VBNET.ATG" - getBlock = new PropertyGetRegion((BlockStatement)stmt, attributes); - Expect(88); - Expect(101); - -#line 1272 "VBNET.ATG" - getBlock.Modifier = m; - -#line 1273 "VBNET.ATG" - getBlock.StartLocation = startLocation; getBlock.EndLocation = t.EndLocation; - Expect(1); - } - - void SetAccessorDecl( -#line 1278 "VBNET.ATG" -out PropertySetRegion setBlock, List attributes) { - -#line 1280 "VBNET.ATG" - Statement stmt = null; - List p = new List(); - Modifiers m; - - PropertyAccessorAccessModifier( -#line 1285 "VBNET.ATG" -out m); - Expect(156); - -#line 1287 "VBNET.ATG" - Location startLocation = t.Location; - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(4)) { - FormalParameterList( -#line 1288 "VBNET.ATG" -p); - } - Expect(25); - } - Expect(1); - Block( -#line 1290 "VBNET.ATG" -out stmt); - -#line 1292 "VBNET.ATG" - setBlock = new PropertySetRegion((BlockStatement)stmt, attributes); - setBlock.Modifier = m; - setBlock.Parameters = p; - - Expect(88); - Expect(156); - -#line 1297 "VBNET.ATG" - setBlock.StartLocation = startLocation; setBlock.EndLocation = t.EndLocation; - Expect(1); - } - - void PropertyAccessorAccessModifier( -#line 2842 "VBNET.ATG" -out Modifiers m) { - -#line 2843 "VBNET.ATG" - m = Modifiers.None; - while (StartOf(26)) { - if (la.kind == 148) { - lexer.NextToken(); - -#line 2845 "VBNET.ATG" - m |= Modifiers.Public; - } else if (la.kind == 147) { - lexer.NextToken(); - -#line 2846 "VBNET.ATG" - m |= Modifiers.Protected; - } else if (la.kind == 99) { - lexer.NextToken(); - -#line 2847 "VBNET.ATG" - m |= Modifiers.Internal; - } else { - lexer.NextToken(); - -#line 2848 "VBNET.ATG" - m |= Modifiers.Private; - } - } - } - - void ArrayInitializationModifier( -#line 1389 "VBNET.ATG" -out List arrayModifiers) { - -#line 1391 "VBNET.ATG" - arrayModifiers = null; - - Expect(24); - InitializationRankList( -#line 1393 "VBNET.ATG" -out arrayModifiers); - Expect(25); - } - - void ArrayNameModifier( -#line 1965 "VBNET.ATG" -out ArrayList arrayModifiers) { - -#line 1967 "VBNET.ATG" - arrayModifiers = null; - - ArrayTypeModifiers( -#line 1969 "VBNET.ATG" -out arrayModifiers); - } - - void ObjectCreateExpression( -#line 1818 "VBNET.ATG" -out Expression oce) { - -#line 1820 "VBNET.ATG" - TypeReference type = null; - Expression initializer = null; - List arguments = null; - ArrayList dimensions = null; - oce = null; - bool canBeNormal; bool canBeReDim; - - Expect(127); - NonArrayTypeName( -#line 1827 "VBNET.ATG" -out type, false); - if (la.kind == 24) { - lexer.NextToken(); - NormalOrReDimArgumentList( -#line 1828 "VBNET.ATG" -out arguments, out canBeNormal, out canBeReDim); - Expect(25); - if (la.kind == 22 || -#line 1829 "VBNET.ATG" -la.kind == Tokens.OpenParenthesis) { - if ( -#line 1829 "VBNET.ATG" -la.kind == Tokens.OpenParenthesis) { - ArrayTypeModifiers( -#line 1830 "VBNET.ATG" -out dimensions); - ArrayInitializer( -#line 1831 "VBNET.ATG" -out initializer); - } else { - ArrayInitializer( -#line 1832 "VBNET.ATG" -out initializer); - } - } - -#line 1834 "VBNET.ATG" - if (canBeReDim && !canBeNormal && initializer == null) initializer = new ArrayInitializerExpression(); - } - -#line 1837 "VBNET.ATG" - if (type == null) type = new TypeReference("Object"); // fallback type on parser errors - if (initializer == null) { - oce = new ObjectCreateExpression(type, arguments); - } else { - if (dimensions == null) dimensions = new ArrayList(); - dimensions.Insert(0, (arguments == null) ? 0 : Math.Max(arguments.Count - 1, 0)); - type.RankSpecifier = (int[])dimensions.ToArray(typeof(int)); - ArrayCreateExpression ace = new ArrayCreateExpression(type, initializer as ArrayInitializerExpression); - ace.Arguments = arguments; - oce = ace; - } - - } - - void VariableInitializer( -#line 1417 "VBNET.ATG" -out Expression initializerExpression) { - -#line 1419 "VBNET.ATG" - initializerExpression = null; - - if (StartOf(27)) { - Expr( -#line 1421 "VBNET.ATG" -out initializerExpression); - } else if (la.kind == 22) { - ArrayInitializer( -#line 1422 "VBNET.ATG" -out initializerExpression); - } else SynErr(236); - } - - void InitializationRankList( -#line 1397 "VBNET.ATG" -out List rank) { - -#line 1399 "VBNET.ATG" - rank = new List(); - Expression expr = null; - - Expr( -#line 1402 "VBNET.ATG" -out expr); - if (la.kind == 172) { - lexer.NextToken(); - -#line 1403 "VBNET.ATG" - EnsureIsZero(expr); - Expr( -#line 1404 "VBNET.ATG" -out expr); - } - -#line 1406 "VBNET.ATG" - if (expr != null) { rank.Add(expr); } - while (la.kind == 12) { - lexer.NextToken(); - Expr( -#line 1408 "VBNET.ATG" -out expr); - if (la.kind == 172) { - lexer.NextToken(); - -#line 1409 "VBNET.ATG" - EnsureIsZero(expr); - Expr( -#line 1410 "VBNET.ATG" -out expr); - } - -#line 1412 "VBNET.ATG" - if (expr != null) { rank.Add(expr); } - } - } - - void ArrayInitializer( -#line 1426 "VBNET.ATG" -out Expression outExpr) { - -#line 1428 "VBNET.ATG" - Expression expr = null; - ArrayInitializerExpression initializer = new ArrayInitializerExpression(); - - Expect(22); - if (StartOf(28)) { - VariableInitializer( -#line 1433 "VBNET.ATG" -out expr); - -#line 1435 "VBNET.ATG" - if (expr != null) { initializer.CreateExpressions.Add(expr); } - - while ( -#line 1438 "VBNET.ATG" -NotFinalComma()) { - Expect(12); - VariableInitializer( -#line 1438 "VBNET.ATG" -out expr); - -#line 1439 "VBNET.ATG" - if (expr != null) { initializer.CreateExpressions.Add(expr); } - } - } - Expect(23); - -#line 1442 "VBNET.ATG" - outExpr = initializer; - } - - void EventMemberSpecifier( -#line 1512 "VBNET.ATG" -out string name) { - -#line 1513 "VBNET.ATG" - string type; name = String.Empty; - if (StartOf(13)) { - Identifier(); - -#line 1514 "VBNET.ATG" - type = t.val; - Expect(10); - Identifier(); - -#line 1516 "VBNET.ATG" - name = type + "." + t.val; - } else if (la.kind == 124) { - lexer.NextToken(); - Expect(10); - if (StartOf(13)) { - Identifier(); - -#line 1519 "VBNET.ATG" - name = "MyBase." + t.val; - } else if (la.kind == 92) { - lexer.NextToken(); - -#line 1520 "VBNET.ATG" - name = "MyBase.Error"; - } else SynErr(237); - } else SynErr(238); - } - - void DisjunctionExpr( -#line 1662 "VBNET.ATG" -out Expression outExpr) { - -#line 1664 "VBNET.ATG" - Expression expr; - BinaryOperatorType op = BinaryOperatorType.None; - - ConjunctionExpr( -#line 1667 "VBNET.ATG" -out outExpr); - while (la.kind == 138 || la.kind == 139 || la.kind == 185) { - if (la.kind == 138) { - lexer.NextToken(); - -#line 1670 "VBNET.ATG" - op = BinaryOperatorType.BitwiseOr; - } else if (la.kind == 139) { - lexer.NextToken(); - -#line 1671 "VBNET.ATG" - op = BinaryOperatorType.LogicalOr; - } else { - lexer.NextToken(); - -#line 1672 "VBNET.ATG" - op = BinaryOperatorType.ExclusiveOr; - } - ConjunctionExpr( -#line 1674 "VBNET.ATG" -out expr); - -#line 1674 "VBNET.ATG" - outExpr = new BinaryOperatorExpression(outExpr, op, expr); - } - } - - void AssignmentOperator( -#line 1529 "VBNET.ATG" -out AssignmentOperatorType op) { - -#line 1530 "VBNET.ATG" - op = AssignmentOperatorType.None; - switch (la.kind) { - case 11: { - lexer.NextToken(); - -#line 1531 "VBNET.ATG" - op = AssignmentOperatorType.Assign; - break; - } - case 41: { - lexer.NextToken(); - -#line 1532 "VBNET.ATG" - op = AssignmentOperatorType.ConcatString; - break; - } - case 33: { - lexer.NextToken(); - -#line 1533 "VBNET.ATG" - op = AssignmentOperatorType.Add; - break; - } - case 35: { - lexer.NextToken(); - -#line 1534 "VBNET.ATG" - op = AssignmentOperatorType.Subtract; - break; - } - case 36: { - lexer.NextToken(); - -#line 1535 "VBNET.ATG" - op = AssignmentOperatorType.Multiply; - break; - } - case 37: { - lexer.NextToken(); - -#line 1536 "VBNET.ATG" - op = AssignmentOperatorType.Divide; - break; - } - case 38: { - lexer.NextToken(); - -#line 1537 "VBNET.ATG" - op = AssignmentOperatorType.DivideInteger; - break; - } - case 34: { - lexer.NextToken(); - -#line 1538 "VBNET.ATG" - op = AssignmentOperatorType.Power; - break; - } - case 39: { - lexer.NextToken(); - -#line 1539 "VBNET.ATG" - op = AssignmentOperatorType.ShiftLeft; - break; - } - case 40: { - lexer.NextToken(); - -#line 1540 "VBNET.ATG" - op = AssignmentOperatorType.ShiftRight; - break; - } - default: SynErr(239); break; - } - } - - void SimpleExpr( -#line 1544 "VBNET.ATG" -out Expression pexpr) { - SimpleNonInvocationExpression( -#line 1546 "VBNET.ATG" -out pexpr); - while (la.kind == 10 || la.kind == 24) { - if (la.kind == 10) { - -#line 1547 "VBNET.ATG" - string name; - lexer.NextToken(); - IdentifierOrKeyword( -#line 1548 "VBNET.ATG" -out name); - -#line 1548 "VBNET.ATG" - pexpr = new FieldReferenceExpression(pexpr, name); - } else { - InvocationExpression( -#line 1549 "VBNET.ATG" -ref pexpr); - } - } - } - - void SimpleNonInvocationExpression( -#line 1553 "VBNET.ATG" -out Expression pexpr) { - -#line 1555 "VBNET.ATG" - Expression expr; - TypeReference type = null; - string name = String.Empty; - pexpr = null; - - if (StartOf(29)) { - switch (la.kind) { - case 3: { - lexer.NextToken(); - -#line 1563 "VBNET.ATG" - pexpr = new PrimitiveExpression(t.literalValue, t.val); - break; - } - case 4: { - lexer.NextToken(); - -#line 1564 "VBNET.ATG" - pexpr = new PrimitiveExpression(t.literalValue, t.val); - break; - } - case 7: { - lexer.NextToken(); - -#line 1565 "VBNET.ATG" - pexpr = new PrimitiveExpression(t.literalValue, t.val); - break; - } - case 6: { - lexer.NextToken(); - -#line 1566 "VBNET.ATG" - pexpr = new PrimitiveExpression(t.literalValue, t.val); - break; - } - case 5: { - lexer.NextToken(); - -#line 1567 "VBNET.ATG" - pexpr = new PrimitiveExpression(t.literalValue, t.val); - break; - } - case 9: { - lexer.NextToken(); - -#line 1568 "VBNET.ATG" - pexpr = new PrimitiveExpression(t.literalValue, t.val); - break; - } - case 8: { - lexer.NextToken(); - -#line 1569 "VBNET.ATG" - pexpr = new PrimitiveExpression(t.literalValue, t.val); - break; - } - case 173: { - lexer.NextToken(); - -#line 1571 "VBNET.ATG" - pexpr = new PrimitiveExpression(true, "true"); - break; - } - case 96: { - lexer.NextToken(); - -#line 1572 "VBNET.ATG" - pexpr = new PrimitiveExpression(false, "false"); - break; - } - case 130: { - lexer.NextToken(); - -#line 1573 "VBNET.ATG" - pexpr = new PrimitiveExpression(null, "null"); - break; - } - case 24: { - lexer.NextToken(); - Expr( -#line 1574 "VBNET.ATG" -out expr); - Expect(25); - -#line 1574 "VBNET.ATG" - pexpr = new ParenthesizedExpression(expr); - break; - } - case 2: case 47: case 49: case 50: case 51: case 70: case 144: case 169: case 176: case 177: case 204: { - Identifier(); - -#line 1575 "VBNET.ATG" - pexpr = new IdentifierExpression(t.val); - break; - } - case 52: case 54: case 65: case 76: case 77: case 84: case 111: case 117: case 133: case 159: case 160: case 165: case 190: case 191: case 192: case 193: { - -#line 1576 "VBNET.ATG" - string val = String.Empty; - if (StartOf(10)) { - PrimitiveTypeName( -#line 1577 "VBNET.ATG" -out val); - } else if (la.kind == 133) { - lexer.NextToken(); - -#line 1577 "VBNET.ATG" - val = "Object"; - } else SynErr(240); - Expect(10); - -#line 1578 "VBNET.ATG" - t.val = ""; - Identifier(); - -#line 1578 "VBNET.ATG" - pexpr = new FieldReferenceExpression(new TypeReferenceExpression(val), t.val); - break; - } - case 119: { - lexer.NextToken(); - -#line 1579 "VBNET.ATG" - pexpr = new ThisReferenceExpression(); - break; - } - case 124: case 125: { - -#line 1580 "VBNET.ATG" - Expression retExpr = null; - if (la.kind == 124) { - lexer.NextToken(); - -#line 1581 "VBNET.ATG" - retExpr = new BaseReferenceExpression(); - } else if (la.kind == 125) { - lexer.NextToken(); - -#line 1582 "VBNET.ATG" - retExpr = new ClassReferenceExpression(); - } else SynErr(241); - Expect(10); - IdentifierOrKeyword( -#line 1584 "VBNET.ATG" -out name); - -#line 1584 "VBNET.ATG" - pexpr = new FieldReferenceExpression(retExpr, name); - break; - } - case 198: { - lexer.NextToken(); - Expect(10); - Identifier(); - -#line 1586 "VBNET.ATG" - type = new TypeReference(t.val ?? ""); - -#line 1588 "VBNET.ATG" - type.IsGlobal = true; - -#line 1589 "VBNET.ATG" - pexpr = new TypeReferenceExpression(type); - break; - } - case 127: { - ObjectCreateExpression( -#line 1590 "VBNET.ATG" -out expr); - -#line 1590 "VBNET.ATG" - pexpr = expr; - break; - } - case 75: case 82: case 199: { - -#line 1592 "VBNET.ATG" - CastType castType = CastType.Cast; - if (la.kind == 82) { - lexer.NextToken(); - } else if (la.kind == 75) { - lexer.NextToken(); - -#line 1594 "VBNET.ATG" - castType = CastType.Conversion; - } else if (la.kind == 199) { - lexer.NextToken(); - -#line 1595 "VBNET.ATG" - castType = CastType.TryCast; - } else SynErr(242); - Expect(24); - Expr( -#line 1597 "VBNET.ATG" -out expr); - Expect(12); - TypeName( -#line 1597 "VBNET.ATG" -out type); - Expect(25); - -#line 1598 "VBNET.ATG" - pexpr = new CastExpression(type, expr, castType); - break; - } - case 59: case 60: case 61: case 62: case 63: case 64: case 66: case 68: case 69: case 72: case 73: case 74: case 194: case 195: case 196: case 197: { - CastTarget( -#line 1599 "VBNET.ATG" -out type); - Expect(24); - Expr( -#line 1599 "VBNET.ATG" -out expr); - Expect(25); - -#line 1599 "VBNET.ATG" - pexpr = new CastExpression(type, expr, CastType.PrimitiveConversion); - break; - } - case 43: { - lexer.NextToken(); - Expr( -#line 1600 "VBNET.ATG" -out expr); - -#line 1600 "VBNET.ATG" - pexpr = new AddressOfExpression(expr); - break; - } - case 102: { - lexer.NextToken(); - Expect(24); - GetTypeTypeName( -#line 1601 "VBNET.ATG" -out type); - Expect(25); - -#line 1601 "VBNET.ATG" - pexpr = new TypeOfExpression(type); - break; - } - case 175: { - lexer.NextToken(); - SimpleExpr( -#line 1602 "VBNET.ATG" -out expr); - Expect(113); - TypeName( -#line 1602 "VBNET.ATG" -out type); - -#line 1602 "VBNET.ATG" - pexpr = new TypeOfIsExpression(expr, type); - break; - } - } - } else if (la.kind == 10) { - lexer.NextToken(); - IdentifierOrKeyword( -#line 1606 "VBNET.ATG" -out name); - -#line 1606 "VBNET.ATG" - pexpr = new FieldReferenceExpression(null, name); - } else SynErr(243); - } - - void IdentifierOrKeyword( -#line 2776 "VBNET.ATG" -out string name) { - -#line 2778 "VBNET.ATG" - lexer.NextToken(); name = t.val; - } - - void InvocationExpression( -#line 1610 "VBNET.ATG" -ref Expression pexpr) { - -#line 1611 "VBNET.ATG" - List typeParameters = new List(); - List parameters = null; - TypeReference type; - Expect(24); - -#line 1615 "VBNET.ATG" - Location start = t.Location; - if (la.kind == 200) { - lexer.NextToken(); - TypeName( -#line 1617 "VBNET.ATG" -out type); - -#line 1617 "VBNET.ATG" - if (type != null) typeParameters.Add(type); - while (la.kind == 12) { - lexer.NextToken(); - TypeName( -#line 1620 "VBNET.ATG" -out type); - -#line 1620 "VBNET.ATG" - if (type != null) typeParameters.Add(type); - } - Expect(25); - if (la.kind == 10) { - lexer.NextToken(); - Identifier(); - -#line 1625 "VBNET.ATG" - pexpr = new FieldReferenceExpression(GetTypeReferenceExpression(pexpr, typeParameters), t.val); - } else if (la.kind == 24) { - lexer.NextToken(); - ArgumentList( -#line 1627 "VBNET.ATG" -out parameters); - Expect(25); - -#line 1629 "VBNET.ATG" - pexpr = new InvocationExpression(pexpr, parameters, typeParameters); - } else SynErr(244); - } else if (StartOf(30)) { - ArgumentList( -#line 1631 "VBNET.ATG" -out parameters); - Expect(25); - -#line 1633 "VBNET.ATG" - pexpr = new InvocationExpression(pexpr, parameters, typeParameters); - } else SynErr(245); - -#line 1635 "VBNET.ATG" - pexpr.StartLocation = start; pexpr.EndLocation = t.Location; - } - - void PrimitiveTypeName( -#line 2783 "VBNET.ATG" -out string type) { - -#line 2784 "VBNET.ATG" - type = String.Empty; - switch (la.kind) { - case 52: { - lexer.NextToken(); - -#line 2785 "VBNET.ATG" - type = "Boolean"; - break; - } - case 76: { - lexer.NextToken(); - -#line 2786 "VBNET.ATG" - type = "Date"; - break; - } - case 65: { - lexer.NextToken(); - -#line 2787 "VBNET.ATG" - type = "Char"; - break; - } - case 165: { - lexer.NextToken(); - -#line 2788 "VBNET.ATG" - type = "String"; - break; - } - case 77: { - lexer.NextToken(); - -#line 2789 "VBNET.ATG" - type = "Decimal"; - break; - } - case 54: { - lexer.NextToken(); - -#line 2790 "VBNET.ATG" - type = "Byte"; - break; - } - case 159: { - lexer.NextToken(); - -#line 2791 "VBNET.ATG" - type = "Short"; - break; - } - case 111: { - lexer.NextToken(); - -#line 2792 "VBNET.ATG" - type = "Integer"; - break; - } - case 117: { - lexer.NextToken(); - -#line 2793 "VBNET.ATG" - type = "Long"; - break; - } - case 160: { - lexer.NextToken(); - -#line 2794 "VBNET.ATG" - type = "Single"; - break; - } - case 84: { - lexer.NextToken(); - -#line 2795 "VBNET.ATG" - type = "Double"; - break; - } - case 191: { - lexer.NextToken(); - -#line 2796 "VBNET.ATG" - type = "UInteger"; - break; - } - case 192: { - lexer.NextToken(); - -#line 2797 "VBNET.ATG" - type = "ULong"; - break; - } - case 193: { - lexer.NextToken(); - -#line 2798 "VBNET.ATG" - type = "UShort"; - break; - } - case 190: { - lexer.NextToken(); - -#line 2799 "VBNET.ATG" - type = "SByte"; - break; - } - default: SynErr(246); break; - } - } - - void CastTarget( -#line 1640 "VBNET.ATG" -out TypeReference type) { - -#line 1642 "VBNET.ATG" - type = null; - - switch (la.kind) { - case 59: { - lexer.NextToken(); - -#line 1644 "VBNET.ATG" - type = new TypeReference("System.Boolean"); - break; - } - case 60: { - lexer.NextToken(); - -#line 1645 "VBNET.ATG" - type = new TypeReference("System.Byte"); - break; - } - case 194: { - lexer.NextToken(); - -#line 1646 "VBNET.ATG" - type = new TypeReference("System.SByte"); - break; - } - case 61: { - lexer.NextToken(); - -#line 1647 "VBNET.ATG" - type = new TypeReference("System.Char"); - break; - } - case 62: { - lexer.NextToken(); - -#line 1648 "VBNET.ATG" - type = new TypeReference("System.DateTime"); - break; - } - case 64: { - lexer.NextToken(); - -#line 1649 "VBNET.ATG" - type = new TypeReference("System.Decimal"); - break; - } - case 63: { - lexer.NextToken(); - -#line 1650 "VBNET.ATG" - type = new TypeReference("System.Double"); - break; - } - case 72: { - lexer.NextToken(); - -#line 1651 "VBNET.ATG" - type = new TypeReference("System.Int16"); - break; - } - case 66: { - lexer.NextToken(); - -#line 1652 "VBNET.ATG" - type = new TypeReference("System.Int32"); - break; - } - case 68: { - lexer.NextToken(); - -#line 1653 "VBNET.ATG" - type = new TypeReference("System.Int64"); - break; - } - case 195: { - lexer.NextToken(); - -#line 1654 "VBNET.ATG" - type = new TypeReference("System.UInt16"); - break; - } - case 196: { - lexer.NextToken(); - -#line 1655 "VBNET.ATG" - type = new TypeReference("System.UInt32"); - break; - } - case 197: { - lexer.NextToken(); - -#line 1656 "VBNET.ATG" - type = new TypeReference("System.UInt64"); - break; - } - case 69: { - lexer.NextToken(); - -#line 1657 "VBNET.ATG" - type = new TypeReference("System.Object"); - break; - } - case 73: { - lexer.NextToken(); - -#line 1658 "VBNET.ATG" - type = new TypeReference("System.Single"); - break; - } - case 74: { - lexer.NextToken(); - -#line 1659 "VBNET.ATG" - type = new TypeReference("System.String"); - break; - } - default: SynErr(247); break; - } - } - - void GetTypeTypeName( -#line 1917 "VBNET.ATG" -out TypeReference typeref) { - -#line 1918 "VBNET.ATG" - ArrayList rank = null; - NonArrayTypeName( -#line 1920 "VBNET.ATG" -out typeref, true); - ArrayTypeModifiers( -#line 1921 "VBNET.ATG" -out rank); - -#line 1922 "VBNET.ATG" - if (rank != null && typeref != null) { - typeref.RankSpecifier = (int[])rank.ToArray(typeof(int)); - } - - } - - void ArgumentList( -#line 1852 "VBNET.ATG" -out List arguments) { - -#line 1854 "VBNET.ATG" - arguments = new List(); - Expression expr = null; - - if (StartOf(27)) { - Argument( -#line 1857 "VBNET.ATG" -out expr); - } - while (la.kind == 12) { - lexer.NextToken(); - -#line 1858 "VBNET.ATG" - arguments.Add(expr ?? Expression.Null); expr = null; - if (StartOf(27)) { - Argument( -#line 1859 "VBNET.ATG" -out expr); - } - -#line 1860 "VBNET.ATG" - if (expr == null) expr = Expression.Null; - } - -#line 1862 "VBNET.ATG" - if (expr != null) arguments.Add(expr); - } - - void ConjunctionExpr( -#line 1678 "VBNET.ATG" -out Expression outExpr) { - -#line 1680 "VBNET.ATG" - Expression expr; - BinaryOperatorType op = BinaryOperatorType.None; - - NotExpr( -#line 1683 "VBNET.ATG" -out outExpr); - while (la.kind == 45 || la.kind == 46) { - if (la.kind == 45) { - lexer.NextToken(); - -#line 1686 "VBNET.ATG" - op = BinaryOperatorType.BitwiseAnd; - } else { - lexer.NextToken(); - -#line 1687 "VBNET.ATG" - op = BinaryOperatorType.LogicalAnd; - } - NotExpr( -#line 1689 "VBNET.ATG" -out expr); - -#line 1689 "VBNET.ATG" - outExpr = new BinaryOperatorExpression(outExpr, op, expr); - } - } - - void NotExpr( -#line 1693 "VBNET.ATG" -out Expression outExpr) { - -#line 1694 "VBNET.ATG" - UnaryOperatorType uop = UnaryOperatorType.None; - while (la.kind == 129) { - lexer.NextToken(); - -#line 1695 "VBNET.ATG" - uop = UnaryOperatorType.Not; - } - ComparisonExpr( -#line 1696 "VBNET.ATG" -out outExpr); - -#line 1697 "VBNET.ATG" - if (uop != UnaryOperatorType.None) - outExpr = new UnaryOperatorExpression(outExpr, uop); - - } - - void ComparisonExpr( -#line 1702 "VBNET.ATG" -out Expression outExpr) { - -#line 1704 "VBNET.ATG" - Expression expr; - BinaryOperatorType op = BinaryOperatorType.None; - - ShiftExpr( -#line 1707 "VBNET.ATG" -out outExpr); - while (StartOf(31)) { - switch (la.kind) { - case 27: { - lexer.NextToken(); - -#line 1710 "VBNET.ATG" - op = BinaryOperatorType.LessThan; - break; - } - case 26: { - lexer.NextToken(); - -#line 1711 "VBNET.ATG" - op = BinaryOperatorType.GreaterThan; - break; - } - case 30: { - lexer.NextToken(); - -#line 1712 "VBNET.ATG" - op = BinaryOperatorType.LessThanOrEqual; - break; - } - case 29: { - lexer.NextToken(); - -#line 1713 "VBNET.ATG" - op = BinaryOperatorType.GreaterThanOrEqual; - break; - } - case 28: { - lexer.NextToken(); - -#line 1714 "VBNET.ATG" - op = BinaryOperatorType.InEquality; - break; - } - case 11: { - lexer.NextToken(); - -#line 1715 "VBNET.ATG" - op = BinaryOperatorType.Equality; - break; - } - case 116: { - lexer.NextToken(); - -#line 1716 "VBNET.ATG" - op = BinaryOperatorType.Like; - break; - } - case 113: { - lexer.NextToken(); - -#line 1717 "VBNET.ATG" - op = BinaryOperatorType.ReferenceEquality; - break; - } - case 189: { - lexer.NextToken(); - -#line 1718 "VBNET.ATG" - op = BinaryOperatorType.ReferenceInequality; - break; - } - } - if (StartOf(32)) { - ShiftExpr( -#line 1721 "VBNET.ATG" -out expr); - -#line 1721 "VBNET.ATG" - outExpr = new BinaryOperatorExpression(outExpr, op, expr); - } else if (la.kind == 129) { - lexer.NextToken(); - ShiftExpr( -#line 1724 "VBNET.ATG" -out expr); - -#line 1724 "VBNET.ATG" - outExpr = new BinaryOperatorExpression(outExpr, op, new UnaryOperatorExpression(expr, UnaryOperatorType.Not)); - } else SynErr(248); - } - } - - void ShiftExpr( -#line 1729 "VBNET.ATG" -out Expression outExpr) { - -#line 1731 "VBNET.ATG" - Expression expr; - BinaryOperatorType op = BinaryOperatorType.None; - - ConcatenationExpr( -#line 1734 "VBNET.ATG" -out outExpr); - while (la.kind == 31 || la.kind == 32) { - if (la.kind == 31) { - lexer.NextToken(); - -#line 1737 "VBNET.ATG" - op = BinaryOperatorType.ShiftLeft; - } else { - lexer.NextToken(); - -#line 1738 "VBNET.ATG" - op = BinaryOperatorType.ShiftRight; - } - ConcatenationExpr( -#line 1740 "VBNET.ATG" -out expr); - -#line 1740 "VBNET.ATG" - outExpr = new BinaryOperatorExpression(outExpr, op, expr); - } - } - - void ConcatenationExpr( -#line 1744 "VBNET.ATG" -out Expression outExpr) { - -#line 1745 "VBNET.ATG" - Expression expr; - AdditiveExpr( -#line 1747 "VBNET.ATG" -out outExpr); - while (la.kind == 19) { - lexer.NextToken(); - AdditiveExpr( -#line 1747 "VBNET.ATG" -out expr); - -#line 1747 "VBNET.ATG" - outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.Concat, expr); - } - } - - void AdditiveExpr( -#line 1750 "VBNET.ATG" -out Expression outExpr) { - -#line 1752 "VBNET.ATG" - Expression expr; - BinaryOperatorType op = BinaryOperatorType.None; - - ModuloExpr( -#line 1755 "VBNET.ATG" -out outExpr); - while (la.kind == 14 || la.kind == 15) { - if (la.kind == 14) { - lexer.NextToken(); - -#line 1758 "VBNET.ATG" - op = BinaryOperatorType.Add; - } else { - lexer.NextToken(); - -#line 1759 "VBNET.ATG" - op = BinaryOperatorType.Subtract; - } - ModuloExpr( -#line 1761 "VBNET.ATG" -out expr); - -#line 1761 "VBNET.ATG" - outExpr = new BinaryOperatorExpression(outExpr, op, expr); - } - } - - void ModuloExpr( -#line 1765 "VBNET.ATG" -out Expression outExpr) { - -#line 1766 "VBNET.ATG" - Expression expr; - IntegerDivisionExpr( -#line 1768 "VBNET.ATG" -out outExpr); - while (la.kind == 120) { - lexer.NextToken(); - IntegerDivisionExpr( -#line 1768 "VBNET.ATG" -out expr); - -#line 1768 "VBNET.ATG" - outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.Modulus, expr); - } - } - - void IntegerDivisionExpr( -#line 1771 "VBNET.ATG" -out Expression outExpr) { - -#line 1772 "VBNET.ATG" - Expression expr; - MultiplicativeExpr( -#line 1774 "VBNET.ATG" -out outExpr); - while (la.kind == 18) { - lexer.NextToken(); - MultiplicativeExpr( -#line 1774 "VBNET.ATG" -out expr); - -#line 1774 "VBNET.ATG" - outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.DivideInteger, expr); - } - } - - void MultiplicativeExpr( -#line 1777 "VBNET.ATG" -out Expression outExpr) { - -#line 1779 "VBNET.ATG" - Expression expr; - BinaryOperatorType op = BinaryOperatorType.None; - - UnaryExpr( -#line 1782 "VBNET.ATG" -out outExpr); - while (la.kind == 16 || la.kind == 17) { - if (la.kind == 16) { - lexer.NextToken(); - -#line 1785 "VBNET.ATG" - op = BinaryOperatorType.Multiply; - } else { - lexer.NextToken(); - -#line 1786 "VBNET.ATG" - op = BinaryOperatorType.Divide; - } - UnaryExpr( -#line 1788 "VBNET.ATG" -out expr); - -#line 1788 "VBNET.ATG" - outExpr = new BinaryOperatorExpression(outExpr, op, expr); - } - } - - void UnaryExpr( -#line 1792 "VBNET.ATG" -out Expression uExpr) { - -#line 1794 "VBNET.ATG" - Expression expr; - UnaryOperatorType uop = UnaryOperatorType.None; - bool isUOp = false; - - while (la.kind == 14 || la.kind == 15 || la.kind == 16) { - if (la.kind == 14) { - lexer.NextToken(); - -#line 1798 "VBNET.ATG" - uop = UnaryOperatorType.Plus; isUOp = true; - } else if (la.kind == 15) { - lexer.NextToken(); - -#line 1799 "VBNET.ATG" - uop = UnaryOperatorType.Minus; isUOp = true; - } else { - lexer.NextToken(); - -#line 1800 "VBNET.ATG" - uop = UnaryOperatorType.Star; isUOp = true; - } - } - ExponentiationExpr( -#line 1802 "VBNET.ATG" -out expr); - -#line 1804 "VBNET.ATG" - if (isUOp) { - uExpr = new UnaryOperatorExpression(expr, uop); - } else { - uExpr = expr; - } - - } - - void ExponentiationExpr( -#line 1812 "VBNET.ATG" -out Expression outExpr) { - -#line 1813 "VBNET.ATG" - Expression expr; - SimpleExpr( -#line 1815 "VBNET.ATG" -out outExpr); - while (la.kind == 20) { - lexer.NextToken(); - SimpleExpr( -#line 1815 "VBNET.ATG" -out expr); - -#line 1815 "VBNET.ATG" - outExpr = new BinaryOperatorExpression(outExpr, BinaryOperatorType.Power, expr); - } - } - - void NormalOrReDimArgumentList( -#line 1866 "VBNET.ATG" -out List arguments, out bool canBeNormal, out bool canBeRedim) { - -#line 1868 "VBNET.ATG" - arguments = new List(); - canBeNormal = true; canBeRedim = !IsNamedAssign(); - Expression expr = null; - - if (StartOf(27)) { - Argument( -#line 1873 "VBNET.ATG" -out expr); - if (la.kind == 172) { - lexer.NextToken(); - -#line 1874 "VBNET.ATG" - EnsureIsZero(expr); canBeNormal = false; - Expr( -#line 1875 "VBNET.ATG" -out expr); - } - } - while (la.kind == 12) { - lexer.NextToken(); - -#line 1878 "VBNET.ATG" - if (expr == null) canBeRedim = false; - -#line 1879 "VBNET.ATG" - arguments.Add(expr ?? Expression.Null); expr = null; - -#line 1880 "VBNET.ATG" - canBeRedim &= !IsNamedAssign(); - if (StartOf(27)) { - Argument( -#line 1881 "VBNET.ATG" -out expr); - if (la.kind == 172) { - lexer.NextToken(); - -#line 1882 "VBNET.ATG" - EnsureIsZero(expr); canBeNormal = false; - Expr( -#line 1883 "VBNET.ATG" -out expr); - } - } - -#line 1885 "VBNET.ATG" - if (expr == null) { canBeRedim = false; expr = Expression.Null; } - } - -#line 1887 "VBNET.ATG" - if (expr != null) arguments.Add(expr); else canBeRedim = false; - } - - void ArrayTypeModifiers( -#line 1974 "VBNET.ATG" -out ArrayList arrayModifiers) { - -#line 1976 "VBNET.ATG" - arrayModifiers = new ArrayList(); - int i = 0; - - while ( -#line 1979 "VBNET.ATG" -IsDims()) { - Expect(24); - if (la.kind == 12 || la.kind == 25) { - RankList( -#line 1981 "VBNET.ATG" -out i); - } - -#line 1983 "VBNET.ATG" - arrayModifiers.Add(i); - - Expect(25); - } - -#line 1988 "VBNET.ATG" - if(arrayModifiers.Count == 0) { - arrayModifiers = null; - } - - } - - void Argument( -#line 1891 "VBNET.ATG" -out Expression argumentexpr) { - -#line 1893 "VBNET.ATG" - Expression expr; - argumentexpr = null; - string name; - - if ( -#line 1897 "VBNET.ATG" -IsNamedAssign()) { - Identifier(); - -#line 1897 "VBNET.ATG" - name = t.val; - Expect(13); - Expect(11); - Expr( -#line 1897 "VBNET.ATG" -out expr); - -#line 1899 "VBNET.ATG" - argumentexpr = new NamedArgumentExpression(name, expr); - - } else if (StartOf(27)) { - Expr( -#line 1902 "VBNET.ATG" -out argumentexpr); - } else SynErr(249); - } - - void QualIdentAndTypeArguments( -#line 1948 "VBNET.ATG" -out TypeReference typeref, bool canBeUnbound) { - -#line 1949 "VBNET.ATG" - string name; typeref = null; - Qualident( -#line 1951 "VBNET.ATG" -out name); - -#line 1952 "VBNET.ATG" - typeref = new TypeReference(name); - if ( -#line 1953 "VBNET.ATG" -la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) { - lexer.NextToken(); - Expect(200); - if ( -#line 1955 "VBNET.ATG" -canBeUnbound && (la.kind == Tokens.CloseParenthesis || la.kind == Tokens.Comma)) { - -#line 1956 "VBNET.ATG" - typeref.GenericTypes.Add(NullTypeReference.Instance); - while (la.kind == 12) { - lexer.NextToken(); - -#line 1957 "VBNET.ATG" - typeref.GenericTypes.Add(NullTypeReference.Instance); - } - } else if (StartOf(6)) { - TypeArgumentList( -#line 1958 "VBNET.ATG" -typeref.GenericTypes); - } else SynErr(250); - Expect(25); - } - } - - void TypeArgumentList( -#line 2001 "VBNET.ATG" -List typeArguments) { - -#line 2003 "VBNET.ATG" - TypeReference typeref; - - TypeName( -#line 2005 "VBNET.ATG" -out typeref); - -#line 2005 "VBNET.ATG" - if (typeref != null) typeArguments.Add(typeref); - while (la.kind == 12) { - lexer.NextToken(); - TypeName( -#line 2008 "VBNET.ATG" -out typeref); - -#line 2008 "VBNET.ATG" - if (typeref != null) typeArguments.Add(typeref); - } - } - - void RankList( -#line 1995 "VBNET.ATG" -out int i) { - -#line 1996 "VBNET.ATG" - i = 0; - while (la.kind == 12) { - lexer.NextToken(); - -#line 1997 "VBNET.ATG" - ++i; - } - } - - void Attribute( -#line 2033 "VBNET.ATG" -out ASTAttribute attribute) { - -#line 2034 "VBNET.ATG" - string name; - List positional = new List(); - List named = new List(); - - if (la.kind == 198) { - lexer.NextToken(); - Expect(10); - } - Qualident( -#line 2039 "VBNET.ATG" -out name); - if (la.kind == 24) { - AttributeArguments( -#line 2040 "VBNET.ATG" -positional, named); - } - -#line 2041 "VBNET.ATG" - attribute = new ASTAttribute(name, positional, named); - } - - void AttributeArguments( -#line 2045 "VBNET.ATG" -List positional, List named) { - -#line 2047 "VBNET.ATG" - bool nameFound = false; - string name = ""; - Expression expr; - - Expect(24); - if ( -#line 2053 "VBNET.ATG" -IsNotClosingParenthesis()) { - if ( -#line 2055 "VBNET.ATG" -IsNamedAssign()) { - -#line 2055 "VBNET.ATG" - nameFound = true; - IdentifierOrKeyword( -#line 2056 "VBNET.ATG" -out name); - if (la.kind == 13) { - lexer.NextToken(); - } - Expect(11); - } - Expr( -#line 2058 "VBNET.ATG" -out expr); - -#line 2060 "VBNET.ATG" - if (expr != null) { - if (string.IsNullOrEmpty(name)) { positional.Add(expr); } - else { named.Add(new NamedArgumentExpression(name, expr)); name = ""; } - } - - while (la.kind == 12) { - lexer.NextToken(); - if ( -#line 2068 "VBNET.ATG" -IsNamedAssign()) { - -#line 2068 "VBNET.ATG" - nameFound = true; - IdentifierOrKeyword( -#line 2069 "VBNET.ATG" -out name); - if (la.kind == 13) { - lexer.NextToken(); - } - Expect(11); - } else if (StartOf(27)) { - -#line 2071 "VBNET.ATG" - if (nameFound) Error("no positional argument after named argument"); - } else SynErr(251); - Expr( -#line 2072 "VBNET.ATG" -out expr); - -#line 2072 "VBNET.ATG" - if (expr != null) { if(name == "") positional.Add(expr); - else { named.Add(new NamedArgumentExpression(name, expr)); name = ""; } - } - - } - } - Expect(25); - } - - void FormalParameter( -#line 2141 "VBNET.ATG" -out ParameterDeclarationExpression p) { - -#line 2143 "VBNET.ATG" - TypeReference type = null; - ParamModifierList mod = new ParamModifierList(this); - Expression expr = null; - p = null;ArrayList arrayModifiers = null; - - while (StartOf(33)) { - ParameterModifier( -#line 2148 "VBNET.ATG" -mod); - } - Identifier(); - -#line 2149 "VBNET.ATG" - string parameterName = t.val; - if ( -#line 2150 "VBNET.ATG" -IsDims()) { - ArrayTypeModifiers( -#line 2150 "VBNET.ATG" -out arrayModifiers); - } - if (la.kind == 48) { - lexer.NextToken(); - TypeName( -#line 2151 "VBNET.ATG" -out type); - } - -#line 2153 "VBNET.ATG" - if(type != null) { - if (arrayModifiers != null) { - if (type.RankSpecifier != null) { - Error("array rank only allowed one time"); - } else { - type.RankSpecifier = (int[])arrayModifiers.ToArray(typeof(int)); - } - } - } else { - type = new TypeReference("System.Object", arrayModifiers == null ? null : (int[])arrayModifiers.ToArray(typeof(int))); - } - - if (la.kind == 11) { - lexer.NextToken(); - Expr( -#line 2165 "VBNET.ATG" -out expr); - } - -#line 2167 "VBNET.ATG" - mod.Check(); - p = new ParameterDeclarationExpression(type, parameterName, mod.Modifier, expr); - - } - - void ParameterModifier( -#line 2802 "VBNET.ATG" -ParamModifierList m) { - if (la.kind == 55) { - lexer.NextToken(); - -#line 2803 "VBNET.ATG" - m.Add(ParameterModifiers.In); - } else if (la.kind == 53) { - lexer.NextToken(); - -#line 2804 "VBNET.ATG" - m.Add(ParameterModifiers.Ref); - } else if (la.kind == 137) { - lexer.NextToken(); - -#line 2805 "VBNET.ATG" - m.Add(ParameterModifiers.Optional); - } else if (la.kind == 143) { - lexer.NextToken(); - -#line 2806 "VBNET.ATG" - m.Add(ParameterModifiers.Params); - } else SynErr(252); - } - - void Statement() { - -#line 2194 "VBNET.ATG" - Statement stmt = null; - Location startPos = la.Location; - string label = String.Empty; - - - if (la.kind == 1 || la.kind == 13) { - } else if ( -#line 2200 "VBNET.ATG" -IsLabel()) { - LabelName( -#line 2200 "VBNET.ATG" -out label); - -#line 2202 "VBNET.ATG" - compilationUnit.AddChild(new LabelStatement(t.val)); - - Expect(13); - Statement(); - } else if (StartOf(34)) { - EmbeddedStatement( -#line 2205 "VBNET.ATG" -out stmt); - -#line 2205 "VBNET.ATG" - compilationUnit.AddChild(stmt); - } else if (StartOf(35)) { - LocalDeclarationStatement( -#line 2206 "VBNET.ATG" -out stmt); - -#line 2206 "VBNET.ATG" - compilationUnit.AddChild(stmt); - } else SynErr(253); - -#line 2209 "VBNET.ATG" - if (stmt != null) { - stmt.StartLocation = startPos; - stmt.EndLocation = t.Location; - } - - } - - void LabelName( -#line 2585 "VBNET.ATG" -out string name) { - -#line 2587 "VBNET.ATG" - name = String.Empty; - - if (StartOf(13)) { - Identifier(); - -#line 2589 "VBNET.ATG" - name = t.val; - } else if (la.kind == 5) { - lexer.NextToken(); - -#line 2590 "VBNET.ATG" - name = t.val; - } else SynErr(254); - } - - void EmbeddedStatement( -#line 2248 "VBNET.ATG" -out Statement statement) { - -#line 2250 "VBNET.ATG" - Statement embeddedStatement = null; - statement = null; - Expression expr = null; - string name = String.Empty; - List p = null; - - switch (la.kind) { - case 94: { - lexer.NextToken(); - -#line 2256 "VBNET.ATG" - ExitType exitType = ExitType.None; - switch (la.kind) { - case 167: { - lexer.NextToken(); - -#line 2258 "VBNET.ATG" - exitType = ExitType.Sub; - break; - } - case 100: { - lexer.NextToken(); - -#line 2260 "VBNET.ATG" - exitType = ExitType.Function; - break; - } - case 146: { - lexer.NextToken(); - -#line 2262 "VBNET.ATG" - exitType = ExitType.Property; - break; - } - case 83: { - lexer.NextToken(); - -#line 2264 "VBNET.ATG" - exitType = ExitType.Do; - break; - } - case 98: { - lexer.NextToken(); - -#line 2266 "VBNET.ATG" - exitType = ExitType.For; - break; - } - case 174: { - lexer.NextToken(); - -#line 2268 "VBNET.ATG" - exitType = ExitType.Try; - break; - } - case 181: { - lexer.NextToken(); - -#line 2270 "VBNET.ATG" - exitType = ExitType.While; - break; - } - case 155: { - lexer.NextToken(); - -#line 2272 "VBNET.ATG" - exitType = ExitType.Select; - break; - } - default: SynErr(255); break; - } - -#line 2274 "VBNET.ATG" - statement = new ExitStatement(exitType); - break; - } - case 174: { - TryStatement( -#line 2275 "VBNET.ATG" -out statement); - break; - } - case 186: { - lexer.NextToken(); - -#line 2276 "VBNET.ATG" - ContinueType continueType = ContinueType.None; - if (la.kind == 83 || la.kind == 98 || la.kind == 181) { - if (la.kind == 83) { - lexer.NextToken(); - -#line 2276 "VBNET.ATG" - continueType = ContinueType.Do; - } else if (la.kind == 98) { - lexer.NextToken(); - -#line 2276 "VBNET.ATG" - continueType = ContinueType.For; - } else { - lexer.NextToken(); - -#line 2276 "VBNET.ATG" - continueType = ContinueType.While; - } - } - -#line 2276 "VBNET.ATG" - statement = new ContinueStatement(continueType); - break; - } - case 171: { - lexer.NextToken(); - if (StartOf(27)) { - Expr( -#line 2278 "VBNET.ATG" -out expr); - } - -#line 2278 "VBNET.ATG" - statement = new ThrowStatement(expr); - break; - } - case 154: { - lexer.NextToken(); - if (StartOf(27)) { - Expr( -#line 2280 "VBNET.ATG" -out expr); - } - -#line 2280 "VBNET.ATG" - statement = new ReturnStatement(expr); - break; - } - case 168: { - lexer.NextToken(); - Expr( -#line 2282 "VBNET.ATG" -out expr); - EndOfStmt(); - Block( -#line 2282 "VBNET.ATG" -out embeddedStatement); - Expect(88); - Expect(168); - -#line 2283 "VBNET.ATG" - statement = new LockStatement(expr, embeddedStatement); - break; - } - case 149: { - lexer.NextToken(); - Identifier(); - -#line 2285 "VBNET.ATG" - name = t.val; - if (la.kind == 24) { - lexer.NextToken(); - if (StartOf(30)) { - ArgumentList( -#line 2286 "VBNET.ATG" -out p); - } - Expect(25); - } - -#line 2287 "VBNET.ATG" - statement = new RaiseEventStatement(name, p); - break; - } - case 182: { - WithStatement( -#line 2289 "VBNET.ATG" -out statement); - break; - } - case 42: { - lexer.NextToken(); - -#line 2291 "VBNET.ATG" - Expression handlerExpr = null; - Expr( -#line 2292 "VBNET.ATG" -out expr); - Expect(12); - Expr( -#line 2292 "VBNET.ATG" -out handlerExpr); - -#line 2294 "VBNET.ATG" - statement = new AddHandlerStatement(expr, handlerExpr); - - break; - } - case 152: { - lexer.NextToken(); - -#line 2297 "VBNET.ATG" - Expression handlerExpr = null; - Expr( -#line 2298 "VBNET.ATG" -out expr); - Expect(12); - Expr( -#line 2298 "VBNET.ATG" -out handlerExpr); - -#line 2300 "VBNET.ATG" - statement = new RemoveHandlerStatement(expr, handlerExpr); - - break; - } - case 181: { - lexer.NextToken(); - Expr( -#line 2303 "VBNET.ATG" -out expr); - EndOfStmt(); - Block( -#line 2304 "VBNET.ATG" -out embeddedStatement); - Expect(88); - Expect(181); - -#line 2306 "VBNET.ATG" - statement = new DoLoopStatement(expr, embeddedStatement, ConditionType.While, ConditionPosition.Start); - - break; - } - case 83: { - lexer.NextToken(); - -#line 2311 "VBNET.ATG" - ConditionType conditionType = ConditionType.None; - - if (la.kind == 177 || la.kind == 181) { - WhileOrUntil( -#line 2314 "VBNET.ATG" -out conditionType); - Expr( -#line 2314 "VBNET.ATG" -out expr); - EndOfStmt(); - Block( -#line 2315 "VBNET.ATG" -out embeddedStatement); - Expect(118); - -#line 2318 "VBNET.ATG" - statement = new DoLoopStatement(expr, - embeddedStatement, - conditionType == ConditionType.While ? ConditionType.DoWhile : conditionType, - ConditionPosition.Start); - - } else if (la.kind == 1 || la.kind == 13) { - EndOfStmt(); - Block( -#line 2325 "VBNET.ATG" -out embeddedStatement); - Expect(118); - if (la.kind == 177 || la.kind == 181) { - WhileOrUntil( -#line 2326 "VBNET.ATG" -out conditionType); - Expr( -#line 2326 "VBNET.ATG" -out expr); - } - -#line 2328 "VBNET.ATG" - statement = new DoLoopStatement(expr, embeddedStatement, conditionType, ConditionPosition.End); - - } else SynErr(256); - break; - } - case 98: { - lexer.NextToken(); - -#line 2333 "VBNET.ATG" - Expression group = null; - TypeReference typeReference; - string typeName; - Location startLocation = t.Location; - - if (la.kind == 85) { - lexer.NextToken(); - LoopControlVariable( -#line 2340 "VBNET.ATG" -out typeReference, out typeName); - Expect(109); - Expr( -#line 2341 "VBNET.ATG" -out group); - EndOfStmt(); - Block( -#line 2342 "VBNET.ATG" -out embeddedStatement); - Expect(128); - if (StartOf(27)) { - Expr( -#line 2343 "VBNET.ATG" -out expr); - } - -#line 2345 "VBNET.ATG" - statement = new ForeachStatement(typeReference, - typeName, - group, - embeddedStatement, - expr); - statement.StartLocation = startLocation; - statement.EndLocation = t.EndLocation; - - - } else if (StartOf(13)) { - -#line 2356 "VBNET.ATG" - Expression start = null; - Expression end = null; - Expression step = null; - Expression nextExpr = null;List nextExpressions = null; - - LoopControlVariable( -#line 2361 "VBNET.ATG" -out typeReference, out typeName); - Expect(11); - Expr( -#line 2362 "VBNET.ATG" -out start); - Expect(172); - Expr( -#line 2362 "VBNET.ATG" -out end); - if (la.kind == 162) { - lexer.NextToken(); - Expr( -#line 2362 "VBNET.ATG" -out step); - } - EndOfStmt(); - Block( -#line 2363 "VBNET.ATG" -out embeddedStatement); - Expect(128); - if (StartOf(27)) { - Expr( -#line 2366 "VBNET.ATG" -out nextExpr); - -#line 2366 "VBNET.ATG" - nextExpressions = new List(); nextExpressions.Add(nextExpr); - while (la.kind == 12) { - lexer.NextToken(); - Expr( -#line 2367 "VBNET.ATG" -out nextExpr); - -#line 2367 "VBNET.ATG" - nextExpressions.Add(nextExpr); - } - } - -#line 2370 "VBNET.ATG" - statement = new ForNextStatement(typeReference, typeName, start, end, step, embeddedStatement, nextExpressions); - - } else SynErr(257); - break; - } - case 92: { - lexer.NextToken(); - Expr( -#line 2374 "VBNET.ATG" -out expr); - -#line 2374 "VBNET.ATG" - statement = new ErrorStatement(expr); - break; - } - case 151: { - lexer.NextToken(); - -#line 2376 "VBNET.ATG" - bool isPreserve = false; - if (la.kind == 144) { - lexer.NextToken(); - -#line 2376 "VBNET.ATG" - isPreserve = true; - } - ReDimClause( -#line 2377 "VBNET.ATG" -out expr); - -#line 2379 "VBNET.ATG" - ReDimStatement reDimStatement = new ReDimStatement(isPreserve); - statement = reDimStatement; - InvocationExpression redimClause = expr as InvocationExpression; - if (redimClause != null) { reDimStatement.ReDimClauses.Add(redimClause); } - - while (la.kind == 12) { - lexer.NextToken(); - ReDimClause( -#line 2384 "VBNET.ATG" -out expr); - -#line 2385 "VBNET.ATG" - redimClause = expr as InvocationExpression; - -#line 2386 "VBNET.ATG" - if (redimClause != null) { reDimStatement.ReDimClauses.Add(redimClause); } - } - break; - } - case 91: { - lexer.NextToken(); - Expr( -#line 2390 "VBNET.ATG" -out expr); - -#line 2391 "VBNET.ATG" - List arrays = new List(); - if (expr != null) { arrays.Add(expr);} - EraseStatement eraseStatement = new EraseStatement(arrays); - - - while (la.kind == 12) { - lexer.NextToken(); - Expr( -#line 2396 "VBNET.ATG" -out expr); - -#line 2396 "VBNET.ATG" - if (expr != null) { arrays.Add(expr); } - } - -#line 2397 "VBNET.ATG" - statement = eraseStatement; - break; - } - case 163: { - lexer.NextToken(); - -#line 2399 "VBNET.ATG" - statement = new StopStatement(); - break; - } - case 106: { - lexer.NextToken(); - Expr( -#line 2401 "VBNET.ATG" -out expr); - if (la.kind == 170) { - lexer.NextToken(); - } - if ( -#line 2403 "VBNET.ATG" -IsEndStmtAhead()) { - Expect(88); - -#line 2403 "VBNET.ATG" - statement = new IfElseStatement(expr, new EndStatement()); - } else if (la.kind == 1 || la.kind == 13) { - EndOfStmt(); - Block( -#line 2406 "VBNET.ATG" -out embeddedStatement); - -#line 2408 "VBNET.ATG" - IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement); - - while (la.kind == 87 || -#line 2412 "VBNET.ATG" -IsElseIf()) { - if ( -#line 2412 "VBNET.ATG" -IsElseIf()) { - Expect(86); - Expect(106); - } else { - lexer.NextToken(); - } - -#line 2415 "VBNET.ATG" - Expression condition = null; Statement block = null; - Expr( -#line 2416 "VBNET.ATG" -out condition); - if (la.kind == 170) { - lexer.NextToken(); - } - EndOfStmt(); - Block( -#line 2417 "VBNET.ATG" -out block); - -#line 2419 "VBNET.ATG" - ifStatement.ElseIfSections.Add(new ElseIfSection(condition, block)); - - } - if (la.kind == 86) { - lexer.NextToken(); - EndOfStmt(); - Block( -#line 2424 "VBNET.ATG" -out embeddedStatement); - -#line 2426 "VBNET.ATG" - ifStatement.FalseStatement.Add(embeddedStatement); - - } - Expect(88); - Expect(106); - -#line 2430 "VBNET.ATG" - statement = ifStatement; - - } else if (StartOf(34)) { - EmbeddedStatement( -#line 2433 "VBNET.ATG" -out embeddedStatement); - -#line 2435 "VBNET.ATG" - IfElseStatement ifStatement = new IfElseStatement(expr, embeddedStatement); - - while (la.kind == 13) { - lexer.NextToken(); - EmbeddedStatement( -#line 2437 "VBNET.ATG" -out embeddedStatement); - -#line 2437 "VBNET.ATG" - ifStatement.TrueStatement.Add(embeddedStatement); - } - if (la.kind == 86) { - lexer.NextToken(); - if (StartOf(34)) { - EmbeddedStatement( -#line 2439 "VBNET.ATG" -out embeddedStatement); - } - -#line 2441 "VBNET.ATG" - ifStatement.FalseStatement.Add(embeddedStatement); - - while (la.kind == 13) { - lexer.NextToken(); - EmbeddedStatement( -#line 2444 "VBNET.ATG" -out embeddedStatement); - -#line 2445 "VBNET.ATG" - ifStatement.FalseStatement.Add(embeddedStatement); - } - } - -#line 2448 "VBNET.ATG" - statement = ifStatement; - } else SynErr(258); - break; - } - case 155: { - lexer.NextToken(); - if (la.kind == 57) { - lexer.NextToken(); - } - Expr( -#line 2451 "VBNET.ATG" -out expr); - EndOfStmt(); - -#line 2452 "VBNET.ATG" - List selectSections = new List(); - Statement block = null; - - while (la.kind == 57) { - -#line 2456 "VBNET.ATG" - List caseClauses = null; - lexer.NextToken(); - CaseClauses( -#line 2457 "VBNET.ATG" -out caseClauses); - if ( -#line 2457 "VBNET.ATG" -IsNotStatementSeparator()) { - lexer.NextToken(); - } - EndOfStmt(); - -#line 2459 "VBNET.ATG" - SwitchSection selectSection = new SwitchSection(caseClauses); - - Block( -#line 2461 "VBNET.ATG" -out block); - -#line 2463 "VBNET.ATG" - selectSection.Children = block.Children; - selectSections.Add(selectSection); - - } - -#line 2467 "VBNET.ATG" - statement = new SwitchStatement(expr, selectSections); - Expect(88); - Expect(155); - break; - } - case 135: { - -#line 2469 "VBNET.ATG" - OnErrorStatement onErrorStatement = null; - OnErrorStatement( -#line 2470 "VBNET.ATG" -out onErrorStatement); - -#line 2470 "VBNET.ATG" - statement = onErrorStatement; - break; - } - case 104: { - -#line 2471 "VBNET.ATG" - GotoStatement goToStatement = null; - GotoStatement( -#line 2472 "VBNET.ATG" -out goToStatement); - -#line 2472 "VBNET.ATG" - statement = goToStatement; - break; - } - case 153: { - -#line 2473 "VBNET.ATG" - ResumeStatement resumeStatement = null; - ResumeStatement( -#line 2474 "VBNET.ATG" -out resumeStatement); - -#line 2474 "VBNET.ATG" - statement = resumeStatement; - break; - } - case 2: case 3: case 4: case 5: case 6: case 7: case 8: case 9: case 10: case 24: case 43: case 47: case 49: case 50: case 51: case 52: case 54: case 59: case 60: case 61: case 62: case 63: case 64: case 65: case 66: case 68: case 69: case 70: case 72: case 73: case 74: case 75: case 76: case 77: case 82: case 84: case 96: case 102: case 111: case 117: case 119: case 124: case 125: case 127: case 130: case 133: case 144: case 159: case 160: case 165: case 169: case 173: case 175: case 176: case 177: case 190: case 191: case 192: case 193: case 194: case 195: case 196: case 197: case 198: case 199: case 204: { - -#line 2477 "VBNET.ATG" - Expression val = null; - AssignmentOperatorType op; - - bool mustBeAssignment = la.kind == Tokens.Plus || la.kind == Tokens.Minus || - la.kind == Tokens.Not || la.kind == Tokens.Times; - - SimpleExpr( -#line 2483 "VBNET.ATG" -out expr); - if (StartOf(36)) { - AssignmentOperator( -#line 2485 "VBNET.ATG" -out op); - Expr( -#line 2485 "VBNET.ATG" -out val); - -#line 2485 "VBNET.ATG" - expr = new AssignmentExpression(expr, op, val); - } else if (la.kind == 1 || la.kind == 13 || la.kind == 86) { - -#line 2486 "VBNET.ATG" - if (mustBeAssignment) Error("error in assignment."); - } else SynErr(259); - -#line 2489 "VBNET.ATG" - // a field reference expression that stands alone is a - // invocation expression without parantheses and arguments - if(expr is FieldReferenceExpression || expr is IdentifierExpression) { - expr = new InvocationExpression(expr); - } - statement = new ExpressionStatement(expr); - - break; - } - case 56: { - lexer.NextToken(); - SimpleExpr( -#line 2496 "VBNET.ATG" -out expr); - -#line 2496 "VBNET.ATG" - statement = new ExpressionStatement(expr); - break; - } - case 188: { - lexer.NextToken(); - -#line 2498 "VBNET.ATG" - Statement block; - if ( -#line 2499 "VBNET.ATG" -Peek(1).kind == Tokens.As) { - -#line 2500 "VBNET.ATG" - LocalVariableDeclaration resourceAquisition = new LocalVariableDeclaration(Modifiers.None); - VariableDeclarator( -#line 2501 "VBNET.ATG" -resourceAquisition.Variables); - while (la.kind == 12) { - lexer.NextToken(); - VariableDeclarator( -#line 2503 "VBNET.ATG" -resourceAquisition.Variables); - } - Block( -#line 2505 "VBNET.ATG" -out block); - -#line 2506 "VBNET.ATG" - statement = new UsingStatement(resourceAquisition, block); - } else if (StartOf(27)) { - Expr( -#line 2507 "VBNET.ATG" -out expr); - Block( -#line 2508 "VBNET.ATG" -out block); - -#line 2509 "VBNET.ATG" - statement = new UsingStatement(new ExpressionStatement(expr), block); - } else SynErr(260); - Expect(88); - Expect(188); - break; - } - default: SynErr(261); break; - } - } - - void LocalDeclarationStatement( -#line 2217 "VBNET.ATG" -out Statement statement) { - -#line 2219 "VBNET.ATG" - ModifierList m = new ModifierList(); - LocalVariableDeclaration localVariableDeclaration; - bool dimfound = false; - - while (la.kind == 71 || la.kind == 81 || la.kind == 161) { - if (la.kind == 71) { - lexer.NextToken(); - -#line 2225 "VBNET.ATG" - m.Add(Modifiers.Const, t.Location); - } else if (la.kind == 161) { - lexer.NextToken(); - -#line 2226 "VBNET.ATG" - m.Add(Modifiers.Static, t.Location); - } else { - lexer.NextToken(); - -#line 2227 "VBNET.ATG" - dimfound = true; - } - } - -#line 2230 "VBNET.ATG" - if(dimfound && (m.Modifier & Modifiers.Const) != 0) { - Error("Dim is not allowed on constants."); - } - - if(m.isNone && dimfound == false) { - Error("Const, Dim or Static expected"); - } - - localVariableDeclaration = new LocalVariableDeclaration(m.Modifier); - localVariableDeclaration.StartLocation = t.Location; - - VariableDeclarator( -#line 2241 "VBNET.ATG" -localVariableDeclaration.Variables); - while (la.kind == 12) { - lexer.NextToken(); - VariableDeclarator( -#line 2242 "VBNET.ATG" -localVariableDeclaration.Variables); - } - -#line 2244 "VBNET.ATG" - statement = localVariableDeclaration; - - } - - void TryStatement( -#line 2699 "VBNET.ATG" -out Statement tryStatement) { - -#line 2701 "VBNET.ATG" - Statement blockStmt = null, finallyStmt = null;List catchClauses = null; - - Expect(174); - EndOfStmt(); - Block( -#line 2704 "VBNET.ATG" -out blockStmt); - if (la.kind == 58 || la.kind == 88 || la.kind == 97) { - CatchClauses( -#line 2705 "VBNET.ATG" -out catchClauses); - } - if (la.kind == 97) { - lexer.NextToken(); - EndOfStmt(); - Block( -#line 2706 "VBNET.ATG" -out finallyStmt); - } - Expect(88); - Expect(174); - -#line 2709 "VBNET.ATG" - tryStatement = new TryCatchStatement(blockStmt, catchClauses, finallyStmt); - - } - - void WithStatement( -#line 2679 "VBNET.ATG" -out Statement withStatement) { - -#line 2681 "VBNET.ATG" - Statement blockStmt = null; - Expression expr = null; - - Expect(182); - -#line 2684 "VBNET.ATG" - Location start = t.Location; - Expr( -#line 2685 "VBNET.ATG" -out expr); - EndOfStmt(); - -#line 2687 "VBNET.ATG" - withStatement = new WithStatement(expr); - withStatement.StartLocation = start; - - Block( -#line 2690 "VBNET.ATG" -out blockStmt); - -#line 2692 "VBNET.ATG" - ((WithStatement)withStatement).Body = (BlockStatement)blockStmt; - - Expect(88); - Expect(182); - -#line 2695 "VBNET.ATG" - withStatement.EndLocation = t.Location; - } - - void WhileOrUntil( -#line 2672 "VBNET.ATG" -out ConditionType conditionType) { - -#line 2673 "VBNET.ATG" - conditionType = ConditionType.None; - if (la.kind == 181) { - lexer.NextToken(); - -#line 2674 "VBNET.ATG" - conditionType = ConditionType.While; - } else if (la.kind == 177) { - lexer.NextToken(); - -#line 2675 "VBNET.ATG" - conditionType = ConditionType.Until; - } else SynErr(262); - } - - void LoopControlVariable( -#line 2515 "VBNET.ATG" -out TypeReference type, out string name) { - -#line 2516 "VBNET.ATG" - ArrayList arrayModifiers = null; - type = null; - - Qualident( -#line 2520 "VBNET.ATG" -out name); - if ( -#line 2521 "VBNET.ATG" -IsDims()) { - ArrayTypeModifiers( -#line 2521 "VBNET.ATG" -out arrayModifiers); - } - if (la.kind == 48) { - lexer.NextToken(); - TypeName( -#line 2522 "VBNET.ATG" -out type); - -#line 2522 "VBNET.ATG" - if (name.IndexOf('.') > 0) { Error("No type def for 'for each' member indexer allowed."); } - } - -#line 2524 "VBNET.ATG" - if (type != null) { - if(type.RankSpecifier != null && arrayModifiers != null) { - Error("array rank only allowed one time"); - } else if (arrayModifiers != null) { - type.RankSpecifier = (int[])arrayModifiers.ToArray(typeof(int)); - } - } - - } - - void ReDimClause( -#line 2594 "VBNET.ATG" -out Expression expr) { - SimpleNonInvocationExpression( -#line 2596 "VBNET.ATG" -out expr); - ReDimClauseInternal( -#line 2597 "VBNET.ATG" -ref expr); - } - - void CaseClauses( -#line 2632 "VBNET.ATG" -out List caseClauses) { - -#line 2634 "VBNET.ATG" - caseClauses = new List(); - CaseLabel caseClause = null; - - CaseClause( -#line 2637 "VBNET.ATG" -out caseClause); - -#line 2637 "VBNET.ATG" - if (caseClause != null) { caseClauses.Add(caseClause); } - while (la.kind == 12) { - lexer.NextToken(); - CaseClause( -#line 2638 "VBNET.ATG" -out caseClause); - -#line 2638 "VBNET.ATG" - if (caseClause != null) { caseClauses.Add(caseClause); } - } - } - - void OnErrorStatement( -#line 2535 "VBNET.ATG" -out OnErrorStatement stmt) { - -#line 2537 "VBNET.ATG" - stmt = null; - GotoStatement goToStatement = null; - - Expect(135); - Expect(92); - if ( -#line 2543 "VBNET.ATG" -IsNegativeLabelName()) { - Expect(104); - Expect(15); - Expect(5); - -#line 2545 "VBNET.ATG" - long intLabel = Int64.Parse(t.val); - if(intLabel != 1) { - Error("invalid label in on error statement."); - } - stmt = new OnErrorStatement(new GotoStatement((intLabel * -1).ToString())); - - } else if (la.kind == 104) { - GotoStatement( -#line 2551 "VBNET.ATG" -out goToStatement); - -#line 2553 "VBNET.ATG" - string val = goToStatement.Label; - - // if value is numeric, make sure that is 0 - try { - long intLabel = Int64.Parse(val); - if(intLabel != 0) { - Error("invalid label in on error statement."); - } - } catch { - } - stmt = new OnErrorStatement(goToStatement); - - } else if (la.kind == 153) { - lexer.NextToken(); - Expect(128); - -#line 2567 "VBNET.ATG" - stmt = new OnErrorStatement(new ResumeStatement(true)); - - } else SynErr(263); - } - - void GotoStatement( -#line 2573 "VBNET.ATG" -out GotoStatement goToStatement) { - -#line 2575 "VBNET.ATG" - string label = String.Empty; - - Expect(104); - LabelName( -#line 2578 "VBNET.ATG" -out label); - -#line 2580 "VBNET.ATG" - goToStatement = new GotoStatement(label); - - } - - void ResumeStatement( -#line 2621 "VBNET.ATG" -out ResumeStatement resumeStatement) { - -#line 2623 "VBNET.ATG" - resumeStatement = null; - string label = String.Empty; - - if ( -#line 2626 "VBNET.ATG" -IsResumeNext()) { - Expect(153); - Expect(128); - -#line 2627 "VBNET.ATG" - resumeStatement = new ResumeStatement(true); - } else if (la.kind == 153) { - lexer.NextToken(); - if (StartOf(37)) { - LabelName( -#line 2628 "VBNET.ATG" -out label); - } - -#line 2628 "VBNET.ATG" - resumeStatement = new ResumeStatement(label); - } else SynErr(264); - } - - void ReDimClauseInternal( -#line 2600 "VBNET.ATG" -ref Expression expr) { - -#line 2601 "VBNET.ATG" - List arguments; bool canBeNormal; bool canBeRedim; string name; - while (la.kind == 10 || -#line 2604 "VBNET.ATG" -la.kind == Tokens.OpenParenthesis && Peek(1).kind == Tokens.Of) { - if (la.kind == 10) { - lexer.NextToken(); - IdentifierOrKeyword( -#line 2603 "VBNET.ATG" -out name); - -#line 2603 "VBNET.ATG" - expr = new FieldReferenceExpression(expr, name); - } else { - InvocationExpression( -#line 2605 "VBNET.ATG" -ref expr); - } - } - Expect(24); - NormalOrReDimArgumentList( -#line 2608 "VBNET.ATG" -out arguments, out canBeNormal, out canBeRedim); - Expect(25); - -#line 2610 "VBNET.ATG" - expr = new InvocationExpression(expr, arguments); - if (canBeRedim == false || canBeNormal && (la.kind == Tokens.Dot || la.kind == Tokens.OpenParenthesis)) { - if (this.Errors.Count == 0) { - // don't recurse on parse errors - could result in endless recursion - ReDimClauseInternal(ref expr); - } - } - - } - - void CaseClause( -#line 2642 "VBNET.ATG" -out CaseLabel caseClause) { - -#line 2644 "VBNET.ATG" - Expression expr = null; - Expression sexpr = null; - BinaryOperatorType op = BinaryOperatorType.None; - caseClause = null; - - if (la.kind == 86) { - lexer.NextToken(); - -#line 2650 "VBNET.ATG" - caseClause = new CaseLabel(); - } else if (StartOf(38)) { - if (la.kind == 113) { - lexer.NextToken(); - } - switch (la.kind) { - case 27: { - lexer.NextToken(); - -#line 2654 "VBNET.ATG" - op = BinaryOperatorType.LessThan; - break; - } - case 26: { - lexer.NextToken(); - -#line 2655 "VBNET.ATG" - op = BinaryOperatorType.GreaterThan; - break; - } - case 30: { - lexer.NextToken(); - -#line 2656 "VBNET.ATG" - op = BinaryOperatorType.LessThanOrEqual; - break; - } - case 29: { - lexer.NextToken(); - -#line 2657 "VBNET.ATG" - op = BinaryOperatorType.GreaterThanOrEqual; - break; - } - case 11: { - lexer.NextToken(); - -#line 2658 "VBNET.ATG" - op = BinaryOperatorType.Equality; - break; - } - case 28: { - lexer.NextToken(); - -#line 2659 "VBNET.ATG" - op = BinaryOperatorType.InEquality; - break; - } - default: SynErr(265); break; - } - Expr( -#line 2661 "VBNET.ATG" -out expr); - -#line 2663 "VBNET.ATG" - caseClause = new CaseLabel(op, expr); - - } else if (StartOf(27)) { - Expr( -#line 2665 "VBNET.ATG" -out expr); - if (la.kind == 172) { - lexer.NextToken(); - Expr( -#line 2665 "VBNET.ATG" -out sexpr); - } - -#line 2667 "VBNET.ATG" - caseClause = new CaseLabel(expr, sexpr); - - } else SynErr(266); - } - - void CatchClauses( -#line 2714 "VBNET.ATG" -out List catchClauses) { - -#line 2716 "VBNET.ATG" - catchClauses = new List(); - TypeReference type = null; - Statement blockStmt = null; - Expression expr = null; - string name = String.Empty; - - while (la.kind == 58) { - lexer.NextToken(); - if (StartOf(13)) { - Identifier(); - -#line 2724 "VBNET.ATG" - name = t.val; - if (la.kind == 48) { - lexer.NextToken(); - TypeName( -#line 2724 "VBNET.ATG" -out type); - } - } - if (la.kind == 180) { - lexer.NextToken(); - Expr( -#line 2725 "VBNET.ATG" -out expr); - } - EndOfStmt(); - Block( -#line 2727 "VBNET.ATG" -out blockStmt); - -#line 2728 "VBNET.ATG" - catchClauses.Add(new CatchClause(type, name, blockStmt, expr)); - } - } - - - - public override void Parse() - { - VBNET(); - - } - - protected override void SynErr(int line, int col, int errorNumber) - { - string s; - switch (errorNumber) { - case 0: s = "EOF expected"; break; - case 1: s = "EOL expected"; break; - case 2: s = "ident expected"; break; - case 3: s = "LiteralString expected"; break; - case 4: s = "LiteralCharacter expected"; break; - case 5: s = "LiteralInteger expected"; break; - case 6: s = "LiteralDouble expected"; break; - case 7: s = "LiteralSingle expected"; break; - case 8: s = "LiteralDecimal expected"; break; - case 9: s = "LiteralDate expected"; break; - case 10: s = "\".\" expected"; break; - case 11: s = "\"=\" expected"; break; - case 12: s = "\",\" expected"; break; - case 13: s = "\":\" expected"; break; - case 14: s = "\"+\" expected"; break; - case 15: s = "\"-\" expected"; break; - case 16: s = "\"*\" expected"; break; - case 17: s = "\"/\" expected"; break; - case 18: s = "\"\\\\\" expected"; break; - case 19: s = "\"&\" expected"; break; - case 20: s = "\"^\" expected"; break; - case 21: s = "\"?\" expected"; break; - case 22: s = "\"{\" expected"; break; - case 23: s = "\"}\" expected"; break; - case 24: s = "\"(\" expected"; break; - case 25: s = "\")\" expected"; break; - case 26: s = "\">\" expected"; break; - case 27: s = "\"<\" expected"; break; - case 28: s = "\"<>\" expected"; break; - case 29: s = "\">=\" expected"; break; - case 30: s = "\"<=\" expected"; break; - case 31: s = "\"<<\" expected"; break; - case 32: s = "\">>\" expected"; break; - case 33: s = "\"+=\" expected"; break; - case 34: s = "\"^=\" expected"; break; - case 35: s = "\"-=\" expected"; break; - case 36: s = "\"*=\" expected"; break; - case 37: s = "\"/=\" expected"; break; - case 38: s = "\"\\\\=\" expected"; break; - case 39: s = "\"<<=\" expected"; break; - case 40: s = "\">>=\" expected"; break; - case 41: s = "\"&=\" expected"; break; - case 42: s = "\"AddHandler\" expected"; break; - case 43: s = "\"AddressOf\" expected"; break; - case 44: s = "\"Alias\" expected"; break; - case 45: s = "\"And\" expected"; break; - case 46: s = "\"AndAlso\" expected"; break; - case 47: s = "\"Ansi\" expected"; break; - case 48: s = "\"As\" expected"; break; - case 49: s = "\"Assembly\" expected"; break; - case 50: s = "\"Auto\" expected"; break; - case 51: s = "\"Binary\" expected"; break; - case 52: s = "\"Boolean\" expected"; break; - case 53: s = "\"ByRef\" expected"; break; - case 54: s = "\"Byte\" expected"; break; - case 55: s = "\"ByVal\" expected"; break; - case 56: s = "\"Call\" expected"; break; - case 57: s = "\"Case\" expected"; break; - case 58: s = "\"Catch\" expected"; break; - case 59: s = "\"CBool\" expected"; break; - case 60: s = "\"CByte\" expected"; break; - case 61: s = "\"CChar\" expected"; break; - case 62: s = "\"CDate\" expected"; break; - case 63: s = "\"CDbl\" expected"; break; - case 64: s = "\"CDec\" expected"; break; - case 65: s = "\"Char\" expected"; break; - case 66: s = "\"CInt\" expected"; break; - case 67: s = "\"Class\" expected"; break; - case 68: s = "\"CLng\" expected"; break; - case 69: s = "\"CObj\" expected"; break; - case 70: s = "\"Compare\" expected"; break; - case 71: s = "\"Const\" expected"; break; - case 72: s = "\"CShort\" expected"; break; - case 73: s = "\"CSng\" expected"; break; - case 74: s = "\"CStr\" expected"; break; - case 75: s = "\"CType\" expected"; break; - case 76: s = "\"Date\" expected"; break; - case 77: s = "\"Decimal\" expected"; break; - case 78: s = "\"Declare\" expected"; break; - case 79: s = "\"Default\" expected"; break; - case 80: s = "\"Delegate\" expected"; break; - case 81: s = "\"Dim\" expected"; break; - case 82: s = "\"DirectCast\" expected"; break; - case 83: s = "\"Do\" expected"; break; - case 84: s = "\"Double\" expected"; break; - case 85: s = "\"Each\" expected"; break; - case 86: s = "\"Else\" expected"; break; - case 87: s = "\"ElseIf\" expected"; break; - case 88: s = "\"End\" expected"; break; - case 89: s = "\"EndIf\" expected"; break; - case 90: s = "\"Enum\" expected"; break; - case 91: s = "\"Erase\" expected"; break; - case 92: s = "\"Error\" expected"; break; - case 93: s = "\"Event\" expected"; break; - case 94: s = "\"Exit\" expected"; break; - case 95: s = "\"Explicit\" expected"; break; - case 96: s = "\"False\" expected"; break; - case 97: s = "\"Finally\" expected"; break; - case 98: s = "\"For\" expected"; break; - case 99: s = "\"Friend\" expected"; break; - case 100: s = "\"Function\" expected"; break; - case 101: s = "\"Get\" expected"; break; - case 102: s = "\"GetType\" expected"; break; - case 103: s = "\"GoSub\" expected"; break; - case 104: s = "\"GoTo\" expected"; break; - case 105: s = "\"Handles\" expected"; break; - case 106: s = "\"If\" expected"; break; - case 107: s = "\"Implements\" expected"; break; - case 108: s = "\"Imports\" expected"; break; - case 109: s = "\"In\" expected"; break; - case 110: s = "\"Inherits\" expected"; break; - case 111: s = "\"Integer\" expected"; break; - case 112: s = "\"Interface\" expected"; break; - case 113: s = "\"Is\" expected"; break; - case 114: s = "\"Let\" expected"; break; - case 115: s = "\"Lib\" expected"; break; - case 116: s = "\"Like\" expected"; break; - case 117: s = "\"Long\" expected"; break; - case 118: s = "\"Loop\" expected"; break; - case 119: s = "\"Me\" expected"; break; - case 120: s = "\"Mod\" expected"; break; - case 121: s = "\"Module\" expected"; break; - case 122: s = "\"MustInherit\" expected"; break; - case 123: s = "\"MustOverride\" expected"; break; - case 124: s = "\"MyBase\" expected"; break; - case 125: s = "\"MyClass\" expected"; break; - case 126: s = "\"Namespace\" expected"; break; - case 127: s = "\"New\" expected"; break; - case 128: s = "\"Next\" expected"; break; - case 129: s = "\"Not\" expected"; break; - case 130: s = "\"Nothing\" expected"; break; - case 131: s = "\"NotInheritable\" expected"; break; - case 132: s = "\"NotOverridable\" expected"; break; - case 133: s = "\"Object\" expected"; break; - case 134: s = "\"Off\" expected"; break; - case 135: s = "\"On\" expected"; break; - case 136: s = "\"Option\" expected"; break; - case 137: s = "\"Optional\" expected"; break; - case 138: s = "\"Or\" expected"; break; - case 139: s = "\"OrElse\" expected"; break; - case 140: s = "\"Overloads\" expected"; break; - case 141: s = "\"Overridable\" expected"; break; - case 142: s = "\"Overrides\" expected"; break; - case 143: s = "\"ParamArray\" expected"; break; - case 144: s = "\"Preserve\" expected"; break; - case 145: s = "\"Private\" expected"; break; - case 146: s = "\"Property\" expected"; break; - case 147: s = "\"Protected\" expected"; break; - case 148: s = "\"Public\" expected"; break; - case 149: s = "\"RaiseEvent\" expected"; break; - case 150: s = "\"ReadOnly\" expected"; break; - case 151: s = "\"ReDim\" expected"; break; - case 152: s = "\"RemoveHandler\" expected"; break; - case 153: s = "\"Resume\" expected"; break; - case 154: s = "\"Return\" expected"; break; - case 155: s = "\"Select\" expected"; break; - case 156: s = "\"Set\" expected"; break; - case 157: s = "\"Shadows\" expected"; break; - case 158: s = "\"Shared\" expected"; break; - case 159: s = "\"Short\" expected"; break; - case 160: s = "\"Single\" expected"; break; - case 161: s = "\"Static\" expected"; break; - case 162: s = "\"Step\" expected"; break; - case 163: s = "\"Stop\" expected"; break; - case 164: s = "\"Strict\" expected"; break; - case 165: s = "\"String\" expected"; break; - case 166: s = "\"Structure\" expected"; break; - case 167: s = "\"Sub\" expected"; break; - case 168: s = "\"SyncLock\" expected"; break; - case 169: s = "\"Text\" expected"; break; - case 170: s = "\"Then\" expected"; break; - case 171: s = "\"Throw\" expected"; break; - case 172: s = "\"To\" expected"; break; - case 173: s = "\"True\" expected"; break; - case 174: s = "\"Try\" expected"; break; - case 175: s = "\"TypeOf\" expected"; break; - case 176: s = "\"Unicode\" expected"; break; - case 177: s = "\"Until\" expected"; break; - case 178: s = "\"Variant\" expected"; break; - case 179: s = "\"Wend\" expected"; break; - case 180: s = "\"When\" expected"; break; - case 181: s = "\"While\" expected"; break; - case 182: s = "\"With\" expected"; break; - case 183: s = "\"WithEvents\" expected"; break; - case 184: s = "\"WriteOnly\" expected"; break; - case 185: s = "\"Xor\" expected"; break; - case 186: s = "\"Continue\" expected"; break; - case 187: s = "\"Operator\" expected"; break; - case 188: s = "\"Using\" expected"; break; - case 189: s = "\"IsNot\" expected"; break; - case 190: s = "\"SByte\" expected"; break; - case 191: s = "\"UInteger\" expected"; break; - case 192: s = "\"ULong\" expected"; break; - case 193: s = "\"UShort\" expected"; break; - case 194: s = "\"CSByte\" expected"; break; - case 195: s = "\"CUShort\" expected"; break; - case 196: s = "\"CUInt\" expected"; break; - case 197: s = "\"CULng\" expected"; break; - case 198: s = "\"Global\" expected"; break; - case 199: s = "\"TryCast\" expected"; break; - case 200: s = "\"Of\" expected"; break; - case 201: s = "\"Narrowing\" expected"; break; - case 202: s = "\"Widening\" expected"; break; - case 203: s = "\"Partial\" expected"; break; - case 204: s = "\"Custom\" expected"; break; - case 205: s = "??? expected"; break; - case 206: s = "invalid OptionStmt"; break; - case 207: s = "invalid OptionStmt"; break; - case 208: s = "invalid GlobalAttributeSection"; break; - case 209: s = "invalid GlobalAttributeSection"; break; - case 210: s = "invalid NamespaceMemberDecl"; break; - case 211: s = "invalid OptionValue"; break; - case 212: s = "invalid EndOfStmt"; break; - case 213: s = "invalid TypeModifier"; break; - case 214: s = "invalid NonModuleDeclaration"; break; - case 215: s = "invalid NonModuleDeclaration"; break; - case 216: s = "invalid Identifier"; break; - case 217: s = "invalid TypeParameterConstraints"; break; - case 218: s = "invalid TypeParameterConstraint"; break; - case 219: s = "invalid NonArrayTypeName"; break; - case 220: s = "invalid MemberModifier"; break; - case 221: s = "invalid StructureMemberDecl"; break; - case 222: s = "invalid StructureMemberDecl"; break; - case 223: s = "invalid StructureMemberDecl"; break; - case 224: s = "invalid StructureMemberDecl"; break; - case 225: s = "invalid StructureMemberDecl"; break; - case 226: s = "invalid StructureMemberDecl"; break; - case 227: s = "invalid StructureMemberDecl"; break; - case 228: s = "invalid InterfaceMemberDecl"; break; - case 229: s = "invalid InterfaceMemberDecl"; break; - case 230: s = "invalid Charset"; break; - case 231: s = "invalid IdentifierForFieldDeclaration"; break; - case 232: s = "invalid VariableDeclaratorPartAfterIdentifier"; break; - case 233: s = "invalid AccessorDecls"; break; - case 234: s = "invalid EventAccessorDeclaration"; break; - case 235: s = "invalid OverloadableOperator"; break; - case 236: s = "invalid VariableInitializer"; break; - case 237: s = "invalid EventMemberSpecifier"; break; - case 238: s = "invalid EventMemberSpecifier"; break; - case 239: s = "invalid AssignmentOperator"; break; - case 240: s = "invalid SimpleNonInvocationExpression"; break; - case 241: s = "invalid SimpleNonInvocationExpression"; break; - case 242: s = "invalid SimpleNonInvocationExpression"; break; - case 243: s = "invalid SimpleNonInvocationExpression"; break; - case 244: s = "invalid InvocationExpression"; break; - case 245: s = "invalid InvocationExpression"; break; - case 246: s = "invalid PrimitiveTypeName"; break; - case 247: s = "invalid CastTarget"; break; - case 248: s = "invalid ComparisonExpr"; break; - case 249: s = "invalid Argument"; break; - case 250: s = "invalid QualIdentAndTypeArguments"; break; - case 251: s = "invalid AttributeArguments"; break; - case 252: s = "invalid ParameterModifier"; break; - case 253: s = "invalid Statement"; break; - case 254: s = "invalid LabelName"; break; - case 255: s = "invalid EmbeddedStatement"; break; - case 256: s = "invalid EmbeddedStatement"; break; - case 257: s = "invalid EmbeddedStatement"; break; - case 258: s = "invalid EmbeddedStatement"; break; - case 259: s = "invalid EmbeddedStatement"; break; - case 260: s = "invalid EmbeddedStatement"; break; - case 261: s = "invalid EmbeddedStatement"; break; - case 262: s = "invalid WhileOrUntil"; break; - case 263: s = "invalid OnErrorStatement"; break; - case 264: s = "invalid ResumeStatement"; break; - case 265: s = "invalid CaseClause"; break; - case 266: s = "invalid CaseClause"; break; - - default: s = "error " + errorNumber; break; - } - this.Errors.Error(line, col, s); - } - - private bool StartOf(int s) - { - return set[s, lexer.LookAhead.kind]; - } - - static bool[,] set = { - {T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,x, x,x,T,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,T,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,x, x,x,x,x, x,T,x,T, x,x,T,x, x,x,x,x, T,T,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,T,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,x,x, x,x,T,x, x,x,x,x, T,x,x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,T,x, x,x,x,x, T,T,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,x,x, x,x,T,x, x,x,x,x, T,x,x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,T,T, x,x,x,x, x,x,T,T, T,T,x,x, x,x,x,x, x,x,T,x, x,T,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,T,x, T,T,T,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,T, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,T, T,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,x, T,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,T,x, x,T,x,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, T,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,T, T,T,x,x, x,x,x,x, x,x,T,x, x,T,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,T,x, x,T,T,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x}, - {x,T,T,T, T,T,T,T, T,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,T,T,T, T,x,x,x, T,x,x,T, T,x,T,x, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,T,x, T,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, T,T,T,x, x,T,T,T, T,x,T,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,T,T,T, T,T,T,T, T,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,T,T,T, T,x,x,x, x,x,x,T, T,x,T,x, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,T,x, T,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x}, - {x,T,T,T, T,T,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, T,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,T, T,T,T,T, T,T,x,x, x,T,T,T, T,x,x,x, T,x,x,T, T,x,T,x, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,T,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,T,x, T,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x}, - {x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x}, - {x,x,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x}, - {x,x,T,T, T,T,T,T, T,T,T,x, T,x,T,T, T,x,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,T,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,T,T, T,T,T,T, T,T,T,x, x,x,T,T, T,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,x, T,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, T,x,x,x, x,T,x,x, x,T,x,x, x,T,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,T,T, T,T,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,T, x,T,T,T, T,x,T,x, T,x,x,T, T,T,T,T, T,T,T,x, T,T,T,x, T,T,T,T, T,T,x,x, x,x,T,T, T,x,x,x, x,x,x,T, T,x,T,x, T,x,T,x, x,x,T,x, T,x,T,x, x,x,x,T, x,x,x,x, x,T,x,T, x,x,x,x, T,T,x,T, x,x,T,x, x,T,x,T, x,x,x,x, x,x,x,x, T,x,x,x, x,T,x,T, T,T,T,T, x,x,x,T, T,x,x,T, x,T,x,x, T,T,x,T, x,T,T,T, T,T,x,x, x,T,T,x, x,x,T,x, T,x,T,T, T,T,T,T, T,T,T,T, x,x,x,x, T,x,x}, - {x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,T,T, T,T,T,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x}, - {x,x,T,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,T, T,T,T,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x} - - }; -} // end Parser - -} diff --git a/src/Libraries/NRefactory/Project/Src/Parser/gen.bat b/src/Libraries/NRefactory/Project/Src/Parser/gen.bat index b6d6e0caa3..86e2994f35 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/gen.bat +++ b/src/Libraries/NRefactory/Project/Src/Parser/gen.bat @@ -1,10 +1,9 @@ @echo off -goto old +goto new :new -echo Generating with new #Coco -copy Frames\Parser.frame.new Frames\Parser.frame +echo Generating with #Coco cd CSharp ..\Frames\SharpCoco -namespace ICSharpCode.NRefactory.Parser.CSharp -frames ..\Frames cs.ATG del Parser.cs.old >NUL @@ -15,23 +14,6 @@ cd VBNet del Parser.cs.old >NUL goto exit -:old -echo Generating with old #Coco -copy Frames\Parser.frame.old Frames\Parser.frame - -cd Frames - -copy ..\CSharp\cs.ATG -OldSharpCoco -namespace ICSharpCode.NRefactory.Parser.CSharp cs.ATG -move Parser.cs ..\CSharp - -copy ..\VBNet\VBNET.ATG -OldSharpCoco -trace GIPXA -namespace ICSharpCode.NRefactory.Parser.VB VBNET.ATG -move Parser.cs ..\VBNet - -del cs.ATG -del VBNET.ATG - :exit pause cd .. diff --git a/src/Tools/SharpCoco/bin/Debug/SharpCoco.exe b/src/Tools/SharpCoco/bin/Debug/SharpCoco.exe deleted file mode 100644 index df3e502b07c137eea59b0b090414ada79d9eaf9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 77824 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 diff --git a/src/Tools/SharpCoco/readme.txt b/src/Tools/SharpCoco/readme.txt deleted file mode 100644 index 77a6131269..0000000000 --- a/src/Tools/SharpCoco/readme.txt +++ /dev/null @@ -1,14 +0,0 @@ -Modified version of Coco/R - -The original version can be found at: -http://www.ssw.uni-linz.ac.at/Research/Projects/Coco/CSharp/ - -Changes - -+ Added #line pragmas for the generated parser -+ Now Coco uses more enums than ints... -+ no static method generation (now all is public) -+ Error & Scanner are now fields inside the parser, no more static - calling - -Mike \ No newline at end of file diff --git a/src/Tools/SharpCoco/src/AssemblyInfo.cs b/src/Tools/SharpCoco/src/AssemblyInfo.cs deleted file mode 100644 index 205aa8a9ad..0000000000 --- a/src/Tools/SharpCoco/src/AssemblyInfo.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; - -// Information about this assembly is defined by the following -// attributes. -// -// change them to the information which is associated with the assembly -// you compile. - -[assembly: AssemblyTitle("")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("")] -[assembly: AssemblyCopyright("")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// The assembly version has following format : -// -// Major.Minor.Build.Revision -// -// You can specify all values by your own or you can build default build and revision -// numbers with the '*' character (the default): - -[assembly: AssemblyVersion("2.0.0.1")] - -// The following attributes specify the key for the sign of your assembly. See the -// .NET Framework documentation for more information about signing. -// This is not required, if you don't want signing let these attributes like they're. -[assembly: AssemblyDelaySign(false)] -[assembly: AssemblyKeyFile("")] diff --git a/src/Tools/SharpCoco/src/Coco.atg b/src/Tools/SharpCoco/src/Coco.atg deleted file mode 100644 index c4396ef890..0000000000 --- a/src/Tools/SharpCoco/src/Coco.atg +++ /dev/null @@ -1,461 +0,0 @@ -/*------------------------------------------------------------------------- -Coco.ATG -- Attributed Grammar -Compiler Generator Coco/R, -Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz -extended by M. Loeberbauer & A. Woess, Univ. of Linz -with improvements by Pat Terry, Rhodes University - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -As an exception, it is allowed to write an extension of Coco/R that is -used as a plugin in non-free software. - -If not otherwise stated, any source code generated by Coco/R (other than -Coco/R itself) does not fall under the GNU General Public License. --------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------- - compile with: - Coco Coco.ATG -namespace at.jku.ssw.Coco --------------------------------------------------------------------------*/ - -using System.Collections; - -COMPILER Coco - - const int id = 0; - const int str = 1; - - static bool genScanner; - static string tokenString; // used in declarations of literal tokens - static string noString = "-none-"; // used in declarations of literal tokens - -/*-------------------------------------------------------------------------*/ - -CHARACTERS - letter = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz". - digit = "0123456789". - cr = '\r'. - lf = '\n'. - tab = '\t'. - stringCh = ANY - '"' - '\\' - cr - lf. - charCh = ANY - '\'' - '\\' - cr - lf. - printable = '\u0020' .. '\u007e'. - hex = "0123456789abcdef". - -TOKENS - ident = letter { letter | digit }. - number = digit { digit }. - string = '"' { stringCh | '\\' printable } '"'. - badString = '"' { stringCh | '\\' printable } (cr | lf). - char = '\'' ( charCh | '\\' printable { hex } ) '\''. - -PRAGMAS - ddtSym = '$' { digit | letter }. (. Tab.SetDDT(la.val); .) - -COMMENTS FROM "/*" TO "*/" NESTED - -IGNORE cr + lf + tab - -/*-------------------------------------------------------------------------*/ - -PRODUCTIONS - -Coco (. Symbol sym; Graph g, g1, g2; string gramName; .) -= - [ UsingDecl ] - - "COMPILER" (. genScanner = true; Tab.ignored = null; .) - ident (. gramName = t.val; - int beg = la.pos; - .) - { ANY } (. Tab.semDeclPos = new Position(beg, la.pos-beg, 0); .) - [ "IGNORECASE" (. DFA.ignoreCase = true; .) ] /* pdt */ - [ "CHARACTERS" { SetDecl }] - [ "TOKENS" { TokenDecl }] - [ "PRAGMAS" { TokenDecl }] - { "COMMENTS" (. bool nested = false; .) - "FROM" TokenExpr - "TO" TokenExpr - [ "NESTED" (. nested = true; .) - ] (. new Comment(g1.l, g2.l, nested); .) - } - { "IGNORE" - Set (. Tab.ignored[' '] = true; /* ' ' is always ignored */ .) - } - - SYNC - "PRODUCTIONS" (. if (genScanner) DFA.MakeDeterministic(); - Graph.DeleteNodes(); - .) - { ident (. sym = Symbol.Find(t.val); - bool undef = sym == null; - if (undef) sym = new Symbol(Node.nt, t.val, t.line); - else { - if (sym.typ == Node.nt) { - if (sym.graph != null) SemErr("name declared twice"); - } else SemErr("this symbol kind not allowed on left side of production"); - sym.line = t.line; - } - bool noAttrs = sym.attrPos == null; - sym.attrPos = null; - .) - [ AttrDecl ] (. if (!undef) - if (noAttrs != (sym.attrPos == null)) - SemErr("attribute mismatch between declaration and use of this symbol"); - .) - [ SemText ] WEAK - '=' - Expression (. sym.graph = g.l; - Graph.Finish(g); - .) - WEAK - '.' - } - "END" ident (. if (gramName != t.val) - SemErr("name does not match grammar name"); - Tab.gramSy = Symbol.Find(gramName); - if (Tab.gramSy == null) - SemErr("missing production for grammar name"); - else { - sym = Tab.gramSy; - if (sym.attrPos != null) - SemErr("grammar symbol must not have attributes"); - } - Tab.noSym = new Symbol(Node.t, "???", 0); // noSym gets highest number - Tab.SetupAnys(); - Tab.RenumberPragmas(); - if (Tab.ddt[2]) Node.PrintNodes(); - if (Errors.count == 0) { - Console.WriteLine("checking"); - Tab.CompSymbolSets(); - if (Tab.ddt[7]) Tab.XRef(); - if (Tab.GrammarOk()) { - Console.Write("parser"); - ParserGen.WriteParser(); - if (genScanner) { - Console.Write(" + scanner"); - DFA.WriteScanner(); - if (Tab.ddt[0]) DFA.PrintStates(); - } - Console.WriteLine(" generated"); - if (Tab.ddt[8]) ParserGen.WriteStatistics(); - } - } - if (Tab.ddt[6]) Tab.PrintSymbolTable(); - .) - '.' -. - -/*------------------------------------------------------------------------------------*/ - -SetDecl (. BitArray s; .) -= - ident (. string name = t.val; - CharClass c = CharClass.Find(name); - if (c != null) SemErr("name declared twice"); - .) - '=' Set (. if (Sets.Elements(s) == 0) SemErr("character set must not be empty"); - c = new CharClass(name, s); - .) - '.' -. - -/*------------------------------------------------------------------------------------*/ - -Set (. BitArray s2; .) -= - SimSet - { '+' SimSet (. s.Or(s2); .) - | '-' SimSet (. Sets.Subtract(s, s2); .) - } -. - -/*------------------------------------------------------------------------------------*/ - -SimSet (. int n1, n2; .) -= (. s = new BitArray(CharClass.charSetSize); .) -( ident (. CharClass c = CharClass.Find(t.val); - if (c == null) SemErr("undefined name"); else s.Or(c.set); - .) -| string (. string name = t.val; - name = DFA.Unescape(name.Substring(1, name.Length-2)); - foreach (char ch in name) - if (DFA.ignoreCase) s[char.ToLower(ch)] = true; - else s[ch] = true; .) -| Char (. s[n1] = true; .) - [ ".." Char (. for (int i = n1; i <= n2; i++) s[i] = true; .) - ] -| "ANY" (. s = new BitArray(CharClass.charSetSize, true); .) -) -. - -/*--------------------------------------------------------------------------------------*/ - -Char -= - char (. string name = t.val; n = 0; - name = DFA.Unescape(name.Substring(1, name.Length-2)); - int max = CharClass.charSetSize; - if (name.Length == 1 && name[0] <= max-1) n = name[0] % max; - else SemErr("unacceptable character value"); - if (DFA.ignoreCase && (char)n >= 'A' && (char)n <= 'Z') n += 32; - .) -. - -/*------------------------------------------------------------------------------------*/ - -TokenDecl (. string name; int kind; Symbol sym; Graph g; .) -= - Sym (. sym = Symbol.Find(name); - if (sym != null) SemErr("name declared twice"); - else { - sym = new Symbol(typ, name, t.line); - sym.tokenKind = Symbol.fixedToken; - } - tokenString = null; - .) - SYNC - ( '=' TokenExpr '.' (. if (kind == str) SemErr("a literal must not be declared with a structure"); - Graph.Finish(g); - if (tokenString == null || tokenString.Equals(noString)) - DFA.ConvertToStates(g.l, sym); - else { // TokenExpr is a single string - if (Tab.literals[tokenString] != null) - SemErr("token string declared twice"); - Tab.literals[tokenString] = sym; - DFA.MatchLiteral(tokenString, sym); - } - .) - | (. if (kind == id) genScanner = false; - else DFA.MatchLiteral(sym.name, sym); - .) - ) - [ SemText (. if (typ != Node.pr) SemErr("semantic action not allowed here"); .) - ] -. - -/*------------------------------------------------------------------------------------*/ - -AttrDecl -= - '<' (. int beg = la.pos; int col = la.col; .) - { ANY - | badString (. SemErr("bad string in attributes"); .) - } - '>' (. if (t.pos > beg) - sym.attrPos = new Position(beg, t.pos - beg, col); .) -. - -/*------------------------------------------------------------------------------------*/ - -Expression (. Graph g2; .) -= - Term (. bool first = true; .) - { WEAK - '|' - Term (. if (first) { Graph.MakeFirstAlt(g); first = false; } - Graph.MakeAlternative(g, g2); - .) - } -. - -/*------------------------------------------------------------------------------------*/ - -Term (. Graph g2; Node rslv = null; g = null; .) -= -( [ (. rslv = new Node(Node.rslv, null, la.line); .) - Resolver (. g = new Graph(rslv); .) - ] - Factor (. if (rslv != null) Graph.MakeSequence(g, g2); - else g = g2; - .) - { Factor (. Graph.MakeSequence(g, g2); .) - } -| (. g = new Graph(new Node(Node.eps, null, 0)); .) -) (. if (g == null) // invalid start of Term - g = new Graph(new Node(Node.eps, null, 0)); - .) -. - -/*------------------------------------------------------------------------------------*/ - -Factor (. string name; int kind; Position pos; bool weak = false; - g = null; - .) -= -( [ "WEAK" (. weak = true; .) - ] - Sym (. Symbol sym = Symbol.Find(name); - if (sym == null && kind == str) - sym = Tab.literals[name] as Symbol; - bool undef = sym == null; - if (undef) { - if (kind == id) - sym = new Symbol(Node.nt, name, 0); // forward nt - else if (genScanner) { - sym = new Symbol(Node.t, name, t.line); - DFA.MatchLiteral(sym.name, sym); - } else { // undefined string in production - SemErr("undefined string in production"); - sym = Tab.eofSy; // dummy - } - } - int typ = sym.typ; - if (typ != Node.t && typ != Node.nt) - SemErr("this symbol kind is not allowed in a production"); - if (weak) - if (typ == Node.t) typ = Node.wt; - else SemErr("only terminals may be weak"); - Node p = new Node(typ, sym, t.line); - g = new Graph(p); - .) - [ Attribs

(. if (kind != id) SemErr("a literal must not have attributes"); .) - ] (. if (undef) - sym.attrPos = p.pos; // dummy - else if ((p.pos == null) != (sym.attrPos == null)) - SemErr("attribute mismatch between declaration and use of this symbol"); - .) -| '(' Expression ')' -| '[' Expression ']' (. Graph.MakeOption(g); .) -| '{' Expression '}' (. Graph.MakeIteration(g); .) -| SemText (. Node p = new Node(Node.sem, null, 0); - p.pos = pos; - g = new Graph(p); - .) -| "ANY" (. Node p = new Node(Node.any, null, 0); // p.set is set in Tab.SetupAnys - g = new Graph(p); - .) -| "SYNC" (. Node p = new Node(Node.sync, null, 0); - g = new Graph(p); - .) -) (. if (g == null) // invalid start of Factor - g = new Graph(new Node(Node.eps, null, 0)); - .) -. - -/*------------------------------------------------------------------------------------*/ - -Resolver -= - "IF" "(" (. int beg = la.pos; int col = la.col; .) - Condition (. pos = new Position(beg, t.pos - beg, col); .) -. - -/*------------------------------------------------------------------------------------*/ - -Condition = { "(" Condition | ANY } ")" . - -/*------------------------------------------------------------------------------------*/ - -TokenExpr (. Graph g2; .) -= - TokenTerm (. bool first = true; .) - { WEAK - '|' - TokenTerm (. if (first) { Graph.MakeFirstAlt(g); first = false; } - Graph.MakeAlternative(g, g2); - .) - } -. - -/*------------------------------------------------------------------------------------*/ - -TokenTerm (. Graph g2; .) -= - TokenFactor - { TokenFactor (. Graph.MakeSequence(g, g2); .) - } - [ "CONTEXT" - '(' TokenExpr (. Graph.SetContextTrans(g2.l); Graph.MakeSequence(g, g2); .) - ')' - ] -. - -/*------------------------------------------------------------------------------------*/ - -TokenFactor (. string name; int kind; .) -= - (. g = null; .) -( Sym (. if (kind == id) { - CharClass c = CharClass.Find(name); - if (c == null) { - SemErr("undefined name"); - c = new CharClass(name, new BitArray(CharClass.charSetSize)); - } - Node p = new Node(Node.clas, null, 0); p.val = c.n; - g = new Graph(p); - tokenString = noString; - } else { // str - g = Graph.StrToGraph(name); - if (tokenString == null) tokenString = name; - else tokenString = noString; - } - .) -| '(' TokenExpr ')' -| '[' TokenExpr ']' (. Graph.MakeOption(g); .) -| '{' TokenExpr '}' (. Graph.MakeIteration(g); .) -) (. if (g == null) // invalid start of TokenFactor - g = new Graph(new Node(Node.eps, null, 0)); .) -. - -/*------------------------------------------------------------------------------------*/ - -Sym -= (. name = "???"; kind = id; .) -( ident (. kind = id; name = t.val; .) -| (string (. name = t.val; .) - | char (. name = "\"" + t.val.Substring(1, t.val.Length-2) + "\""; .) - ) (. kind = str; - if (DFA.ignoreCase) name = name.ToLower(); - if (name.IndexOf(' ') >= 0) - SemErr("literal tokens must not contain blanks"); .) -) -. - -/*------------------------------------------------------------------------------------*/ - -Attribs -= - '<' (. int beg = la.pos; int col = la.col; .) - { Attribs

- |ANY - | badString (. SemErr("bad string in attributes"); .) - } - '>' (. if (t.pos > beg) p.pos = new Position(beg, t.pos - beg, col); .) -. - -/*------------------------------------------------------------------------------------*/ - -SemText -= - "(." (. int beg = la.pos; int col = la.col; .) - { ANY - | badString (. SemErr("bad string in semantic action"); .) - | "(." (. SemErr("missing end of previous semantic action"); .) - } - ".)" (. pos = new Position(beg, t.pos - beg, col); .) -. - -/*------------------------------------------------------------------------------------*/ - -UsingDecl -= - "using" (. int beg = t.pos; .) - { ANY } ';' (. int end = t.pos; .) - { "using" { ANY } ';' (. end = t.pos; .) - } (. pos = new Position(beg, end - beg + 1, 0); .) -. - -END Coco. diff --git a/src/Tools/SharpCoco/src/Coco.cs b/src/Tools/SharpCoco/src/Coco.cs deleted file mode 100644 index c5c8946ae9..0000000000 --- a/src/Tools/SharpCoco/src/Coco.cs +++ /dev/null @@ -1,97 +0,0 @@ -/*------------------------------------------------------------------------- -Compiler Generator Coco/R, -Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz -extended by M. Loeberbauer & A. Woess, Univ. of Linz -with improvements by Pat Terry, Rhodes University - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -As an exception, it is allowed to write an extension of Coco/R that is -used as a plugin in non-free software. - -If not otherwise stated, any source code generated by Coco/R (other than -Coco/R itself) does not fall under the GNU General Public License. --------------------------------------------------------------------------*/ -/*------------------------------------------------------------------------- - Trace output options - 0 | A: prints the states of the scanner automaton - 1 | F: prints the First and Follow sets of all nonterminals - 2 | G: prints the syntax graph of the productions - 3 | I: traces the computation of the First sets - 4 | J: prints the sets associated with ANYs and synchronisation sets - 6 | S: prints the symbol table (terminals, nonterminals, pragmas) - 7 | X: prints a cross reference list of all syntax symbols - 8 | P: prints statistics about the Coco run - - Trace output can be switched on by the pragma - $ { digit | letter } - in the attributed grammar or as a command-line option - -------------------------------------------------------------------------*/ - -using System; -using System.IO; - -namespace at.jku.ssw.Coco { - -public class Coco { - - public static void Main (string[] arg) { - Console.WriteLine("Coco/R (Jun 28, 2004)"); - string ATGName = null; - for (int i = 0; i < arg.Length; i++) { - if (arg[i] == "-namespace" && i < arg.Length - 1) Tab.nsName = arg[++i]; - else if (arg[i] == "-frames" && i < arg.Length - 1) Tab.frameDir = arg[++i]; - else if (arg[i] == "-trace" && i < arg.Length - 1) Tab.SetDDT(arg[++i]); - else ATGName = arg[i]; - } - if (arg.Length > 0 && ATGName != null) { - int pos = ATGName.LastIndexOf('/'); - if (pos < 0) pos = ATGName.LastIndexOf('\\'); - string file = ATGName; - string dir = ATGName.Substring(0, pos+1); - - Scanner.Init(file); - Trace.Init(dir); - Tab.Init(); - DFA.Init(file, dir); - ParserGen.Init(file, dir); - - Parser.Parse(); - - Trace.Close(); - Console.WriteLine("{0} errors detected", Errors.count); - } else { - Console.WriteLine("Usage: Coco Grammar.ATG {{Option}}{0}" + - "Options:{0}" + - " -namespace {0}" + - " -frames {0}" + - " -trace {0}" + - "Valid characters in the trace string:{0}" + - " A trace automaton{0}" + - " F list first/follow sets{0}" + - " G print syntax graph{0}" + - " I trace computation of first sets{0}" + - " J list ANY and SYNC sets{0}" + - " P print statistics{0}" + - " S list symbol table{0}" + - " X list cross reference table{0}" + - "Scanner.frame and Parser.frame files needed in ATG directory{0}" + - "or in a directory specified in the -frames option.", - Environment.NewLine); - } - } -} // end Coco - -} // end namespace \ No newline at end of file diff --git a/src/Tools/SharpCoco/src/DFA.cs b/src/Tools/SharpCoco/src/DFA.cs deleted file mode 100644 index 49eb07a127..0000000000 --- a/src/Tools/SharpCoco/src/DFA.cs +++ /dev/null @@ -1,952 +0,0 @@ -/*------------------------------------------------------------------------- -DFA.cs -- Generation of the Scanner Automaton -Compiler Generator Coco/R, -Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz -extended by M. Loeberbauer & A. Woess, Univ. of Linz -with improvements by Pat Terry, Rhodes University - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -As an exception, it is allowed to write an extension of Coco/R that is -used as a plugin in non-free software. - -If not otherwise stated, any source code generated by Coco/R (other than -Coco/R itself) does not fall under the GNU General Public License. --------------------------------------------------------------------------*/ -using System; -using System.IO; -using System.Collections; -using System.Text; - -namespace at.jku.ssw.Coco { - -//----------------------------------------------------------------------------- -// State -//----------------------------------------------------------------------------- - -public class State { // state of finite automaton - public static int lastNr; // highest state number - public int nr; // state number - public Action firstAction;// to first action of this state - public Symbol endOf; // recognized token if state is final - public bool ctx; // true if state is reached via contextTrans - public State next; - - public State() { - nr = ++lastNr; - } - - public void AddAction(Action act) { - Action lasta = null, a = firstAction; - while (a != null && act.typ >= a.typ) {lasta = a; a = a.next;} - // collecting classes at the beginning gives better performance - act.next = a; - if (a==firstAction) firstAction = act; else lasta.next = act; - } - - public void DetachAction(Action act) { - Action lasta = null, a = firstAction; - while (a != null && a != act) {lasta = a; a = a.next;} - if (a != null) - if (a == firstAction) firstAction = a.next; else lasta.next = a.next; - } - - public Action TheAction(char ch) { - BitArray s; - for (Action a = firstAction; a != null; a = a.next) - if (a.typ == Node.chr && ch == a.sym) return a; - else if (a.typ == Node.clas) { - s = CharClass.Set(a.sym); - if (s[ch]) return a; - } - return null; - } - - public void MeltWith(State s) { // copy actions of s to state - Action a; - for (Action action = s.firstAction; action != null; action = action.next) { - a = new Action(action.typ, action.sym, action.tc); - a.AddTargets(action); - AddAction(a); - } - } - -} - -//----------------------------------------------------------------------------- -// Action -//----------------------------------------------------------------------------- - -public class Action { // action of finite automaton - public int typ; // type of action symbol: clas, chr - public int sym; // action symbol - public int tc; // transition code: normalTrans, contextTrans - public Target target; // states reached from this action - public Action next; - - public Action(int typ, int sym, int tc) { - this.typ = typ; this.sym = sym; this.tc = tc; - } - - public void AddTarget(Target t) { // add t to the action.targets - Target last = null; - Target p = target; - while (p != null && t.state.nr >= p.state.nr) { - if (t.state == p.state) return; - last = p; p = p.next; - } - t.next = p; - if (p == target) target = t; else last.next = t; - } - - public void AddTargets(Action a) { // add copy of a.targets to action.targets - for (Target p = a.target; p != null; p = p.next) { - Target t = new Target(p.state); - AddTarget(t); - } - if (a.tc == Node.contextTrans) tc = Node.contextTrans; - } - - public BitArray Symbols() { - BitArray s; - if (typ == Node.clas) - s = (BitArray) CharClass.Set(sym).Clone(); - else { - s = new BitArray(CharClass.charSetSize); s[sym] = true; - } - return s; - } - - public void ShiftWith(BitArray s) { - if (Sets.Elements(s) == 1) { - typ = Node.chr; sym = Sets.First(s); - } else { - CharClass c = CharClass.Find(s); - if (c == null) c = new CharClass("#", s); // class with dummy name - typ = Node.clas; sym = c.n; - } - } - - public void GetTargetStates(out BitArray targets, out Symbol endOf, out bool ctx) { - // compute the set of target states - targets = new BitArray(DFA.maxStates); endOf = null; - ctx = false; - for (Target t = target; t != null; t = t.next) { - int stateNr = t.state.nr; - if (stateNr <= DFA.lastSimState) targets[stateNr] = true; - else targets.Or(Melted.Set(stateNr)); - if (t.state.endOf != null) - if (endOf == null || endOf == t.state.endOf) - endOf = t.state.endOf; - else { - Console.WriteLine("Tokens {0} and {1} cannot be distinguished", endOf.name, t.state.endOf.name); - Errors.count++; - } - if (t.state.ctx) { - ctx = true; - // The following check seems to be unnecessary. It reported an error - // if a symbol + context was the prefix of another symbol, e.g. - // s1 = "a" "b" "c". - // s2 = "a" CONTEXT("b"). - // But this is ok. - // if (t.state.endOf != null) { - // Console.WriteLine("Ambiguous context clause"); - // Errors.count++; - // } - } - } - } - -} - -//----------------------------------------------------------------------------- -// Target -//----------------------------------------------------------------------------- - -public class Target { // set of states that are reached by an action - public State state; // target state - public Target next; - - public Target (State s) { - state = s; - } -} - -//----------------------------------------------------------------------------- -// Melted -//----------------------------------------------------------------------------- - -public class Melted { // info about melted states - public static Melted first; // head of melted state list - public BitArray set; // set of old states - public State state; // new state - public Melted next; - - public Melted(BitArray set, State state) { - this.set = set; this.state = state; - this.next = first; first = this; - } - - public static BitArray Set(int nr) { - Melted m = first; - while (m != null) { - if (m.state.nr == nr) return m.set; else m = m.next; - } - throw new Exception("-- compiler error in Melted.Set"); - } - - public static Melted StateWithSet(BitArray s) { - for (Melted m = first; m != null; m = m.next) - if (Sets.Equals(s, m.set)) return m; - return null; - } - -} - -//----------------------------------------------------------------------------- -// Comment -//----------------------------------------------------------------------------- - -public class Comment { // info about comment syntax - public static Comment first; // list of comments - public string start; - public string stop; - public bool nested; - public Comment next; - - static string Str(Node p) { - StringBuilder s = new StringBuilder(); - while (p != null) { - if (p.typ == Node.chr) { - s.Append((char)p.val); - } else if (p.typ == Node.clas) { - BitArray set = CharClass.Set(p.val); - if (Sets.Elements(set) != 1) Parser.SemErr("character set contains more than 1 character"); - s.Append((char)Sets.First(set)); - } else Parser.SemErr("comment delimiters may not be structured"); - p = p.next; - } - if (s.Length == 0 || s.Length > 2) { - Parser.SemErr("comment delimiters must be 1 or 2 characters long"); - s = new StringBuilder("?"); - } - return s.ToString(); - } - - public Comment(Node from, Node to, bool nested) { - start = Str(from); - stop = Str(to); - this.nested = nested; - this.next = first; first = this; - } - -} - -//----------------------------------------------------------------------------- -// DFA -//----------------------------------------------------------------------------- - -public class DFA { - public static int maxStates; - public const int EOF = -1; - - public static State firstState; - public static State lastState; // last allocated state - public static int lastSimState; // last non melted state - public static FileStream fram; // scanner frame input - public static StreamWriter gen; // generated scanner file - public static Symbol curSy; // current token to be recognized (in FindTrans) - public static Node curGraph; // start of graph for current token (in FindTrans) - public static bool ignoreCase; // true if input should be treated case-insensitively - public static bool dirtyDFA; // DFA may become nondeterministic in MatchLiteral - public static bool hasCtxMoves; // DFA has context transitions - static string srcName; // name of the attributed grammar file - static string srcDir; // directory of attributed grammar file - - //---------- Output primitives - private static string Ch(char ch) { - if (ch < ' ' || ch >= 127 || ch == '\'' || ch == '\\') return Convert.ToString((int)ch); - else return String.Format("'{0}'", ch); - } - - private static string ChCond(char ch) { - return String.Format("ch == {0}", Ch(ch)); - } - - private static void PutRange(BitArray s) { - int[] lo = new int[32]; - int[] hi = new int[32]; - // fill lo and hi - int max = CharClass.charSetSize; - int top = -1; - int i = 0; - while (i < max) { - if (s[i]) { - top++; lo[top] = i; i++; - while (i < max && s[i]) i++; - hi[top] = i-1; - } else i++; - } - // print ranges - if (top == 1 && lo[0] == 0 && hi[1] == max-1 && hi[0]+2 == lo[1]) { - BitArray s1 = new BitArray(max); s1[hi[0]+1] = true; - gen.Write("!"); PutRange(s1); - } else { - gen.Write("("); - for (i = 0; i <= top; i++) { - if (hi[i] == lo[i]) gen.Write("ch == {0}", Ch((char)lo[i])); - else if (lo[i] == 0) gen.Write("ch <= {0}", Ch((char)hi[i])); - else if (hi[i] == max-1) gen.Write("ch >= {0}", Ch((char)lo[i])); - else gen.Write("ch >= {0} && ch <= {1}", Ch((char)lo[i]), Ch((char)hi[i])); - if (i < top) gen.Write(" || "); - } - gen.Write(")"); - } - } - - //---------- String handling - static char Hex2Char(string s) { - int val = 0; - for (int i = 0; i < s.Length; i++) { - char ch = s[i]; - if ('0' <= ch && ch <= '9') val = 16 * val + (ch - '0'); - else if ('a' <= ch && ch <= 'f') val = 16 * val + (10 + ch - 'a'); - else if ('A' <= ch && ch <= 'F') val = 16 * val + (10 + ch - 'A'); - else Parser.SemErr("bad escape sequence in string or character"); - } - if (val > CharClass.charSetSize) /* pdt */ - Parser.SemErr("bad escape sequence in string or character"); - return (char) (val % CharClass.charSetSize); - } - - static string Char2Hex(char ch) { - StringWriter w = new StringWriter(); - w.Write("\\u{0:x4}", (int)ch); - return w.ToString(); - } - - public static string Unescape (string s) { - /* replaces escape sequences in s by their Unicode values. */ - StringBuilder buf = new StringBuilder(); - int i = 0; - while (i < s.Length) { - if (s[i] == '\\') { - switch (s[i+1]) { - case '\\': buf.Append('\\'); i += 2; break; - case '\'': buf.Append('\''); i += 2; break; - case '\"': buf.Append('\"'); i += 2; break; - case 'r': buf.Append('\r'); i += 2; break; - case 'n': buf.Append('\n'); i += 2; break; - case 't': buf.Append('\t'); i += 2; break; - case '0': buf.Append('\0'); i += 2; break; - case 'a': buf.Append('\a'); i += 2; break; - case 'b': buf.Append('\b'); i += 2; break; - case 'f': buf.Append('\f'); i += 2; break; - case 'v': buf.Append('\v'); i += 2; break; - case 'u': case 'x': - if (i + 6 <= s.Length) { - buf.Append(Hex2Char(s.Substring(i+2, 4))); i += 6; break; - } else { - Parser.SemErr("bad escape sequence in string or character"); i = s.Length; break; - } - default: Parser.SemErr("bad escape sequence in string or character"); i += 2; break; - } - } else { - buf.Append(s[i]); - i++; - } - } - return buf.ToString(); - } - - public static string Escape (string s) { - StringBuilder buf = new StringBuilder(); - foreach (char ch in s) { - switch(ch) { - case '\\': buf.Append("\\\\"); break; - case '\'': buf.Append("\\'"); break; - case '\"': buf.Append("\\\""); break; - case '\t': buf.Append("\\t"); break; - case '\r': buf.Append("\\r"); break; - case '\n': buf.Append("\\n"); break; - default: - if (ch < ' ' || ch > '\u007f') buf.Append(Char2Hex(ch)); - else buf.Append(ch); - break; - } - } - return buf.ToString(); - } - - //---------- State handling - static State NewState() { - State s = new State(); - if (firstState == null) firstState = s; else lastState.next = s; - lastState = s; - return s; - } - - static void NewTransition(State from, State to, int typ, int sym, int tc) { - if (to == firstState) Parser.SemErr("token must not start with an iteration"); - Target t = new Target(to); - Action a = new Action(typ, sym, tc); a.target = t; - from.AddAction(a); - if (typ == Node.clas) curSy.tokenKind = Symbol.classToken; - } - - static void CombineShifts() { - State state; - Action a, b, c; - BitArray seta, setb; - for (state = firstState; state != null; state = state.next) { - for (a = state.firstAction; a != null; a = a.next) { - b = a.next; - while (b != null) - if (a.target.state == b.target.state && a.tc == b.tc) { - seta = a.Symbols(); setb = b.Symbols(); - seta.Or(setb); - a.ShiftWith(seta); - c = b; b = b.next; state.DetachAction(c); - } else b = b.next; - } - } - } - - static void FindUsedStates(State state, BitArray used) { - if (used[state.nr]) return; - used[state.nr] = true; - for (Action a = state.firstAction; a != null; a = a.next) - FindUsedStates(a.target.state, used); - } - - static void DeleteRedundantStates() { - State[] newState = new State[State.lastNr + 1]; - BitArray used = new BitArray(State.lastNr + 1); - FindUsedStates(firstState, used); - // combine equal final states - for (State s1 = firstState.next; s1 != null; s1 = s1.next) // firstState cannot be final - if (used[s1.nr] && s1.endOf != null && s1.firstAction == null && !s1.ctx) - for (State s2 = s1.next; s2 != null; s2 = s2.next) - if (used[s2.nr] && s1.endOf == s2.endOf && s2.firstAction == null & !s2.ctx) { - used[s2.nr] = false; newState[s2.nr] = s1; - } - for (State state = firstState; state != null; state = state.next) - if (used[state.nr]) - for (Action a = state.firstAction; a != null; a = a.next) - if (!used[a.target.state.nr]) - a.target.state = newState[a.target.state.nr]; - // delete unused states - lastState = firstState; State.lastNr = 0; // firstState has number 0 - for (State state = firstState.next; state != null; state = state.next) - if (used[state.nr]) {state.nr = ++State.lastNr; lastState = state;} - else lastState.next = state.next; - } - - static State TheState(Node p) { - State state; - if (p == null) {state = NewState(); state.endOf = curSy; return state;} - else return p.state; - } - - static void Step(State from, Node p, BitArray stepped) { - if (p == null) return; - stepped[p.n] = true; - switch (p.typ) { - case Node.clas: case Node.chr: { - NewTransition(from, TheState(p.next), p.typ, p.val, p.code); - break; - } - case Node.alt: { - Step(from, p.sub, stepped); Step(from, p.down, stepped); - break; - } - case Node.iter: case Node.opt: { - if (p.next != null && !stepped[p.next.n]) Step(from, p.next, stepped); - Step(from, p.sub, stepped); - break; - } - } - } - - static void NumberNodes(Node p, State state) { - /* Assigns a state n.state to every node n. There will be a transition from - n.state to n.next.state triggered by n.val. All nodes in an alternative - chain are represented by the same state. - */ - if (p == null) return; - if (p.state != null) return; // already visited; - if (state == null) state = NewState(); - p.state = state; - if (Node.DelGraph(p)) state.endOf = curSy; - switch (p.typ) { - case Node.clas: case Node.chr: { - NumberNodes(p.next, null); - break; - } - case Node.opt: { - NumberNodes(p.next, null); NumberNodes(p.sub, state); - break; - } - case Node.iter: { - NumberNodes(p.next, state); NumberNodes(p.sub, state); - break; - } - case Node.alt: { - NumberNodes(p.sub, state); NumberNodes(p.down, state); - break; - } - } - } - - static void FindTrans (Node p, bool start, BitArray marked) { - if (p == null || marked[p.n]) return; - marked[p.n] = true; - if (start) Step(p.state, p, new BitArray(Node.nodes.Count)); // start of group of equally numbered nodes - switch (p.typ) { - case Node.clas: case Node.chr: { - FindTrans(p.next, true, marked); - break; - } - case Node.opt: { - FindTrans(p.next, true, marked); FindTrans(p.sub, false, marked); - break; - } - case Node.iter: { - FindTrans(p.next, false, marked); FindTrans(p.sub, false, marked); - break; - } - case Node.alt: { - FindTrans(p.sub, false, marked); FindTrans(p.down, false, marked); - break; - } - } - } - - public static void ConvertToStates(Node p, Symbol sym) { - curGraph = p; curSy = sym; - if (Node.DelGraph(curGraph)) Parser.SemErr("token might be empty"); - NumberNodes(curGraph, firstState); - FindTrans(curGraph, true, new BitArray(Node.nodes.Count)); - } - - // match string against current automaton; store it either as a fixedToken or as a litToken - public static void MatchLiteral(string s, Symbol sym) { - s = Unescape(s.Substring(1, s.Length-2)); - int i, len = s.Length; - State state = firstState; - Action a = null; - for (i = 0; i < len; i++) { // try to match s against existing DFA - a = state.TheAction(s[i]); - if (a == null) break; - state = a.target.state; - } - // if s was not totally consumed or leads to a non-final state => make new DFA from it - if (i != len || state.endOf == null) { - state = firstState; i = 0; a = null; - dirtyDFA = true; - } - for (; i < len; i++) { // make new DFA for s[i..len-1] - State to = NewState(); - NewTransition(state, to, Node.chr, s[i], Node.normalTrans); - state = to; - } - Symbol matchedSym = state.endOf; - if (state.endOf == null) { - state.endOf = sym; - } else if (matchedSym.tokenKind == Symbol.fixedToken || (a != null && a.tc == Node.contextTrans)) { - // s matched a token with a fixed definition or a token with an appendix that will be cut off - Parser.SemErr("tokens " + sym.name + " and " + matchedSym.name + " cannot be distinguished"); - } else { // matchedSym == classToken || classLitToken - matchedSym.tokenKind = Symbol.classLitToken; - sym.tokenKind = Symbol.litToken; - } - } - - static void SplitActions(State state, Action a, Action b) { - Action c; BitArray seta, setb, setc; - seta = a.Symbols(); setb = b.Symbols(); - if (Sets.Equals(seta, setb)) { - a.AddTargets(b); - state.DetachAction(b); - } else if (Sets.Includes(seta, setb)) { - setc = (BitArray)seta.Clone(); Sets.Subtract(setc, setb); - b.AddTargets(a); - a.ShiftWith(setc); - } else if (Sets.Includes(setb, seta)) { - setc = (BitArray)setb.Clone(); Sets.Subtract(setc, seta); - a.AddTargets(b); - b.ShiftWith(setc); - } else { - setc = (BitArray)seta.Clone(); setc.And(setb); - Sets.Subtract(seta, setc); - Sets.Subtract(setb, setc); - a.ShiftWith(seta); - b.ShiftWith(setb); - c = new Action(0, 0, Node.normalTrans); // typ and sym are set in ShiftWith - c.AddTargets(a); - c.AddTargets(b); - c.ShiftWith(setc); - state.AddAction(c); - } - } - - private static bool Overlap(Action a, Action b) { - BitArray seta, setb; - if (a.typ == Node.chr) - if (b.typ == Node.chr) return a.sym == b.sym; - else {setb = CharClass.Set(b.sym); return setb[a.sym];} - else { - seta = CharClass.Set(a.sym); - if (b.typ ==Node.chr) return seta[b.sym]; - else {setb = CharClass.Set(b.sym); return Sets.Intersect(seta, setb);} - } - } - - static bool MakeUnique(State state) { // return true if actions were split - bool changed = false; - for (Action a = state.firstAction; a != null; a = a.next) - for (Action b = a.next; b != null; b = b.next) - if (Overlap(a, b)) {SplitActions(state, a, b); changed = true;} - return changed; - } - - static void MeltStates(State state) { - bool changed, ctx; - BitArray targets; - Symbol endOf; - for (Action action = state.firstAction; action != null; action = action.next) { - if (action.target.next != null) { - action.GetTargetStates(out targets, out endOf, out ctx); - Melted melt = Melted.StateWithSet(targets); - if (melt == null) { - State s = NewState(); s.endOf = endOf; s.ctx = ctx; - for (Target targ = action.target; targ != null; targ = targ.next) - s.MeltWith(targ.state); - do {changed = MakeUnique(s);} while (changed); - melt = new Melted(targets, s); - } - action.target.next = null; - action.target.state = melt.state; - } - } - } - - static void FindCtxStates() { - for (State state = firstState; state != null; state = state.next) - for (Action a = state.firstAction; a != null; a = a.next) - if (a.tc == Node.contextTrans) a.target.state.ctx = true; - } - - public static void MakeDeterministic() { - State state; - bool changed; - lastSimState = lastState.nr; - maxStates = 2 * lastSimState; // heuristic for set size in Melted.set - FindCtxStates(); - for (state = firstState; state != null; state = state.next) - do {changed = MakeUnique(state);} while (changed); - for (state = firstState; state != null; state = state.next) - MeltStates(state); - DeleteRedundantStates(); - CombineShifts(); - } - - public static void PrintStates() { - Trace.WriteLine(); - Trace.WriteLine("---------- states ----------"); - for (State state = firstState; state != null; state = state.next) { - bool first = true; - if (state.endOf == null) Trace.Write(" "); - else Trace.Write("E({0,12})", Node.Name(state.endOf.name)); - Trace.Write("{0,3}:", state.nr); - if (state.firstAction == null) Trace.WriteLine(); - for (Action action = state.firstAction; action != null; action = action.next) { - if (first) {Trace.Write(" "); first = false;} else Trace.Write(" "); - if (action.typ == Node.clas) Trace.Write(((CharClass)CharClass.classes[action.sym]).name); - else Trace.Write("{0, 3}", Ch((char)action.sym)); - for (Target targ = action.target; targ != null; targ = targ.next) - Trace.Write(" {0, 3}", targ.state.nr); - if (action.tc == Node.contextTrans) Trace.WriteLine(" context"); else Trace.WriteLine(); - } - } - Trace.WriteLine(); - Trace.WriteLine("---------- character classes ----------"); - CharClass.WriteClasses(); - } - - static void GenComBody(Comment com) { - gen.WriteLine( "\t\t\tfor(;;) {"); - gen.Write ( "\t\t\t\tif ({0}) ", ChCond(com.stop[0])); gen.WriteLine("{"); - if (com.stop.Length == 1) { - gen.WriteLine("\t\t\t\t\tlevel--;"); - gen.WriteLine("\t\t\t\t\tif (level == 0) { oldEols = line - line0; NextCh(); return true; }"); - gen.WriteLine("\t\t\t\t\tNextCh();"); - } else { - gen.WriteLine("\t\t\t\t\tNextCh();"); - gen.WriteLine("\t\t\t\t\tif ({0}) {{", ChCond(com.stop[1])); - gen.WriteLine("\t\t\t\t\t\tlevel--;"); - gen.WriteLine("\t\t\t\t\t\tif (level == 0) { oldEols = line - line0; NextCh(); return true; }"); - gen.WriteLine("\t\t\t\t\t\tNextCh();"); - gen.WriteLine("\t\t\t\t\t}"); - } - if (com.nested) { - gen.Write ("\t\t\t\t}"); gen.Write(" else if ({0}) ", ChCond(com.start[0])); gen.WriteLine("{"); - if (com.start.Length == 1) - gen.WriteLine("\t\t\t\t\tlevel++; NextCh();"); - else { - gen.WriteLine("\t\t\t\t\tNextCh();"); - gen.Write ("\t\t\t\t\tif ({0}) ", ChCond(com.start[1])); gen.WriteLine("{"); - gen.WriteLine("\t\t\t\t\t\tlevel++; NextCh();"); - gen.WriteLine("\t\t\t\t\t}"); - } - } - gen.WriteLine( "\t\t\t\t} else if (ch == Buffer.EOF) return false;"); - gen.WriteLine( "\t\t\t\telse NextCh();"); - gen.WriteLine( "\t\t\t}"); - } - - static void GenComment(Comment com, int i) { - gen.WriteLine(); - gen.Write ("\tstatic bool Comment{0}() ", i); gen.WriteLine("{"); - gen.WriteLine("\t\tint level = 1, line0 = line, lineStart0 = lineStart;"); - if (com.start.Length == 1) { - gen.WriteLine("\t\tNextCh();"); - GenComBody(com); - } else { - gen.WriteLine("\t\tNextCh();"); - gen.Write ("\t\tif ({0}) ", ChCond(com.start[1])); gen.WriteLine("{"); - gen.WriteLine("\t\t\tNextCh();"); - GenComBody(com); - gen.WriteLine("\t\t} else {"); - gen.WriteLine("\t\t\tif (ch==EOL) {line--; lineStart = lineStart0;}"); - gen.WriteLine("\t\t\tpos = pos - 2; Buffer.Pos = pos+1; NextCh();"); - gen.WriteLine("\t\t}"); - gen.WriteLine("\t\treturn false;"); - } - gen.WriteLine("\t}"); - } - - static void CopyFramePart(string stop) { - char startCh = stop[0]; - int endOfStopString = stop.Length-1; - int ch = fram.ReadByte(); - while (ch != EOF) - if (ch == startCh) { - int i = 0; - do { - if (i == endOfStopString) return; // stop[0..i] found - ch = fram.ReadByte(); i++; - } while (ch == stop[i]); - // stop[0..i-1] found; continue with last read character - gen.Write(stop.Substring(0, i)); - } else { - gen.Write((char)ch); ch = fram.ReadByte(); - } - Errors.Exception(" -- incomplete or corrupt scanner frame file"); - } - - static string SymName(Symbol sym) { - if (Char.IsLetter(sym.name[0])) { // real name value is stored in Tab.literals - foreach (DictionaryEntry e in Tab.literals) - if ((Symbol)e.Value == sym) return (string)e.Key; - } - return sym.name; - } - - static void GenLiterals () { - if (ignoreCase) { - gen.WriteLine("\t\tswitch (t.val.ToLower()) {"); - } else { - gen.WriteLine("\t\tswitch (t.val) {"); - } - foreach (Symbol sym in Symbol.terminals) { - if (sym.tokenKind == Symbol.litToken) { - string name = SymName(sym); - if (ignoreCase) name = name.ToLower(); - // sym.name stores literals with quotes, e.g. "\"Literal\"" - gen.WriteLine("\t\t\tcase {0}: t.kind = {1}; break;", name, sym.n); - } - } - gen.WriteLine("\t\t\tdefault: break;"); - gen.Write("\t\t}"); - } - - static void WriteState(State state) { - Symbol endOf = state.endOf; - gen.WriteLine("\t\t\tcase {0}:", state.nr); - bool ctxEnd = state.ctx; - for (Action action = state.firstAction; action != null; action = action.next) { - if (action == state.firstAction) gen.Write("\t\t\t\tif ("); - else gen.Write("\t\t\t\telse if ("); - if (action.typ == Node.chr) gen.Write(ChCond((char)action.sym)); - else PutRange(CharClass.Set(action.sym)); - gen.Write(") {"); - if (action.tc == Node.contextTrans) { - gen.Write("apx++; "); ctxEnd = false; - } else if (state.ctx) - gen.Write("apx = 0; "); - if (ignoreCase) gen.Write("buf.Append(valCh); "); else gen.Write("buf.Append(ch); "); - gen.Write("NextCh(); goto case {0};", action.target.state.nr); - gen.WriteLine("}"); - } - if (state.firstAction == null) - gen.Write("\t\t\t\t{"); - else - gen.Write("\t\t\t\telse {"); - if (ctxEnd) { // final context state: cut appendix - gen.WriteLine(); - gen.WriteLine("\t\t\t\t\tbuf.Length = buf.Length - apx;"); - gen.WriteLine("\t\t\t\t\tpos = pos - apx - 1; line = t.line;"); - gen.WriteLine("\t\t\t\t\tBuffer.Pos = pos+1; NextCh();"); - gen.Write( "\t\t\t\t\t"); - } - if (endOf == null) { - gen.WriteLine("t.kind = noSym; goto done;}"); - } else { - gen.Write("t.kind = {0}; ", endOf.n); - if (endOf.tokenKind == Symbol.classLitToken) { - gen.WriteLine("t.val = buf.ToString(); CheckLiteral(); return t;}"); - } else { - gen.WriteLine("goto done;}"); - } - } - } - - static void FillStartTab(int[] startTab) { - for (Action action = firstState.firstAction; action != null; action = action.next) { - int targetState = action.target.state.nr; - if (action.typ == Node.chr) startTab[action.sym] = targetState; - else { - BitArray s = CharClass.Set(action.sym); - for (int i = 0; i < s.Count; i++) - if (s[i]) startTab[i] = targetState; - } - } - } - - static void OpenGen(bool backUp) { /* pdt */ - try { - string fn = srcDir + "Scanner.cs"; /* pdt */ - if (File.Exists(fn) && backUp) File.Copy(fn, fn + ".old", true); - gen = new StreamWriter(new FileStream(fn, FileMode.Create)); /* pdt */ - } catch (IOException) { - Errors.Exception("-- Cannot generate scanner file"); - } - } - - public static void WriteScanner() { - int i, j; - int[] startTab = new int[CharClass.charSetSize]; - string fr = srcDir + "Scanner.frame"; /* pdt */ - if (!File.Exists(fr)) { - if (Tab.frameDir != null) fr = Tab.frameDir.Trim() + Path.DirectorySeparatorChar + "Scanner.frame"; - if (!File.Exists(fr)) Errors.Exception("-- Cannot find Scanner.frame"); - } - try { - fram = new FileStream(fr, FileMode.Open, FileAccess.Read, FileShare.Read); - } catch (FileNotFoundException) { - Errors.Exception("-- Cannot open Scanner.frame."); - } - OpenGen(true); /* pdt */ - if (dirtyDFA) MakeDeterministic(); - FillStartTab(startTab); - CopyFramePart("-->begin"); - if (!srcName.ToLower().EndsWith("coco.atg")) { - gen.Close(); OpenGen(false); /* pdt */ - } - CopyFramePart("-->namespace"); - /* AW add namespace, if it exists */ - if (Tab.nsName != null && Tab.nsName.Length > 0) { - gen.Write("namespace "); - gen.Write(Tab.nsName); - gen.Write(" {"); - } - CopyFramePart("-->declarations"); - gen.WriteLine("\tconst int charSetSize = {0};", CharClass.charSetSize); - gen.WriteLine("\tconst int maxT = {0};", Symbol.terminals.Count - 1); - gen.WriteLine("\tconst int noSym = {0};", Tab.noSym.n); - gen.WriteLine("\tstatic short[] start = {"); - for (i = 0; i < CharClass.charSetSize / 16; i++) { - gen.Write("\t"); - for (j = 0; j < 16; j++) - gen.Write("{0,3},", startTab[16*i+j]); - gen.WriteLine(); - } - gen.WriteLine("\t -1};"); /* pdt */ - if (ignoreCase) - gen.Write("\tstatic char valCh; // current input character (for token.val)"); - CopyFramePart("-->initialization"); - gen.WriteLine("\t\tignore = new BitArray(charSetSize+1);"); /* pdt */ - gen.Write("\t\t"); - if (Tab.ignored == null) gen.Write("ignore[' '] = true;"); - else { - j = 0; - for (i = 0; i < Tab.ignored.Count; i++) - if (Tab.ignored[i]) { - gen.Write("ignore[{0}] = true; ", i); - if (++j % 4 == 0) { gen.WriteLine(); gen.Write("\t\t"); } - } - } - CopyFramePart("-->casing"); - if (ignoreCase) { - gen.WriteLine("\t\tvalCh = ch;"); - gen.Write ("\t\tif (ch != Buffer.EOF) ch = char.ToLower(ch);"); - } - CopyFramePart("-->comments"); - Comment com = Comment.first; i = 0; - while (com != null) { - GenComment(com, i); - com = com.next; i++; - } - CopyFramePart("-->literals"); GenLiterals(); - CopyFramePart("-->scan1"); - if (Comment.first!=null) { - gen.Write("\t\tif ("); - com = Comment.first; i = 0; - while (com != null) { - gen.Write(ChCond(com.start[0])); - gen.Write(" && Comment{0}()", i); - if (com.next != null) gen.Write(" ||"); - com = com.next; i++; - } - gen.Write(") return NextToken();"); - } - if (hasCtxMoves) { gen.WriteLine(); gen.Write("\t\tint apx = 0;"); } /* pdt */ - CopyFramePart("-->scan2"); - if (ignoreCase) gen.Write("\t\tbuf.Append(valCh); NextCh();"); - else gen.Write("\t\tbuf.Append(ch); NextCh();"); - CopyFramePart("-->scan3"); - for (State state = firstState.next; state != null; state = state.next) - WriteState(state); - CopyFramePart("$$$"); - /* AW 12-20-02 close namespace, if it exists */ - if (Tab.nsName != null && Tab.nsName.Length > 0) gen.Write("}"); - gen.Close(); - } - - public static void Init (string file, string dir) { - srcName = file; - srcDir = dir; - firstState = null; lastState = null; State.lastNr = -1; - firstState = NewState(); - Melted.first = null; Comment.first = null; - ignoreCase = false; - dirtyDFA = false; - hasCtxMoves = false; - } - -} // end DFA - -} // end namespace \ No newline at end of file diff --git a/src/Tools/SharpCoco/src/Parser.cs b/src/Tools/SharpCoco/src/Parser.cs deleted file mode 100644 index 515af33d40..0000000000 --- a/src/Tools/SharpCoco/src/Parser.cs +++ /dev/null @@ -1,785 +0,0 @@ -/*---------------------------------------------------------------------- -Compiler Generator Coco/R, -Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz -extended by M. Loeberbauer & A. Woess, Univ. of Linz -with improvements by Pat Terry, Rhodes University - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -As an exception, it is allowed to write an extension of Coco/R that is -used as a plugin in non-free software. - -If not otherwise stated, any source code generated by Coco/R (other than -Coco/R itself) does not fall under the GNU General Public License. -----------------------------------------------------------------------*/ -using System.Collections; - -using System; - -namespace at.jku.ssw.Coco { - - - -public class Parser { - const int _EOF = 0; - const int _ident = 1; - const int _number = 2; - const int _string = 3; - const int _badString = 4; - const int _char = 5; - const int maxT = 41; - - const bool T = true; - const bool x = false; - const int minErrDist = 2; - - public static Token t; // last recognized token - public static Token la; // lookahead token - static int errDist = minErrDist; - -const int id = 0; - const int str = 1; - - static bool genScanner; - static string tokenString; // used in declarations of literal tokens - static string noString = "-none-"; // used in declarations of literal tokens - -/*-------------------------------------------------------------------------*/ - - - - static void SynErr (int n) { - if (errDist >= minErrDist) Errors.SynErr(la.line, la.col, n); - errDist = 0; - } - - public static void SemErr (string msg) { - if (errDist >= minErrDist) Errors.Error(t.line, t.col, msg); - errDist = 0; - } - - static void Get () { - for (;;) { - t = la; - la = Scanner.Scan(); - if (la.kind <= maxT) { ++errDist; break; } - if (la.kind == 42) { - Tab.SetDDT(la.val); - } - - la = t; - } - } - - static void Expect (int n) { - if (la.kind==n) Get(); else { SynErr(n); } - } - - static bool StartOf (int s) { - return set[s, la.kind]; - } - - static void ExpectWeak (int n, int follow) { - if (la.kind == n) Get(); - else { - SynErr(n); - while (!StartOf(follow)) Get(); - } - } - - static bool WeakSeparator (int n, int syFol, int repFol) { - bool[] s = new bool[maxT+1]; - if (la.kind == n) { Get(); return true; } - else if (StartOf(repFol)) return false; - else { - for (int i=0; i <= maxT; i++) { - s[i] = set[syFol, i] || set[repFol, i] || set[0, i]; - } - SynErr(n); - while (!s[la.kind]) Get(); - return StartOf(syFol); - } - } - - static void Coco() { - Symbol sym; Graph g, g1, g2; string gramName; - if (la.kind == 39) { - UsingDecl(out ParserGen.usingPos); - } - Expect(6); - genScanner = true; Tab.ignored = null; - Expect(1); - gramName = t.val; - int beg = la.pos; - - while (StartOf(1)) { - Get(); - } - Tab.semDeclPos = new Position(beg, la.pos-beg, 0); - if (la.kind == 7) { - Get(); - DFA.ignoreCase = true; - } - if (la.kind == 8) { - Get(); - while (la.kind == 1) { - SetDecl(); - } - } - if (la.kind == 9) { - Get(); - while (la.kind == 1 || la.kind == 3 || la.kind == 5) { - TokenDecl(Node.t); - } - } - if (la.kind == 10) { - Get(); - while (la.kind == 1 || la.kind == 3 || la.kind == 5) { - TokenDecl(Node.pr); - } - } - while (la.kind == 11) { - Get(); - bool nested = false; - Expect(12); - TokenExpr(out g1); - Expect(13); - TokenExpr(out g2); - if (la.kind == 14) { - Get(); - nested = true; - } - new Comment(g1.l, g2.l, nested); - } - while (la.kind == 15) { - Get(); - Set(out Tab.ignored); - Tab.ignored[' '] = true; /* ' ' is always ignored */ - } - while (!(la.kind == 0 || la.kind == 16)) {SynErr(42); Get();} - Expect(16); - if (genScanner) DFA.MakeDeterministic(); - Graph.DeleteNodes(); - - while (la.kind == 1) { - Get(); - sym = Symbol.Find(t.val); - bool undef = sym == null; - if (undef) sym = new Symbol(Node.nt, t.val, t.line); - else { - if (sym.typ == Node.nt) { - if (sym.graph != null) SemErr("name declared twice"); - } else SemErr("this symbol kind not allowed on left side of production"); - sym.line = t.line; - } - bool noAttrs = sym.attrPos == null; - sym.attrPos = null; - - if (la.kind == 24) { - AttrDecl(sym); - } - if (!undef) - if (noAttrs != (sym.attrPos == null)) - SemErr("attribute mismatch between declaration and use of this symbol"); - - if (la.kind == 37) { - SemText(out sym.semPos); - } - ExpectWeak(17, 2); - Expression(out g); - sym.graph = g.l; - Graph.Finish(g); - - ExpectWeak(18, 3); - } - Expect(19); - Expect(1); - if (gramName != t.val) - SemErr("name does not match grammar name"); - Tab.gramSy = Symbol.Find(gramName); - if (Tab.gramSy == null) - SemErr("missing production for grammar name"); - else { - sym = Tab.gramSy; - if (sym.attrPos != null) - SemErr("grammar symbol must not have attributes"); - } - Tab.noSym = new Symbol(Node.t, "???", 0); // noSym gets highest number - Tab.SetupAnys(); - Tab.RenumberPragmas(); - if (Tab.ddt[2]) Node.PrintNodes(); - if (Errors.count == 0) { - Console.WriteLine("checking"); - Tab.CompSymbolSets(); - if (Tab.ddt[7]) Tab.XRef(); - if (Tab.GrammarOk()) { - Console.Write("parser"); - ParserGen.WriteParser(); - if (genScanner) { - Console.Write(" + scanner"); - DFA.WriteScanner(); - if (Tab.ddt[0]) DFA.PrintStates(); - } - Console.WriteLine(" generated"); - if (Tab.ddt[8]) ParserGen.WriteStatistics(); - } - } - if (Tab.ddt[6]) Tab.PrintSymbolTable(); - - Expect(18); - } - - static void UsingDecl(out Position pos) { - Expect(39); - int beg = t.pos; - while (StartOf(4)) { - Get(); - } - Expect(40); - int end = t.pos; - while (la.kind == 39) { - Get(); - while (StartOf(4)) { - Get(); - } - Expect(40); - end = t.pos; - } - pos = new Position(beg, end - beg + 1, 0); - } - - static void SetDecl() { - BitArray s; - Expect(1); - string name = t.val; - CharClass c = CharClass.Find(name); - if (c != null) SemErr("name declared twice"); - - Expect(17); - Set(out s); - if (Sets.Elements(s) == 0) SemErr("character set must not be empty"); - c = new CharClass(name, s); - - Expect(18); - } - - static void TokenDecl(int typ) { - string name; int kind; Symbol sym; Graph g; - Sym(out name, out kind); - sym = Symbol.Find(name); - if (sym != null) SemErr("name declared twice"); - else { - sym = new Symbol(typ, name, t.line); - sym.tokenKind = Symbol.fixedToken; - } - tokenString = null; - - while (!(StartOf(5))) {SynErr(43); Get();} - if (la.kind == 17) { - Get(); - TokenExpr(out g); - Expect(18); - if (kind == str) SemErr("a literal must not be declared with a structure"); - Graph.Finish(g); - if (tokenString == null || tokenString.Equals(noString)) - DFA.ConvertToStates(g.l, sym); - else { // TokenExpr is a single string - if (Tab.literals[tokenString] != null) - SemErr("token string declared twice"); - Tab.literals[tokenString] = sym; - DFA.MatchLiteral(tokenString, sym); - } - - } else if (StartOf(6)) { - if (kind == id) genScanner = false; - else DFA.MatchLiteral(sym.name, sym); - - } else SynErr(44); - if (la.kind == 37) { - SemText(out sym.semPos); - if (typ != Node.pr) SemErr("semantic action not allowed here"); - } - } - - static void TokenExpr(out Graph g) { - Graph g2; - TokenTerm(out g); - bool first = true; - while (WeakSeparator(26,7,8) ) { - TokenTerm(out g2); - if (first) { Graph.MakeFirstAlt(g); first = false; } - Graph.MakeAlternative(g, g2); - - } - } - - static void Set(out BitArray s) { - BitArray s2; - SimSet(out s); - while (la.kind == 20 || la.kind == 21) { - if (la.kind == 20) { - Get(); - SimSet(out s2); - s.Or(s2); - } else { - Get(); - SimSet(out s2); - Sets.Subtract(s, s2); - } - } - } - - static void AttrDecl(Symbol sym) { - Expect(24); - int beg = la.pos; int col = la.col; - while (StartOf(9)) { - // CHANGES BY M.KRUEGER - if (la.kind == 24) { - AttrDecl(sym); - } else - // EOC - if (StartOf(10)) { - Get(); - } else { - Get(); - SemErr("bad string in attributes"); - } - } - Expect(25); - if (t.pos > beg) - sym.attrPos = new Position(beg, t.pos - beg, col); - } - - static void SemText(out Position pos) { - Expect(37); - int beg = la.pos; int col = la.col; - while (StartOf(11)) { - if (StartOf(12)) { - Get(); - } else if (la.kind == 4) { - Get(); - SemErr("bad string in semantic action"); - } else { - Get(); - SemErr("missing end of previous semantic action"); - } - } - Expect(38); - pos = new Position(beg, t.pos - beg, col); - } - - static void Expression(out Graph g) { - Graph g2; - Term(out g); - bool first = true; - while (WeakSeparator(26,13,14) ) { - Term(out g2); - if (first) { Graph.MakeFirstAlt(g); first = false; } - Graph.MakeAlternative(g, g2); - - } - } - - static void SimSet(out BitArray s) { - int n1, n2; - s = new BitArray(CharClass.charSetSize); - if (la.kind == 1) { - Get(); - CharClass c = CharClass.Find(t.val); - if (c == null) SemErr("undefined name"); else s.Or(c.set); - - } else if (la.kind == 3) { - Get(); - string name = t.val; - name = DFA.Unescape(name.Substring(1, name.Length-2)); - foreach (char ch in name) - if (DFA.ignoreCase) s[char.ToLower(ch)] = true; - else s[ch] = true; - } else if (la.kind == 5) { - Char(out n1); - s[n1] = true; - if (la.kind == 22) { - Get(); - Char(out n2); - for (int i = n1; i <= n2; i++) s[i] = true; - } - } else if (la.kind == 23) { - Get(); - s = new BitArray(CharClass.charSetSize, true); - } else SynErr(45); - } - - static void Char(out int n) { - Expect(5); - string name = t.val; n = 0; - name = DFA.Unescape(name.Substring(1, name.Length-2)); - int max = CharClass.charSetSize; - if (name.Length == 1 && name[0] <= max-1) n = name[0] % max; - else SemErr("unacceptable character value"); - if (DFA.ignoreCase && (char)n >= 'A' && (char)n <= 'Z') n += 32; - - } - - static void Sym(out string name, out int kind) { - name = "???"; kind = id; - if (la.kind == 1) { - Get(); - kind = id; name = t.val; - } else if (la.kind == 3 || la.kind == 5) { - if (la.kind == 3) { - Get(); - name = t.val; - } else { - Get(); - name = "\"" + t.val.Substring(1, t.val.Length-2) + "\""; - } - kind = str; - if (DFA.ignoreCase) name = name.ToLower(); - if (name.IndexOf(' ') >= 0) - SemErr("literal tokens must not contain blanks"); - } else SynErr(46); - } - - static void Term(out Graph g) { - Graph g2; Node rslv = null; g = null; - if (StartOf(15)) { - if (la.kind == 35) { - rslv = new Node(Node.rslv, null, la.line); - Resolver(out rslv.pos); - g = new Graph(rslv); - } - Factor(out g2); - if (rslv != null) Graph.MakeSequence(g, g2); - else g = g2; - - while (StartOf(16)) { - Factor(out g2); - Graph.MakeSequence(g, g2); - } - } else if (StartOf(17)) { - g = new Graph(new Node(Node.eps, null, 0)); - } else SynErr(47); - if (g == null) // invalid start of Term - g = new Graph(new Node(Node.eps, null, 0)); - - } - - static void Resolver(out Position pos) { - Expect(35); - Expect(28); - int beg = la.pos; int col = la.col; - Condition(); - pos = new Position(beg, t.pos - beg, col); - } - - static void Factor(out Graph g) { - string name; int kind; Position pos; bool weak = false; - g = null; - - switch (la.kind) { - case 1: case 3: case 5: case 27: { - if (la.kind == 27) { - Get(); - weak = true; - } - Sym(out name, out kind); - Symbol sym = Symbol.Find(name); - if (sym == null && kind == str) - sym = Tab.literals[name] as Symbol; - bool undef = sym == null; - if (undef) { - if (kind == id) - sym = new Symbol(Node.nt, name, 0); // forward nt - else if (genScanner) { - sym = new Symbol(Node.t, name, t.line); - DFA.MatchLiteral(sym.name, sym); - } else { // undefined string in production - SemErr("undefined string in production"); - sym = Tab.eofSy; // dummy - } - } - int typ = sym.typ; - if (typ != Node.t && typ != Node.nt) - SemErr("this symbol kind is not allowed in a production"); - if (weak) - if (typ == Node.t) typ = Node.wt; - else SemErr("only terminals may be weak"); - Node p = new Node(typ, sym, t.line); - g = new Graph(p); - - if (la.kind == 24) { - Attribs(p); - if (kind != id) SemErr("a literal must not have attributes"); - } - if (undef) - sym.attrPos = p.pos; // dummy - else if ((p.pos == null) != (sym.attrPos == null)) - SemErr("attribute mismatch between declaration and use of this symbol"); - - break; - } - case 28: { - Get(); - Expression(out g); - Expect(29); - break; - } - case 30: { - Get(); - Expression(out g); - Expect(31); - Graph.MakeOption(g); - break; - } - case 32: { - Get(); - Expression(out g); - Expect(33); - Graph.MakeIteration(g); - break; - } - case 37: { - SemText(out pos); - Node p = new Node(Node.sem, null, 0); - p.pos = pos; - g = new Graph(p); - - break; - } - case 23: { - Get(); - Node p = new Node(Node.any, null, 0); // p.set is set in Tab.SetupAnys - g = new Graph(p); - - break; - } - case 34: { - Get(); - Node p = new Node(Node.sync, null, 0); - g = new Graph(p); - - break; - } - default: SynErr(48); break; - } - if (g == null) // invalid start of Factor - g = new Graph(new Node(Node.eps, null, 0)); - - } - - static void Attribs(Node p) { - Expect(24); - int beg = la.pos; int col = la.col; - while (StartOf(9)) { - // CHANGES BY M.KRUEGER - if (la.kind == 24) { - Attribs(p); - } else - // EOC - if (StartOf(10)) { - Get(); - } else { - Get(); - SemErr("bad string in attributes"); - } - } - Expect(25); - if (t.pos > beg) p.pos = new Position(beg, t.pos - beg, col); - } - - static void Condition() { - while (StartOf(18)) { - if (la.kind == 28) { - Get(); - Condition(); - } else { - Get(); - } - } - Expect(29); - } - - static void TokenTerm(out Graph g) { - Graph g2; - TokenFactor(out g); - while (StartOf(7)) { - TokenFactor(out g2); - Graph.MakeSequence(g, g2); - } - if (la.kind == 36) { - Get(); - Expect(28); - TokenExpr(out g2); - Graph.SetContextTrans(g2.l); Graph.MakeSequence(g, g2); - Expect(29); - } - } - - static void TokenFactor(out Graph g) { - string name; int kind; - g = null; - if (la.kind == 1 || la.kind == 3 || la.kind == 5) { - Sym(out name, out kind); - if (kind == id) { - CharClass c = CharClass.Find(name); - if (c == null) { - SemErr("undefined name"); - c = new CharClass(name, new BitArray(CharClass.charSetSize)); - } - Node p = new Node(Node.clas, null, 0); p.val = c.n; - g = new Graph(p); - tokenString = noString; - } else { // str - g = Graph.StrToGraph(name); - if (tokenString == null) tokenString = name; - else tokenString = noString; - } - - } else if (la.kind == 28) { - Get(); - TokenExpr(out g); - Expect(29); - } else if (la.kind == 30) { - Get(); - TokenExpr(out g); - Expect(31); - Graph.MakeOption(g); - } else if (la.kind == 32) { - Get(); - TokenExpr(out g); - Expect(33); - Graph.MakeIteration(g); - } else SynErr(49); - if (g == null) // invalid start of TokenFactor - g = new Graph(new Node(Node.eps, null, 0)); - } - - - - public static void Parse() { - la = new Token(); - la.val = ""; - Get(); - Coco(); - - Expect(0); - } - - static bool[,] set = { - {T,T,x,T, x,T,x,x, x,x,T,T, x,x,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x}, - {x,T,T,T, T,T,T,x, x,x,x,x, T,T,T,x, x,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,x}, - {T,T,x,T, x,T,x,x, x,x,T,T, x,x,x,T, T,T,T,x, x,x,x,T, x,x,T,T, T,x,T,x, T,x,T,T, x,T,x,x, x,x,x}, - {T,T,x,T, x,T,x,x, x,x,T,T, x,x,x,T, T,T,x,T, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x}, - {x,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, x,T,x}, - {T,T,x,T, x,T,x,x, x,x,T,T, x,x,x,T, T,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x}, - {x,T,x,T, x,T,x,x, x,x,T,T, x,x,x,T, T,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,T,x,x, x,x,x}, - {x,T,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, T,x,T,x, T,x,x,x, x,x,x,x, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,T, x,T,T,T, T,x,T,x, x,x,x,x, x,x,x,x, x,T,x,T, x,T,x,x, x,x,x,x, x,x,x}, - {x,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,x,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,x}, - {x,T,T,T, x,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,x,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,x}, - {x,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,x,T, T,T,x}, - {x,T,T,T, x,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,x,x,T, T,T,x}, - {x,T,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,T, x,x,T,T, T,T,T,T, T,T,T,T, x,T,x,x, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,x,x, x,T,x,T, x,T,x,x, x,x,x,x, x,x,x}, - {x,T,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, T,x,T,x, T,x,T,T, x,T,x,x, x,x,x}, - {x,T,x,T, x,T,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,T, x,x,x,T, T,x,T,x, T,x,T,x, x,T,x,x, x,x,x}, - {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,T,x, x,x,x,x, x,x,T,x, x,T,x,T, x,T,x,x, x,x,x,x, x,x,x}, - {x,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,x,T,T, T,T,T,T, T,T,T,T, T,T,x} - - }; -} // end Parser - - -public class Errors { - public static int count = 0; // number of errors detected - public static string errMsgFormat = "-- line {0} col {1}: {2}"; // 0=line, 1=column, 2=text - - public static void SynErr (int line, int col, int n) { - string s; - switch (n) { - case 0: s = "EOF expected"; break; - case 1: s = "ident expected"; break; - case 2: s = "number expected"; break; - case 3: s = "string expected"; break; - case 4: s = "badString expected"; break; - case 5: s = "char expected"; break; - case 6: s = "\"COMPILER\" expected"; break; - case 7: s = "\"IGNORECASE\" expected"; break; - case 8: s = "\"CHARACTERS\" expected"; break; - case 9: s = "\"TOKENS\" expected"; break; - case 10: s = "\"PRAGMAS\" expected"; break; - case 11: s = "\"COMMENTS\" expected"; break; - case 12: s = "\"FROM\" expected"; break; - case 13: s = "\"TO\" expected"; break; - case 14: s = "\"NESTED\" expected"; break; - case 15: s = "\"IGNORE\" expected"; break; - case 16: s = "\"PRODUCTIONS\" expected"; break; - case 17: s = "\"=\" expected"; break; - case 18: s = "\".\" expected"; break; - case 19: s = "\"END\" expected"; break; - case 20: s = "\"+\" expected"; break; - case 21: s = "\"-\" expected"; break; - case 22: s = "\"..\" expected"; break; - case 23: s = "\"ANY\" expected"; break; - case 24: s = "\"<\" expected"; break; - case 25: s = "\">\" expected"; break; - case 26: s = "\"|\" expected"; break; - case 27: s = "\"WEAK\" expected"; break; - case 28: s = "\"(\" expected"; break; - case 29: s = "\")\" expected"; break; - case 30: s = "\"[\" expected"; break; - case 31: s = "\"]\" expected"; break; - case 32: s = "\"{\" expected"; break; - case 33: s = "\"}\" expected"; break; - case 34: s = "\"SYNC\" expected"; break; - case 35: s = "\"IF\" expected"; break; - case 36: s = "\"CONTEXT\" expected"; break; - case 37: s = "\"(.\" expected"; break; - case 38: s = "\".)\" expected"; break; - case 39: s = "\"using\" expected"; break; - case 40: s = "\";\" expected"; break; - case 41: s = "??? expected"; break; - case 42: s = "this symbol not expected in Coco"; break; - case 43: s = "this symbol not expected in TokenDecl"; break; - case 44: s = "invalid TokenDecl"; break; - case 45: s = "invalid SimSet"; break; - case 46: s = "invalid Sym"; break; - case 47: s = "invalid Term"; break; - case 48: s = "invalid Factor"; break; - case 49: s = "invalid TokenFactor"; break; - - default: s = "error " + n; break; - } - Console.WriteLine(Errors.errMsgFormat, line, col, s); - count++; - } - - public static void SemErr (int line, int col, int n) { - Console.WriteLine(errMsgFormat, line, col, ("error " + n)); - count++; - } - - public static void Error (int line, int col, string s) { - Console.WriteLine(errMsgFormat, line, col, s); - count++; - } - - public static void Exception (string s) { - Console.WriteLine(s); - System.Environment.Exit(1); - } -} // Errors - -} \ No newline at end of file diff --git a/src/Tools/SharpCoco/src/Parser.frame b/src/Tools/SharpCoco/src/Parser.frame deleted file mode 100644 index ea6c58c763..0000000000 --- a/src/Tools/SharpCoco/src/Parser.frame +++ /dev/null @@ -1,140 +0,0 @@ -/*---------------------------------------------------------------------- -Compiler Generator Coco/R, -Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz -extended by M. Loeberbauer & A. Woess, Univ. of Linz -with improvements by Pat Terry, Rhodes University - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -As an exception, it is allowed to write an extension of Coco/R that is -used as a plugin in non-free software. - -If not otherwise stated, any source code generated by Coco/R (other than -Coco/R itself) does not fall under the GNU General Public License. -----------------------------------------------------------------------*/ --->begin -using System; - --->namespace - -public class Parser { --->constants - const bool T = true; - const bool x = false; - const int minErrDist = 2; - - public static Token t; // last recognized token - public static Token la; // lookahead token - static int errDist = minErrDist; - --->declarations - - static void SynErr (int n) { - if (errDist >= minErrDist) Errors.SynErr(la.line, la.col, n); - errDist = 0; - } - - public static void SemErr (string msg) { - if (errDist >= minErrDist) Errors.Error(t.line, t.col, msg); - errDist = 0; - } - - static void Get () { - for (;;) { - t = la; - la = Scanner.Scan(); - if (la.kind <= maxT) { ++errDist; break; } --->pragmas - la = t; - } - } - - static void Expect (int n) { - if (la.kind==n) Get(); else { SynErr(n); } - } - - static bool StartOf (int s) { - return set[s, la.kind]; - } - - static void ExpectWeak (int n, int follow) { - if (la.kind == n) Get(); - else { - SynErr(n); - while (!StartOf(follow)) Get(); - } - } - - static bool WeakSeparator (int n, int syFol, int repFol) { - bool[] s = new bool[maxT+1]; - if (la.kind == n) { Get(); return true; } - else if (StartOf(repFol)) return false; - else { - for (int i=0; i <= maxT; i++) { - s[i] = set[syFol, i] || set[repFol, i] || set[0, i]; - } - SynErr(n); - while (!s[la.kind]) Get(); - return StartOf(syFol); - } - } - --->productions - - public static void Parse() { - la = new Token(); - la.val = ""; - Get(); --->parseRoot - Expect(0); - } - - static bool[,] set = { --->initialization - }; -} // end Parser - - -public class Errors { - public static int count = 0; // number of errors detected - public static string errMsgFormat = "-- line {0} col {1}: {2}"; // 0=line, 1=column, 2=text - - public static void SynErr (int line, int col, int n) { - string s; - switch (n) { --->errors - default: s = "error " + n; break; - } - Console.WriteLine(Errors.errMsgFormat, line, col, s); - count++; - } - - public static void SemErr (int line, int col, int n) { - Console.WriteLine(errMsgFormat, line, col, ("error " + n)); - count++; - } - - public static void Error (int line, int col, string s) { - Console.WriteLine(errMsgFormat, line, col, s); - count++; - } - - public static void Exception (string s) { - Console.WriteLine(s); - System.Environment.Exit(1); - } -} // Errors - -$$$ diff --git a/src/Tools/SharpCoco/src/ParserGen.cs b/src/Tools/SharpCoco/src/ParserGen.cs deleted file mode 100644 index 3e4a1a66ef..0000000000 --- a/src/Tools/SharpCoco/src/ParserGen.cs +++ /dev/null @@ -1,432 +0,0 @@ -/*------------------------------------------------------------------------- -ParserGen.cs -- Generation of the Recursive Descent Parser -Compiler Generator Coco/R, -Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz -extended by M. Loeberbauer & A. Woess, Univ. of Linz -with improvements by Pat Terry, Rhodes University - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -As an exception, it is allowed to write an extension of Coco/R that is -used as a plugin in non-free software. - -If not otherwise stated, any source code generated by Coco/R (other than -Coco/R itself) does not fall under the GNU General Public License. --------------------------------------------------------------------------*/ -using System; -using System.IO; -using System.Collections; -using System.Text; - -namespace at.jku.ssw.Coco { - -public class ParserGen { - - const int maxTerm = 3; // sets of size < maxTerm are enumerated - const char CR = '\r'; - const char LF = '\n'; - const int EOF = -1; - - const int tErr = 0; // error codes - const int altErr = 1; - const int syncErr = 2; - - public static Position usingPos; // "using" definitions from the attributed grammar - // CHANGES BY M.KRUEGER - public static string productionModifiers = String.Empty; - //EOC - - static int errorNr; // highest parser error number - static Symbol curSy; // symbol whose production is currently generated - static FileStream fram; // parser frame file - static StreamWriter gen; // generated parser source file - static StringWriter err; // generated parser error messages - static string srcName; // name of attributed grammar file - static string srcDir; // directory of attributed grammar file - static ArrayList symSet = new ArrayList(); - - static void Indent (int n) { - for (int i = 1; i <= n; i++) gen.Write('\t'); - } - - // AW: use a switch if more than 5 alternatives and none starts with a resolver - static bool UseSwitch (Node p) { - if (p.typ != Node.alt) return false; - int nAlts = 0; - while (p != null) { - ++nAlts; - // must not optimize with switch-statement, if alt uses a resolver expression - if (p.sub.typ == Node.rslv) return false; - p = p.down; - } - return nAlts > 5; - } - - static void CopyFramePart (string stop) { - char startCh = stop[0]; - int endOfStopString = stop.Length-1; - int ch = fram.ReadByte(); - while (ch != EOF) - if (ch == startCh) { - int i = 0; - do { - if (i == endOfStopString) return; // stop[0..i] found - ch = fram.ReadByte(); i++; - } while (ch == stop[i]); - // stop[0..i-1] found; continue with last read character - gen.Write(stop.Substring(0, i)); - } else { - gen.Write((char)ch); ch = fram.ReadByte(); - } - Errors.Exception(" -- incomplete or corrupt parser frame file"); - } - - static void CopySourcePart (Position pos, int indent) { - // Copy text described by pos from atg to gen - int ch, nChars, i; - if (pos != null) { - Buffer.Pos = pos.beg; ch = Buffer.Read(); nChars = pos.len - 1; -// CHANGES BY M.KRUEGER (#line pragma generation) - gen.WriteLine(); - gen.WriteLine(String.Format("#line {0} \"{1}\" ", Buffer.CountLines(pos.beg) + 1, Scanner.fileName)); -// EOC - Indent(indent); - while (nChars >= 0) { - while (ch == CR || ch == LF) { // eol is either CR or CRLF or LF - gen.WriteLine(); Indent(indent); - if (ch == CR) { ch = Buffer.Read(); nChars--; } // skip CR - if (ch == LF) { ch = Buffer.Read(); nChars--; } // skip LF - for (i = 1; i <= pos.col && (ch == ' ' || ch == '\t'); i++) { - // skip blanks at beginning of line - ch = Buffer.Read(); nChars--; - } - if (i <= pos.col) pos.col = i - 1; // heading TABs => not enough blanks - if (nChars < 0) goto done; - } - gen.Write((char)ch); - ch = Buffer.Read(); nChars--; - } - done: - if (indent > 0) gen.WriteLine(); - } - } - - static void GenErrorMsg (int errTyp, Symbol sym) { - errorNr++; - err.Write("\t\t\tcase " + errorNr + ": s = \""); - switch (errTyp) { - case tErr: - if (sym.name[0] == '"') err.Write(DFA.Escape(sym.name) + " expected"); - else err.Write(sym.name + " expected"); - break; - case altErr: err.Write("invalid " + sym.name); break; - case syncErr: err.Write("this symbol not expected in " + sym.name); break; - } - err.WriteLine("\"; break;"); - } - - static int NewCondSet (BitArray s) { - for (int i = 1; i < symSet.Count; i++) // skip symSet[0] (reserved for union of SYNC sets) - if (Sets.Equals(s, (BitArray)symSet[i])) return i; - symSet.Add(s.Clone()); - return symSet.Count - 1; - } - - static void GenCond (BitArray s, Node p) { - if (p.typ == Node.rslv) CopySourcePart(p.pos, 0); - else { - int n = Sets.Elements(s); - if (n == 0) gen.Write("false"); // should never happen - else if (n <= maxTerm) - foreach (Symbol sym in Symbol.terminals) { - if (s[sym.n]) { - gen.Write("la.kind == {0}", sym.n); - --n; - if (n > 0) gen.Write(" || "); - } - } - else - gen.Write("StartOf({0})", NewCondSet(s)); - /* - if (p.typ == Node.alt) { - // for { ... | IF ... | ... } or [ ... | IF ... | ... ] - // check resolvers in addition to terminal start symbols of alternatives - Node q = p; - while (q != null) { - if (q.sub.typ == Node.rslv) { - gen.Write(" || "); - CopySourcePart(q.sub.pos, 0); - } - q = q.down; - } - } - */ - } - } - - static void PutCaseLabels (BitArray s) { - foreach (Symbol sym in Symbol.terminals) - if (s[sym.n]) gen.Write("case {0}: ", sym.n); - } - - static void GenCode (Node p, int indent, BitArray isChecked) { - Node p2; - BitArray s1, s2; - while (p != null) { - switch (p.typ) { - case Node.nt: { - Indent(indent); - gen.Write(p.sym.name + "("); - CopySourcePart(p.pos, 0); - gen.WriteLine(");"); - break; - } - case Node.t: { - Indent(indent); - -// CHANGES BY M.KRUEGER - //if (isChecked[p.sym.n]) gen.WriteLine("Get();"); - if (isChecked[p.sym.n]) gen.WriteLine("lexer.NextToken();"); -//EOC - else gen.WriteLine("Expect({0});", p.sym.n); - break; - } - case Node.wt: { - Indent(indent); - s1 = Tab.Expected(p.next, curSy); - s1.Or(Tab.allSyncSets); - gen.WriteLine("ExpectWeak({0}, {1});", p.sym.n, NewCondSet(s1)); - break; - } - case Node.any: { - Indent(indent); -// CHANGES BY M.KRUEGER - //gen.WriteLine("Get();"); - gen.WriteLine("lexer.NextToken();"); -//EOC - break; - } - case Node.eps: break; // nothing - case Node.rslv: break; // nothing - case Node.sem: { - CopySourcePart(p.pos, indent); - break; - } - case Node.sync: { - Indent(indent); - GenErrorMsg(syncErr, curSy); - s1 = (BitArray)p.set.Clone(); - gen.Write("while (!("); GenCond(s1, p); gen.Write(")) {"); -// CHANGES BY M.KRUEGER - //gen.Write("SynErr({0}); Get();", errorNr); - gen.Write("SynErr({0}); lexer.NextToken(); ", errorNr); -//EOC - gen.WriteLine("}"); - break; - } - case Node.alt: { - s1 = Tab.First(p); - bool equal = Sets.Equals(s1, isChecked); - bool useSwitch = UseSwitch(p); - if (useSwitch) { Indent(indent); gen.WriteLine("switch (la.kind) {"); } - p2 = p; - while (p2 != null) { - s1 = Tab.Expected(p2.sub, curSy); - Indent(indent); - if (useSwitch) { - PutCaseLabels(s1); gen.WriteLine("{"); - } else if (p2 == p) { - gen.Write("if ("); GenCond(s1, p2.sub); gen.WriteLine(") {"); - } else if (p2.down == null && equal) { gen.WriteLine("} else {"); - } else { - gen.Write("} else if ("); GenCond(s1, p2.sub); gen.WriteLine(") {"); - } - s1.Or(isChecked); - //if (p2.sub.typ == Node.rslv) GenCode(p2.sub.next, indent + 1, s1); - //else GenCode(p2.sub, indent + 1, s1); - GenCode(p2.sub, indent + 1, s1); - if (useSwitch) { - Indent(indent); gen.WriteLine("\tbreak;"); - Indent(indent); gen.WriteLine("}"); - } - p2 = p2.down; - } - Indent(indent); - if (equal) { - gen.WriteLine("}"); - } else { - GenErrorMsg(altErr, curSy); - if (useSwitch) { - gen.WriteLine("default: SynErr({0}); break;", errorNr); - Indent(indent); gen.WriteLine("}"); - } else { - gen.Write("} "); gen.WriteLine("else SynErr({0});", errorNr); - } - } - break; - } - case Node.iter: { - Indent(indent); - p2 = p.sub; - gen.Write("while ("); - if (p2.typ == Node.wt) { - s1 = Tab.Expected(p2.next, curSy); - s2 = Tab.Expected(p.next, curSy); - gen.Write("WeakSeparator({0},{1},{2}) ", p2.sym.n, NewCondSet(s1), NewCondSet(s2)); - s1 = new BitArray(Symbol.terminals.Count); // for inner structure - if (p2.up || p2.next == null) p2 = null; else p2 = p2.next; - } else { - s1 = Tab.First(p2); - GenCond(s1, p2); - } - gen.WriteLine(") {"); - GenCode(p2, indent + 1, s1); - Indent(indent); gen.WriteLine("}"); - break; - } - case Node.opt: - //if (p.sub.typ == Node.rslv) s1 = Tab.First(p.sub.next); - //else s1 = Tab.First(p.sub); - s1 = Tab.First(p.sub); - Indent(indent); - gen.Write("if ("); GenCond(s1, p.sub); gen.WriteLine(") {"); - //if (p.sub.typ == Node.rslv) GenCode(p.sub.next, indent + 1, s1); - //else GenCode(p.sub, indent + 1, s1); - GenCode(p.sub, indent + 1, s1); - Indent(indent); gen.WriteLine("}"); - break; - } - if (p.typ != Node.eps && p.typ != Node.sem && p.typ != Node.sync) - isChecked.SetAll(false); // = new BitArray(Symbol.terminals.Count); - if (p.up) break; - p = p.next; - } - } - - static void GenTokens() { - foreach (Symbol sym in Symbol.terminals) { - if (Char.IsLetter(sym.name[0])) - gen.WriteLine("\tconst int _{0} = {1};", sym.name, sym.n); - } - } - - static void GenCodePragmas() { - foreach (Symbol sym in Symbol.pragmas) { - gen.WriteLine("\t\t\t\tif (la.kind == {0}) {{", sym.n); - CopySourcePart(sym.semPos, 4); - gen.WriteLine("\t\t\t\t}"); - } - } - - static void GenProductions() { - foreach (Symbol sym in Symbol.nonterminals) { - curSy = sym; - // CHANGES BY M.KRUEGER - gen.Write("\t" + productionModifiers + " void {0}(", sym.name); - // OLD VERSION: gen.Write("\tstatic void {0}(", sym.name); - //EOC - CopySourcePart(sym.attrPos, 0); - gen.WriteLine(") {"); - CopySourcePart(sym.semPos, 2); - GenCode(sym.graph, 2, new BitArray(Symbol.terminals.Count)); - gen.WriteLine("\t}"); gen.WriteLine(); - } - } - - static void InitSets() { - for (int i = 0; i < symSet.Count; i++) { - BitArray s = (BitArray)symSet[i]; - gen.Write("\t\t{"); - int j = 0; - foreach (Symbol sym in Symbol.terminals) { - if (s[sym.n]) gen.Write("T,"); else gen.Write("x,"); - ++j; - if (j%4 == 0) gen.Write(" "); - } - if (i == symSet.Count-1) gen.WriteLine("x}"); else gen.WriteLine("x},"); - } - } - - static void OpenGen(bool backUp) { /* pdt */ - try { - string fn = srcDir + "Parser.cs"; /* pdt */ - if (File.Exists(fn) && backUp) File.Copy(fn, fn + ".old", true); - gen = new StreamWriter(new FileStream(fn, FileMode.Create)); /* pdt */ - } catch (IOException) { - Errors.Exception("-- Cannot generate parser file"); - } - } - - public static void WriteParser () { - symSet.Add(Tab.allSyncSets); - string fr = srcDir + "Parser.frame"; - if (!File.Exists(fr)) { - if (Tab.frameDir != null) fr = Tab.frameDir.Trim() + Path.DirectorySeparatorChar + "Parser.frame"; - if (!File.Exists(fr)) Errors.Exception("-- Cannot find Parser.frame"); - } - try { - fram = new FileStream(fr, FileMode.Open, FileAccess.Read, FileShare.Read); - } catch (IOException) { - Errors.Exception("-- Cannot open Parser.frame."); - } - OpenGen(true); /* pdt */ - err = new StringWriter(); - foreach (Symbol sym in Symbol.terminals) GenErrorMsg(tErr, sym); - - CopyFramePart("-->begin"); - if (!srcName.ToLower().EndsWith("coco.atg")) { - gen.Close(); OpenGen(false); /* pdt */ - } - if (usingPos != null) {CopySourcePart(usingPos, 0); gen.WriteLine();} - CopyFramePart("-->namespace"); - /* AW open namespace, if it exists */ - if (Tab.nsName != null && Tab.nsName.Length > 0) { - gen.WriteLine("namespace {0} {{", Tab.nsName); - gen.WriteLine(); - } - CopyFramePart("-->constants"); - GenTokens(); /* ML 2002/09/07 write the token kinds */ - gen.WriteLine("\tconst int maxT = {0};", Symbol.terminals.Count-1); - CopyFramePart("-->declarations"); CopySourcePart(Tab.semDeclPos, 0); - CopyFramePart("-->pragmas"); GenCodePragmas(); - CopyFramePart("-->productions"); GenProductions(); - CopyFramePart("-->parseRoot"); gen.WriteLine("\t\t{0}();", Tab.gramSy.name); - CopyFramePart("-->initialization"); InitSets(); - CopyFramePart("-->errors"); gen.Write(err.ToString()); - CopyFramePart("$$$"); - /* AW 2002-12-20 close namespace, if it exists */ - if (Tab.nsName != null && Tab.nsName.Length > 0) gen.Write("}"); - gen.Close(); - } - - public static void WriteStatistics () { - Trace.WriteLine(); - Trace.WriteLine("{0} terminals", Symbol.terminals.Count); - Trace.WriteLine("{0} symbols", Symbol.terminals.Count + Symbol.pragmas.Count + - Symbol.nonterminals.Count); - Trace.WriteLine("{0} nodes", Node.nodes.Count); - Trace.WriteLine("{0} sets", symSet.Count); - } - - public static void Init (string file, string dir) { - srcName = file; - srcDir = dir; - errorNr = -1; - usingPos = null; - } - -} // end ParserGen - -} // end namespace \ No newline at end of file diff --git a/src/Tools/SharpCoco/src/Scanner.cs b/src/Tools/SharpCoco/src/Scanner.cs deleted file mode 100644 index a41e1afcf8..0000000000 --- a/src/Tools/SharpCoco/src/Scanner.cs +++ /dev/null @@ -1,358 +0,0 @@ -/*---------------------------------------------------------------------- -Compiler Generator Coco/R, -Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz -extended by M. Loeberbauer & A. Woess, Univ. of Linz -with improvements by Pat Terry, Rhodes University - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -As an exception, it is allowed to write an extension of Coco/R that is -used as a plugin in non-free software. - -If not otherwise stated, any source code generated by Coco/R (other than -Coco/R itself) does not fall under the GNU General Public License. ------------------------------------------------------------------------*/ - -using System; -using System.IO; -using System.Collections; -using System.Text; - -namespace at.jku.ssw.Coco { - -public class Token { - public int kind; // token kind - public int pos; // token position in the source text (starting at 0) - public int col; // token column (starting at 0) - public int line; // token line (starting at 1) - public string val; // token value - public Token next; // AW 2003-03-07 Tokens are kept in linked list -} - -public class Buffer { - public const char EOF = (char)256; - static byte[] buf; - static int bufLen; - static int pos; - - // CHANGES by M.KRUEGER - public static int CountLines(int offset) - { - int line = 0; - for (int i = 0; i <= offset; ++i) { - if (buf[i] == '\n') { - ++line; - } - } - return line; - } - //EOC - - public static void Fill (Stream s) { - bufLen = (int) s.Length; - buf = new byte[bufLen]; - s.Read(buf, 0, bufLen); - pos = 0; - } - - public static int Read () { - if (pos < bufLen) return buf[pos++]; - else return EOF; /* pdt */ - } - - public static int Peek () { - if (pos < bufLen) return buf[pos]; - else return EOF; /* pdt */ - } - - /* AW 2003-03-10 moved this from ParserGen.cs */ - public static string GetString (int beg, int end) { - StringBuilder s = new StringBuilder(64); - int oldPos = Buffer.Pos; - Buffer.Pos = beg; - while (beg < end) { s.Append((char)Buffer.Read()); beg++; } - Buffer.Pos = oldPos; - return s.ToString(); - } - - public static int Pos { - get { return pos; } - set { - if (value < 0) pos = 0; - else if (value >= bufLen) pos = bufLen; - else pos = value; - } - } -} - -public class Scanner { - const char EOL = '\n'; - const int eofSym = 0; /* pdt */ - const int charSetSize = 256; - const int maxT = 41; - const int noSym = 41; - static short[] start = { - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 11, 0, 10, 0, 0, 5, 29, 20, 0, 14, 0, 15, 28, 0, - 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 0, 27, 17, 13, 18, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 0, 22, 0, 0, - 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 23, 19, 24, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - -1}; - - - static Token t; // current token - static char ch; // current input character - static int pos; // column number of current character - static int line; // line number of current character - static int lineStart; // start position of current line - static int oldEols; // EOLs that appeared in a comment; - static BitArray ignore; // set of characters to be ignored by the scanner - - static Token tokens; // the complete input token stream - static Token pt; // current peek token - - // CHANGES by M.KRUEGER - public static string fileName; - // EOC - - public static void Init (string fileName) { - // CHANGES by M.KRUEGER - Scanner.fileName = fileName; - // EOC - - FileStream s = null; - try { - s = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); - Init(s); - } catch (IOException) { - Console.WriteLine("--- Cannot open file {0}", fileName); - System.Environment.Exit(1); - } finally { - if (s != null) s.Close(); - } - } - - public static void Init (Stream s) { - Buffer.Fill(s); - pos = -1; line = 1; lineStart = 0; - oldEols = 0; - NextCh(); - ignore = new BitArray(charSetSize+1); - ignore[9] = true; ignore[10] = true; ignore[13] = true; ignore[32] = true; - - //--- AW: fill token list - tokens = new Token(); // first token is a dummy - Token node = tokens; - do { - node.next = NextToken(); - node = node.next; - } while (node.kind != eofSym); - node.next = node; - node.val = "EOF"; - t = pt = tokens; - } - - static void NextCh() { - if (oldEols > 0) { ch = EOL; oldEols--; } - else { - ch = (char)Buffer.Read(); pos++; - // replace isolated '\r' by '\n' in order to make - // eol handling uniform across Windows, Unix and Mac - if (ch == '\r' && Buffer.Peek() != '\n') ch = EOL; - if (ch == EOL) { line++; lineStart = pos + 1; } - } - - } - - - static bool Comment0() { - int level = 1, line0 = line, lineStart0 = lineStart; - NextCh(); - if (ch == '*') { - NextCh(); - for(;;) { - if (ch == '*') { - NextCh(); - if (ch == '/') { - level--; - if (level == 0) { oldEols = line - line0; NextCh(); return true; } - NextCh(); - } - } else if (ch == '/') { - NextCh(); - if (ch == '*') { - level++; NextCh(); - } - } else if (ch == Buffer.EOF) return false; - else NextCh(); - } - } else { - if (ch==EOL) {line--; lineStart = lineStart0;} - pos = pos - 2; Buffer.Pos = pos+1; NextCh(); - } - return false; - } - - - static void CheckLiteral() { - switch (t.val) { - case "COMPILER": t.kind = 6; break; - case "IGNORECASE": t.kind = 7; break; - case "CHARACTERS": t.kind = 8; break; - case "TOKENS": t.kind = 9; break; - case "PRAGMAS": t.kind = 10; break; - case "COMMENTS": t.kind = 11; break; - case "FROM": t.kind = 12; break; - case "TO": t.kind = 13; break; - case "NESTED": t.kind = 14; break; - case "IGNORE": t.kind = 15; break; - case "PRODUCTIONS": t.kind = 16; break; - case "END": t.kind = 19; break; - case "ANY": t.kind = 23; break; - case "WEAK": t.kind = 27; break; - case "SYNC": t.kind = 34; break; - case "IF": t.kind = 35; break; - case "CONTEXT": t.kind = 36; break; - case "using": t.kind = 39; break; - default: break; - } - } - - /* AW Scan() renamed to NextToken() */ - static Token NextToken() { - while (ignore[ch]) NextCh(); - if (ch == '/' && Comment0()) return NextToken(); - t = new Token(); - t.pos = pos; t.col = pos - lineStart + 1; t.line = line; - int state = start[ch]; - StringBuilder buf = new StringBuilder(16); - buf.Append(ch); NextCh(); - - switch (state) { - case -1: { t.kind = eofSym; goto done; } // NextCh already done /* pdt */ - case 0: { t.kind = noSym; goto done; } // NextCh already done - case 1: - if ((ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z')) {buf.Append(ch); NextCh(); goto case 1;} - else {t.kind = 1; t.val = buf.ToString(); CheckLiteral(); return t;} - case 2: - if ((ch >= '0' && ch <= '9')) {buf.Append(ch); NextCh(); goto case 2;} - else {t.kind = 2; goto done;} - case 3: - {t.kind = 3; goto done;} - case 4: - {t.kind = 4; goto done;} - case 5: - if ((ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '&' || ch >= '(' && ch <= '[' || ch >= ']')) {buf.Append(ch); NextCh(); goto case 6;} - else if (ch == 92) {buf.Append(ch); NextCh(); goto case 7;} - else {t.kind = noSym; goto done;} - case 6: - if (ch == 39) {buf.Append(ch); NextCh(); goto case 9;} - else {t.kind = noSym; goto done;} - case 7: - if ((ch >= ' ' && ch <= '~')) {buf.Append(ch); NextCh(); goto case 8;} - else {t.kind = noSym; goto done;} - case 8: - if ((ch >= '0' && ch <= '9' || ch >= 'a' && ch <= 'f')) {buf.Append(ch); NextCh(); goto case 8;} - else if (ch == 39) {buf.Append(ch); NextCh(); goto case 9;} - else {t.kind = noSym; goto done;} - case 9: - {t.kind = 5; goto done;} - case 10: - if ((ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch >= 'a' && ch <= 'z')) {buf.Append(ch); NextCh(); goto case 10;} - else {t.kind = 42; goto done;} - case 11: - if ((ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '!' || ch >= '#' && ch <= '[' || ch >= ']')) {buf.Append(ch); NextCh(); goto case 11;} - else if ((ch == 10 || ch == 13)) {buf.Append(ch); NextCh(); goto case 4;} - else if (ch == '"') {buf.Append(ch); NextCh(); goto case 3;} - else if (ch == 92) {buf.Append(ch); NextCh(); goto case 12;} - else {t.kind = noSym; goto done;} - case 12: - if ((ch >= ' ' && ch <= '~')) {buf.Append(ch); NextCh(); goto case 11;} - else {t.kind = noSym; goto done;} - case 13: - {t.kind = 17; goto done;} - case 14: - {t.kind = 20; goto done;} - case 15: - {t.kind = 21; goto done;} - case 16: - {t.kind = 22; goto done;} - case 17: - {t.kind = 24; goto done;} - case 18: - {t.kind = 25; goto done;} - case 19: - {t.kind = 26; goto done;} - case 20: - {t.kind = 29; goto done;} - case 21: - {t.kind = 30; goto done;} - case 22: - {t.kind = 31; goto done;} - case 23: - {t.kind = 32; goto done;} - case 24: - {t.kind = 33; goto done;} - case 25: - {t.kind = 37; goto done;} - case 26: - {t.kind = 38; goto done;} - case 27: - {t.kind = 40; goto done;} - case 28: - if (ch == '.') {buf.Append(ch); NextCh(); goto case 16;} - else if (ch == ')') {buf.Append(ch); NextCh(); goto case 26;} - else {t.kind = 18; goto done;} - case 29: - if (ch == '.') {buf.Append(ch); NextCh(); goto case 25;} - else {t.kind = 28; goto done;} - - } - done: - t.val = buf.ToString(); - return t; - } - - /* AW 2003-03-07 get the next token, move on and synch peek token with current */ - public static Token Scan () { - t = pt = t.next; - return t; - } - - /* AW 2003-03-07 get the next token, ignore pragmas */ - public static Token Peek () { - do { // skip pragmas while peeking - pt = pt.next; - } while (pt.kind > maxT); - return pt; - } - - /* AW 2003-03-11 to make sure peek start at current scan position */ - public static void ResetPeek () { pt = t; } - -} // end Scanner - -} diff --git a/src/Tools/SharpCoco/src/Scanner.frame b/src/Tools/SharpCoco/src/Scanner.frame deleted file mode 100644 index be14a4e655..0000000000 --- a/src/Tools/SharpCoco/src/Scanner.frame +++ /dev/null @@ -1,202 +0,0 @@ -/*---------------------------------------------------------------------- -Compiler Generator Coco/R, -Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz -extended by M. Loeberbauer & A. Woess, Univ. of Linz -with improvements by Pat Terry, Rhodes University - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -As an exception, it is allowed to write an extension of Coco/R that is -used as a plugin in non-free software. - -If not otherwise stated, any source code generated by Coco/R (other than -Coco/R itself) does not fall under the GNU General Public License. ------------------------------------------------------------------------*/ --->begin -using System; -using System.IO; -using System.Collections; -using System.Text; - --->namespace - -public class Token { - public int kind; // token kind - public int pos; // token position in the source text (starting at 0) - public int col; // token column (starting at 0) - public int line; // token line (starting at 1) - public string val; // token value - public Token next; // AW 2003-03-07 Tokens are kept in linked list -} - -public class Buffer { - public const char EOF = (char)256; - static byte[] buf; - static int bufLen; - static int pos; - // CHANGES by M.KRUEGER - public static int CountLines(int offset) - { - int line = 0; - for (int i = 0; i <= offset; ++i) { - if (buf[i] == '\n') { - ++line; - } - } - return line; - } - //EOC - public static void Fill (Stream s) { - bufLen = (int) s.Length; - buf = new byte[bufLen]; - s.Read(buf, 0, bufLen); - pos = 0; - } - - public static int Read () { - if (pos < bufLen) return buf[pos++]; - else return EOF; /* pdt */ - } - - public static int Peek () { - if (pos < bufLen) return buf[pos]; - else return EOF; /* pdt */ - } - - /* AW 2003-03-10 moved this from ParserGen.cs */ - public static string GetString (int beg, int end) { - StringBuilder s = new StringBuilder(64); - int oldPos = Buffer.Pos; - Buffer.Pos = beg; - while (beg < end) { s.Append((char)Buffer.Read()); beg++; } - Buffer.Pos = oldPos; - return s.ToString(); - } - - public static int Pos { - get { return pos; } - set { - if (value < 0) pos = 0; - else if (value >= bufLen) pos = bufLen; - else pos = value; - } - } -} - -public class Scanner { - const char EOL = '\n'; - const int eofSym = 0; /* pdt */ --->declarations - - static Token t; // current token - static char ch; // current input character - static int pos; // column number of current character - static int line; // line number of current character - static int lineStart; // start position of current line - static int oldEols; // EOLs that appeared in a comment; - static BitArray ignore; // set of characters to be ignored by the scanner - - static Token tokens; // the complete input token stream - static Token pt; // current peek token - - public static void Init (string fileName) { - FileStream s = null; - try { - s = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); - Init(s); - } catch (IOException) { - Console.WriteLine("--- Cannot open file {0}", fileName); - System.Environment.Exit(1); - } finally { - if (s != null) s.Close(); - } - } - - public static void Init (Stream s) { - Buffer.Fill(s); - pos = -1; line = 1; lineStart = 0; - oldEols = 0; - NextCh(); --->initialization - //--- AW: fill token list - tokens = new Token(); // first token is a dummy - Token node = tokens; - do { - node.next = NextToken(); - node = node.next; - } while (node.kind != eofSym); - node.next = node; - node.val = "EOF"; - t = pt = tokens; - } - - static void NextCh() { - if (oldEols > 0) { ch = EOL; oldEols--; } - else { - ch = (char)Buffer.Read(); pos++; - // replace isolated '\r' by '\n' in order to make - // eol handling uniform across Windows, Unix and Mac - if (ch == '\r' && Buffer.Peek() != '\n') ch = EOL; - if (ch == EOL) { line++; lineStart = pos + 1; } - } --->casing - } - --->comments - - static void CheckLiteral() { --->literals - } - - /* AW Scan() renamed to NextToken() */ - static Token NextToken() { - while (ignore[ch]) NextCh(); --->scan1 - t = new Token(); - t.pos = pos; t.col = pos - lineStart + 1; t.line = line; - int state = start[ch]; - StringBuilder buf = new StringBuilder(16); --->scan2 - - switch (state) { - case -1: { t.kind = eofSym; goto done; } // NextCh already done /* pdt */ - case 0: { t.kind = noSym; goto done; } // NextCh already done --->scan3 - } - done: - t.val = buf.ToString(); - return t; - } - - /* AW 2003-03-07 get the next token, move on and synch peek token with current */ - public static Token Scan () { - t = pt = t.next; - return t; - } - - /* AW 2003-03-07 get the next token, ignore pragmas */ - public static Token Peek () { - do { // skip pragmas while peeking - pt = pt.next; - } while (pt.kind > maxT); - return pt; - } - - /* AW 2003-03-11 to make sure peek start at current scan position */ - public static void ResetPeek () { pt = t; } - -} // end Scanner - -$$$ \ No newline at end of file diff --git a/src/Tools/SharpCoco/src/SharpCoco.csproj b/src/Tools/SharpCoco/src/SharpCoco.csproj deleted file mode 100644 index fe662eed44..0000000000 --- a/src/Tools/SharpCoco/src/SharpCoco.csproj +++ /dev/null @@ -1,53 +0,0 @@ - - - Debug - AnyCPU - 8.0.40607 - 2.0 - {b87ee2f4-80bd-476a-8d49-a0bb415b6021} - NewProject - SharpCoco - Exe - 4 - False - False - OnSuccessfulBuild - - - True - True - False - True - ..\bin\Debug\ - False - - - True - True - False - True - ..\bin\Release\ - False - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/Tools/SharpCoco/src/SharpCoco.csproj.user b/src/Tools/SharpCoco/src/SharpCoco.csproj.user deleted file mode 100644 index 942a17a3bf..0000000000 --- a/src/Tools/SharpCoco/src/SharpCoco.csproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - CS.ATG - - - \ No newline at end of file diff --git a/src/Tools/SharpCoco/src/Tab.cs b/src/Tools/SharpCoco/src/Tab.cs deleted file mode 100644 index f2ee854804..0000000000 --- a/src/Tools/SharpCoco/src/Tab.cs +++ /dev/null @@ -1,1082 +0,0 @@ -/*------------------------------------------------------------------------- -Tab.cs -- Symbol Table Management -Compiler Generator Coco/R, -Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz -extended by M. Loeberbauer & A. Woess, Univ. of Linz -with improvements by Pat Terry, Rhodes University - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -As an exception, it is allowed to write an extension of Coco/R that is -used as a plugin in non-free software. - -If not otherwise stated, any source code generated by Coco/R (other than -Coco/R itself) does not fall under the GNU General Public License. --------------------------------------------------------------------------*/ -using System; -using System.IO; -using System.Collections; - -namespace at.jku.ssw.Coco { - -public class Position { // position of source code stretch (e.g. semantic action, resolver expressions) - public int beg; // start relative to the beginning of the file - public int len; // length of stretch - public int col; // column number of start position - - public Position(int beg, int len, int col) { - this.beg = beg; this.len = len; this.col = col; - } -} - - -//--------------------------------------------------------------------- -// Symbols -//--------------------------------------------------------------------- - -public class Symbol : IComparable { - public static ArrayList terminals = new ArrayList(); - public static ArrayList pragmas = new ArrayList(); - public static ArrayList nonterminals = new ArrayList(); - - // token kinds - public const int fixedToken = 0; // e.g. 'a' ('b' | 'c') (structure of literals) - public const int classToken = 1; // e.g. digit {digit} (at least one char class) - public const int litToken = 2; // e.g. "while" - public const int classLitToken = 3; // e.g. letter {letter} but without literals that have the same structure - - public int n; // symbol number - public int typ; // t, nt, pr, unknown, rslv /* ML 29_11_2002 slv added */ /* AW slv --> rslv */ - public string name; // symbol name - public Node graph; // nt: to first node of syntax graph - public int tokenKind; // t: token kind (fixedToken, classToken, ...) - public bool deletable; // nt: true if nonterminal is deletable - public bool firstReady; // nt: true if terminal start symbols have already been computed - public BitArray first; // nt: terminal start symbols - public BitArray follow; // nt: terminal followers - public BitArray nts; // nt: nonterminals whose followers have to be added to this sym - public int line; // source text line number of item in this node - public Position attrPos; // nt: position of attributes in source text (or null) - public Position semPos; // pr: pos of semantic action in source text (or null) - // nt: pos of local declarations in source text (or null) - - public Symbol(int typ, string name, int line) { - if (name.Length == 2 && name[0] == '"') { - Parser.SemErr("empty token not allowed"); name = "???"; - } - this.typ = typ; this.name = name; this.line = line; - switch (typ) { - case Node.t: n = terminals.Count; terminals.Add(this); break; - case Node.pr: pragmas.Add(this); break; - case Node.nt: n = nonterminals.Count; nonterminals.Add(this); break; - } - } - - public static Symbol Find(string name) { - foreach (Symbol s in terminals) - if (s.name == name) return s; - foreach (Symbol s in nonterminals) - if (s.name == name) return s; - return null; - } - - public int CompareTo(object x) { - return name.CompareTo(((Symbol)x).name); - } - -} - - -//--------------------------------------------------------------------- -// Syntax graph (class Node, class Graph) -//--------------------------------------------------------------------- - -public class Node { - public static ArrayList nodes = new ArrayList(); - public static string[] nTyp = - {" ", "t ", "pr ", "nt ", "clas", "chr ", "wt ", "any ", "eps ", /* AW 03-01-14 nTyp[0]: " " --> " " */ - "sync", "sem ", "alt ", "iter", "opt ", "rslv"}; - - // constants for node kinds - public const int t = 1; // terminal symbol - public const int pr = 2; // pragma - public const int nt = 3; // nonterminal symbol - public const int clas = 4; // character class - public const int chr = 5; // character - public const int wt = 6; // weak terminal symbol - public const int any = 7; // - public const int eps = 8; // empty - public const int sync = 9; // synchronization symbol - public const int sem = 10; // semantic action: (. .) - public const int alt = 11; // alternative: | - public const int iter = 12; // iteration: { } - public const int opt = 13; // option: [ ] - public const int rslv = 14; // resolver expr /* ML */ /* AW 03-01-13 renamed slv --> rslv */ - - public const int normalTrans = 0; // transition codes - public const int contextTrans = 1; - - public int n; // node number - public int typ; // t, nt, wt, chr, clas, any, eps, sem, sync, alt, iter, opt, rslv - public Node next; // to successor node - public Node down; // alt: to next alternative - public Node sub; // alt, iter, opt: to first node of substructure - public bool up; // true: "next" leads to successor in enclosing structure - public Symbol sym; // nt, t, wt: symbol represented by this node - public int val; // chr: ordinal character value - // clas: index of character class - public int code; // chr, clas: transition code - public BitArray set; // any, sync: the set represented by this node - public Position pos; // nt, t, wt: pos of actual attributes - // sem: pos of semantic action in source text - public int line; // source text line number of item in this node - public State state; // DFA state corresponding to this node - // (only used in DFA.ConvertToStates) - - public Node(int typ, Symbol sym, int line) { - this.typ = typ; this.sym = sym; this.line = line; - n = nodes.Count; - nodes.Add(this); - } - - public Node(int typ, Node sub): this(typ, null, 0) { - this.sub = sub; - } - - public Node(int typ, int val, int line): this(typ, null, line) { - this.val = val; - } - - public static bool DelGraph(Node p) { - return p == null || DelNode(p) && DelGraph(p.next); - } - - public static bool DelAlt(Node p) { - return p == null || DelNode(p) && (p.up || DelAlt(p.next)); - } - - public static bool DelNode(Node p) { - if (p.typ == nt) return p.sym.deletable; - else if (p.typ == alt) return DelAlt(p.sub) || p.down != null && DelAlt(p.down); - else return p.typ == eps || p.typ == iter || p.typ == opt || p.typ == sem - || p.typ == rslv || p.typ == sync; - } - - //----------------- for printing ---------------------- - - static int Ptr(Node p, bool up) { - if (p == null) return 0; - else if (up) return -p.n; - else return p.n; - } - - static string Pos(Position pos) { - if (pos == null) return " "; else return String.Format("{0,5}", pos.beg); - } - - public static string Name(string name) { - return (name + " ").Substring(0, 12); - // found no simpler way to get the first 12 characters of the name - // padded with blanks on the right - } - - public static void PrintNodes() { - Trace.WriteLine("Graph nodes:"); - Trace.WriteLine("----------------------------------------------------"); - Trace.WriteLine(" n type name next down sub pos line"); - Trace.WriteLine(" val code"); - Trace.WriteLine("----------------------------------------------------"); - foreach (Node p in nodes) { - Trace.Write("{0,4} {1} ", p.n, nTyp[p.typ]); - if (p.sym != null) - Trace.Write("{0,12} ", Name(p.sym.name)); - else if (p.typ == Node.clas) { - CharClass c = (CharClass)CharClass.classes[p.val]; - Trace.Write("{0,12} ", Name(c.name)); - } else Trace.Write(" "); - Trace.Write("{0,5} ", Ptr(p.next, p.up)); - switch (p.typ) { - case t: case nt: case wt: - Trace.Write(" {0,5}", Pos(p.pos)); break; - case chr: - Trace.Write("{0,5} {1,5} ", p.val, p.code); break; - case clas: - Trace.Write(" {0,5} ", p.code); break; - case alt: case iter: case opt: - Trace.Write("{0,5} {1,5} ", Ptr(p.down, false), Ptr(p.sub, false)); break; - case sem: - Trace.Write(" {0,5}", Pos(p.pos)); break; - case eps: case any: case sync: - Trace.Write(" "); break; - } - Trace.WriteLine("{0,5}", p.line); - } - Trace.WriteLine(); - } - -} - - -public class Graph { - static Node dummyNode = new Node(Node.eps, null, 0); - - public Node l; // left end of graph = head - public Node r; // right end of graph = list of nodes to be linked to successor graph - - public Graph() { - l = null; r = null; - } - - public Graph(Node left, Node right) { - l = left; r = right; - } - - public Graph(Node p) { - l = p; r = p; - } - - public static void MakeFirstAlt(Graph g) { - g.l = new Node(Node.alt, g.l); g.l.line = g.l.sub.line; /* AW 2002-03-07 make line available for error handling */ - g.l.next = g.r; - g.r = g.l; - } - - public static void MakeAlternative(Graph g1, Graph g2) { - g2.l = new Node(Node.alt, g2.l); g2.l.line = g2.l.sub.line; - Node p = g1.l; while (p.down != null) p = p.down; - p.down = g2.l; - p = g1.r; while (p.next != null) p = p.next; - p.next = g2.r; - } - - public static void MakeSequence(Graph g1, Graph g2) { - Node p = g1.r.next; g1.r.next = g2.l; // link head node - while (p != null) { // link substructure - Node q = p.next; p.next = g2.l; p.up = true; - p = q; - } - g1.r = g2.r; - } - - public static void MakeIteration(Graph g) { - g.l = new Node(Node.iter, g.l); - Node p = g.r; - g.r = g.l; - while (p != null) { - Node q = p.next; p.next = g.l; p.up = true; - p = q; - } - } - - public static void MakeOption(Graph g) { - g.l = new Node(Node.opt, g.l); - g.l.next = g.r; - g.r = g.l; - } - - public static void Finish(Graph g) { - Node p = g.r; - while (p != null) { - Node q = p.next; p.next = null; p = q; - } - } - - public static void SetContextTrans(Node p) { // set transition code in the graph rooted at p - DFA.hasCtxMoves = true; - while (p != null) { - if (p.typ == Node.chr || p.typ == Node.clas) { - p.code = Node.contextTrans; - } else if (p.typ == Node.opt || p.typ == Node.iter) { - SetContextTrans(p.sub); - } else if (p.typ == Node.alt) { - SetContextTrans(p.sub); SetContextTrans(p.down); - } - if (p.up) break; - p = p.next; - } - } - - public static void DeleteNodes() { - Node.nodes = new ArrayList(); - dummyNode = new Node(Node.eps, null, 0); - } - - public static Graph StrToGraph(string str) { - string s = DFA.Unescape(str.Substring(1, str.Length-2)); - if (s.Length == 0) Parser.SemErr("empty token not allowed"); - Graph g = new Graph(); - g.r = dummyNode; - for (int i = 0; i < s.Length; i++) { - Node p = new Node(Node.chr, (int)s[i], 0); - g.r.next = p; g.r = p; - } - g.l = dummyNode.next; dummyNode.next = null; - return g; - } - -} - - -//---------------------------------------------------------------- -// Bit sets -//---------------------------------------------------------------- - -public class Sets { - - public static int First(BitArray s) { - int max = s.Count; - for (int i=0; i b ? - int max = a.Count; - for (int i=0; i= 80) { - Trace.WriteLine(); - for (col = 1; col < indent; col++) Trace.Write(" "); - } - Trace.Write("{0} ", sym.name); - col += len + 1; - } - } - if (col == indent) Trace.Write("-- empty set --"); - Trace.WriteLine(); - } - -} - - -//--------------------------------------------------------------------- -// Character class management -//--------------------------------------------------------------------- - -public class CharClass { - public static ArrayList classes = new ArrayList(); - public static int dummyName = 'A'; - - public const int charSetSize = 256; // must be a multiple of 16 - - public int n; // class number - public string name; // class name - public BitArray set; // set representing the class - - public CharClass(string name, BitArray s) { - if (name == "#") name = "#" + (char)dummyName++; - this.n = classes.Count; this.name = name; this.set = s; - classes.Add(this); - } - - public static CharClass Find(string name) { - foreach (CharClass c in classes) - if (c.name == name) return c; - return null; - } - - public static CharClass Find(BitArray s) { - foreach (CharClass c in classes) - if (Sets.Equals(s, c.set)) return c; - return null; - } - - public static BitArray Set(int i) { - return ((CharClass)classes[i]).set; - } - - static string Ch(int ch) { - if (ch < ' ' || ch >= 127 || ch == '\'' || ch == '\\') return ch.ToString(); - else return String.Format("'{0}'", (char)ch); - } - - static void WriteCharSet(BitArray s) { - int i = 0, len = s.Count; - while (i < len) { - while (i < len && !s[i]) i++; - if (i == len) break; - int j = i; - while (i < len && s[i]) i++; - if (j < i-1) Trace.Write("{0}..{1} ", Ch(j), Ch(i-1)); - else Trace.Write("{0} ", Ch(j)); - } - } - - public static void WriteClasses () { - foreach (CharClass c in classes) { - Trace.Write("{0,-10}: ", c.name); - WriteCharSet(c.set); - Trace.WriteLine(); - } - Trace.WriteLine(); - } -} - - -//----------------------------------------------------------- -// Symbol table management routines -//----------------------------------------------------------- - -public class Tab { - public static Position semDeclPos; // position of global semantic declarations - public static BitArray ignored; // characters ignored by the scanner - public static bool[] ddt = new bool[10]; // debug and test switches - public static Symbol gramSy; // root nonterminal; filled by ATG - public static Symbol eofSy; // end of file symbol - public static Symbol noSym; // used in case of an error - public static BitArray allSyncSets; // union of all synchronisation sets - public static string nsName; // namespace for generated files - public static string frameDir = null; // directory containing the frame files - public static Hashtable literals; // symbols that are used as literals - - static BitArray visited; // mark list for graph traversals - static Symbol curSy; // current symbol in computation of sets - - //--------------------------------------------------------------------- - // Symbol set computations - //--------------------------------------------------------------------- - - /* Computes the first set for the given Node. */ - static BitArray First0(Node p, BitArray mark) { - BitArray fs = new BitArray(Symbol.terminals.Count); - while (p != null && !mark[p.n]) { - mark[p.n] = true; - switch (p.typ) { - case Node.nt: { - if (p.sym.firstReady) fs.Or(p.sym.first); - else fs.Or(First0(p.sym.graph, mark)); - break; - } - case Node.t: case Node.wt: { - fs[p.sym.n] = true; break; - } - case Node.any: { - fs.Or(p.set); break; - } - case Node.alt: { - fs.Or(First0(p.sub, mark)); - fs.Or(First0(p.down, mark)); - break; - } - case Node.iter: case Node.opt: { - fs.Or(First0(p.sub, mark)); - break; - } - } - if (!Node.DelNode(p)) break; - p = p.next; - } - return fs; - } - - public static BitArray First(Node p) { - BitArray fs = First0(p, new BitArray(Node.nodes.Count)); - if (ddt[3]) { - Trace.WriteLine(); - if (p != null) Trace.WriteLine("First: node = {0}", p.n); - else Trace.WriteLine("First: node = null"); - Sets.PrintSet(fs, 0); - } - return fs; - } - - static void CompFirstSets() { - foreach (Symbol sym in Symbol.nonterminals) { - sym.first = new BitArray(Symbol.terminals.Count); - sym.firstReady = false; - } - foreach (Symbol sym in Symbol.nonterminals) { - sym.first = First(sym.graph); - sym.firstReady = true; - } - } - - static void CompFollow(Node p) { - while (p != null && !visited[p.n]) { - visited[p.n] = true; - if (p.typ == Node.nt) { - BitArray s = First(p.next); - p.sym.follow.Or(s); - if (Node.DelGraph(p.next)) - p.sym.nts[curSy.n] = true; - } else if (p.typ == Node.opt || p.typ == Node.iter) { - CompFollow(p.sub); - } else if (p.typ == Node.alt) { - CompFollow(p.sub); CompFollow(p.down); - } - p = p.next; - } - } - - static void Complete(Symbol sym) { - if (!visited[sym.n]) { - visited[sym.n] = true; - foreach (Symbol s in Symbol.nonterminals) { - if (sym.nts[s.n]) { - Complete(s); - sym.follow.Or(s.follow); - if (sym == curSy) sym.nts[s.n] = false; - } - } - } - } - - static void CompFollowSets() { - foreach (Symbol sym in Symbol.nonterminals) { - sym.follow = new BitArray(Symbol.terminals.Count); - sym.nts = new BitArray(Symbol.nonterminals.Count); - } - gramSy.follow[eofSy.n] = true; - visited = new BitArray(Node.nodes.Count); - foreach (Symbol sym in Symbol.nonterminals) { // get direct successors of nonterminals - curSy = sym; - CompFollow(sym.graph); - } - foreach (Symbol sym in Symbol.nonterminals) { // add indirect successors to followers - visited = new BitArray(Symbol.nonterminals.Count); - curSy = sym; - Complete(sym); - } - } - - static Node LeadingAny(Node p) { - if (p == null) return null; - Node a = null; - if (p.typ == Node.any) a = p; - else if (p.typ == Node.alt) { - a = LeadingAny(p.sub); - if (a == null) a = LeadingAny(p.down); - } - else if (p.typ == Node.opt || p.typ == Node.iter) a = LeadingAny(p.sub); - else if (Node.DelNode(p) && !p.up) a = LeadingAny(p.next); - return a; - } - - static void FindAS(Node p) { // find ANY sets - Node a; - while (p != null) { - if (p.typ == Node.opt || p.typ == Node.iter) { - FindAS(p.sub); - a = LeadingAny(p.sub); - if (a != null) Sets.Subtract(a.set, First(p.next)); - } else if (p.typ == Node.alt) { - BitArray s1 = new BitArray(Symbol.terminals.Count); - Node q = p; - while (q != null) { - FindAS(q.sub); - a = LeadingAny(q.sub); - if (a != null) - Sets.Subtract(a.set, First(q.down).Or(s1)); - else - s1.Or(First(q.sub)); - q = q.down; - } - } - if (p.up) break; - p = p.next; - } - } - - static void CompAnySets() { - foreach (Symbol sym in Symbol.nonterminals) FindAS(sym.graph); - } - - public static BitArray Expected(Node p, Symbol curSy) { - BitArray s = First(p); - if (Node.DelGraph(p)) s.Or(curSy.follow); - return s; - } - - // does not look behind resolvers; only called during LL(1) test and in CheckRes - public static BitArray Expected0(Node p, Symbol curSy) { - if (p.typ == Node.rslv) return new BitArray(Symbol.terminals.Count); - else return Expected(p, curSy); - } - - static void CompSync(Node p) { - while (p != null && !visited[p.n]) { - visited[p.n] = true; - if (p.typ == Node.sync) { - BitArray s = Expected(p.next, curSy); - s[eofSy.n] = true; - allSyncSets.Or(s); - p.set = s; - } else if (p.typ == Node.alt) { - CompSync(p.sub); CompSync(p.down); - } else if (p.typ == Node.opt || p.typ == Node.iter) - CompSync(p.sub); - p = p.next; - } - } - - static void CompSyncSets() { - allSyncSets = new BitArray(Symbol.terminals.Count); - allSyncSets[eofSy.n] = true; - visited = new BitArray(Node.nodes.Count); - foreach (Symbol sym in Symbol.nonterminals) { - curSy = sym; - CompSync(curSy.graph); - } - } - - public static void SetupAnys() { - foreach (Node p in Node.nodes) - if (p.typ == Node.any) { - p.set = new BitArray(Symbol.terminals.Count, true); - p.set[eofSy.n] = false; - } - } - - public static void CompDeletableSymbols() { - bool changed; - do { - changed = false; - foreach (Symbol sym in Symbol.nonterminals) - if (!sym.deletable && sym.graph != null && Node.DelGraph(sym.graph)) { - sym.deletable = true; changed = true; - } - } while (changed); - foreach (Symbol sym in Symbol.nonterminals) - if (sym.deletable) Console.WriteLine(" {0} deletable", sym.name); - } - - public static void RenumberPragmas() { - int n = Symbol.terminals.Count; - foreach (Symbol sym in Symbol.pragmas) sym.n = n++; - } - - public static void CompSymbolSets() { - CompDeletableSymbols(); - CompFirstSets(); - CompFollowSets(); - CompAnySets(); - CompSyncSets(); - if (ddt[1]) { - Trace.WriteLine(); - Trace.WriteLine("First & follow symbols:"); - Trace.WriteLine("----------------------"); Trace.WriteLine(); - foreach (Symbol sym in Symbol.nonterminals) { - Trace.WriteLine(sym.name); - Trace.Write("first: "); Sets.PrintSet(sym.first, 10); - Trace.Write("follow: "); Sets.PrintSet(sym.follow, 10); - Trace.WriteLine(); - } - } - if (ddt[4]) { - Trace.WriteLine(); - Trace.WriteLine("ANY and SYNC sets:"); - Trace.WriteLine("-----------------"); - foreach (Node p in Node.nodes) - if (p.typ == Node.any || p.typ == Node.sync) { - Trace.Write("{0,4} {1,4}: ", p.n, Node.nTyp[p.typ]); - Sets.PrintSet(p.set, 11); - } - } - } - - //--------------------------------------------------------------------- - // Grammar checks - //--------------------------------------------------------------------- - - public static bool GrammarOk() { - bool ok = NtsComplete() - && AllNtReached() - && NoCircularProductions() - && AllNtToTerm() - && ResolversOk(); - if (ok) CheckLL1(); - return ok; - } - - //--------------- check for circular productions ---------------------- - - class CNode { // node of list for finding circular productions - public Symbol left, right; - - public CNode (Symbol l, Symbol r) { - left = l; right = r; - } - } - - static void GetSingles(Node p, ArrayList singles) { - if (p == null) return; // end of graph - if (p.typ == Node.nt) { - if (p.up || Node.DelGraph(p.next)) singles.Add(p.sym); - } else if (p.typ == Node.alt || p.typ == Node.iter || p.typ == Node.opt) { - if (p.up || Node.DelGraph(p.next)) { - GetSingles(p.sub, singles); - if (p.typ == Node.alt) GetSingles(p.down, singles); - } - } - if (!p.up && Node.DelNode(p)) GetSingles(p.next, singles); - } - - public static bool NoCircularProductions() { - bool ok, changed, onLeftSide, onRightSide; - ArrayList list = new ArrayList(); - foreach (Symbol sym in Symbol.nonterminals) { - ArrayList singles = new ArrayList(); - GetSingles(sym.graph, singles); // get nonterminals s such that sym-->s - foreach (Symbol s in singles) list.Add(new CNode(sym, s)); - } - do { - changed = false; - for (int i = 0; i < list.Count; i++) { - CNode n = (CNode)list[i]; - onLeftSide = false; onRightSide = false; - foreach (CNode m in list) { - if (n.left == m.right) onRightSide = true; - if (n.right == m.left) onLeftSide = true; - } - if (!onLeftSide || !onRightSide) { - list.Remove(n); i--; changed = true; - } - } - } while(changed); - ok = true; - foreach (CNode n in list) { - ok = false; Errors.count++; - Console.WriteLine(" {0} --> {1}", n.left.name, n.right.name); - } - return ok; - } - - //--------------- check for LL(1) errors ---------------------- - - static void LL1Error(int cond, Symbol sym) { - Console.Write(" LL1 warning in {0}: ", curSy.name); - if (sym != null) Console.Write("{0} is ", sym.name); - switch (cond) { - case 1: Console.WriteLine("start of several alternatives"); break; - case 2: Console.WriteLine("start & successor of deletable structure"); break; - case 3: Console.WriteLine("an ANY node that matches no symbol"); break; - } - } - - static void CheckOverlap(BitArray s1, BitArray s2, int cond) { - foreach (Symbol sym in Symbol.terminals) { - if (s1[sym.n] && s2[sym.n]) LL1Error(cond, sym); - } - } - - static void CheckAlts(Node p) { - BitArray s1, s2; - while (p != null) { - if (p.typ == Node.alt) { - Node q = p; - s1 = new BitArray(Symbol.terminals.Count); - while (q != null) { // for all alternatives - s2 = Expected0(q.sub, curSy); - CheckOverlap(s1, s2, 1); - s1.Or(s2); - CheckAlts(q.sub); - q = q.down; - } - } else if (p.typ == Node.opt || p.typ == Node.iter) { - s1 = Expected0(p.sub, curSy); - s2 = Expected(p.next, curSy); - CheckOverlap(s1, s2, 2); - CheckAlts(p.sub); - } else if (p.typ == Node.any) { - if (Sets.Elements(p.set) == 0) LL1Error(3, null); - // e.g. {ANY} ANY or [ANY] ANY - } - if (p.up) break; - p = p.next; - } - } - - public static void CheckLL1() { - foreach (Symbol sym in Symbol.nonterminals) { - curSy = sym; - CheckAlts(curSy.graph); - } - } - - //------------- check if resolvers are legal -------------------- - - static bool resOk; - - static void ResErr(Node p, string msg) { - Errors.Error(p.line, p.pos.col, msg); - resOk = false; - } - - static void CheckRes(Node p, bool rslvAllowed) { - while (p != null) { - switch (p.typ) { - case Node.alt: - BitArray expected = new BitArray(Symbol.terminals.Count); - for (Node q = p; q != null; q = q.down) - expected.Or(Expected0(q.sub, curSy)); - BitArray soFar = new BitArray(Symbol.terminals.Count); - for (Node q = p; q != null; q = q.down) { - if (q.sub.typ == Node.rslv) { - BitArray fs = First(q.sub.next); - if (Sets.Intersect(fs, soFar)) - ResErr(q.sub, "Resolver will never be evaluated. " + - "Place it at previous conflicting alternative."); - if (!Sets.Intersect(fs, expected)) { -// CHANGED BY MIKE KRUEGER - // ResErr(q.sub, "Misplaced resolver: no LL(1) conflict."); -// EOC - } - } else soFar.Or(First(q.sub)); - CheckRes(q.sub, true); - } - break; - case Node.iter: case Node.opt: - if (p.sub.typ == Node.rslv) { - BitArray fs = First(p.sub.next); - BitArray fsNext = Expected(p.next, curSy); - if (!Sets.Intersect(fs, fsNext)) { -// CHANGED BY MIKE KRUEGER - // ResErr(p.sub, "Misplaced resolver: no LL(1) conflict."); -// EOC - } - } - CheckRes(p.sub, true); - break; - case Node.rslv: - if (!rslvAllowed) - ResErr(p, "Misplaced resolver: no alternative."); - - break; - } - if (p.up) break; - p = p.next; - rslvAllowed = false; - } - } - - public static bool ResolversOk() { - resOk = true; - foreach (Symbol sym in Symbol.nonterminals) { - curSy = sym; - CheckRes(curSy.graph, false); - } - return resOk; - } - - //------------- check if every nts has a production -------------------- - - public static bool NtsComplete() { - bool complete = true; - foreach (Symbol sym in Symbol.nonterminals) { - if (sym.graph == null) { - complete = false; Errors.count++; - Console.WriteLine(" No production for {0}", sym.name); - } - } - return complete; - } - - //-------------- check if every nts can be reached ----------------- - - static void MarkReachedNts(Node p) { - while (p != null) { - if (p.typ == Node.nt && !visited[p.sym.n]) { // new nt reached - visited[p.sym.n] = true; - MarkReachedNts(p.sym.graph); - } else if (p.typ == Node.alt || p.typ == Node.iter || p.typ == Node.opt) { - MarkReachedNts(p.sub); - if (p.typ == Node.alt) MarkReachedNts(p.down); - } - if (p.up) break; - p = p.next; - } - } - - public static bool AllNtReached() { - bool ok = true; - visited = new BitArray(Symbol.nonterminals.Count); - visited[gramSy.n] = true; - MarkReachedNts(gramSy.graph); - foreach (Symbol sym in Symbol.nonterminals) { - if (!visited[sym.n]) { - ok = false; Errors.count++; - Console.WriteLine(" {0} cannot be reached", sym.name); - } - } - return ok; - } - - //--------- check if every nts can be derived to terminals ------------ - - static bool IsTerm(Node p, BitArray mark) { // true if graph can be derived to terminals - while (p != null) { - if (p.typ == Node.nt && !mark[p.sym.n]) return false; - if (p.typ == Node.alt && !IsTerm(p.sub, mark) - && (p.down == null || !IsTerm(p.down, mark))) return false; - if (p.up) break; - p = p.next; - } - return true; - } - - public static bool AllNtToTerm() { - bool changed, ok = true; - BitArray mark = new BitArray(Symbol.nonterminals.Count); - // a nonterminal is marked if it can be derived to terminal symbols - do { - changed = false; - foreach (Symbol sym in Symbol.nonterminals) - if (!mark[sym.n] && IsTerm(sym.graph, mark)) { - mark[sym.n] = true; changed = true; - } - } while (changed); - foreach (Symbol sym in Symbol.nonterminals) - if (!mark[sym.n]) { - ok = false; Errors.count++; - Console.WriteLine(" {0} cannot be derived to terminals", sym.name); - } - return ok; - } - - /*--------------------------------------------------------------------- - Utility functions - ---------------------------------------------------------------------*/ - - static int Num(Node p) { - if (p == null) return 0; else return p.n; - } - - static string[] tKind = {"fixedToken", "classToken", "litToken", "classLitToken"}; - - static void PrintSym(Symbol sym) { - Trace.Write("{0,3} {1,-14} {2}", sym.n, Node.Name(sym.name), Node.nTyp[sym.typ]); - if (sym.attrPos==null) Trace.Write(" false "); else Trace.Write(" true "); - if (sym.typ == Node.nt) { - Trace.Write("{0,5}", Num(sym.graph)); - if (sym.deletable) Trace.Write(" true "); else Trace.Write(" false "); - } else - Trace.Write(" "); - Trace.WriteLine("{0,5} {1}", sym.line, tKind[sym.tokenKind]); - } - - public static void PrintSymbolTable() { - Trace.WriteLine("Symbol Table:"); - Trace.WriteLine("------------"); Trace.WriteLine(); - Trace.WriteLine(" nr name typ hasAt graph del line tokenKind"); - foreach (Symbol sym in Symbol.terminals) PrintSym(sym); - foreach (Symbol sym in Symbol.pragmas) PrintSym(sym); - foreach (Symbol sym in Symbol.nonterminals) PrintSym(sym); - Trace.WriteLine(); - Trace.WriteLine("Literal Tokens:"); - Trace.WriteLine("--------------"); - foreach (DictionaryEntry e in literals) { - Trace.WriteLine("_" + ((Symbol)e.Value).name + " = " + e.Key + "."); - } - Trace.WriteLine(); - } - - public static void XRef() { - SortedList tab = new SortedList(); - // collect lines where symbols have been defined - foreach (Symbol sym in Symbol.nonterminals) { - ArrayList list = (ArrayList)tab[sym]; - if (list == null) {list = new ArrayList(); tab[sym] = list;} - list.Add(- sym.line); - } - // collect lines where symbols have been referenced - foreach (Node n in Node.nodes) { - if (n.typ == Node.t || n.typ == Node.wt || n.typ == Node.nt) { - ArrayList list = (ArrayList)tab[n.sym]; - if (list == null) {list = new ArrayList(); tab[n.sym] = list;} - list.Add(n.line); - } - } - // print cross reference list - Trace.WriteLine(); - Trace.WriteLine("Cross reference list:"); - Trace.WriteLine("--------------------"); Trace.WriteLine(); - foreach (Symbol sym in tab.Keys) { - Trace.Write(" {0,-12}", Node.Name(sym.name)); - ArrayList list = (ArrayList)tab[sym]; - int col = 14; - foreach (int line in list) { - if (col + 5 > 80) { - Trace.WriteLine(); - for (col = 1; col <= 14; col++) Trace.Write(" "); - } - Trace.Write("{0,5}", line); col += 5; - } - Trace.WriteLine(); - } - Trace.WriteLine(); Trace.WriteLine(); - } - - public static void SetDDT(string s) { - s = s.ToUpper(); - foreach (char ch in s) { - if ('0' <= ch && ch <= '9') ddt[ch - '0'] = true; - else switch (ch) { - case 'A' : ddt[0] = true; break; // trace automaton - case 'F' : ddt[1] = true; break; // list first/follow sets - case 'G' : ddt[2] = true; break; // print syntax graph - case 'I' : ddt[3] = true; break; // trace computation of first sets - case 'J' : ddt[4] = true; break; // print ANY and SYNC sets - case 'P' : ddt[8] = true; break; // print statistics - case 'S' : ddt[6] = true; break; // list symbol table - case 'X' : ddt[7] = true; break; // list cross reference table - default : break; - } - } - } - - public static void Init () { - eofSy = new Symbol(Node.t, "EOF", 0); - literals = new Hashtable(); - } - -} // end Tab - -} // end namespace diff --git a/src/Tools/SharpCoco/src/Trace.cs b/src/Tools/SharpCoco/src/Trace.cs deleted file mode 100644 index 6d80264081..0000000000 --- a/src/Tools/SharpCoco/src/Trace.cs +++ /dev/null @@ -1,69 +0,0 @@ -/*------------------------------------------------------------------------- -Trace.cs -- Trace Output Class -Compiler Generator Coco/R, -Copyright (c) 1990, 2004 Hanspeter Moessenboeck, University of Linz -extended by M. Loeberbauer & A. Woess, Univ. of Linz -with improvements by Pat Terry, Rhodes University - -This program is free software; you can redistribute it and/or modify it -under the terms of the GNU General Public License as published by the -Free Software Foundation; either version 2, or (at your option) any -later version. - -This program is distributed in the hope that it will be useful, but -WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -for more details. - -You should have received a copy of the GNU General Public License along -with this program; if not, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -As an exception, it is allowed to write an extension of Coco/R that is -used as a plugin in non-free software. - -If not otherwise stated, any source code generated by Coco/R (other than -Coco/R itself) does not fall under the GNU General Public License. --------------------------------------------------------------------------*/ -using System; -using System.IO; - -namespace at.jku.ssw.Coco { - -class Trace { - static string fileName; /* pdt */ - static StreamWriter trace; - - public static void Init (String dir) { - fileName = dir + "trace.txt"; /* pdt */ - try { - trace = new StreamWriter(new FileStream(fileName, FileMode.Create)); - } catch (IOException) { - Errors.Exception("-- could not open " + fileName); - } - } - - public static void Write (string s) { trace.Write(s); } - - public static void Write (string s, params object[] args) { - trace.Write(s, args); - } - - public static void WriteLine (string s) { trace.WriteLine(s); } - - public static void WriteLine (string s, params object[] args) { - trace.WriteLine(s, args); - } - - public static void WriteLine () { trace.WriteLine(); } - - public static void Close () { /* pdt */ - trace.Close(); - FileInfo f = new FileInfo(fileName); - if (f.Length == 0) f.Delete(); - else Console.WriteLine("trace output is in " + fileName); - } - -} - -} \ No newline at end of file