以下は、FLEX プログラムのスニペットです。
%%
a |
ab |
abc |
abcd ECHO; REJECT;
.|\n printf("xx%c", *yytext);
%%
入力:
abcd
出力:
abcdabcabaxxaxxbxxcxxdxx
誰かがこの出力を取得する方法を説明できますか?
以下は、FLEX プログラムのスニペットです。
%%
a |
ab |
abc |
abcd ECHO; REJECT;
.|\n printf("xx%c", *yytext);
%%
入力:
abcd
出力:
abcdabcabaxxaxxbxxcxxdxx
誰かがこの出力を取得する方法を説明できますか?
REJECTflexの優先ルールを念頭に置いて、次のより良い一致に効果的にバックアップしflexます。
あなたの場合、文字列は、、または;abcdと一致します。優先されるのは最も長いものです ( )。aababcabcdabcd
ECHOアクションの前にREJECTアクションがあるECHOため、一致が後で拒否されても、これが発生します。最終的にflexは、デフォルトのルール (これも一致しaますが、ソース ファイルの後半にあります) にフォールバックしxxa、文字を出力して受け入れます。これで、デフォルト ルール以外は一致しないため、次の 3 文字が一度に 1 つずつ一致します。
'\n's を stdout に書いていれば、これはおそらくもっと明確だったでしょう。