All pastes #39092 Raw Edit

LExc

public text v1 · immutable
#39092 ·published 2006-01-30 03:46 UTC
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;
}