gcc在编译lex输出时给出printf错误

时间:2012-02-06 20:04:20

标签: lex flex-lexer

对于example.l lex文件,我收到以下错误。如果我发表评论printf它会消失。我认为lex规范的顶部可能包含%{%}之间的任意C代码。我需要能够在lex匹配之前打印一些输出。我做了什么以及如何解决它有什么问题?

$ cat example.l 

%{
#include <stdio.h>
printf("foobar\n");
%}

%%

.       ECHO;

$ lex example.l 
$ gcc -g -L/usr/lib/flex-2.5.4a -lfl -o example lex.yy.c
example.l:3: error: expected declaration specifiers or '...' before string constant
example.l:3: warning: data definition has no type or storage class
example.l:3: error: conflicting types for 'printf'
example.l:3: note: a parameter list with an ellipsis can't match an empty parameter name list declaration

1 个答案:

答案 0 :(得分:1)

如果你看一下这里的代码,你可以看到这里发生了两件事之一......或者你在一个没有意义的函数体内做#include,或者你在任何函数之外调用printf(),这同样是错误的。

现在,当你考虑到这是flex时,它就是后者。你可能正在拍摄更像这样的东西:

%{
#include <stdio.h>
%}

%%

.       ECHO;

%%

int main() {
    printf("foobar\n");
    while (yylex() != 0);
    return 0;
}