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

正文內(nèi)容

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

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è)計》 學(xué)號 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。 語法分析程序編寫相對于詞法分析要困難得多,首先要將 BNF 化為 EBNF,運用遞歸向下的方法進行編寫 , 構(gòu)造出語法樹, 判別語法分析過程中是否出錯以及出錯位置和錯誤類型。 char pgm[120]。 exit(1)。 } 四川大學(xué)《編譯原理課程設(shè)計》 學(xué)號 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è)計》 學(xué)號 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類型是否為分號,如果不是則直接調(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é)點,當前 token為 INT或 VOID時,調(diào)用 declaration()返回之前樹節(jié)點的兄弟節(jié)點。} attr。 selectionstmt→if (expression) statement [else statement] iterationstmt→while (expression)statement returnstmt→return [expression]。 7 小結(jié) 通過 編寫 C 語言詞法分析器,我對編譯器的基本原理有了更深的認識,同時掌握了 DFA的設(shè)計與實現(xiàn)。 /* 文件結(jié)束標志 */ 四川大學(xué)《編譯原理課程設(shè)計》 學(xué)號 2021141461017 6 6 實驗結(jié)果與分析 測試文件 /**/ int main(void) { int a = 0。 /*輸出 token */ char* copyString(char *)。 , ( ) [ ] { } /* */ : 文件結(jié)束、錯誤 EOF ERROR 其它 token NUM ID CHARACTER STRING tokenType類型代碼 typedef enum { //錯誤 、 結(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, //特殊符號 //+、 、 *、 /、 ++、 、 +=、 =、 *=、 、 =、 、 =、 ==、 !=、 =、 。 STRING = “ other+” 四川大學(xué)《編譯原理課程設(shè)計》 學(xué)號 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 特殊符號 + * / ++ += = *= = = == != = 。 函數(shù)和成員變量的作用和含義 void printToken(TokenType,const char*)。 /* 緩沖區(qū)大小 */ static int EOF_flag = FALSE。 本程序成功對 文件進行了詞法分析,對注釋進行了忽略,輸出了相應(yīng)的行號、類型、取值,對于錯誤的輸入顯示 ERROR。 type specifier → int | void fundeclatation→typespecifier ID (params) | poundstmt params→param_list | void param_list→param{, param
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1