词法分析器构造工具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基础学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSS语法基础
- 下一篇: 超图数据集管理基本操作和添加删除属性表字