【问题标题】:Having command line arguments to flex as search strings将 flex 的命令行参数作为搜索字符串
【发布时间】:2013-03-25 15:00:12
【问题描述】:

我使用 flex(不是 Adob​​e 类型的 linux/unix)来生成小型扫描仪。过去我一直使用静态搜索字符串。我现在想提供一个命令行提供的搜索字符串,方法是通过 getopt 提供一个字符串,然后能够使用它进行搜索。

旧的搜索方式是:

.*"_"\n      ECHO;

查找以下划线结尾的行。

现在我想这样搜索:

.*<arbitrary string>.*\n    ECHO;

我不知道如何让 flex 接受 &lt;arbitrary string&gt;。我可以通过 getopt 获得它,但我无法让 flex 接受我的语法。

我正在做的是针对我遇到的特殊问题的特殊用途非常有限的 grep。

任何帮助将不胜感激。

【问题讨论】:

  • 哎呀,你的处理器刚刚吃掉了我在问题中的 项。
  • 格式固定.. 你能举一个完整的例子吗? (以下划线结尾的行)

标签: linux flex-lexer


【解决方案1】:
.*\n { if(strstr(yytext, "arbitrary string")) ECHO; else REJECT; }

如果 yytext 不包含“任意字符串”,则 REJECT 语句将跳至下一条规则。这当然不会提供与在编译时已知搜索字符串相同的性能。如果您正在实现自己的 grep 程序,glibc 中的 regcomp()/regexec() 可能比 flex 更快。

【讨论】:

    猜你喜欢
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-04
    • 2013-05-02
    • 2014-12-11
    相关资源
    最近更新 更多