使用flex进行词法分析

2019-06-17  本文已影响0人  哆啦A梦没有毛

第一步:

安装flex程序,命令如下:

sudo apt-get install flex

第二步:

编辑exp1.l文件并保持,文件内容如下:

%{
#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将对应的exp1.l文件翻译为exp1.yy.c文件,命令如下:

flex -o exp1.yy.c exp1.l

第四步:

使用gcc将exp1.yy.c编译为可执行文件exp1.out,命令如下:

gcc exp1.yy.c -o exp1.out -lfl

第五步:

运行exp1.out程序进行词法分析:

上一篇下一篇

猜你喜欢

热点阅读