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

正文內(nèi)容

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

2025-02-25 01:33上一頁面

下一頁面
  

【正文】 currentToken = EQ。 currentToken = ENDFILE。) { save = FALSE。) { save = FALSE。 39。//是數(shù)字 else if(isalpha(c)) state = INID。//此處根據(jù)C 的保留字做了一定的修改TokenType getToken(void) { //獨立完成 int tokenStringIndex = 0。 static TreeNode * args(void)。 static TreeNode * iteration_stmt(void)。 static TreeNode * param_list(void)。其中:( +測試代碼文件名),TokenType類型的聲明,與NodeKind等的聲明,詞法的輸出,語法的輸出,以及輸出顯示的布局void printToken( TokenType token, const char * tokenString) {}//根據(jù)書上原型做的,但根據(jù)語法規(guī)則所需要的,做過大量修改TreeNode * newStmtNode(StmtKind kind) {}//根據(jù)書上原型做的,未經(jīng)修改TreeNode * newExpNode(ExpKind kind) {}//根據(jù)書上原型做的,未經(jīng)修改TreeNode * newParamNode(void) {}//自己根據(jù)所需建立TreeNode * newDecNode(void) {}//自己根據(jù)所需建立char * copyString(char * s) {}//根據(jù)書上原型做的,未經(jīng)修改static void printSpaces(void) {}//根據(jù)書上原型做的,未經(jīng)修改void printTree( TreeNode * tree ){}//根據(jù)書上原型做的,但根據(jù)語法規(guī)則所需要的,做過大量修改,詞法的分析typedef enum {START,INASSIGN_1,L_ASSIGN,R_ASSIGN, E_ASSIGN,N_ASSIGN,INASSIGN_2,INCOMMENT, INNUM,INID,DONE} StateType。最后停下編程來從筆頭整理了一陣子語法規(guī)則后,語法分析程序可以分析了,只有個別錯誤了。 15. expression → simpleexpression { = expression }16. var → ID [ [ expression ] ] 17. simpleexpression → additiveexpression { relop additiveexpression }18. relop → = | | | = | == | != 19. additiveexpression → additiveexpression { addop term } 20. addop → + | 21. term → term mulop { factor } 22. mulop → * | / 23. factor → ( expression ) | NUM | ID (args)|[expression]|empty24. args → arglist | empty 25. arglist → expression{ expression } 其中,3條declaration15條expression和23條factor是重點修改內(nèi)容。 | return expression 。此中難點在于對于注釋的分析,因此我將判斷注釋分成幾個步驟??崭裢ǔ1缓雎?,除了他必須分開ID、NUM關(guān)鍵字。編譯原理課程設(shè)計報告課題名稱: C編譯器詞法分析與語法分析的實現(xiàn) 提交文檔學(xué)生姓名: 黃臻旸 提交文檔學(xué)生學(xué)號: 1043041227 同組 成 員 名 單: 無 指導(dǎo) 教 師 姓 名: 金軍 指導(dǎo)教師評閱成績: 指導(dǎo)教師評閱意見: . . 提交報告時間:2013年 6 月 5 日編譯原理課程設(shè)計報告 1課程設(shè)計目標 3分析與設(shè)計 說明所用的方法: 系統(tǒng)總圖: scanner部分: parse部分: 代碼設(shè)計說明 7程序代碼實現(xiàn) 獲取輸入部分(): 詞法分析部分(): 語法分析部分(): 1輸出與結(jié)點的建立() 2TokenType、treeNode與結(jié)點類型的聲明() 34測試結(jié)果 36總結(jié) 3收獲 3不足 36課程設(shè)計目標本次實驗,本C 編譯器主要設(shè)計并且實現(xiàn)了C 編譯器的詞法分析功能與語法分析功能??崭裼煽瞻住Q行符和制表符組成。重復(fù)此步驟,直到DONE為止,輸出token類型。 15. selectionstmt → if ( expression ) statement | if ( expression ) statement else statement 16. iterationstmt → while(expression) statement 17. returnstmt → return 。|expression 。最開始時我便參照著原29條語法規(guī)則來寫的,雖然全程序都沒有報錯,但是分析程序時一直分析不了。 。 static TreeNode * params(void)。static TreeNode * selection_stmt(void)。 static TreeNode * factor(void)。} reservedWords[MAXRESERVED] = {{if,IF},{else,ELSE},{int,INT},{return,RETURN},{void,VOID},{while,WHILE}}。//測試每一步狀態(tài) switch (state) { case START: if(isdigit(c)) state = INNUM。 } else if((c == 39。39。=39。 switch(c) { case EOF: save = FALSE。=39。39。(39。[39。{39。39。 currentToken = ENDFILE。) { // fprintf(listing,\nis zs\n)。/39。 else currentToken = LT。 break。=39。 currentToken = NUM。 case DONE: default: fprintf(listing,Scanner Bug: state = %d\n,state)。 (tokenStringIndex = MAXTOKENLEN)) tokenString[tokenStringIndex++] = (char) c。TreeNode * stmt_program(void) { //program declarationlist TreeNode * t = declaration_list()。amp。 p = q。十分無語。fun_declaration TreeNode * t = newDecNode()。 break。 match(ID)。 match(SEMI)。 if(t!=NULL) tchild[1] = pound_stmt()。// fprintf(listing,\n+++++%s+++++\n,tokenString)。}TreeNode * param_list(void) { TreeNode * t = param()。 q = param()。 switch(token) { case VOID:// fprintf(listing,\n+++++VOID+++++\n)。 break。 match(ID)。// fprintf(listing,\n+++++%s+++++\n,tokenString)。}TreeNode * local_declaration(void) { TreeNode * t = NULL。 else { qsibling=p。amp。 else { psibling = q。 match(SEMI)。 case LPAREN_1: // fprintf(listing,\nits pound_stmt() time\n)。 break。 } return t。 if(t != NULL) tchild[1] = statement()。 match(LPAREN_3)。 match(RETURN)。// fprintf(listing,\n+++++%s+++++\n,tokenString)。}TreeNode * var(void) { TreeNode * t = newExpNode(VarK)。 match(RPAREN_2)。 t = p。 if( p != NULL ) { pchild[0] = t。// fprintf(listing,\n+++++%s+++++\n,tokenString)。}TreeNode * factor(void) {//還有這里是個難點,很糾結(jié),最后去網(wǎng)上借鑒了一下,才把call給去掉 char * varToken。 } match(NUM)。 switch(token) { case LPAREN_3: t = newExpNode(CallK)。 t = copyString(varToken)。 default: syntaxError(unexprected token in facor )。 if(token != RPAREN_3) t = arg_list()。 q = expression()。 case RPAREN_3: fprintf(listing,))。 case COM: fprintf(listing,)。 break。 break。 break。 break。 }}void printTree( TreeNode * tree ){ int i。 break。 printToken(tree,\0)。 default: fprintf(listing,Unknown ExpNode expression kind\n)。 fprintf(listing, %s\n,tree)。 case Null: fprintf(listing,param void\n)。iMAXCHILDREN。 else { for (i=0。 } return t。 tsibling = NULL。 if (t==NULL) fprintf(listing,Out of memory error at line %d\n,lineno)。}、TokenType、treeNode與結(jié)點類型的聲明()typedef enum {//這個聲明是根據(jù)C 的詞法原理來定義的 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// { } 。typedef enum{Var,Array,Null,UNull} ParamKind。 ParamKind param。測試結(jié)果、測試代碼:/*asdasdasd*/int gcd (int u,int v) { if (v==0) return
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1