YY_INPUT
. Esta macro es llamada con tres parámetros
YY_INPUT(buf,result,max)
YY_INPUT
para que copie los datos de la cadena en
el buffer pasado como parámetro a YY_INPUT
.
Sigue un ejemplo:
$ cat string.l %{ #undef YY_INPUT #define YY_INPUT(b,r,m) (r = yystringinput(b,m)) #define min(a,b) ((a<b)?(a):(b)) %} %% [0-9]+ printf("Num-"); [a-zA-Z][a-zA-Z_0-9]* printf("Id-"); [ \t]+ . printf("%c-",yytext[0]); %% extern char string[]; extern char *yyinputptr; extern char *yyinputlim; int yystringinput(char *buf, int maxsize) { int n = min(maxsize, yyinputlim-yyinputptr); if (n > 0) { memcpy(buf, yyinputptr, n); yyinputptr += n; } return n; } int yywrap() { return 1; }Este es el fichero conteniendo la función main:
$ cat stringmain.c char string[] = "one=1;two=2"; char *yyinputptr; char *yyinputlim; main() { yyinputptr = string; yyinputlim = string + strlen(string); yylex(); printf("\n"); }Y esta es la salida:
$ a.out Id-=-Num-;-Id-=-Num-La cadena
string = "one=1;two=2"
definida en la línea 2 ha sido utilizada
como entrada para el análisis léxico.