r2rust-core 0.1.0

An interpreter inspired by R, implemented in Rust with a modular design.
Documentation
# 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.

---