編譯原理 flex實現詞法分析器

2021-09-29 17:44:38 字數 2874 閱讀 2242

flex介紹

flex是乙個生成詞法分析器的工具,它可以利用正規表示式來生成匹配相應字串的c語言**,其語法格式基本同lex相同。

單詞的描述稱為模式(lexical pattern),模式一般用正規表示式進行精確描述。flex通過讀取乙個有規定格式的文字檔案,輸出乙個c語言源程式。

fex的輸入是檔案或輸入裝置,這些輸入中的資訊以正規表示式和c**的形式組成,這些形式被稱為規則(rule);

當可執行檔案被執行時,其分析輸入中可能存在的符合規則的內容,當找到任何乙個正規表示式相匹配內容時,相應的c**將被執行。

fex的輸入檔案由3段組成,用一行中只有%%來分隔;

定義: definition%%

規則: rules%%

使用者**:code

定義部分

其中定義有變數宣告,正規表示式宣告;

%

表示式名稱表示式在使用時需要將表示式名稱用{}括起來;

乙個規則一行

正規表示式

動作函式可以呼叫在使用者**中定義的

下面有小例子

操作例子

1、在減壓的目錄下建立乙個以.l結尾的檔案我這裡建立的是lex.l,使用記事本開啟檔案(當然也可以使用別的了),編輯。在這裡,就使用簡單例子簡潔說明一下:

%

digit [0-

9]ointeger [1-

9]*%

%\n

.[ \t]+%

%int

main()

intyywrap()

13

14520

3、在專案目錄下,dos 命令提示符下(cmd)。執行win_flex ‐‐nounistd lex.l(lex.l為你的專案名),執行成功會生成乙個lex.yy.c檔案。

對c程式進行編譯執行:

詞法分析器

首先寫正規表示式

例如:

單位整數:digit [0-9]

整數:ointeger [1-9]*

因此,需要根據各詞的特徵將正規表示式寫出來。

參考文獻

編譯原理(龍書)

編譯原理 詞法分析器

1 從源程式檔案中讀入字元。2 統計行數和列數用於錯誤單詞的定位。3 刪除空格類字元,包括回車 製表符空格。4 按拼寫單詞,並用 內碼,屬性 二元式表示。屬性值 token 的機內表示 5 如果發現錯誤則報告出錯 6 根據需要是否填寫識別符號表供以後各階段使用 int tag 0 設立標誌 一開始本...

編譯原理c 實現詞法分析器

根據設計的dfa完成手工詞法分析器的c 實現 共有四組測試樣例,要求格式完全一致。int main int main float i 1 1.005e 3 this is remark line1 type,int line1 keyword,main line1 bracket,line1 bra...

編譯原理,例 詞法分析器

編譯原理課作業要求自己寫乙個詞法分析器,我嘗試寫了一下。詞法分析 電腦科學中將字串行轉換為單詞 token 序列的過程。進行詞法分析的程式或者函式叫作詞法分析器 lexical analyzer 也叫掃瞄器 scanner 詞法分析器一般以函式的形式存在,供語法分析器呼叫。完成詞法分析任務的程式稱為...