blob: d2a7c230deae8b27a7fe997b67204c0e1701509b [file] [log] [blame]
D [0-9]
L [a-zA-Z_]
H [a-fA-F0-9]
E [Ee][+-]?{D}+
FS (f|F|l|L)
IS (u|U|l|L)*
ws [ \t\r\v\f]
wsnl [ \t\r\v\f\n]
identifier [a-zA-Z_$][a-zA-Z_0-9$]*
number \.?[0-9][.0-9a-fA-FlLuUxX]*
%{
#include <stdio.h>
#include "y.tab.h"
static int token;
void count();
%}
%%
"/*" { comment1(); }
"//" { comment2(); }
struct{wsnl}+{identifier}{wsnl}+.*\{ {
token = STRUCT;
count();
return (token);
}
typedef{wsnl}+{identifier}{wsnl}+.*; {
token = TYPEDEF;
count();
return (token);
}
union{wsnl}+{identifier}{wsnl}+.*\{ {
token = UNION;
count();
return (token);
}
\#{ws}*define{ws}+{identifier} {
token = UNION;
count();
return (token);
}
{identifier}([*]*{identifier}*{wsnl}*)+\(({wsnl}|[a-zA-Z0-9_*,()])*\)({wsnl}*{identifier}{wsnl}*[()0-9]*)*[;|{] {
token = FUNCDEF;
count();
return (token);
}
{wsnl}+ { }
. { /* ignore bad characters */ }
%%
int word_count = 0;
yywrap()
{
// printf("Word count = %d, Bye\n", word_count);
return(1);
}
comment1()
{
char c, c1;
loop:
while ((c = input()) != '*' && c != 0)
;
if ((c1 = input()) != '/' && c != 0)
{
unput(c1);
goto loop;
}
}
comment2()
{
char c;
while ((c = input()) != '\n' && c != 0)
;
}
void count()
{
int i;
word_count ++;
/*
switch(token){
case TYPEDEF:
break;
case STRUCT:
case UNION:
break;
case ENUM:
break;
}
*/
if (token == FUNCDEF){
for (i = 0; yytext[i] != '\0'; i++){
if (yytext[i] != '\n')
putchar(yytext[i]);
else putchar(' ');
}
printf("\n");
}
}