Skip to content

Especificación

Ulises Gascón edited this page Sep 5, 2017 · 20 revisions

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));
[procedimiento] #multiplicar [@uno [(y|,) @dos]]\n                       // definición de funcion, inicia un bloque
#multiplicar [{expresion} [(y|,) {expresion}]]                           // llamada a funcion (es valida como expresion pero no combinable)

Asiganciones

Asignar valor a variable

La definición es así:

@numero1 = 5

En js se traduce como:

numero1 = 5;

Operadores

Lógicos

Matemáticos

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 (/* */)

Clone this wiki locally