




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第3章詞法分析基礎(chǔ)知識:PASCAL、C語言、正規(guī)表達式
正規(guī)文法、有限自動機知識點:詞法分析器的作用、地位
記號、模式詞法分析器的狀態(tài)轉(zhuǎn)換圖詞法分析
簡介3.1詞法分析程序與語法分析程序的關(guān)系3.2詞法分析程序的輸入與輸出3.3記號的描述和識別3.4詞法分析程序的設(shè)計與實現(xiàn)3.5軟件工具LEX小結(jié)2簡介任務(wù):把構(gòu)成源程序的字符串轉(zhuǎn)換成語義上關(guān)聯(lián)的記號序列編譯程序是在單詞的級別上來分析和翻譯源程序,因此,詞法分析是編譯的基礎(chǔ)本章內(nèi)容安排
討論用手工方式設(shè)計并實現(xiàn)詞法分析程序的方法和步驟詞法分析程序的作用詞法分析程序的地位源程序的輸入與詞法分析程序的輸出單詞符號的描述及識別詞法分析程序的設(shè)計與實現(xiàn)詞法分析程序自動生成工具LEX簡介3詞法分析程序的作用源程序由單詞組成,單詞是最小的語義單位詞法分析程序的作用:掃描源程序字符流按照源語言的詞法規(guī)則識別出各類單詞符號產(chǎn)生用于語法分析的記號序列詞法檢查創(chuàng)建符號表把識別出來的標識符插入符號表中與用戶接口的一些任務(wù):跳過源程序中的注釋和空白把錯誤信息和源程序聯(lián)系起來43.1詞法分析程序與語法分析程序的關(guān)系詞法分析程序與語法分析程序之間的三種關(guān)系詞法分析程序作為獨立的一遍詞法分析程序作為語法分析程序的子程序詞法分析程序與語法分析程序作為協(xié)同程序分離詞法分析程序的好處詞法分析的一些難點5詞法分析程序作為獨立的一遍輸出放入一個中間文件磁盤文件內(nèi)存文件字符串源程序字符詞法分析程序記號記號流源程序6詞法分析程序作為語法分析程序的子程序避免了中間文件省去了取送符號的工作有利于提高編譯程序的效率語法分析器詞法分析器取下一記號字符串源程序字符記號符號表7詞法分析程序與語法分析程序作為協(xié)同程序協(xié)同程序:如果兩個或兩個以上的程序,它們之間交叉地執(zhí)行,這些程序稱為協(xié)同程序。詞法分析程序與語法分析程序在同一遍中,以生產(chǎn)者和消費者的關(guān)系同步運行。P1P2喚醒P2喚醒P1喚醒P2喚醒P18分離詞法分析程序的好處可以簡化設(shè)計詞法程序很容易識別并去除空格、注釋,使語法分析程序致力于語法分析,結(jié)構(gòu)清晰,易于實現(xiàn)??梢愿倪M編譯程序的效率利用專門的讀字符和處理記號的技術(shù)構(gòu)造更有效的詞法分析程序。可以加強編譯程序的可移植性在詞法分析程序中處理特殊的或非標準的符號。9詞法分析的一些難點位置對準Fortran要求某些結(jié)構(gòu)出現(xiàn)在輸入行的固定位置空白不作為分隔符Fortran中空格是無意義的,可以隨便加入DO5I=1.25(賦值語句,DO5I是標識符)DO5I=1,25(循環(huán)語句,DO是關(guān)鍵字)關(guān)鍵字不保留PL/I語言的關(guān)鍵字不保留IFTHENTHENTHEN=ELSE;ELSEELSE=THEN103.2詞法分析程序的輸入與輸出一、詞法分析程序的實現(xiàn)方法二、設(shè)置緩沖區(qū)的必要性三、配對緩沖區(qū)四、詞法分析程序的輸出11一、詞法分析程序的實現(xiàn)方法利用詞法分析程序自動生成器從基于正規(guī)表達式的規(guī)范說明自動生成詞法分析程序。生成器提供用于源程序字符流讀入和緩沖的若干子程序利用傳統(tǒng)的系統(tǒng)程序設(shè)計語言來編寫利用該語言所具有的輸入/輸出能力來處理讀入操作利用匯編語言來編寫直接管理源程序字符流的讀入12二、設(shè)置緩沖區(qū)的必要性超前搜索:為了得到某一個單詞符號的確切性質(zhì),需要超前掃描若干個字符。例:有合法的FORTRAN語句:
DO99K=1,10和DO99K=1.10
為了區(qū)別這兩個語句,必須超前掃描到等號后的第一個分界符處。例:Pascal語言中:<>、:=、(*例:C語言中:==、/*、//、++
方便實現(xiàn)讀字符和退字符操作,提高詞法分析器的效率13三、配對緩沖區(qū)原因:不論緩沖器多大都不能保證單詞不被它的邊界打斷把一個緩沖器分為相同的兩半,每半各含N個字符,一般N=1KB或4KB。基本方法開始指針
向前指針……ifx=ythenj:=j+2;eof…14測試指針的過程(1)IF(向前指針在左半?yún)^(qū)的終點){讀入字符串,填充右半?yún)^(qū);向前指針前移一個位置;}ELSEIF(向前指針在右半?yún)^(qū)的終點){讀入字符串,填充左半?yún)^(qū);向前指針移到緩沖區(qū)的開始位置;}ELSE向前指針前移一個位置;15每半?yún)^(qū)帶有結(jié)束標記的緩沖器開始指針向前指針…ifx=ytheofenj:=j+2;eof
eof
基本方法的缺點:更新向前指針時要做二次測試改進:每半?yún)^(qū)帶有結(jié)束標記的緩沖器更新向前指針時只要做一次測試16測試指針的過程(2)向前指針前移一個位置;IF(向前指針指向eof){IF(向前指針在左半?yún)^(qū)的終點){
讀入字符串,填充右半?yún)^(qū);向前指針前移一個位置;};ELSEIF(向前指針在右半?yún)^(qū)的終點){
讀入字符串,填充左半?yún)^(qū);向前指針指向緩沖區(qū)的開始位置;};ELSE終止詞法分析;}17四、詞法分析程序的輸出——記號記號、模式和單詞記號:是指某一類單詞符號的種別編碼,如標識符的記號為id,數(shù)的記號為num等。模式:是指某一類單詞符號的構(gòu)詞規(guī)則,如標識符的模式是“由字母開頭的字母數(shù)字串”。單詞:是指某一類單詞符號的一個特例,如position是標識符。機內(nèi)表示外部表示構(gòu)詞規(guī)則1.關(guān)鍵字記號的種類2.標識符3.常數(shù)4.運算符5.分界符18記號的屬性詞法分析程序在識別出一個記號后,要把與之有關(guān)的信息作為它的屬性保留下來。記號影響語法分析的決策,屬性影響記號的翻譯。在詞法分析階段,對記號只能確定一種屬性關(guān)鍵字:一字一種或全體一種,前一種方法較好標識符:一般統(tǒng)歸一種,也可分為若干種常數(shù):一般統(tǒng)歸一種,也可按類型分種運算符:一符一種或一類一種分界符:一般用一符一種記號的屬性是指記號的特征或特性,反映特征或特性的值是屬性值一種一符則種別值可以認為是屬性值,一種多符則需給出屬性值19total:=total+rate*4的詞法分析結(jié)果<id,指向標識符total在符號表中的入口的指針><assign_op,-><id,指向標識符total在符號表中的入口的指針><plus_op,-><id,指向標識符rate在符號表中的入口的指針><mul_op,-><num,整數(shù)值4>203.3記號的描述和識別識別單詞是按照記號的模式進行的,一種記號的模式匹配一類單詞的集合。為設(shè)計詞法程序,對模式要給出規(guī)范、系統(tǒng)的描述。正規(guī)表達式和正規(guī)文法是描述模式的重要工具。二者具有同等表達能力正規(guī)表達式:清晰、簡潔正規(guī)文法:便于識別一、詞法與正規(guī)文法二、記號的文法三、狀態(tài)轉(zhuǎn)換圖與記號的識別21一、詞法與正規(guī)文法把源語言的文法G分解為若干子文法:G0、G1、G2、…、Gn——正規(guī)文法——上下文無關(guān)文法語法詞法詞法:描述語言的標識符、常數(shù)、運算符和標點符號等記號的文法語法:借助于記號來描述語言的結(jié)構(gòu)的文法文法?22二、記號的文法標識符常數(shù)整數(shù)無符號數(shù)運算符分界符關(guān)鍵字23標識符標識符定義為“由字母打頭的、由字母或數(shù)字組成的符號串”描述標識符集合的正規(guī)表達式:letter(letter|digit)*表示標識符集合的正規(guī)定義式:letterA|B|…|Z|a|b|…|zdigit0|1|…|9id
letter(letter|digit)*正規(guī)表達式?24把正規(guī)定義式轉(zhuǎn)換為相應(yīng)的正規(guī)文法
(letter|digit)*
=|(letter|digit)+
=|(letter|digit)
(letter|digit)*
=|letter(letter|digit)*|digit(letter|digit)*
=|(A|…|Z|a|…|z)(letter|digit)*
|(0|…|9)(letter|digit)*
=|A(letter|digit)*|…|Z(letter|digit)*
|a(letter|digit)*|…|z(letter|digit)*
|0(letter|digit)*|…|9(letter|digit)*
25標識符的正規(guī)文法
id
Arid|…|Zrid|arid|…|zridrid
|Arid|Brid|…|Zrid|arid|brid|…|zrid|0rid|1rid|…|9rid一般寫作:
id
letterridrid
|letterrid|digitrid26常數(shù)——整數(shù)描述整數(shù)結(jié)構(gòu)的正規(guī)表達式為:
(digit)+對此正規(guī)表達式進行等價變換:(digit)+=digit(digit)*(digit)*=|digit(digit)*整數(shù)的正規(guī)文法:
digits
digitremainder
remainder
|digitremainder
27常數(shù)——無符號數(shù)無符號數(shù)的正規(guī)表達式為:(digit)+(.(digit)+)?(E(+|-)?(digit)+)?正規(guī)定義式為digit0|1|…|9digits
digit+optional_fraction
(.digits)?optional_exponent
(E(+|-)?digits)?num
digits
optional_fraction
optional_exponent28把正規(guī)定義式轉(zhuǎn)換為正規(guī)文法
(digit)+(.(digit)+)?(E(+|-)?(digit)+)?=(digit)+(.(digit)+|)(E(+|-|)(digit)+|)=digit(digit)*(.digit(digit)*|)(E(+|-|)digit(digit)*|)num1表示無符號數(shù)的第一個數(shù)字之后的部分num2表示小數(shù)點以后的部分num3表示小數(shù)點后第一個數(shù)字以后的部分num4表示E之后的部分num5表示(digit)*digits表示(digit)+29無符號數(shù)分析圖digit(digit)*(.digit(digit)*|)(E(+|-|)digit(digit)*|)num3num2num1num4numnum
digit
num1num1
digit
num1|.num2|Enum4|num2
digit
num3num3
digit
num3|Enum4|num4
+digits|-digits|digit
num5digits
digit
num5num5
digit
num5|30無符號數(shù)的正規(guī)文法num
digitnum1num1
digitnum1|.num2|Enum4|num2
digitnum3num3
digitnum3|Enum4|num4
+digits|-digits|digitnum5digits
digitnum5num5
digitnum5|31無符號數(shù)4.6E-8的分析樹32運算符關(guān)系運算符的正規(guī)表達式為:<|<=|=|<>|>=|>正規(guī)定義式:relop
<|<=|=|<>|>=|>關(guān)系運算符的正規(guī)文法:relop<|<equal|=|<greater|>|>equalgreater
>equal
=33三、狀態(tài)轉(zhuǎn)換圖與記號的識別狀態(tài)轉(zhuǎn)換圖利用狀態(tài)轉(zhuǎn)換圖識別記號為線性文法構(gòu)造相應(yīng)的狀態(tài)轉(zhuǎn)換圖狀態(tài)集合的構(gòu)成狀態(tài)之間邊的形成34狀態(tài)轉(zhuǎn)換圖狀態(tài)轉(zhuǎn)換圖是一張有限的方向圖圖中結(jié)點代表狀態(tài),用圓圈表示。狀態(tài)之間用有向邊連接。邊上的標記代表在射出結(jié)狀態(tài)下,可能出現(xiàn)的輸入符號或字符類。123xy35標識符的狀態(tài)轉(zhuǎn)換圖標識符的文法產(chǎn)生式:id
letterridrid
|letterrid|digitrid標識符的狀態(tài)轉(zhuǎn)換圖012letter/digitletterother*36利用狀態(tài)轉(zhuǎn)換圖識別記號語句DO99K=1.10中標識符DO99K的識別過程:012letter/digitletterother*狀態(tài)0讀入D狀態(tài)1讀入O狀態(tài)1讀入9狀態(tài)1讀入K狀態(tài)1讀入=狀態(tài)2讀入9狀態(tài)137為線性文法構(gòu)造相應(yīng)的狀態(tài)轉(zhuǎn)換圖狀態(tài)集合的構(gòu)成對文法G的每一個非終結(jié)符號設(shè)置一個對應(yīng)的狀態(tài)文法的開始符號對應(yīng)的狀態(tài)稱為初態(tài)增加一個新的狀態(tài),稱為終態(tài)。狀態(tài)之間邊的形成對產(chǎn)生式AaB,從A狀態(tài)到B狀態(tài)畫一條標記為a的邊對產(chǎn)生式Aa,從A狀態(tài)到終態(tài)畫一條標記為a的邊對產(chǎn)生式A,從A狀態(tài)到終態(tài)畫一條標記為的邊38無符號數(shù)的右線性文法的狀態(tài)轉(zhuǎn)換圖numnum1num2num3num4num5digits024digit1digit3digit6digitother7digitEE5+/-digitdigit*other.othernum
digit
num1num1
digit
num1|.num2|Enum4|num2
digit
num3num3
digit
num3|Enum4|num4
+digits|-digits|digit
num5digits
digit
num5num5
digit
num5|393.4詞法分析程序的設(shè)計與實現(xiàn)步驟:給出描述該語言各種單詞符號的詞法規(guī)則畫出狀態(tài)轉(zhuǎn)換圖根據(jù)狀態(tài)轉(zhuǎn)換圖構(gòu)造詞法分析器一、文法及狀態(tài)轉(zhuǎn)換圖1.語言說明2.記號的正規(guī)文法3.狀態(tài)轉(zhuǎn)換圖二、詞法分析程序的構(gòu)造三、詞法分析程序的實現(xiàn)1.輸出形式2.設(shè)計全局變量和過程3.編制詞法分析程序40一、文法及狀態(tài)轉(zhuǎn)換圖語言說明標識符:以字母開頭的、后跟字母或數(shù)字組成的符號串。保留字:標識符的子集。無符號數(shù):同PASCAL語言中的無符號數(shù)。關(guān)系運算符:<、<=、=、<>、>=、>。標點符號:+、-、*、/、(、)、:、、;等。賦值號::=注釋標記:以‘/*’開始,以‘*/’結(jié)束。單詞符號間的分隔符:空格41記號的正規(guī)文法標識符的文法
id
letterridrid
|letterrid|digitrid無符號整數(shù)的文法
digits
digitremainderremainder
|digitremainder42無符號數(shù)的文法
num
digitnum1
num1
digitnum1|.num2|Enum4|
num2
digitnum3
num3
digitnum3|Enum4|
num4
+digits|-digits|digitnum5digits
digitnum5
num5
digitnum5|關(guān)系運算符的文法relop
<|<equal|=|<greater|>|>equalgreater
>
equal
=記號的正規(guī)文法(續(xù))43賦值號的文法assign_op
:equal
equal
=標點符號的文法single
+|-|*|/|(|)|:||;注釋頭符號的文法note
/starstar
*記號的正規(guī)文法(續(xù))44狀態(tài)轉(zhuǎn)換圖讀去注釋狀態(tài)錯誤處理狀態(tài)digitEother*35digit2digit4digit7digitdigit.E6+/-digit
other*
other*0letter1letter/digitother*8<=>other*9>=other*=:10=other*+/-/*/(/)/;/
/11*other*1213other轉(zhuǎn)入口出口入口
45二、詞法分析程序的構(gòu)造根據(jù)上述狀態(tài)轉(zhuǎn)換圖,再加上相應(yīng)的語義動作,就可以構(gòu)造出的詞法分析程序的算法框圖。46開始讀字符空白?YNToken:=‘’字母?Y
組合標識符R查保留字表保留字?YN輸出保留字輸出標識符N數(shù)字?Y組數(shù)R輸出無符號數(shù)N<?YN讀字符=?Y輸出<=N>?Y輸出<>NR輸出<>?Y讀字符=?Y輸出>=NR輸出>
:?Y讀字符=?Y輸出賦值號:=NR輸出冒號:N/?讀字符*?讀去注釋NR輸出斜杠/NYY轉(zhuǎn)入口N
標點符號?Y輸出標點符號N錯誤處理出口說明:R為一過程,其功能是向前指針回退一個字符;Token為字符數(shù)組,用于存放單詞符號
47三、詞法分析程序的實現(xiàn)輸出形式設(shè)計全局變量和過程編制詞法分析程序48輸出形式利用翻譯表,將識別出的單詞的記號以二元式的形式加以輸出二元式的形式:<記號,屬性>49正規(guī)表達式記號屬性ifif-thenthen-elseelse-idid符號表入口指針numnum常數(shù)表入口指針<relopLT<=relopLE=relopEQ<>relopNE>relopGT>=relopGE:=assign-op-++----**-//-((-))--;;-::-50設(shè)計全局變量和過程轉(zhuǎn)換圖中的每一狀態(tài),分別用一段程序?qū)崿F(xiàn)。如果某一狀態(tài)有若干條射出邊,則程序:讀一個字符根據(jù)讀到的字符,選擇標記與之匹配的邊到達下一個狀態(tài),即程序控制轉(zhuǎn)去執(zhí)行下一個狀態(tài)對應(yīng)的語句序列。51(1)C:字符變量,存放當(dāng)前讀進的字符。(2)iskey:整型變量(3)token:字符數(shù)組,存放單詞的字符串。(4)lexemebegin:字符指針,指向輸入緩沖區(qū)中當(dāng)前單詞的開始位置。(5)forward:字符指針,向前掃描指針。(6)buffer:字符數(shù)組,輸入緩沖區(qū)。(7)get_char:讀字符過程,每調(diào)用一次,讀進一個字符,并把它放入char中,且向前指針forward指向下一個字符。(8)get_nbc:過程,每次調(diào)用時,檢查char中是否為空字符,若是,則反復(fù)調(diào)用該過程,直到char進入一個非空字符為止。設(shè)計全局變量和過程(續(xù))52(9)cat:過程,每次調(diào)用把當(dāng)前char中的字符與token中的字符串連接起來。(10)letter和digit:布爾函數(shù),分別判斷char中的字符是否為字母或數(shù)字,若是則返回true,否則返回false。(11)retract:過程,向前掃描指針forward后退一個字符。(12)reserve:函數(shù),查保留字表,若此函數(shù)的返回值為0,則表示token中的字符串是標識符,否則為保留字。(13)DTB:十/二進制的轉(zhuǎn)換過程,它將token中的數(shù)字串轉(zhuǎn)換成二進制的數(shù)值表示。(14)table_insert:過程,將標識符插入符號表。(15)error:錯誤處理函數(shù)。(16)return:返回過程,收集并攜帶必要的信息返回調(diào)用程序。設(shè)計全局變量和過程(續(xù))53編制詞法分析程序(方法一)token=’’;get_char;get_nbc;SWITCH(C){CASE‘a(chǎn)’..‘z’:WHILE(letter||digit){cat;get_char;}retract;iskey=reserve;IFiskey==0{table_insert;return(ID,指向該標識符在符號表的入口指針);};ELSEreturn(關(guān)鍵字的記號,-);BREAK;54CASE‘0’..‘9’:WHILE(digit||‘.’||‘E’||‘+’||‘-’){cat;get_char;}retract;return(num,DTB(token));BREAK;CASE‘<’:get_char;IF(C==‘=’)return(relop,LE);ELSEIF(C==‘>’)return(relop,NE);ELSE{retract;return(relop,LT);}BREAK;CASE‘=’:return(relop,EQ);BREAK;CASE‘>’:get_char;IF(C==‘=’)return(relop,GE);ELSE{retract;return(relop,GT);}BREAK;編制詞法分析器(續(xù))55CASE‘:’:get_char;IF(C==‘=’)return(assign-op,-);retract;return(‘:’,-);BREAK;CASE‘+’:return(‘+’,-);BREAK;CASE‘-’:return(‘-’,-);BREAK;CASE‘(’:return(‘(’,-);BREAK;CASE‘)’:return(‘)’,-);BREAK;CASE‘;’:return(‘;’,-);BREAK;編制詞法分析器(續(xù))56CASE‘/’:get_char;IF(C==‘*’){loop_1:get_char;WHILE(!‘*’)get_char;get_char;IF(C==‘/’)BREAK;GOTOloop_1;};ELSE{retract;return(‘/’,-);};BREAK;//endofcase‘/’DEFAULT:error();}//endofswitch編制詞法分析器(續(xù))57編制詞法分析器(方法二)token=’’;B=1;state=0;WHILE(B){get_char;get_nbc;SWITCH(state){CASE0:SWITCH(C){CASE‘a(chǎn)’..’z’:cat;stata=1;BREAK;CASE‘0’..’9’:cat;state=2;BREAK;CASE‘<‘:state=8;BREAK;……CASE‘+’:return(‘+’,-);BREAK;……}CASE1:SWITCH(C){CASE‘a(chǎn)’..’z’:cat;state=1;BREAK;CASE‘0’..’9’:cat;state=1;BREAK;DEFAULT:……/*處理標識符和關(guān)鍵字程序*/;B=0;BREAK;}CASE2:………}}583.5軟件工具LEX使用LEX的流程:LEX源程序lex.lLEX編譯器Lex.yy.clex.yy.cC編譯器Lex.yy.o或a.out字符流源程序a.out記號序列Lex.yy.o可以和其它程序的目標代碼連接a.out是可執(zhí)行的目標程序,可以作為獨立運行的詞法分析器59說明部分%%翻譯規(guī)則%%輔助過程主要內(nèi)容一、LEX源程序1.說明部分2.翻譯規(guī)則3.輔助過程二、LEX的工作原理1.LEX的工作過程2.處理二義性問題的兩條規(guī)則3.LEX工作過程舉例60一、LEX源程序——1.說明部分包括:變量說明標識符常量說明正規(guī)定義正規(guī)定義中的名字可在翻譯規(guī)則中用作正規(guī)表達式的成分C語言的說明必須用分界符“%{”和“}%”括起來。出現(xiàn)在括號中的任何東西都直接抄寫到詞法分析器Lex.yy.c中,不作為正規(guī)定義和翻譯規(guī)則的一部分。在第三節(jié)中的輔助過程也按同樣方式處理61一、LEX源程序——2.翻譯規(guī)則形式:P1{動作1}P2{動作2}…Pn{動作n}Pi是一個正規(guī)表達式,描述一種記號的模式。動作i是C語言的程序語句,表示當(dāng)一個串匹配模式Pi時,詞法分析器應(yīng)執(zhí)行的動作。62一、LEX源程序——3.輔助過程對翻譯規(guī)則的補充翻譯規(guī)則部分中某些動作需要調(diào)用的過程,如果不是C語言的庫函數(shù),則要在此給出具體的定義。這些過程也可以存入另外的程序文件中,單獨編譯,然后和詞法分析器連接裝配在一起。63LEX源程序舉例LEX生成的詞法分析器的執(zhí)行:最長匹配原則傳遞單詞的屬性,是把屬性值賦給全程變量yylval正規(guī)定義式:ififthenthenelseelserelop<|<=|=|<>|>|>=idletter(letter|digit)*numdigit+(.digit+)?(E(+|-)?digit+)?64相應(yīng)的LEX規(guī)格說明/*說明部分*/%{#include<stdio.h>/*C語言描述的標識符常量的定義,如LT、LE、EQ、NE、GT、GE、IF、THEN、ELSE、ID、NUMBER、RELOP*/externyylval;%}/*正規(guī)定義式*/delim[\t\n]ws{delim}+letter[A-Za-z]digit[0-9]id{letter}({letter}|{digit})*num{digit}+(\.{digit}+)?(E[+\-]?{digit}+)?%%65/*規(guī)則部分*/{ws}{/*沒有動作,也不返回*/}if{return(IF);}then{return(THEN);}else{return(ELSE);}{id}{yylval=install_id();return(ID);}{num}{yylval=install_num();
return(NUMBER);}“<”{yylval=LT;return(RELOP);}“<=”{yylval=LE;return(RELOP);}“=”{yylval=EQ;return(RELOP);}“<>”{yylval=NE;return(RELOP);}“>”{yylval=GT;return(RELOP);}“>=”{yylval=GE;return(RELOP);}%%相應(yīng)的LEX規(guī)格說明(續(xù))如果沒有return語句,則,處理完整個輸入之后才會返回??!66/*輔助過程*/intinstall_id(){/*把單詞插入符號表并返回該單詞在符號表中的位置yytext指向該單詞的第一個字符yyleng給出它的長度*/}intinstall_num(){/*類似于上面的過程,但單詞是常數(shù)*/}相應(yīng)的LEX規(guī)格說明(續(xù))67LEX解決沖突的方式根據(jù)規(guī)則定義的先后次序解決了例子中關(guān)鍵字和標識符的沖突最長匹配原則解決了例子中諸如“<”和“<=”的沖突68二、LEX的工作原理——1
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 養(yǎng)殖大棚建造合同范例
- 2024年甘肅臨夏七醫(yī)院招聘眼科防盲宣傳員考試真題
- 2025年度全國連鎖店鋪加盟合作協(xié)議書
- 2025年中國鼻毛修剪器行業(yè)市場需求預(yù)測及投資戰(zhàn)略規(guī)劃報告
- 城市規(guī)劃居間協(xié)議
- 2025年度解除教育信息化合作解除合同
- 水運報刊合同范本
- 2025年工程環(huán)保項目投資可行性研究分析報告
- 2025年度互聯(lián)網(wǎng)行業(yè)勞動合同管理制度與員工權(quán)益保護方案
- 北師大版六年級下冊數(shù)學(xué)全冊表格式教案
- 2021年阿里巴巴全球數(shù)學(xué)競賽預(yù)選賽試題及參考答案
- 龐中華硬筆字帖-2500常用字-硬筆書法-描紅-全集-打印版
- 上海市崇明區(qū)2025屆高三上學(xué)期一模 英語試卷(含答案)
- 突發(fā)事件應(yīng)急預(yù)案管理辦法培訓(xùn)課件
- 國家電投《新能源電站單位千瓦造價標準值(2024)》
- 原發(fā)性肺癌臨床路徑
- 學(xué)??萍脊?jié)活動方案
- 校園食品安全和膳食經(jīng)費管理方案3篇
- TSGD7002-2023-壓力管道元件型式試驗規(guī)則
- 九年級化學(xué)下冊 第12單元 化學(xué)與生活教案 (新版)新人教版
評論
0/150
提交評論