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

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

?? cpp3.cpp

?? 詞法分析器,根據編譯原理輸入語法在新的TXT文本中輸出相應的詞法分析代碼
?? CPP
字號:
  #include   <iostream>   
  #include   <fstream>//文件流頭文件無.h,以下有說明   
  #include   <string>   
  #include   <string.h>//字符串頭文件   
  #include<stdio.h>//標準輸入輸出   
  #include   <ctype.h>//包含了isalpha等,是字符分類宏   
  using   namespace   std;//在目前的版本中可以支持這樣的,不用.h為后綴了   
    
  char*   ReserveWords[32]   =   {//   保留字數組定義   
      "auto","double","int","struct","break",     
  "else","long","switch","case","enum","register","typedef",   
  "char","extern","return","union","const","float","short",   
  "unsigned","continue","for","signed","void","default","goto",   
  "sizeof","volatile","do","if","while","static"};//,"main"加上后則識別main為保留字   
  char   arrow[]   =   "                     ";   
  /*char   arrow[]   =   "   ----->   ";   
  宏定義便于以后的修改   
  可以定義此項作為結果輸出的分界..如(   ----->   5   
  格式如:dst   <<   strToken   <<   arrow   <<   "1"   <<   enter;   
  */   
  char   enter[]   =   "\r\n";   
  //   讀入字符ch   
  char   GetChar(ifstream&   src)   
  {   
      char   cRet;   
      src.get(cRet);//讀入一個字符.get是ifstream中的一個函數   
      return   cRet;   
  }   
  //   讀入空格   
  char   GetBC(ifstream&   src)//字符型函數   
  {   
      char   cRet;   
      src.get(cRet);//同上   
      while   (cRet   ==   '   ')//空格   
          src.get(cRet);//繼續讀入   
      return   cRet;//返回字符型值   
  }   
  //   連接單詞符號   
  void   Concat(char   *str,   char   c)   
  {   
      size_t   n   =   strlen(str);//得到目前串長度   
      str[n++]   =   c;//作為連接的組合空間   
      str[n]   =   '\0';//結束標志   
  }   
  //   判斷是否為保留字   
  bool   Reserve(const   char*   str)   
  {   
      bool   bRet   =   false;   
      for   (int   i   =   0;   i   <   32;   i++)   
      {   
          if   (strcmp(ReserveWords[i],   str)   ==   0)//是關鍵字的話   
          {   
              bRet   =   true;//true確認   
              break;   
          }   
      }   
      return   bRet;   
  }   
  //   回調字符   
  char   Retract(ifstream&   src)   
  {   
      src.seekg(-1,   ios::cur);/*文件流中的一個函數,兩種類型,兩種參數!   
                                                      seekg(pos_type   _Pos);   
      seekg(off_type   _Off,ios_base::seekdir   _Way);   
                                                      _Off     
  An   offset   to   move   the   read   pointer   relative   to   way.     
      _Pos     
  The   absolute   position   in   which   to   move   the   read   pointer.     
      _Way     
  One   of   the   ios_base::seekdir   enumerations.     
      Return   Value   
          The   stream   (*this).   
                                                      //用于在文件流移動讀指針   
      */   
      return   '\0';   
  }   
  //   分析函數   
  void   Analyzer(ifstream&   src,   ofstream&   dst)   
  {   
      char   ch;   
      char   strToken[1024]   =   "";//初始置空   
      ch   =   GetBC(src);//定義ch字符初始空格   
    
      //   判斷標識符的情況   
      if   (isalpha(ch))   
      {   
          while   (isalpha(ch)   ||   isdigit(ch)   ||   ch   ==   '_')   
          {   
              Concat(strToken,   ch);//判斷是否為單個字符,進行連接   
              ch   =   GetChar(src);   
          }   
          ch   =   Retract(src);//字符回調后重新對字符或字符串進行判斷   
          if   (Reserve(strToken))   
              dst   <<   strToken   <<   arrow   <<   "1"   <<   enter;//輸出流的一種格式   
          else   
              dst   <<   strToken   <<   arrow   <<   "2"   <<   enter;//不為保留字,則為數字,有上面的條件判定   
      }   
      //   判斷數字的情況   
      else   if   (isdigit(ch))   
      {   
          while   (isdigit(ch))//下個字符不是數字,退出運行過程   
          {   
              Concat(strToken,   ch);//進行連接,多位數...   
              ch   =   GetChar(src);//從標準輸入設備讀取一個字符,若文件結束或出錯,則返回-1   
                                          //而getc是從文件中讀入一個字符,若文件結束或出錯,返回EOF   
          }   
          Retract(src);//回調字符   
          dst   <<   strToken   <<   arrow   <<   "3"   <<   enter;//類型3   
      }   //   判斷轉義字符與串的情況   
      else   if   (ch   ==   '\'')//是\'轉義字符   
      {   
          Concat(strToken,   ch);//將其連接   
          ch   =   GetChar(src);   
          while   (ch   !=   '\'')//不是\'字符,繼續連接   
          {   
              Concat(strToken,   ch);   
              ch   =   GetChar(src);   
          }   
          if   (ch   !=   '\'')//界定長度   
              cerr   <<   "String   is   too   long   -   more   than   1024   bytes!"   <<   endl;   
          else   
          {   
              Concat(strToken,   ch);   
              dst   <<   strToken   <<   arrow   <<   "String"   <<   enter;//串   
          }   
      }   
      //   判斷所有沒有歧義的單目運算符   
      else   if   (ch   ==   '+')   
          dst   <<   ch   <<   arrow   <<   "4"   <<   enter;////類型4,以下輸出,意義相同   
      else   if   (ch   ==   '-')   
          dst   <<   ch   <<   arrow   <<   "4"   <<   enter;   
      else   if   (ch   ==   '*')   
          dst   <<   ch   <<   arrow   <<   "4"   <<   enter;   
      else   if   (ch   ==   '/')   
          dst   <<   ch   <<   arrow   <<   "4"   <<   enter;   
      else   if   (ch   ==   '=')   
          dst   <<   ch   <<   arrow   <<   "4"   <<   enter;   
      else   if   (ch   ==   '[')   
          dst   <<   ch   <<   arrow   <<   "5"   <<   enter;   
      else   if   (ch   ==   ']')   
          dst   <<   ch   <<   arrow   <<   "5"   <<   enter;   
      else   if   (ch   ==   ',')   
          dst   <<   ch   <<   arrow   <<   "5"   <<   enter;   
      else   if   (ch   ==   '^')   
          dst   <<   ch   <<   arrow   <<   "4"   <<   enter;   
      else   if   (ch   ==   ';')   
          dst   <<   ch   <<   arrow   <<   "5"   <<   enter;   
      else   if   (ch   ==   '(')   
          dst   <<   ch   <<   arrow   <<   "5"   <<   enter;   
      else   if   (ch   ==   ')')   
          dst   <<   ch   <<   arrow   <<   "5"   <<   enter;   
      else   if   (ch   ==   '{')   
          dst   <<   ch   <<   arrow   <<   "5"   <<   enter;   
      else   if   (ch   ==   '}')   
          dst   <<   ch   <<   arrow   <<   "5"   <<   enter;   
      //   判斷<、<>和<=   
      else   if   (ch   ==   '<')   
      {   
          ch   =   GetChar(src);   
          if   (ch   ==   '>')   
              dst   <<   "<>"   <<   arrow   <<   "4"   <<   enter;   
          else   if   (ch   ==   '=')   
              dst   <<   "<="   <<   arrow   <<   "4"   <<   enter;   
          else   
          {   
              dst   <<   '<'   <<   arrow   <<   "4"   <<   enter;   
              Retract(src);//<=,<>也即!=   
          }   
      }   
      //   判斷>和>=   
      else   if   (ch   ==   '>')   
      {   
          ch   =   GetChar(src);   
          if   (ch   ==   '=')   
              dst   <<   ">="   <<   arrow   <<   "4"   <<   enter;//類型4   
          else   
          {   
              dst   <<   '>'   <<   arrow   <<   "4"   <<   enter;//類型4   
              Retract(src);//>=   
          }   
      }   
      //   判斷.和..   
      else   if   (ch   ==   '.')   
      {   
          ch   =   GetChar(src);   
          if   (ch   ==   '.')   
              dst   <<   ".."   <<   arrow   <<   "2"   <<   enter;//類型2   
          else   
          {   
              dst   <<   '.'   <<   arrow   <<   "2"   <<   enter;//類型2   
              Retract(src);//.和..   
          }   
      }   
      //   判斷:和:=   
      else   if   (ch   ==   ':')   
      {   
          ch   =   GetChar(src);   
          if   (ch   ==   '=')   
              dst   <<   ":="   <<   arrow   <<   "4"   <<   enter;//類型4   
          else   
          {   
              dst   <<   ':'   <<   arrow   <<   "2"   <<   enter;//類型2   
              Retract(src);//:=   逐級判斷,分析為各個獨立個體,所以需要回調分析,保持字符或字符串完整性   
          }   
      }   
  }   
  int   main(int   argc,   char*   argv[])   
  {   
      string   strSrc;   
      if   (argc   ==   1)     //   命令行的支持   
      {   
          cout   <<   "Please   input   source   file\nlike   in.txt...   \n\n";   
          getline(cin,   strSrc);   
  /*   
          if(cin=="in.txt"){   
  cout   <<   "the   source   program   below:\n";   
  while(ch=fopen("in.txt","r")!=NULL)     
    {   
    printf("%c",ch);   
    }   
  cout<<"\n\n"<<"The   result   has   created   to   out.txt\n";   
  }   
  */   
    system("pause");//系統暫停,讓用戶確定   
  }   
      else   
          strSrc   =   argv[1];   
      ifstream   src(strSrc.c_str());     //   打開文件   
      if   (src.fail())   
      {   
          cerr   <<   "\aFailed   to   open   \""   <<   strSrc   <<   "\"!"   <<   endl;//cerr輸出錯誤機制,有聲音提示   
          return   1;   
      }   
      ofstream   dst("out.txt");   
      //   開始解析,整個文件,知道文件尾   
      while   (!src.eof())//   
          Analyzer(src,   dst);   
      //   收尾工作   
      src.close();//關閉輸入文件流   
      dst.close();//關閉輸出文件流   
      cout   <<   "The   result   of   Analyzing   is   written   into   out.txt."   <<   endl;   
      return   0;//整形返回   
  }

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
777欧美精品| 日韩精品自拍偷拍| 成人一区二区三区视频| 经典三级视频一区| 久久69国产一区二区蜜臀| 日韩主播视频在线| 美腿丝袜一区二区三区| 激情成人午夜视频| 国产精品一区二区果冻传媒| 福利电影一区二区三区| 成人在线一区二区三区| 91在线视频观看| 色天使久久综合网天天| 欧美男男青年gay1069videost| 欧美性色aⅴ视频一区日韩精品| 精品视频1区2区3区| 欧美日韩国产免费一区二区| 日韩欧美综合在线| 久久精品视频一区二区三区| 国产精品污网站| 一区二区欧美国产| 免费日韩伦理电影| 国产成人一区在线| 欧美最新大片在线看 | 亚洲成人久久影院| 免费成人av资源网| 国产高清成人在线| 国产成人自拍网| 色88888久久久久久影院按摩| 欧美日韩一卡二卡| 亚洲精品一区二区三区福利| 国产精品第13页| 亚洲成人久久影院| 国产九九视频一区二区三区| 色欧美日韩亚洲| 久久女同性恋中文字幕| 亚洲成人三级小说| 国产乱人伦偷精品视频免下载| 色哟哟国产精品免费观看| 精品久久久久久无| 亚洲综合在线视频| 国产成人综合在线观看| 制服丝袜激情欧洲亚洲| 国产精品福利一区二区三区| 蜜桃av一区二区在线观看| 色综合久久久久综合| 2023国产精品自拍| 午夜视频一区在线观看| av动漫一区二区| 精品国产百合女同互慰| 亚洲成人在线网站| 91视频你懂的| 久久亚洲捆绑美女| 亚洲一区二区三区中文字幕| 久久99精品一区二区三区三区| 成人免费毛片a| 91精品国产综合久久久久久久| 精品99999| 日韩黄色免费电影| 99国产精品久久久| 日韩一级高清毛片| 一区二区三区在线视频免费| 狠狠色丁香婷综合久久| 91在线一区二区| 欧美大胆人体bbbb| 亚洲图片欧美视频| 国产伦精品一区二区三区免费迷 | 精品一区二区三区欧美| 色琪琪一区二区三区亚洲区| 久久午夜老司机| 亚洲一区二区美女| www.成人在线| 久久久久久久久伊人| 三级欧美韩日大片在线看| 99精品国产99久久久久久白柏| 欧美tk—视频vk| 香蕉加勒比综合久久| 91在线视频播放地址| 精品乱人伦小说| 国产精品一区二区无线| 精品日韩欧美一区二区| 亚洲成av人片| 欧美三级电影网站| 中文字幕永久在线不卡| 成人午夜私人影院| 国产三级欧美三级日产三级99| 美女视频一区二区| 欧美一级片免费看| 亚洲国产日韩a在线播放| 欧美日韩一卡二卡三卡| 亚洲综合久久久久| 色狠狠av一区二区三区| 亚洲色图第一区| 91在线精品一区二区三区| 国产欧美一区二区三区网站| 国产69精品一区二区亚洲孕妇| 欧美成人r级一区二区三区| 免费美女久久99| 色综合天天视频在线观看| 一级日本不卡的影视| 欧美性做爰猛烈叫床潮| 五月婷婷综合激情| 欧美一区二区美女| 精品一区二区在线免费观看| www激情久久| 不卡高清视频专区| 亚洲精品高清在线| 7777精品伊人久久久大香线蕉的| 免费视频最近日韩| 26uuu欧美| 99久久久国产精品| 亚洲第一主播视频| 日韩精品一区二区三区中文精品| 免费成人深夜小野草| 国产区在线观看成人精品| 91在线免费播放| 婷婷夜色潮精品综合在线| 精品国产一区二区三区忘忧草| 国产成人在线视频网站| 亚洲激情综合网| 日韩免费观看高清完整版在线观看| 国产精品一区在线观看你懂的| 国产精品三级电影| 91片在线免费观看| 久久99国产精品久久99 | 日韩精品一区二| 色妞www精品视频| 久久99蜜桃精品| 国产精品国产三级国产专播品爱网 | 亚洲图片激情小说| 欧美xxxxxxxxx| 欧美视频你懂的| 成人丝袜18视频在线观看| 日本女人一区二区三区| 亚洲综合另类小说| 国产精品午夜久久| 久久综合色8888| 欧美另类变人与禽xxxxx| 成人av电影在线| 亚洲成人www| 一区二区三区四区乱视频| 337p日本欧洲亚洲大胆精品| 欧美最新大片在线看| 成人一道本在线| 久草这里只有精品视频| 一区二区三区不卡在线观看| 久久久国产一区二区三区四区小说| 欧美日韩在线直播| 色欧美日韩亚洲| 国产精品自拍在线| 国产99久久精品| 日韩高清不卡在线| 亚洲伊人色欲综合网| 中文字幕视频一区二区三区久| 精品少妇一区二区三区在线播放 | 亚洲777理论| 一区二区在线观看视频| 日本一区二区视频在线观看| 欧美久久久久中文字幕| 91麻豆免费观看| 99久久婷婷国产综合精品| 成人app下载| 国产91精品露脸国语对白| 国产成人亚洲综合a∨婷婷图片| 毛片av一区二区| 麻豆专区一区二区三区四区五区| 日日夜夜一区二区| 午夜影院久久久| 日韩电影在线看| 日韩不卡一二三区| 婷婷激情综合网| 男男视频亚洲欧美| 蜜臀av一区二区在线观看| 蜜桃av一区二区在线观看| 国产黄色成人av| 国产91在线观看丝袜| 色综合久久天天综合网| www.欧美.com| 午夜欧美一区二区三区在线播放| 亚洲国产日产av| 91丨九色丨尤物| 91豆麻精品91久久久久久| 色94色欧美sute亚洲线路二| 懂色av一区二区三区蜜臀| 91亚洲国产成人精品一区二三 | 日韩精品视频网站| 日日噜噜夜夜狠狠视频欧美人| 日韩电影在线观看网站| 捆绑紧缚一区二区三区视频 | 麻豆精品视频在线观看| 国产乱子伦一区二区三区国色天香| 国产伦精品一区二区三区视频青涩 | 石原莉奈在线亚洲二区| 国产福利91精品一区二区三区| 成人久久久精品乱码一区二区三区| 91在线云播放| 日韩一区二区在线观看| 久久夜色精品国产欧美乱极品| 中文字幕中文字幕在线一区 | 日本高清无吗v一区|