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

时间:2018-04-05 15:36:38

标签: gcc compilation flex-lexer

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

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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