【问题标题】:Flex-lex: Match r if there is something in front of itFlex-lex:如果前面有东西,则匹配 r
【发布时间】:2017-11-15 21:07:47
【问题描述】:

使用弹性,

前面有东西怎么匹配。

例如:如果在 D 之前有 R 打印一些东西

我试过了

{something}/D {printf("V");}

但它不起作用。

【问题讨论】:

    标签: flex-lexer


    【解决方案1】:

    这不是 (f)lex 的工作方式。 (F)lex 是一个标记器;它将输入拆分为连续的标记。在输入中的每个点,它都会从该点开始选择适当的标记;下一个令牌将从前一个令牌的末尾开始。

    如果您只想在某些特定上下文中识别某些标记,您可以使用start conditions,但您有责任注意上下文变化。因此,例如,您可以在与以R 结尾的任何令牌关联的操作中更改为不同的开始条件:

    %x AFTER_R
    %%
    [[:alpha:]]+   { if (yytext[yyleng-1] == 'R') BEGIN(AFTER_R);
                     /* handle this token */
                   }
      /* Etc. for other patterns which might end with an R */
    <AFTER_R>"D"   { puts("Found a D after an R"); }
    

    过度使用启动条件会使词法描述文件难以阅读和调试;这可能表明您的问题不适合 (f)lex 标记化模型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-23
      • 2016-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      • 2020-10-13
      相关资源
      最近更新 更多