为什么下面的flex代码不显示输出?

问题描述:

digit [0-9] 
letter [A-Za-z] 
%{ 
int count; 
%} 
%% 
    /* match identifier */ 
{letter}({letter}|{digit})* count++; 
%% 
int main(void) { 
yylex(); 
printf("number of identifiers = %d\n", count); 
return 0; 
} 

不起作用printf语句。 你能解释我应该在这段代码中包含什么吗?为什么下面的flex代码不显示输出?

+0

程序是否正确终止? – Jack

+0

no不终止。 –

+0

欢迎来到Stack Overflow。请尽快阅读[关于]和[问]部分,更急切地想知道如何创建MCVE([MCVE])。你已经提供了代码,这很好。您没有描述输入数据,也没有描述如何将数据提供给程序。你的解释“不工作printf语句”没有帮助。你应该更清楚你所观察到的。此外,请注意[tag:flex]与[tag:flex-lexer]不同 - 后者是用于Flex词法分析器(或词法分析器)的正确选项。另一个标签用于Adobe Web语言Flex。 –

如果你有yywrap错误 - 只需要添加%option noyywrap

digit [0-9] 
letter [A-Za-z] 
%{ 
    int count; 
%} 

%option noyywrap 

%% 
    /* match identifier */ 
{letter}({letter}|{digit})* count++; 
%% 

int main(void) { 
    yylex(); 
    printf("number of identifiers = %d\n", count); 
    return 0; 
} 

然后编译:

flex f.l 
gcc lex.yy.c 

运行和不要忘记在最后发送EOF(用Ctrl -D)

./a.out 
a a a 

number of identifiers = 3