Autor Tema: Problema con Bison y Flex

0 Usuarios y 1 Visitante están viendo este tema.

03 Junio, 2009, 03:08 am
Leído 2893 veces

cristianll

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 236
  • Karma: +0/-0
  • Sexo: Masculino
Hola que tal, tengo un problema, tengo que realizar un traductor para que me acepte unas operaciones aritmeticas definididas, tengo que usar valores enteros pero cuando ejecuto el archivo de bison y trato de sumar o restar o hacer el cuadrado de dos valores siempre me da cero, pero cuando pongo que las variables las tome como double me da los valores correctos,no entiendo,yo necesito que sean enteras nada mas, si alguien sabe¿? Muchas gracias,acá les dejo el código a ver si encuentran algo mal.

Código: [Seleccionar]
%{
#include <stdio.h>
%}
%token NUM
%token '*'
%left '+' '-'
%left neg '#'
%right '='
%%
input: /* vacio */
| input line
;
line: '\n'
| exp '\n' { printf ("\t%.10g\n", $1);  }
| error '\n' { yyerrok;                 }
;
exp: NUM { $$ = $1; }
| exp exp '+' { $$ = $1 + $2; }
| exp exp '-' { $$ = $1 - $2; }
| exp exp '*' { $$ = $1 * $2; }
| exp '#' { $$ = $1 * $1; }
| '-' exp %prec neg { $$ = -$2; }
;
%%
#include <ctype.h>
yylex ()
{
int c;
while ((c = getchar ()) == ' ' || c == '\t')
;
if (c == '.' || isdigit (c))
{
ungetc (c, stdin);
scanf ("%lf", &yylval);
return NUM;
}
if (c == EOF)
return 0;
return c;
}
main ()
{
yyparse ();
}
#include <stdio.h>
yyerror (s)
char *s;
{
printf ("%s\n", s);
}

04 Junio, 2009, 02:28 am
Respuesta #1

Watt

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 327
  • Karma: +0/-0
  • Sexo: Masculino
  • Dos numeros manejan el mundo?
Podrías poner el código de la forma que corresponde con los espacios ? Recuerda que lo tenes que poner así
Código: [Seleccionar]
tu código, porque la verdad no entiendo nada así.

04 Junio, 2009, 05:10 am
Respuesta #2

cristianll

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 236
  • Karma: +0/-0
  • Sexo: Masculino

04 Junio, 2009, 04:59 pm
Respuesta #3

Watt

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 327
  • Karma: +0/-0
  • Sexo: Masculino
  • Dos numeros manejan el mundo?
En realidad te faltan las tabulaciones, nunca debes poner todo al comiendo de la linea, asi por ejemplo:
Código: [Seleccionar]
if( a>b)
      print("El resuldato es a")
else
      if(a=b)
           instrucciones..




04 Junio, 2009, 06:14 pm
Respuesta #4

topo23

  • $$\Large \color{#c88359}\pi\,\pi\,\pi\,\pi$$
  • Mensajes: 937
  • Karma: +0/-0
Nunca use estos programas pero despues de leer esta pagina http://dinosaur.compilertools.net/bison/bison_7.html, me quedo la impresion que debias usar INT en vez de NUM y %d en vez de %lf.
.

04 Junio, 2009, 06:53 pm
Respuesta #5

Watt

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 327
  • Karma: +0/-0
  • Sexo: Masculino
  • Dos numeros manejan el mundo?
Haber si entiendo, estas aprendiendo a programar en C ?

14 Junio, 2009, 01:30 am
Respuesta #6

cristianll

  • $$\Large \color{#5e8d56}\pi\,\pi\,\pi$$
  • Mensajes: 236
  • Karma: +0/-0
  • Sexo: Masculino
Si estoy aprendiendo recien, si eso ya lo arregle lo de int, muchas gracias.