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

正文內(nèi)容

c語言詞法分析器和c-語言語法分析器編譯原理課程設(shè)計-wenkub.com

2025-02-27 16:34 本頁面
   

【正文】 TreeNode * p = t。 else { qsibling = p。 } else if(token==SEMI) { match(SEMI)。 pchild[3] = q3。 q2 = copyString(tokenString)。 match(INT)。 pchild[0] = q1。 TreeNode * q = NULL。 tchild[1] = statement_list()。 } return t。 tchild[2] = newNode(IdK)。 } else { syntaxError()。 if (token==ID) { q = newNode(IdK)。token==INT) { p = newNode(IntK)。token==VOID) { p = newNode(VoidK)。 TreeNode * p = NULL。 } else { psibling = q。//沒有要傳給 param的 VoidK,所以將 k設(shè)為 NULL while (token==COMMA) { TreeNode * q = NULL。 四川大學《編譯原理課程設(shè)計》 學號 2021141461017 32 } return t。 if (token==RPAREN) { if(t!=NULL) tchild[0] = p。 } TreeNode * params(void) { TreeNode * t = newNode(ParamsK)。 四川大學《編譯原理課程設(shè)計》 學號 2021141461017 31 match(SEMI)。 match(SEMI)。 match(NUM)。 //p是 t子節(jié)點 tchild[1] = a。 tchild[3] = pound_stmt()。 //p是 t子節(jié)點 tchild[1] = q。 q = copyString(tokenString)。 } else 四川大學《編譯原理課程設(shè)計》 學號 2021141461017 30 { syntaxError(類型錯誤 )。 if (token==INT) { p=newNode(IntK)。 TreeNode * p = NULL。 p=q。 } while(token==INT||token==VOID) 四川大學《編譯原理課程設(shè)計》 學號 2021141461017 29 { TreeNode * q。amp。 TreeNode * p =t。 t = declaration_list()。 printToken(token,tokenString)。 fprintf(listing,Syntax error at line %d: %s,lineno,message)。 TreeNode * factor(TreeNode * k)。 TreeNode * var(void)。 TreeNode * selection_stmt(void)。 TreeNode * local_declaration(void)。 TreeNode * params(void)。 endif include include include include static TokenType token。 printTree(syntaxTree)。 } listing = stdout。) == NULL) { strcat(pgm,.c)。 /*用于存儲文件名 */ printf(輸入文件名: )。 int TraceScan = TRUE。 雖然 EBNF 轉(zhuǎn)換成代碼的過程原理比較簡單, 但是操作起來比較繁瑣。 四川大學《編譯原理課程設(shè)計》 學號 2021141461017 24 if(k0) { x=1。 int x。 return t。 qchild[0] = t。 } 四川大學《編譯原理課程設(shè)計》 學號 2021141461017 23 文法 simpleexpression- additiveexpression{ relop additiveexpression } relop → = | | | = | = = | ! = 分析函數(shù) TreeNode * simple_expression(TreeNode * k) 說明 simple_expression(TreeNode * k)函數(shù)先調(diào)用 additive_expression(TreeNode * k)函數(shù)返回一個節(jié)點,然后再一直判斷后面的 Token 是 否為 =、 、 、 =、 ==、 !=,如果是則新建OpK 節(jié) 點 , 然 后 令 之 前 的 節(jié) 點 為 其 第 一 個 子 節(jié) 點 , 然 后 繼 續(xù) 調(diào) 用additive_expression(TreeNode * k)函數(shù)返回一個節(jié)點,作為 OpK節(jié)點的第二個節(jié)點 代碼 TreeNode * simple_expression(TreeNode * k) { TreeNode * t = additive_expression(k)。 tchild[0] = p。 if(token==LBRACKET) { match(LBRACKET)。 TreeNode * q = NULL。 } 四川大學《編譯原理課程設(shè)計》 學號 2021141461017 22 else //simple_expression中的 var和 call類型的情況 { t = simple_expression(t)。 match(ASSIGN)。 if(t==NULL)//不是以 ID開頭,只能是 simple_expression情況 { t = simple_expression(t)。 四川大學《編譯原理課程設(shè)計》 學號 2021141461017 21 } else { t = expression()。 分析函數(shù) TreeNode * expression_stmt(void) 說明 說明表達式語句有一個可選的且后面跟著分號的表達式。 token = getToken()。 break。 break。如果是 IF 則調(diào)用selection_statement(),如果是 WHILE,則調(diào)用 iteration_stmt(),如果是 RETURN,則調(diào)用 return(),如果是左大括號,則是復合語句類型,如果是 ID、 SEMI、 LPAREN、 NUM,則是表達式語句類型 四川大學《編譯原理課程設(shè)計》 學號 2021141461017 20 代碼 TreeNode * statement(void) { TreeNode * t = NULL。 p = q。 while (IF==token || LCBRACKET==token || ID==token || WHILE==token || RETURN ==token || SEMI==token || LPAREN==token || NUM==token) { TreeNode * q。 q = p。 } else { match(SEMI)。 match(LBRACKET)。 pchild[1] = q2。 } if((p!=NULL)amp。 match(INT)。 TreeNode * p = NULL。 match(RCBRACKET)。 } 文法 poundstmt→ { localdeclaration statementlist} 分析函數(shù) TreeNode * pound_stmt(void) 說明 復合語句,直接調(diào)用 local_declaration()函數(shù)和 statement_list()函數(shù),產(chǎn)生兩個子節(jié)四川大學《編譯原理課程設(shè)計》 學號 2021141461017 17 點 代碼 TreeNode * pound_stmt(void) { TreeNode * t = newNode(CompK)。 match(RBRACKET)。 } if (token==LBRACKETamp。 q = copyString(tokenString)。 match(INT)。 match(VOID)。 TreeNode * q = NULL。 p = q。 match(COMMA)。 param_list(TreeNode * k)函數(shù)使用遞歸向下分析方法直接調(diào)用 param(TreeNode * k)函數(shù),并返回樹節(jié)點 代碼 TreeNode * param_list(TreeNode * k) { TreeNode * t = param(k)。 } } else if (token==INT) { tchild[0] = param_list(p)。 if (token==VOID) { p = newNode(VoidK)。 } } else { syntaxError()。 tchild[0] = p。 achild[1]=s。 s = newNode(ConstK)。 a = newNode(Arry_DeclK)。 tchild[2] = params()。 if (token==LPAREN) { t = newNode(FunK)。amp。 } else if (token==VOID) { p=newNode(VoidK)。 TreeNode * s = NULL。 fundeclatation→ typespecifier ID (params) | poundstmt typespecifier → int | void 分析函數(shù) TreeNode * declaration(void) 說明 首先判斷類型,執(zhí)行 match函數(shù), 匹配類型和 ID,向前探測 1個 token的值確定是函數(shù)聲明還是變量聲明,如果 token為 ’ [’ ,則是數(shù)組變量聲明, 返回節(jié)點 Array_DeclK, token為 ’ ( ’ ,則是函數(shù)聲明, 返回節(jié)點 FunK, token 為 ’ 。 } } } match(ENDFILE)。 q = declaration()。(token!=ENDFILE)) { syntaxError(開始不是類型聲明 )。 //程序以變量聲明開始 while((token!=INT)amp。 } return t。 4 代碼結(jié)構(gòu)分析 文法 program→declarationlist 分析函數(shù) TreeNode * parse(void) 說明 C程序由一個聲明序列組成, parse( void)函數(shù)首先
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1