Search code examples
flex-lexerlexlexical-analysis

Errors in definitions in Flex and Lex


I am writing a lexical analyser for a toy programming language with toy keywords. I wish to print "keyword" for every keyword the analyser bumps into. To make my code cleaner, I defined the term "keyword" for all keywords above the rule section.

%{
  #include <stdio.h>
%}
keyword program | begin | ... | end

where the ... implies rest of the keywords.

In the rules section, I wrote the following rule:

{keyword} {
   printf("keyword\n");
}

Then finally I wrote the main function and yywrap function. However, when I compile the generated lex.yy.c file, I get the following error.

use of undeclared identifier 'keyword'
    {keyword} {
     ^

Please help me with this error, I am new to this scanner-generating language.


Solution

  • You will get better answers here if you copy and paste the precise text of your program into your question. Otherwise, you force anyone answering to guess what the original text is. This is my guess:

    Probably the line that is being complained about was indented in your flex input file. Make sure that all rules start exactly at the left margin. (Any indented text is copied verbatim into the output file, as though it were C code. The most common use for this feature is to add comments to your Flex rules.)

    Also, you cannot use unquoted spaces in a macro definition; you would need:

    keyword  program|begin|...|end
    

    Otherwise, flex will throw an error when it expands the macro. (It didn't expand the macro in this case, presumably because of the first problem.)