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

正文內(nèi)容

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

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

【正文】 《 編譯原理課程設(shè)計(jì) 》課程 報(bào)告 題目 C 語(yǔ)言 詞法分析器 和 C語(yǔ)言語(yǔ)法分析器 學(xué)生姓名 學(xué)生學(xué)號(hào) 指導(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。other+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) + * / ++ += = *= = = == != = 。 , ( ) [ ] { } /* */ : 文件結(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) //+、 、 *、 /、 ++、 、 +=、 =、 *=、 、 =、 、 =、 ==、 !=、 =、 。、 ,、 (、 )、 [、 ]、 //{、 }、 /*、 */、 : 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。 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 3 4 DFA 設(shè)計(jì) 注釋的 DFA 設(shè)計(jì) 注釋的 DFA如下所示,一共分為 5個(gè)狀態(tài),在開始狀態(tài) 1時(shí),如果輸入的字符為 /, 則 進(jìn)入狀態(tài) 2,此時(shí)有可能進(jìn)入注釋狀態(tài),如果在狀態(tài) 2時(shí),輸入的字符為 *,則進(jìn)入注釋狀態(tài),狀態(tài)將轉(zhuǎn)到 3,如果在狀態(tài) 3 時(shí),輸入的字符為 *,則有可能結(jié)束注釋狀態(tài),此時(shí)狀態(tài)將轉(zhuǎn)到狀態(tài) 4,如果在狀態(tài) 4時(shí)輸入的字符為 /,則注釋狀態(tài)結(jié)束,狀態(tài)轉(zhuǎn)移到結(jié)束 狀態(tài)。 詞法分析的 DFA設(shè)計(jì) 詞法分析的 DFA 如下所示,一共分為 10個(gè)狀態(tài): START、 INNUM、 INNUM INNUMINID、 INCOMPARE、 INOPERATE、 INSTRING、 INCHAR、 DONE。狀態(tài) START 表示開始狀態(tài),狀態(tài) INNUM, INNUM1, INNUM2 表示數(shù)字類型( NUM) Token 的狀態(tài),狀態(tài) INID表示標(biāo)示符 ( ID) 類型 Token 的狀態(tài) ,狀態(tài) INOPERATE表示 算數(shù) 運(yùn)算符型 Token 的狀態(tài) ,狀態(tài) INOCOMPARE表示 比較 運(yùn)算符型 Token 的狀態(tài) , INSTRING表示字符串( STRING)類型 Token 的狀態(tài), INCHAR 表示字符( CHARACTER)類型 Token 的狀態(tài), 狀態(tài) DONE 表示接收狀態(tà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ù)中進(jìn)行文件打開和關(guān)閉,并調(diào)用 中的 getToken()函數(shù)對(duì)源文件進(jìn)行詞法分析。 函數(shù)和成員變量的作用和含義 void printToken(TokenType,const char*)。 /*輸出 token */ char* copyString(char *)。 /* 字符串復(fù)制 */ TokenType getToken(void)。 /* 詞法分析函數(shù) */ static int getNextChar(void) /* 獲取下一個(gè)字符 */ static void ungetNextChar(void) /* 退回一個(gè)字符 */ static TokenType reservedLookup (char * s) /* 查找對(duì)應(yīng)的保留字 */ char tokenString[MAXTOKENLEN+1]。 /* token字符串 */ int lineno = 0。 /* 當(dāng)前行號(hào) */ static char lineBuf[BUFLEN]。 /* 整行代碼緩沖區(qū) */ static int linepos = 0。 /* 當(dāng)前行的位置 */ static int bufsize = 0。 /* 緩沖區(qū)大小 */ static int EOF_flag = FALSE。 /* 文件結(jié)束標(biāo)志 */ 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 6 6 實(shí)驗(yàn)結(jié)果與分析 測(cè)試文件 /**/ int main(void) { int a = 0。 float b = 。 char c[] = abcdefg。 char d = 39。h39。 if(a=2) { b+= a++。 } } 測(cè)試結(jié)果
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號(hào)-1