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

正文內(nèi)容

c語(yǔ)言詞法分析器和c-語(yǔ)言語(yǔ)法分析器編譯原理課程設(shè)計(jì)-文庫(kù)吧在線(xiàn)文庫(kù)

  

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