亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? scanner.java

?? 完成編譯器的基本功能,并且有界面,簡單好用
?? JAVA
字號:
package compiler.pl0;

import java.io.BufferedReader;
import java.io.IOException;

/**
 *  詞法分析器負責的工作是從源代碼里面讀取文法符號,這是PL/0編譯器的主要組成部分之一。
 */

public class Scanner {
      /**
       * 剛剛讀入的字符
       */
      private char ch = ' ';

      String ss = "";

      Err err = new Err();

      public int isArray = 0;
      /**
       * 當前讀入的行
       */
      private char[] line;

      /**
       * 當前行的長度(line length)
       */
      public int ll = 0;

      /**
       * 當前字符在當前行中的位置(character counter)
       */
      public int cc = 0;

      /**
       * 當前讀入的符號
       */
      public Symbol sym;

      /**
       * 保留字列表(注意保留字的存放順序)
       */
      private String[] word;

      /**
       * 保留字對應的符號值
       */
      private Symbol[] wsym;

      /**
       * 單字符的符號值
       */
      private Symbol[] ssym;

      // 輸入流
      private BufferedReader in;

      /**
       * 標識符名字(如果當前符號是標識符的話)
       * @see Parser
       * @see Table#enter
       */
      public String id;

      /**
       * 數值大小(如果當前符號是數字的話)
       * @see Parser
       * @see Table#enter
       */
      public int num;

      /**
       * 初始化詞法分析器
       * @param input PL/0 源文件輸入流
       */
      public Scanner(BufferedReader input) {
            in = input;

            // 設置單字符符號
            ssym = new Symbol[256];
            java.util.Arrays.fill(ssym, Symbol.nul);
            ssym['+'] = Symbol.plus;
            ssym['-'] = Symbol.minus;
            ssym['*'] = Symbol.times;
            ssym['/'] = Symbol.slash;
            ssym['('] = Symbol.lparen;
            ssym[')'] = Symbol.rparen;
            ssym['='] = Symbol.eql;
            ssym[','] = Symbol.comma;
            ssym['.'] = Symbol.period;
            ssym['#'] = Symbol.neq;
            ssym[';'] = Symbol.semicolon;

            // 設置保留字名字,按照字母順序,便于折半查找
            word = new String[] {
                "begin", "call", "const", "do", "else", "end", "if",
                "odd", "procedure", "read", "then", "var", "while", "write"};

            // 設置保留字符號
            wsym = new Symbol[PL0.norw];
            wsym[0] = Symbol.beginsym;
            wsym[1] = Symbol.callsym;
            wsym[2] = Symbol.constsym;
            wsym[3] = Symbol.dosym;
            wsym[4] = Symbol.elsesym;
            wsym[5] = Symbol.endsym;
            wsym[6] = Symbol.ifsym;
            wsym[7] = Symbol.oddsym;
            wsym[8] = Symbol.procsym;
            wsym[9] = Symbol.readsym;
            wsym[11] = Symbol.varsym;
            wsym[10] = Symbol.thensym;
            wsym[12] = Symbol.whilesym;
            wsym[13] = Symbol.writesym;
      }

      /**
       * 讀取一個字符,為減少磁盤I/O次數,每次讀取一行
       */
      void getch() {
            String l = "";
            try {
                  if (cc == ll) {
                        while (l.equals("")) {
                              l = in.readLine().toLowerCase() + "\n";
                        }
                        ll = l.length();
                        cc = 0;
                        line = l.toCharArray();
                        System.out.println(PL0.interp.cx + " " + l); //NN interp.cx
                        PL0.fa1.println(PL0.interp.cx + " " + l);//cx:虛擬機代碼指針
                  }
            }
            catch (IOException e) {
                  throw new Error("program imcomplete");
            }
            ch = line[cc];
            cc++;
      }

      /**
       * 詞法分析,獲取一個詞法符號,是詞法分析器的重點
       */
      public void getsym() {
            // Wirth 的 PL/0 編譯器使用一系列的if...else...來處理
            // 但是你的助教認為下面的寫法能夠更加清楚地看出這個函數的處理邏輯
            while (Character.isWhitespace(ch)) { // 跳過所有空白字符
                  getch();
            }
            if (ch >= 'a' && ch <= 'z') {
                  // 關鍵字或者一般標識符
                  matchKeywordOrIdentifier();
            }
            else if (ch >= '0' && ch <= '9') {
                  // 數字
                  matchNumber();
            }
            else {
                  // 操作符
                  matchOperator();
            }

      }

      /**
       * 分析關鍵字或者一般標識符
       */
      void matchKeywordOrIdentifier() {
            int i;
            StringBuilder sb = new StringBuilder(PL0.al); //NN StringBuilder
            // 首先把整個單詞讀出來
            do {
                  sb.append(ch);
                  getch();
            }
            while (ch >= 'a' && ch <= 'z' || ch >= '0' && ch <= '9');
            id = sb.toString();

            // 然后搜索是不是保留字
            i = java.util.Arrays.binarySearch(word, id);

            // 最后形成符號信息
            if (i < 0) {
                  // 一般標識符
                  sym = Symbol.ident;
                  if (ch == '(') {
                        isArray = 1;
                  }
            }
            else {
                  // 關鍵字
                  sym = wsym[i];
            }
      }

      /**
       * 分析數字
       */
      void matchNumber() {
            int k = 0;
            sym = Symbol.number;
            num = 0;
            do {
                  num = 10 * num + Character.digit(ch, 10);
                  k++;
                  getch();
            }
            while (ch >= '0' && ch <= '9'); // 獲取數字的值
            k--;
            if (k > PL0.nmax) {
                  String ss1 = err.report(30);//數字位數越界
                  ss = ss + ss1 + "\n";
                  //System.out.println(ss);
            }
      }

      /**
       * 分析操作符
       */
      void matchOperator() {
            // 請注意這里的寫法跟Wirth的有點不同
            switch (ch) {
                  case ':': // 賦值符號
                        getch();
                        if (ch == '=') {
                              sym = Symbol.becomes;
                              getch();
                        }
                        else {
                              // 不能識別的符號
                              sym = Symbol.nul;
                        }
                        break;
                  case '<': // 小于或者小于等于
                        getch();
                        if (ch == '=') {
                              sym = Symbol.leq;
                              getch();
                        }
                        else {
                              sym = Symbol.lss;
                        }
                        break;
                  case '>': // 大于或者大于等于
                        getch();
                        if (ch == '=') {
                              sym = Symbol.geq;
                              getch();
                        }
                        else {
                              sym = Symbol.gtr;
                        }
                        break;
                  default: // 其他為單字符操作符(如果符號非法則返回nil)
                        sym = ssym[ch];
                        if (sym != Symbol.period) {
                              getch();
                        }
                        break;
            }
      }

      public String ret() {
            return ss;
      }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产成人av| 麻豆中文一区二区| 亚洲图片一区二区| 婷婷六月综合亚洲| 国产精品一区二区三区网站| 成人国产精品免费网站| 在线播放欧美女士性生活| 日韩欧美国产麻豆| 亚洲三级免费电影| 日韩精品一卡二卡三卡四卡无卡| 国内欧美视频一区二区| 色婷婷av一区二区| 国产欧美va欧美不卡在线| 亚洲图片自拍偷拍| jlzzjlzz亚洲女人18| 日韩一本二本av| 亚洲黄色av一区| 国产成人精品一区二区三区网站观看| 99国产精品久| 中文字幕欧美国产| 久草精品在线观看| 欧美一区二区成人6969| 亚洲综合一二三区| 91免费版在线看| 国产精品毛片高清在线完整版| 蜜乳av一区二区三区| 91久久精品午夜一区二区| 中文av字幕一区| 国产伦精品一区二区三区免费| aaa欧美色吧激情视频| 久久精品视频一区二区| 美日韩一区二区| 激情综合网av| 欧美日韩一区精品| 欧美岛国在线观看| 午夜久久久久久| 在线观看国产日韩| 亚洲人xxxx| 欧美影院午夜播放| 一区二区成人在线视频 | zzijzzij亚洲日本少妇熟睡| 777色狠狠一区二区三区| 日韩高清电影一区| 精品美女被调教视频大全网站| 日韩精品每日更新| 久久久久久毛片| 91在线视频播放| 婷婷国产v国产偷v亚洲高清| 在线播放国产精品二区一二区四区 | 中文字幕av一区二区三区高| 成人国产在线观看| 日韩电影一二三区| 中文一区一区三区高中清不卡| 成人深夜视频在线观看| 亚洲精品中文字幕在线观看| 欧美电影在哪看比较好| 国产一二精品视频| 亚洲第一会所有码转帖| 久久久精品免费观看| 欧美日韩第一区日日骚| 成人免费av网站| 国内精品免费在线观看| 亚洲一区精品在线| 国产欧美日韩在线| 欧美一激情一区二区三区| 91蜜桃免费观看视频| 国产精品69毛片高清亚洲| 调教+趴+乳夹+国产+精品| 亚洲天堂a在线| 国产精品三级在线观看| 2020国产精品自拍| 日韩西西人体444www| 欧美日本一区二区三区四区| 成人久久视频在线观看| 国产一区二区三区观看| 免费美女久久99| 婷婷激情综合网| 亚洲一区影音先锋| 天堂蜜桃一区二区三区| 亚洲午夜一区二区| 亚洲成人免费av| 蜜臀av一级做a爰片久久| 美国十次综合导航| 国产成人综合在线| 久久99国产精品久久99果冻传媒| 日韩电影在线观看电影| 久久国产精品区| 国产米奇在线777精品观看| 国产成人av影院| av亚洲精华国产精华精| 色噜噜夜夜夜综合网| 制服丝袜亚洲网站| 欧美大片拔萝卜| 国产精品区一区二区三区| 国产精品三级视频| 亚洲宅男天堂在线观看无病毒| 亚洲一区二区中文在线| 另类调教123区| 91小视频在线| 日韩区在线观看| 亚洲欧美激情视频在线观看一区二区三区| 日韩伦理电影网| 精品一区二区成人精品| 色哟哟一区二区三区| www欧美成人18+| 亚洲国产欧美在线人成| 成人av先锋影音| 国产一区二区三区美女| 亚洲欧洲www| 午夜影院在线观看欧美| 国产传媒一区在线| 亚洲精品一区在线观看| 亚洲影视在线播放| av在线不卡免费看| 国产片一区二区三区| 国产乱码精品一区二区三区忘忧草| 欧美日韩一区二区三区高清| 亚洲久本草在线中文字幕| 成人午夜在线播放| 国产精品三级av在线播放| 国产精品一品二品| 精品国产一区二区三区久久影院| 亚洲精品videosex极品| 91丨九色porny丨蝌蚪| 国产精品成人免费| 99精品国产99久久久久久白柏| 国产精品视频免费看| 成人免费视频免费观看| 欧美激情综合五月色丁香| av在线不卡观看免费观看| 亚洲日本va午夜在线影院| 色一区在线观看| 婷婷开心激情综合| 2020国产精品自拍| 一本色道久久加勒比精品| 亚洲免费观看高清在线观看| 欧美手机在线视频| 极品尤物av久久免费看| 国产精品欧美精品| 欧美日韩精品欧美日韩精品一综合| 日韩和欧美的一区| 日本一区二区三区免费乱视频| 97国产精品videossex| 青青草视频一区| 亚洲天堂2016| 久久―日本道色综合久久| 成人深夜福利app| 蜜桃精品在线观看| 亚洲欧美日韩国产综合| 欧美一级片在线观看| 91网站最新网址| 福利一区在线观看| 麻豆国产精品官网| 亚洲图片欧美色图| 国产精品免费视频一区| 精品国产乱码久久久久久浪潮 | 久久男人中文字幕资源站| 欧美丝袜自拍制服另类| av在线综合网| 成人动漫视频在线| 国产乱码字幕精品高清av| 日本va欧美va精品| 日韩不卡在线观看日韩不卡视频| 亚洲免费观看视频| 亚洲色大成网站www久久九九| 国产日韩av一区| 国产精品国产三级国产a| 久久精品人人做人人综合 | 成人黄色国产精品网站大全在线免费观看 | 国产成人av一区二区| 国产专区综合网| 国产成人在线视频网址| 韩国欧美国产1区| 国产剧情av麻豆香蕉精品| 国产精品一品二品| 成人av高清在线| 欧美亚洲高清一区| 欧美一区欧美二区| 久久久99久久| 夜色激情一区二区| 日韩精品一级二级| 国产91精品久久久久久久网曝门 | 精品国产乱码久久久久久久久| 欧美精品一区二区三区久久久 | 国产精品99久| 91一区一区三区| 日韩精品专区在线影院观看| 国产肉丝袜一区二区| 亚洲综合丝袜美腿| 国产精品主播直播| 欧美日韩一区视频| 欧美国产丝袜视频| 亚洲二区在线观看| caoporen国产精品视频| 欧美精品久久久久久久多人混战| 欧美经典一区二区三区| 日韩av中文字幕一区二区| 91免费看视频| 国产欧美精品区一区二区三区 | 亚洲欧美日韩国产手机在线|