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

Compiling simple token identifier using flex

我有一个基本的 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

我错过了什么?

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

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

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

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