//principal.cpp//
#include "global.h"
main(){
inic();
analsint();
exit(0);}
//global.h//
#include
#include
#define TAMBUFF 128
#define ninguno -1
#define FDC '\0'
#define NUM 256
#define DIV 257
#define MOD 258
#define ID 259
#define FIN 260int valcomplex;int numlinea;
struct entrada{ char *aplex; int complex;};
struct entrada tablasimb[];
//analizlex.cpp//
#include "global.h"
char buflex [TAMBUFF];
int numlinea=1;
int valcomplex=NINGUNO;
int analex()
{
int t;
while(1) t= getchar();
if(t=='' t=='/t') ;
else if (t=='/n') numlinea=numlinea + 1;
else if(isdigit(t))
{ ungetc(t,stdin);
cin>>valcomplex;
return NUM;
}
else if(isalpha(t))
{ int p,b=0;
while(isalnum(t))
{ buflex[b]=t;
t=getchar();
b=b+1;
if(b>=TAMBUFF)
error("error del compilador"); }
buflex[b]=FDC;
if(t != EOF) ungetc(t,stdin);
p=busca(buflex);
if(p==0) p=inserta(buflex, ID);
valcomplex=p;
return tablasimb[p].complex; }
else if(t==EOF)
return FIN;
else{ valcomplex=NINGUNO; return t; }}}
//emisor.cpp//
#include "global.h"
emite(t,tval)int t=0,tval=0;
{
switch(t)
{ case '+': case'-': case'*': case'/': printf("%c\n",t);
break;
case DIV: printf("DIV\n");
break;
case MOD: printf("MOD\N");
break;
case NUM: printf("%d\n",tval);
break;
case ID: printf("%s\n",tablasimb[tval].aplex);
break;
default;
printf("complex %d, valcomplex %d\n", t, tval); }}
//error.cpp//
#include "global.h"
char *m;
error(m){
fprintf(stderr, "linea %d: %s\n", numlinea, m);
exit(1);
}
//simbolos.cpp//
#include"global.h"
#define MAXLEX 999
#define MAXSIMB 100char lexemas[MAXLEX];
int ultcar=-1;struct entrada tablasimb[MAXSIMB];
int ultent=0;int busca(s)char s[];
{ int p;
for(p=ultent;p>0;p-1)
if(strcmp(tablasimb[p].aplex,s)==0)
return p;
return 0;}
int inserta(s,clex)char s[];
int clex;{
int lon;
lon=strlen(s);
if(ultent + 1 >= MAXSIMB) error("tabla de simbolos llena");
if(ultcar + lon + 1>= MAXLEX) error("matriz de lexemas llena");
ultent=ultent + 1;
tablasimb[ultent].complex=clex;
tablasimb[ultent].aplex=&lexemas[ultcar + 1];
ultcar=ultcar + lon + 1;
strcpy(tablasimb[ultent].aplex, s);
return ultent;}
//inic.cpp//
#include "global.h"
struct entrada palsclave [] ={ "div", DIV, "mod", MOD, 0, 0};
inic(){ struct entrada *p;
for(p=palsclave;p->complex;p++)
inserta(p->aplex, p->complex);}
No hay comentarios:
Publicar un comentario