Exemplo n.º 1
0
 public void Parse()
 {
     la = new Token();
     la.val = "";
     Get();
     IBS();
     Expect(0);
 }
Exemplo n.º 2
0
        private void Get()
        {
            for (;;) {
                t = la;
                la = scanner.Scan();
                if (la.kind <= maxT) {
                    ++errDist;
                    break;
                }

                la = t;
            }
        }
Exemplo n.º 3
0
        private Token NextToken()
        {
            while (ch == ' ' || ch >= 9 && ch <= 10 || ch == 13) {
                NextCh();
            }

            var recKind = noSym;
            var recEnd = pos;
            t = new Token();
            t.pos = pos;
            t.col = col;
            t.line = line;
            t.charPos = charPos;
            int state;
            if (start.ContainsKey(ch)) {
                state = (int) start[ch];
            } else {
                state = 0;
            }
            tlen = 0;
            AddCh();

            switch (state) {
                case -1:
                    {
                        t.kind = eofSym;
                        break;
                    } // NextCh already done
                case 0:
                    {
                        if (recKind != noSym) {
                            tlen = recEnd - t.pos;
                            SetScannerBehindT();
                        }
                        t.kind = recKind;
                        break;
                    } // NextCh already done
                case 1:
                    if (ch <= '!' || ch >= '#' && ch <= 65535) {
                        AddCh();
                        goto case 1;
                    } else if (ch == '"') {
                        AddCh();
                        goto case 2;
                    } else {
                        goto case 0;
                    }
                case 2:
                    {
                        t.kind = 1;
                        break;
                    }
                case 3:
                    recEnd = pos;
                    recKind = 2;
                    if (ch >= '0' && ch <= '9') {
                        AddCh();
                        goto case 3;
                    } else {
                        t.kind = 2;
                        break;
                    }
                case 4:
                    {
                        t.kind = 3;
                        break;
                    }
                case 5:
                    {
                        t.kind = 4;
                        break;
                    }
                case 6:
                    if (ch == 'i') {
                        AddCh();
                        goto case 7;
                    } else {
                        goto case 0;
                    }
                case 7:
                    if (ch == 'l') {
                        AddCh();
                        goto case 8;
                    } else {
                        goto case 0;
                    }
                case 8:
                    {
                        t.kind = 5;
                        break;
                    }
            }
            t.val = new String(tval, 0, tlen);
            return t;
        }
Exemplo n.º 4
0
 private void Init()
 {
     pos = -1;
     line = 1;
     col = 0;
     charPos = -1;
     oldEols = 0;
     NextCh();
     if (ch == 0xEF) {
         // check optional byte order mark for UTF-8
         NextCh();
         var ch1 = ch;
         NextCh();
         var ch2 = ch;
         if (ch1 != 0xBB || ch2 != 0xBF) {
             throw new FatalError(String.Format("illegal byte order mark: EF {0,2:X} {1,2:X}", ch1, ch2));
         }
         buffer = new UTF8Buffer(buffer);
         col = 0;
         charPos = -1;
         NextCh();
     }
     pt = tokens = new Token(); // first token is a dummy
 }
Exemplo n.º 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;
     }
 }
Exemplo n.º 6
0
 // make sure that peeking starts at the current scan position
 public void ResetPeek()
 {
     pt = tokens;
 }
Exemplo n.º 7
0
        // peek for the next token, ignore pragmas
        public Token Peek()
        {
            do {
                if (pt.next == null) {
                    pt.next = NextToken();
                }
                pt = pt.next;
            } while (pt.kind > maxT); // skip pragmas

            return pt;
        }