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

正文內(nèi)容

c語言詞法分析器和c-語言語法分析器編譯原理課程設(shè)計(jì)(存儲(chǔ)版)

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

下一頁面
  

【正文】 ild[0]=q。 } else { syntaxError()。 } else//參數(shù)列表為 (void id,[……]) { tchild[0] = param_list(p)。//沒有要傳給 param的 VoidK,所以將 k設(shè)為 NULL while (token==COMMA) 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 15 { TreeNode * q = NULL。 TreeNode * p = NULL。token==INT) { p = newNode(IntK)。 } else { syntaxError()。 } return t。 TreeNode * q = NULL。 match(INT)。 pchild[3] = q3。 else { qsibling = p。 } else { psibling = q。 case WHILE: t = iteration_stmt()。 default: syntaxError()。 return t。 //p = 。 TreeNode * p = NULL。 t = newNode(Arry_ElemK)。 q = token。 int min(int a[],int low,void a) { int k。 語法分析程序編寫相對(duì)于詞法分析要困難得多,首先要將 BNF 化為 EBNF,運(yùn)用遞歸向下的方法進(jìn)行編寫 , 構(gòu)造出語法樹, 判別語法分析過程中是否出錯(cuò)以及出錯(cuò)位置和錯(cuò)誤類型。 char pgm[120]。 exit(1)。 } 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 27 ifndef _PARSE_H_ define _PARSE_H_ TreeNode * parse(void)。 TreeNode * pound_stmt(void)。 TreeNode * expression(void)。 static void syntaxError(char * message) { fprintf(listing,\n )。 token = getToken()。(token!=VOID)amp。 } else { psibling=q。 TreeNode * a = NULL。token==ID) { q = newNode(IdK)。 match(RPAREN)。 s = atoi(tokenString)。 tchild[1] = q。 match(VOID)。 k = NULL。 } TreeNode * param(TreeNode * k) { TreeNode * t = newNode(ParamK)。amp。 match(ID)。 } } else { syntaxError()。 } TreeNode * local_declaration(void) { TreeNode * t = NULL。 pchild[0] = q1。 if(token==LBRACKET) 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 35 { TreeNode * q3 = newNode(Var_DeclK)。 } if(p!=NULL) { if(t==NULL) t = q = p。 while (IF==token || LCBRACKET==token || ID==token || WHILE==token || RETURN ==token || SEMI==token || LPAREN==token || NUM==token)
。 } else { match(SEMI)。 pchild[1] = q2。 match(INT)。 match(RCBRACKET)。 match(RBRACKET)。 q = copyString(tokenString)。 match(VOID)。 p = q。 } TreeNode * param_list(TreeNode * k) { TreeNode * t = param(k)。 TreeNode * p = NULL。 } else if (token==SEMI) { t = newNode(Var_DeclK)。 match(LBRACKET)。 match(LPAREN)。 } if(p!=NULLamp。 TreeNode * q = NULL。 q = declaration()。 //程序以變量聲明開始 while((token!=INT)amp。 fprintf(listing, )。 TreeNode * call(TreeNode * k)。 TreeNode * iteration_stmt(void)。 TreeNode * param_list(TreeNode * k)。 fclose(source)。 } source = fopen(pgm,r)。 int Error = FALSE。 } } return x。 } return t。 k = NULL。 q = expression()。 } } return t。 } else//以 ID開頭,可能是賦值語句,或 simple_expression中的 var和 call類型的情況 { TreeNode * p = NULL。 expression_stmt(void)函數(shù)通過判斷先行 token類型是否為分號(hào),如果不是則直接調(diào)用函數(shù) expression() 代碼 TreeNode * expression_stmt(void) { TreeNode * t = NULL。 case ID: case SEMI: case LPAREN: case NUM: t = expression_stmt()。 switch(token) { case IF: t = selection_stmt()。 q = statement()。 } } else { syntaxError()。 match(ID)。 } else if(token==VOID) { TreeNode * q1 = newNode(VoidK)。 return t。 } else { return t。 tchild[1] = q。 } else if(k==NULLamp。 } } } return t。 TreeNode * p = t。 match(VOID)。 tchild[1] = q。 s = atoi(tokenString)。 match(RPAREN)。token==ID) { q = newNode(IdK)。 TreeNode * a = NULL。 return t。 token = getToken()。 } 文法 declaration_list → declaration{ declaration } 分析函數(shù) TreeNode * declaration_list(void) 說明 聲明序列是由若干聲明構(gòu)成 , declaration_list(void)函數(shù)中直接調(diào)用declaration()函數(shù)返回樹節(jié)點(diǎn),當(dāng)前 token為 INT或 VOID時(shí),調(diào)用 declaration()返回之前樹節(jié)點(diǎn)的兄弟節(jié)點(diǎn)。} attr。 selectionstmt→if (expression) statement [else statement] iterationstmt→while (expression)statement returnstmt→return [expression]。 7 小結(jié) 通過 編寫 C 語言詞法分析器,我對(duì)編譯器的基本原理有了更深的認(rèn)識(shí),同時(shí)掌握了 DFA的設(shè)計(jì)與實(shí)現(xiàn)。 /* 文件結(jié)束標(biāo)志 */ 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 6 6 實(shí)驗(yàn)結(jié)果與分析 測(cè)試文件 /**/ int main(void) { int a = 0。 /*輸出 token */ char* copyString(char *)。 , ( ) [ ] { } /* */ : 文件結(jié)束、錯(cuò)誤 EOF ERROR 其它 token NUM ID CHARACTER STRING tokenType類型代碼 typedef enum { //錯(cuò)誤 、 結(jié) 束 ENDFILE,ERROR, //保留字 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, //其 他 token ID,NUM,CHARACTER,STRING, //特殊符號(hào) //+、 、 *、 /、 ++、 、 +=、 =、 *=、 、 =、 、 =、 ==、 !=、 =、 。 STRING = “ other+” 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 2 3 Token 定義 token類型 保留字 auto break case char const continue default do double else enum extern float for goto if int long redister return short signed sizeof static struct switch typedef union unsigned void volatile while 特殊符號(hào) + * / ++ += = *= = = == != = 。 函數(shù)和成員變量的作用和含義 void printToken(TokenType,const char*)。 /* 緩沖區(qū)大小 */ static int EOF_flag = FALSE。 本程序成功對(duì) 文件進(jìn)行了詞法分析,對(duì)注釋進(jìn)行了忽略,輸出了相應(yīng)的行號(hào)、類型、取值,對(duì)于錯(cuò)誤的輸入顯示 ERROR。 type specifier → int | void fundeclatation→typespecifier ID (params) | poundstmt params→param_list | void param_list→param{, param
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1