在Lex中设置yyout为文件输出无法正常工作 [关闭]。

问题描述 投票:-1回答:1

我创建了一个程序,将行号追加到作为参数传递给程序的文本文件中。yyin工作正常,但yyout不工作,即从指定的文件中读取内容,但没有将任何内容写入输出文件,而是将输出显示到控制台。

%option noyywrap
%{
#include<stdio.h>
int linenumber=0;
%}
%%
^(.*)\n printf("%4d\t%s",++linenumber,yytext);
%%
int main()
{
yyin=fopen("test.c","r");
yyout=fopen("result.txt","w");
yylex();
}
flex-lexer lex
1个回答
1
投票

如果你想输出到 yyout你为什么要用 printf?

(F)lex 不会神奇地改变标准库的操作。printf 按照它的文档,继续打印到stdout。如果你想输出到 yyout您可以使用

fprintf(yyout, ...);

Flex只使用 yyout 本身 ECHO 动作,它是任何未匹配文本的默认动作,你可以在规则中明确地使用它。例如,你可以把这个动作写成:。

.*\n   { fprintf(yyout, "%4d\t", ++linenumber); ECHO; }
© www.soinside.com 2019 - 2024. All rights reserved.