For the example.l lex file I get the error below. If I comment out the printf
it goes away. I though that the top section of the lex specification could contain any arbitrary C code between the %{
and %}
. I need to be able to print some output before lex matches anything. What is wrong with what I have done and how do I fix it?
$ 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
If you look at the code here, you can see that one of two things is happening here ... either you are doing a
#include
inside a function body which doesn't make sense, or you are callingprintf()
outside any function, which is equally wrong.Now, when you take into account this is
flex
, it's the latter. You were probably shooting for something a little more like this: