デフォルトの標準入力ではなく、文字列バッファーでフレックスを使用したいので、yy_scan_string
. 「end-with」パターンを除いて、ほとんど問題なく動作します。
例えば
%%
ab$ {//do something}
%%
ab$
stdin を入力として使用して、終了文字列と正確に一致する場合は「ab」に一致することを意味しますが、 では機能しyy_scan_string
ません。
テスト:
%option noyywrap
%{
#include <stdio.h>
%}
%%
ab$ { printf("match ab$\n"); }
%%
int main(int argc, char ** argv)
{
if (argc > 1)
yy_scan_string(argv[1]);
yylex();
if (argc > 1)
yylex_destroy();
}
次に、flex test.l; gcc lex.yy.c;
を使用するecho ab | ./a.out
と が出力さmatch ab$
れ、正常に動作しますが、 を使用する./a.out ab
と、入力のみが出力され、そのルールab
に一致しません。ab$