From 598d7b1d49efdf22fd40aa59f49e856a12f315af Mon Sep 17 00:00:00 2001 From: Santiago Lo Coco Date: Wed, 22 Jun 2022 22:47:39 -0300 Subject: [PATCH] Update *.md Co-authored-by: Ezequiel Bellver Co-authored-by: Juan Barmasch --- CMakeLists.txt | 7 +--- README.md | 23 +++++++++++ doc/fases.png | Bin 0 -> 68042 bytes doc/informe.md | 25 ++++++----- .../syntactic-analysis/bison-grammar.y | 39 ------------------ src/main.c | 1 - 6 files changed, 36 insertions(+), 59 deletions(-) create mode 100644 doc/fases.png diff --git a/CMakeLists.txt b/CMakeLists.txt index b4b662b..58418c7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -18,9 +18,6 @@ if (CMAKE_C_COMPILER_ID STREQUAL "GNU") add_compile_options(-Wno-implicit-fallthrough) add_compile_options(-pedantic) add_compile_options(-pedantic-errors) - add_compile_options(-fsanitize=address) - add_compile_options(-fno-omit-frame-pointer) - add_link_options(-fsanitize=address) add_custom_command( OUTPUT ../src/frontend/lexical-analysis/flex-scanner.c @@ -57,14 +54,12 @@ file(GLOB_RECURSE incorrect_use_cases "doc/examples/incorrect/use-case-*.b" ) enable_testing() foreach(test ${correct_use_cases}) add_test(NAME ${test} - # COMMAND ${CMAKE_SOURCE_DIR}/run.sh ${test} COMMAND ${CMAKE_BINARY_DIR}/BFBCompiler ${test} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) endforeach() foreach(test ${incorrect_use_cases}) add_test(NAME ${test} - # COMMAND ${CMAKE_SOURCE_DIR}/run.sh ${test} - COMMAND ${CMAKE_BINARY_DIR}/BFBCompiler -v + COMMAND ${CMAKE_BINARY_DIR}/BFBCompiler ${test} WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) set_tests_properties(${test} PROPERTIES WILL_FAIL TRUE) endforeach() diff --git a/README.md b/README.md index d79103f..c39cfdc 100644 --- a/README.md +++ b/README.md @@ -21,15 +21,38 @@ Debe instalar - [Python v3.10.5](https://www.python.org/) - [Pip v21.0](https://pip.pypa.io/en/stable/installation/) - [SymPy v1.5.1](https://pypi.org/project/sympy/) +- [Symbolic v2.9.0](https://octave.sourceforge.io/symbolic/) ### Linux/macOS Estos se encuentran disponibles en el repositorio de la vasta mayoría de distribuciones. +Una vez instalados `bison`, `cmake`, `flex`, `gcc`, `make`, `octave` y `python` debe instalar `SymPy` y el paquete `symbolic` de `octave`. + +Se recomienda usar `pip` para instalar `SymPy`: + +```bash +pip install --user sympy==1.5.1 +``` + +Luego, debe instalar `symbolic` en octave corriendo: + +```bash +octave +``` + +y una vez adentro + +```bash +pkg install -forge symbolic +``` + ### Windows Se debe instalar _Microsoft Visual Studio 2022_ con las extensiones para desarrollar aplicaciones en _C/C++_, así como también las herramientas requeridas, con excepción del compilador _GCC_ y la herramienta _Make_. +Consulte cómo instalar `SymPy`. La instalación de `symbolic` es idéntica al paso anterior. + ## Compilación ### Linux/macOS diff --git a/doc/fases.png b/doc/fases.png new file mode 100644 index 0000000000000000000000000000000000000000..cdf2cb69965e00aaa620b63e4b0b88d7cdffa5aa GIT binary patch literal 68042 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ŕ*YU64$IFU^tNI%G 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 i7x>?M_kX#-M+^ -variables o funciones no pueden ser x -solo se peuden escribir funciones que tengan a x como incognita -las variables y funciones son globales -no es tipado -> puedo pisar una funcion con una variable -algo mas? +- No se permite definir ni variables ni funciones con nombre 'x' debido a que queda reservado para la incognita de las funciones. +- Las funciones solo pueden tener una incognita denotada como 'x'. +- Las variables y las funciones tienen scope global, esto viene dado por el uso de octave como motor matemático. +- El lenguaje no es tipado, las variables pueden ser pisadas y tratadas como funciones y viceversa. - -• Descripción de la gramática/sintaxis del lenguaje diseñado. -• Descripción del desarrollo del proyecto y de las fases del compilador. +## Gramática +Las reglas de la gramática se encuentran definidas en __bison-grammar.y__ y la sintáxis está ampliamente usada en los casos de uso en __/doc/examples/\*\*__. ## Desarrollo y fases - +Fases del compilador ## Dificultades -Al realizar el backend del trabajo surgieron dificultades relacionadas a los métodos numéricos usados, principalmente debido al error de la representacion de punto flotante. Es por esto que se optó por el uso de `octave` y la librería `SymPy` para el calculo de derivadas, que deriva la función de manera simbólica (sin utilizar métodos numéricos). Así mismo se utiliza la función `quadv` que utiliza el método de [Simpson 3/8 compuesto][2] para el cálculo de integrales. +Al realizar el backend del trabajo surgieron dificultades relacionadas a los métodos numéricos usados, principalmente debido al error de la representacion de punto flotante. Es por esto que se optó por el uso de `octave` y la librería `SymPy` para el cálculo de derivadas, que deriva la función de manera simbólica (sin utilizar métodos numéricos). Asimismo se utiliza la función `quadv` que utiliza el método de [Simpson 3/8 compuesto][2] para el cálculo de integrales. Aquí surgieron distintas alternativas: 1. Hacer un llamado a octave cada vez que necesitemos derivar o integrar. @@ -68,6 +65,8 @@ De aquí se descartó rápidamente la primera opción pues es muy ineficiente. S Se pueden agregar arrays (que no impondría una gran dificultad) y distintas funcionalidades como por ejemplo taylor, limites, etc. Estas últimas tampoco serían díficiles pues `octave` las soporta de forma nativa (con el paquete de `symbolics` que es el que se usa actualmente). ## Bibliografía +[[1]] https://docs.octave.org/interpreter/Getting-Started-with-Oct_002dFiles.html +[[2]] http://www.unsj.edu.ar/unsjVirtual/metodos/wp-content/uploads/2015/09/NotasMetodos-Cap3.pdf + [1]: https://docs.octave.org/interpreter/Getting-Started-with-Oct_002dFiles.html [2]: http://www.unsj.edu.ar/unsjVirtual/metodos/wp-content/uploads/2015/09/NotasMetodos-Cap3.pdf - diff --git a/src/frontend/syntactic-analysis/bison-grammar.y b/src/frontend/syntactic-analysis/bison-grammar.y index 08ea8a3..80286c4 100644 --- a/src/frontend/syntactic-analysis/bison-grammar.y +++ b/src/frontend/syntactic-analysis/bison-grammar.y @@ -22,7 +22,6 @@ Domain * domain; Block * block; Composite * composite; - // NumArray * numArray; AssignVariable * assignVariable; int intNumber; @@ -48,10 +47,8 @@ %type for_statement %type composite %type print -/* %type numArrays numArray */ %type positive_constant %type escapeString -/* %type positive_constant */ %token ADD %token SUB @@ -184,50 +181,16 @@ composite: ID COMPOSITE ID | ID COMPOSITE composite { $$ = CompositeCompGrammarAction($1, $3); } ; -/* expressions: expression { $$ = $1; } - | expression COMMA expressions { $$ = ExpressionsGrammarAction($1, $3); } - ; */ - -/* ids: ID { $$ = $1 } - | ID COMMA ids { $$ = DoubleGrammarAction($1) } - ; */ - -/* numArray: OPEN_BRACKETS expressions CLOSE_BRACKETS { $$ = $2; } - ; - -numArrays: numArray { $$ = DoubleGrammarAction($1) } - | numArray COMMA numArrays { $$ = DoubleGrammarAction($1) } - ; - -arrayNumArray: OPEN_BRACKETS numArrays CLOSE_BRACKETS { $$ = DoubleGrammarAction($1) } - ; */ - -/* idArray: OPEN_BRACKETS ids CLOSE_BRACKETS { $$ = DoubleGrammarAction($1) } - ; */ - escapeString: ESCAPESTRING { $$ = EscapedStringGrammarAction($1); } | ESCAPESTRING ADD escapeString { $$ = EscapedStringsGrammarAction($1, $3); } ; - /* -escapeStrings: escapeString { $$ = $1 } - | escapeString COMMA escapeStrings { $$ = DoubleGrammarAction($1) } - ; -escapeStringArray: OPEN_BRACKETS escapeStrings CLOSE_BRACKETS { $$ = DoubleGrammarAction($1) } - ; -*/ evaluate: EVALUATE ID IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS { $$ = EvaluateGrammarAction($2, $5); } - /* | EVALUATE ID IN numArray { $$ = DoubleGrammarAction($1) } */ | ID OPEN_PARENTHESIS expression CLOSE_PARENTHESIS { $$ = EvaluateGrammarAction($1, $3); } - /* | EVALUATE idArray IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS { $$ = DoubleGrammarAction($1) } */ - /* | EVALUATE idArray IN numArray { $$ = DoubleGrammarAction($1) } */ - /* | idArray OPEN_PARENTHESIS expression CLOSE_PARENTHESIS { $$ = DoubleGrammarAction($1) } */ ; integrate: INTEGRATE ID BETWEEN OPEN_PARENTHESIS expression AND_INT expression CLOSE_PARENTHESIS { $$ = IntegrateGrammarAction($2, $5, $7); } | INTEGRATE ID OPEN_PARENTHESIS expression AND_INT expression CLOSE_PARENTHESIS { $$ = IntegrateGrammarAction($2, $4, $6); } - /* | INTEGRATE idArray BETWEEN OPEN_PARENTHESIS expression AND_INT expression CLOSE_PARENTHESIS { $$ = DoubleGrammarAction($1) } - | INTEGRATE idArray OPEN_PARENTHESIS expression AND_INT expression CLOSE_PARENTHESIS { $$ = DoubleGrammarAction($1) } */ | integrate ERR positive_constant { $$ = ErroredIntegrateGrammarAction($1, $3); } ; @@ -241,8 +204,6 @@ statements: statement derivative: DERIVATIVE ID IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS { $$ = SimpleDerivativeGrammarAction($2, $5); } | DERIVATIVE INTEGER ID IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS { $$ = GradedDerivativeGrammarAction($2, $3, $6); } - /* | DERIVATIVE idArray IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS { $$ = DoubleGrammarAction($1) } - | DERIVATIVE INTEGER idArray IN OPEN_PARENTHESIS expression CLOSE_PARENTHESIS { $$ = DoubleGrammarAction($1) } */ | derivative ERR positive_constant { $$ = ErroredDerivativeGrammarAction($1, $3); } ; diff --git a/src/main.c b/src/main.c index 4db6e62..1b7037a 100644 --- a/src/main.c +++ b/src/main.c @@ -70,7 +70,6 @@ int main(int argc, char ** argv) { LogError("Se produjo un error en la aplicacion."); result = EXIT_FAILURE; break; - // return -1; } break; case 1: