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

正文內(nèi)容

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

2023-03-14 16:34:53 本頁(yè)面
 

【正文】 執(zhí)行 getToken()然后 直接調(diào)用declaration_list()返回樹節(jié)點(diǎn) 代碼 TreeNode * parse(void) { TreeNode * t。 const char * name。 int lineno。 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]。 另外 C語(yǔ)言詞法比較復(fù)雜,因?yàn)闀r(shí)間關(guān)系我省略了一些,比如位運(yùn)算符,轉(zhuǎn)義字符等等,希望今后能完善。 本程序成功對(duì) 文件進(jìn)行了詞法分析,對(duì)注釋進(jìn)行了忽略,輸出了相應(yīng)的行號(hào)、類型、取值,對(duì)于錯(cuò)誤的輸入顯示 ERROR。 char d = 39。 /* 緩沖區(qū)大小 */ static int EOF_flag = FALSE。 /* token字符串 */ int lineno = 0。 函數(shù)和成員變量的作用和含義 void printToken(TokenType,const char*)。 詞法分析的 DFA設(shè)計(jì) 詞法分析的 DFA 如下所示,一共分為 10個(gè)狀態(tài): START、 INNUM、 INNUM INNUMINID、 INCOMPARE、 INOPERATE、 INSTRING、 INCHAR、 DONE。 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) + * / ++ += = *= = = == != = 。 《 編譯原理課程設(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) + * / ++ += = *= = = == != = 。 , ( ) [ ] { } /* */ : 文件結(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) //+、 、 *、 /、 ++、 、 +=、 =、 *=、 、 =、 、 =、 ==、 !=、 =、 。狀態(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)。 /*輸出 token */ char* copyString(char *)。 /* 當(dāng)前行號(hào) */ static char lineBuf[BUFLEN]。 /* 文件結(jié)束標(biāo)志 */ 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 6 6 實(shí)驗(yàn)結(jié)果與分析 測(cè)試文件 /**/ int main(void) { int a = 0。h39。 7 小結(jié) 通過(guò) 編寫 C 語(yǔ)言詞法分析器,我對(duì)編譯器的基本原理有了更深的認(rèn)識(shí),同時(shí)掌握了 DFA的設(shè)計(jì)與實(shí)現(xiàn)。 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 8 C語(yǔ)言語(yǔ)法 分析器 1 實(shí)驗(yàn)?zāi)康募耙饬x 用 C語(yǔ)言編制 Tiny/C語(yǔ)言的語(yǔ)法分析程序,實(shí)現(xiàn)對(duì)詞法分析程序所提供的 Token序列的語(yǔ)法檢查和結(jié)構(gòu)分析。 selectionstmt→if (expression) statement [else statement] iterationstmt→while (expression)statement returnstmt→return [expression]。 NodeKind nodekind。} attr。 token = getToken()。 } 文法 declaration_list → declaration{ declaration } 分析函數(shù) TreeNode * declaration_list(void) 說(shuō)明 聲明序列是由若干聲明構(gòu)成 , declaration_list(void)函數(shù)中直接調(diào)用declaration()函數(shù)返回樹節(jié)點(diǎn),當(dāng)前 token為 INT或 VOID時(shí),調(diào)用 declaration()返回之前樹節(jié)點(diǎn)的兄弟節(jié)點(diǎn)。amp。 token = getToken()。 if (q!=NULL) { if (t==NULL) { t=p=q。 return t?!?則是 普通變量聲明,返回節(jié)點(diǎn)四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 12 Var_DeclK 代碼 TreeNode * declaration(void) { TreeNode * t = NULL。 TreeNode * a = NULL。 match(VOID)。token==ID) { q = newNode(IdK)。 tchild[0] = p。 match(RPAREN)。 tchild[0] = p。 s = atoi(tokenString)。 match(RBRACKET)。 tchild[1] = q。 } return t。 match(VOID)。 } else { syntaxError()。 TreeNode * p = t。 q = param(k)。 } } } return t。 if(k==NULLamp。 } else if(k==NULLamp。 } 四川大學(xué)《編譯原理課程設(shè)計(jì)》 學(xué)號(hào) 2021141461017 16 else if (k!=NULL) { p = k。 tchild[1] = q。amp。 } else { return t。 match(LCBRACKET)。 return t。 while(token==INT || token==VOID) { p = newNode(Var_DeclK)。 } else if(token==VOID) { TreeNode * q1 = newNode(VoidK)。amp。 match(ID)。 match(RBRACKET)。 } } else { syntaxError()。 } } } return t。 q = statement()。 } } } return t。 switch(token) { case IF: t = selection_stmt()。 case RETURN: t = return_stmt()。 case ID: case SEMI: case LPAREN: case NUM: t = expression_stmt()。 break。 expression_stmt(void)函數(shù)通過(guò)判斷先行 token類型是否為分號(hào),如果不是則直接調(diào)用函數(shù) expression() 代碼 TreeNode * expression_stmt(void) { TreeNode * t = NULL。
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1