Nombre de la aplicación: yarelang.
Lenguaje: C++.
yare es un pequeño lenguaje de programación en crecimiento que tiene algunas características peculiares que pudieran ser utilizadas para implementar un pequeño algoritmo de cálculo numérico o de otra índole.
yare tiene como característica que puedes programar en inglés o en español, por ejemplo, realizar un ciclo, es lo mismo que utilices la palabra reservada while o mientras.
yare está programado en C++ (aunque contiene elementos de C) utilizando Bison y Flex.
El proyecto yare, tiene licencia GPL v3.
Características
Variables
En Yare por defecto hay 26 variables globales listas para utilizarse en cualquier momento, estas tienen de identificador las letras del abecedario, desde A hasta Z.
Los identificadores para estas variables no son sensibles a mayúsculas y minúsculas.
Ejemplo de uso:
Código:
a = 1 + 2 * 3;
z = a + 1;
.
Variables definidas por el usuario
El usuario puede crear variables, pero estas deben estar delimitadas por el caracter ':', dentro de estos caracteres puede estar cualquier combinación entre estos símbolos:
Código:
“
'
Cualquier dígito (0-9)
Espacio
_
#
@
Cualquier letra (excepto la 'ñ')
Tabulador
+
-
^
|
(
)
\
/
!
Ejemplo de uso:
Código:
: hola ! : = -1;
: esta es mi variable !!!! : = 2;
: : = 345345;
: : = 1 + 2 * 3;
:resultados simulacion : = -2.00023;
.
Literales de asignación
Los valores que pueden ser asignados a las variables son los siguientes:
Enteros o decimales, 123762, 3.141516.
Números hexadecimales, 0x0, 0x12a, 0xa, 0xb524, empezando por un cero, seguido de una 'x' mayúscula o minúscula, seguido de cualquier combinación de digitos y de letras entre a y f.
Números octales, 123o, 423o, 76O, 624o, empezando por cualquier dígito entre 0 y 7, seguido de la letra 'o'.
Números binarios, 0101001b, 0001b, 0b, 1b, cualquier combinación entre 1 y 0's seguido de una letra 'b'.
Ejemplos de uso:
Código:
a = ((0x2 ^ 100b) - 3.141516) + 5o;
printn(a);
.
Yare cuenta actualmente con 9 constantes numéricas, son las siguientes:
Código:
pi – número pi
e – valor de e
log2e - valor de log2e
log10e – valor de log10e
ln2 – valor de loge2
ln10 – valor de loge10
sqrt2 – valor de pi entre 2.
sqrt3 – valor de pi entre 3.
sqrt5 – valor de pi entre 5.
Código:
printn(const.pi);
.
printn(const.pi + 2 * 11b);
.
Asignación de variables
La asignación de valores a las variables es bastante flexible.
Puede realizarse de las siguientes maneras:
Utilizando el operador =:
Código:
a = 1 + 2;
.
Código:
a = 1;
a to a + 1;
printn(a);
.
Código:
move 1 + 2 * 3 to a;
printn(a);
.
Código:
mov a, 1 + 2 * 3;
printn(a);
.
Código:
a <- 1 + 2 * 3;
printn(a);
.
Código:
a := 1 + 2 * 3;
printn(a);
.
Código:
set x = 1 + 2 * 3;
printn(x);
.
Código:
let x = 1 + 2 * 3;
printn(x);
.
Código:
set x to 1 + 2 * 3;
printn(x);
.
let x to 1 + 2 * 3;
printn(x);
.
Asignación aleatoria
Se puede dar un valor aleatorio a una variable de la siguiente manera:
Código:
x = ?;
printn(x);
.
Se puede asignar/inicializar una variable a 1, 0 o -1 de la siguiente manera:
Ejemplo de uso:
Código:
a = :);
z = :(;
y = :|;
printn(a);
printn(z);
printn(y);
.
Se puede intercambiar los valores de las variables por medio del operador <->:
Ejemplo de uso:
Código:
x = 2;
:ok: = 3;
x<->:ok:;
printn(x);
printn(:ok:);
.
Se puede utilizar la sentencia print o printn.
La sentencia print imprime el valor de la expresión pasado como argumento sin añadir un fin de línea.
La sentencia printn añade un fin de línea al argumento.
Ejemplo de uso:
Código:
print(const.pi + 2);
.
Código:
printn(const.pi + 2);
.
La sentencia puts imprime el texto en pantalla pero sin añadir un fín de línea.
La sentencia putsn añade un fín de línea al final del texto.
Ejemplos de uso:
Código:
puts("Hola mundo en Yare!");
.
Código:
putsn("Hola mundo en Yare!");
.
Se pueden incluir cualquiera de estos caracteres en el texto a imprimir:
Código:
\n – Nueva línea
\t – Tab horizontal
\s – Espacio
\b – Backspace (retroceso)
\r – Retorno de carro
\f – Alimentación de página (sólo para impresora)
\q – Añade un caracter de comillas dobles '”'
\\ - Añade el caracter '\'
\u – Imprime el siguiente caracter en mayúscula
\l – Imprime el siguiente caracter en minúscula.
\[0-9] – Imprime la cantidad de fin de líneas especificado en el dígito.
Código:
putsn("\tHola\smundo\5");
.
Sentencia IF
Toma una decisión referente a una acción, se ejecuta un bloque si es verdadero (1).
Se puede escribir if(expresión) o si(expresion).
Ejemplo de uso:
Código:
if(const.pi * 2 <= 10) {
putsn("Ok");
}
.
Usando else.
Código:
if(const.pi * 2 <= 10) {
putsn("Ok");
} else {
putsn(“Nel ... “);
}
.
Usando else-if:
Código:
x = 2;
if(x == 0) {
putsn("cero...");
} else if(x == 1) {
putsn("uno ...");
} else if(x == 2) {
putsn("dos ... ");
} else {
putsn("otro ... ");
}
.
Operadores lógicos y relacionales
Código:
|| - OR
&& - AND
>= - Mayor igual
<= - Menor igual
== - Igual
!= - Distinto
“or” - OR
“and” - AND
-eq - Igual
-neq – Distinto/Diferente a
-lt – Menor que
-gt – Mayor que
“menor” - Menor que
“menorigual” - Menor igual
“mayor” - Mayor que
“mayorigual” - Mayor o igual
“igual” - Igual
|, or a nivel de bits
&, and a nivel de bits
x = 2;
if(x igual 2) {
putsn("ok");
}
.
x = 2;
y = x -eq 2;
printn(y);
.
x = 2;
if((x -eq 1) or (x == 2)) {
putsn("Ok ... ");
} else {
putsn("Nel ... ");
}
.
x = 6;
if(x menor 10) {
putsn("bien ... ");
}
.
Operador ternario
yare cuenta con el clásico operador ternario utilizado para expresiones de la siguiente manera:
Código:
expresión-lógica ? valor-si-verdadero : valor-si-falso
Ejemplos de uso:
Código:
x = 2;
x = (x mod 2 == 0) ? 0 : 1;
printn(x);
.
Operadores aritméticos
Código:
+
“mas” Operador de suma con palabra
-
“menos” Operador de resta con palabra
*
“por” Operador de multiplicación con palabra
/
“entre” Operador de división con palabra
%
mod Operador módulo con palabra
! Operador unario “not”
~ Operador unario “not”
not Operador unario “not”
no Operador unario “not”
^ Exponenciación
xorop Operador XOR
<< Desplazamiento de bits a la izquierda
>> Desplazamiento de bits a la derecha
Ciclos
while
Ejemplo de uso:
Código:
while(x menor 10) {
printn(x);
x to x + 1;
}
.
while(x@+ menor 10) printn(x);
.
Las llaves de bloques se utilizan cuando queremos agrupar las sentencias al ciclo, pero si solo es una sentencia dentro del ciclo se pueden omitir las llaves de bloque.
do-while
Ejemplo de uso:
Código:
do {
printn(x);
set x to x + 1;
} while(x menor 10);
.
for de rango
La sintaxis del ciclo for de rango es la siguiente:
Código:
for(expresion ...[.+] expresion, variable global de control) {
bloque de código
}
Ejemplo de uso:
Código:
foreach(1 ...... 20, x) {
printn(x);
}
.
Código:
foreach(1 .... rand(), x) {
printn(x);
}
.
La variable global, en este caso x almacenará el valor de la iteración dentro del ciclo.
Se pueden utilizar la cantidad de puntos que se desee, siempre y cuando sean más de 3.
Sentencia break
Al igual que otros lenguajes de programación, yare tiene una sentencia break que ayudará a detener el ciclo.
Ejemplo de uso:
Código:
foreach(1 ... rand(), x) {
if(x igual 5) {
break;
} else {
printn(x);
}
}
.
Código:
foreach(1 ... 10, x) {
foreach(1 ... x, y) {
puts("*");
}
puts("\n");
}
.
Comentarios
Hay diversas maneras de utilizar comentarios dentro de un programa yare, son los siguientes:
Código:
# Comentario tipo shell
Ejemplo de uso:
Código:
x = 1 + 2; # Comentario ....
.
Código:
// Comentario tipo C++
La sintaxis del comentario anterior sirve para comentarios de una sola línea.
Ejemplo de uso:
Código:
x = 1 + 2; // Comentario ....
Código:
rem Comentario tipo Basic
La sintaxis del comentario anterior sirve para comentarios de una sola línea.
Ejemplo de uso:
Código:
x = 1 + 2; rem Comentario ....
rem ... Otro comentario ...
.
Código:
:: Comentario tipo Batch Scripts
La sintaxis del comentario anterior sirve para comentarios de una sola línea.
Ejemplo de uso:
Código:
x = 1 + 2; :: Mi comentario ...
::: Hola!
.
Código:
-- Comentario tipo SQL
Aún hay más características por mostrar, pueden consultarlas en mi blog:
http://leonardogtzr.wordpress.com/
Pueden descargar el código desde aquí:
https://github.com/leogtzr/yarelang-c--/archive/master.zip
Pantallazo:
Factorial de un número:
¡Saludos!