#repl #interpreter #ast #syntax-tree #r-programming #rust

bin+lib r2rust-core

An interpreter inspired by R, implemented in Rust with a modular design

1 unstable release

0.1.0 Nov 22, 2024

#1117 in Development tools

Download history 142/week @ 2024-11-22 7/week @ 2024-11-29 7/week @ 2024-12-06

156 downloads per month

GPL-3.0 license

29KB
224 lines

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.

Clonar el Repositorio

Clona este proyecto desde GitHub:

git clone https://github.com/R2Rust/core.git
cd core

Compilar el Proyecto

Compila el proyecto utilizando cargo:

cargo build

Uso

Ejecutar el REPL

Para iniciar el REPL interactivo:

cargo run

Ejemplo de sesión interactiva:

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:
    git checkout -b feature/nueva-funcionalidad
    
  3. Realiza tus cambios y haz un commit:
    git commit -m "Añadir nueva funcionalidad"
    
  4. Sube tu rama al repositorio remoto:
    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:

cargo test

Licencia

Este proyecto está licenciado bajo la GNU General Public License v3.0. Consulta el archivo LICENSE para más información.


Dependencies

~5.5MB
~75K SLoC