第一步:
安裝flex程序,命令如下:
sudo apt-get install flex
第二步:
編輯exp1.l文件并保持,文件內(nèi)容如下:
%{
#include <stdio.h>
int lineno = 1;
%}
KEYWORD (else)|(if)|(int)|(return)|(void)|(while)
OPT [+]|[-]|[*]|[/]
RELOP [<]|[<][=]|[>]|[>][=]|[=][=]|[!][=]|[=]
LP \(
RP \)
LB \[
RB \]
LC \{
RC \}
COM ,
END ;
ID [a-zA-Z]*
NUM [0-9]*
SPACE [\n\t]
STR \"(.*)\"
OTHER [#\._]
%%
{KEYWORD} {
printf("\tget keyword:%10s\n",yytext);
}
{OPT} {
printf("\tget opt:%10s\n",yytext);
}
{RELOP} {
printf("\tget relop:%10s\n",yytext);
}
{LP} {
printf("\tget lp:%10s\n",yytext);
}
{RP} {
printf("\tget rp:%10s\n",yytext);
}
{LC} {
printf("\tget lc:%10s\n",yytext);
}
{RC} {
printf("\tget rc:%10s\n",yytext);
}
{LB} {
printf("\tget lb:%10s\n",yytext);
}
{RB} {
printf("\tget rb:%10s\n",yytext);
}
{COM} {
printf("\tget com:%10s\n",yytext);
}
{END} {
printf("\tget end:%10s\n",yytext);
}
{ID} {
printf("\tget id:%10s\n",yytext);
}
{NUM} {
printf("\tget NUM:%10s\n",yytext);
}
{SPACE} {
printf("\tget space\n");
}
{STR} {
printf("\tget string:%10s\n",yytext);
}
{OTHER} {
printf("\tget other:%10s\n",yytext);
}
%%
int main()
{
yylex();
return 0;
}
第三步:
使用flex將對應(yīng)的exp1.l文件翻譯為exp1.yy.c文件,命令如下:
flex -o exp1.yy.c exp1.l
第四步:
使用gcc將exp1.yy.c編譯為可執(zhí)行文件exp1.out,命令如下:
gcc exp1.yy.c -o exp1.out -lfl
第五步:
運(yùn)行exp1.out程序進(jìn)行詞法分析:
- 直接輸入語句運(yùn)行(./exp1.out):
- 通過管道將使用flex生成的exp1.yy.c文件作為該詞法分析程序的輸入(./exp1.out < exp1.yy.c | more):