Foros del Web » Programación para mayores de 30 ;) » Programación General »

problema al crear la sintaxis de un lenguaje para crear un compilador

Estas en el tema de problema al crear la sintaxis de un lenguaje para crear un compilador en el foro de Programación General en Foros del Web. Hola a todos. Mi duda es la siguiente: Estoy realizando un compilador utilizando para ello la herramienta yacc que sirve para evaluar la sintaxis del ...
  #1 (permalink)  
Antiguo 22/08/2005, 03:32
 
Fecha de Ingreso: marzo-2004
Mensajes: 550
Antigüedad: 20 años, 1 mes
Puntos: 7
Sonrisa problema al crear la sintaxis de un lenguaje para crear un compilador

Hola a todos. Mi duda es la siguiente:

Estoy realizando un compilador utilizando para ello la herramienta yacc que sirve para evaluar la sintaxis del lenguaje que dicho compilador tratará.

En el lenguaje que soportará mi compilador puede haber declaraciones de variables como en C:

int x;

y expresiones como por ejemplo:

x=x+1; (tambien al estilo C).

El fichero que le paso a la herramienta YACC con la especificación del lenguaje para reflejar lo anteriormente comentado tiene el siguiente aspecto:


programa: declaraciones expresiones
declaracionVariables: Tipo listaIdentificadores
declaraciones:
|declaraciones declaracionVariables ';'
listaIdentificadores: ID
| listaIdentificadores ',' ID
sentencias:
|sentencias sentencia

sentencia: expresion ';'

expresion: expresion '+' expresion
|expresion '-' expresion
CTE_ENTERA
|ID

Tipo: INT
|CHAR
|ID


Las palabras en mayusculas son tokens que devuelve el léxico. El problema lo tengo cuando pongo un programa del tipo:

int x;
Ejemplo e;
x=x+1;

siendo Ejemplo por ejemplo una estructura declarada anteriormente:

struct Ejemplo{
int x;
}

Me da error sintáctico en la tercera linea porque al poner en el fichero que paso al yacc que el no terminal 'Tipo' puede ser un ID (identificador) se piensa que la tercera linea es una declaración de otra variable por lo que cuando llega al caracter '=' da el error porque según el fichero del sintactico lo que tendría que venir a continuación debería ser un ID (es decir, el nombre de la variable).


¿como puedo solucionar este error?

Darse cuenta que lo que quiero es que en los programas pueda declarar variables del tipo:

int x;
char c;
Ejemplo e; siendo Ejemplo un tipo (en este caso una estructura) definida por el usuario, es decir , que en mi fichero que refleja la sintaxis del lenguaje el no terminal 'Tipo' pueda ser un identificador (ID), no unicamente las palabras del lenguaje reservadas 'int' o 'char'.

Un saludo.
  #2 (permalink)  
Antiguo 22/08/2005, 08:08
Avatar de Eternal Idol  
Fecha de Ingreso: mayo-2004
Ubicación: Lucentum
Mensajes: 6.192
Antigüedad: 20 años
Puntos: 74
Tal vez, el problema sea que esa definicion no es valida en C.

Proba con esta:

Código:
typedef struct {
int x;
}Ejemplo;
__________________
¡Peron cumple, Evita dignifica! VIVA PERON CARAJO
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 04:50.