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

正文內容

c語言詞法分析器和c-語言語法分析器編譯原理課程設計-全文預覽

2025-03-31 16:34 上一頁面

下一頁面
  

【正文】 e { syntaxError()。 if (token==ID) { q = newNode(IdK)。token==INT) { p = newNode(IntK)。token==VOID) { p = newNode(VoidK)。 TreeNode * p = NULL。 } else { psibling = q。//沒有要傳給 param的 VoidK,所以將 k設為 NULL while (token==COMMA) 四川大學《編譯原理課程設計》 學號 2021141461017 15 { TreeNode * q = NULL。 } 文法 param_list→ param{, param} 分析函數(shù) TreeNode * param_list(TreeNode * k) 說明 說明參數(shù)列表由 param序列組成,并由逗號隔開。 } else//參數(shù)列表為 (void id,[……]) { tchild[0] = param_list(p)。 TreeNode * p = NULL。 } else { syntaxError()。 } else if (token==SEMI) { t = newNode(Var_DeclK)。 achild[0]=q。 match(LBRACKET)。 } else if (token==LBRACKET) 四川大學《編譯原理課程設計》 學號 2021141461017 13 { t = newNode(Var_DeclK)。 match(LPAREN)。 match(ID)。 } if(p!=NULLamp。 match(INT)。 TreeNode * q = NULL。 | typespecifier ID [NUM]。 p=q。 } while(token==INT||token==VOID) { TreeNode * q。amp。 四川大學《編譯原理課程設計》 學號 2021141461017 11 TreeNode * p =t。 if(token!=ENDFILE) { syntaxError(endfile error)。 } TreeNode。 int val。 struct treeNode * sibling。 | typespecifier ID [NUM]。在 DFA的實現(xiàn)過程中,我主要參考了書后 tiny語言 DFA 的實現(xiàn)方法,將它擴展到 C語言。 } } 測試結果 四川大學《編譯原理課程設計》 學號 2021141461017 7 ,保留字,整數(shù)和小數(shù),標識符,特殊符號,字符串以及錯誤輸入。 char c[] = abcdefg。 /* 當前行的位置 */ static int bufsize = 0。 /* 詞法分析函數(shù) */ static int getNextChar(void) /* 獲取下一個字符 */ static void ungetNextChar(void) /* 退回一個字符 */ static TokenType reservedLookup (char * s) /* 查找對應的保留字 */ char tokenString[MAXTOKENLEN+1]。 主函數(shù)中進行文件打開和關閉,并調用 中的 getToken()函數(shù)對源文件進行詞法分析。 四川大學《編譯原理課程設計》 學號 2021141461017 3 4 DFA 設計 注釋的 DFA 設計 注釋的 DFA如下所示,一共分為 5個狀態(tài),在開始狀態(tài) 1時,如果輸入的字符為 /, 則 進入狀態(tài) 2,此時有可能進入注釋狀態(tài),如果在狀態(tài) 2時,輸入的字符為 *,則進入注釋狀態(tài),狀態(tài)將轉到 3,如果在狀態(tài) 3 時,輸入的字符為 *,則有可能結束注釋狀態(tài),此時狀態(tài)將轉到狀態(tài) 4,如果在狀態(tài) 4時輸入的字符為 /,則注釋狀態(tài)結束,狀態(tài)轉移到結束 狀態(tài)。other+39。 , ( ) [ ] { } /* */ : 正則表達式 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。、 ,、 (、 )、 [、 ]、 //{、 }、 /*、 */、 : PLUS,MINUS,TIMES,OVER,SELFPLUS,SELFMINUS,PLUSASSIGN, MINUSASSIGN,TIMESASSIGN,LT,LEQ,GT,GEQ,EQ,NEQ,ASSIGN, SEMI,COMMA,LPAREN, MINUSASSIGN,TIMESASSIGN,LT,LEQ,GT, GEQ,EQ,NEQ,ASSIGN,SEMI,COMMA,LPAREN, RPAREN,LBRACKET,RBRACKET, LCBRACKET,RCBRACKET,LCOMMENT,RCOMMENT,COLON } TokenType。 ? 在開始狀態(tài) START時 ? 如果輸入的字符為空白符,如空格換行等,則仍在 START狀態(tài) ? 如果輸入的字符為 digit,則進入狀態(tài) INNUM,即可能是數(shù)字類型( NUM) Token的狀態(tài) ? 如果輸入的字符為 letter,則進入狀態(tài) INID,即可能是 標識符 類型 Token的狀態(tài) ? 如果輸入的字符為 、 、 !、 =,則進入狀態(tài) INCOMPARE,即可能是 比較 運算符型 Token的狀態(tài) ? 如果輸入的字符為 +、 — 、 *、 /,則進入狀態(tài) INOPERATE,即可能是 算數(shù)運算符 類型 Token的狀態(tài) ? 如果輸入的字符為 ‘ ,則進入狀態(tài) INCHAR,即可能是字符類型 Token的狀態(tài) ? 如果輸入的字符為 “ ,則進入狀態(tài) INSTRING,即可能是字符串類型 Token的狀態(tài) ? 如果輸入的字符為是除以上之外的,則進入狀態(tài) DONE,這次輸入的字符可能是單目運算符、錯誤等 ? 在狀態(tài) INNUM時 ? 如果輸入的字符為 digit,則仍停留在 INNUM狀態(tài) ? 如果 輸入的字符為 ”.”,則轉到 INNUM1狀態(tài) 四川大學《編譯原理課程設計》 學號 2021141461017 4 ? 在狀態(tài) INNUM1時 ? 如果輸入的字符為 digit,則進入 INNUM2狀態(tài) ? 在狀態(tài) INNUM2時 ? 如果輸入的為其他的字符,則轉到 DONE狀態(tài) ? 如果輸入字符為 digit,則停留在 INNUM2狀態(tài) ? 如果輸入的為其他字符,則轉到 DONE狀態(tài) ? 在狀態(tài) INID時 ? 如果輸入的字符為 letter或“ _”或 digit,則仍停留在 INID狀態(tài) ? 如果輸入的為其他的字符,則轉到 DONE狀態(tài) ? 在狀態(tài) INCOMPARE時 ? 如果輸入的字符為 =, 則 轉到 DONE狀態(tài) ? 如果輸入的為其他的字符,則直接轉到 DONE狀態(tài) ? 在狀態(tài) INOPERATE時 ? 如果輸入的字符為 =,轉到 DONE狀態(tài) ? 如果輸入的為其他的字符,則直接轉到 DONE狀態(tài) ? 在狀態(tài) INCOMPARE時 ? 如果輸入的 字符為 =, 則 轉到 DONE狀態(tài) ? 如果輸入的為其他的字符,則直接轉到 DONE狀態(tài) ? 在狀態(tài) INCHAR時 ? 如果輸入為單引號,則轉到 DONE狀態(tài) ? 如果輸入的為其他字符,則停留在 INCHAR狀態(tài) ? 在狀態(tài) INSTRING時 ? 如果輸入為雙引號,則轉到 DONE狀態(tài) ? 如果輸入的為其他字符,則停留在 INSTRING狀態(tài) ? 在狀態(tài) DONE時 接受狀態(tài),根據(jù)分析過程中獲取的字符串確定 Token的類型,并生成和保存相應的 Token 四川大學《編譯原理課程設計》 學號 2021141461017 5 5 代碼結構分析 結構 詞法分析部分的代碼在 和 文件中,全局變量以及公共函數(shù)代碼在 。 /* 字符串復制 */ TokenType getToken(void)。 /* 整行代碼緩沖區(qū) */ static int linepos = 0。 float b = 。 if(a=2) { b+= a++。 在最開始的編寫過程中,我總是把詞法和語法分析混淆,比如一些錯誤應該在語法分析中判斷,我卻寫進了詞法分析中,后來我逐步認識到詞法分析的作用就是提取源代碼中的Token。 2 文法規(guī)則 ( EBNF) program→declarationlist declaration_list → declaration{ declaration } declaration→vardeclaration|fundeclaration var_declaration →typespecifier ID。 expression→ var = expression | simpleexpression relop → = | | | = | = = | ! = var→ID | ID [expression] simpleexpression- additiveexpression{ relop additiveexpression } additiveexpression→term{addop term } addop → + | 四川大學《編譯原理課程設計》 學號 2021141461017 9 term→factor{mulop factor } mulop →* | / factor→(expression) | var | call | NUM call→ID( args ) args→arglist | empty arglist→ expression{, expression} 3 節(jié)點類型及定義 節(jié)點類型 節(jié)點類型 描述 子節(jié)點 IntK Int型 變量或返回值 無 VoidK void型 變量或返回 值 無 IdK 標示符 id 無 ConstK 數(shù)值 無 Var_DeclK 變量聲明 變量類型 +變量名 Var_DeclK 數(shù)組聲明 數(shù)組名 +數(shù)組大小 FunK 函數(shù)聲明 返回類型 +函數(shù)名 +參數(shù)列表 +函數(shù)體 ParamsK FunK的參數(shù)列表 參數(shù)(如果有多個參數(shù),則之間為兄弟節(jié)點) ParamK FunK的參數(shù) 參數(shù)類型 +參數(shù)名 CompK 復合語句體 變量聲明列表 +語句列表 Selection_StmtK if 條件表達式 +IF體 +[ELSE體 ] Iteration_StmtK while 條件表達式 +循環(huán)體 Return_StmtK return [表達式 ] AssignK 賦值 被賦值變量 +賦值變量 OpK 運算 運算 符 左值 +運算 符 右值 Arry_ElemK 數(shù)組元素 數(shù)組名 +下標 CallK 函數(shù)調用 函數(shù)名 +參數(shù)列表 ArgsK CallK的參數(shù)列表 [表達式 ] UnkownK 未知節(jié)點 無 四川大學《編譯原理
點擊復制文檔內容
環(huán)評公示相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1