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

正文內(nèi)容

c語言詞法分析器和c-語言語法分析器編譯原理課程設(shè)計(jì)-閱讀頁

2025-03-23 16:34本頁面
  

【正文】 } 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號 2021141461017 22 else //simple_expression中的 var和 call類型的情況 { t = simple_expression(t)。 } 文法 var→ ID | ID [expression] 分析函數(shù) TreeNode * var(void) 說明 創(chuàng)建 IdK節(jié)點(diǎn),判斷先行 token類型是否是中括號,如果是就創(chuàng)建 Arry_ElemK節(jié)點(diǎn),調(diào)用expression()得到子節(jié)點(diǎn) 代碼 TreeNode * var(void) { TreeNode * t = NULL。 TreeNode * q = NULL。 p = copyString(tokenString)。 if(token==LBRACKET) { match(LBRACKET)。 match(RBRACKET)。 tchild[0] = p。 } else { t = p。 } 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號 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é)點(diǎn),然后再一直判斷后面的 Token 是 否為 =、 、 、 =、 ==、 !=,如果是則新建OpK 節(jié) 點(diǎn) , 然 后 令 之 前 的 節(jié) 點(diǎn) 為 其 第 一 個 子 節(jié) 點(diǎn) , 然 后 繼 續(xù) 調(diào) 用additive_expression(TreeNode * k)函數(shù)返回一個節(jié)點(diǎn),作為 OpK節(jié)點(diǎn)的第二個節(jié)點(diǎn) 代碼 TreeNode * simple_expression(TreeNode * k) { TreeNode * t = additive_expression(k)。 if(EQ==token || GT==token || GEQ==token || LT==token || LEQ==token || NEQ==token) { TreeNode * q = newNode(OpK)。 qchild[0] = t。 match(token)。 return t。 } 5 實(shí)驗(yàn)結(jié)果與分析 測試文本 int a[10]。 int x。 k=low。 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號 2021141461017 24 if(k0) { x=1。 } 測試結(jié)果 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號 2021141461017 25 成功實(shí)現(xiàn)語法分析 6 小結(jié) 通過這次實(shí)驗(yàn),我加深了對語法分析的認(rèn)識,掌握了遞歸向下分析方法, 實(shí)現(xiàn) 了 對詞法分析程序所提供的 Token 序列的語法檢查和結(jié)構(gòu)分析。 雖然 EBNF 轉(zhuǎn)換成代碼的過程原理比較簡單, 但是操作起來比較繁瑣。 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號 2021141461017 26 附錄 (源代碼) include include include /* 全局變量 */ int lineno = 0。 int TraceScan = TRUE。 int main(void) { TreeNode * syntaxTree。 /*用于存儲文件名 */ printf(輸入文件名: )。 if (strchr (pgm, 39。) == NULL) { strcat(pgm,.c)。 if (source==NULL) { fprintf(stderr,File %s not found\n,pgm)。 } listing = stdout。 // while (getToken()!=ENDFILE) // { // 。 printTree(syntaxTree)。 return 0。 endif include include include include static TokenType token。 TreeNode * declaration_list(void)。 TreeNode * params(void)。 TreeNode * param(TreeNode * k)。 TreeNode * local_declaration(void)。 TreeNode * statement(void)。 TreeNode * selection_stmt(void)。 TreeNode * return_stmt(void)。 TreeNode * var(void)。 TreeNode * additive_expression(TreeNode * k)。 TreeNode * factor(TreeNode * k)。 TreeNode * args(void)。 fprintf(listing,Syntax error at line %d: %s,lineno,message)。 } static void match(TokenType expected) { if (token == expected) token = getToken()。 printToken(token,tokenString)。 } } TreeNode * parse(void) { TreeNode * t。 t = declaration_list()。 } return t。 TreeNode * p =t。amp。amp。 token = getToken()。 } while(token==INT||token==VOID) 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號 2021141461017 29 { TreeNode * q。 if (q!=NULL) { if (t==NULL) { t=p=q。 p=q。 return t。 TreeNode * p = NULL。 TreeNode * s = NULL。 if (token==INT) { p=newNode(IntK)。 } else if (token==VOID) { p=newNode(VoidK)。 } else 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號 2021141461017 30 { syntaxError(類型錯誤 )。amp。 q = copyString(tokenString)。 if (token==LPAREN) { t = newNode(FunK)。 //p是 t子節(jié)點(diǎn) tchild[1] = q。 tchild[2] = params()。 tchild[3] = pound_stmt()。 a = newNode(Arry_DeclK)。 //p是 t子節(jié)點(diǎn) tchild[1] = a。 s = newNode(ConstK)。 match(NUM)。 achild[1]=s。 match(SEMI)。 tchild[0] = p。 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號 2021141461017 31 match(SEMI)。 } } else { syntaxError()。 } TreeNode * params(void) { TreeNode * t = newNode(ParamsK)。 if (token==VOID) { p = newNode(VoidK)。 if (token==RPAREN) { if(t!=NULL) tchild[0] = p。 } } else if (token==INT) { tchild[0] = param_list(p)。 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號 2021141461017 32 } return t。 TreeNode * p = t。//沒有要傳給 param的 VoidK,所以將 k設(shè)為 NULL while (token==COMMA) { TreeNode * q = NULL。 q = param(k)。 } else { psibling = q。 } } } return t。 TreeNode * p = NULL。 if(k==NULLamp。token==VOID) { p = newNode(VoidK)。 } 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號 2021141461017 33 else if(k==NULLamp。token==INT) { p = newNode(IntK)。 } else if (k!=NULL) { p = k。 if (token==ID) { q = newNode(IdK)。 tchild[1] = q。 } else { syntaxError()。amp。 tchild[2] = newNode(IdK)。 } else { return t。 } return t。 match(LCBRACKET)。 tchild[1] = statement_list()。 return t。 TreeNode * q = NULL。 while(token==INT || token==VOID) { p = newNode(Var_DeclK)。 pchild[0] = q1。 } else if(token==VOID) { TreeNode * q1 = newNode(VoidK)。 match(INT)。amp。 q2 = copyString(tokenString)。 match(ID)。 pchild[3] = q3。 match(RBRACKET)。 } else if(token==SEMI) { match(SEMI)。 } } else { syntaxError()。 else { qsibling = p。 } } } return t。 TreeNode * p = t
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1