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