这里是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}
1条答案
按热度按时间k3fezbri1#
命名正则表达式的定义在定义部分(第一个),而不是第二个。
您需要将第一个
%%
移动到IDF
的定义之后。第二个部分叫做翻译部分,这里唯一允许的是未命名的正则表达式和后面的操作。