代码之家  ›  专栏  ›  技术社区  ›  SuzLy

使用flex编译简单令牌标识符

  •  0
  • SuzLy  · 技术社区  · 6 年前

    我有一个基本的lex文件:

    %{
    
    /* Declarations section */
    #include <stdio.h>
    void showToken(char *);
    
    %}
    
    %option yylineno
    %option noyywrap
    digit           ([0-9])
    whitespace      ([\t\n ])
    
    %%
    
    {digit}+                    showToken("number");
    {whitespace}                ;
    .       printf("Lex doesn't know what that is!\n");
    
    %%
    
    void showToken(char * name)
    {
         printf("Lex found: %s, %s", name, yytext);
    }
    

    我已经安装了gcc和flex。 我编译以下命令:

    flex example.lex
    gcc -ll lex.yy.c
    

    但我得到了一个错误:

     /usr/lib/gcc/x86_64-pc-cygwin/6.4.0/../../../../x86_64-pc-cygwin/bin/ld: cannot find -ll
     collect2: error: ld returned 1 exit status
    

    我错过了什么?

    2 回复  |  直到 6 年前
        1
  •  2
  •   phlogratos    6 年前

    要使用您需要提供的flex库 -lfl 而不是 -ll

    flex example.lex
    gcc -lfl lex.yy.c
    

    -ll公司 只有在使用原始的lex命令及其库时才有效。cygwin只包含免费gnu版本flex。

        2
  •  0
  •   SuzLy    6 年前

    我的答案是明确地写“gcc-L”C:\GnuWin32\lib“-lfl lex.yy.C”。