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 d5a898b6e9..0000000000 Binary files a/src/Libraries/NRefactory/Project/Src/Parser/Frames/OldSharpCoco.exe and /dev/null differ diff --git a/src/Libraries/NRefactory/Project/Src/Parser/Frames/Parser.frame.new b/src/Libraries/NRefactory/Project/Src/Parser/Frames/Parser.frame.new deleted file mode 100644 index 02db264da8..0000000000 --- a/src/Libraries/NRefactory/Project/Src/Parser/Frames/Parser.frame.new +++ /dev/null @@ -1,55 +0,0 @@ --->begin -/* - 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 df3e502b07..0000000000 Binary files a/src/Tools/SharpCoco/bin/Debug/SharpCoco.exe and /dev/null differ diff --git a/src/Tools/SharpCoco/bin/Debug/SharpCoco.pdb b/src/Tools/SharpCoco/bin/Debug/SharpCoco.pdb deleted file mode 100644 index 10a8223b91..0000000000 Binary files a/src/Tools/SharpCoco/bin/Debug/SharpCoco.pdb and /dev/null differ 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