0
に何かがある場合は、それの前に何かがあった場合、フレックスLEX:マッチフレックスを使用して、それの前
はどのようにあなたが何かを一致んrを。例えば
:Rは、Dの印刷何か
前にあった場合、私は
{something}/D {printf("V");}
を試してみましたが、それは動作しません。
に何かがある場合は、それの前に何かがあった場合、フレックスLEX:マッチフレックスを使用して、それの前
はどのようにあなたが何かを一致んrを。例えば
:Rは、Dの印刷何か
前にあった場合、私は
{something}/D {printf("V");}
を試してみましたが、それは動作しません。
これは、(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トークン化モデルにはあまり適していないことを示している可能性があります。