flex-lex:如果前面有东西就匹配r

Flex-lex: Match r if there is something in front of it

使用弹性,

前面有东西怎么匹配

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

我试过了

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

但是没用。

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

如果您只想在某些特定上下文中识别某些标记,您可以使用 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 标记化模型。