对于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
答案 0 :(得分:1)
如果你看一下这里的代码,你可以看到这里发生了两件事之一......或者你在一个没有意义的函数体内做#include
,或者你在任何函数之外调用printf()
,这同样是错误的。
现在,当你考虑到这是flex
时,它就是后者。你可能正在拍摄更像这样的东西:
%{
#include <stdio.h>
%}
%%
. ECHO;
%%
int main() {
printf("foobar\n");
while (yylex() != 0);
return 0;
}