日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

词法分析器构造工具Flex基础学习

發布時間:2025/4/14 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 词法分析器构造工具Flex基础学习 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Flex是一個生成詞法分析器的工具,它可以利用正則表達式來生成匹配相應字符串的C語言代碼,其語法格式基本同Lex相同。

單詞的描述稱為模式(Lexical Pattern),模式一般用正規表達式進行精確描述。FLEX通過讀取一個有規定格式的文本文件,輸出一個C語言源程序。

FLEX的輸入文件稱為LEX源文件,它內含正規表達式和對相應模式處理的C語言代碼。LEX源文件的擴展名習慣上用.l表示。FLEX通過對源文件的掃描自動生成相應的詞法分析函數int yylex(),并將之輸出到名規定為lex.yy.c的文件中。實用時,可將其改名為lexyy.c。該文件即為LEX的輸出文件或輸出的詞法分析器。也可將int yylex()加入自已的工程文件中使用。

LEX對源文件的格式要求非常嚴格,比如若將要求頂行書寫的語句變成非頂行書寫就會產生致命錯誤。而LEX本身的查錯能力很弱,書寫時一定注意。

LEX的源文件由三個部份組成,每個部分之間用頂行的“%%”分割,其格式如下:

定義部份
%%
規則部份
%%
用戶附加C語言部份


模式宏定義實際是對識別規則中出現的正規式的輔助的影。如語言的字母可定義為:
? ? Letter [a-zA-Z]
數字可以定義為:
? ? digit[0-9]

除宏定義外,定義部分的其余代碼必須用符號%{ 和 %} 括起來。另外,flex使用的C語言庫文件和外部變量以及部分聲明的函數,也應分別置于%{ 和 %} 之內。
?

寫一個簡單基本.l文件如下;flextest.l;

%{ #include "stdio.h" #include "stdlib.h" void print(); int _tmain(int argc,_TCHAR*argv[]); int num_digit=0,num_letter=0,num_enter=0; %} DIGIT [0-9] LETTER [A-Za-z] %%{DIGIT} {num_digit++;} {LETTER} {num_letter++;} %% int _tmain(int argc, _TCHAR* argv[]) { yyin=fopen("ccx_test1.c","r"); yylex(); printf("num=%d,letter=%d,enter=%d", num_digit,num_letter,num_enter); return 0; } int yywrap() { return 1; }

然后生成C語言代碼;如果.l文件語法有錯則通不過;最后生成lex.yy.c;可將此文件用到自己工程中;

由此.l文件生成的c語言文件非常大,有46k之多;

就是自己編寫自己需要的詞法規則,然后生成詞法分析器C代碼,用到自己工程中;可干多種事情;參閱此,

https://blog.csdn.net/bcbobo21cn/article/details/106193648

總結

以上是生活随笔為你收集整理的词法分析器构造工具Flex基础学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。