Diseño compilador para C
Estoy diseñando un compilador para una version de C reducida para la universidad. Actualmente estoy diseñando el analizador sintactico ascendente y me han surgido dos conflictos que no consigo eliminar. A continuacion pongo la parte de la gramatica afectada por si alguien me puede ayudar.
lista_sentencias ::= sentencia | lista_sentencias sentencia
sentencia ::= sentencia_switch | sentencia_if | sentencia_asignacion | sentencia_e_s
sentencia_if ::= RESERVA_IF DELIM_PARENT_IZQUI expresion_or DELIM_PARENT_DEREC cuerpo_if_else parte_else
parte_else ::= RESERVA_ELSE cuerpo_if_else | clausula_vacia
cuerpo_if_else ::= sentencia | sentencia_compuesta
sentencia_compuesta ::= DELIM_LLAVE_IZQUI lista_declaraciones DELIM_LLAVE_DEREC
| DELIM_LLAVE_IZQUI lista_sentencias DELIM_LLAVE_DEREC
| DELIM_LLAVE_IZQUI lista_declaraciones lista_sentencias DELIM_LLAVE_DEREC
Aqui el conflicto que me da es el siguiente:
Shift/Reduce conflict found in state #153 between clausula_vacia and parte_else under symbol RESERVA_ELSE
La gramatica afectada por el segundo conflicto es:
expresion_unaria ::= IDENTIFICADOR
| NUMERO
| llamada_funcion
| IDENTIFICADOR operador_unario
| DELIM_PARENT_IZQUI expresion_or DELIM_PARENT_DEREC operador_unario
| DELIM_PARENT_IZQUI expresion_or DELIM_PARENT_DEREC
| OP_NOT expresion_or
llamada_funcion ::= IDENTIFICADOR DELIM_PARENT_IZQUI parametro DELIM_PARENT_DEREC
y el conflicto que me da es el siguiente:
Shift/Reduce conflict found in state #68 between expresion_unaria and llamada_funcion under symbol DELIM_PARENT_IZQUI
lista_sentencias ::= sentencia | lista_sentencias sentencia
sentencia ::= sentencia_switch | sentencia_if | sentencia_asignacion | sentencia_e_s
sentencia_if ::= RESERVA_IF DELIM_PARENT_IZQUI expresion_or DELIM_PARENT_DEREC cuerpo_if_else parte_else
parte_else ::= RESERVA_ELSE cuerpo_if_else | clausula_vacia
cuerpo_if_else ::= sentencia | sentencia_compuesta
sentencia_compuesta ::= DELIM_LLAVE_IZQUI lista_declaraciones DELIM_LLAVE_DEREC
| DELIM_LLAVE_IZQUI lista_sentencias DELIM_LLAVE_DEREC
| DELIM_LLAVE_IZQUI lista_declaraciones lista_sentencias DELIM_LLAVE_DEREC
Aqui el conflicto que me da es el siguiente:
Shift/Reduce conflict found in state #153 between clausula_vacia and parte_else under symbol RESERVA_ELSE
La gramatica afectada por el segundo conflicto es:
expresion_unaria ::= IDENTIFICADOR
| NUMERO
| llamada_funcion
| IDENTIFICADOR operador_unario
| DELIM_PARENT_IZQUI expresion_or DELIM_PARENT_DEREC operador_unario
| DELIM_PARENT_IZQUI expresion_or DELIM_PARENT_DEREC
| OP_NOT expresion_or
llamada_funcion ::= IDENTIFICADOR DELIM_PARENT_IZQUI parametro DELIM_PARENT_DEREC
y el conflicto que me da es el siguiente:
Shift/Reduce conflict found in state #68 between expresion_unaria and llamada_funcion under symbol DELIM_PARENT_IZQUI
