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

正文內容

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

2025-05-02 16:34上一頁面

下一頁面
  

【正文】 tchild[1] = a。 } else 四川大學《編譯原理課程設計》 學號 2021141461017 30 { syntaxError(類型錯誤 )。 } while(token==INT||token==VOID) 四川大學《編譯原理課程設計》 學號 2021141461017 29 { TreeNode * q。 printToken(token,tokenString)。 TreeNode * selection_stmt(void)。 printTree(syntaxTree)。 int TraceScan = TRUE。 return t。 if(token==LBRACKET) { match(LBRACKET)。 if(t==NULL)//不是以 ID開頭,只能是 simple_expression情況 { t = simple_expression(t)。 break。 while (IF==token || LCBRACKET==token || ID==token || WHILE==token || RETURN ==token || SEMI==token || LPAREN==token || NUM==token) { TreeNode * q。 pchild[1] = q2。 match(RCBRACKET)。 q = copyString(tokenString)。 p = q。 if (token==VOID) { p = newNode(VoidK)。 s = newNode(ConstK)。amp。 } } } match(ENDFILE)。 } return t。 type specifier → int | void fundeclatation→typespecifier ID (params) | poundstmt params→param_list | void param_list→param{, param} param→ typespecifier ID{[ ]} poundstmt→{ localdeclaration statementlist} localdeclarations → empty {var declaration} statementlist→{statement} statement→expressionstmt | poundstmt | selectionstmt | iterationstmt | returnstmt expressionstmt→ [expression]。 /* 緩沖區(qū)大小 */ static int EOF_flag = FALSE。 STRING = “ other+” 四川大學《編譯原理課程設計》 學號 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 特殊符號 + * / ++ += = *= = = == != = 。 /*輸出 token */ char* copyString(char *)。 7 小結 通過 編寫 C 語言詞法分析器,我對編譯器的基本原理有了更深的認識,同時掌握了 DFA的設計與實現(xiàn)。} attr。 token = getToken()。 TreeNode * a = NULL。 match(RPAREN)。 tchild[1] = q。 TreeNode * p = t。 } else if(k==NULLamp。 } else { return t。 } else if(token==VOID) { TreeNode * q1 = newNode(VoidK)。 } } else { syntaxError()。 switch(token) { case IF: t = selection_stmt()。 expression_stmt(void)函數(shù)通過判斷先行 token類型是否為分號,如果不是則直接調用函數(shù) expression() 代碼 TreeNode * expression_stmt(void) { TreeNode * t = NULL。 } } return t。 k = NULL。 } } return x。 } source = fopen(pgm,r)。 TreeNode * param_list(TreeNode * k)。 TreeNode * call(TreeNode * k)。 //程序以變量聲明開始 while((token!=INT)amp。 TreeNode * q = NULL。 match(LPAREN)。 } else if (token==SEMI) { t = newNode(Var_DeclK)。 } TreeNode * param_list(TreeNode * k) { TreeNode * t = param(k)。 match(VOID)。 match(RBRACKET)。 match(INT)。 } else { match(SEMI)。 } if(p!=NULL) { if(t==NULL) t = q = p。 pchild[0] = q1。 } } else { syntaxError()。amp。 k = NULL。 tchild[1] = q。 match(RPAREN)。 TreeNode * a = NULL。(token!=VOID)amp。 static void syntaxError(char * message) { fprintf(listing,\n )。 TreeNode * pound_stmt(void)。 exit(1)。 語法分析程序編寫相對于詞法分析要困難得多,首先要將 BNF 化為 EBNF,運用遞歸向下的方法進行編寫 , 構造出語法樹, 判別語法分析過程中是否出錯以及出錯位置和錯誤類型。 q = token。 TreeNode * p = NULL。 return t。 case WHILE: t = iteration_stmt()。 else { qsibling = p。 match(INT)。 } return t。token==INT) { p = newNode(IntK)。//沒有要傳給 param的 VoidK,所以將 k設為 NULL while (token==COMMA) 四川大學《編譯原理課程設計》 學號 2021141461017 15 { TreeNode * q = NULL。 } else { syntaxError()。 } else if (token==LBRACKET) 四川大學《編譯原理課程設計》 學號 2021141461017 13 { t = newNode(Var_DeclK)。 match(INT)。 } while(token==INT||token==VOID) { TreeNode * q。 } TreeNode。在 DFA的實現(xiàn)過程中,我主要參考了書后 tiny語言 DFA 的實現(xiàn)方法,將它擴展到 C語言。 /* 詞法分析函數(shù) */ static int getNextChar(void) /* 獲取下一個字符 */ static void ungetNextChar(void) /* 退回一個字符 */ static TokenType reservedLookup (char * s) /* 查找對應的保留字 */ char tokenString[MAXTOKENLEN+1]。 , ( ) [ ] { } /* */ : 正則表達式 whitespace = (newline|blank|tab|ment)+ digit=0|..|9 nat=digit+ signedNat=(+|)?nat NUM=signedNat(“ .” nat)? letter = a|..|z|A|..|Z ID = letter(letter|digit|“ _” )+ CHAR = 39。 /* 整行代碼緩沖區(qū) */ static int linepos = 0。 2 文法規(guī)則 ( EBNF) program→declarationlist declaration_list → declaration{ declaration } declaration→vardeclaration|fundeclaration var_declaration →typespecifier ID。 t = declaration_list()。 } else { psibling=q。 } else { syntaxError(type error)。 //p是 t子節(jié)點 tchild[1] = a。 } 文法 params→ param_list | void 分析函數(shù) TreeNode * params(void) 說明 參數(shù)列表,根節(jié)點 ParamsK,首先判斷 token是否是 VOID,如果是 VOID則匹配,判斷下一個 token,如果是右括號,則參數(shù)列表中只有子節(jié)點 VoidK,如果是 ID,則子節(jié)點是param_list,如果開始時 token是 INT,則參數(shù)列表子節(jié)點是 param_list 四川大學《編譯原理課程設計》 學號 2021141461017 14 代碼 TreeNode * params(void) { TreeNode * t = newNode(ParamsK)。 if (q!=NULL) { if (t==NULL) { t=p=q。 } if(p!=NULL) { tchild[0] = p。 tchild[0] = local_declaration()。(token==ID)) { 四川大學《編譯原理課程設計》 學號 2021141461017 18 TreeNode * q2 = newNode(IdK)。 } 四川大學《編譯原理課程設計》 學號 2021141461017
點擊復制文檔內容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1