我想将 flex 与字符串缓冲区一起使用,而不是默认的标准输入,所以我使用yy_scan_string
. 除了“以结尾”模式外,它几乎可以正常工作。
例如
%%
ab$ {//do something}
%%
ab$
意味着匹配“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;
if using echo ab | ./a.out
,它打印match ab$
,并且工作正常,但如果 using ./a.out ab
,它只打印 input ab
,不匹配该ab$
规则。