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

正文內(nèi)容

c語(yǔ)言詞法分析器和c-語(yǔ)言語(yǔ)法分析器編譯原理課程設(shè)計(jì)-展示頁(yè)

2025-03-15 16:34本頁(yè)面
  

【正文】 指導(dǎo)教師 提交報(bào)告時(shí)間 2021 年 6 月 8 日 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 1 C 語(yǔ)言詞法 分析器 1 實(shí)驗(yàn)?zāi)康募?意義 1. 熟悉 C語(yǔ)言 詞法 2. 掌握 構(gòu)造 DFA 的過(guò)程 3. 掌握利用 DFA 實(shí)現(xiàn) C語(yǔ)言的詞法分析器 4. 理解編譯器詞法分析的工作原理 2 詞法特點(diǎn)及正則表達(dá)式 保留字 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, 符號(hào) + * / ++ += = *= = = == != = 。 , ( ) [ ] { } /* */ : 正則表達(dá)式 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。 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) + * / ++ += = *= = = == != = 。、 ,、 (、 )、 [、 ]、 //{、 }、 /*、 */、 : 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。 詞法分析的 DFA設(shè)計(jì) 詞法分析的 DFA 如下所示,一共分為 10個(gè)狀態(tài): START、 INNUM、 INNUM INNUMINID、 INCOMPARE、 INOPERATE、 INSTRING、 INCHAR、 DONE。 ? 在開(kāi)始狀態(tài) START時(shí) ? 如果輸入的字符為空白符,如空格換行等,則仍在 START狀態(tài) ? 如果輸入的字符為 digit,則進(jìn)入狀態(tài) INNUM,即可能是數(shù)字類型( NUM) Token的狀態(tài) ? 如果輸入的字符為 letter,則進(jìn)入狀態(tài) INID,即可能是 標(biāo)識(shí)符 類型 Token的狀態(tài) ? 如果輸入的字符為 、 、 !、 =,則進(jìn)入狀態(tài) INCOMPARE,即可能是 比較 運(yùn)算符型 Token的狀態(tài) ? 如果輸入的字符為 +、 — 、 *、 /,則進(jìn)入狀態(tài) INOPERATE,即可能是 算數(shù)運(yùn)算符 類型 Token的狀態(tài) ? 如果輸入的字符為 ‘ ,則進(jìn)入狀態(tài) INCHAR,即可能是字符類型 Token的狀態(tài) ? 如果輸入的字符為 “ ,則進(jìn)入狀態(tài) INSTRING,即可能是字符串類型 Token的狀態(tài) ? 如果輸入的字符為是除以上之外的,則進(jìn)入狀態(tài) DONE,這次輸入的字符可能是單目運(yùn)算符、錯(cuò)誤等 ? 在狀態(tài) INNUM時(shí) ? 如果輸入的字符為 digit,則仍停留在 INNUM狀態(tài) ? 如果 輸入的字符為 ”.”,則轉(zhuǎn)到 INNUM1狀態(tài) 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 4 ? 在狀態(tài) INNUM1時(shí) ? 如果輸入的字符為 digit,則進(jìn)入 INNUM2狀態(tài) ? 在狀態(tài) INNUM2時(shí) ? 如果輸入的為其他的字符,則轉(zhuǎn)到 DONE狀態(tài) ? 如果輸入字符為 digit,則停留在 INNUM2狀態(tài) ? 如果輸入的為其他字符,則轉(zhuǎn)到 DONE狀態(tài) ? 在狀態(tài) INID時(shí) ? 如果輸入的字符為 letter或“ _”或 digit,則仍停留在 INID狀態(tài) ? 如果輸入的為其他的字符,則轉(zhuǎn)到 DONE狀態(tài) ? 在狀態(tài) INCOMPARE時(shí) ? 如果輸入的字符為 =, 則 轉(zhuǎn)到 DONE狀態(tài) ? 如果輸入的為其他的字符,則直接轉(zhuǎn)到 DONE狀態(tài) ? 在狀態(tài) INOPERATE時(shí) ? 如果輸入的字符為 =,轉(zhuǎn)到 DONE狀態(tài) ? 如果輸入的為其他的字符,則直接轉(zhuǎn)到 DONE狀態(tài) ? 在狀態(tài) INCOMPARE時(shí) ? 如果輸入的 字符為 =, 則 轉(zhuǎn)到 DONE狀態(tài) ? 如果輸入的為其他的字符,則直接轉(zhuǎn)到 DONE狀態(tài) ? 在狀態(tài) INCHAR時(shí) ? 如果輸入為單引號(hào),則轉(zhuǎn)到 DONE狀態(tài) ? 如果輸入的為其他字符,則停留在 INCHAR狀態(tài) ? 在狀態(tài) INSTRING時(shí) ? 如果輸入為雙引號(hào),則轉(zhuǎn)到 DONE狀態(tài) ? 如果輸入的為其他字符,則停留在 INSTRING狀態(tài) ? 在狀態(tài) DONE時(shí) 接受狀態(tài),根據(jù)分析過(guò)程中獲取的字符串確定 Token的類型,并生成和保存相應(yīng)的 Token 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 5 5 代碼結(jié)構(gòu)分析 結(jié)構(gòu) 詞法分析部分的代碼在 和 文件中,全局變量以及公共函數(shù)代碼在 。 函數(shù)和成員變量的作用和含義 void printToken(TokenType,const char*)。 /* 字符串復(fù)制 */ TokenType getToken(void)。 /* token字符串 */ int lineno = 0。 /* 整行代碼緩沖區(qū) */ static int linepos = 0。 /* 緩沖區(qū)大小 */ static int EOF_flag = FALSE。 float b = 。 char d = 39。 if(a=2) { b+= a++。 本程序成功對(duì) 文件進(jìn)行了詞法分析,對(duì)注釋進(jìn)行了忽略,輸出了相應(yīng)的行號(hào)、類型、取值,對(duì)于錯(cuò)誤的輸入顯示 ERROR。 在最開(kāi)始的編寫(xiě)過(guò)程中,我總是把詞法和語(yǔ)法分析混淆,比如一些錯(cuò)誤應(yīng)該在語(yǔ)法分析中判斷,我卻寫(xiě)進(jìn)了詞法分析中,后來(lái)我逐步認(rèn)識(shí)到詞法分析的作用就是提取源代碼中的Token。 另外 C語(yǔ)言詞法比較復(fù)雜,因?yàn)闀r(shí)間關(guān)系我省略了一些,比如位運(yùn)算符,轉(zhuǎn)義字符等等,希望今后能完善。 2 文法規(guī)則 ( EBNF) program→declarationlist declaration_list → declaration{ declaration } declaration→vardeclaration|fundeclaration var_declaration →typespecifier ID。 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]。 expression→ var = expression | simpleexpression relop → = | | | = | = = | ! = var→ID | ID [expression] simpleexpression- additiveexpression{ relop additiveexpression } additiveexpression→term{addop term } addop → + | 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 9 term→factor{mulop factor } mulop →* | / factor→(expression) | var | call | NUM call→ID( args ) args→arglist | empty arglist→ expression{, expression} 3 節(jié)點(diǎn)類型及定義 節(jié)點(diǎn)類型 節(jié)點(diǎn)類型 描述 子節(jié)點(diǎn) IntK Int型 變量或返回值 無(wú) VoidK void型 變量或返回 值 無(wú) IdK 標(biāo)示符 id 無(wú) ConstK 數(shù)值 無(wú) Var_DeclK 變量聲明 變量類型 +變量名 Var_DeclK 數(shù)組聲明 數(shù)組名 +數(shù)組大小 FunK 函數(shù)聲明 返回類型 +函數(shù)名 +參數(shù)列表 +函數(shù)體 ParamsK FunK的參數(shù)列表 參數(shù)(如果有多個(gè)參數(shù),則之間為兄弟節(jié)點(diǎn)) ParamK FunK的參數(shù) 參數(shù)類型 +參數(shù)名 CompK 復(fù)合語(yǔ)句體 變量聲明列表 +語(yǔ)句列表 Selection_StmtK if 條件表達(dá)式 +IF體 +[ELSE體 ] Iteration_StmtK while 條件表達(dá)式 +循環(huán)體 Return_StmtK return [表達(dá)式 ] AssignK 賦值 被賦值變量 +賦值變量 OpK 運(yùn)算 運(yùn)算 符 左值 +運(yùn)算 符 右值 Arry_ElemK 數(shù)組元素 數(shù)組名 +下標(biāo) CallK 函數(shù)調(diào)用 函數(shù)名 +參數(shù)列表 ArgsK CallK的參數(shù)列表 [表達(dá)式 ] UnkownK 未知節(jié)點(diǎn) 無(wú) 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 10 節(jié)點(diǎn)定義 typedef struct treeNode {
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1