Пример #1
0
        public void Parse()
        {
            la = new Token();
            la.val = "";
            Get();
            TorqueScript();

            Expect(0);
        }
Пример #2
0
        void Get()
        {
            for (; ; ) {
                t = la;
                la = scanner.Scan();
                if (la.kind <= maxT) { ++errDist; break; }

                la = t;
            }
        }
Пример #3
0
        Token NextToken()
        {
            while (ignore[ch]) NextCh();
            if (ch == '/' && Comment0() || ch == '/' && Comment1()) return NextToken();
            int apx = 0;
            t = new Token();
            t.pos = pos; t.col = pos - lineStart + 1; t.line = line;
            int state = start[ch];
            tlen = 0; AddCh();

            switch (state) {
                case -1: { t.kind = eofSym; break; } // NextCh already done
                case 0: { t.kind = noSym; break; }   // NextCh already done
                case 1:
                    if ((ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z')) { AddCh(); goto case 1; } else { t.kind = 1; t.val = new String(tval, 0, tlen); CheckLiteral(); return t; }
                case 2:
                    if ((ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '!' || ch >= '#' && ch <= '[' || ch >= ']' && ch <= 255)) { AddCh(); goto case 2; } else if (ch == '"') { AddCh(); goto case 3; } else if (ch == 92) { AddCh(); goto case 16; } else { t.kind = noSym; break; }
                case 3: { t.kind = 2; break; }
                case 4:
                    if ((ch <= 9 || ch >= 11 && ch <= 12 || ch >= 14 && ch <= '&' || ch >= '(' && ch <= '[' || ch >= ']' && ch <= 255)) { AddCh(); goto case 4; } else if (ch == 39) { AddCh(); goto case 5; } else if (ch == 92) { AddCh(); goto case 17; } else { t.kind = noSym; break; }
                case 5: { t.kind = 3; break; }
                case 6:
                    if ((ch >= '0' && ch <= '9')) { AddCh(); goto case 6; } else { t.kind = 4; break; }
                case 7:
                    if ((ch >= '0' && ch <= '9')) { AddCh(); goto case 7; } else { t.kind = 4; break; }
                case 8: {
                        tlen -= apx;
                        pos = pos - apx - 1; line = t.line;
                        buffer.Pos = pos + 1; NextCh();
                        t.kind = 4; break;
                    }
                case 9:
                    if ((ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z')) { AddCh(); goto case 9; } else if (ch == ':') { AddCh(); goto case 11; } else { t.kind = 5; break; }
                case 10:
                    if ((ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z')) { AddCh(); goto case 9; } else { t.kind = noSym; break; }
                case 11:
                    if (ch == ':') { AddCh(); goto case 10; } else { t.kind = noSym; break; }
                case 12:
                    if ((ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z')) { AddCh(); goto case 12; } else if (ch == ':') { AddCh(); goto case 14; } else { t.kind = 6; break; }
                case 13:
                    if ((ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z')) { AddCh(); goto case 12; } else { t.kind = noSym; break; }
                case 14:
                    if (ch == ':') { AddCh(); goto case 13; } else { t.kind = noSym; break; }
                case 15:
                    if ((ch >= '0' && ch <= '9')) { AddCh(); goto case 15; } else if (ch == '.') { apx++; AddCh(); goto case 18; } else { t.kind = 4; break; }
                case 16:
                    if ((ch == '"' || ch == '$' || ch == 39 || ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == 92 || ch == '_' || ch >= 'a' && ch <= 'z')) { AddCh(); goto case 2; } else { t.kind = noSym; break; }
                case 17:
                    if ((ch == '"' || ch == '$' || ch == 39 || ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == 92 || ch == '_' || ch >= 'a' && ch <= 'z')) { AddCh(); goto case 4; } else { t.kind = noSym; break; }
                case 18:
                    if ((ch <= '/' || ch >= ':' && ch <= 255)) { apx++; AddCh(); goto case 8; } else if ((ch >= '0' && ch <= '9')) { apx = 0; AddCh(); goto case 7; } else { t.kind = noSym; break; }
                case 19: { t.kind = 7; break; }
                case 20: { t.kind = 9; break; }
                case 21: { t.kind = 10; break; }
                case 22: { t.kind = 13; break; }
                case 23: { t.kind = 14; break; }
                case 24: { t.kind = 15; break; }
                case 25: { t.kind = 23; break; }
                case 26: { t.kind = 24; break; }
                case 27: { t.kind = 30; break; }
                case 28: { t.kind = 34; break; }
                case 29: { t.kind = 35; break; }
                case 30: { t.kind = 36; break; }
                case 31: { t.kind = 39; break; }
                case 32: { t.kind = 40; break; }
                case 33: { t.kind = 42; break; }
                case 34: { t.kind = 43; break; }
                case 35: { t.kind = 44; break; }
                case 36: { t.kind = 45; break; }
                case 37: { t.kind = 46; break; }
                case 38: { t.kind = 47; break; }
                case 39: { t.kind = 48; break; }
                case 40: { t.kind = 49; break; }
                case 41: { t.kind = 50; break; }
                case 42: { t.kind = 51; break; }
                case 43: { t.kind = 52; break; }
                case 44: { t.kind = 54; break; }
                case 45: { t.kind = 57; break; }
                case 46: { t.kind = 58; break; }
                case 47: { t.kind = 59; break; }
                case 48: { t.kind = 62; break; }
                case 49: { t.kind = 63; break; }
                case 50: { t.kind = 66; break; }
                case 51:
                    if ((ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z')) { AddCh(); goto case 9; } else if (ch == '=') { AddCh(); goto case 47; } else { t.kind = noSym; break; }
                case 52:
                    if ((ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z')) { AddCh(); goto case 12; } else if (ch == '=') { AddCh(); goto case 37; } else { t.kind = 72; break; }
                case 53:
                    if ((ch >= '0' && ch <= '9')) { AddCh(); goto case 6; } else { t.kind = 38; break; }
                case 54:
                    if ((ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'v' || ch >= 'x' && ch <= 'z')) { AddCh(); goto case 1; } else if (ch == 'w') { AddCh(); goto case 67; } else { t.kind = 1; t.val = new String(tval, 0, tlen); CheckLiteral(); return t; }
                case 55:
                    if (ch == ':') { AddCh(); goto case 25; } else { t.kind = 26; break; }
                case 56:
                    if (ch == '=') { AddCh(); goto case 45; } else { t.kind = 29; break; }
                case 57:
                    if (ch == '+') { AddCh(); goto case 29; } else if (ch == '=') { AddCh(); goto case 33; } else { t.kind = 32; break; }
                case 58:
                    if (ch == '-') { AddCh(); goto case 30; } else if (ch == '=') { AddCh(); goto case 34; } else { t.kind = 33; break; }
                case 59:
                    if (ch == '=') { AddCh(); goto case 38; } else if (ch == '&') { AddCh(); goto case 44; } else { t.kind = 37; break; }
                case 60:
                    if (ch == '=') { AddCh(); goto case 46; } else { t.kind = 41; break; }
                case 61:
                    if (ch == '=') { AddCh(); goto case 35; } else { t.kind = 70; break; }
                case 62:
                    if (ch == '=') { AddCh(); goto case 36; } else { t.kind = 71; break; }
                case 63:
                    if (ch == '=') { AddCh(); goto case 39; } else if (ch == '|') { AddCh(); goto case 43; } else { t.kind = 55; break; }
                case 64:
                    if (ch == '=') { AddCh(); goto case 40; } else { t.kind = 56; break; }
                case 65:
                    if (ch == '<') { AddCh(); goto case 68; } else if (ch == '=') { AddCh(); goto case 48; } else { t.kind = 60; break; }
                case 66:
                    if (ch == '>') { AddCh(); goto case 69; } else if (ch == '=') { AddCh(); goto case 49; } else { t.kind = 61; break; }
                case 67:
                    if ((ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'h' || ch >= 'j' && ch <= 'z')) { AddCh(); goto case 1; } else if (ch == 'i') { AddCh(); goto case 70; } else { t.kind = 1; t.val = new String(tval, 0, tlen); CheckLiteral(); return t; }
                case 68:
                    if (ch == '=') { AddCh(); goto case 41; } else { t.kind = 64; break; }
                case 69:
                    if (ch == '=') { AddCh(); goto case 42; } else { t.kind = 65; break; }
                case 70:
                    if ((ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 's' || ch >= 'u' && ch <= 'z')) { AddCh(); goto case 1; } else if (ch == 't') { AddCh(); goto case 71; } else { t.kind = 1; t.val = new String(tval, 0, tlen); CheckLiteral(); return t; }
                case 71:
                    if ((ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'b' || ch >= 'd' && ch <= 'z')) { AddCh(); goto case 1; } else if (ch == 'c') { AddCh(); goto case 72; } else { t.kind = 1; t.val = new String(tval, 0, tlen); CheckLiteral(); return t; }
                case 72:
                    if ((ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'g' || ch >= 'i' && ch <= 'z')) { AddCh(); goto case 1; } else if (ch == 'h') { AddCh(); goto case 73; } else { t.kind = 1; t.val = new String(tval, 0, tlen); CheckLiteral(); return t; }
                case 73:
                    if ((ch >= '0' && ch <= '9' || ch >= 'A' && ch <= 'Z' || ch == '_' || ch >= 'a' && ch <= 'z')) { AddCh(); goto case 1; } else if (ch == '$') { AddCh(); goto case 22; } else { t.kind = 1; t.val = new String(tval, 0, tlen); CheckLiteral(); return t; }

            }
            t.val = new String(tval, 0, tlen);
            return t;
        }
Пример #4
0
 void Init()
 {
     pos = -1; line = 1; lineStart = 0;
     oldEols = 0;
     NextCh();
     ignore = new BitArray(charSetSize + 1);
     ignore[' '] = true;  // blanks are always white space
     ignore[9] = true; ignore[10] = true; ignore[13] = true;
     pt = tokens = new Token();  // first token is a dummy
 }
Пример #5
0
 // get the next token (possibly a token already seen during peeking)
 public Token Scan()
 {
     if (tokens.next == null) {
         return NextToken();
     } else {
         pt = tokens = tokens.next;
         return tokens;
     }
 }
Пример #6
0
 // make sure that peeking starts at the current scan position
 public void ResetPeek()
 {
     pt = tokens;
 }
Пример #7
0
 // peek for the next token, ignore pragmas
 public Token Peek()
 {
     if (pt.next == null) {
         do {
             pt = pt.next = NextToken();
         } while (pt.kind > maxT); // skip pragmas
     } else {
         do {
             pt = pt.next;
         } while (pt.kind > maxT);
     }
     return pt;
 }