Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda con compilador c

Estas en el tema de Ayuda con compilador c en el foro de C/C++ en Foros del Web. Hola Estoy haciendo un programa en Borland c++ De C que traduce expresiones infijas a postfijas el problema es que no me funciona ya lo ...
  #1 (permalink)  
Antiguo 28/09/2009, 18:51
 
Fecha de Ingreso: septiembre-2009
Mensajes: 14
Antigüedad: 14 años, 6 meses
Puntos: 0
Ayuda con compilador c

Hola Estoy haciendo un programa en Borland c++ De C que traduce expresiones infijas a postfijas el problema es que no me funciona ya lo intente correr en las 8 partes le puse la funcion extern para q sea reconocido como funciones extern y lo intente poner en 1 solo programa pero siempre me creea errores q tengo q hacer el codigo es este

/**** global.h ************************************************/
#include <stdio.h> /* carga las rutinas de entrada y salida */
#include <ctype.h> /* carga las rutinas de prueba de caracteres */

#define TAMBUFF 128 /* tamaño del buffer */
#define NINGUNO -1
#define FDC '\0'

#define NUM 256
#define DIV 257
#define MOD 258
#define ID 259
#define FIN 260

extern int valcomplex; /* valor del atributo del componente léxico */
extern int numlinea;
struct entrada { /* forma del elemento de entrada de la tabla de símbolos */
char *aplex;
int complex;
};
extern struct entrada tablasimb[]; /* tabla de símbolos */
/**** analizlex.c ********************************************/
#include "global.h"

char buflex[TAMBUFF];
int numlinea = 1;
int valcomplex = NINGUNO;

int analex () /* analizador lexico */
{
int t;
while (1) {
t = getchar ();
if (t == ' ' || t == '\t')
; /* elimina espacios en blanco */
else if (t == '\n')
numlinea = numlinea + 1;
else if (isdigit (t)) { /* t es un dígito */
ungetc (t, stdin);
scanf ("%d", &valcomplex);
return NUM;
} else if (isalpha (t)) { /* t es una letra */
int p, b = 0;
while (isalnum (t)) { /* t es alfanumérico */
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;
}
}
}
/**** analizsint.c *************************************************/
#include "global.h"

int preanalisis;

analsint () /* analiza sintácticamente y traduce la lista de la expresión */
{
preanalisis = analex ();
while (preanalisis != FIN) {
expr (); parea (';');
}
}

expr ()
{
int t;
termino ();
while (1)
switch (preanalisis) {
case '+': case '-':
t = preanalisis;
parea (preanalisis); termino (); emite (t, NINGUNO);
continue;
default:
return;
}
}

termino ()
{
int t;
factor ();
while (1)
switch (preanalisis) {
case '*': case '/': case DIV: case MOD:
t = preanalisis;
parea (preanalisis); factor (); emite (t, NINGUNO);
continue;
default:
return;
}
}

factor ()
{
switch (preanalisis) {
case '(':
parea ('('); expr (); parea (')'); break;
case NUM:
emite (NUM, valcomplex); parea (NUM); break;
case ID:
emite (ID, valcomplex); parea (ID); break;
default:
error ("error de sintaxis");
}
}

parea (t)
int t;
{
if (preanalisis == t)
preanalisis = analex ();
else
error ("error de sintaxis");
}
/**** emisor.c **********************************************/
#include "global.h"

emite (t, tval) /* genera la salida */
int t;
int tval;
{
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.c ************************************************** **/
#include "global.h"

error (m) /* genera todos los mensajes de error */
char *m;
{
fprintf (stderr, "linea %d: %s\n", numlinea, m);
exit (1); /* terminación sin éxito */
}
/**** inic.c ************************************************** ****/
#include "global.h"

struct entrada palsclave[] = {
"div", DIV,
"mod", MOD,
0, 0
};

inic () /* carga las palabras claves en la tabla de símbolos */
{
struct entrada *p;
for (p = palsclave; p->complex; p++)
inserta (p->aplex, p->complex);
}
/**** simbolos.c **************************************************/
#include "global.h"
#define MAXLEN 999 /* tamaño de la matriz de lexemas */
#define MAXSIMB 100 /* tamaño de tablasimb */

char lexemas[MAXLEN];
int ultcar = -1; /* última posición usada en los lexemas */
struct entrada tablasimb[MAXSIMB];
int ultent = 0; /* última posición usada en tablasimb */

int busca (s) /* devuelve la posición del elemento de entrada de s */
char s[];
{
int p;
for (p = ultent; p > 0; p = p - 1)
if (strcmp (tablasimb[p].aplex, s) == 0)
return p;
return 0;
}

int inserta (s, clex) /* devuelve la posición del elemento de entrada de s */
char s[];
int clex;
{
int lon;
lon = strlen (s); /* strlen avalúa la longitud de s */
if (ultent + 1 >= MAXSIMB)
error ("tabla de simbolos llena");
if (ultcar + lon + 1 >= MAXLEN)
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;
}
/****principal.c*********************************** **************/
#include "global.h"

main ()
{
extern inic ();
extern analsint ();
exit (0); /* terminación con éxito */
}
  #2 (permalink)  
Antiguo 22/10/2009, 08:31
 
Fecha de Ingreso: septiembre-2009
Mensajes: 14
Antigüedad: 14 años, 6 meses
Puntos: 0
Respuesta: Ayuda con compilador c

jeje creo que ya lo e resuelto lo que pasa es que hay que compilarlo en dev-c++ en modo consola y con los archivos separados
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:04.