rendered paste body%{
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include "y.tab.h"
int install_id(char *);
char symtab[200][256];
int symind = 0;
int lino = 1;
%}
ALPHA [a-zA-Z]
NUM [0-9]
INTEGER [-+]?{NUM}+
FLT {INTEGER}?\.{NUM}+
EXP ({INTEGER}|{FLT})[eE][-+]?{NUM}{NUM}?
ID {ALPHA}({ALPHA}|{NUM}|_)*
COMMENT ("//".*"\n")|("/*"[^"*/"]*.?"*/")
WSPACE [ \t]+
%%
"\n" { lino++; }
"int" { return INT; }
"float" { return FLOAT; }
"void" { return VOID; }
{EXP} {
printf("EXP: %s\n\n",yytext);
yylval.str = (char *) malloc ( yyleng + 1 );
strcpy ( yylval.str, yytext );
return EXP;
}
{FLT} {
yylval.str = (char *) malloc ( yyleng + 1 );
strcpy ( yylval.str, yytext );
printf("FLOAT: %s\n\n",yylval.str);
return FLT;
}
{INTEGER} {
printf("INT: %d\n\n",atoi(yytext));
yylval.yint = atoi ( yytext );
return INTEGER;
}
{ID} {
yylval.yint = install_id( yytext );
printf("ID: %d\t%s\n\n",yylval.yint,yytext);
return ID;
}
[-+*/=(){}<>.;] { return *yytext; }
{WSPACE}|{COMMENT} ;
%%
int yywrap(void)
{
return 1;
}
int install_id( char *s )
{
int i;
for ( i=0; i<symind; i++ )
{
if( strcmp( symtab[i], s ) == 0 )
return i;
}
if( i >= 200 )
{
printf(" FULL \n\n ");
return -1;
}
strcpy ( symtab[symind] , s );
symind++;
return symind-1;
}