简单的flex程序不会在main()中执行这些行

时间:2016-11-18 18:52:32

标签: c flex-lexer

%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 个答案:

答案 0 :(得分:0)

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

大多数程序使用的常规(并且flex也不例外)是 Ctrl D 来结束交互模式输入。当您输入输入时,按 Ctrl D ,您的程序应按预期完成执行。

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

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

./my-program < some-file.txt

在这种情况下,文件的结尾(当您在交互模式下手动点击 Ctrl D 时发送的内容)在完成阅读后会发送到您的程序档案的内容。