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

正文內(nèi)容

高級(jí)語(yǔ)言編譯器中詞法分析器的設(shè)計(jì)與實(shí)現(xiàn)(編輯修改稿)

2025-07-22 14:21 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 分量按某種形式聯(lián)系起來(lái);形式參數(shù)標(biāo)志;若在COMMON或EQUVALENCE語(yǔ)句中(FORTRAN語(yǔ)言),把它和有關(guān)名字連接在一起;它是否已處理過(guò)(即標(biāo)志位“定義否”);是否對(duì)這個(gè)變量進(jìn)行過(guò)賦值(包括出現(xiàn)在輸人名表中)的標(biāo)志位;過(guò)程是否為程序的外部過(guò)程;若為函數(shù),類(lèi)型是什么;其說(shuō)明是否處理過(guò);是否遞歸;形式參數(shù)是些什么;為了與實(shí)參進(jìn)行比較,必須把它們的種屬、類(lèi)型信息間過(guò)程名聯(lián)系在一起。對(duì)于那些只使圖單一符號(hào)表的簡(jiǎn)單語(yǔ)言,對(duì)符號(hào)表填入新項(xiàng)的工作可由詞法分析程序 來(lái)完成。也就是,當(dāng)掃描器碰到一個(gè)標(biāo)識(shí)符時(shí)就對(duì)它查填符號(hào)表,然后回送它在符號(hào)表中的位置作為單詞值。但在某些語(yǔ)言中,甚至在同一過(guò)程段里允許不同一標(biāo)識(shí)符標(biāo)識(shí)各種不同對(duì)象。例如,XYZ既是一個(gè)實(shí)變量名又是一個(gè)標(biāo)號(hào)名,或者又是某個(gè)結(jié)構(gòu)型數(shù)據(jù)的一個(gè)分量名。在這種情況下,使用單一符號(hào)表或由詞法分析程序負(fù)責(zé)查填符號(hào)表都是非常不方便的。因此,釆用多種符號(hào)表并讓語(yǔ)法——語(yǔ)義分析程序負(fù)責(zé)查填工作是比較妥當(dāng)?shù)摹?對(duì)于詞法分析程序來(lái)說(shuō),只要求它凡碰到標(biāo)識(shí)符就直接送出此標(biāo)識(shí)符自身即可。符號(hào)表中信息欄的具體組織和安排取決于所翻譯的具體語(yǔ)言與目標(biāo)機(jī)器(的字長(zhǎng)和指令系統(tǒng)〕。為了進(jìn)行類(lèi)型檢査,編譯器需要給源程序的每一個(gè)組成成分賦予一個(gè)類(lèi)型表達(dá)式。然后,編譯器需要確定這些類(lèi)型表達(dá)式是否滿(mǎn)足一組邏輯規(guī)則。這些規(guī)則被稱(chēng)為源語(yǔ)言的類(lèi)型系統(tǒng)。類(lèi)型檢查具有發(fā)現(xiàn)程序中的錯(cuò)誤的功能。原則上,如果目標(biāo)代碼在保存元素值的同時(shí)保存了元素類(lèi)型的信息,任何檢查都可以動(dòng)態(tài)地進(jìn)行。一個(gè)健全的類(lèi)型系統(tǒng)可以消除對(duì)動(dòng)態(tài)類(lèi)型檢查的需要,因?yàn)樗梢詭椭覀冹o態(tài)地確定這些錯(cuò)誤不會(huì)在程序運(yùn)行的時(shí)候發(fā)生。 如果編譯器可以保證它接受的程序在運(yùn)行時(shí)刻不會(huì)發(fā)生類(lèi)型錯(cuò)誤,那么該語(yǔ)言的這個(gè)實(shí)現(xiàn)就被稱(chēng)為強(qiáng)類(lèi)型的。3 系統(tǒng)詳細(xì)設(shè)計(jì) 基于C語(yǔ)言源程序分析器的開(kāi)發(fā)在可行性分析的基礎(chǔ)上進(jìn)一步全面、深入的分析,弄清C語(yǔ)言的編譯原理及運(yùn)行狀況,在編譯程序工作的五個(gè)階段中,每個(gè)階段都必須遵從功能等價(jià)的原則。詞法規(guī)則與語(yǔ)法分析階段依據(jù)的語(yǔ)法規(guī)則一同構(gòu)成了一個(gè)語(yǔ)言的語(yǔ)法,而語(yǔ)法 則是從形”的角度衡量一個(gè)程序是否合法。所以在詞法分析階段,詞法規(guī)則成為重要的研究對(duì)象。詞法分析器所處理的對(duì)象即詞法分析程序的輸入數(shù)據(jù),實(shí)際上是源程序經(jīng)過(guò)編譯預(yù)處理,去掉多余的符號(hào)后而形成的代碼,這樣給詞法分析帶來(lái)方便。詞法分析的過(guò)程是線(xiàn)性的從頭至尾掃描一遍,復(fù)雜度較低,易實(shí)現(xiàn)。最后概括出要實(shí)現(xiàn)的幾個(gè)功能流程圖如下: 圖1 功能流程圖詞法分析程序需要完成的任務(wù)如下:1識(shí)別出源程序的各個(gè)語(yǔ)法單位;2剔除無(wú)用的空白字符、制表符、回車(chē)字符以及其他與輸入介質(zhì)相關(guān)的非實(shí)質(zhì)性字符;3過(guò)濾掉源程序中的注釋?zhuān)?進(jìn)行詞法檢查,如果出現(xiàn)錯(cuò)誤,記錄出錯(cuò)信總并報(bào)告。我們將編譯程序的重點(diǎn)放在中間代碼生成階段。詞法分析器的功能是輸入源程序,輸出單詞符號(hào)。這部分程序主要包括兩個(gè)類(lèi): Class CTlkenizer從一個(gè)字符串中(這個(gè)把一個(gè)文件看作是一個(gè)字符串,MFC中CfileCString)分離出 一個(gè)一個(gè)token,配上簡(jiǎn)單的類(lèi)型通過(guò)NextToken( )返回:define TT_EOL 39。\n39。define TT_EOF 1define TT_INTEGER 2define TT_REAL 3define TT_WORD 4define TT_STRING ’’’’define TT_CHAR ’ \’’得到具體的token類(lèi)型,定義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, _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, // interpunctions LPARAN, RPARAN, LBRACE, RBRACE, LSQUARE, RSQUARE, COMMA, DOT, SEMI, // operations ASSIGN, PLUS, MINUS, TIMES, DIV, MOD, BITWISE_AND, BITWISE_OR, BITWISE_NOT, LOGICAL_NOT, LT, GT, // interpunctions LPARAN, RPARAN, LBRACE, RBRACE, LSQUARE, RSQUARE, COMMA, DOT, SEMI, COLON, // plex operations 11 EQ/* == */, NEQ/* != */, PLUS_PLUS/* ++ */, MINUS_MINUS/* */, PLUS_ASSIGN/* += */, MINUS_ASSIGN/* = */, TIMES_ASSIGN/* *= */, DIV_ASSIGN/* /= */, NGT/* = */, NLT/* = */, LOGICAL_AND/* amp。amp。 */, LOGICAL_OR/* || */, // others _EOF, _ID, _NUM, _STRING, _CHARACTER, _LABEL, _ERROR, _NONE }。CScaner通過(guò)一個(gè)CMapCString, LPCSTR, enum TokenType, enum TokenType m_KeyIndex 把CString的關(guān)鍵字和TokenType對(duì)應(yīng),便于查找和反向查找。表1 C關(guān)鍵字表標(biāo)識(shí)符詞法:identifier :nondigitidentifier nondigitidentifier digitnondigit : 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 zA B C D E F G H I J K L M N O P Q R S T U V W X Y Zdigit : one of0 1 2 3 4 5 6 7 8 9escape:\n, \r, \b, \07 在上一節(jié)中,實(shí)現(xiàn)了詞法分析程序的功能。一個(gè)字符串形式的源程序經(jīng)過(guò)詞法分析,即被轉(zhuǎn)換為一串單詞符號(hào)。編譯程序在完成了詞法分析之后,就進(jìn)入語(yǔ)法分析階段。語(yǔ)法分析程序以單詞形式的源程序作為輸入或分析的對(duì)象。其基本任務(wù)是根據(jù)語(yǔ)言的語(yǔ)法規(guī)則(即描述該語(yǔ)言的上下文無(wú)關(guān)文法),分析源程序的語(yǔ)法結(jié)構(gòu)〔即分析如何將這些單 詞組成各種語(yǔ)法成分,如各種表達(dá)式、語(yǔ)句、函數(shù)或過(guò)程等〉,并在分析過(guò)程中,對(duì)源程序進(jìn)行語(yǔ)法正確性檢查。其分析結(jié)果是識(shí)別出無(wú)語(yǔ)法錯(cuò)誤的語(yǔ)法成分。其輸出形式也有多種。 語(yǔ)法分析模塊的核心部分設(shè)計(jì)如下:Class Cparser:定義CTreeNode,和Tiny例程類(lèi)似: define MAX_CHILDREN 3 class CTreeNode { public: CTreeNode* child[ MAX_CHILDREN ]。 // point to child node CTreeNode* father。 // point to father node CTreeNode* sibling。 // point to sibling node int lineno。 NodeKind nodekind。 union { StmtKind stmt。 ExpKind exp。 } kind。 enum TokenType type。 CString szName。 CString szScope。 // node function scope BOOL bArray。 // is this an array declaration int iArraySize。 // array size }。
點(diǎn)擊復(fù)制文檔內(nèi)容
職業(yè)教育相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1