C语言 为什么我在FLEX-LEXER代码中得到此错误?(未定义定义{IDF})

n3schb8v  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(44)

这里是flex的代码-用c语言编写

宣言

%{
#include<stdio.h>
%}

字符串
正则表达式

%%

first [A-Z]
body ([0-9a-zA-Z](?!__)|[_])*
end [0-9a-zA-Z]

IDF ({first}{body}{end})

{IDF}
{
    if ( yyleng > 10 ) {
        printf("Lexical Error : IDF LEN > 10 is equal to %s", yytext);
    } else {
        printf("IDF: %s ", yytext);
    }
}

%%


C代码的其余部分

int yywrap(){}

int main()
{
    printf("give idf : ");
    yylex();
    return 0;
}


我觉得问题就出在这个范围上,

first [A-Z]
body ([0-9a-zA-Z](?!__)|[_])*
end [0-9a-zA-Z]

IDF ({first}{body}{end})

{IDF}
{
    if ( yyleng > 10 ) {
        printf("Lexical Error : IDF LEN > 10 is equal to %s", yytext);
    } else {
        printf("IDF: %s ", yytext);
    }
}


我使用代码块,我尝试了这个代码在cmd flex test.c后,这一行我得到了错误未定义的定义{IDF}

k3fezbri

k3fezbri1#

命名正则表达式的定义在定义部分(第一个),而不是第二个。
您需要将第一个%%移动到IDF的定义之后。
第二个部分叫做翻译部分,这里唯一允许的是未命名的正则表达式和后面的操作。

相关问题