%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()中的任何内容。为什么呢?
答案 0 :(得分:0)
当您运行代码时,您可能会以交互方式运行它。默认情况下,flex将输入流设置为 stdin ,因此它会挂起所谓的“交互模式”,这样您就可以直接手动输入到程序中的输入
大多数程序使用的常规(并且flex也不例外)是 Ctrl D 来结束交互模式输入。当您输入输入时,按 Ctrl D ,您的程序应按预期完成执行。
将输入提供给程序的另一种方法是通过管道或文件。例如,
echo -e "Hello\nthere" | ./my-program
或
./my-program < some-file.txt
在这种情况下,文件的结尾(当您在交互模式下手动点击 Ctrl D 时发送的内容)在完成阅读后会发送到您的程序档案的内容。