Lex詞法分析器生成工具
Lex是Lexical Analyzer Generator的縮寫,是Unix環(huán)境下非常著名的工具,主要功能是生成一個詞法分析器(scanner)的C源碼,描述規(guī)則采用正則表達(dá)式(regular expression)。
描述詞法分析器的文件*.l,經(jīng)過lex編譯后,生成一個lex.yy.c 的文件,然后由C編譯器編譯生成一個詞法分析器。詞法分析器,簡單來說,其任務(wù)就是將輸入的各種符號,轉(zhuǎn)化成相應(yīng)的標(biāo)識符(token),轉(zhuǎn)化后的標(biāo)識符 很容易被后續(xù)階段處理。
它被設(shè)計用來對輸入字符流進(jìn)行詞法處理。它接受一種高級的、面向問題的說明書,并用它匹配字符串中的字符、生成能夠識別正則表達(dá)式的程序。正則表達(dá)式通過用戶輸入的代碼說明書給入。Lex識別這些表達(dá)式,并且將輸入流分成一些匹配這些表達(dá)式的字符串。在這些字符串的分界處,用戶提供的程序片段被執(zhí)行。Lex代碼文件將正則表達(dá)式和程序片斷關(guān)聯(lián)。對每一條輸入到由Lex生成程序的表達(dá)式,相應(yīng)的代碼片段被執(zhí)行。
為了完成任務(wù),除了需要提供匹配的表達(dá)式以外,用戶還需要提供其它代碼,甚至是由其他生成器產(chǎn)生的代碼。用戶提供一般程序設(shè)計語言的代碼片斷完成程序識別表達(dá)式。因此,用戶自由編寫動作時,并不影響其編寫高層的表達(dá)式語言來匹配字符串表達(dá)式。這就避免迫使用戶使用字符串語言來進(jìn)行輸入分析時,也必須使用同樣的方法來編寫字符處理程序,而這樣做有時是不合適的。
Lex不是完整的語言,但是是一個新語言的生成器,它可以插入到各種不同的被叫做“宿主語言”的程序設(shè)計語言中。就像大多數(shù)目的語言可以生成在不同計算機硬件上運行的代碼,Lex可以生成不同的宿主語言。宿主語言用于Lex生成輸出代碼,也用于用戶插入程序片斷。這使得Lex適用于不同的環(huán)境和不同的使用者。每一個應(yīng)用程序可以是硬件、適用于該任務(wù)的宿主語言、用戶背景和局部接口屬性的直接結(jié)合。
現(xiàn)在,Lex唯一支持的宿主語言是C,盡管Fortran(形式為Ratfor)在過去也被支持。Lex自身存在于Unix、GCOS和OS/370上;但是Lex生成的代碼可以在任何適當(dāng)?shù)木幾g器上使用。
