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

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

?? scan.c

?? C語言高級編程及實例部析 by Johnzhang0921
?? C
字號:
/****************************************************/
/* 文件:scan.c                                     */
/* TINY掃描程序的執行代碼							*/
/****************************************************/

#include "globals.h"
#include "util.h"
#include "scan.h"

/* 掃描程序有限自動機的狀態 */
typedef enum
   { START,INASSIGN,INCOMMENT,INNUM,INID,DONE }
   StateType;

/* 用來保存當前保留字或者標識符 */
char tokenString[MAXTOKENLEN+1];

/* BUFLEN定義源文件行中的最大字符數 */
#define BUFLEN 256

static char lineBuf[BUFLEN]; /* 保留當前行 */
static int linepos = 0; /* 保存LineBuf中的當前位置 */
static int bufsize = 0; /* 當前緩存中保存的字符數 */
static int EOF_flag = FALSE; /* 當遇到EOF(文件結束符)調整ungetNextChar的操作 */

/* getNextCharlineBuf取得下一個非空格的字符。如果讀完了緩存中的全部字符,
   就把新的一行讀入緩存 */
static int getNextChar(void)
{ if (!(linepos < bufsize))
  { lineno++;
    if (fgets(lineBuf,BUFLEN-1,source))
    { if (EchoSource) fprintf(listing,"%4d: %s",lineno,lineBuf);
      bufsize = strlen(lineBuf);
      linepos = 0;
      return lineBuf[linepos++];
    }
    else
    { EOF_flag = TRUE;
      return EOF;
    }
  }
  else return lineBuf[linepos++];
}

/* ungetNextChar把一個字符退回到lineBuf緩存中 */
static void ungetNextChar(void)
{ if (!EOF_flag) linepos-- ;}

/* 保留字表*/
static struct
    { char* str;
      TokenType tok;
    } reservedWords[MAXRESERVED]
   = {{"if",IF},{"then",THEN},{"else",ELSE},{"end",END},
      {"repeat",REPEAT},{"until",UNTIL},{"read",READ},
      {"write",WRITE}};

/* T I N Y對保留字的識別是通過首先將它們看作是標識符,
 * 之后再在保留字表中查找它們來完成的。
 * 我們的掃描程序使用了一種非常簡便的方法—線性搜索,
 * 即按順序從開頭到結尾搜索表格。這對于小型表格不成問題。
 */

static TokenType reservedLookup (char * s)
{ int i;
  for (i=0;i<MAXRESERVED;i++)
    if (!strcmp(s,reservedWords[i].str))
      return reservedWords[i].tok;
  return ID;
}

/****************************************/
/* 分析程序的主函數  */
/****************************************/
/* 耗輸入字符并根據圖8.2.1
 * 中的DFA返回下一個被識別的記號
 */
TokenType getToken(void)
{  /* tokenString的引索 */
   int tokenStringIndex = 0;
   /* 保存當前要返回的記號 */
   TokenType currentToken;
   /* 當前的狀態-總是從START開始 */
   StateType state = START;
   /* 是否保存到tokenString的標記 */
   int save;
   while (state != DONE)
   { int c = getNextChar();
     save = TRUE;
     switch (state)
     { case START:
         if (isdigit(c))
           state = INNUM;
         else if (isalpha(c))
           state = INID;
         else if (c == ':')
           state = INASSIGN;
         else if ((c == ' ') || (c == '\t') || (c == '\n'))
           save = FALSE;
         else if (c == '{')
         { save = FALSE;
           state = INCOMMENT;
         }
         else
         { state = DONE;
           switch (c)
           { case EOF:
               save = FALSE;
               currentToken = ENDFILE;
               break;
             case '=':
               currentToken = EQ;
               break;
             case '<':
               currentToken = LT;
               break;
             case '+':
               currentToken = PLUS;
               break;
             case '-':
               currentToken = MINUS;
               break;
             case '*':
               currentToken = TIMES;
               break;
             case '/':
               currentToken = OVER;
               break;
             case '(':
               currentToken = LPAREN;
               break;
             case ')':
               currentToken = RPAREN;
               break;
             case ';':
               currentToken = SEMI;
               break;
             default:
               currentToken = ERROR;
               break;
           }
         }
         break;
       case INCOMMENT:
         save = FALSE;
         if (c == EOF)
         { state = DONE;
           currentToken = ENDFILE;
         }
         else if (c == '}') state = START;
         break;
       case INASSIGN:
         state = DONE;
         if (c == '=')
           currentToken = ASSIGN;
         else
		   /*退回到緩存中 */
           ungetNextChar();
           save = FALSE;
           currentToken = ERROR;
         }
         break;
       case INNUM:
         if (!isdigit(c))
         { /* 退回到緩存中 */
           ungetNextChar();
           save = FALSE;
           state = DONE;
           currentToken = NUM;
         }
         break;
       case INID:
         if (!isalpha(c))
         { /* 退回到緩存中 */
           ungetNextChar();
           save = FALSE;
           state = DONE;
           currentToken = ID;
         }
         break;
       case DONE:
       default: 
         fprintf(listing,"Scanner Bug: state= %d\n",state);
         state = DONE;
         currentToken = ERROR;
         break;
     }
     if ((save) && (tokenStringIndex <= MAXTOKENLEN))
       tokenString[tokenStringIndex++] = (char) c;
     if (state == DONE)
     { tokenString[tokenStringIndex] = '\0';
       if (currentToken == ID)
         currentToken = reservedLookup(tokenString);
     }
   }
   if (TraceScan) {
     fprintf(listing,"\t%d: ",lineno);
     printToken(currentToken,tokenString);
   }
   return currentToken;
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人精品aa毛片| 欧美午夜一区二区三区免费大片| √…a在线天堂一区| 91精品国产aⅴ一区二区| 色av成人天堂桃色av| 久久精品视频一区二区| 久久久青草青青国产亚洲免观| 91亚洲精品一区二区乱码| 国产原创一区二区| 性做久久久久久免费观看欧美| 国产精品电影一区二区三区| 国产日韩欧美电影| 国产欧美精品区一区二区三区 | 亚洲一卡二卡三卡四卡无卡久久| 国产精品国产三级国产aⅴ入口 | 欧美xfplay| 夜夜嗨av一区二区三区中文字幕 | 国产成人在线免费观看| 美腿丝袜在线亚洲一区| 日韩av二区在线播放| 日韩激情一区二区| 男人的j进女人的j一区| 麻豆视频观看网址久久| 久久www免费人成看片高清| 国产自产2019最新不卡| 国产精品主播直播| 成人中文字幕合集| 99久久免费精品| 色婷婷狠狠综合| 欧美日免费三级在线| 欧美一区永久视频免费观看| 亚洲国产精品精华液网站| 国产精品久久久久久久久免费桃花 | 日本中文字幕不卡| 精品一区二区精品| 国产一区二区女| www.爱久久.com| 日本道免费精品一区二区三区| 欧美性色黄大片| 日韩欧美国产电影| 国产精品乱人伦| 亚洲成人免费观看| 狠狠狠色丁香婷婷综合激情| 成人免费黄色大片| 欧美日韩国产精品成人| 久久精品视频网| 午夜久久久影院| 国产成人精品aa毛片| 在线视频欧美区| 久久女同互慰一区二区三区| 一区二区三区视频在线看| 久久成人免费网站| 91在线你懂得| 欧美一二三区在线| 1000部国产精品成人观看| 美女一区二区视频| 色综合久久66| 久久久噜噜噜久久人人看| 亚洲午夜精品17c| 国产精品亚洲人在线观看| 欧美图区在线视频| 中文字幕在线播放不卡一区| 久久精品99国产国产精| 免费成人在线观看| 日本欧美加勒比视频| 国产一区视频在线看| 91色|porny| 亚洲精品一区二区三区福利| 亚洲综合一区在线| 成人综合激情网| 2023国产精品| 日本不卡1234视频| 在线视频你懂得一区| 国产精品色哟哟| 狠狠色狠狠色合久久伊人| 欧美日韩国产片| 亚洲欧美综合在线精品| 激情五月婷婷综合网| 欧美日韩国产不卡| 亚洲免费视频成人| 99久久99久久精品国产片果冻| 久久蜜桃香蕉精品一区二区三区| 秋霞午夜av一区二区三区| 欧美喷潮久久久xxxxx| 亚洲中国最大av网站| 欧美一区二区视频网站| 一片黄亚洲嫩模| 国精产品一区一区三区mba桃花| 欧美三区在线观看| 一区二区欧美视频| 成人手机在线视频| 久久精品一区二区三区不卡| 久久疯狂做爰流白浆xx| 欧美乱妇23p| 亚洲成人av电影| 欧美日韩一级二级| 亚洲一区在线观看网站| 91免费在线看| 亚洲免费看黄网站| 欧美在线免费观看亚洲| 亚洲一区二区视频在线观看| 欧美日韩国产一级二级| 琪琪一区二区三区| 欧美大白屁股肥臀xxxxxx| 蜜臀av国产精品久久久久| 精品乱码亚洲一区二区不卡| 亚洲无线码一区二区三区| 午夜电影网亚洲视频| 日本高清不卡aⅴ免费网站| 日韩美女视频一区二区| 99国产精品99久久久久久| 亚洲欧美在线视频| 91成人免费电影| 午夜激情综合网| 26uuu亚洲综合色欧美| 成人午夜电影久久影院| 一区二区三区在线观看视频| 精品日韩99亚洲| 成人黄色电影在线| 国产精品午夜久久| 色综合久久久网| 天堂va蜜桃一区二区三区漫画版| 欧美人牲a欧美精品| 久久av中文字幕片| 中文字幕视频一区二区三区久| 91久久精品午夜一区二区| 青草国产精品久久久久久| 国产日韩欧美精品一区| 色天天综合色天天久久| 麻豆视频观看网址久久| 亚洲欧洲无码一区二区三区| 欧美人体做爰大胆视频| 色悠悠亚洲一区二区| 日韩成人dvd| 亚洲欧洲精品一区二区精品久久久 | 欧美大片在线观看一区| 日日夜夜精品免费视频| 五月天亚洲婷婷| 欧美成人一级视频| 91麻豆文化传媒在线观看| 午夜电影久久久| 亚洲视频 欧洲视频| 日韩美女视频在线| 欧美在线色视频| 成人教育av在线| 蜜桃久久av一区| 亚洲综合一二区| 中文字幕在线不卡一区| 精品国产区一区| 91精品国产麻豆| 在线国产亚洲欧美| 岛国一区二区三区| 精品一区精品二区高清| 亚洲第一成人在线| 中文字幕一区二区三区色视频 | 成人av小说网| 九九热在线视频观看这里只有精品| 亚洲女同ⅹxx女同tv| 九九国产精品视频| 国产精品久久久久久亚洲毛片| 欧美一区二区精品久久911| 91豆麻精品91久久久久久| 99久久精品久久久久久清纯| 国产精品一二三四| 黄页视频在线91| 久久国产乱子精品免费女| 午夜不卡av在线| 无吗不卡中文字幕| 亚洲一区免费视频| 一区二区三区成人| 亚洲免费观看在线视频| 亚洲色图.com| 最新久久zyz资源站| 欧美韩国日本综合| 国产精品素人视频| 中文字幕精品一区二区精品绿巨人 | 一区二区三区日韩精品| 亚洲欧洲制服丝袜| 日韩欧美中文一区| 在线看一区二区| 91美女蜜桃在线| 在线观看91视频| 欧美吻胸吃奶大尺度电影| 色又黄又爽网站www久久| 日韩中文欧美在线| 婷婷国产在线综合| 精品一区二区免费看| 欧美日韩国产色站一区二区三区| 99久久国产免费看| 色综合久久综合网97色综合| 粉嫩久久99精品久久久久久夜| 国产成人av自拍| 91免费观看在线| 欧美日韩亚洲不卡| 日韩一区二区三区免费看 | 精品一区二区三区免费| 国产在线视频一区二区| 成人美女视频在线观看| 日本乱人伦一区| 国产精品理伦片|