将命令行参数作为搜索字符串进行flex

时间:2013-03-25 15:00:12

标签: linux flex-lexer

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

旧的搜索方式是:

.*"_"\n      ECHO;

查找以下划线结尾的行。

现在我想以这种方式搜索:

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

我不知道如何灵活接受<arbitrary string>。我可以通过getopt获得它,但我无法灵活地接受我的语法。

我正在做的是一个特殊目的非常有限的grep我遇到的一个特殊问题。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

.*\n { if(strstr(yytext, "arbitrary string")) ECHO; else REJECT; }

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