compilation quick note
*
zero or more copies of the preceding expressionExample
abc
abcabc*
ab abc abcc abccc ...abc+
abc abcc abccc ...a(bc)+
abc abcbc abcbcbc ...a(bc)?
a abc[abc]
one of: a, b, c[a-z]
any letter, a-z[a\-z]
one of: a, -, z[-az]
one of: -, a, z[A-Za-z0-9]+
one or more alphanumeric characters[ \t\n]+
whitespace[^ab]
anything except: a, b[a^b]
one of: a, ^, b[a|b]
one of: a, |, ba|b
one of: a, b... definitions ...
%%
... rules ...
%%
... subroutines ...
yywrap
is called by lex when input is exhausted. Return 1 if you are done or 0 if more processing is required.yylex
that is the main entry-point for lex.%%
. ECHO;
\n ECHO;
%%
int yywrap(void) {
return 1;
}
int main(void) {
yylex();
return 0;
}
yylineno
. The input file for lex is yyin
and defaults to stdin.%{
int yylineno;
%}
%%
^(.*)\n printf("%4d\t%s", ++yylineno, yytext);
%%
int yywrap(void) {
return 1;
}
int main(int argc, char *argv[]) {
yyin = fopen(argv[1], "r");
yylex();
fclose(yyin);
}
%{
int nchar, nword, nline;
%}
%%
\n { nline++; nchar++; }
[^ \t\n]+ { nword++, nchar += yyleng; }
. { nchar++; }
%%
int yywrap(void) {
return 1;
}
int main(void) {
yylex();
printf("%d\t%d\t%d\n", nchar, nword, nline);
return 0;
}