freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

編譯原理課程設(shè)計(jì)--c-編譯器詞法分析與語法分析的實(shí)現(xiàn)-文庫吧資料

2025-01-23 01:33本頁面
  

【正文】 mtNode(ExpressionK)。 p = q。 if (q != NULL) { if (t == NULL) t = p = q。(token!=RPAREN_1)) { TreeNode * q。 while ((token!=ENDFILE)amp。(token!=RPAREN_1)) { t = statement()。 if((token!=ENDFILE)amp。// fprintf(listing,\nits sta_l time\n)。}TreeNode * statement_list(void) { TreeNode * t = NULL。 q=p。 if(p != NULL) { if(t == NULL) t = q = p。 q = t。// fprintf(listing,\n+++++%s+++++\n,tokenString)。 TreeNode * q = t。 return t。 if( t != NULL) tchild[1] = statement_list()。amp。 match(LPAREN_1)。// fprintf(listing,\nits time\n)。 return t。 match(RPAREN_2)。 if( token == LPAREN_2){ match(LPAREN_2)。(token == ID)) t = copyString(tokenString)。 } if((t != NULL)amp。 token = getToken()。 default:// fprintf(listing,\n+++++%s+++++\n,tokenString)。 match(INT)。 t = UNull。 break。 t = Null。// fprintf(listing,\n+++++%s+++++\n,tokenString)。}TreeNode * param(void) { TreeNode * t = newParamNode()。 p = q。 if (q != NULL) { if (t == NULL) t = p = q。 match(COM)。amp。// fprintf(listing,\n+++++%s+++++\n,tokenString)。 TreeNode * p = t。 } return t。 t child[0] = param_list()。 break。 switch(token) { case VOID: t = copyString(tokenString)。// fprintf(listing,\nits par time\n)。 }return t。 token = getToken()。 break。 // fprintf(listing,\n+++++%s+++++\n,tokenString)。 if(t!=NULL) tchild[0] = params()。 // fprintf(listing,\n+++++%s+++++\n,tokenString)。 break。 case SEMI: t = VarK。 match(SEMI)。 t child[0] = factor()。 // fprintf(listing,\n+++++%s+++++\n,tokenString)。 t = copyString(tokenString)。 break。 printToken(token,tokenString)。 case EOF: return t。 match(VOID)。 break。 switch(token) { case INT: t = int。// fprintf(listing,\nits dec time\n)。amp。amp。amp。而且這里是個(gè)難點(diǎn)。poundstmt前面的“|”沒了。 | void a?。 | ((int|void) ID (params) poundstmt) // int a[]。 } } } } return t。 else { psibling = q。(token==INT||token==VOID)) { q = declaration()。 while (token!=ENDFILEamp。(token==INT||token==VOID)) { t = declaration()。//此兩處語句用于程序最初的運(yùn)行測試,基本上每一個(gè)函數(shù)里都有,用來測試哪一步有問題 if(token!=ENDFILEamp。// fprintf(listing,\nits dec_li time\n)。 TreeNode * p = NULL。 return t。}、語法分析部分():其中部分代碼因?yàn)閰⒄崭戒汢中內(nèi)容而未修改,所以略去。 printToken(currentToken,tokenString)。 if(currentToken == ID) currentToken = reservedLookup(tokenString)。 if (state == DONE) { tokenString[tokenStringIndex] = 39。amp。 // getchar()。 break。 state = DONE。 } break。 state = DONE。 ungetNextChar()。 } break。 state = DONE。 case INNUM: if (!isdigit(c)) { ungetNextChar()。 state = DONE。) currentToken = NEQ。 case N_ASSIGN: if(c == 39。 state = DONE。) currentToken = EQ。 case E_ASSIGN: if(c == 39。 state = DONE。) currentToken = BET。 case R_ASSIGN: if(c == 39。 state = DONE。) currentToken = LET。 case L_ASSIGN: if(c == 39。 } else state = INCOMMENT。) {//是 出 注釋 save = FALSE。 case INASSIGN_2: if (c == 39。//char停住,否則會(huì)令“/”號(hào)后面的char讀不出來 currentToken = OVER。//是注釋 } else { state = DONE。 save = FALSE。*39。 break。) state = INASSIGN_2。 } else if (c==39。 if (c == EOF) { state = DONE。 } } break。 default: currentToken = ERROR。: currentToken = SEMI。 case 39。: currentToken = RPAREN_1。 case 39。: currentToken = LPAREN_1。 case 39。: currentToken = RPAREN_2。 case 39。: currentToken = LPAREN_2。 case 39。: currentToken = RPAREN_3。 case 39。: currentToken = LPAREN_3。 case 39。: currentToken = TIMES。 case 39。: currentToken = MINUS。 case 39。: currentToken = PLUS。 case 39。: currentToken = EQ。 case 39。: currentToken = COM。 case 39。 currentToken = ENDFILE。 } else { state = DONE。) { save = FALSE。 } else if(c == 39。) { save = FALSE。 } else if(c == 39。) { save = FALSE。 } else if(c == 39。) { save = FALSE。 else if(c == 39。\n39。\t39。 39。//判斷注釋 // fprintf(listing,\nis /\n)。) { save = FALSE。}//測試是否進(jìn)行到此處 else if(c == 39。//是數(shù)字 else if(isalpha(c)) state = INID。 //fprintf(listing,\nScanner: state = %d\n,state)。 while (state !=DONE) { int c = getNextChar()。 StateType state = START。//此處根據(jù)C 的保留字做了一定的修改TokenType getToken(void) { //獨(dú)立完成 int tokenStringIndex = 0。 TokenType tok。typedef enum {//,定義11個(gè)中間狀態(tài),其中INASSIGN分成了L_ASSIGN,R_ASSIGN,而在分析注釋結(jié)束時(shí)添加了INASSIGN_2狀態(tài) E_ASSIGN,N_ASSIGN, START,INASSIGN_1,L_ASSIGN,R_ASSIGN, E_ASSIGN,N_ASSIGN,INASSIGN_2,INCOMMENT, INNUM,INID,DONE} StateType。此次所做程序輸入格式為: +測試代碼文件名輸出地方:cmd命令行輸出內(nèi)容:詞法分析與語法樹程序代碼實(shí)現(xiàn)、獲取輸入部分():此處因?yàn)椴⑽从兴薷?,均參照附錄B所寫,所以略去。 static TreeNode * args(void)。 static TreeNode * term(void)。 static TreeNode * simple_expression(void)。 static TreeNode * expression(void)。 static TreeNode * iteration_stmt(void)。 static TreeNode * expression_stmt(void)。 static TreeNode * statement_list(void)。 static TreeNode * pound_stmt(void)。 static TreeNode * param_list(void)。static TreeNode * declaration(void)。//根據(jù)書上原型做的,但根據(jù)語法規(guī)則所需要的,做過大量修改static TokenType reservedLookup (char * s) {}//根據(jù)書上原型做的,未經(jīng)修改TokenType getToken(void) {}//根據(jù)書上原型做的,但根據(jù)語法規(guī)則所需要的,做過大量修改static void syntaxError(char * message) {}//根據(jù)書上原型做的,未經(jīng)修改static void match(TokenType expected) {}//根據(jù)書上原型做的,未經(jīng)修改//以下的全部為自己所寫static TreeNode * program(void)。 TokenType tok。其中:( +測試代碼文件名),TokenType類型的聲明,與NodeKind等的聲明,詞法的輸出,語法的輸出,以及輸出顯示的布局void printToken( TokenType token, const char * tokenString) {}//根據(jù)
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1