From 165a52c33fb3b0dd71d0136cd93c66ccb7d929ab Mon Sep 17 00:00:00 2001 From: Perrofa <111369005+Perrofa@users.noreply.github.com> Date: Mon, 8 Jan 2024 21:59:30 -0600 Subject: [PATCH 1/3] Update relation_analyser.py Por alguna razon en la carpeta donde se encuentra mi archivo.py de la act que seria este codigo se encuentra otro arhivo.py llamado: tempCodeRunnerFile.py que a la hora de intentar abrirlo da el codigo para que se pueda graficar en graphviz y lo que da el codigo hecho es lo que pedia que diera como resultado en la consola --- labs/01/relation_analyser.py | 48 ++++++++++++++++++++---------------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/labs/01/relation_analyser.py b/labs/01/relation_analyser.py index 6fd8b91..a4e3398 100644 --- a/labs/01/relation_analyser.py +++ b/labs/01/relation_analyser.py @@ -1,36 +1,42 @@ -import graphviz # https://graphviz.readthedocs.io/en/stable/index.html +import networkx as nx +import matplotlib.pyplot as plt +import itertools def analyze(val): """ - Here goes your code to do the analysis - 1. Reflexive: aRa for all a in X, - 2. Symmetric: aRb implies bRa for all a,b in X - 3. Transitive: aRb and bRc imply aRc for all a,b,c in X, + Aquí va tu código para realizar el análisis. + 1. Reflexiva: aRa para todo a en X, + 2. Simétrica: aRb implica bRa para todo a, b en X + 3. Transitiva: aRb y bRc implica aRc para todo a, b, c en X """ - Reflexive = False - Symmetric = False - Transitive = False + Reflexiva = all((a, a) in val for a, _ in val) + Simetrica = all((b, a) in val for a, b in val) + Transitiva = all((a, c) in val for a, b in val for _, c in val if b == _) - return Reflexive,Symmetric,Transitive + return Reflexiva, Simetrica, Transitiva, val -def plot(): +def plot(relation): """ - Here goes your code to do the plot of the set + Aquí va tu código para realizar la representación gráfica del conjunto. """ - g = graphviz.Digraph('G', filename='hello.gv') - g.edge('Hello', 'World') - g.view() + g = nx.DiGraph() + g.add_edges_from(relation) + nx.draw(g, with_labels=True, font_weight='bold') + plt.show() def main(): - print("Hello World analyzing input!") - val = input("Enter your set: ") + print("Hola mundo analizando entrada!") + val = eval(input("Ingresa tu conjunto en el formato [(a, b), (c, d), ...]: ")) print(val) - Reflexive,Symmetric,Transitive = analyze(val) + Reflexiva, Simetrica, Transitiva, relation = analyze(val) print(f"\ - 1. Reflexive: {Reflexive} \ - 2. Symmetric: {Symmetric} \ - 3. Transitive: {Transitive}") - plot() + 1. Reflexiva: {Reflexiva} \ + 2. Simétrica: {Simetrica} \ + 3. Transitiva: {Transitiva}") + if not (Reflexiva and Simetrica and Transitiva): + print("La relación no es simétrica y reflexiva, por lo que no tiene una relación de equivalencia.") + else: + plot(relation) if __name__ == "__main__": main() From 8d2880ec3e39682c9298400a2c46bee45b5fcd20 Mon Sep 17 00:00:00 2001 From: Perrofa <111369005+Perrofa@users.noreply.github.com> Date: Mon, 8 Jan 2024 22:01:44 -0600 Subject: [PATCH 2/3] Update relation_analyser.py --- labs/01/relation_analyser.py | 48 ++++++++++++++++-------------------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/labs/01/relation_analyser.py b/labs/01/relation_analyser.py index a4e3398..6fd8b91 100644 --- a/labs/01/relation_analyser.py +++ b/labs/01/relation_analyser.py @@ -1,42 +1,36 @@ -import networkx as nx -import matplotlib.pyplot as plt -import itertools +import graphviz # https://graphviz.readthedocs.io/en/stable/index.html def analyze(val): """ - Aquí va tu código para realizar el análisis. - 1. Reflexiva: aRa para todo a en X, - 2. Simétrica: aRb implica bRa para todo a, b en X - 3. Transitiva: aRb y bRc implica aRc para todo a, b, c en X + Here goes your code to do the analysis + 1. Reflexive: aRa for all a in X, + 2. Symmetric: aRb implies bRa for all a,b in X + 3. Transitive: aRb and bRc imply aRc for all a,b,c in X, """ - Reflexiva = all((a, a) in val for a, _ in val) - Simetrica = all((b, a) in val for a, b in val) - Transitiva = all((a, c) in val for a, b in val for _, c in val if b == _) + Reflexive = False + Symmetric = False + Transitive = False - return Reflexiva, Simetrica, Transitiva, val + return Reflexive,Symmetric,Transitive -def plot(relation): +def plot(): """ - Aquí va tu código para realizar la representación gráfica del conjunto. + Here goes your code to do the plot of the set """ - g = nx.DiGraph() - g.add_edges_from(relation) - nx.draw(g, with_labels=True, font_weight='bold') - plt.show() + g = graphviz.Digraph('G', filename='hello.gv') + g.edge('Hello', 'World') + g.view() def main(): - print("Hola mundo analizando entrada!") - val = eval(input("Ingresa tu conjunto en el formato [(a, b), (c, d), ...]: ")) + print("Hello World analyzing input!") + val = input("Enter your set: ") print(val) - Reflexiva, Simetrica, Transitiva, relation = analyze(val) + Reflexive,Symmetric,Transitive = analyze(val) print(f"\ - 1. Reflexiva: {Reflexiva} \ - 2. Simétrica: {Simetrica} \ - 3. Transitiva: {Transitiva}") - if not (Reflexiva and Simetrica and Transitiva): - print("La relación no es simétrica y reflexiva, por lo que no tiene una relación de equivalencia.") - else: - plot(relation) + 1. Reflexive: {Reflexive} \ + 2. Symmetric: {Symmetric} \ + 3. Transitive: {Transitive}") + plot() if __name__ == "__main__": main() From 69c15a813eff3c89e11034af385646cc66fdad25 Mon Sep 17 00:00:00 2001 From: Perrofa <111369005+Perrofa@users.noreply.github.com> Date: Mon, 29 Jan 2024 23:56:05 -0600 Subject: [PATCH 3/3] Act 3 --- labs/03/lexer.l | 40 +++++++++++++++++++++++++++ labs/03/parser.y | 71 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 111 insertions(+) create mode 100644 labs/03/lexer.l create mode 100644 labs/03/parser.y diff --git a/labs/03/lexer.l b/labs/03/lexer.l new file mode 100644 index 0000000..7625e55 --- /dev/null +++ b/labs/03/lexer.l @@ -0,0 +1,40 @@ +%{ +#include "y.tab.h" +#include +#include +#include +%} + +%{ +int line_number = 1; +%} + +%% +a|the {yylval.sval = strdup(yytext); return ARTICLE;} +boy|girl|flower {yylval.sval = strdup(yytext); return NOUN;} +touches|likes|sees {yylval.sval = strdup(yytext); return VERB;} +with {yylval.sval = strdup(yytext); return PREP;} + +[ \t]+ /* Ignorar espacios en blanco y tabulaciones */ + +^[ \t]*\n /* Ignorar líneas en blanco */ + +\n { line_number++; return '\n'; } + +. { fprintf(stderr, "Error: Caracter inesperado '%s' en la línea %d\n", yytext, line_number); } + +%% + +// Función auxiliar para liberar la memoria asignada a las cadenas. +void yystring_free(char* str) { + if (str != NULL) { + free(str); + } +} + +// Función principal de análisis léxico. +int yylex() { + int token = yylex_aux(); // Obtener el token del analizador léxico generado por Flex. + yystring_free(yylval.sval); // Liberar memoria asignada a las cadenas después de su uso. + return token; +} diff --git a/labs/03/parser.y b/labs/03/parser.y new file mode 100644 index 0000000..44853fc --- /dev/null +++ b/labs/03/parser.y @@ -0,0 +1,71 @@ +%{ +#include +#include +#include + +extern int line_number; +extern FILE *yyin; +extern int yylex(); +void yyerror(const char *s); +%} + +%union { + char *sval; +} + +%token ARTICLE NOUN VERB PREP + +%% + +/* Regla inicial */ +start: sentences '\n' { printf("Sentence is valid.\n"); } + +/* Producción recursiva para manejar múltiples oraciones */ +sentences: /* empty */ + | sentences sentence '\n' { printf("Sentence is valid.\n"); } + +/* Definición de una oración */ +sentence: NOUN_PHRASE VERB_PHRASE { printf("Complete sentence: %s %s\n", $1, $2); } + | NOUN_PHRASE { printf("Noun phrase: %s\n", $1); } + | VERB_PHRASE { printf("Verb phrase: %s\n", $1); } +; + +/* Definición de una frase nominal */ +NOUN_PHRASE: ARTICLE NOUN { $$ = strdup(strcat($1, $2)); } + | ARTICLE NOUN PREP_PHRASE { $$ = strdup(strcat(strcat($1, $2), $3)); } +; + +/* Definición de una frase verbal */ +VERB_PHRASE: VERB { $$ = strdup($1); } + | VERB NOUN_PHRASE { $$ = strdup(strcat($1, $2)); } +; + +/* Definición de una frase preposicional */ +PREP_PHRASE: PREP NOUN_PHRASE { $$ = strdup(strcat($1, $2)); } +; + +%% + +/* Función de manejo de errores */ +void yyerror(const char *s) { + fprintf(stderr, "Syntax error at line %d: %s\n", line_number, s); +} + +/* Función principal */ +int main(int argc, char **argv) { + if (argc == 2) { + if (!(yyin = fopen(argv[1], "r"))) { + perror("Error al abrir el archivo: "); + return 1; + } + + yyparse(); + fclose(yyin); + + } else { + fprintf(stderr, "Usage: %s filename\n", argv[0]); + return 1; + } + + return 0; +}