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

正文內(nèi)容

基于c語言子系統(tǒng)的詞法分析器計(jì)與實(shí)現(xiàn)畢業(yè)論文-文庫吧資料

2025-03-06 09:17本頁面
  

【正文】 ksv*3t nGK8!z89Am YWpazadNuKNamp。 qYpEh5pDx2zVkumamp。 UE9aQGn8xp$Ramp。 6a*CZ7H$dq8Kqqf HVZFedswSyXTyamp。由于時(shí)間緊,開發(fā)任務(wù)重,系統(tǒng)有些功能尚未健全。同時(shí)在設(shè)計(jì)上使用的是模塊化的設(shè)計(jì),更為系統(tǒng)以后的擴(kuò)展提供了良好的條件。 本畢業(yè)設(shè)計(jì)程序界面十分簡(jiǎn)便,在對(duì) C語言語法理解的基礎(chǔ)上,建立一個(gè)能夠既能夠分色顯示源代碼,又可以簡(jiǎn)單編譯 C源碼的 簡(jiǎn)單開發(fā)和編譯平臺(tái)。在開發(fā)基于 C語言小型編譯器中,還是用系統(tǒng)分析、系統(tǒng)設(shè)計(jì)的思路。信息輸出窗口紅色錯(cuò)誤信息的顏色偶有不正確現(xiàn)象。 測(cè)試結(jié)果 代碼關(guān)鍵字高亮顯示功能在 windows XP 系統(tǒng)上運(yùn)行正常,但是在 Vista 系統(tǒng)偶爾有不正常現(xiàn)象, 目前沒有得到很好的解決。本程序使用 VS 2021 的調(diào)試畫板進(jìn)行調(diào)試操作,先設(shè)置斷點(diǎn),然后運(yùn)行調(diào)試。通常也采用黑盒測(cè)試。 經(jīng)過確認(rèn)測(cè)試后,軟件已測(cè)試完畢,但軟件只是信息系統(tǒng)的一個(gè)組成部分,還必須要與系統(tǒng)中的其他部分配套進(jìn)行,進(jìn)行系統(tǒng)測(cè)試。 17 對(duì)每個(gè)模塊完成了單元測(cè)試以后,需 要按照設(shè)計(jì)時(shí)做出的層次模塊圖把他們連接起來,進(jìn)行組裝測(cè)試,這一步驟是為了保證各個(gè)模塊聯(lián)結(jié)起來也能正常工作,它以系統(tǒng)仔細(xì)設(shè)計(jì)和程序設(shè)計(jì)為依據(jù),通常采用黑盒測(cè)試方法。 系統(tǒng)測(cè)試的步驟 系統(tǒng)的測(cè)試步驟一般有以下四個(gè)步驟:?jiǎn)卧獪y(cè)試、組裝測(cè)試、確認(rèn)測(cè)試和系統(tǒng)測(cè)試,每一步都是在前一步的基礎(chǔ)之上進(jìn)行。根據(jù)軟件的需求規(guī)格說明書設(shè)計(jì)測(cè)試用例,從程序的輸入、輸出特性上測(cè)試是否滿足所設(shè)計(jì)的功 能。 系統(tǒng)原型測(cè)試 測(cè)試工作應(yīng)盡量避免由原開發(fā)軟件的個(gè)人或小組來承擔(dān);設(shè)計(jì)測(cè)試方案時(shí),不僅要包括確定的輸入數(shù)據(jù),而且因包括從系統(tǒng)功能出發(fā)預(yù)期的測(cè)試結(jié)果;測(cè)試用例不僅要包括 合理、有效的輸入數(shù)據(jù),還要包括無效的或不合理的輸入數(shù)據(jù);不僅要檢驗(yàn)程序是否做了應(yīng)該完成的事,還要檢查是否同時(shí)做了不應(yīng)該完成的事;軟件中仍存在錯(cuò)誤的概率和已經(jīng)發(fā)現(xiàn)錯(cuò)誤的個(gè)數(shù)是成正比的;而且需要保留測(cè)試用例,作為軟件文檔的組成部分。無論是界面放置和控制方法(例如 鼠標(biāo)點(diǎn)擊和快捷鍵操作)都已成為習(xí)慣,如果這種習(xí)慣被打破,就會(huì)引起客戶的抗拒心理,因?yàn)樗麄冃枰〞r(shí)間學(xué)習(xí)和掌握,甚至?xí)档涂蛻舻墓ぷ餍省W烂娼缑娴脑O(shè)計(jì),在最早的個(gè)人電腦上就有實(shí)施,后來由蘋果公司和微軟公司反復(fù)修改和優(yōu)化,如今已經(jīng)逐漸演變成一套系統(tǒng)的設(shè)計(jì)規(guī)范,所有軟件圖形界面,所有面向 Web的指導(dǎo)文檔,甚至許多為新型移動(dòng)設(shè)備提供的設(shè)計(jì)參考都相繼遵從,大多數(shù)的界面開發(fā)工具都默認(rèn)支持這些規(guī)范所設(shè)定的描述語言和相關(guān)內(nèi)容。 函數(shù)調(diào)用參數(shù)檢測(cè) : 檢測(cè)函數(shù)調(diào)用時(shí)傳入?yún)?shù)的類型與函數(shù)聲明時(shí)參數(shù)的類型是否匹配。 Class CFunArgsCheck: 插入函數(shù)參數(shù)的類型,以備在下一個(gè)步驟中做匹配檢測(cè)。 主要的類, 建立符號(hào)表: Class CSymbolTable: 主要成員變量: BucketListRec* hashTable[SIZE],把 Class BucketListRec 類的對(duì)象通過hash函數(shù)找到位置后插入。 BucketListRec* next。 // memory location for variable BOOL bArray。 // function scope enum TokenType type。 Class BucketListRec: 15 主要成員變量: CString name。 本程序在語義分析部分設(shè)計(jì)主要包括兩方面的內(nèi)容,即建立符號(hào)表和類型檢查。語義分析能夠判斷運(yùn)算對(duì)象的類型是否匹配,變量是否重復(fù)聲明或沒有聲明就使用等錯(cuò)誤。詞法分析可以檢測(cè)出源程序中的非法字符,就好比自然語言中出現(xiàn)的錯(cuò)字和錯(cuò)詞。 編譯的各個(gè)階段都可能發(fā)現(xiàn)源程序中的錯(cuò)誤。如果靜態(tài)語義正確,則進(jìn)行正真的翻譯,即識(shí)別程序中各種語法成分的含義,并做相應(yīng)的語義處理,生成相應(yīng)的中間代碼或直接生成目標(biāo)代碼。動(dòng)態(tài)語義檢查在運(yùn)行時(shí)進(jìn)行,需要生成相應(yīng)的目標(biāo)代碼;而靜態(tài)語義檢查則在編譯時(shí)完成,它主要完成以下四個(gè)方面。即確定標(biāo)識(shí)符所對(duì)應(yīng)數(shù)據(jù)對(duì)象的數(shù)據(jù)類型,這部分工作有時(shí)也由詞法分析來完成。具體來說,其主要任務(wù)包括以下幾部分。amp。` | `return` expression `。` continue_stmt`continue` `。` var `=` expression `)` pound_stmt goto_stmt`goto` ID `。` | expression_stmt if_stmt`if` `(` expression `)` pound_stmt | `if` `(` expression `)` pound_stmt `else` pound_stmt while_stmt`while` `(` expression `)` pound_stmt for_stmt`for` `(` var `=` expression `。amp。` | `。` `printf` `(` `` STRING `` `)` `。` type_specifier`int` | `void` | `char`, actually this step is in declaration_list() fun_declarationtype_specifier ID `(` params `)` pound_stmt paramsparam_list | `void` | empty, `void` is thought as empty param_listparam_list `,` param | param paramtype_specifier ID | type_specifier ID `[` `]` pound_stmt`{` loal_declarations statement_list `}` | expression_stmt local_declarationslocal_declarations var_declaration | var_declaration `read` `(` var `)` `。 Grammar: programdeclaration_list declaration_listdeclaration_list declaration | declaration declarationvar_declaration | fun_declaration var_declarationtype_specifier ID(, ...)`。 // array size }。 // node function scope 12 BOOL bArray。 CString szName。 } kind。 union { StmtKind stmt。 // point to sibling node int lineno。 // point to child node CTreeNode* father。其輸出形式也有多種。其基本任務(wù)是根據(jù)語言的語法規(guī)則 (即描述該語言的上下文無關(guān)文法 ),分析源程序的語法結(jié)構(gòu) (即分析如何將這些單詞組成各種語法成分,如各種表達(dá)式、語句、函數(shù)或過程等 ),并在分析過程中,對(duì)源程序進(jìn)行 語法正確性檢查。編譯程序在完成了詞法分析之后,就進(jìn)入語法分析階段。 C 關(guān)鍵字表: auto double int struct break else long switch case enum register typedef char extern return union Const float short unsigned Continue for signed void Default goto sizeof volatile Do if static while 標(biāo)識(shí)符詞法 : identifier : nondigit identifier nondigit 11 identifier digit nondigit : one of _ a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z digit : one of 0 1 2 3 4 5 6 7 8 9 escape: \n, \r, \b, \07 語法分析模塊設(shè)計(jì) 在上一節(jié)中,實(shí)現(xiàn)了詞法分析程序的功能。 */, LOGICAL_OR/* || */, // others _EOF, _ID, _NUM, _STRING, _CHARACTER, _LABEL, _ERROR, _NONE }。 Class CScaner: 得到具體的的 token 類型,定義 TokenType 如下: enum TokenType { // reserved Keyword _AUTO, _DOUBLE, _INT, _STRUCT, _BREAK, _ELSE, _LONG, _SWITCH, _CASE, _ENUM, _REGISTER, _TYPEDEF, _CHAR, _EXTERN, _RETURN, _UNION, _CONST, _FLOAT, _SHORT, _UNSIGNED, _CONTINUE, _FOR, _SIGNED, _VOID, 輸出信息 10 _DEFAULT, _GOTO, _SIZEOF, _VOLATILE, _DO, _IF, _STATIC, _WHILE, _READ, _WRITE, _PRINTF, // operations ASSIGN, PLUS, MINUS, TIMES, DIV, MOD, BITWISE_AND, BITWISE_OR, BITWISE_NOT, LOGICAL_NOT, LT, GT, LPARAN, RPARAN, LBRACE, RBRACE, LSQUARE, RSQUARE, COMMA, DOT, SEMI, COLON, // plex operations EQ/* == */, NEQ/* != */, PLUS_PLUS/* ++ */, MINUS_MINUS/* */, PLUS_ASSIGN/* += */, MINUS_ASSIGN/* = */, TIMES_ASSIGN/* *= */, DIV_ASSIGN/* /= */, NGT/* = */, NLT/* = */, LOGICAL_AND/* amp。\39。39。\n39。詞法分析器的功能是輸入源程序,輸出單詞符號(hào)。 4) 進(jìn)行詞法檢查,如果出現(xiàn)錯(cuò)誤,記錄出錯(cuò)信息并報(bào)告。 2) 剔除無用的空白字符、制表符、回車字符以及其 他與輸入介質(zhì)相關(guān)的非實(shí)質(zhì)性字符 。詞法分析的過程是線性的從頭至尾掃描一遍 ,復(fù)雜度較低 ,易實(shí)現(xiàn)。所以在詞法分析階段 ,詞法規(guī)則成為重要的研究對(duì)象。 系統(tǒng)詳細(xì)設(shè)計(jì) 系統(tǒng)設(shè)計(jì)基本思路 基于 C語言源程序分析器的開發(fā)在可行性分析的基礎(chǔ)上進(jìn)一步全面、深入的分析,弄清C 語言的編譯原理及運(yùn)行狀況,在編譯程序工作的五個(gè)階段中 ,每個(gè)階段都必須遵從功能等價(jià)的原則。一個(gè)健全的類型系統(tǒng)可以消除對(duì)動(dòng)態(tài)類型檢查的需要,因?yàn)樗梢詭椭覀冹o態(tài)地確定這些錯(cuò)誤不會(huì)在程序運(yùn)行的時(shí)候發(fā)生。 類型檢查具有發(fā)現(xiàn)程序中的錯(cuò)誤的功能。然后,編譯器需要確定這些類型表達(dá)式是否滿足一組邏輯規(guī)則。 符號(hào)表中信息欄的具體組織和安排取決于所翻譯的具體語言與目標(biāo)機(jī)器(的字長(zhǎng)和指令系統(tǒng))。因此,采用多種符號(hào)表并讓語法 —— 語義分析程序負(fù)責(zé)查填工作是比較妥當(dāng)?shù)?。例如?XYZ可能既是一個(gè)實(shí)變量名又是一個(gè)標(biāo)號(hào)名,或者又是某個(gè)結(jié)構(gòu)型數(shù)據(jù)的一個(gè)分量名。也就是,當(dāng)掃描器碰到一個(gè)標(biāo)識(shí)符時(shí)就對(duì)它查填符號(hào)表,然后回送它在符號(hào)表中的位8 置作為單詞值。 過程 是否為程序的外部過程? 若為函數(shù),類型是什么 ? 其說明是否處理過? 是否遞歸? 形式參數(shù)是些什么?為了與實(shí)參進(jìn)行比較,必須把它們的種屬、類型信息同過程名聯(lián)系在一起。但編譯時(shí)登記在符號(hào)表中的各名字的性質(zhì)只能來自說明語句(包括隱含約定和標(biāo)號(hào)定義)或其它引用情形?,F(xiàn)今多數(shù)程序語言中的名字或者是用說明語句規(guī)定其性質(zhì),或者采用某種隱含約定(如 FORTRAN中凡以字符 I, J,? N開頭的標(biāo)識(shí)符代表整型變量名)。 符號(hào)表 符號(hào)表的信息欄中登記了每個(gè)名字的有關(guān)性質(zhì),如類型(整、實(shí)或布爾等)、種屬(簡(jiǎn)單變量、數(shù)組、過程等)、大小(長(zhǎng)度,即所需 的存儲(chǔ)單元字?jǐn)?shù))以及相對(duì)數(shù)(指分配給該名宇的存儲(chǔ)單元的相對(duì)地址)。有些快速編譯程序幾乎沒有中間代碼,但是為了使目標(biāo)代碼的優(yōu)化比較容易實(shí)現(xiàn),獨(dú)立于機(jī)器進(jìn)行,許多編譯程序都采用了某種復(fù)雜性程度介于源程序語言和機(jī)器語言之間的中間語言。在此基礎(chǔ)上,根據(jù)尋找句柄策略的不同,便形成了不同的自底向上的語法分析方法。但若全部輸入符號(hào)已被移掉,而分析棧卻不能出現(xiàn)上述格局,則表明輸入符號(hào)串不是文法的一個(gè)句子,其中必定存在語法錯(cuò)誤。由于歸約,便得到了新的棧頂,此時(shí)再查看棧的頂部是否形成新的句柄:若是,再進(jìn)行歸約;反之 ,則繼續(xù)將后續(xù)的輸入符號(hào)移入棧內(nèi),并重復(fù)上述過程。 和自頂向下的分析過程一樣,實(shí)現(xiàn)自底向上的分析,通常也須使用一個(gè)分析棧來存放分析過程中所得的文法符號(hào)。 因此,欲實(shí)現(xiàn)自頂向下的語
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1