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

Ayuda con Codigo

Estas en el tema de Ayuda con Codigo en el foro de C/C++ en Foros del Web. Hola: estoy incursionando en C, debido a que tengo que utilizar un analizador de consultas. Cuando Compilo en c, me tira los siguientes errores: Calcu_in.y: ...
  #1 (permalink)  
Antiguo 27/06/2006, 09:12
 
Fecha de Ingreso: junio-2005
Mensajes: 337
Antigüedad: 19 años, 7 meses
Puntos: 1
Ayuda con Codigo

Hola: estoy incursionando en C, debido a que tengo que utilizar un analizador de consultas.

Cuando Compilo en c, me tira los siguientes errores:

Calcu_in.y: In function `yylex':
Calcu_in.y:40: error: `stdin' undeclared (first use in this function)
Calcu_in.y:40: error: (Each undeclared identifier is reported only once
Calcu_in.y:40: error: for each function it appears in.)
Calcu_in.y:45: error: `EOF' undeclared (first use in this function)

Y mi codigo es el siguiente:

/* Calculadora de notacion infija--calc */
%{
#define YYSTYPE double
#include <math.h>
%}
/* Declaraciones de BISON */
%token NUM
%left '-' '+'
%left '*' '/'
%left NEG /* negacion--menos unario */
%right '^' /* exponenciacion */
/* A continuacion la gramatica */
%%
input: /* cadena vaca */
| input line
;
line: '\n'
| exp '\n' { printf ("\t%.10g\n", $1); }
;
exp: NUM { $$ = $1; }
| exp '+' exp { $$ = $1 + $3; }
| exp '-' exp { $$ = $1 - $3; }
| exp '*' exp { $$ = $1 * $3; }
| exp '/' exp { $$ = $1 / $3; }
| '-' exp %prec NEG { $$ = -$2; }
| exp '^' exp { $$ = pow ($1, $3); }
| '(' exp ')' { $$ = $2; }
;
%%
#include <ctype.h>
#include <lex.yy.c>
yylex ()
{
int c;
/* ignora los espacios en blanco */
while ((c = getchar ()) == ' ' || c == '\t')
;
/* procesa numeros */
if (c == '.' || isdigit (c))
{
ungetc (c, stdin);
scanf ("%lf", &yylval);
return NUM;
}
/* devuelve fin-de-fichero */
if (c == EOF)
return 0;
/* devuelve caracteres sencillos */
return c;
}
#include <stdio.h>
yyerror (s) /* Llamada por yyparse ante un error */
char *s;
{
printf ("%s\n", s);
}

Si creen que corresponde a otra seccion del foro diganme, gracias, espero respuesta!
  #2 (permalink)  
Antiguo 27/06/2006, 12:31
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
seguro que esto es C?

pues te aconsejo limpiar un poco mas tu codigo, asi no lo comprendo.

#include <ctype.h>
#include <lex.yy.c>
yylex ()
{
int c;
/* ignora los espacios en blanco */
while ((c = getchar ()) == ' ' || c == '\t')
;
/* procesa numeros */
if (c == '.' || isdigit (c))
{
ungetc (c, stdin);
scanf ("%lf", &yylval);
return NUM;
}
/* devuelve fin-de-fichero */
if (c == EOF)
return 0;
/* devuelve caracteres sencillos */
return c;
}
#include <stdio.h>
yyerror (s) /* Llamada por yyparse ante un error */
char *s;
{
printf ("%s\n", s);
}

esta parte la comprendo pero lo que esta anterior a esto, supongo que es un gran comentario.
o estas usando una notacion muy rara.

lo de stdin es por que el include de sdtio.h lo hacen en un lugar incorrecto,
este include tienes que hacerlo antes de usar alguna funcion o constante de esta lib.

Saludos.
  #3 (permalink)  
Antiguo 27/06/2006, 13:14
 
Fecha de Ingreso: mayo-2006
Mensajes: 40
Antigüedad: 18 años, 7 meses
Puntos: 0
Creo que estas confundiendo lo que tienes que compilar. El codigo que pusiste hasta la linea con los %%, vendria siendo el fuente que le tienes que dar como entrada al generador de analisis lexicos (este tipo de programas existen desde los primeros tiempos de Unix, y para otros sistemas como MS-DOS o Windows tambien los hay, asi como su pareja, el generador de analisis sintacticos, que juntos son usados principalmente para automatizar el desarrollo de nuevos lenguajes de programacion). Su salida seria un programa en C, el cual es el que le tienes que dar como entrada a tu compilador de C. Si tu problema es al darle este fuente al generador de analisis lexicos entonces tu duda no entraria en este foro, ya que este es otro lenguaje, usado principalmente por la gente que esta desarrollando un nuevo lenguaje de programacion.
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 18:11.