Especificación - GingerCode/gingercode.org GitHub Wiki

GingerCode especificación

Versión actual

El pseudolenguaje en detalle

Comentarios

Los comentarios solo pueden ser en una línea y se traducen literalmente

// Esto es un comentario
// Esto es otro comentario distinto

Sentencias

Definición

Variables

La definición es así:

definir @numero1 = 1

En js se traduce como:

var numero1 = 1;

Tipos de variables

  • Numéricas:
definir @numero = 1
  • Texto:
definir @texto = "Hola mundo"
definir @otro_texto = 'Hola de nuevo'
  • Listas/array/tuplas:
definir @lista = 1 y 2 y 3
definir @otra_lista = 1,2,3
  • Diccionario/objetos/estructuras:
@lista_de_tags = "azul","verde","rojo"
@trabajador
	@nombre = "Yo mismo"
	@id = 123456
	@tags = @lista_de_tags

En js se traduce como:

var numero = 1;
var texto = "Hola mundo";
var otro_texto = 'Hola de nuevo';
var lista = [1,2,3];
var otra_lista = [1,2,3];
lista_de_tags = ["azul","verde","rojo"];
trabajador = {
	nombre : "Yo mismo",
	id : 123456,
	tags : lista_de_tags
};

Condicionales

If (si...)

La definición es así si {expresion}\n:

si 1 > 0
	mostrar "A"

En js se traduce como:

if(1 > 0){
	console.log("A");
}

else (si no...)

La definición es así si no\n y lógicamente debe ser precedida por una sentencia tipo if:

si 1 < 0
	mostrar "A"
si no
	mostrar "C"

En js se traduce como:

if(1 < 0){
	console.log("A");
} else {
	console.log("C");
}

else if (pero si...)

La definición es así pero si {expresion}\n y lógicamente debe ser precedida por una sentencia tipo if y no necesariamente seguida de una expresión de tipo else:

si 1 > 0
	mostrar "A"
pero si 1<0
	mostrar "B"
si no
	mostrar "C"

En js se traduce como:

if(1 > 0){
	console.log("A");
} else if(1<0){
	console.log("B");
} else {
	console.log("C");
}

Bucles

for (repetir (contador))

La definición es así repetir {expresion:int} [veces]\n :

@contador = 0
repetir 5
	@contador = @contador + 1
	mostrar @contador

En js se traduce como:

contador = 0;
for(var $=0;$<5;$++){
	contador = contador + 1;
	console.log(contador);
}

while (repetir si...)

La definición es así repetir si {expresion}\n :

@contador = 5
repetir si @contador>0
	@contador = @contador - 1
	mostrar @contador

En js se traduce como:

contador = 5;
while(contador>0){
	contador = contador - 1;
	console.log(contador);
}

foreach (por cada)

La definición es así por cada @value en @values\n:

@lista = 1, 2 y 3
por cada @cosa en @lista
	mostrar @cosa

En js se traduce como:

lista = [1, 2,3];
for(cosa in lista){
	console.log(cosa);
}

Funciones/Procedimientos

Definir funciones

La definición es así [procedimiento] #multiplicar [@uno [(y|,) @dos]]\:

procedimiento #saludar @nombre
	mostrar "Hola, " +  @nombre

En js se traduce como:

function saludar( nombre){
	console.log("Hola, " +  nombre);
}

Retorno

La definición es así:

procedimiento #multiplicar @A y @B
	devolver @A multiplicado por @B

En js se traduce como:

function multiplicar( A,B){
	return A * B;
}

Usar funciones

La definición es así #multiplicar [{expresion} [(y|,) {expresion}]]:

procedimiento #multiplicar @A y @B
	devolver @A multiplicado por @B

mostrar #multiplicar 2 y 2
mostrar #multiplicar 10 y 10

En js se traduce como:

function multiplicar( A,B){
	return A * B;
}

console.log(multiplicar(2,2));
console.log(multiplicar(10,10));

Asiganciones

Asignar valor a variable

La definición es así:

@numero1 = 5

En js se traduce como:

numero1 = 5;

Operadores

Lógicos

Todos los operadores lógicos pueden ir en su forma simbólica como en lenguaje natural, todos siguen la misma regla:

La definición es así:

definir @numero1 = 1
definir @numero2 = 2
// igual que..
@condicion = @numero1 == @numero2
@condicion = @numero1 === @numero2
@condicion = @numero1 es igual que @numero2
@condicion = @numero1 igual que @numero2
@condicion = @numero1 igual @numero2
// Mayor que..
@condicion = @numero1 > @numero2
@condicion = @numero1 es mayor que @numero2
@condicion = @numero1 mayor que @numero2
@condicion = @numero1 mayor @numero2
// Mayor o igual que...
@condicion = @numero1 >= @numero2
@condicion = @numero1 es mayor o igual que @numero2
@condicion = @numero1 mayor o igual que @numero2
@condicion = @numero1 mayor o igual @numero2
// Menor que...
@condicion = @numero1 < @numero2
@condicion = @numero1 es menor que @numero2
@condicion = @numero1 menor que @numero2
@condicion = @numero1 menor @numero2
// Menor o igual que...
@condicion = @numero1 <= @numero2
@condicion = @numero1 es menor o igual que @numero2
@condicion = @numero1 menor o igual que @numero2
@condicion = @numero1 menor o igual @numero2

En js se traduce como:

var numero1 = 1;
var numero2 = 2;
// igual que..
condicion = numero1 == numero2;
condicion = numero1 === numero2;
condicion = numero1 == numero2;
condicion = numero1 == numero2;
condicion = numero1 == numero2;
// Mayor que..
condicion = numero1 > numero2;
condicion = numero1 > numero2;
condicion = numero1 > numero2;
condicion = numero1 > numero2;
// Mayor o igual que...
condicion = numero1 >= numero2;
condicion = numero1 >= numero2;
condicion = numero1 >= numero2;
condicion = numero1 >= numero2;
// Menor que...
condicion = numero1 < numero2;
condicion = numero1 < numero2;
condicion = numero1 < numero2;
condicion = numero1 < numero2;
// Menor o igual que...
condicion = numero1 <= numero2;
condicion = numero1 <= numero2;
condicion = numero1 <= numero2;
condicion = numero1 <= numero2;

La lista de sinónimos actual para los operadores lógicos es:

  • "||", "OR", "O"

  • "&&", "AND", "Y"

  • ">=", "es mayor o igual que", "mayor o igual que", "mayor o igual"

  • "<=", "es menor o igual que", "menor o igual que", "menor o igual"

  • ">", "es mayor que", "mayor que", "mayor"

  • "<", "es menor que", "menor que", "menor"

  • "!=", "es distinto que", "distinto que", "distinto"

  • "!==", "no es"

  • "==", "es igual que", "igual que", "igual"

  • "===", "es", "identico"

Buscamos sugerencias de nuevos sinónimos para hacer Ginger más sencillo a la lectura y adaptable a diferentes niveles de abreviatura

Matemáticos

Los operadores matemáticos se usaran preferentemente en su forma simbólica, pero podrán ser:

La definición es así:

definir @numero1 = 1
definir @numero2 = 2
// Suma
@resultado = @numero1 + @numero2
@resultado = @numero1 mas @numero2
@resultado = "un texto con el número" + @numero1 + "se juntan!"
@resultado = "un texto con el número" mas @numero1 mas "se juntan!"
// Resta
@resultado = @numero1 - @numero2
@resultado = @numero1 menos @numero2
// Multiplicación
@resultado = @numero1 * @numero2
@resultado = @numero1 por @numero2
@resultado = @numero1 multiplicado por @numero2
// División
@resultado = @numero1 / @numero2
@resultado = @numero1 dividido @numero2
@resultado = @numero1 dividido entre @numero2
// Resto/Módulo
@resultado = @numero1 % @numero2
@resultado = @numero1 resto @numero2
@resultado = @numero1 resto entre @numero2

En js se traduce como:

var numero1 = 1;
var numero2 = 2;
// Suma
resultado = numero1 + numero2;
resultado = numero1 + numero2;
resultado = "un texto con el número" + numero1 + "se juntan!";
resultado = "un texto con el número" + numero1 + "se juntan!";
// Resta
resultado = numero1 - numero2;
resultado = numero1 - numero2;
// Multiplicación
resultado = numero1 * numero2;
resultado = numero1 * numero2;
resultado = numero1 * numero2;
// División
resultado = numero1 / numero2;
resultado = numero1 / numero2;
resultado = numero1 / numero2;
// Resto/Módulo
resultado = numero1 % numero2;
resultado = numero1 % numero2;
resultado = numero1 % numero2;

La lista actual de operadores matemáticos es:

  • resta: "-", "menos"
  • suma: "+", "mas", "sumar", "sumado"
  • multiplicación: "*", "multiplicado por", "multiplicado", "por"
  • división: "/", "dividido entre", "dividido"
  • resto: "%", "resto entre", "resto"

Buscamos sugerencias de nuevos sinónimos para hacer Ginger más sencillo a la lectura y adaptable a diferentes niveles de abreviatura

Rutina de expresiones

  • Operandos: Una variable, una propiedad, un numero o un string (@aZ|@aZ@aZ|-?0-9|""|'')
  • Operadores: Todos los lógicos y matemáticos

Una expresión consiste en la sucesión de operandos y operadores o un solo operando, o una llamada a procedimiento/función

Utilidades

Mostrar al usuario

Actual igual que un console.log()

mostrar "hola mundo"

En js se traduce como:

console.log("hola mundo");

Pedir información al usuario

Actual igual que un prompt()

pedir @nombre

En js se traduce como:

var nombre = window.prompt('nombre');

Aleatorio, y otras extensiones...

GingerCode puede extenderse fácilmente con funciones precargadas que facilitan la comprensión tecnica y reducen la barrera de entrada a ejercicios más avanzados. Veamos el siguiente ejemplo... La definición es así:

definir @random_number = #aleatorio 100 y 10

En js se traduce como:

var random_number = aleatorio(100,10);

// Funciones precargadas
function aleatorio(min,max){
	min = Math.ceil(min);
	max = Math.floor(max);
	return Math.floor(Math.random() * (max - min + 1)) + min;
}

Limitaciones

Sentencia precedida de tabulacion \t+{sentencia}\n:

El nivel de tabulación solo puede ser 0 o un nivel mayor o igual a la linea anterior

Si es un nivel mayor debe estar abierto algun tipo de bloque

Solo en el caso del objeto literal se limitan las sentencias posibles dentro del bloque a declaraciones de variables

Otras

  1. No puede definirse variables vacías definir @algo o equivalentes null (definir @algo = null), undefined (definir @algo = undefined), etc...
  2. Solo pueden usarse comillas dobles y simples para trabajar con cadenas de texto, Template Strings no esta soportado.
  3. Solo se soportan los comentarios de este tipo (//), no se soporta ningún otro tipo (#) o multilinea (/* */)