CLRS Kit Español
clrs-kit-esp es una extensión para Visual Studio Code orientada al soporte de un lenguaje de pseudocódigo, fuertemente inspirado en la sintaxis utilizada en el libro Introducción a Algoritmos (CLRS).
💻 Inicio en VS Code
| Concepto |
Descripción |
| Extensión de archivo |
.clrs |
| Ejecutar código |
Ejecuta el código escrito en CLRS mediante su transpilación a JavaScript y posterior ejecución en tiempo de ejecución. |
| Construir código (JS) |
Transpila el código CLRS a JavaScript sin ejecutarlo, generando un archivo listo para ser usado en Node.js. |
⚙️ Estado actual (versión 1.0.8)
- Parser completo de CLRS construido con Chevrotain.
- Generación automática del Árbol de Sintaxis Abstracta (AST).
- Transpilador de CLRS a JavaScript.
- Ejecución de programas CLRS directamente desde Visual Studio Code.
- Generación de código JavaScript sin necesidad de ejecutarlo.
- Resaltado de sintaxis mediante una gramática TextMate.
- Configuración del lenguaje con indentación automática y plegado de código.
- Snippets integrados para la sintaxis de CLRS.
- Biblioteca estándar para manejo de archivos, cadenas, arreglos y funciones matemáticas.
- Reporte de errores de sintaxis y de ejecución.
- Soporte para funciones, arreglos, expresiones, condicionales, ciclos y operaciones de entrada/salida.
- Soporte para CodeLens en el uso de botón para ejecutar y construir.
📖 Filosofía del lenguaje
El lenguaje está diseñado bajo los siguientes principios:
- Sintaxis de pseudocódigo simple y cercana al español.
- Enfoque educativo y académico.
- Simplicidad para principiantes.
- Similitud con pseudocódigo CLRS.
- Caso de uso enfocado en el diseño y aprendizaje de algoritmos.
🛠️ Requisitos
- Visual Studio Code
- Node.js (para la ejecución)
🧑💻 Autor
Proyecto desarrollado por j-hernandez-dev como herramienta educativa abierta.
📜 Licencia (GPLv2)
Este proyecto es de código abierto. Puede ser modificado y extendido libremente, siempre que se mantenga la atribución al autor original.
⚠️ Problemas conocidos
- No hay soporte para el análisis semántico. Por lo que todo es realizado en el análisis de JavaScript sin especificar la localización del error.
- Es posible que determinado código se genere de manera incorrecta por el transpilador.
🧮 Características del lenguaje
Comentarios
CLRS únicamente admite comentarios de una sola línea mediante //.
// Comentario simple
Variables
Las variables son dinámicas y débilmente tipadas. Esto significa que pueden almacenar valores de distintos tipos y cambiar de tipo durante la ejecución mediante conversiones implícitas cuando sea necesario.
variable1 <- 10
variable2 <- "texto"
variable1 <- variable2
Las variables son siempre mutables; el lenguaje no dispone de constantes. Su ámbito es local a la función donde se definen y la asignación se realiza mediante el operador <-.
variable1 <- 10
variable1 <- 2
variable1 <- 4
Las variables deben inicializarse en el momento de su creación, por lo que no es posible declararlas sin asignarles un valor inicial. Los valores admitidos son numéricos, cadenas y lógicos.
variable1 <- 10
variable2 <- "texto"
variable3 <- VERDAD
Arreglos
Los arreglos son dinámicos. Su tamaño y número de dimensiones se determinan automáticamente conforme se accede a nuevas posiciones.
arreglo[0] <- 10
arregloBi[2][2] <- 10
Es posible asignar un arreglo completo a una variable o el contenido de una variable a un arreglo. En ambos casos, la asignación copia el contenido correspondiente.
variable1 <- arreglo
arregloBi <- variable2
Entrada y salida
La instrucción escribir permite mostrar información en la consola. Puede imprimir valores individuales, varios valores separados por comas, expresiones concatenadas y arreglos completos.
escribir variable1
escribir arreglo
escribir variable1, variable2, variable3
escribir variable1 + variable2 + variable3
La instrucción leer permite obtener datos desde la consola. Es posible leer una o varias variables en una sola instrucción. El tipo del valor leído se determina automáticamente.
leer variable1
leer variable1, variable2, variable3
Estructuras de selección
La única estructura de selección es si, junto con las variantes sino si y sino. Los bloques de código se delimitan mediante indentación, por lo que es importante mantener una indentación consistente.
si variable3 o VERDAD
escribir "a"
sino si variable1 > 3
escribir "b"
sino si variable2 = "texto"
escribir "c"
sino
escribir "d"
Operadores
CLRS dispone de operadores lógicos, relacionales y aritméticos similares a los de otros lenguajes. La comparación de igualdad utiliza el operador =.
si VERDAD y VERDAD
escribir "a"
si FALSO o VERDAD
escribir "b"
si 10 > 20
escribir "c"
si 20 < 10
escribir "d"
si 10 = 10
escribir "e"
si 20 != 10
escribir "f"
Ciclo para
La estructura para dispone de dos variantes.
La variante hasta incrementa automáticamente la variable de iteración hasta que alcance el valor indicado por la expresión final.
para i <- 0 hasta 5
escribir i
La variante bajando decrementa automáticamente la variable de iteración hasta alcanzar el valor indicado.
para j <- 5 bajando 0
escribir j
Ciclo mientras
La estructura mientras ejecuta repetidamente un bloque de instrucciones mientras la condición evaluada sea verdadera.
mientras variable3 y FALSO
escribir "no entra"
Funciones
Las funciones se definen mediante un identificador, una lista de parámetros y un bloque de código.
holaMundo()
escribir "Hola mundo"
Su invocación utiliza la misma sintaxis que su definición. Después de una llamada no debe agregarse un bloque indentado, ya que este podría interpretarse como el cuerpo de una nueva función.
holaMundo()
Las funciones pueden recibir cualquier cantidad de parámetros y devolver un valor mediante la instrucción retornar.
suma(a, b)
retornar a + b
También es posible recibir arreglos como parámetros. Para ello únicamente se especifica el número de dimensiones del arreglo.
suma2(a, b[])
retornar a + b[0]
Las llamadas a funciones pueden utilizarse como parte de cualquier expresión. Los arreglos se pasan simplemente mediante su identificador.
variable1 <- suma(1, 2)
escribir suma(1, 2)
variable1 <- suma2(1, arreglo)
escribir suma2(1, arreglo)
Es posible utilizar como identificador principal en una función para usarlo como punto de entrada. No es necesario realizar una llamada explícita.
principal()
escribir "Hola mundo"
principal() // No es necesario, se ejecutaría 2 veces
Ejemplo
Ejemplo completo de Bubble Sort.
arreglo[0] <- 5
arreglo[1] <- 2
arreglo[2] <- 9
arreglo[3] <- 1
arreglo[4] <- 6
n <- LONGITUD(arreglo)
escribir n
i <- 0
j <- 0
para i <- 0 hasta n - 1
para j <- 0 hasta n - i - 2
si arreglo[j] > arreglo[j + 1]
temp <- arreglo[j]
arreglo[j] <- arreglo[j + 1]
arreglo[j + 1] <- temp
escribir arreglo
📚 Biblioteca estándar de CLRS
La biblioteca estándar de CLRS proporciona funciones integradas para manejo de archivos, operaciones matemáticas, cadenas y arreglos.
📁 Archivos
| Función CLRS |
Descripción |
Retorno |
LEER_ARCHIVO(ruta) |
Lee el contenido de un archivo de texto. |
Cadena |
EXISTE_ARCHIVO(ruta) |
Verifica si un archivo existe. |
Lógico |
PESO_ARCHIVO(ruta) |
Obtiene el tamaño del archivo en bytes. |
Número |
CREAR_ARCHIVO(ruta) |
Crea un archivo vacío. |
- |
ESCRIBIR_ARCHIVO(ruta, contenido) |
Escribe contenido al final del archivo. |
- |
ELIMINAR_ARCHIVO(ruta) |
Elimina un archivo si existe. |
- |
🔢 Matemáticas
| Función CLRS |
Descripción |
Retorno |
ABSOLUTO(x) |
Valor absoluto de un número. |
Número |
MINIMO(a, b) |
Devuelve el menor de dos valores. |
Número |
MAXIMO(a, b) |
Devuelve el mayor de dos valores. |
Número |
REDONDEO(x) |
Redondea al entero más cercano. |
Número |
PISO(x) |
Redondea hacia abajo. |
Número |
RAIZ2(x) |
Raíz cuadrada. |
Número |
RAIZ3(x) |
Raíz cúbica. |
Número |
EXPONENCIAL(x) |
e elevado a x. |
Número |
LOG(x) |
Logaritmo natural. |
Número |
LOG10(x) |
Logaritmo base 10. |
Número |
LOG2(x) |
Logaritmo base 2. |
Número |
SENO(x) |
Seno de un ángulo. |
Número |
COSENO(x) |
Coseno de un ángulo. |
Número |
TANGENTE(x) |
Tangente de un ángulo. |
Número |
ARCOSENO(x) |
Arcoseno. |
Número |
ARCOCOSENO(x) |
Arcocoseno. |
Número |
A_RADIANES(x) |
Convierte grados a radianes. |
Número |
A_GRADOS(x) |
Convierte radianes a grados. |
Número |
PI() |
Constante π. |
Número |
EULER() |
Constante e. |
Número |
ALEATORIO(min, max) |
Número aleatorio. |
Número |
PROMEDIO(x) |
Promedio de un arreglo. |
Número |
SUMATORIA(x) |
Suma total de un arreglo. |
Número |
MEDIANA(x) |
Mediana de un conjunto. |
Número |
VARIANZA(x) |
Varianza de un conjunto. |
Número |
🔤 Cadenas
| Función CLRS |
Descripción |
Retorno |
LONGITUD(x) |
Longitud de una cadena o estructura. |
Número |
CARACTER_EN(cadena, posición) |
Obtiene un carácter en una posición. |
Cadena |
SUB_CADENA(cadena, inicio, fin) |
Extrae una subcadena. |
Cadena |
BUSCAR(cadena, texto) |
Posición de una subcadena. |
Número |
CONTIENE(cadena, texto) |
Verifica si contiene un texto. |
Lógico |
MAYUSCULAS(cadena) |
Convierte a mayúsculas. |
Cadena |
MINUSCULAS(cadena) |
Convierte a minúsculas. |
Cadena |
RECORTAR(cadena) |
Elimina espacios en blanco. |
Cadena |
REEMPLAZAR(cadena, viejo, nuevo) |
Reemplaza texto. |
Cadena |
DIVIDIR(cadena, separador) |
Divide en arreglo. |
Arreglo |
ES_NUMERO(cadena) |
Verifica si es número. |
Lógico |
ES_VACIA(cadena) |
Verifica si está vacía. |
Lógico |
EMPIEZA_CON(cadena, texto) |
Verifica prefijo. |
Lógico |
TERMINA_CON(cadena, texto) |
Verifica sufijo. |
Lógico |
📦 Arreglos
| Función CLRS |
Descripción |
Retorno |
AGREGAR(arreglo, valor) |
Agrega un elemento al final. |
Número |
ELIMINAR(arreglo, índice) |
Elimina un elemento. |
- |
INSERTAR(arreglo, índice, valor) |
Inserta en posición. |
- |
BUSCAR_INDICE(arreglo, valor) |
Índice de un elemento. |
Número |
CONTIENE_VALOR(arreglo, valor) |
Verifica existencia. |
Lógico |
ORDENAR(arreglo) |
Ordena el arreglo. |
- |
INVERTIR(arreglo) |
Invierte el arreglo. |
Arreglo |
COPIAR(arreglo) |
Copia el arreglo. |
Arreglo |
UNIR(arreglo, separador) |
Une elementos en cadena. |
Cadena |