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

正文內(nèi)容

編譯原理課程設(shè)計--c-編譯器詞法分析與語法分析的實現(xiàn)-wenkub.com

2025-05-31 12:19 本頁面
   

【正文】 break。 case FunK: fprintf(listing,Fun_dec: )。 fprintf(listing, %s\n,tree)。 break。 break。 } } else if (treenodekind==ExpK) { switch (tree) { case OpK: fprintf(listing,Op: )。 case ExpressionK: fprintf(listing,Expression:\n)。 case CompoundK: fprintf(listing,Compound:\n)。 if (treenodekind==StmtK) { switch (tree) { case IterationK: fprintf(listing,While:\n)。 default: fprintf(listing,Unknown token: %d, token)。 case ID: fprintf(listing,ID, name= %s, tokenString)。 case ENDFILE: fprintf(listing,EOF)。 case PLUS: fprintf(listing,+)。 case TIMES: fprintf(listing,*)。 case LT: fprintf(listing,)。 case BT: fprintf(listing,)。 case EQ: fprintf(listing,==)。 case LPAREN_1: fprintf(listing,{)。)。 break。 break。 break。 p = q。 match(COM)。 TreeNode * p = t。 // fprintf(listing,\n+++++%s+++++\n,tokenString)。 break。 } break。 break。 match(LPAREN_2)。 t child[0] = args()。 match(ID)。 t = expression()。 (token==NUM) ) { t = atoi(tokenString)。 // fprintf(listing,\n+++++%s+++++\n,tokenString)。 } } return t。 p = token。 // fprintf(listing,\nits term time\n)。 match(token)。 while( (token == PLUS) || (token == MINUS) ) { TreeNode * p = newExpNode(OpK)。 } return t。 p = token。 // fprintf(listing,\nits simp time\n)。 if (t != NULL) t child[0] = expression()。 if(t != NULL) t = copyString(tokenString)。 } } return t。 p = token。 // fprintf(listing,\nits exp time\n)。 match(SEMI)。 // fprintf(listing,\n+++++%s+++++\n,tokenString)。 if(t != NULL) tchild[1] = statement()。 match(WHILE)。 } return t。 match(RPAREN_3)。 // fprintf(listing,\n+++++%s+++++\n,tokenString)。 break。 break。 t = iteration_stmt()。 case IF: // fprintf(listing,\nits selection_stmt() time\n)。 break。 // fprintf(listing,\nits sta time\n)。 }else if( t != NULL) { t child[0] = expression()。 } TreeNode * expression_stmt(void) { TreeNode * t = newStmtNode(ExpressionK)。 if (q != NULL) { if (t == NULL) t = p = q。 while ((token!=ENDFILE)amp。 if((token!=ENDFILE)amp。 } TreeNode * statement_list(void) { TreeNode * t = NULL。 if(p != NULL) { if(t == NULL) t = q = p。 // fprintf(listing,\n+++++%s+++++\n,tokenString)。 return t。amp。 // fprintf(listing,\nits time\n)。 match(RPAREN_2)。(token == ID)) t = copyString(tokenString)。 token = getToken()。 match(INT)。 break。 // fprintf(listing,\n+++++%s+++++\n,tokenString)。 p = q。 match(COM)。 // fprintf(listing,\n+++++%s+++++\n,tokenString)。 } return t。 break。 // fprintf(listing,\nits par time\n)。 token = getToken()。 // fprintf(listing,\n+++++%s+++++\n,tokenString)。 // fprintf(listing,\n+++++%s+++++\n,tokenString)。 case SEMI: t = VarK。 t child[0] = factor()。 t = copyString(tokenString)。 printToken(token,tokenString)。 match(VOID)。 switch(token) { case INT: t = int。amp。amp。 poundstmt 前面的“ |”沒了。 | ((int|void) ID (params) poundstmt) // int a[]。 else { psibling = q。 while (token!=ENDFILEamp。//此兩處語句用于程序最初的運行測試,基本上每一個函數(shù)里都有,用來測試哪一步有問題 if(token!=ENDFILEamp。 TreeNode * p = NULL。 } 、語法分析部分(在 ): 其中部 分代碼因為參照附錄 B 中內(nèi)容而未修改,所以略去。 if(currentToken == ID) currentToken = reservedLookup(tokenString)。amp。 break。 } break。 ungetNextChar()。 state = DONE。 state = DONE。 case N_ASSIGN: if(c == 39。) currentToken = EQ。 state = DONE。 case R_ASSIGN: if(c == 39。) currentToken = LET。 } else state = INCOMMENT。 case INASSIGN_2: if (c == 39。//是注釋 } else { state = DONE。*39。) state = INASSIGN_2。 if (c == EOF) { state = DONE。 default: currentToken = ERROR。 case 39。 case 39。 case 39。 case 39。 case 39。 case 39。 case 39。 case 39。 case 39。 case 39。 case 39。 case 39。 } else { state = DONE。 } else if(c == 39。 } else if(c == 39。 } else if(c == 39。 else if(c == 39。\t39。//判斷注釋 // fprintf(listing,\nis /\n)。}//測試是否進行到此處 else if(c == 39。 //fprintf(listing,\nScanner: state = %d\n,state)。 StateType state = START。TokenType tok。 中所用函數(shù)的聲明 此次所做程序輸入格式為: cmd 命令行下執(zhí)行 +測試代碼文件名 輸出地方: cmd 命令行 輸出內(nèi)容: 詞法分析與語法樹 程序代碼實現(xiàn) 、獲取輸入部分(在 ): 此處因為并未有所修改,均參照附錄 B 所寫,所以略去。 static TreeNode * term(void)。 static TreeNode * expression(void)。 static TreeNode * expression_stmt(void)。 static TreeNode * pound_stmt(void)。 static TreeNode * declaration(void)。 TokenType tok。 。 、代碼設(shè)計說明 程序 globals files 包里面分為 Source Files 文件夾和 Header Files 文件夾 Source Files 文件夾中包含: 。若是按照書上原來的 29 條語法規(guī)則來寫,就會發(fā)現(xiàn)在樹的生成方法與邏輯上會很難實現(xiàn)。 分析從 program 開始,逐層向下擴展。 12. selectionstmt → if ( expression ) statement { else statement } 13. iterationstmt → while(expression) statement 14. returnstmt → return 。根據(jù) C 語言的規(guī)則,我們可以得出 C 語言語法的 EBNF。 | 。在開始時一直未注意停滯與當(dāng)前字符,因此總是讀不出“ /v*”中的“ v”,在調(diào)試多次后才得以解決。 初始狀態(tài)設(shè)置為 START,當(dāng)需要得到下一個 token 時,取得此 token的第一個字符,并且按照 DFA 與對此字符的類型的分析,轉(zhuǎn)換狀態(tài)。注釋不能嵌套。 空格由空白、換行符和制表符組成。 在此程序中,我將記號分成了以下類型: typedef enum {//按照書上附錄 B 程序布局,放在 ENDFILE,ERROR, IF,ELSE,INT,RETURN,VOID,WHILE, ID,NUM, ASSIGN,PLUS,MINUS,TIMES,OVER,LT,LET,BT,BET,EQ,NEQ, // = + * / = = == != LPAREN_1,RPAREN_1,SEMI,COM,LPAREN_2,RPAREN_2,LPAREN_3,RPAREN_3,LIN,RIN // { } 。 編譯原理課程設(shè)計報告 課題名稱: C編譯器詞法分析與語法分析的實現(xiàn)
點擊復(fù)制文檔內(nèi)容
畢業(yè)設(shè)計相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1