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

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

?? syntax.java

?? 編譯原理詞法語法分析器課程設計,包含文檔與代碼.
?? JAVA
字號:
//------------------------------------------------
//類描述: 語法分析類,分析語法,記錄符號表,處理語法錯誤
//文件名: Sytax.java
//------------------------------------------------

package cp;

class Syntax {
  int id = 0;
  String sym= null;
  int oldid = 0;
  String oldsym = null;
  int oldSP = 0;
  String tabFunc[][] = new String[50][2];//函數登記//函數名-返回類型
  String funcParam[][] = new String[50][10];//行參登記//類型-標識.....類型-標識//行存儲格式
  String tabVar[][] = new String[50][4];//變理登記//標識-類型-值-范圍(范圍與函數符號表的下標有關)
  String preStr[] = new String[2];
  int tabFPoint = 1;
  int tabVPoint = 0;
  String  exp = "";
  boolean isFuncEnd = true; //函數分析標志--是否還處在分析未完成狀態
  boolean isOneTime = false;//次數標志
  StringBuffer errInfo = new StringBuffer();
  int oldLine = 0;
  Lex lex = null;
  Syntax(String filepath) {
    lex = new Lex(filepath);
    start();
  }

  //取下一個單詞
  int nextSYM(){
    oldsym = sym;
    oldid = id;
    oldSP = lex.sbPoint;
    id=lex.getSYM();
    sym = lex.sym;
    return id;
  }

  //開始分析
  int start(){
    if(nextSYM()==-1) return -1;
    switch (id) {
      case 0://非法字符
        err(1);
        jumpErrorLine();
        break;
      case 1://定義性語句
         if(pre()==-1) return -1;
         if(nextSYM()==-1) return -1;
         if(sym.equals("(")){//函數定義
           tabFunc[tabFPoint][0] = preStr[1];
           tabFunc[tabFPoint][1] = preStr[0];
           func();
         }
         if(sym.equals("=")) definition();//變量定義
         break;
       case 4:
         if(nextSYM()!=1)
           if(sym.equals("=")) var();
           else{
             err(15);
             jumpErrorLine();
           }
         break;
       default:
         err(15);
         break;
     }
    start();
    return 1;
  }

  //定義性語句頭部處理
  int pre(){
    if(sym.matches(Compiler.DE_WORDS)) preStr[0] = sym;
    else err(2);//非法保留字
    if(nextSYM()==-1) return -1;
    if(sym.matches(Compiler.ID)) preStr[1] = sym;
    else err(5);//標識符錯誤
    return 1;
  }

  //函數處理
  int func() {
    isFuncEnd = false;
    if( recordParameter() == -1 ) return -1;
    if(nextSYM()==-1) return -1;
    if(sym.equals("{")) comStatement();
    if(!sym.equals("}")) err(11);
    else tabFPoint++;
    isFuncEnd = true;
    return 1;
  }

  //形參登記
  int recordParameter(){
    int i = 0;
    while( nextSYM()!=-1 ){
      if( (i % 2)==0 ){
        if(sym.equals(")") ) break;
        if(sym.matches(Compiler.DE_WORDS) ) funcParam[tabFPoint][0] = sym;
        else err(2); //非法保留字
        i++;
      }
      else if(sym.matches(Compiler.ID)){
        funcParam[tabFPoint][1] = sym;
        i++;
      }
      else{
        err(5); //形參標識符錯
        i++;
      }
    }
    if(id == -1) return -1;
    else return 1;
  }

  int callFunc(){
    //調用形式是否正確,待擴充----------------------------------------------------
    return 1;
  }

  //賦值處理
  int var(){
    if(expression()!=-1)
      if(sym.equals(";")) ;
      else{
        err(7);
        return -1;
      }
    return 1;
  }

  //復合語句處理
  int comStatement(){
    while(nextSYM()!=-1&&!sym.equals("}")){
        switch (id) {
          case 0://非法字符
            err(1);
            jumpErrorLine();
            break;
          case 1://定義性語句
            if(pre()==-1) return -1;
            if(nextSYM()==-1) return -1;
            if(sym.equals("(")){//函數定義
              ;//函數嵌套出錯處理, 待擴充
            }
            if(sym.equals("=")) definition();//變量定義
            break;
          case 3://控制語句
            control();
            break;
          case 4://函數調用語句或賦值
            if(nextSYM()==-1) return -1;
            if(sym.equals("(")) callFunc();
            else if(sym.equals("=")) var();
            break;
        }
        if(isOneTime) {
          isOneTime = false;
          break;
        }
      }

    return 1;
  }

  //控制語句處理
  int control(){
     if(sym.equals("if")){
       if (endErr())return -1;
       if (sym.equals("(")) {
         condition();
         if (endErr()) return -1;
         if (sym.equals("{")) {
           comStatement(); //若是大括號 復合語句分析
           if (!sym.equals("}")) err(11);
         }

         else { //否則語句分析
           isOneTime = true;
           Lex.sbPoint = oldSP;
           comStatement();
         }
       }
       if (nextSYM() == -1) return -1;
       if (sym.equals("else")) { //若是”else"
         if (nextSYM() == -1) return -1;
         if (sym.equals("{")) {
           comStatement(); //若是大括號 復合語句分析
           if (!sym.equals("}")) err(11);
         }
         else { //否則語句分析
           isOneTime = true;
           Lex.sbPoint = oldSP;
           comStatement();
         }
       }
       else return 1;
     }
     else if(sym.equals("while")){
       if(endErr()) return -1;
       condition();
       if(endErr()) return -1;
       if(sym.equals("{")){
         comStatement(); //若是大括號 復合語句分析
         if(!sym.equals("}")) err(11);
       }
       else{//否則語句分析
         isOneTime = true;
         Lex.sbPoint = oldSP;
         comStatement();
        }
     }
     else if(sym.equals("else")){
       err(16);
       if (nextSYM() == -1) return -1;
       if (sym.equals("{")) {
         comStatement(); //若是大括號 復合語句分析
         if (!sym.equals("}")) err(11);
       }
       else { //否則語句分析
         isOneTime = true;
         Lex.sbPoint = oldSP;
         comStatement();
       }
       return 1;
     }
     else if(!isFuncEnd){
       if (sym.equals("return")) expression();
         if (!sym.equals(";"))  err(7);
     }
     else{
       err(15); //語句位置不當,非法語句
       jumpErrorLine();
     }
     return 1;
   }

 //是否讀完
  boolean endErr(){
    if(nextSYM()==-1){
      err(7); //某某語句錯+缺少分號
      return true;
    }
    else  return false;
  }

  //定義性語句處理
 int definition(){
   tabVar[tabVPoint][0] = preStr[1];
   tabVar[tabVPoint][1] = preStr[0];
   expression();
   tabVar[tabVPoint][2] = exp;
   if(!isFuncEnd)  tabVar[tabVPoint][3] = ""+tabFPoint;//局部變量
   else  tabVar[tabVPoint][3] = "0";//全局變量
   tabVPoint++;
   if (!sym.equals(";"))  err(7);//缺失;號
   return 1;
  }

  //表達式處理
  int expression(){
    StringBuffer stack = new StringBuffer();
    int sp = 1;
    int i = 0;
    exp = "";
    while( nextSYM()!=-1 && !( sp==1&&sym.equals(")") || sym.equals(";") ) ){
      if(i%2==0){
        if (sym.equals(")")){
          sp--;
        }
        else if (sym.equals("(")){
          stack.append(sym);
          sp++;
        }
        else if ( id==4 || id==5 || id==6 || id==2 ){
          exp += sym;
          i++;
        }
        else  err(4);//無效運算量錯
      }
      else if( sym.matches("[+|*|/]") || sym.equals("-") ){
        exp += sym;
        i++;
      }
    }
    if(exp.equals(""))  err(13);//表達式不能為空
    if(exp.length()>0){
      String expTemp = exp.substring(exp.length() - 1, exp.length());
      if ( expTemp.matches("[+|*|/]") || expTemp.equals("-") )
        err(14); //錯誤的表達式
    }
    if(sp<1) err(9);//缺失(括號
    if(sp>1) err(10);//缺失)括號
    return 1;
  }

  //因子處理
  int factor(String fac){
    //待擴充
    return 1;
  }

  //條件處理
  int condition(){
    expression();
    if(!sym.equals(")"))  err(9);//)號不匹配
    return 1;
    }


  //出錯處理函數,記錄行號,出錯處相關行的字符
  void err(int er) {
    errInfo.append("test.txt"+":"+lex.line+":"+"    "+Compiler.errText[er]+"\n");
  }

  //讀取出錯行
  void jumpErrorLine(){
    oldLine = lex.line;
        while(nextSYM()!=-1 && !sym.equals(";"))
          if(oldLine!=lex.line){
            lex.sbPoint = oldSP;
            break;
          }
  }


 //-------------------------------測試-----------------------------------------------
 public static void main(String args[]) {
   //Syntax syntax = new Syntax("E:\\Java\\work\\N46020117\\cpLab\\classes\\test.txt");//調試后刪除
   Syntax syntax = new Syntax(args[0]);
   System.out.println(syntax.errInfo.toString());
   if(syntax.errInfo.length()==0){
     System.out.println("----------------------Symbol Table---------------------");
     System.out.println();
     syntax.printFunc();
     System.out.println("-------------------------------------------------------");
     syntax.printVar();
     System.out.println("-------------------------------------------------------");
   }
 }

 //函數符號表調試
 void printFunc(){
   System.out.println("FuncID\t"+"Type\t"+"Param");
   for(int i=1; i<tabFPoint&&tabFunc[i][0]!=null; i++){
     for(int j=0; j<2; j++){
       System.out.print(tabFunc[i][j]+"\t");

     }
     for(int k =0; funcParam[i][k]!=null&&k<10; k++)
         System.out.print(funcParam[i][k]+"\t");
     System.out.println();
   }
 }
 //變量表調試
 void printVar(){
   System.out.println("VarID\t"+"Type\t"+"Value\t"+"Scope");
   for(int i=0; i<tabVPoint&&tabVar[i][0]!=null; i++){
     for(int j=0; j<4; j++)
       System.out.print(tabVar[i][j]+"\t");
     System.out.println();
   }

 }

 //-------------------------------------------------------------------------------------

}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美精品乱码久久久久久| 欧美最猛性xxxxx直播| 一区二区三区国产精品| 日韩免费高清电影| 91久久一区二区| 国产精品一区二区x88av| 一片黄亚洲嫩模| 国产精品伦一区二区三级视频| 欧美三级资源在线| 丁香六月久久综合狠狠色| 亚洲成人免费在线| 最新高清无码专区| 国产三级三级三级精品8ⅰ区| 4438x亚洲最大成人网| 欧洲另类一二三四区| 成人污污视频在线观看| 国内欧美视频一区二区 | 亚洲天堂久久久久久久| 日韩欧美在线不卡| 欧美性色黄大片手机版| 99久久婷婷国产| 成人美女在线视频| 国产一区二区三区美女| 看片网站欧美日韩| 美女视频黄免费的久久| 日韩高清一级片| 亚洲成人av资源| 亚洲高清视频在线| 亚洲电影视频在线| 亚洲一区日韩精品中文字幕| 亚洲精品国产一区二区精华液 | 国产精品一品二品| 久久9热精品视频| 久久av资源站| 国产乱子伦视频一区二区三区| 精品亚洲欧美一区| 国产一区二区三区综合| 寂寞少妇一区二区三区| 欧美aaaaaa午夜精品| 日韩av电影免费观看高清完整版| 五月开心婷婷久久| 免费高清在线视频一区·| 日韩经典中文字幕一区| 免费成人在线视频观看| 理论电影国产精品| 国产成人免费xxxxxxxx| 成人短视频下载| 91国模大尺度私拍在线视频| 日本国产一区二区| 欧美男人的天堂一二区| 欧美精品视频www在线观看| 欧美一区二区三级| 久久久久久日产精品| 中文字幕av一区二区三区| 亚洲欧美成人一区二区三区| 亚洲一区日韩精品中文字幕| 男女男精品网站| 粉嫩av一区二区三区粉嫩| 99视频在线精品| 欧美日韩视频一区二区| 欧美一区二区免费| 国产亚洲精品中文字幕| 国产精品美女久久久久aⅴ| 一区二区三区四区不卡在线| 日日欢夜夜爽一区| 成人涩涩免费视频| 欧美在线观看视频一区二区三区| 欧美一区欧美二区| 中文字幕+乱码+中文字幕一区| 亚洲精品精品亚洲| 精品一区二区在线免费观看| 成人福利视频在线看| 欧美精品vⅰdeose4hd| 久久久久久电影| 亚洲国产日韩一区二区| 国产一区二区三区国产| 色女孩综合影院| 精品嫩草影院久久| 亚洲精品欧美二区三区中文字幕| 日韩国产精品久久| 99久久久无码国产精品| 91精品国产欧美日韩| 国产精品免费av| 蜜芽一区二区三区| 色吧成人激情小说| 久久久久久免费网| 天堂影院一区二区| 99国产精品久久久| 精品成人一区二区三区四区| 一区二区三区四区激情| 国产精品一区二区黑丝| 欧美日本一区二区| 国产精品久久国产精麻豆99网站| 日韩成人一区二区三区在线观看| 成人激情校园春色| 久久婷婷综合激情| 日韩av在线免费观看不卡| 91在线视频播放地址| 久久久精品蜜桃| 天天操天天干天天综合网| 波多野结衣中文字幕一区| 日韩精品在线网站| 亚洲成人你懂的| 91麻豆国产精品久久| 久久久亚洲综合| 日韩国产欧美在线播放| 欧洲精品中文字幕| 成人欧美一区二区三区| 国产精品系列在线观看| 538在线一区二区精品国产| 玉米视频成人免费看| jizzjizzjizz欧美| 国产亚洲一区二区在线观看| 美女尤物国产一区| 欧美高清hd18日本| 亚洲自拍偷拍麻豆| 在线视频一区二区三区| 综合色天天鬼久久鬼色| 成人av在线播放网站| 久久九九久久九九| 国产一区二区调教| 久久天堂av综合合色蜜桃网| 美女视频黄 久久| 欧美一级在线视频| 视频一区国产视频| 欧美精品九九99久久| 亚洲 欧美综合在线网络| 欧美性受xxxx黑人xyx| 亚洲一区二区免费视频| 欧美日韩三级一区| 天堂蜜桃91精品| 4438x亚洲最大成人网| 日本中文字幕不卡| 日韩欧美成人一区| 国产在线视频一区二区三区| 精品国产精品网麻豆系列| 奇米777欧美一区二区| 欧美成人一区二区| 国产一区二区毛片| 欧美韩国日本不卡| 99久久精品国产麻豆演员表| 亚洲欧美在线高清| 欧美午夜电影一区| 日韩有码一区二区三区| 欧美成人高清电影在线| 国产乱码精品一区二区三 | 视频在线观看一区| 欧美一级日韩免费不卡| 美国三级日本三级久久99| 久久这里只有精品6| 成人免费视频一区二区| 一区二区三区四区在线免费观看 | 99久免费精品视频在线观看 | 午夜精品国产更新| 精品乱码亚洲一区二区不卡| 国产成人亚洲综合色影视| 亚洲手机成人高清视频| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 亚洲综合激情网| 日韩一区二区三区四区五区六区 | 欧美色综合网站| 毛片基地黄久久久久久天堂| 久久久99精品免费观看不卡| 成人免费看黄yyy456| 亚洲香肠在线观看| 久久香蕉国产线看观看99| 99久久99久久精品免费观看| 亚洲v中文字幕| 久久久精品影视| 欧美私人免费视频| 久久国内精品自在自线400部| 中文字幕高清一区| 911精品产国品一二三产区| 国产露脸91国语对白| 一区二区三区四区中文字幕| 精品国产sm最大网站免费看| 99精品黄色片免费大全| 老司机精品视频导航| 综合久久国产九一剧情麻豆| 欧美一区二区三区电影| 91麻豆国产福利精品| 韩国v欧美v日本v亚洲v| 亚洲国产视频一区| 国产欧美视频一区二区三区| 欧美日韩一二三区| 成人avav影音| 精品中文字幕一区二区| 有码一区二区三区| 国产午夜精品久久久久久免费视| 欧美亚洲禁片免费| 国产99久久久国产精品免费看 | 国产麻豆9l精品三级站| 亚洲国产日产av| 国产精品高清亚洲| 欧美大度的电影原声| 在线国产电影不卡| www.日本不卡| 国产精品综合二区| 日韩电影免费在线观看网站| 亚洲综合免费观看高清完整版在线|