【问题标题】:Lex (flex): how to provide input and where's output?Lex(flex):如何提供输入以及输出在哪里?
【发布时间】:2012-05-08 06:00:01
【问题描述】:

我对 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”,但显然没有用。以及输出是如何表示的?

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

【问题讨论】:

    标签: compiler-construction yacc lex flex-lexer


    【解决方案1】:

    我试过“./ADD try.c”

    ./ADD < try.c
    

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2021-12-26
        • 2012-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-12
        • 1970-01-01
        相关资源
        最近更新 更多