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

正文內(nèi)容

第三章詞法分析(已修改)

2025-08-13 12:52 本頁面
 

【正文】 國防科技大學(xué)計(jì)算機(jī)系 602教研室 第三章 詞法分析 ? 詞法分析的任務(wù):從左至右逐個(gè)字符地對源程序進(jìn)行掃描,產(chǎn)生一個(gè)個(gè)單詞符號(hào)。 ? 詞法分析器 (Lexical Analyzer) 又稱掃描器 (Scanner):執(zhí)行詞法分析的程序 國防科技大學(xué)計(jì)算機(jī)系 602教研室 對于詞法分析器的要求 一、詞法分析器的功能和輸出形式 ? 功能 :輸入源程序、輸出單詞符號(hào) ? 單詞符號(hào)的種類: ?基本字:如 begin, repeat, ? ?標(biāo)識(shí)符 ——表示各種名字:如變量名、數(shù)組名和過程名 ?常數(shù):各種類型的常數(shù) ?運(yùn)算符: +, , *, /, ? ?界符:逗號(hào)、分號(hào)、括號(hào)和空白 國防科技大學(xué)計(jì)算機(jī)系 602教研室 ? 輸出的單詞符號(hào)的表示形式 : (單詞種別,單詞自身的值 ) ? 單詞種別通常用整數(shù)編碼表示。 ?若一個(gè)種別只有一個(gè)單詞符號(hào),則種別編碼就代表該單詞符號(hào)。假定基本字、運(yùn)算符和界符都是一符一種。 ?若一個(gè)種別有多個(gè)單詞符號(hào),則對于每個(gè)單詞符號(hào),給出種別編碼和自身的值。 ?標(biāo)識(shí)符單列一種;標(biāo)識(shí)符自身的值表示成按機(jī)器字節(jié)劃分的內(nèi)部碼。 ?常數(shù)按類型分種;常數(shù)的值則表示成標(biāo)準(zhǔn)的二進(jìn)制形式。 國防科技大學(xué)計(jì)算機(jī)系 602教研室 二、詞法分析器作為一個(gè)獨(dú)立子程序 ? 詞法分析是作為一個(gè)獨(dú)立的階段,是否應(yīng)當(dāng)將其處理為一遍呢? ?作為獨(dú)立階段的優(yōu)點(diǎn):結(jié)構(gòu)簡潔、清晰和條理化,有利于集中考慮詞法分析一些枝節(jié)問題。 ?不作為一遍:將其處理為一個(gè)子程序 。 國防科技大學(xué)計(jì)算機(jī)系 602教研室 詞法分析器的結(jié)構(gòu) 預(yù)處理子程序 掃描器 輸入緩沖區(qū) 掃描緩沖區(qū) 單詞符號(hào) 輸入 列表 詞法分析器的設(shè)計(jì) 國防科技大學(xué)計(jì)算機(jī)系 602教研室 ? 輸入串放在輸入緩沖區(qū)中。 ? 預(yù)處理子程序:剔除無用的空白 、 跳格 、回車和換行等編輯性字符 。區(qū)分標(biāo)號(hào)區(qū) 、捻接續(xù)行和給出句末符等 ? 掃描緩沖區(qū) ↑ ↑ 起點(diǎn) 搜索 指示器 指示器 一、輸入、預(yù)處理 國防科技大學(xué)計(jì)算機(jī)系 602教研室 二、單詞符號(hào)的識(shí)別 :超前搜索 1 基本字識(shí)別 2 標(biāo)識(shí)符識(shí)別 3 常數(shù)識(shí)別 4 算符和界符的識(shí)別 國防科技大學(xué)計(jì)算機(jī)系 602教研室 三 、 狀態(tài)轉(zhuǎn)換圖 1 概念 ?狀態(tài)轉(zhuǎn)換圖是一張有限方向圖。 2 1 3 X Y ?結(jié)點(diǎn)代表狀態(tài),用圓圈表示 。 ?狀態(tài)之間用箭弧連結(jié),箭弧上的標(biāo)記 (字符 )代表射出結(jié)狀態(tài)下可能出現(xiàn)的輸入字符或字符類。 ?一張轉(zhuǎn)換圖只包含有限個(gè)狀態(tài),其中有一個(gè)為初態(tài),至少要有一個(gè)終態(tài)。 國防科技大學(xué)計(jì)算機(jī)系 602教研室 識(shí)別標(biāo)識(shí)符的狀態(tài)轉(zhuǎn)換圖 1 2 3 字母 其他 字母或數(shù)字 * 識(shí)別 整常數(shù) 的狀態(tài)轉(zhuǎn)換圖 1 2 3 數(shù)字 其他 數(shù)字 * ? 一個(gè)狀態(tài)轉(zhuǎn)換圖可用于識(shí)別 (或接受 )一定的字符串。 國防科技大學(xué)計(jì)算機(jī)系 602教研室 2 例子 ?助憶符 :直接用編碼表示不便于記憶,因此用助憶符來表示編碼。 國防科技大學(xué)計(jì)算機(jī)系 602教研室 單詞符號(hào) 種別編碼 助憶符 內(nèi)碼值 DIM 1 $DIM IF 2 $IF DO 3 $DO STOP 4 $STOP END 5 $END 標(biāo)識(shí)符 6 $ID 內(nèi)部字符串 常數(shù) ( 數(shù) ) 7 $INT 標(biāo)準(zhǔn)二進(jìn)制形式 = 8 $ASSIGN _ 9 $PLUS * 10 $STAR ** 11 $POWER , 12 $COMMA ( 13 $LPAR ) 14 $RPAR 國防科技大學(xué)計(jì)算機(jī)系 602教研室 1 2 3 4 5 6 7 8 9 10 11 12 13 0 空白 字母 字母或數(shù)字 非字母與數(shù)字 數(shù)字 非數(shù)字 數(shù)字 = + * 非 * , ( ) 其它 * * * * 國防科技大學(xué)計(jì)算機(jī)系 602教研室 ? 幾點(diǎn)重要限制 ——不必使用超前搜索 ?所有基本字都是保留字 。用戶不能用它們作自己的標(biāo)識(shí)符 ?基本字作為特殊的標(biāo)識(shí)符來處理 。不用特殊的狀態(tài)圖來識(shí)別 , 只要查保留字表 。 ?如果基本字 、 標(biāo)識(shí)符和常數(shù) (或標(biāo)號(hào) )之間沒有確定的運(yùn)算符或界符作間隔 , 則必須使用一個(gè)空白符作間隔 。 DO99K=1, 10 要寫成 DO 99 K=1, 10 國防科技大學(xué)計(jì)算機(jī)系 602教研室 3 狀態(tài)轉(zhuǎn)換圖的實(shí)現(xiàn) ? 思想:每個(gè)狀態(tài)結(jié)對應(yīng)一小段程序。 ? 做法 : 1)對不含回路的分叉結(jié),可用一個(gè) CASE語句或一組 IFTHENELSE語句實(shí)現(xiàn) GetChar( )。 if (IsLetter( )) {… 狀態(tài) j的對應(yīng)程序段 …。} else if (IsDigit( )) {… 狀態(tài) k的對應(yīng)程序段 …。} else if (ch=‘/’) {… 狀態(tài) l的對應(yīng)程序段 …。} else {… 錯(cuò)誤處理 …。} i j k l 字母 數(shù)字 \ 國防科技大學(xué)計(jì)算機(jī)系 602教研室 3 狀態(tài)轉(zhuǎn)換圖的實(shí)現(xiàn) 2)對含回路的狀態(tài)結(jié),可對應(yīng)一段由 WHILE結(jié)構(gòu)和 IF語句構(gòu)成的程序 . i 字母或數(shù)字 其它 j GetChar( )。 while (IsLetter( ) or IsDigit( )) GetChar( )。 … 狀態(tài) j的對應(yīng)程序段 … 國防科技大學(xué)計(jì)算機(jī)系 602教研室 3 狀態(tài)轉(zhuǎn)換圖的實(shí)現(xiàn) 3)終態(tài)結(jié)表示識(shí)別出某種單詞符號(hào),因此,對應(yīng)語句為 RETURN (C, VAL) 其中, C為單詞種別, VAL為單詞自身值 . 國防科技大學(xué)計(jì)算機(jī)系 602教研室 ? 全局變量與過程 1)ch 字符變量、存放最新讀入的源程序字符 2)strToken 字符數(shù)組,存放構(gòu)成單詞符號(hào)的字符串 3)GetChar 子程序過程,把下一個(gè)字符讀入到 ch 中 4)GetBC 子程序過程,跳過空白符,直至 ch 中讀入一非空白符 5)Concat 子程序,把 ch中的字符連接到 strToken 國防科技大學(xué)計(jì)算機(jī)系 602教研室 6)IsLetter和 IsDisgital 布爾函數(shù),判斷ch中字符是否為字母 和數(shù)字 7) Reserve 整型函數(shù),對于 strToken 中的字符串查找保留字表,若它實(shí)保留字則給出它的編碼,否則回送 0 8) Retract 子程序,把搜索指針回調(diào)一個(gè)字符位置 9)InsertId 整型函數(shù),將 strToken中的標(biāo)識(shí)符插入符號(hào)表,返回符號(hào)表指針 10)InsertConst 整型函數(shù)過程,將strToken中的常數(shù)插入常數(shù)表,返回常數(shù)表指針。 國防科技大學(xué)計(jì)算機(jī)系 602教研室 int code, value。 strToken := “ ”。 /*置 strToken為空串 */ GetChar()。 GetBC()。 if (IsLetter()) begin while (IsLetter() or IsDigit()) begin Concat()。 GetChar()。 end Retract()。 code := Reserve()。 if (code = 0) begin value := InsertId(strToken)。 return ($ID, value)。 end
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號(hào)-1