%{
#define GE 1
#define EQ 2
unsigned int line_no = 1;
%}

letter [a-zA-Z_]
digit [0-9]
letter_or_digit [a-zA-Z_0-9]
eol \n
other .

%%
">="	{	printf("GE at line %d\n", line_no);	}
"=="	{	printf("EQ at line %d\n", line_no);	}

{letter}{letter_or_digit}*	{
		printf("ID %s at line %d %d \n", yytext,line_no,yylineno);
		}
{digit}+	{printf("DIGIT %s at line %d\n", yytext,line_no);}
{eol}	{line_no++;}
{other}	{}

%%
main()
{
yylex();
}




%{
unsigned charCount = 0, wordCount = 0, lineCount = 0;
%}

word [^ \t\n]+
eol \n

%%
{word}	{wordCount++; charCount+=yyleng;}
{eol}	{lineCount++; charCount++;}
.	{charCount++;}

%%
main()
{
yylex();
printf("Words=%d Line=%d Chars=%d\n",wordCount,lineCount,charCount);
}