Skip to content
This repository has been archived by the owner on Aug 9, 2024. It is now read-only.

Commit

Permalink
Completacion del Programa
Browse files Browse the repository at this point in the history
  • Loading branch information
Laifsyn committed May 12, 2024
1 parent d2304bf commit bb03547
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 57 deletions.
13 changes: 1 addition & 12 deletions src/main/java/com/utp/clsEstructuraDatos/pry3/DrawTable.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,10 @@ public void insertar_fila(String[] row) {

public String toString() {
StringBuilder sb = new StringBuilder();
// Iniciamos en 1 para acontar el borde izquierdo de la tabla
int max_width = 1;
// Guardo la posicion de los vertices de la tabla.
Integer[] columns_widths = new Integer[this.cantidad_columnas];

// Obtener espacio total para dibujo antes de empezar a dibujar la tabla, y
// tambien obtener los vertices de la tabla

// Obtener los vertices de la tabla
for (int indice_columna = 0; indice_columna < this.cantidad_columnas; indice_columna++) {
int ancho_columna = 0;
for (String[] fila : this.table) {
Expand All @@ -41,7 +37,6 @@ public String toString() {
columns_widths[indice_columna] = ancho_columna;
}
}
max_width += ancho_columna;
}

StringBuilder borde_superior = new StringBuilder("┌");
Expand Down Expand Up @@ -85,12 +80,6 @@ public String toString() {
return sb.toString();
}

/*
* |__|| asdfa||c|
* ------------------------
* | 1||23jgadsdsavghgh||3|
* | 4|| 5||6|
*/
public static void main(String[] args) {

String[][] mi_tabla = new String[][] { { "Hola mundo", "asdfa", "Nostradamus" },
Expand Down
70 changes: 60 additions & 10 deletions src/main/java/com/utp/clsEstructuraDatos/pry3/Expression.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.utp.clsEstructuraDatos.pry3;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map.Entry;
import java.util.Optional;

import com.utp.clsEstructuraDatos.pry3.Tokens.Token;
Expand All @@ -22,7 +24,58 @@ public sealed interface Expression {
*
* Se guarda en la entrada la direccion de la expresion que se crea.
*/
LinkedHashMap<String, Expression> get_expressions(LinkedHashMap<String, Expression> expressions);
public void load_expressions(LinkedHashMap<String, Expression> expressions);

default String as_printable_table() {
HashSet<String> identificadores = this.get_identifiers();
// Cargamos primero los identificadores del mapa de valores, y la lista de
// expresiones
LinkedHashMap<String, Expression> expressions = new LinkedHashMap<String, Expression>();
HashMap<String, Boolean> lista_de_variables = new HashMap<>();
for (String ident : identificadores) {
expressions.put(ident, null);
lista_de_variables.put(ident, false);
}
// Cargamos el resto de las expresiones
this.load_expressions(expressions);

ArrayList<String> fila = new ArrayList<>();
for (String expression_as_string : expressions.keySet()) {
fila.add(expression_as_string);
}
// Clonamos a un encabezado como constante porque lo vamos a usar para lectura
// solamente
final String[] encabezado = fila.toArray(new String[] {});

DrawTable tabla = new DrawTable();
tabla.insertar_fila(encabezado);

// Calculamos los posibles estados de la combinacion de variables
int states = (int) Math.round(Math.pow(2, identificadores.size()));
// fila_n es la fila del contenido
for (int fila_n = 0; fila_n < states; fila_n++) {
// Quiero asegurarme que estoy trabajando con fila vacia.
fila.clear();

// Cargamos los valores de las variables usando bit shifting.
int estado_de_variables = fila_n;
for (Entry<String, Boolean> entry : lista_de_variables.entrySet()) {
entry.setValue(((estado_de_variables & 1) == 1));
estado_de_variables = estado_de_variables >> 1;
}
// Ya se puede empezar a llenar las filas
for (String expresion_a_evaluar : encabezado) {
Expression exp = expressions.get(expresion_a_evaluar);
if (exp == null) {
fila.add("null");
} else {
fila.add(exp.eval(lista_de_variables) ? "1" : "0");
}
}
tabla.insertar_fila(fila.toArray(new String[] {}));
}
return tabla.toString();
}

/**
* Retorna al primer error encontrado. Posiblemente con un util mensaje de error
Expand Down Expand Up @@ -264,9 +317,8 @@ public HashSet<String> get_identifiers() {
}

@Override
public LinkedHashMap<String, Expression> get_expressions(LinkedHashMap<String, Expression> expressions) {
public void load_expressions(LinkedHashMap<String, Expression> expressions) {
expressions.putIfAbsent(this.display(), this);
return expressions;
}

}
Expand All @@ -292,10 +344,9 @@ public HashSet<String> get_identifiers() {
}

@Override
public LinkedHashMap<String, Expression> get_expressions(LinkedHashMap<String, Expression> expressions) {
this.exp.get_expressions(expressions);
public void load_expressions(LinkedHashMap<String, Expression> expressions) {
this.exp.load_expressions(expressions);
expressions.putIfAbsent(this.display(), this);
return expressions;
}
}

Expand Down Expand Up @@ -323,11 +374,10 @@ public HashSet<String> get_identifiers() {
}

@Override
public LinkedHashMap<String, Expression> get_expressions(LinkedHashMap<String, Expression> expressions) {
lhs.get_expressions(expressions);
rhs.get_expressions(expressions);
public void load_expressions(LinkedHashMap<String, Expression> expressions) {
lhs.load_expressions(expressions);
rhs.load_expressions(expressions);
expressions.putIfAbsent(this.display(), this);
return expressions;
}

}
Expand Down
49 changes: 14 additions & 35 deletions src/main/java/com/utp/clsEstructuraDatos/pry3/Main.java
Original file line number Diff line number Diff line change
@@ -1,9 +1,5 @@
package com.utp.clsEstructuraDatos.pry3;

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map.Entry;

import com.utp.clsEstructuraDatos.pry3.Tokens.Token;
import com.utp.clsEstructuraDatos.pry3.Tokens.TokenStream;
import com.utp.utils.Result;
Expand All @@ -17,46 +13,29 @@
// * indicar la expresión lógica a evaluar mediante código.
public class Main {
public static void main(String[] args) {
// Result<TokenStream, IllegalArgumentException> stream =
// TokenStream.from_string("pqr(^^&&()|||)");
String[] input = new String[] {
String[] entries = new String[] {
"p|q",
"p&q",
"p|q&r",
"(p&q)^r|(p^q)",
"(!(p->q) ->~q)&p",
"(!p->q ->~q)&p",
"(!(!p->!q) ->!(!q^!(p->q)))&!p",

"((p->~q)^(r^(q->p))->~r"
};
int entry_no = 0;
for (String input : entries) {
entry_no++;
System.out.println(entry_no + "-)Evaluating: `" + input + "`");

for (String string : input) {
System.out.println("Evaluating: `" + string + "`");
TokenStream stream = TokenStream.from_string(string).unwrapOk();
// Convertir la Cadena a un productor de Token
TokenStream stream = TokenStream.from_string(input).unwrapOk();
Result<Expression, String> expression = Expression.try_from_stream(stream);
// La cadena de Tokens tiene la posibilidad de no ser una expresión válida.
if (expression.isError()) {
System.err.println("Error: " + expression.unwrapError());
System.err.println("Stream: " + stream.position());
System.err.println("Stream: " + stream.next().orElseGet(() -> new Token.EOL("asdasd")).to_token_name());
} else {
System.out.println("Exito!!");
System.err.println("Evaluating: " + expression.unwrapOk().display());
var confirmed_expression = expression.unwrapOk();
var linked_list = new LinkedHashMap<String, Expression>();
HashMap<String, Boolean> ident_entries = new HashMap<>();
for (String ident : confirmed_expression.get_identifiers()) {
linked_list.put(ident, null);
ident_entries.put(ident, false);
}
int number = 0;
for (Entry<String, Expression> entry_set : confirmed_expression
.get_expressions(linked_list).entrySet()) {
number++;
System.out.printf("%2d-)%-5s <= %s\n", number,
entry_set.getValue().eval(ident_entries), entry_set.getKey());
}
System.err.println("Stream: " + stream.next().orElseGet(() -> new Token.EOL("")).to_token_name());
continue;
}

System.err.println("\n<====================================>");
var valid_exp = expression.unwrapOk();
System.out.println("Tabla de Verdad:\n" + valid_exp.as_printable_table());
}

}
Expand Down

0 comments on commit bb03547

Please sign in to comment.