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

正文內(nèi)容

c語言詞法分析器和c-語言語法分析器編譯原理課程設計(完整版)

2025-04-20 16:34上一頁面

下一頁面
  

【正文】 ,向前探測 1個 token的值確定是函數(shù)聲明還是變量聲明,如果 token為 ’ [’ ,則是數(shù)組變量聲明, 返回節(jié)點 Array_DeclK, token為 ’ ( ’ ,則是函數(shù)聲明, 返回節(jié)點 FunK, token 為 ’ 。 q = declaration()。 //程序以變量聲明開始 while((token!=INT)amp。 4 代碼結(jié)構(gòu)分析 文法 program→declarationlist 分析函數(shù) TreeNode * parse(void) 說明 C程序由一個聲明序列組成, parse( void)函數(shù)首先執(zhí)行 getToken()然后 直接調(diào)用declaration_list()返回樹節(jié)點 代碼 TreeNode * parse(void) { TreeNode * t。 int lineno。 另外 C語言詞法比較復雜,因為時間關(guān)系我省略了一些,比如位運算符,轉(zhuǎn)義字符等等,希望今后能完善。 char d = 39。 /* token字符串 */ int lineno = 0。 詞法分析的 DFA設計 詞法分析的 DFA 如下所示,一共分為 10個狀態(tài): START、 INNUM、 INNUM INNUMINID、 INCOMPARE、 INOPERATE、 INSTRING、 INCHAR、 DONE。 《 編譯原理課程設計 》課程 報告 題目 C 語言 詞法分析器 和 C語言語法分析器 學生姓名 學生學號 指導教師 提交報告時間 2021 年 6 月 8 日 四川大學《編譯原理課程設計》 學號 2021141461017 1 C 語言詞法 分析器 1 實驗目的及 意義 1. 熟悉 C語言 詞法 2. 掌握 構(gòu)造 DFA 的過程 3. 掌握利用 DFA 實現(xiàn) C語言的詞法分析器 4. 理解編譯器詞法分析的工作原理 2 詞法特點及正則表達式 保留字 AUTO, BREAK , CASE , CHAR , CONST , CONTINUE , DEFAULT , DO , DOUBLE , ELSE, ENUM , EXTERN , FLOAT , FOR , GOTO, IF , INT , LONG , REGISTER , RETURN, SHORT , SIGNED , SIZEOF , STATIC , STRUCT , SWITCH , TYPEDEF , UNION , UNSIGNED , VOID, VOLATILE , WHILE, 符號 + * / ++ += = *= = = == != = 。狀態(tài) START 表示開始狀態(tài),狀態(tài) INNUM, INNUM1, INNUM2 表示數(shù)字類型( NUM) Token 的狀態(tài),狀態(tài) INID表示標示符 ( ID) 類型 Token 的狀態(tài) ,狀態(tài) INOPERATE表示 算數(shù) 運算符型 Token 的狀態(tài) ,狀態(tài) INOCOMPARE表示 比較 運算符型 Token 的狀態(tài) , INSTRING表示字符串( STRING)類型 Token 的狀態(tài), INCHAR 表示字符( CHARACTER)類型 Token 的狀態(tài), 狀態(tài) DONE 表示接收狀態(tài)。 /* 當前行號 */ static char lineBuf[BUFLEN]。h39。 四川大學《編譯原理課程設計》 學號 2021141461017 8 C語言語法 分析器 1 實驗目的及意義 用 C語言編制 Tiny/C語言的語法分析程序,實現(xiàn)對詞法分析程序所提供的 Token序列的語法檢查和結(jié)構(gòu)分析。 NodeKind nodekind。 token = getToken()。amp。 if (q!=NULL) { if (t==NULL) { t=p=q?!?則是 普通變量聲明,返回節(jié)點四川大學《編譯原理課程設計》 學號 2021141461017 12 Var_DeclK 代碼 TreeNode * declaration(void) { TreeNode * t = NULL。 match(VOID)。 tchild[0] = p。 tchild[0] = p。 match(RBRACKET)。 } return t。 } else { syntaxError()。 q = param(k)。 if(k==NULLamp。 } 四川大學《編譯原理課程設計》 學號 2021141461017 16 else if (k!=NULL) { p = k。amp。 match(LCBRACKET)。 while(token==INT || token==VOID) { p = newNode(Var_DeclK)。amp。 match(RBRACKET)。 } } } return t。 } } } return t。 case RETURN: t = return_stmt()。 break。 match(SEMI)。 pchild[0] = t。 if(token==ID) { p = newNode(IdK)。 tchild[1] = q。 t = q。 int i。 一開始我對 TreeNode 數(shù)據(jù)結(jié)構(gòu) 也 不是很理解,通過閱讀書后的 tiny 語言語法分析源代碼,我弄懂了語法樹的輸出 。 scanf(%s,pgm)。 /* listing在屏幕上輸出 */ fprintf(listing,\nC COMPILATION: %s\n,pgm)。 /* holds current token */ TreeNode * parse(void)。 TreeNode * statement_list(void)。 TreeNode * simple_expression(TreeNode * k)。 四川大學《編譯原理課程設計》 學號 2021141461017 28 Error = TRUE。 if(token!=ENDFILE) { syntaxError(endfile_error)。(token!=ENDFILE)) { syntaxError(開始不是類型聲明 )。 } } } match(ENDFILE)。 match(INT)。 match(ID)。 } else if (token==LBRACKET) { t = newNode(Var_DeclK)。 achild[0]=q。 } else { syntaxError()。 } else//參數(shù)列表為 (void id,[……]) { tchild[0] = param_list(p)。 match(COMMA)。 TreeNode * q = NULL。 match(INT)。 } if (token==LBRACKETamp。 } 四川大學《編譯原理課程設計》 學號 2021141461017 34 TreeNode * pound_stmt(void) { TreeNode * t = newNode(CompK)。 TreeNode * p = NULL。 } if((p!=NULL)amp。 match(LBRACKET)。 q = p。 } TreeNode * statement_list(void) { TreeNode * t = statement()。 match(SEMI)。(token==ID)) { TreeNode * q2 = newNode(IdK)。 if(token==INT) { TreeNode * q1 = newNode(IntK)。 tchild[0] = local_declaration()。(tchild[1]!=NULL))// { match(LBRACKET)。 } if(p!=NULL) { tchild[0] = p。amp。 if (q!=NULL) { if (t==NULL) { t=p=q。 } else { syntaxError()。 } return t。 match(RBRACKET)。 tchild[0] = p。 tchild[0] = p。 match(VOID)。 } TreeNode * declaration(void) { TreeNode * t = NULL。 if(token==ENDFILE) break。 } TreeNode * declaration_list(void) { TreeNode * t = declaration()。 else { syntaxError(unexpected token )。 TreeNode * term(TreeNode * k)。 TreeNode * expression_stmt(void)。 TreeNode * declaration(void)。 // } syntaxTree = parse()。.39。 /* 編譯過程標志 */ int EchoSource = TRUE。 while(ilow) { a[0]=1。 tchild[1] = additive_expression(k)。 } } return t。 match(ID)。 return p。 } 文法 expression→ var = expression | simpleexpression 分析函數(shù) TreeNode * expression(void) 說明 expression(void)函數(shù)通過判斷先行 Token 類型是否為 ID,如果不是說明只能是simple_expression情況,則調(diào)用 simple_expression(TreeNode * k)函數(shù)遞歸向下分析;如果是 ID說明可能是賦值語句,或 simple_expression中的 var和 call類型的情況,所以再求其 Follow 集合,如果集合求出來是賦值類型的 Token,則說明是賦值語句,于是新建一個AssignK節(jié)點就行;如果集合求出來不是賦值類型的 Token則說明是 simple_expression中的var和 call類型的情況,然后再調(diào)用 simple_expression(TreeNode * k)函數(shù)遞歸向下分析,并將已經(jīng)取出 IdK節(jié)點傳遞給 simple_expression(TreeNode * k)函數(shù) 代碼
點擊復制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1