# R2Rust 🚀 R2Rust es un intérprete escrito en **Rust** inspirado en el lenguaje de programación R. Este proyecto reimplementa funcionalidades básicas de R con el objetivo de ser ligero, eficiente y modular. --- ## **Características** - **Tokenización (Lexer):** Convierte texto de entrada en tokens estructurados. - **Análisis Sintáctico (Parser):** Convierte tokens en un AST (Abstract Syntax Tree). - **Evaluación (Evaluator):** Procesa expresiones matemáticas y asignaciones. - **Entorno (Environment):** Gestiona variables y su estado durante la ejecución. - **REPL (Read-Eval-Print Loop):** Interfaz interactiva para evaluar expresiones en tiempo real. --- ## **Instalación** ### **Prerrequisitos** - **Rust**: Necesitas tener instalado Rust en tu máquina. Puedes instalarlo siguiendo [esta guía](https://www.rust-lang.org/tools/install). ### **Clonar el Repositorio** Clona este proyecto desde GitHub: ```bash git clone https://github.com/R2Rust/core.git cd core ``` ### **Compilar el Proyecto** Compila el proyecto utilizando `cargo`: ```bash cargo build ``` --- ## **Uso** ### **Ejecutar el REPL** Para iniciar el REPL interactivo: ```bash cargo run ``` Ejemplo de sesión interactiva: ```plaintext Welcome to R2Rust! 🚀 Type 'exit' to quit or 'help' for instructions. rustr> x <- 10 + 20 Result: 30 rustr> y <- x + 5 Result: 35 rustr> exit Goodbye! ``` --- ## **Estructura del Proyecto** ``` R2Rust/ ├── src/ │ ├── ast.rs # Definición del Abstract Syntax Tree (AST) │ ├── environment.rs # Manejo de variables y estado │ ├── evaluator.rs # Evaluación de expresiones │ ├── lexer.rs # Tokenización de entrada │ ├── parser.rs # Análisis sintáctico │ ├── repl.rs # Read-Eval-Print Loop │ ├── lib.rs # Biblioteca central del proyecto │ └── main.rs # Punto de entrada principal ├── tests/ # Pruebas para los módulos │ ├── lexer_tests.rs │ ├── parser_tests.rs │ ├── evaluator_tests.rs │ └── repl_tests.rs ├── Cargo.toml # Configuración del proyecto y dependencias ├── Cargo.lock # Bloqueo de versiones de dependencias └── README.md # Documentación del proyecto ``` --- ## **Contribuir** ¡Las contribuciones son bienvenidas! Si quieres colaborar: 1. Haz un fork del proyecto. 2. Crea una rama para tu funcionalidad: ```bash git checkout -b feature/nueva-funcionalidad ``` 3. Realiza tus cambios y haz un commit: ```bash git commit -m "Añadir nueva funcionalidad" ``` 4. Sube tu rama al repositorio remoto: ```bash git push origin feature/nueva-funcionalidad ``` 5. Abre un Pull Request en GitHub. --- ## **Pruebas** Ejecuta todas las pruebas para asegurarte de que todo funcione correctamente: ```bash cargo test ``` --- ## **Licencia** Este proyecto está licenciado bajo la **GNU General Public License v3.0**. Consulta el archivo `LICENSE` para más información. ---