久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

Tiny C 語言編譯程序實驗一 Scanner

時間:2019-05-11 23:48:09下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關的《Tiny C 語言編譯程序實驗一 Scanner》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《Tiny C 語言編譯程序實驗一 Scanner》。

第一篇:Tiny C 語言編譯程序實驗一 Scanner

Tiny C語言編譯程序實驗一 Scanner Tiny C語言編譯程序實驗一 Scanner 要求:填寫getToken()函數,完成詞法分析器scan.c。

約定:

? 僅允許整數類型,不允許實數類型

? 標識符由大小寫英文字母組成,最多52個。其識別按最長匹配原則 ? 整數后緊跟非數字,或標識符后緊跟非字母認為是一個新Token開始 ? 由{ }括起來符號串都認為是注釋部分,該部分在詞法分析時被過濾掉

? 識別出的Token由兩個變量:currentToken,tokenString識別,其中currentToken代表Token的類屬,為一個名為TokenType的枚舉類型,在文件globals.h中定義;tokenString代表Token在程序中出現的形式,即其本來面目。例如整數10的currentToken值為NUM,而tokenString值為‘10’;標識符i的currentToken值為ID,而tokenString值為‘i’

typedef enum

{ ENDFILE,ERROR,IF,THEN,ELSE,END,REPEAT,UNTIL,READ,WRITE,/* 保留字 */

ID,NUM, ASSIGN,EQ,LT,PLUS,MINUS,TIMES,OVER,LPAREN,RPAREN,SEMI :=

= <

+

*

/

()

;

} TokenType;

畫識別符合TINY C語言構詞規則的DFA。然后用直接編碼的方法構造詞法分析器

/****************************************************/ /* File: scan.c

*/ /* The scanner implementation for the TINY compiler

*/ /****************************************************/ #include “globals.h”

#include “util.h”

#include “scan.h”

typedef enum

{ START, INASSIGN, INCOMMENT, INNUM, INID, DONE } StateType;char tokenString[MAXTOKENLEN+1];static int getNextChar(void)

//獲得下一字符

Tiny C語言編譯程序實驗一 Scanner

static struct

{ char* str;

TokenType tok;

} reservedWords[MAXRESERVED]

= {{“if”,IF},{“then”,THEN},{“else”,ELSE},{“end”,END},{“repeat”,REPEAT},{“until”,UNTIL},{“read”,READ},{“write”,WRITE}};

//定義保留字表

static TokenType reservedLookup(char * s)

//進行保留字的匹配 {實現請自己看scan.c文件}

/**********************************************/ /* the primary function of the scanner

*/ /* function getToken returns the next token in source file */ /**********************************************/ TokenType getToken(void){ int tokenStringIndex = 0;

TokenType currentToken;

//保存被識別Token的類屬

StateType state = START;

//初始狀態為START

int save;

//標識當前字符是否保存,如空格,換行符n、TAB符t及注釋中的任何字符

while(state!= DONE)

//DONE狀態表示已識別出一個Token

{ int c = getNextChar();

save = TRUE;

switch(state)

{ case START:

if(isdigit(c))

state = INNUM;

else if(isletter(c))

{ state=DONE;currentToken=END;state=INID;state=INASSIGN;state=INCOMMENT;else if(c==':')else if(c=='{')else

}

break;

case INCOMMENT:

if(c=='}')

Tiny C語言編譯程序實驗一 Scanner

{ state=DONE;currentToken=END;}

break;case INASSIGN: if(c=='=')

{

} else { error();currentToken=ERROR };/* 此處已填寫完整 */ state=DONE;currentToken=ASSIGN;break;

case INNUM:

if(!isdigit(c))

{ /* backup in the input */

ungetNextChar();

save = FALSE;

state = DONE;

currentToken = NUM;

}

break;

case INID:

if(!isletter(c)){ /* backup in the input */ ungetNextChar();save = FALSE;state = DONE;currentToken =ID;

break;

case DONE: //不可能到

default: /* should never happen */

fprintf(listing,“Scanner Bug: state= %dn”,state);

state = DONE;

currentToken = ERROR;

break;

}

if((save)&&(tokenStringIndex <= MAXTOKENLEN))

tokenString[tokenStringIndex++] =(char)c;

if(state == DONE)

Tiny C語言編譯程序實驗一 Scanner

{ tokenString[tokenStringIndex] = '

主站蜘蛛池模板: 人人玩人人添人人澡| 国产色欲av一区二区三区| 国产又色又爽又黄刺激的视频| 狠狠色噜噜狠狠狠狠色综合久| 国产精品自在拍首页视频| 国产精品久久久久久麻豆一区| 久久天天躁狠狠躁夜夜躁2o2o| 国产成人精品午夜视频| 日韩无码专区| 精品无人区麻豆乱码1区2区| 亚 洲 视 频 高 清 无 码| 无码中文字幕av免费放dvd| 国产伦精品一区二区三区免费| 麻豆一精品传媒卡一卡二传媒短视频| 伦理片午夜视频在线观看| 亚洲成av人片在线观看wv| 亚洲a片国产av一区无码| 波多野结衣免费一区视频| 日韩欧美一区二区三区免费观看| 97se色综合一区二区二区| 亚洲国产精品综合久久20| 无码免费午夜福利片在线| 无码乱码av天堂一区二区| 欧美大屁股bbbbxxxx| 久久精品无码一区二区无码| 无码国产69精品久久久久孕妇| 国产黑色丝袜在线观看下| 9l国产精品久久久久尤物| 国产女人喷浆抽搐高潮视频| 超级大爆乳奶牛被调教出奶水| 人人妻人人做人人爽夜欢视频| 天天摸夜夜添狠狠添婷婷| 国产一极内射視颍一| 思思久久精品一本到99热| 极品熟妇大蝴蝶20p| 国产大片黄在线观看私人影院| 免费精品99久久国产综合精品| 日本久久精品一区二区三区| 国产又爽又猛又粗的视频a片| 成人午夜国产内射主播| 亚洲 欧美 综合 在线 精品|