2016-11-18 49 views
0
%option noyywrap 

%{ 
#include <stdio.h> 
#include <string.h> 

int chars=0, lines=0; 
%} 

binary [01]+ 

%% 

{binary} {ECHO; printf("\n"); chars++; } 
\n {lines++; chars++;} 

%% 

int main() { 
yylex(); 
printf(" %d chars and %d lines\n", chars, lines); 
return 0; 
} 

我已经写了这个,我希望它打印每0和1,并打印了我在控制台上写了多少字符和线。它确实回显1和0,但main()中没有任何内容被打印出来。为什么?简单的柔性程序不会执行主线()

+1

你如何为这个程序提供输入?也许'printf'永远不会到达,因为'yylex'没有返回? – templatetypedef

+1

@JonathanLeffler我同意 - 我想知道他们是否只是交互式运行程序,而不是按CTRL + D或类似的东西。 – templatetypedef

+0

当我编译代码并在文件上运行它时:'flex fl37.l; gcc -o fl37 lex.yy.c',然后运行它:'./fl37

回答

0

当你运行你的代码时,你可能会交互地运行它。默认情况下,flex会将输入流设置为stdin,因此它会挂在所谓的“交互模式”中,它允许您手动将输入直接输入到程序中。

公约大多数程序使用(和Flex也不例外)是按Ctrld结束交互方式输入。当你输入你的输入时,按CtrlD并且你的程序应该按照预期完成执行。

将输入输入到程序中的另一种方法是通过管道或文件。例如,

echo -e "Hello\nthere" | ./my-program 

./my-program < some-file.txt 

在这种情况下,文件的末尾(当你手动打按Ctrl在交互模式d什么被发送)被发送到你的程序时它已经完成读取文件的内容。