如何在flex中使用REJECT?

时间:2011-09-20 01:26:33

标签: parsing lex flex-lexer

我们要清楚我正在谈论词汇分析工具。

对于以下输入:

aa bb cc dd

我需要解析器匹配以下子字符串:

aa bb

bb cc

cc dd

我有这个正则表达式:

[a-zA-Z]+[ ]+[a-zA-Z]+

但这只匹配:

aa bb

cc dd

我被告知REJECT命令可用于获取我需要的输出,但我不知道如何应用它。有人可以帮我一把吗?

2 个答案:

答案 0 :(得分:-1)

您可以使用正则表达式在整个集合中枚举n和n + 1对。

查看具有“贪婪”向后(或向前)匹配的分组。

答案 1 :(得分:-1)

这是针对该问题的一个Flex解​​决方案:

    %%
    "aa bb"         {printf( "matched aa bb\n");REJECT;}
    "bb cc"         {printf( "matched bb cc\n");REJECT;}
    "cc dd"         {printf( "matched cc dd\n");REJECT;}
    .               /*ignore anything else*/
    %%
    int main()
    {
    yylex();
    return 0;
    }


When I run the code on your input I get :
matched aa bb
matched bb cc
matched cc dd