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

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

?? parser.java

?? 完成編譯器的基本功能,并且有界面,簡單好用
?? JAVA
?? 第 1 頁 / 共 3 頁
字號:
                        }

                        //移動到else里以判斷是否是數組	nextSym();
                  }
                  while (sym == Symbol.comma);
            }
            else {
                  String ss1 = err.report(34); // 格式錯誤,應是左括號
                  ss = ss + ss1 + "\n";
            }

            if (sym == Symbol.rparen) {
                  nextSym();
            }
            else {
                  String ss1 = err.report(33); // 格式錯誤,應是右括號
                  ss = ss + ss1 + "\n";
                  while (!fsys.get(sym)) {
                        nextSym();
                  }
            }
      }

      /**
       * 分析<賦值語句>
       * @param fsys 后跟符號集
       * @param lev 當前層次
       */
      private void parseAssignStatement(SymSet fsys, int lev) {
            int i;
            SymSet nxtlev;

            i = table.position(lex.id);
            if (i > 0) {
                  Table.Item item = table.get(i);
                  if (item.kind == Objekt.variable) {
                        nextSym();
                        if (sym == Symbol.becomes) {
                              nextSym();
                              nxtlev = (SymSet) fsys.clone();
                              parseExpression(nxtlev, lev);
                              // parseExpression將產生一系列指令,但最終結果將會保存在棧頂,執行sto命令完成賦值
                              interp.gen(Fct.STO, lev - item.level, item.adr);
                        }
                        else {
                              if (sym == Symbol.lparen) { // 數組啦...
                                    nextSym();
                                    nxtlev = (SymSet) fsys.clone();
                                    parseExpression(nxtlev, lev);
                                    // parseExpression將產生一系列指令,但最終結果將會保存在棧頂,執行sto命令完成賦值
                                    //在expression最后已經有這個了:nextSym();	//一個)
                                    nextSym(); //一個:=
                                    //后面和var賦值相同,除了最后生成的語句
                                    nextSym();
                                    nxtlev = (SymSet) fsys.clone();
                                    parseExpression(nxtlev, lev);

                                    // parseExpression將產生一系列指令,但最終結果將會保存在棧頂,執行sto命令完成賦值
                                    interp.gen(Fct.STA, lev - item.level,
                                               item.adr);

                              }
                              else {
                                    String ss1 = err.report(13); // 沒有檢測到賦值符號
                                    ss = ss + ss1 + "\n";
                              }
                        }
                  }
                  else {
                        String ss1 = err.report(12); // 賦值語句格式錯誤
                        ss = ss + ss1 + "\n";
                  }
            }
            else {
                  String ss1 = err.report(11); // 變量未找到
                  ss = ss + ss1 + "\n";
            }
      }

      /**
       * 分析<表達式>
       * @param fsys 后跟符號集
       * @param lev 當前層次
       */
      private void parseExpression(SymSet fsys, int lev) {
            Symbol addop;
            SymSet nxtlev;

            // 分析[+|-]<項>
            if (sym == Symbol.plus || sym == Symbol.minus) {
                  addop = sym;
                  nextSym();
                  nxtlev = (SymSet) fsys.clone();
                  nxtlev.set(Symbol.plus);
                  nxtlev.set(Symbol.minus);
                  parseTerm(nxtlev, lev);
                  if (addop == Symbol.minus) {
                        interp.gen(Fct.OPR, 0, 1);
                  }
            }
            else {
                  nxtlev = (SymSet) fsys.clone();
                  nxtlev.set(Symbol.plus);
                  nxtlev.set(Symbol.minus);
                  parseTerm(nxtlev, lev);
            }

            // 分析{<加法運算符><項>}
            while (sym == Symbol.plus || sym == Symbol.minus) {
                  addop = sym;
                  nextSym();
                  nxtlev = (SymSet) fsys.clone();
                  nxtlev.set(Symbol.plus);
                  nxtlev.set(Symbol.minus);
                  parseTerm(nxtlev, lev);
                  if (addop == Symbol.plus) {
                        interp.gen(Fct.OPR, 0, 2);
                  }
                  else {
                        interp.gen(Fct.OPR, 0, 3);
                  }
            }
      }

      /**
       * 分析<項>
       * @param fsys 后跟符號集
       * @param lev 當前層次
       */
      private void parseTerm(SymSet fsys, int lev) {
            Symbol mulop;
            SymSet nxtlev;

            // 分析<因子>
            nxtlev = (SymSet) fsys.clone();
            nxtlev.set(Symbol.times);
            nxtlev.set(Symbol.slash);
            parseFactor(nxtlev, lev);

            // 分析{<乘法運算符><因子>}
            while (sym == Symbol.times || sym == Symbol.slash) {
                  mulop = sym;
                  nextSym();
                  parseFactor(nxtlev, lev);
                  if (mulop == Symbol.times) {
                        interp.gen(Fct.OPR, 0, 4);
                  }
                  else {
                        interp.gen(Fct.OPR, 0, 5);
                  }
            }
      }

      /**
       * 分析<因子>
       * @param fsys 后跟符號集
       * @param lev 當前層次
       */
      private void parseFactor(SymSet fsys, int lev) {
            SymSet nxtlev;

            test(facbegsys, fsys, 24); // 檢測因子的開始符號
            // the original while... is problematic: var1(var2+var3)
            // thanks to macross
            // while(inset(sym, facbegsys))
            if (facbegsys.get(sym)) {
                  if (sym == Symbol.ident) { // 因子為常量或變量
                        int i = table.position(lex.id);
                        if (i > 0) {
                              Table.Item item = table.get(i);
                              switch (item.kind) {
                                    case constant: // 名字為常量
                                          interp.gen(Fct.LIT, 0, item.val);
                                          nextSym();
                                          break;
                                    case variable: // 名字為變量

                                          //為將nextSym()放入次,將nextSym()放在每個case后
                                          nextSym();
                                          if (sym != Symbol.lparen) { //后面不是'(',是變量
                                                interp.gen(Fct.LOD,
                                                    lev - item.level, item.adr);
                                          }
                                          else { //是數組
                                                int ltmp = lev - item.level;
                                                int adrtmp = item.adr;
                                                nextSym();
                                                nxtlev = (SymSet) fsys.clone();
                                                nxtlev.set(Symbol.rparen);
                                                parseExpression(nxtlev, lev);
                                                interp.gen(Fct.LDA, ltmp,
                                                    adrtmp);
                                                nextSym(); //nextSym();					//),=
                                                //TODO interp沒有修改
                                          }

                                          //nextSym();
                                          break;
                                    case procedure: // 名字為過程
                                          String ss1 = err.report(21); // 不能為過程
                                          ss = ss + ss1 + "\n";
                                          nextSym();
                                          break;
                              }
                        }
                        else {
                              String ss1 = err.report(11); // 標識符未聲明
                              ss = ss + ss1 + "\n";
                        }

                  }
                  else if (sym == Symbol.number) { // 因子為數
                        int num = lex.num;
                        if (num > PL0.amax) {
                              String ss1 = err.report(31);
                              ss = ss + ss1 + "\n";
                              num = 0;
                        }
                        interp.gen(Fct.LIT, 0, num);
                        nextSym();
                  }
                  else if (sym == Symbol.lparen) { // 因子為表達式
                        nextSym();
                        nxtlev = (SymSet) fsys.clone();
                        nxtlev.set(Symbol.rparen);
                        parseExpression(nxtlev, lev);
                        if (sym == Symbol.rparen) {
                              nextSym();
                        }
                        else {
                              String ss1 = err.report(22); // 缺少右括號
                              ss = ss + ss1 + "\n";
                        }
                  }
                  else {
                        // 做補救措施
                        test(fsys, facbegsys, 23);
                  }
            }
      }

      /**
       * 分析<條件>
       * @param fsys 后跟符號集
       * @param lev 當前層次
       */
      private void parseCondition(SymSet fsys, int lev) {
            Symbol relop;
            SymSet nxtlev;

            if (sym == Symbol.oddsym) {
                  // 分析 ODD<表達式>
                  nextSym();
                  parseExpression(fsys, lev);
                  interp.gen(Fct.OPR, 0, 6);
            }
            else {
                  // 分析<表達式><關系運算符><表達式>
                  nxtlev = (SymSet) fsys.clone();
                  nxtlev.set(Symbol.eql);
                  nxtlev.set(Symbol.neq);
                  nxtlev.set(Symbol.lss);
                  nxtlev.set(Symbol.leq);
                  nxtlev.set(Symbol.gtr);
                  nxtlev.set(Symbol.geq);
                  parseExpression(nxtlev, lev);
                  if (sym == Symbol.eql || sym == Symbol.neq
                      || sym == Symbol.lss || sym == Symbol.leq
                      || sym == Symbol.gtr || sym == Symbol.geq) {
                        relop = sym;
                        nextSym();
                        parseExpression(fsys, lev);
                        switch (relop) {
                              case eql:
                                    interp.gen(Fct.OPR, 0, 8);
                                    break;
                              case neq:
                                    interp.gen(Fct.OPR, 0, 9);
                                    break;
                              case lss:
                                    interp.gen(Fct.OPR, 0, 10);
                                    break;
                              case geq:
                                    interp.gen(Fct.OPR, 0, 11);
                                    break;
                              case gtr:
                                    interp.gen(Fct.OPR, 0, 12);
                                    break;
                              case leq:
                                    interp.gen(Fct.OPR, 0, 13);
                                    break;
                        }
                  }
                  else {
                        String ss1 = err.report(20);
                        ss = ss + ss1 + "\n";
                  }
            }
      }

      public String ret() {
            return ss;
      }
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久精品一品道一区| 亚洲欧美一区二区三区久本道91| 93久久精品日日躁夜夜躁欧美| 国产真实精品久久二三区| 免费三级欧美电影| 亚洲h在线观看| 亚洲国产成人porn| 午夜日韩在线观看| 亚洲国产欧美另类丝袜| 亚洲一区在线视频| 亚洲色图清纯唯美| 亚洲乱码一区二区三区在线观看| 日韩理论片在线| 亚洲尤物视频在线| 日韩va欧美va亚洲va久久| 蜜臀精品一区二区三区在线观看 | 久久不见久久见免费视频1| 六月丁香综合在线视频| 国产一区欧美日韩| 成人一级黄色片| 色菇凉天天综合网| 欧美理论在线播放| 久久久一区二区| 国产精品电影院| 亚洲成人精品在线观看| 日本在线不卡一区| 国产精品88av| 色婷婷综合久色| 91精品一区二区三区在线观看| 日韩午夜小视频| 中文幕一区二区三区久久蜜桃| 亚洲精选在线视频| 日本在线不卡视频| 国产精品一卡二| 97精品久久久午夜一区二区三区| 日本韩国欧美国产| 欧美久久久久中文字幕| 2022国产精品视频| 亚洲婷婷综合色高清在线| 视频一区二区三区在线| 精品制服美女丁香| 91网站黄www| 欧美一区二区三区影视| 欧美国产精品久久| 午夜久久电影网| 国产一区二区三区四| 色狠狠桃花综合| 欧美不卡一区二区三区四区| 国产精品久久久久久户外露出 | 欧美日韩在线不卡| 久久夜色精品一区| 一区二区在线观看视频 | 日韩一级欧美一级| 中文字幕制服丝袜成人av | 91福利在线导航| 精品久久久久久最新网址| 亚洲欧洲av在线| 日韩国产欧美三级| 91在线视频官网| 欧美一区二区黄| 亚洲婷婷国产精品电影人久久| 日韩高清不卡一区| 白白色 亚洲乱淫| 欧美一区二区福利视频| 亚洲免费高清视频在线| 精品一区二区三区视频| 欧美色综合久久| 国产亚洲综合在线| 青娱乐精品在线视频| 91麻豆123| 精品盗摄一区二区三区| 亚洲国产你懂的| 99免费精品在线| 久久精品视频在线看| 奇米影视在线99精品| 欧美图区在线视频| 综合自拍亚洲综合图不卡区| 国产在线一区观看| 欧美xxxx老人做受| 一区二区三区国产豹纹内裤在线| 精品午夜一区二区三区在线观看| 欧美色视频一区| 一区二区三区色| 白白色 亚洲乱淫| 中文字幕av不卡| 国产乱码字幕精品高清av| 欧美精品电影在线播放| 一区二区三区免费网站| 成人精品视频一区| 国产日本欧洲亚洲| 国产一区二区免费视频| 欧美大胆人体bbbb| 爽好多水快深点欧美视频| 欧亚洲嫩模精品一区三区| 亚洲日本在线视频观看| 99久久精品99国产精品| 国产精品午夜春色av| voyeur盗摄精品| 国产女人水真多18毛片18精品视频| 黄网站免费久久| 久久久亚洲午夜电影| 国产乱码一区二区三区| 精品处破学生在线二十三| 国产在线视频一区二区三区| 精品av久久707| 国产精品伊人色| 中文欧美字幕免费| 97se亚洲国产综合自在线| 最新国产成人在线观看| 99精品国产99久久久久久白柏| 国产精品久久久久久妇女6080| caoporn国产一区二区| 中文字幕亚洲精品在线观看| 91在线视频免费91| 亚洲综合色婷婷| 欧美电影一区二区三区| 人人精品人人爱| 久久人人97超碰com| 成人永久免费视频| 亚洲美女一区二区三区| 欧美影视一区在线| 天堂久久久久va久久久久| 欧美一级高清片在线观看| 精品亚洲成av人在线观看| 国产欧美va欧美不卡在线| 91碰在线视频| 午夜精品免费在线观看| 精品精品国产高清a毛片牛牛| 国产一区二区在线视频| 亚洲欧洲精品成人久久奇米网| 色成年激情久久综合| 婷婷开心久久网| 精品va天堂亚洲国产| 99热这里都是精品| 午夜精品一区在线观看| 久久蜜臀精品av| 91网站黄www| 免费日本视频一区| 日本一区二区电影| 欧美日韩美少妇| 黄一区二区三区| 亚洲精选视频免费看| 欧美一级日韩免费不卡| 国产成人精品免费一区二区| 依依成人精品视频| 精品久久久影院| 色狠狠色狠狠综合| 久久99精品国产麻豆不卡| 亚洲三级在线播放| 精品久久久久久久久久久院品网 | 国产亚洲综合色| 欧美三级电影精品| 国产精品亚洲а∨天堂免在线| 亚洲综合精品自拍| 久久久久亚洲蜜桃| 欧美视频一区二| 国产成人福利片| 亚洲午夜在线电影| 久久五月婷婷丁香社区| 欧美日韩国产首页| 粉嫩绯色av一区二区在线观看| 亚洲精品国产成人久久av盗摄| 日韩欧美的一区| 色爱区综合激月婷婷| 青草国产精品久久久久久| 亚洲国产成人私人影院tom| 在线观看91精品国产麻豆| 高清日韩电视剧大全免费| 五月开心婷婷久久| 国产精品沙发午睡系列990531| 欧洲精品视频在线观看| 盗摄精品av一区二区三区| 天堂影院一区二区| 亚洲欧洲制服丝袜| 日韩一级黄色大片| 欧美在线不卡视频| 成人激情黄色小说| 国产一区二区三区四区五区美女| 日韩精品视频网站| 亚洲一线二线三线视频| 国产精品伦理在线| 久久精品亚洲国产奇米99| 91精品国产欧美日韩| 91久久精品一区二区二区| 成人免费视频caoporn| 美腿丝袜在线亚洲一区| 亚洲第一福利一区| 亚洲视频一二三| 中文字幕在线不卡一区二区三区| 精品国精品自拍自在线| 日韩免费在线观看| 777a∨成人精品桃花网| 91精彩视频在线观看| eeuss影院一区二区三区| 国产一区二区三区日韩| 精品制服美女久久| 另类小说一区二区三区| 午夜电影网一区| 一区二区三区四区不卡在线 | 国产精品亚洲专一区二区三区|