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

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

?? main.c

?? 參照清華大學《編譯原理》寫的cmm語言詞法分析程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*編譯和運行環境 * gcc4.3.2 * Archlinux-2.6.26 * 使用方法 * 命令行輸入 gcc main.c && ./a.out Test.cmm */#include "cmm.h"int main (int argc, char * argv[]) {      bool nxtlev[symnum];      fname = argv[1];      fin = fopen(fname,"r");		/* 只讀打開文件 */      if (fin) {            init();            getsymdo;            program(0);      }      else{            printf("Can't open file! \n");      }      return 0;}void init() {      int i;      /* 初始化單字符的Token值 */      for (i = 0; i <= 255; i++) {            ssym[i] = nul;      }      ssym['+'] = plus;      ssym['-'] = minus;      ssym['*'] = times;      ssym['/'] = slash;      ssym['('] = lparen;      ssym[')'] = rparen;      ssym['['] = lbracket;      ssym[']'] = rbracket;      ssym['{'] = lbrace;      ssym['}'] = rbrace;      ssym['='] = assign;      ssym[','] = comma;      ssym['.'] = period;      ssym[';'] = semicolon;      /* 設置保留字的名字,按照字母順序,便于折半查找 */      strcpy(&(word[0][0]), "const");      strcpy(&(word[1][0]), "else");      strcpy(&(word[2][0]), "if");      strcpy(&(word[3][0]), "int");      strcpy(&(word[4][0]), "read");      strcpy(&(word[5][0]), "real");      strcpy(&(word[6][0]), "while");      strcpy(&(word[7][0]), "write");      /* 設置保留字對應的symbol */      wsym[0] = constsym;      wsym[1] = elsesym;      wsym[2] = ifsym;      wsym[3] = intsym;      wsym[4] = readsym;      wsym[5] =  realsym;      wsym[6] =  whilesym;      wsym[7] =  writesym;}/* * 漏掉空格,讀取一個字符 * 每次讀一行,存入line緩沖區,line被getsym取空后再讀一行 * 被函數getsym調用 */int getch() {      if ( cc == ll ) {		/* cc == ll說明當前行已經分析完成,或者開始分析第一行 */            if ( feof(fin) ) {	/* 文件結束 */                  printf("program incomplete");                  return -1;            }            ll = 0;            cc = 0;            ch = ' ';            /* 清空上一行余留的字符 */		            memset(line,0,sizeof(line));            while (ch != 10) {	/* 碰到換行符停止循環 */                  if (EOF == fscanf(fin,"%c",&ch)) {		/* 文件結束 */                        return -1;                  }                  line[ll] = ch;                  ll++;            }            linenum++;            //          printline();      }      ch = line[cc];      cc++;      return 0;}/* 詞法分析,獲取下一個Token */int getsym() {      int i, j, k;      while ( ch == 0 || ch == ' ' || ch == 10 || ch == 9) {		/* 忽略空格,換行符和TAB */            getchdo;		/* 忽略后獲取下個字符 */      }      if (ch >= 'a' && ch <= 'z') {			/* 檢測標識符和關鍵字 */            k = 0;            do {                  if (k < al) {                        a[k] = ch;                        k++;                  }                  getchdo;            }while (ch >= 'a' && ch <= 'z' || ch >= '0' && ch <= '9');            a[k] = 0;            strcpy(id,a);            strcpy(value,a);            i = 0;            j = norw - 1;            while (i <= j) {                  k = (i+j)/2;                  if (strcmp(id,word[k]) < 0) {		/* word[k] 表示 word[k][0]的地址 */                        j = k-1;                  }                  else if (strcmp(id,word[k]) > 0) {                        i = k+1;                  }                  else {                        break;                  }            }            if (i > j) {                  sym = ident;		/* 設置當前符號為ident */            }            else {                  sym = wsym[k];		/* 設置當前符號為某保留字的symbol */            }      }      else {            if (ch >= '0' && ch <= '9') {		/* 檢測數字 */                  k = 0;					/* 當前number的位數 */                  num = 0;                  sym = number;                  do {					/* 繼續檢查后面的數字 */                        if (ch == '.') {	/* 處理小數部分 */                              sym = real;                              realvalue = num;                              e = 0.1;                              k++;                              getchdo;                              while (ch >= '0' && ch <= '9') {                                    int ich = ch-'0';                                    realvalue += e*ich;                                    e*=0.1;                                    getchdo;                              }                        }                        else {			/* 處理整數部分 */                              num=10*num+ch-'0';                              k++;                              getchdo;                        }                  } while(ch >= '0' && ch <= '9' || ch == '.');                  k--;                  if( k > nmax){                        printf("number too long!\n");                        exit(0);                  }            }            else {                  if (ch == '=') {		/* 檢測賦值符號和等于號 */                        getchdo;                        if (ch == '=') {                              sym = eql;                              getchdo;                        }                        else {                              sym = assign;                        }                  }                  else {                        if (ch == '<') {	/* 檢測小于號和小于等于號*/                              getchdo;                              if (ch == '=') {                                    sym = leq;                                    getchdo;                              }                              else {                                    sym = lss;                              }                        }                        else {                              if (ch == '>') {	/* 檢測大于號和大于等于號*/                                    getchdo;                                    if (ch == '=') {                                          sym = geq;                                          getchdo;                                    }                                    else {                                          sym = gtr;                                    }                              }                              else {                                    if (ch == '!') {		/* 檢測不等號 */                                          getchdo;                                          if (ch == '=') {                                                sym = neq;                                                getchdo;                                          }                                          else {                                                sym = ssym['!'];                                          }                                    }                                    else {		/* 當前符號不滿足上述條件時,全部按照單字符號處理 */                                          sym = ssym[ch];                                          getchdo;                                    }                              }                        }                  }            }      }      return 0;	}/**  * @brief  打印當前Token的值 *  * @param offset 偏移量  *  * @returns void */void printsym (int offset) {      int i;      if (sym != 0) {            for (i = 0; i< offset; i++) {                  printf(" ");            }            switch (sym) {                  case ident :                         printf("identifier : %s\n",value);break;                  case number :                         printf("number : %d\n",num);break;                  case real :                         printf("real : %f\n",realvalue);break;                  case plus :                         printf("plus : +\n");break;                  case minus :                         printf("minus : -\n");break;                  case times :                         printf("times : *\n");break;                  case slash :                         printf("slash : /\n");break;                  case eql :                         printf("equal : ==\n");break;                  case neq :                         printf("not equal : !=\n");break;                  case lss :                         printf("less than : <\n");break;                  case leq :                         printf("less equal : <=\n");break;                  case gtr :                         printf("greater than : >=\n");break;                  case geq :                         printf("greater equal : >=\n");break;                  case lparen :                         printf("lparen : (\n");break;                  case assign :                         printf("assign : =\n");break;                  case rparen :                         printf("rparen : )\n");break;                  case lbracket :                         printf("lbracket : [\n");break;                  case rbracket :                         printf("rbracket : ]\n");break;                  case lbrace :                         printf("lbrace : {\n");break;                  case rbrace :                         printf("rbrace : }\n");break;                  case comma :                         printf("comma : ,\n");break;                  case semicolon :                         printf("semicolon : ;\n");break;                  case period :                         printf("period : .\n");break;                  case constsym :                         printf("keyword : const\n");break;                  case elsesym :                         printf("keyword : else\n");break;                  case ifsym :                         printf("keyword : if\n");break;                  case intsym :                         printf("keyword : int\n");break;                  case readsym :                         printf("keyword : read\n");break;                  case realsym :                         printf("keyword : real\n");break;                  case whilesym :                         printf("keyword : while\n");break;                  case writesym :                         printf("keyword : write\n");break;	            }      }}/* 打印當前行 */void printline () {      int i;      printf(" %d: ",linenum);      for (i = 0; i < sizeof(line); i++) {            if (line[i] != 32 && line[i] != 10 && line[i] != 9) {                  break;            }      }      for (i;i < sizeof(line) && line[i] != '\n'; i++) {            printf("%c",line[i]);      }      printf("\n");}int program(int lev) {       bool nxtlev[symnum];       printspace(lev);      printf("Program-->\n");      while(sym == constsym) {            constdeclaration(lev+iden);      }      while (sym == intsym || sym == realsym) {            vardeclaration(lev+iden);      }      while (sym == ident || sym == ifsym || sym == whilesym || sym == readsym) {            statement(lev+iden);      }}int statement(int lev) {      printspace(lev);      switch (sym) {            case ident:                  printf("AssignStatement-->\n");                  printspace(lev+iden);                  printf("identifier:%s\n",id);                  getsymdo;                  while (sym == lbrace) {                        printspace(lev+iden);                        printf("lbracket:[\n");                        getsymdo;                        expression(lev+iden);                        if (sym == rbrace) {                              printspace(lev+iden);                              printf("rbracket:]\n");                              getsymdo;                        }                  }                  if (sym == assign) {                        printspace(lev+iden);                        printspace(lev+iden);                        printf("assign operator:=\n");                        getsymdo;                        expression(lev+iden);                        if (sym == semicolon) {                              printspace(lev+iden);                              printf("semicolon:;\n");                              getsymdo;                        }                  }                  break;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美男人的天堂一二区| 国产亚洲欧美激情| 欧美白人最猛性xxxxx69交| 国产三级精品三级在线专区| 亚洲永久精品大片| 国产91精品露脸国语对白| 欧洲国产伦久久久久久久| 久久久久99精品一区| 天堂蜜桃一区二区三区| 成人丝袜高跟foot| 日韩欧美高清在线| 午夜视频在线观看一区二区三区| 成人久久视频在线观看| 日韩一级二级三级| 亚洲一级二级三级| 91片在线免费观看| 欧美国产视频在线| 国内精品伊人久久久久影院对白| 欧美图区在线视频| 亚洲日本青草视频在线怡红院 | 久久久久久久性| 日韩精品久久理论片| 在线观看不卡一区| 日韩毛片在线免费观看| 成人免费观看男女羞羞视频| 精品国产三级电影在线观看| 亚洲国产aⅴ天堂久久| 色老头久久综合| 日韩毛片一二三区| 成人国产精品免费| 国产精品久久福利| 成人激情综合网站| 国产日韩欧美亚洲| 国产在线一区二区综合免费视频| 日韩一区国产二区欧美三区| 亚洲激情在线播放| 色丁香久综合在线久综合在线观看| 久久久国产综合精品女国产盗摄| 久久国产精品露脸对白| 26uuu另类欧美亚洲曰本| 国模一区二区三区白浆| 久久亚洲影视婷婷| 99久久99久久综合| 亚洲免费毛片网站| 一本一道久久a久久精品| 亚洲男人的天堂在线aⅴ视频 | 六月婷婷色综合| 日韩欧美aaaaaa| 激情六月婷婷久久| 国产女主播一区| 91影院在线免费观看| 一区二区三区四区视频精品免费| 欧美撒尿777hd撒尿| 日本va欧美va精品发布| 精品国精品国产| 成人激情电影免费在线观看| 亚洲视频综合在线| 欧美日韩第一区日日骚| 免费不卡在线视频| 国产精品网站一区| 欧美性高清videossexo| 免费观看91视频大全| 国产嫩草影院久久久久| 91精彩视频在线观看| 日韩av一级电影| 中文字幕欧美日本乱码一线二线| 91丨porny丨国产| 亚洲成人自拍偷拍| 久久精品亚洲精品国产欧美| 国产精品毛片久久久久久| 欧美影院精品一区| 国产一二三精品| 亚洲精品成人在线| 欧美电影免费观看完整版| 不卡大黄网站免费看| 视频一区欧美日韩| 亚洲国产岛国毛片在线| 欧美精品在欧美一区二区少妇| 精品系列免费在线观看| 亚洲视频 欧洲视频| 日韩精品一区二区三区视频| 日本韩国一区二区| 国产精品一品二品| 亚洲第一福利视频在线| 国产精品美女www爽爽爽| 欧美精品xxxxbbbb| 成av人片一区二区| 久久aⅴ国产欧美74aaa| 亚洲在线一区二区三区| 国产精品欧美一区喷水| 日韩久久精品一区| 欧美在线观看一区二区| 成人一级视频在线观看| 精品亚洲免费视频| 日本网站在线观看一区二区三区| 亚洲人精品午夜| 久久久三级国产网站| 欧美一区二区日韩一区二区| 在线观看视频91| 成人福利视频在线| 狠狠色丁香久久婷婷综合丁香| 亚洲成av人片一区二区梦乃| 亚洲精品国产一区二区精华液 | 3d动漫精品啪啪| 99久久综合精品| 国产激情视频一区二区在线观看| 日韩国产一区二| 亚洲成精国产精品女| 一区二区三区在线观看动漫| 亚洲精品乱码久久久久久黑人| 国产精品美女视频| 中文字幕av一区二区三区| 久久综合色婷婷| 欧美精品一区二区精品网| 日韩午夜在线播放| 日韩欧美专区在线| 日韩欧美激情在线| 精品成人佐山爱一区二区| 日韩精品专区在线影院重磅| 欧美一区二区三区色| 91精品久久久久久蜜臀| 在线不卡免费av| 91精品蜜臀在线一区尤物| 6080yy午夜一二三区久久| 欧美一级日韩一级| 日韩你懂的在线观看| 精品国产sm最大网站免费看| 2023国产精品| 中文字幕成人网| 日韩毛片精品高清免费| 一区二区高清在线| 日韩在线播放一区二区| 麻豆国产欧美一区二区三区| 黄色日韩三级电影| 丁香婷婷综合五月| 91蜜桃在线观看| 欧美丰满少妇xxxbbb| 欧美大白屁股肥臀xxxxxx| 久久久久久毛片| 亚洲品质自拍视频网站| 亚洲成av人综合在线观看| 看片网站欧美日韩| 成人激情免费电影网址| 欧美亚洲自拍偷拍| 欧美成人精品1314www| 国产日韩欧美精品一区| 亚洲理论在线观看| 日本美女一区二区三区视频| 国产精品白丝av| 色激情天天射综合网| 在线播放欧美女士性生活| 精品国产免费人成在线观看| 国产精品免费人成网站| 亚洲国产一区在线观看| 国产一区二区在线视频| 99精品一区二区| 欧美一二三四区在线| 中文字幕高清不卡| 丝袜a∨在线一区二区三区不卡| 国内久久婷婷综合| 91国偷自产一区二区三区观看| 欧美一区二区日韩| 亚洲欧美另类小说| 久久se精品一区精品二区| 色域天天综合网| 欧美精品一区二区三区在线播放| 亚洲卡通欧美制服中文| 国产一区二区三区免费看 | 成人美女在线观看| 69堂成人精品免费视频| 亚洲私人影院在线观看| 国产在线乱码一区二区三区| 欧美在线你懂的| 国产精品免费av| 久久国产乱子精品免费女| 一本色道久久综合狠狠躁的推荐| 欧美精品一区二区精品网| 亚洲国产另类av| 99久久er热在这里只有精品15| 精品少妇一区二区三区在线视频 | 国产欧美日韩精品在线| 奇米影视一区二区三区| 色94色欧美sute亚洲线路一ni| 国产亚洲人成网站| 免费人成网站在线观看欧美高清| 欧美伊人久久久久久久久影院| 国产精品久久久一本精品| 国产乱淫av一区二区三区| 亚洲va韩国va欧美va| 91首页免费视频| 成人欧美一区二区三区黑人麻豆 | 欧美午夜片在线观看| 国产精品美女久久福利网站| 黄页网站大全一区二区| 欧美成人a∨高清免费观看| 免费亚洲电影在线| 欧美一区二区三区日韩| 视频精品一区二区| 欧美日韩综合在线| 亚洲成人激情社区|