0

我对 Flex 非常陌生,我被困在这个早期阶段。我有一个 Lex 文件 20.l,其内容是

%{
/* a Lex program that adds line numbers
   to lines of text, printing the new text
   to the standard output
*/
#include <stdio.h>
int lineno = 1;
%}
line .*\n
%%
{line} { printf("%5d %s", lineno++, yytext); }
%%
main()
{ yylex(); return 0; }

我从教科书中复制了代码(它没有告诉我如何在这里处理我的问题)。我已经做好了

flex 20.l

并得到文件 lex.yy.c。然后我编译它

gcc lex.yy.c -o ADD -lfl

并得到可执行文件 ADD。

现在如何使用此 ADD 将行号添加到其他文本文件?例如,如果输入文件名为“try.c”,我应该使用什么命令?我试过“./ADD try.c”,但显然没有用。以及如何表示输出?

谢谢你。我知道这真的是一个愚蠢的问题,但似乎没有人在网上教如何做到这一点......

4

2 回答 2

2

我试过“./ADD try.c”

./ADD < try.c

输出出现在标准输出上。如果您想要不同的文件处理,您可以编写自己的 main()。

于 2012-05-08T08:23:25.900 回答
1

要启用 ./ADD try.c 即不使用重定向,您可以在用户代码部分使用以下代码替换您的 main:

void main (int argc, char **argv)
{
    if (argc>0)
        yyin =fopen(argv[0], "r");
    else
        yyin = stdin;

    yylex();
}

您可以增强输入参数选项解析以获得更好的输入和输出控制。

于 2012-05-15T04:09:29.907 回答