diff --git a/src/Libraries/NRefactory/Project/NRefactory.csproj b/src/Libraries/NRefactory/Project/NRefactory.csproj index 04d841ea37..a8db5fb6a5 100644 --- a/src/Libraries/NRefactory/Project/NRefactory.csproj +++ b/src/Libraries/NRefactory/Project/NRefactory.csproj @@ -144,6 +144,9 @@ CocoParserGenerator + + ParserHelper.atg + ParserHelper.atg diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Parser.cs b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Parser.cs index 2a02f38b8f..dac1de84eb 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Parser.cs +++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Parser.cs @@ -5,762 +5,1794 @@ using System.Text; using ICSharpCode.NRefactory.Ast; using ICSharpCode.NRefactory.Parser.VB; using ASTAttribute = ICSharpCode.NRefactory.Ast.Attribute; -using ICSharpCode.NRefactory.Parser.VBNet.Experimental; using System; +using System.Collections.Generic; namespace ICSharpCode.NRefactory.Parser.VBNet.Experimental { -public partial class Parser { - public const int _EOF = 0; - public const int _EOL = 1; - public const int _ident = 2; - public const int _LiteralString = 3; - public const int _LiteralCharacter = 4; - public const int _LiteralInteger = 5; - public const int _LiteralDouble = 6; - public const int _LiteralSingle = 7; - public const int _LiteralDecimal = 8; - public const int _LiteralDate = 9; - public const int maxT = 222; +partial class Parser { const bool T = true; const bool x = false; - const int minErrDist = 2; - - public ILexer lexer; - public Errors errors; - - public Parser(ILexer lexer) - { - this.lexer = lexer; - this.errors = new Errors(); - } - - public Token t; // last recognized token - public Token la; // lookahead token - int errDist = minErrDist; - +int currentState = 1; - void SynErr (int n) { - if (errDist >= minErrDist) errors.SynErr(la.line, la.col, n); - errDist = 0; - } - - public void SemErr (string msg) { - if (errDist >= minErrDist) errors.SemErr(t.line, t.col, msg); - errDist = 0; - } - - void Get () { - for (;;) { - t = la; - la = lexer.NextToken(); - if (la.kind <= maxT) { ++errDist; break; } - - la = t; - } - } + readonly Stack stateStack = new Stack(); - void Expect (int n) { - if (la.kind==n) Get(); else { SynErr(n); } - } - - bool StartOf (int s) { - return set[s, la.kind]; - } - - void ExpectWeak (int n, int follow) { - if (la.kind == n) Get(); - else { - SynErr(n); - while (!StartOf(follow)) Get(); - } + public Parser() + { + stateStack.Push(-1); // required so that we don't crash when leaving the root production } - - bool WeakSeparator(int n, int syFol, int repFol) { - int kind = la.kind; - if (kind == n) {Get(); return true;} - else if (StartOf(repFol)) {return false;} - else { - SynErr(n); - while (!(set[syFol, kind] || set[repFol, kind] || set[0, kind])) { - Get(); - kind = la.kind; - } - return StartOf(syFol); - } + void Expect(int expectedKind, Token t) + { + if (t.kind != expectedKind) + Error(t); } - - void ParserHelper() { - while (la.kind == 159) { - OptionStatement(); - } - while (la.kind == 124) { - ImportsStatement(); - } - while (la.kind == 28) { - AttributeBlock(); - } - while (StartOf(1)) { - NamespaceMemberDeclaration(); - } - } - - void OptionStatement() { - Expect(159); - while (StartOf(2)) { - Get(); - } - StatementTerminator(); - } - - void ImportsStatement() { - Expect(124); - while (StartOf(2)) { - Get(); - } - StatementTerminator(); - } - - void AttributeBlock() { - Expect(28); - while (StartOf(3)) { - Get(); - } - Expect(27); - if (la.kind == 1) { - Get(); - } - } - - void NamespaceMemberDeclaration() { - if (la.kind == 146) { - NamespaceDeclaration(); - } else if (StartOf(4)) { - TypeDeclaration(); - } else SynErr(223); - } - - void StatementTerminator() { - if (la.kind == 1) { - Get(); - } else if (la.kind == 11) { - Get(); - } else SynErr(224); - } - - void NamespaceDeclaration() { - Expect(146); - while (StartOf(2)) { - Get(); - } - StatementTerminator(); - while (StartOf(1)) { - NamespaceMemberDeclaration(); - } - Expect(100); - Expect(146); - StatementTerminator(); - } - - void TypeDeclaration() { - while (la.kind == 28) { - AttributeBlock(); - } - while (StartOf(5)) { - TypeModifier(); - } - Expect(141); - while (StartOf(2)) { - Get(); - } - StatementTerminator(); - PushContext(Context.Type); - while (StartOf(6)) { - ModuleMemberDeclaration(); - } - Expect(100); - Expect(141); - StatementTerminator(); - PopContext(); - } - - void TypeModifier() { - if (StartOf(7)) { - AccessModifier(); - } else if (la.kind == 184) { - Get(); - } else SynErr(225); - } - - void ModuleMemberDeclaration() { - PushContext(Context.Member); - SubOrFunctionDeclaration(); - PopContext(); - } - - void SubOrFunctionDeclaration() { - while (la.kind == 28) { - AttributeBlock(); - } - while (StartOf(8)) { - MemberModifier(); - } - if (la.kind == 195) { - Get(); - } else if (la.kind == 114) { - Get(); - } else SynErr(226); - PushContext(Context.IdentifierExpected); - Get(); - PopContext(); - if (la.kind == 25) { - Get(); - if (StartOf(9)) { - ParameterList(); - } - Expect(26); - } - Expect(1); - if (la.kind == 1) { - Block(); - } - Expect(100); - if (la.kind == 195) { - Get(); - } else if (la.kind == 114) { - Get(); - } else SynErr(227); - StatementTerminator(); - } - - void MemberModifier() { - switch (la.kind) { - case 112: case 170: case 172: case 173: { - AccessModifier(); - break; - } - case 184: { - Get(); - break; - } - case 185: { - Get(); - break; - } - case 165: { - Get(); - break; - } - case 153: { - Get(); - break; - } - case 166: { - Get(); - break; - } - case 164: { - Get(); - break; - } - case 168: { - Get(); - break; - } - default: SynErr(228); break; - } - } - - void ParameterList() { - Parameter(); - while (la.kind == 12) { - Get(); - Parameter(); - } - } - - void Block() { - Expect(1); + void Error(Token t) + { } - void Parameter() { - while (la.kind == 28) { - AttributeBlock(); - } - while (StartOf(10)) { - ParameterModifier(); - } - Identifier(); - if (la.kind == 50) { - Get(); - Get(); - } - if (la.kind == 10) { - Get(); - while (StartOf(11)) { - Get(); + public void InformToken(Token t) + { + switchlbl: switch (currentState) { + case 0: { + currentState = stateStack.Pop(); + goto switchlbl; } - } - } - - void ParameterModifier() { - if (la.kind == 59) { - Get(); - } else if (la.kind == 56) { - Get(); - } else if (la.kind == 160) { - Get(); - } else if (la.kind == 167) { - Get(); - } else SynErr(229); - } - - void Identifier() { + case 1: { // start of ParserHelper + PushContext(Context.Global); + goto case 3; + } + case 2: { + stateStack.Push(3); + goto case 15; // OptionStatement + } + case 3: { + if (t.kind == 159) { + goto case 2; + } else { + goto case 5; + } + } + case 4: { + stateStack.Push(5); + goto case 19; // ImportsStatement + } + case 5: { + if (t.kind == 124) { + goto case 4; + } else { + goto case 7; + } + } + case 6: { + stateStack.Push(7); + goto case 23; // AttributeBlock + } + case 7: { + if (t.kind == 28) { + goto case 6; + } else { + goto case 9; + } + } + case 8: { + stateStack.Push(9); + goto case 31; // NamespaceMemberDeclaration + } + case 9: { + if (set[0, t.kind]) { + goto case 8; + } else { + goto case 10; + } + } + case 10: { + PopContext(); + currentState = stateStack.Pop(); + goto switchlbl; + } + case 11: { + Expect(1, t); // EOL + currentState = stateStack.Pop(); + break; + } + case 12: { + Expect(11, t); // ":" + currentState = stateStack.Pop(); + break; + } + case 13: { // start of StatementTerminator + if (t.kind == 1) { + goto case 11; + } else { + goto case 14; + } + } + case 14: { + if (t.kind == 11) { + goto case 12; + } else { + Error(t); + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 15: { // start of OptionStatement + Expect(159, t); // "Option" + currentState = 17; + break; + } + case 16: { + currentState = 17; + break; + } + case 17: { + if (set[1, t.kind]) { + goto case 16; + } else { + goto case 18; + } + } + case 18: { + goto case 13; // StatementTerminator + } + case 19: { // start of ImportsStatement + Expect(124, t); // "Imports" + currentState = 21; + break; + } + case 20: { + currentState = 21; + break; + } + case 21: { + if (set[1, t.kind]) { + goto case 20; + } else { + goto case 22; + } + } + case 22: { + goto case 13; // StatementTerminator + } + case 23: { // start of AttributeBlock + Expect(28, t); // "<" + currentState = 25; + break; + } + case 24: { + currentState = 25; + break; + } + case 25: { + if (set[2, t.kind]) { + goto case 24; + } else { + goto case 26; + } + } + case 26: { + Expect(27, t); // ">" + currentState = 28; + break; + } + case 27: { + Expect(1, t); // EOL + currentState = stateStack.Pop(); + break; + } + case 28: { + if (t.kind == 1) { + goto case 27; + } else { + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 29: { + goto case 33; // NamespaceDeclaration + } + case 30: { + goto case 43; // TypeDeclaration + } + case 31: { // start of NamespaceMemberDeclaration + if (t.kind == 146) { + goto case 29; + } else { + goto case 32; + } + } + case 32: { + if (set[3, t.kind]) { + goto case 30; + } else { + Error(t); + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 33: { // start of NamespaceDeclaration + Expect(146, t); // "Namespace" + currentState = 35; + break; + } + case 34: { + currentState = 35; + break; + } + case 35: { + if (set[1, t.kind]) { + goto case 34; + } else { + goto case 36; + } + } + case 36: { + stateStack.Push(38); + goto case 13; // StatementTerminator + } + case 37: { + stateStack.Push(38); + goto case 31; // NamespaceMemberDeclaration + } + case 38: { + if (set[4, t.kind]) { + goto case 37; + } else { + goto case 39; + } + } + case 39: { + Expect(100, t); // "End" + currentState = 40; + break; + } + case 40: { + Expect(146, t); // "Namespace" + currentState = 41; + break; + } + case 41: { + goto case 13; // StatementTerminator + } + case 42: { + stateStack.Push(43); + goto case 23; // AttributeBlock + } + case 43: { // start of TypeDeclaration + if (t.kind == 28) { + goto case 42; + } else { + goto case 45; + } + } + case 44: { + stateStack.Push(45); + goto case 277; // TypeModifier + } + case 45: { + if (set[5, t.kind]) { + goto case 44; + } else { + goto case 46; + } + } + case 46: { + Expect(141, t); // "Module" + currentState = 48; + break; + } + case 47: { + currentState = 48; + break; + } + case 48: { + if (set[1, t.kind]) { + goto case 47; + } else { + goto case 49; + } + } + case 49: { + stateStack.Push(50); + goto case 13; // StatementTerminator + } + case 50: { + PushContext(Context.Type); + goto case 52; + } + case 51: { + stateStack.Push(52); + goto case 57; // MemberDeclaration + } + case 52: { + if (set[6, t.kind]) { + goto case 51; + } else { + goto case 53; + } + } + case 53: { + Expect(100, t); // "End" + currentState = 54; + break; + } + case 54: { + Expect(141, t); // "Module" + currentState = 55; + break; + } + case 55: { + stateStack.Push(56); + goto case 13; // StatementTerminator + } + case 56: { + PopContext(); + currentState = stateStack.Pop(); + goto switchlbl; + } + case 57: { // start of MemberDeclaration + PushContext(Context.Member); + goto case 58; + } + case 58: { + stateStack.Push(59); + goto case 61; // SubOrFunctionDeclaration + } + case 59: { + PopContext(); + currentState = stateStack.Pop(); + goto switchlbl; + } + case 60: { + stateStack.Push(61); + goto case 23; // AttributeBlock + } + case 61: { // start of SubOrFunctionDeclaration + if (t.kind == 28) { + goto case 60; + } else { + goto case 63; + } + } + case 62: { + stateStack.Push(63); + goto case 281; // MemberModifier + } + case 63: { + if (set[7, t.kind]) { + goto case 62; + } else { + goto case 66; + } + } + case 64: { + Expect(195, t); // "Sub" + currentState = 68; + break; + } + case 65: { + Expect(114, t); // "Function" + currentState = 68; + break; + } + case 66: { + if (t.kind == 195) { + goto case 64; + } else { + goto case 67; + } + } + case 67: { + if (t.kind == 114) { + goto case 65; + } else { + Error(t); + goto case 68; + } + } + case 68: { + PushContext(Context.IdentifierExpected); + goto case 69; + } + case 69: { + currentState = 70; + break; + } + case 70: { + PopContext(); + goto case 75; + } + case 71: { + Expect(25, t); // "(" + currentState = 73; + break; + } + case 72: { + stateStack.Push(74); + goto case 88; // ParameterList + } + case 73: { + if (set[8, t.kind]) { + goto case 72; + } else { + goto case 74; + } + } + case 74: { + Expect(26, t); // ")" + currentState = 78; + break; + } + case 75: { + if (t.kind == 25) { + goto case 71; + } else { + goto case 78; + } + } + case 76: { + Expect(50, t); // "As" + currentState = 77; + break; + } + case 77: { + stateStack.Push(79); + goto case 159; // TypeName + } + case 78: { + if (t.kind == 50) { + goto case 76; + } else { + goto case 79; + } + } + case 79: { + Expect(1, t); // EOL + currentState = 81; + break; + } + case 80: { + stateStack.Push(82); + goto case 103; // Block + } + case 81: { + if (t.kind == 1) { + goto case 80; + } else { + goto case 82; + } + } + case 82: { + Expect(100, t); // "End" + currentState = 85; + break; + } + case 83: { + Expect(195, t); // "Sub" + currentState = 87; + break; + } + case 84: { + Expect(114, t); // "Function" + currentState = 87; + break; + } + case 85: { + if (t.kind == 195) { + goto case 83; + } else { + goto case 86; + } + } + case 86: { + if (t.kind == 114) { + goto case 84; + } else { + Error(t); + goto case 87; + } + } + case 87: { + goto case 13; // StatementTerminator + } + case 88: { // start of ParameterList + stateStack.Push(91); + goto case 93; // Parameter + } + case 89: { + Expect(12, t); // "," + currentState = 90; + break; + } + case 90: { + stateStack.Push(91); + goto case 93; // Parameter + } + case 91: { + if (t.kind == 12) { + goto case 89; + } else { + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 92: { + stateStack.Push(93); + goto case 23; // AttributeBlock + } + case 93: { // start of Parameter + if (t.kind == 28) { + goto case 92; + } else { + goto case 95; + } + } + case 94: { + stateStack.Push(95); + goto case 297; // ParameterModifier + } + case 95: { + if (set[9, t.kind]) { + goto case 94; + } else { + goto case 96; + } + } + case 96: { + stateStack.Push(99); + goto case 210; // Identifier + } + case 97: { + Expect(50, t); // "As" + currentState = 98; + break; + } + case 98: { + stateStack.Push(102); + goto case 159; // TypeName + } + case 99: { + if (t.kind == 50) { + goto case 97; + } else { + goto case 102; + } + } + case 100: { + Expect(10, t); // "=" + currentState = 101; + break; + } + case 101: { + goto case 108; // Expression + } + case 102: { + if (t.kind == 10) { + goto case 100; + } else { + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 103: { // start of Block + Expect(1, t); // EOL + currentState = stateStack.Pop(); + break; + } + case 104: { + goto case 184; // Literal + } + case 105: { + Expect(25, t); // "(" + currentState = 106; + break; + } + case 106: { + stateStack.Push(107); + goto case 108; // Expression + } + case 107: { + Expect(26, t); // ")" + currentState = stateStack.Pop(); + break; + } + case 108: { // start of Expression + if (set[10, t.kind]) { + goto case 104; + } else { + goto case 109; + } + } + case 109: { + if (t.kind == 25) { + goto case 105; + } else { + goto case 119; + } + } + case 110: { + stateStack.Push(118); + goto case 210; // Identifier + } + case 111: { + Expect(25, t); // "(" + currentState = 112; + break; + } + case 112: { + Expect(155, t); // "Of" + currentState = 113; + break; + } + case 113: { + stateStack.Push(116); + goto case 159; // TypeName + } + case 114: { + Expect(12, t); // "," + currentState = 115; + break; + } + case 115: { + stateStack.Push(116); + goto case 159; // TypeName + } + case 116: { + if (t.kind == 12) { + goto case 114; + } else { + goto case 117; + } + } + case 117: { + Expect(26, t); // ")" + currentState = stateStack.Pop(); + break; + } + case 118: { + if (t.kind == 25) { + goto case 111; + } else { + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 119: { + if (set[11, t.kind]) { + goto case 110; + } else { + goto case 122; + } + } + case 120: { + Expect(44, t); // "AddressOf" + currentState = 121; + break; + } + case 121: { + goto case 108; // Expression + } + case 122: { + if (t.kind == 44) { + goto case 120; + } else { + goto case 124; + } + } + case 123: { + currentState = stateStack.Pop(); + goto switchlbl; + } + case 124: { + if (false) { + goto case 123; + } else { + Error(t); + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 125: { + Expect(58, t); // "Byte" + currentState = stateStack.Pop(); + break; + } + case 126: { + Expect(181, t); // "SByte" + currentState = stateStack.Pop(); + break; + } + case 127: { // start of PrimitiveTypeName + if (t.kind == 58) { + goto case 125; + } else { + goto case 128; + } + } + case 128: { + if (t.kind == 181) { + goto case 126; + } else { + goto case 130; + } + } + case 129: { + Expect(210, t); // "UShort" + currentState = stateStack.Pop(); + break; + } + case 130: { + if (t.kind == 210) { + goto case 129; + } else { + goto case 132; + } + } + case 131: { + Expect(186, t); // "Short" + currentState = stateStack.Pop(); + break; + } + case 132: { + if (t.kind == 186) { + goto case 131; + } else { + goto case 134; + } + } + case 133: { + Expect(206, t); // "UInteger" + currentState = stateStack.Pop(); + break; + } + case 134: { + if (t.kind == 206) { + goto case 133; + } else { + goto case 136; + } + } + case 135: { + Expect(128, t); // "Integer" + currentState = stateStack.Pop(); + break; + } + case 136: { + if (t.kind == 128) { + goto case 135; + } else { + goto case 138; + } + } + case 137: { + Expect(207, t); // "ULong" + currentState = stateStack.Pop(); + break; + } + case 138: { + if (t.kind == 207) { + goto case 137; + } else { + goto case 140; + } + } + case 139: { + Expect(137, t); // "Long" + currentState = stateStack.Pop(); + break; + } + case 140: { + if (t.kind == 137) { + goto case 139; + } else { + goto case 142; + } + } + case 141: { + Expect(187, t); // "Single" + currentState = stateStack.Pop(); + break; + } + case 142: { + if (t.kind == 187) { + goto case 141; + } else { + goto case 144; + } + } + case 143: { + Expect(96, t); // "Double" + currentState = stateStack.Pop(); + break; + } + case 144: { + if (t.kind == 96) { + goto case 143; + } else { + goto case 146; + } + } + case 145: { + Expect(87, t); // "Decimal" + currentState = stateStack.Pop(); + break; + } + case 146: { + if (t.kind == 87) { + goto case 145; + } else { + goto case 148; + } + } + case 147: { + Expect(55, t); // "Boolean" + currentState = stateStack.Pop(); + break; + } + case 148: { + if (t.kind == 55) { + goto case 147; + } else { + goto case 150; + } + } + case 149: { + Expect(86, t); // "Date" + currentState = stateStack.Pop(); + break; + } + case 150: { + if (t.kind == 86) { + goto case 149; + } else { + goto case 152; + } + } + case 151: { + Expect(69, t); // "Char" + currentState = stateStack.Pop(); + break; + } + case 152: { + if (t.kind == 69) { + goto case 151; + } else { + goto case 154; + } + } + case 153: { + Expect(193, t); // "String" + currentState = stateStack.Pop(); + break; + } + case 154: { + if (t.kind == 193) { + goto case 153; + } else { + goto case 156; + } + } + case 155: { + Expect(154, t); // "Object" + currentState = stateStack.Pop(); + break; + } + case 156: { + if (t.kind == 154) { + goto case 155; + } else { + Error(t); + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 157: { + Expect(117, t); // "Global" + currentState = 164; + break; + } + case 158: { + stateStack.Push(164); + goto case 210; // Identifier + } + case 159: { // start of TypeName + if (t.kind == 117) { + goto case 157; + } else { + goto case 160; + } + } + case 160: { + if (set[11, t.kind]) { + goto case 158; + } else { + goto case 162; + } + } + case 161: { + stateStack.Push(164); + goto case 127; // PrimitiveTypeName + } + case 162: { + if (set[12, t.kind]) { + goto case 161; + } else { + Error(t); + goto case 164; + } + } + case 163: { + stateStack.Push(164); + goto case 170; // TypeSuffix + } + case 164: { + if (t.kind == 25) { + goto case 163; + } else { + goto case 169; + } + } + case 165: { + Expect(16, t); // "." + currentState = 166; + break; + } + case 166: { + stateStack.Push(168); + goto case 181; // IdentifierOrKeyword + } + case 167: { + stateStack.Push(168); + goto case 170; // TypeSuffix + } + case 168: { + if (t.kind == 25) { + goto case 167; + } else { + goto case 169; + } + } + case 169: { + if (t.kind == 16) { + goto case 165; + } else { + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 170: { // start of TypeSuffix + Expect(25, t); // "(" + currentState = 178; + break; + } + case 171: { + Expect(155, t); // "Of" + currentState = 172; + break; + } + case 172: { + stateStack.Push(175); + goto case 159; // TypeName + } + case 173: { + Expect(12, t); // "," + currentState = 174; + break; + } + case 174: { + stateStack.Push(175); + goto case 159; // TypeName + } + case 175: { + if (t.kind == 12) { + goto case 173; + } else { + goto case 180; + } + } + case 176: { + Expect(12, t); // "," + currentState = 177; + break; + } + case 177: { + if (t.kind == 12) { + goto case 176; + } else { + goto case 180; + } + } + case 178: { + if (t.kind == 155) { + goto case 171; + } else { + goto case 179; + } + } + case 179: { + if (t.kind == 12 || t.kind == 26) { + goto case 177; + } else { + Error(t); + goto case 180; + } + } + case 180: { + Expect(26, t); // ")" + currentState = stateStack.Pop(); + break; + } + case 181: { // start of IdentifierOrKeyword + currentState = stateStack.Pop(); + break; + } + case 182: { + Expect(3, t); // LiteralString + currentState = stateStack.Pop(); + break; + } + case 183: { + Expect(4, t); // LiteralCharacter + currentState = stateStack.Pop(); + break; + } + case 184: { // start of Literal + if (t.kind == 3) { + goto case 182; + } else { + goto case 185; + } + } + case 185: { + if (t.kind == 4) { + goto case 183; + } else { + goto case 187; + } + } + case 186: { + Expect(5, t); // LiteralInteger + currentState = stateStack.Pop(); + break; + } + case 187: { + if (t.kind == 5) { + goto case 186; + } else { + goto case 189; + } + } + case 188: { + Expect(6, t); // LiteralDouble + currentState = stateStack.Pop(); + break; + } + case 189: { + if (t.kind == 6) { + goto case 188; + } else { + goto case 191; + } + } + case 190: { + Expect(7, t); // LiteralSingle + currentState = stateStack.Pop(); + break; + } + case 191: { + if (t.kind == 7) { + goto case 190; + } else { + goto case 193; + } + } + case 192: { + Expect(8, t); // LiteralDecimal + currentState = stateStack.Pop(); + break; + } + case 193: { + if (t.kind == 8) { + goto case 192; + } else { + goto case 195; + } + } + case 194: { + Expect(9, t); // LiteralDate + currentState = stateStack.Pop(); + break; + } + case 195: { + if (t.kind == 9) { + goto case 194; + } else { + goto case 197; + } + } + case 196: { + Expect(202, t); // "True" + currentState = stateStack.Pop(); + break; + } + case 197: { + if (t.kind == 202) { + goto case 196; + } else { + goto case 199; + } + } + case 198: { + Expect(109, t); // "False" + currentState = stateStack.Pop(); + break; + } + case 199: { + if (t.kind == 109) { + goto case 198; + } else { + goto case 201; + } + } + case 200: { + Expect(151, t); // "Nothing" + currentState = stateStack.Pop(); + break; + } + case 201: { + if (t.kind == 151) { + goto case 200; + } else { + goto case 203; + } + } + case 202: { + Expect(139, t); // "Me" + currentState = stateStack.Pop(); + break; + } + case 203: { + if (t.kind == 139) { + goto case 202; + } else { + goto case 205; + } + } + case 204: { + Expect(144, t); // "MyBase" + currentState = stateStack.Pop(); + break; + } + case 205: { + if (t.kind == 144) { + goto case 204; + } else { + goto case 207; + } + } + case 206: { + Expect(145, t); // "MyClass" + currentState = stateStack.Pop(); + break; + } + case 207: { + if (t.kind == 145) { + goto case 206; + } else { + Error(t); + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 208: { + stateStack.Push(212); + goto case 215; // IdentifierForFieldDeclaration + } + case 209: { + Expect(85, t); // "Custom" + currentState = 212; + break; + } + case 210: { // start of Identifier PushContext(Context.IdentifierExpected); - if (StartOf(12)) { - IdentifierForFieldDeclaration(); - } else if (la.kind == 85) { - Get(); - } else SynErr(230); - PopContext(); - } - - void IdentifierForFieldDeclaration() { - switch (la.kind) { - case 2: { - Get(); - break; - } - case 45: { - Get(); - break; - } - case 49: { - Get(); - break; - } - case 51: { - Get(); - break; - } - case 52: { - Get(); - break; - } - case 53: { - Get(); - break; - } - case 54: { - Get(); - break; - } - case 57: { - Get(); - break; - } - case 74: { - Get(); - break; - } - case 91: { - Get(); - break; - } - case 94: { - Get(); - break; - } - case 103: { - Get(); - break; - } - case 108: { - Get(); - break; - } - case 113: { - Get(); - break; - } - case 120: { - Get(); - break; - } - case 126: { - Get(); - break; - } - case 130: { - Get(); - break; - } - case 133: { - Get(); - break; - } - case 156: { - Get(); - break; - } - case 162: { - Get(); - break; - } - case 169: { - Get(); - break; - } - case 188: { - Get(); - break; - } - case 197: { - Get(); - break; - } - case 198: { - Get(); - break; - } - case 208: { - Get(); - break; - } - case 209: { - Get(); - break; - } - case 215: { - Get(); - break; - } - default: SynErr(231); break; + if (set[13, t.kind]) { + goto case 208; + } else { + goto case 211; + } + } + case 211: { + if (t.kind == 85) { + goto case 209; + } else { + Error(t); + goto case 212; + } + } + case 212: { + PopContext(); + currentState = stateStack.Pop(); + goto switchlbl; + } + case 213: { + Expect(2, t); // ident + currentState = stateStack.Pop(); + break; + } + case 214: { + Expect(45, t); // "Aggregate" + currentState = stateStack.Pop(); + break; + } + case 215: { // start of IdentifierForFieldDeclaration + if (t.kind == 2) { + goto case 213; + } else { + goto case 216; + } + } + case 216: { + if (t.kind == 45) { + goto case 214; + } else { + goto case 218; + } + } + case 217: { + Expect(49, t); // "Ansi" + currentState = stateStack.Pop(); + break; + } + case 218: { + if (t.kind == 49) { + goto case 217; + } else { + goto case 220; + } + } + case 219: { + Expect(51, t); // "Ascending" + currentState = stateStack.Pop(); + break; + } + case 220: { + if (t.kind == 51) { + goto case 219; + } else { + goto case 222; + } + } + case 221: { + Expect(52, t); // "Assembly" + currentState = stateStack.Pop(); + break; + } + case 222: { + if (t.kind == 52) { + goto case 221; + } else { + goto case 224; + } + } + case 223: { + Expect(53, t); // "Auto" + currentState = stateStack.Pop(); + break; + } + case 224: { + if (t.kind == 53) { + goto case 223; + } else { + goto case 226; + } + } + case 225: { + Expect(54, t); // "Binary" + currentState = stateStack.Pop(); + break; + } + case 226: { + if (t.kind == 54) { + goto case 225; + } else { + goto case 228; + } + } + case 227: { + Expect(57, t); // "By" + currentState = stateStack.Pop(); + break; + } + case 228: { + if (t.kind == 57) { + goto case 227; + } else { + goto case 230; + } + } + case 229: { + Expect(74, t); // "Compare" + currentState = stateStack.Pop(); + break; + } + case 230: { + if (t.kind == 74) { + goto case 229; + } else { + goto case 232; + } + } + case 231: { + Expect(91, t); // "Descending" + currentState = stateStack.Pop(); + break; + } + case 232: { + if (t.kind == 91) { + goto case 231; + } else { + goto case 234; + } + } + case 233: { + Expect(94, t); // "Distinct" + currentState = stateStack.Pop(); + break; + } + case 234: { + if (t.kind == 94) { + goto case 233; + } else { + goto case 236; + } + } + case 235: { + Expect(103, t); // "Equals" + currentState = stateStack.Pop(); + break; + } + case 236: { + if (t.kind == 103) { + goto case 235; + } else { + goto case 238; + } + } + case 237: { + Expect(108, t); // "Explicit" + currentState = stateStack.Pop(); + break; + } + case 238: { + if (t.kind == 108) { + goto case 237; + } else { + goto case 240; + } + } + case 239: { + Expect(113, t); // "From" + currentState = stateStack.Pop(); + break; + } + case 240: { + if (t.kind == 113) { + goto case 239; + } else { + goto case 242; + } + } + case 241: { + Expect(120, t); // "Group" + currentState = stateStack.Pop(); + break; + } + case 242: { + if (t.kind == 120) { + goto case 241; + } else { + goto case 244; + } + } + case 243: { + Expect(126, t); // "Infer" + currentState = stateStack.Pop(); + break; + } + case 244: { + if (t.kind == 126) { + goto case 243; + } else { + goto case 246; + } + } + case 245: { + Expect(130, t); // "Into" + currentState = stateStack.Pop(); + break; + } + case 246: { + if (t.kind == 130) { + goto case 245; + } else { + goto case 248; + } + } + case 247: { + Expect(133, t); // "Join" + currentState = stateStack.Pop(); + break; + } + case 248: { + if (t.kind == 133) { + goto case 247; + } else { + goto case 250; + } + } + case 249: { + Expect(156, t); // "Off" + currentState = stateStack.Pop(); + break; + } + case 250: { + if (t.kind == 156) { + goto case 249; + } else { + goto case 252; + } + } + case 251: { + Expect(162, t); // "Order" + currentState = stateStack.Pop(); + break; + } + case 252: { + if (t.kind == 162) { + goto case 251; + } else { + goto case 254; + } + } + case 253: { + Expect(169, t); // "Preserve" + currentState = stateStack.Pop(); + break; + } + case 254: { + if (t.kind == 169) { + goto case 253; + } else { + goto case 256; + } + } + case 255: { + Expect(188, t); // "Skip" + currentState = stateStack.Pop(); + break; + } + case 256: { + if (t.kind == 188) { + goto case 255; + } else { + goto case 258; + } + } + case 257: { + Expect(197, t); // "Take" + currentState = stateStack.Pop(); + break; + } + case 258: { + if (t.kind == 197) { + goto case 257; + } else { + goto case 260; + } + } + case 259: { + Expect(198, t); // "Text" + currentState = stateStack.Pop(); + break; + } + case 260: { + if (t.kind == 198) { + goto case 259; + } else { + goto case 262; + } + } + case 261: { + Expect(208, t); // "Unicode" + currentState = stateStack.Pop(); + break; + } + case 262: { + if (t.kind == 208) { + goto case 261; + } else { + goto case 264; + } + } + case 263: { + Expect(209, t); // "Until" + currentState = stateStack.Pop(); + break; + } + case 264: { + if (t.kind == 209) { + goto case 263; + } else { + goto case 266; + } + } + case 265: { + Expect(215, t); // "Where" + currentState = stateStack.Pop(); + break; + } + case 266: { + if (t.kind == 215) { + goto case 265; + } else { + Error(t); + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 267: { + Expect(173, t); // "Public" + currentState = stateStack.Pop(); + break; + } + case 268: { + Expect(112, t); // "Friend" + currentState = stateStack.Pop(); + break; + } + case 269: { // start of AccessModifier + if (t.kind == 173) { + goto case 267; + } else { + goto case 270; + } + } + case 270: { + if (t.kind == 112) { + goto case 268; + } else { + goto case 272; + } + } + case 271: { + Expect(172, t); // "Protected" + currentState = stateStack.Pop(); + break; + } + case 272: { + if (t.kind == 172) { + goto case 271; + } else { + goto case 274; + } + } + case 273: { + Expect(170, t); // "Private" + currentState = stateStack.Pop(); + break; + } + case 274: { + if (t.kind == 170) { + goto case 273; + } else { + Error(t); + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 275: { + goto case 269; // AccessModifier + } + case 276: { + Expect(184, t); // "Shadows" + currentState = stateStack.Pop(); + break; + } + case 277: { // start of TypeModifier + if (set[14, t.kind]) { + goto case 275; + } else { + goto case 278; + } + } + case 278: { + if (t.kind == 184) { + goto case 276; + } else { + Error(t); + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 279: { + goto case 269; // AccessModifier + } + case 280: { + Expect(184, t); // "Shadows" + currentState = stateStack.Pop(); + break; + } + case 281: { // start of MemberModifier + if (set[14, t.kind]) { + goto case 279; + } else { + goto case 282; + } + } + case 282: { + if (t.kind == 184) { + goto case 280; + } else { + goto case 284; + } + } + case 283: { + Expect(185, t); // "Shared" + currentState = stateStack.Pop(); + break; + } + case 284: { + if (t.kind == 185) { + goto case 283; + } else { + goto case 286; + } + } + case 285: { + Expect(165, t); // "Overridable" + currentState = stateStack.Pop(); + break; + } + case 286: { + if (t.kind == 165) { + goto case 285; + } else { + goto case 288; + } + } + case 287: { + Expect(153, t); // "NotOverridable" + currentState = stateStack.Pop(); + break; + } + case 288: { + if (t.kind == 153) { + goto case 287; + } else { + goto case 290; + } + } + case 289: { + Expect(166, t); // "Overrides" + currentState = stateStack.Pop(); + break; + } + case 290: { + if (t.kind == 166) { + goto case 289; + } else { + goto case 292; + } + } + case 291: { + Expect(164, t); // "Overloads" + currentState = stateStack.Pop(); + break; + } + case 292: { + if (t.kind == 164) { + goto case 291; + } else { + goto case 294; + } + } + case 293: { + Expect(168, t); // "Partial" + currentState = stateStack.Pop(); + break; + } + case 294: { + if (t.kind == 168) { + goto case 293; + } else { + Error(t); + currentState = stateStack.Pop(); + goto switchlbl; + } + } + case 295: { + Expect(59, t); // "ByVal" + currentState = stateStack.Pop(); + break; + } + case 296: { + Expect(56, t); // "ByRef" + currentState = stateStack.Pop(); + break; + } + case 297: { // start of ParameterModifier + if (t.kind == 59) { + goto case 295; + } else { + goto case 298; + } + } + case 298: { + if (t.kind == 56) { + goto case 296; + } else { + goto case 300; + } + } + case 299: { + Expect(160, t); // "Optional" + currentState = stateStack.Pop(); + break; + } + case 300: { + if (t.kind == 160) { + goto case 299; + } else { + goto case 302; + } + } + case 301: { + Expect(167, t); // "ParamArray" + currentState = stateStack.Pop(); + break; + } + case 302: { + if (t.kind == 167) { + goto case 301; + } else { + Error(t); + currentState = stateStack.Pop(); + goto switchlbl; + } + } } - } - - void AccessModifier() { - if (la.kind == 173) { - Get(); - } else if (la.kind == 112) { - Get(); - } else if (la.kind == 172) { - Get(); - } else if (la.kind == 170) { - Get(); - } else SynErr(232); - } - - - - public void Parse() { - PushContext(Context.Global); - la = new Token(1, 1, 1); - Get(); - ParserHelper(); - Expect(0); - PopContext(); } static readonly 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,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, 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,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,T,x, 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,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, 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,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,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,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, 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,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,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,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,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,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, 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}, {x,x,x,x, 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, 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,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,T,x, 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,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}, + {x,x,x,x, 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, 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,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,T,x, 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,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}, {x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, 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,T,x, 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,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x}, {x,x,x,x, 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, 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,T,x,x, x,x,x,x, x,x,x,x, T,T,T,x, T,x,T,x, T,T,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,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, 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,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,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,T,x,x, x,x,x,x, x,x,x,x, T,T,T,x, T,x,T,x, T,T,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,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, T,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,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,T,x,x, x,x,x,T, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, T,x,x,x, x,T,x,x, x,x,x,x, T,x,x,x, x,x,T,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, T,x,x,x, T,x,T,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, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,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, 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,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,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,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,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,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,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, 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,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,T,T, T,T,T,T, T,T,T,T, T,T,T,T, T,T,T,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,T,x,x, x,T,x,T, T,T,T,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,x,x, x,x,x,x, x,x,x,T, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, T,x,x,x, x,T,x,x, x,x,x,x, T,x,x,x, x,x,T,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, T,x,x,x, x,x,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, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,T,x,x, x,x,x,T, x,x,x,x, x,x,x,x} + {x,x,x,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,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, T,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,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,x,x,x, x,x,x,x, x,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,x,T, T,T,T,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,x,x, x,T,x,x, x,x,x,T, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, T,x,x,x, x,T,x,x, x,x,x,x, T,x,x,x, x,x,T,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, T,x,x,x, x,x,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, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,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,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,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, 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,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,T, x,x,x,x, x,T,x,x, x,x,x,x, x,x,x,x, x,x,T,T, 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,x,x,x, x,x,x,x, x,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,x,T, T,T,T,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,x,x, x,x,x,x, x,x,x,T, x,x,T,x, x,x,x,x, x,x,x,T, x,x,x,x, T,x,x,x, x,T,x,x, x,x,x,x, T,x,x,x, x,x,T,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, T,x,x,x, x,x,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, T,x,x,x, x,x,x,x, x,T,T,x, x,x,x,x, x,x,x,x, T,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,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, x,x,x,x, 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,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} }; -} // end Parser - - -public class Errors { - public int count = 0; // number of errors detected - public System.IO.TextWriter errorStream = Console.Out; // error messages go to this stream - public string errMsgFormat = "-- line {0} col {1}: {2}"; // 0=line, 1=column, 2=text - - public void SynErr (int line, int col, int n) { - string s; - switch (n) { - 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 = "\"&=\" expected"; break; - case 43: s = "\"AddHandler\" expected"; break; - case 44: s = "\"AddressOf\" expected"; break; - case 45: s = "\"Aggregate\" expected"; break; - case 46: s = "\"Alias\" expected"; break; - case 47: s = "\"And\" expected"; break; - case 48: s = "\"AndAlso\" expected"; break; - case 49: s = "\"Ansi\" expected"; break; - case 50: s = "\"As\" expected"; break; - case 51: s = "\"Ascending\" expected"; break; - case 52: s = "\"Assembly\" expected"; break; - case 53: s = "\"Auto\" expected"; break; - case 54: s = "\"Binary\" expected"; break; - case 55: s = "\"Boolean\" expected"; break; - case 56: s = "\"ByRef\" expected"; break; - case 57: s = "\"By\" expected"; break; - case 58: s = "\"Byte\" expected"; break; - case 59: s = "\"ByVal\" expected"; break; - case 60: s = "\"Call\" expected"; break; - case 61: s = "\"Case\" expected"; break; - case 62: s = "\"Catch\" expected"; break; - case 63: s = "\"CBool\" expected"; break; - case 64: s = "\"CByte\" expected"; break; - case 65: s = "\"CChar\" expected"; break; - case 66: s = "\"CDate\" expected"; break; - case 67: s = "\"CDbl\" expected"; break; - case 68: s = "\"CDec\" expected"; break; - case 69: s = "\"Char\" expected"; break; - case 70: s = "\"CInt\" expected"; break; - case 71: s = "\"Class\" expected"; break; - case 72: s = "\"CLng\" expected"; break; - case 73: s = "\"CObj\" expected"; break; - case 74: s = "\"Compare\" expected"; break; - case 75: s = "\"Const\" expected"; break; - case 76: s = "\"Continue\" expected"; break; - case 77: s = "\"CSByte\" expected"; break; - case 78: s = "\"CShort\" expected"; break; - case 79: s = "\"CSng\" expected"; break; - case 80: s = "\"CStr\" expected"; break; - case 81: s = "\"CType\" expected"; break; - case 82: s = "\"CUInt\" expected"; break; - case 83: s = "\"CULng\" expected"; break; - case 84: s = "\"CUShort\" expected"; break; - case 85: s = "\"Custom\" expected"; break; - case 86: s = "\"Date\" expected"; break; - case 87: s = "\"Decimal\" expected"; break; - case 88: s = "\"Declare\" expected"; break; - case 89: s = "\"Default\" expected"; break; - case 90: s = "\"Delegate\" expected"; break; - case 91: s = "\"Descending\" expected"; break; - case 92: s = "\"Dim\" expected"; break; - case 93: s = "\"DirectCast\" expected"; break; - case 94: s = "\"Distinct\" expected"; break; - case 95: s = "\"Do\" expected"; break; - case 96: s = "\"Double\" expected"; break; - case 97: s = "\"Each\" expected"; break; - case 98: s = "\"Else\" expected"; break; - case 99: s = "\"ElseIf\" expected"; break; - case 100: s = "\"End\" expected"; break; - case 101: s = "\"EndIf\" expected"; break; - case 102: s = "\"Enum\" expected"; break; - case 103: s = "\"Equals\" expected"; break; - case 104: s = "\"Erase\" expected"; break; - case 105: s = "\"Error\" expected"; break; - case 106: s = "\"Event\" expected"; break; - case 107: s = "\"Exit\" expected"; break; - case 108: s = "\"Explicit\" expected"; break; - case 109: s = "\"False\" expected"; break; - case 110: s = "\"Finally\" expected"; break; - case 111: s = "\"For\" expected"; break; - case 112: s = "\"Friend\" expected"; break; - case 113: s = "\"From\" expected"; break; - case 114: s = "\"Function\" expected"; break; - case 115: s = "\"Get\" expected"; break; - case 116: s = "\"GetType\" expected"; break; - case 117: s = "\"Global\" expected"; break; - case 118: s = "\"GoSub\" expected"; break; - case 119: s = "\"GoTo\" expected"; break; - case 120: s = "\"Group\" expected"; break; - case 121: s = "\"Handles\" expected"; break; - case 122: s = "\"If\" expected"; break; - case 123: s = "\"Implements\" expected"; break; - case 124: s = "\"Imports\" expected"; break; - case 125: s = "\"In\" expected"; break; - case 126: s = "\"Infer\" expected"; break; - case 127: s = "\"Inherits\" expected"; break; - case 128: s = "\"Integer\" expected"; break; - case 129: s = "\"Interface\" expected"; break; - case 130: s = "\"Into\" expected"; break; - case 131: s = "\"Is\" expected"; break; - case 132: s = "\"IsNot\" expected"; break; - case 133: s = "\"Join\" expected"; break; - case 134: s = "\"Let\" expected"; break; - case 135: s = "\"Lib\" expected"; break; - case 136: s = "\"Like\" expected"; break; - case 137: s = "\"Long\" expected"; break; - case 138: s = "\"Loop\" expected"; break; - case 139: s = "\"Me\" expected"; break; - case 140: s = "\"Mod\" expected"; break; - case 141: s = "\"Module\" expected"; break; - case 142: s = "\"MustInherit\" expected"; break; - case 143: s = "\"MustOverride\" expected"; break; - case 144: s = "\"MyBase\" expected"; break; - case 145: s = "\"MyClass\" expected"; break; - case 146: s = "\"Namespace\" expected"; break; - case 147: s = "\"Narrowing\" expected"; break; - case 148: s = "\"New\" expected"; break; - case 149: s = "\"Next\" expected"; break; - case 150: s = "\"Not\" expected"; break; - case 151: s = "\"Nothing\" expected"; break; - case 152: s = "\"NotInheritable\" expected"; break; - case 153: s = "\"NotOverridable\" expected"; break; - case 154: s = "\"Object\" expected"; break; - case 155: s = "\"Of\" expected"; break; - case 156: s = "\"Off\" expected"; break; - case 157: s = "\"On\" expected"; break; - case 158: s = "\"Operator\" expected"; break; - case 159: s = "\"Option\" expected"; break; - case 160: s = "\"Optional\" expected"; break; - case 161: s = "\"Or\" expected"; break; - case 162: s = "\"Order\" expected"; break; - case 163: s = "\"OrElse\" expected"; break; - case 164: s = "\"Overloads\" expected"; break; - case 165: s = "\"Overridable\" expected"; break; - case 166: s = "\"Overrides\" expected"; break; - case 167: s = "\"ParamArray\" expected"; break; - case 168: s = "\"Partial\" expected"; break; - case 169: s = "\"Preserve\" expected"; break; - case 170: s = "\"Private\" expected"; break; - case 171: s = "\"Property\" expected"; break; - case 172: s = "\"Protected\" expected"; break; - case 173: s = "\"Public\" expected"; break; - case 174: s = "\"RaiseEvent\" expected"; break; - case 175: s = "\"ReadOnly\" expected"; break; - case 176: s = "\"ReDim\" expected"; break; - case 177: s = "\"Rem\" expected"; break; - case 178: s = "\"RemoveHandler\" expected"; break; - case 179: s = "\"Resume\" expected"; break; - case 180: s = "\"Return\" expected"; break; - case 181: s = "\"SByte\" expected"; break; - case 182: s = "\"Select\" expected"; break; - case 183: s = "\"Set\" expected"; break; - case 184: s = "\"Shadows\" expected"; break; - case 185: s = "\"Shared\" expected"; break; - case 186: s = "\"Short\" expected"; break; - case 187: s = "\"Single\" expected"; break; - case 188: s = "\"Skip\" expected"; break; - case 189: s = "\"Static\" expected"; break; - case 190: s = "\"Step\" expected"; break; - case 191: s = "\"Stop\" expected"; break; - case 192: s = "\"Strict\" expected"; break; - case 193: s = "\"String\" expected"; break; - case 194: s = "\"Structure\" expected"; break; - case 195: s = "\"Sub\" expected"; break; - case 196: s = "\"SyncLock\" expected"; break; - case 197: s = "\"Take\" expected"; break; - case 198: s = "\"Text\" expected"; break; - case 199: s = "\"Then\" expected"; break; - case 200: s = "\"Throw\" expected"; break; - case 201: s = "\"To\" expected"; break; - case 202: s = "\"True\" expected"; break; - case 203: s = "\"Try\" expected"; break; - case 204: s = "\"TryCast\" expected"; break; - case 205: s = "\"TypeOf\" expected"; break; - case 206: s = "\"UInteger\" expected"; break; - case 207: s = "\"ULong\" expected"; break; - case 208: s = "\"Unicode\" expected"; break; - case 209: s = "\"Until\" expected"; break; - case 210: s = "\"UShort\" expected"; break; - case 211: s = "\"Using\" expected"; break; - case 212: s = "\"Variant\" expected"; break; - case 213: s = "\"Wend\" expected"; break; - case 214: s = "\"When\" expected"; break; - case 215: s = "\"Where\" expected"; break; - case 216: s = "\"While\" expected"; break; - case 217: s = "\"Widening\" expected"; break; - case 218: s = "\"With\" expected"; break; - case 219: s = "\"WithEvents\" expected"; break; - case 220: s = "\"WriteOnly\" expected"; break; - case 221: s = "\"Xor\" expected"; break; - case 222: s = "??? expected"; break; - case 223: s = "invalid NamespaceMemberDeclaration"; break; - case 224: s = "invalid StatementTerminator"; break; - case 225: s = "invalid TypeModifier"; break; - case 226: s = "invalid SubOrFunctionDeclaration"; break; - case 227: s = "invalid SubOrFunctionDeclaration"; break; - case 228: s = "invalid MemberModifier"; break; - case 229: s = "invalid ParameterModifier"; break; - case 230: s = "invalid Identifier"; break; - case 231: s = "invalid IdentifierForFieldDeclaration"; break; - case 232: s = "invalid AccessModifier"; break; - - default: s = "error " + n; break; - } - errorStream.WriteLine(errMsgFormat, line, col, s); - count++; - } - - public void SemErr (int line, int col, string s) { - errorStream.WriteLine(errMsgFormat, line, col, s); - count++; - } - - public void SemErr (string s) { - errorStream.WriteLine(s); - count++; - } - - public void Warning (int line, int col, string s) { - errorStream.WriteLine(errMsgFormat, line, col, s); - } - - public void Warning(string s) { - errorStream.WriteLine(s); - } -} // Errors +} // end Parser -public class FatalError: Exception { - public FatalError(string m): base(m) {} -} } \ No newline at end of file diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/ParserHelper.atg b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/ParserHelper.atg index b5d1fc4da5..e4060de031 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/ParserHelper.atg +++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/ParserHelper.atg @@ -5,9 +5,8 @@ using System.Text; using ICSharpCode.NRefactory.Ast; using ICSharpCode.NRefactory.Parser.VB; using ASTAttribute = ICSharpCode.NRefactory.Ast.Attribute; -using ICSharpCode.NRefactory.Parser.VBNet.Experimental; -COMPILER ParserHelper +PUSHCOMPILER ParserHelper /* START AUTOGENERATED TOKENS SECTION */ TOKENS @@ -243,10 +242,12 @@ TOKENS PRODUCTIONS /*------------------------------------------------------------------------*/ ParserHelper = + (. PushContext(Context.Global); .) { OptionStatement } { ImportsStatement } { AttributeBlock } { NamespaceMemberDeclaration } + (. PopContext(); .) . StatementTerminator = EOL | ":" . @@ -259,7 +260,6 @@ ImportsStatement = "Imports" { ANY } StatementTerminator . - AttributeBlock = "<" { ANY } ">" [ EOL ] . @@ -279,22 +279,23 @@ TypeDeclaration = { TypeModifier } "Module" { ANY } StatementTerminator (. PushContext(Context.Type); .) - { ModuleMemberDeclaration } + { MemberDeclaration } "End" "Module" StatementTerminator (. PopContext(); .) . -ModuleMemberDeclaration +MemberDeclaration = (. PushContext(Context.Member); .) -= - SubOrFunctionDeclaration + ( + SubOrFunctionDeclaration + ) (. PopContext(); .) . SubOrFunctionDeclaration = { AttributeBlock } { MemberModifier } ("Sub" | "Function") (. PushContext(Context.IdentifierExpected); .) ANY (. PopContext(); .) - [ "(" [ ParameterList ] ")" ] EOL + [ "(" [ ParameterList ] ")" ] [ "As" TypeName ] EOL [ Block ] "End" ("Sub" | "Function") StatementTerminator . @@ -304,13 +305,62 @@ ParameterList = . Parameter = - { AttributeBlock } { ParameterModifier } Identifier [ "As" ANY ] [ "=" { ANY } ] + { AttributeBlock } { ParameterModifier } Identifier [ "As" TypeName ] [ "=" Expression ] . Block = EOL . +Expression = + Literal | + ( "(" Expression ")" ) | + ( Identifier [ "(" "Of" TypeName { "," TypeName } ")" ] ) | + "AddressOf" Expression | + +. + +PrimitiveTypeName = + "Byte" | + "SByte" | + "UShort" | + "Short" | + "UInteger" | + "Integer" | + "ULong" | + "Long" | + "Single" | + "Double" | + "Decimal" | + "Boolean" | + "Date" | + "Char" | + "String" | + "Object" +. + +TypeName = ( "Global" | Identifier | PrimitiveTypeName ) { TypeSuffix } { "." IdentifierOrKeyword { TypeSuffix } } . + +TypeSuffix = "(" ( "Of" TypeName { "," TypeName } | { "," /*[ EOL ]*/ } ) ")" . + +IdentifierOrKeyword = ANY . + +Literal = LiteralString | + LiteralCharacter | + LiteralInteger | + LiteralDouble | + LiteralSingle | + LiteralDecimal | + LiteralDate | + "True" | + "False" | + "Nothing" | + /* from InstanceExpression */ + "Me" | + "MyBase" | + "MyClass" +. + /* This production handles pseudo keywords that are needed in the grammar */ Identifier (. PushContext(Context.IdentifierExpected); .) @@ -383,5 +433,6 @@ ParameterModifier = "ParamArray" . + END ParserHelper. diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/ParserHelper.cs b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/ParserHelper.cs index b4027b08c2..c898c9443c 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/ParserHelper.cs +++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/ParserHelper.cs @@ -10,7 +10,7 @@ using System.Collections.Generic; namespace ICSharpCode.NRefactory.Parser.VBNet.Experimental { - partial class Parser + public partial class Parser { Stack stack = new Stack(); diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/PushParser.frame b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/PushParser.frame new file mode 100644 index 0000000000..80751e06b4 --- /dev/null +++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/PushParser.frame @@ -0,0 +1,68 @@ +/*---------------------------------------------------------------------- +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.Collections.Generic; + +-->namespace + +partial class Parser { +-->constants + const bool T = true; + const bool x = false; + +-->declarations + readonly Stack stateStack = new Stack(); + + public Parser() + { + stateStack.Push(-1); // required so that we don't crash when leaving the root production + } + + void Expect(int expectedKind, Token t) + { + if (t.kind != expectedKind) + Error(t); + } + + void Error(Token t) + { + } + + public void InformToken(Token t) + { + -->informToken + } + + static readonly bool[,] set = { +-->initialization + }; + +} // end Parser + + +$$$ \ No newline at end of file diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/ParserTests.cs b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/ParserTests.cs new file mode 100644 index 0000000000..5d4ddf1e07 --- /dev/null +++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/ParserTests.cs @@ -0,0 +1,35 @@ +// +// +// +// +// $Revision$ +// + + +using System; +using NUnit.Framework; + +namespace VBParserExperiment +{ + [TestFixture] + public class ParserTests + { + [Test] + public void TestMethod() + { + // TODO: Add your test. + } + + [TestFixtureSetUp] + public void Init() + { + // TODO: Add Init code. + } + + [TestFixtureTearDown] + public void Dispose() + { + // TODO: Add tear down code. + } + } +} diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/Program.cs b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/Program.cs index 39bca05baa..fb896fdf7d 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/Program.cs +++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/Program.cs @@ -8,7 +8,8 @@ using System; using System.IO; using ICSharpCode.NRefactory; -using ICSharpCode.NRefactory.Parser.VB; +using ICSharpCode.NRefactory.Parser; +using VB = ICSharpCode.NRefactory.Parser.VB; using ICSharpCode.NRefactory.Parser.VBNet.Experimental; namespace VBParserExperiment @@ -40,9 +41,13 @@ End Namespace public static void Main(string[] args) { - Parser p = new Parser(ParserFactory.CreateLexer(SupportedLanguage.VBNet, new StringReader(data))); - - p.Parse(); + Parser p = new Parser(); + ILexer lexer = ParserFactory.CreateLexer(SupportedLanguage.VBNet, new StringReader(data)); + Token t; + do { + t = lexer.NextToken(); + p.InformToken(t); + } while (t.Kind != VB.Tokens.EOF); Console.ReadKey(true); } diff --git a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/VBParserExperiment.csproj b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/VBParserExperiment.csproj index 376a9f3408..2248ec5c01 100644 --- a/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/VBParserExperiment.csproj +++ b/src/Libraries/NRefactory/Project/Src/Parser/VBNet/Experimental/Test/VBParserExperiment.csproj @@ -30,6 +30,9 @@ TRACE + + ..\..\..\..\..\..\..\..\..\bin\Tools\NUnit\nunit.framework.dll + 3.5 @@ -44,6 +47,7 @@ + @@ -52,10 +56,6 @@ {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} NRefactory - - {3A9AE6AA-BC07-4A2F-972C-581E3AE2F195} - NRefactory - \ No newline at end of file