61 lines
967 B
Plaintext
61 lines
967 B
Plaintext
/* @BAKE
|
|
flex -o $*.c $@
|
|
cc -o eof $*.c -ggdb -lfl
|
|
@STOP
|
|
*/
|
|
ALPHABETIC [a-zA-Z]
|
|
WS [^a-zA-Z!]
|
|
|
|
%option
|
|
|
|
%%
|
|
|
|
{ALPHABETIC}+ {
|
|
ECHO;
|
|
return 1;
|
|
}
|
|
{WS}+ {
|
|
ECHO;
|
|
return 2;
|
|
}
|
|
|
|
"!" {
|
|
char buf[80];
|
|
for (int idx=0; (buf[idx] = input()); idx++) /* empty */ ;
|
|
printf("buf=<%s>\n", buf);
|
|
// YY_FLUSH_BUFFER; /* makes no difference */
|
|
return 3;
|
|
ECHO;
|
|
char c;
|
|
while (c = input()) {
|
|
printf("'%c'\n", c);
|
|
}
|
|
return 3;
|
|
}
|
|
|
|
%%
|
|
int main(int argc, const char * const * const argv)
|
|
{
|
|
/*
|
|
switch (argc) {
|
|
case 1: break;
|
|
case 2:
|
|
yy_scan_string(argv[1]);
|
|
break;
|
|
default:
|
|
fprintf(stderr, "Usage: %s [string]\n", argv[0]);
|
|
exit(1);
|
|
}
|
|
*/
|
|
|
|
const char * test = "one two !three four";
|
|
yy_scan_string(argv[1]);
|
|
|
|
|
|
int token;
|
|
while ((token = yylex()) != 0) {
|
|
printf("-> %d\n", token);
|
|
fflush(stdout);
|
|
}
|
|
}
|