Advertisement
Ladies_Man

complab4 old NextTok

Apr 22nd, 2016
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.20 KB | None | 0 0
  1. public Token nextToken() {
  2.         while (-1 != cur.getCp()) {
  3.  
  4.             while (cur.isWhiteSpace() || cur.isNewLine())
  5.                 cur.nxt();
  6.  
  7.             Position start = cur.copy();    //avoid referencing object (otherwise changing 'cur' also changes 'start')
  8.  
  9.             switch (cur.getCp()) {
  10.                 case '/':
  11.  
  12.                     cur.nxt();
  13.                     if ('*' != cur.getCp()) {
  14.  
  15.                         Position curCopy = cur.copy();
  16.                         compiler.addMessage(true, curCopy, "unexpected character in comment: '" +
  17.                                 program.substring(cur.getIndex(), cur.getIndex() + 1) + "' found, '*' expected");
  18.                     }
  19.  
  20.                     do {
  21.                         do {
  22.                             cur.nxt();
  23.                         } while ('*' != cur.getCp() && -1 != cur.getCp());
  24.                         cur.nxt();
  25.  
  26.                     } while ('/' != cur.getCp() && -1 != cur.getCp());
  27.  
  28.                     if (-1 == cur.getCp())
  29.                         compiler.addMessage(true, cur, "end of program found, '*/' expected");
  30.  
  31.                     cur.nxt();
  32.  
  33.                     Position curCopy = cur.copy();
  34.                     comments.add(new Fragment(start, curCopy));
  35.  
  36.  
  37.                     break;
  38.  
  39.                 default:
  40.                     if (cur.isLetterOrDigit()) {
  41.  
  42.                         //string.matches("^(([a-z]{1}[0-9]{1})*[a-z]?)|(([0-9]{1}[a-z]{1})*[0-9]?)");
  43.                         String tmp = "";
  44.                         String idtName = "";
  45.                         boolean letter = false, digit = false, mark = true;
  46.                         if (cur.isLetter()) digit = true;
  47.                         if (cur.isDigit()) letter = true;
  48.  
  49.                         while (cur.isLetterOrDigit()) {
  50.  
  51.  
  52.                             //cur.nxt();
  53.                             tmp = program.substring(start.getIndex(), cur.getIndex());
  54.                             if (tmp.equals("for") || tmp.equals("if") || tmp.equals("m1")) {
  55.  
  56.                                 KeyToken keytok = new KeyToken(start, cur);
  57.                                 System.out.println(keytok.toString() + tmp);
  58.  
  59.                                 return keytok;
  60.                             }
  61.                            
  62.  
  63.                             if (cur.isLetter()) {
  64.                                 if (digit) {
  65.                                     letter = true;
  66.                                     digit = false;
  67.                                     idtName += (char)(cur.getCp());
  68.                                     mark = true;
  69.                                     //System.out.println("i:" + idtName);
  70.                                     cur.nxt();
  71.                                     continue;
  72.                                 }
  73.                                 if (letter) {
  74.                                     mark = false;
  75.                                     break;
  76.                                     //compiler.addMessage(true, start.copy(), "unexpected character in ident");
  77.                                 }
  78.                             }
  79.                             if (cur.isDigit()) {
  80.                                 if (letter) {
  81.                                     letter = false;
  82.                                     digit = true;
  83.                                     idtName += (char)(cur.getCp());
  84.                                     mark  = true;
  85.                                     //System.out.println("i:" + idtName);
  86.                                     cur.nxt();
  87.                                     continue;
  88.                                 }
  89.                                 if (digit) {
  90.                                     mark = false;
  91.                                     break;
  92.                                     //compiler.addMessage(true, start.copy(), "unexpected character in ident");
  93.                                 }
  94.                             }
  95.  
  96.                             cur.nxt();
  97.  
  98.                         }
  99.  
  100.                         if (mark) {
  101.                             IdentToken tok = new IdentToken(compiler.addName(idtName), start, cur);
  102.                             System.out.println(tok.toString() + idtName);
  103.                             //cur.nxt();
  104.                             return tok;
  105.                         }
  106.                         compiler.addMessage(true, cur.copy(), "unexpected character in ident");
  107.  
  108.                         /*if (tmp.matches("^(([a-z]{1}[0-9]{1})*[a-z]?)|(([0-9]{1}[a-z]{1})*[0-9]?)")) {
  109.  
  110.                             String identName = program.substring(start.getIndex(), cur.getIndex());
  111.  
  112.                             IdentToken tok = new IdentToken(compiler.addName(identName), start, cur);
  113.                             System.out.println(tok.toString() + identName);
  114.  
  115.                             cur.nxt();
  116.  
  117.                             return tok;
  118.                         }*/
  119.  
  120.                         //Position cur2 = cur.copy();
  121.                         //compiler.addMessage(true, start, "unexpected character in ident");
  122.  
  123.                     }
  124.  
  125.                     break;
  126.             }
  127.  
  128.             cur.nxt();
  129.         }
  130.         return null;
  131.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement