기본 입력이 아닌 문자열 버퍼와 함께 flex를 사용하고자하므로 yy_scan_string
을 사용하고 있습니다. "ends-with"패턴을 제외하고는 거의 잘 작동합니다.
이 입력으로 표준 입력을 사용하여 정확한 종료 문자열 인 경우
%%
ab$ {//do something}
%%
ab$
yy_scan_string
와 함께, 그것은 아니다 "AB"를 일치하는 것을 의미한다.
테스트 :
%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$
규칙과 일치하지.