美文网首页
使用flex进行词法分析

使用flex进行词法分析

作者: 哆啦A梦没有毛 | 来源:发表于2019-06-17 18:31 被阅读0次

    第一步:

    安装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程序进行词法分析:

    • 直接输入语句运行(./exp1.out):
    • 通过管道将使用flex生成的exp1.yy.c文件作为该词法分析程序的输入(./exp1.out < exp1.yy.c | more):

    相关文章

      网友评论

          本文标题:使用flex进行词法分析

          本文链接:https://www.haomeiwen.com/subject/pkuzfctx.html