使用flex,
当你面前有什么东西时,你如何匹配。
例如:如果在D打印之前有R
我试过
{something}/D {printf("V");}
但它不起作用。
答案 0 :(得分:0)
那不是(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标记化模型。