




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
工學第三章詞法分析詞法:描述語言的單詞符號的文法。語言的種類很多,因此需要用不同的詞法來描述他們。例如描述某一語言標識符的文法也稱為詞法。3.1詞法分析與詞法分析程序思考:詞法是哪類文法?詞法分析的任務:對輸入的字符串形式的源程序按順序進行掃描,根據源程序的詞法規則識別具有獨立意義的單詞(符號),并產生與其等價的屬性字流作為輸出。詞法分析程序定義:編譯程序中完成詞法分析任務的程序段,又稱詞法分析器或掃描器(scanner)。
詞法分析程序的功能識別出單詞(內部表示);詞法分析器(scanner)源程序屬性字流L1While(i!=j)doif(i>j)i=i-j;//求i,j的差值詞法分析器‘while’,‘(’,‘i’,‘!=’,‘j’,‘)’,‘do’,‘if’,‘(’,‘i’,‘>’,‘j’,‘)’,'i','=’,'i',’-’,'j',‘;'3.2詞法分析程序設計與實現詞法分析程序的輸入與輸出源程序的輸入與預處理單詞的識別詞法分析程序與詞法分析程序的接口詞法分析器的設計與實現單詞是語言中具有獨立意義的最小語法單位.單詞的種類
1.關鍵字(保留字):while、class、for、do2.標識符:a、m_a3.常數:無符號數、布爾常數、字符串常數等4.運算符:+、-、*5.界限符:逗號,分號,括號和引號種類的劃分是根據編譯的目標和方便設定的單詞常用的單詞內部形式:1、按單詞種類分類2、保留字和分界符采用一符一類3、標識符和常數的單詞屬性值為符號表入口指針(標識符、常數相關屬性很多)(單詞屬性,單詞值)屬性字:詞法分析程序的輸出形式-----單詞的內部形式單詞名稱標識符無符號常數(整)無符號浮點數布爾常數字符串常數保留字分界符類別編碼1234567單詞值符號表入口指針整數值數值0或1內部字符串保留字或內部編碼分界符或內部編碼1、按單詞種類分類2、保留字和分界符采用一符一類單詞名稱標識符無符號常數(整)無符號浮點數布爾常數字符串常數BEGINENDFORDO………:+*,(類別編碼123456789…….20212223…….單詞值符號表入口指針整數值數值0或1內部字符串----…..-----3.2.2源程序的輸入與預處理詞法分析器工作的第一步是接受輸入源程序。通常是把輸入的源程序引導至一個輸入緩沖區,并對輸入串進行預處理,然后才交付掃描器進行處理。S.P.(字符串)詞法分析程序輸入緩沖區的處理?輸入緩沖區的處理?顯然,無論緩沖區設定為多大,都不能保證單詞不會被它的邊界打斷,若有標識符TEST123,可能在緩沖區中成為:………….TES在這種情況下,即使讀到緩沖區的最后一個字符,但仍不能找到該單詞的右邊界,這時,若從外存上再讀一部分源程序進入緩沖區,則會將沒有處理過的字符(TES)沖掉。兩個半區互補使用為此,我們可將緩沖區分成相等的兩個區域:掃描緩沖區一分為二,互補使用。搜索指針從單詞起點開始搜索,如果遇到半區域的邊界,但尚未到達單詞的終點時,則可將后續的輸入字符裝入該緩沖區的另一半。單詞起點
搜索指針IfFatendoffirsthalf{reloadsecondhalf;F++;}ElseifFatendofsecondhalf{ reloadfirsthalf;moveFtobeginningoffirsthalf}ElseF++;輸入緩沖區兩個半區互補功能的實現算法源程序的預處理為了減輕詞法分析器實質性處理的負擔,因此源程序從輸入緩沖區進入詞法分析器之前,要先對源程序進行預處理,預處理子程序一般完成的主要功能是:過濾掉源程序中的注釋;剔除源程序中無用字符;進行宏替換;實現文件包含的嵌入和條件編譯的嵌入等。具有兩個緩沖區的詞法分析器結構源程序L輸入緩沖區X預處理子程序掃描緩沖區X1詞法分析器源程序L的屬性字流實現方案(編譯程序中實現方式):基本上有兩種1.詞法分析單獨作為一遍2.詞法分析程序作為單獨的子程序S.P.(字符串)詞法分析S.P.(符號串)語法分析第一遍第二遍單詞串優點:結構清晰、各遍功能單一缺點:生成中間文件,效率低S.P.(字符串)詞法分析程序語法分析程序取單詞單詞★詞法分析程序的設計與實現詞法規則正規表達式狀態轉換圖(最小DFA)1.構造識別單詞的狀態轉換圖(1)對程序語言的單詞按種類分別構造對應的狀態轉換圖.(2)對各類轉換圖合并,構成一個能識別語言所有單詞的狀態轉換圖.2.編程實現狀態轉換圖1.詞法及其狀態轉換圖例1假定語言X的字母表∑={A-Z,a-z,0-9,;,=}單詞符號定義如下: 1、標識符:字母打頭的字母數字串 2、無符號整數:無符號數字串 3、分界符:; 4、運算符:=標識符出口S1非字母數字字母字母、數字無符號整數出口S1非數字數字數字分界符出口S;運算符出口S=標識符無符號整數分界符S1非字母數字*字母字母、數字2非數字*數字數字;出口出錯其他讀字符返回S運算符==80;0134256eniL字母字母字母字母數字數字數字==;;0124563Line=80;1,‘Line’3,‘=’2,‘80’4,‘;’數字數字字母字母11==0003;;1輸入輸出2.狀態轉換圖的實現——構造詞法分析程序標識符無符號整數分界符運算符<1,標識符名字><2,整數值><3,“;”><4,“=”>例1假定語言X的字母表∑={A-Z,a-z,0-9,;,=}單詞符號定義如下: 1、標識符:字母打頭的字母數字串 2、無符號整數:無符號數字串 3、分界符:; 4、運算符:=標識符S1非字母數字字母字母、數字無符號整數S1非數字數字數字分界符出口S;運算符S=出口出口出口標識符出口S1非字母數字字母字母、數字If(ISLETTER){WHILE(ISLETTERORISDIGIT)DO{
當前字符放入一臨時字符數組;
GETNEXTCHAR;//從緩沖區取下一字符};UNGETCH;//回退一字符OUTPUT(1,標識符名字);};=80;eniLLine=80;==;;無符號整數出口S1非數字數字數字If(ISDIGIT){WHILEISDIGITDO{
當前字符放入一臨時字符數組;
GETNEXTCHAR;//從緩沖區取下一字符};UNGETCH;//回退一字符OUTPUT(2,整數);};=80;eniLLine=80;==;;分界符出口S;If(CH==‘;’)OUTPUT(3,“;”);If(CH==‘=’)OUTPUT(4,“=”);運算符S=出口標識符無符號整數分界符S1字母字母、數字2數字數字;出口出錯其他讀字符返回S運算符=例1程序語言的詞法分析程序GETNEXTCHAR();SWITCH(CHCODE);{CASE1:{WHILE(ISLETTERORISDIGIT)DO{SAVE();//當前字符放入一臨時字符數組;GETNEXTCHAR();//從緩沖區取下一字符};UNGETCH;//回退一字符OUTPUT(1,標識符名字);};BREAK;CASE2:{WHILEISDIGITDO{SAVE();//當前字符放入一臨時字符數組;GETNEXTCHAR;//從緩沖區取下一字符};UNGETCH;//回退一字符OUTPUT(2,整數);};BREAK;CASE3:OUTPUT(3,“;”);BREAK;CASE4:OUTPUT(4,“=”);BREAK;DEFAULT:Error();};標識符無符號整數分界符S1字母字母、數字2數字數字;出口出錯其他讀字符返回S運算符=采用面向對象的方法設計詞法分析器標識符無符號整數分界符S1字母字母、數字2數字數字;出口出錯其他讀字符返回S運算符=詞法規則正規表達式狀態轉換圖(最小DFA)合并狀態轉換圖編程實現狀態轉換圖合并狀態轉換圖文法、正規表達式、有限自動機有限自動機(最小化?)3.3
詞法分析程序的自動生成器—LEX(LEXICALAnalyzerGenerator)LEX是1972年在貝爾實驗室的UNIX上首先實現FLEX是1984年GNU工程推出,是LEX的擴充,并兼容LEX原理:LEX源程序(lex.l)S.P.字符串LEX編譯器詞法分析程序L(lex.yy.c)S.P.單詞字符串C編譯器可執行L詞法分析程序L(lex.yy.c)可執行L1.LEX源程序的結構一個LEX源程序具有如下形式:聲明部分%%識別規則%%輔助函數各部分之間用%%隔開,同時%%在最左邊.一、聲明部分
D1R1
D2R2∶∶DnRn
其中:R1,R2,……,Rn為正則表達式。D1,D2,……,Dn為正則表達式名字
例:C++標識符letterA|B|¨¨¨|Z|_
digit0|1|¨¨¨|9
idletter(letter|digit)*二、識別規則:是一串如下形式的LEX語句:
模式{動作}P1{A1}P2{A2}∶∶Pm{Am}Pi:定義在Σ∪{D1,D2,¨¨Dn}上的正規表達式,也稱模式。{Ai}:Ai為語句序列,它指出,在識別出模式為Pi的單詞以后,詞法分析器所應作的動作。其基本動作是返回單詞的類別編碼和其屬性。三、輔助函數定義模式動作需要的函數在這三部分中一和三為可選項,但是二是必須的
一對特殊的符號%{和%}:出現在括號內的所有內容都被復制到文件中,它們不會被當作正則定義處理。下面是識別某語言單詞符號的LEX源程序:例:LEX源程序AUXILIARYDEFINITIONS/*聲明部分*/letter[A—z]digit[0—9]%%RECOGNIYIONRULES/*識別規則*/“BEGIN”“END”“FOR”{RETURN(1,─)}{RETURN(2,─)}{RETURN(3,─)}RETURN是LEX過程,該過程將單詞傳給語法分析程序RETURN(C,LEXVAL)其中C為單詞類別編碼LEXVAL:標識符:TOKEN(字符數組)整常數:DTB(數值轉換函數,將TOKEN中的數字串轉換二進制值)其他單詞:無定義。“THEN”“ELSE”{
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 鋼化玻璃采購合同
- 屋面綠化箱涵施工合同
- 商鋪轉讓租賃合同書
- 工程分包木工合同
- 制作安裝承包合同
- 建房施工安全合同書
- 建筑工程拆除分包勞務合同
- 擴大勞務分包規定合同
- 彩鋼瓦施工合同協議書
- 土工材料采購合同
- 融資面試試題及答案
- 防菌材料創新-深度研究
- 2024山西三支一扶真題及答案
- 云南省衛生健康委所屬事業單位招聘工作人員真題2024
- 農莊合作協議書范本
- 幕墻UHPC施工專項方案 (評審版)
- 2025年職教高考《機械制圖》考試復習題庫(含答案)
- 醫院安保服務投標方案醫院保安服務投標方案(技術方案)
- 2025年中共中國華電集團有限公司招聘筆試參考題庫含答案解析
- 2024年415全民國家安全教育日知識競賽測試題庫
- 現代智慧物流園建議書可行性研究報告備案
評論
0/150
提交評論