Foro SofosAgora

Foro abierto a los intereses de sus usuarios. Debate, aprende y diviértete.
Fecha actual 20 Ago 2018, 16:24

Todos los horarios son UTC + 1 hora [ DST ]




Nuevo tema Responder al tema  [ 5 mensajes ] 
Autor Mensaje
 Asunto: ¿Cómo detectar paréntesis redundantes? Avances.
NotaPublicado: 24 Jul 2018, 03:14 
Desconectado
Avatar de Usuario

Registrado: 10 Ago 2011, 20:39
Mensajes: 8442
Parece que expresiones como esta:
Variable1 < Variable2 y Variable1 < Variable3 o Variable2 == Variable3
son análogas a esta:
2 * 3 + 4
en el sentido de la prioridad: Así como los * se aplican antes que los +, las "y" se aplican antes que las "o".

Supongamos que tenemos:
A s B s C s D s E
donde las letras mayúsculas representan números y las s representan signos.


Los paréntesis son redundantes cuando no alteran el orden de las operaciones.


Redundantes tipo 1: Envuelven sólo un valor.
Ej: (A) s B s C s D s E

Quiero el pseudocódigo de un programa que genere expresiones que no tengan paréntesis redundantes. Generar las expresiones no es difícil (al menos las que intenté por ahora; hay otras), lo difícil para mí actualmente se relaciona con los paréntesis. Según pensé, luego de generar una expresión la podría variar poniéndole paréntesis.
Imagen
Los que abren sólo se pueden poner en las posiciones indicadas por los números de arriba y los que cierran en los de abajo. Básicamente al inicio de una expresión no tiene sentido cerrarlo y al final no tiene sentido abrirlo. El programa siempre en algún punto cerraría los que abra así que no tiene que revisar si todos están abiertos y cerrados. Ej:
1a3, 2a4: (A s (B s C) s D) s E

Unos paréntesis son redundantes tipo 1 si el 1er número de alguno de los grupos es igual al 2ndo de alguno de los grupos.
En criollo: Si se cierra a penas se abre.
Ej: 1a3, 3a4: (A s B s (C) s D) s E
¿De acuerdo? ¿se les ocurre un método mejor de nombrarlos/generarlos?
Un problema de mi método es que 1a3, 2a4 = 1a4, 2a3. Parece que la idea de grupos (pueden ser más de 2) fuese redundante xD bastaría con 2:
Posición de los abiertos: 1, 3
Cerrados: 3, 4
Luego, si un número está en ambos grupos, hay redundancia tipo 1.


Redundantes tipo 2: Envuelven a todo el resto.
Ej: (A s B s C s D s E)

Ocurren cuando:
- En abiertos está el nro 1.
- En cerrados está el número más alto admisible.
y alguna otra condición que no llego a entender. ¿Cual/es?

El problema son casos como por ejemplo este:
(A s B s C) s (D s E)
Posición de los abiertos: 1, 4
Cerrados: 3, 5
Ahí hay 1 y 5 pero no hay falla, por eso falta alguna condición más.


Redundantes tipo 3: No envuelven algún + y no hay un * fuera.
Recuerden que eso del + y * es una analogía. La cosa es que A * B * C = A * (B * C). En la práctica puede que no si el resultado de A * B o B * C es infinito, pero por ahora no trabajo con eso. Condición1 y Condición2 y Condición3 = C1 y (C2 y C3). Los paréntesis tienen sentido si implican alguna + y hay alguna * fuera. Es decir, cuando alteran el orden normal de las operaciones.

Por ahora no puedo decir cómo detectaría estos, si acaso puedo averiguarlo. Necesito hacer ciertos códigos o pseudos antes de poder analizar esto. Pero si alguno sabe detectarlos, agradezco la respuesta.


¿Hay algún otro tipo?

_________________
Si no puedes hacerlo, intenta primero hacer algo más simple aunque similar.


Arriba
 Perfil  
Responder citando  
 Asunto: Re: ¿Cómo detectar paréntesis redundantes? Avances.
NotaPublicado: 24 Jul 2018, 11:32 
Desconectado
Avatar de Usuario

Registrado: 10 Jun 2011, 21:52
Mensajes: 4386
Haz el árbol (abstract syntax tree), operadores de menor precedencia necesitarán paréntesis sólo cuando tengan por encima operadores de mayor precedencia.

_________________
Spoiler: show
Imagen


Arriba
 Perfil  
Responder citando  
 Asunto: Re: ¿Cómo detectar paréntesis redundantes? Avances.
NotaPublicado: 25 Jul 2018, 12:10 
Desconectado
Avatar de Usuario

Registrado: 10 Ago 2011, 20:39
Mensajes: 8442
Miré un poco el artículo de wikipedia pero me pareció complicado, ni siquiera llegué a ver cómo se hace o qué es exactamente.

¿Puedes decir algo más concreto?

_________________
Si no puedes hacerlo, intenta primero hacer algo más simple aunque similar.


Arriba
 Perfil  
Responder citando  
 Asunto: Re: ¿Cómo detectar paréntesis redundantes? Avances.
NotaPublicado: 25 Jul 2018, 22:59 
Desconectado
Avatar de Usuario

Registrado: 10 Jun 2011, 21:52
Mensajes: 4386
Imagen

_________________
Spoiler: show
Imagen


Arriba
 Perfil  
Responder citando  
 Asunto: Re: ¿Cómo detectar paréntesis redundantes? Avances.
NotaPublicado: 26 Jul 2018, 00:17 
Desconectado
Avatar de Usuario

Registrado: 10 Ago 2011, 20:39
Mensajes: 8442
Sigue sonando muy poco concreto.

¿Es necesaria "la abstracción" para crear "el nivel semántico que permite precisar"? ¿qué es ese "nivel", de qué está hecho?
¿Qué es "la abstracción"? Y sobretodo: ¿Cómo crearla?


Por otro lado, mira la firma de este tipo:
https://foro.elhacker.net/programacion_ ... 080.0.html

¡Qué... ASCO POR DIOS!
“La muerte es el destino que todos compartimos. Nadie ha escapado de ella, y así tiene que ser, porque la muerte es posiblemente el mejor invento de la vida”
S. Jobs.

Le enviaré la fábula del dragón a ver si espabila. ¿Steve Jobs dijo eso? Menudo imbécil parece.
La fábula tiene mucho más alcance de lo que pensé (puede representar leyes, sistemas...), está muy buena.

_________________
Si no puedes hacerlo, intenta primero hacer algo más simple aunque similar.


Arriba
 Perfil  
Responder citando  
Mostrar mensajes previos:  Ordenar por  
Nuevo tema Responder al tema  [ 5 mensajes ] 

Todos los horarios son UTC + 1 hora [ DST ]


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado


No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro

Buscar:
Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO