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


Sentencias

Definición

Variable

La definición es así:

definir @numero1 = 1

En js se traduce como:

var numero1 = 1;

Variable

La definición es así:

definir @numero1 = 1

En js se traduce como:

var numero1 = 1;

Condicionales

Bucles

Funciones


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


Limitaciones

  1. No puede definirse variables vacías definir @algo o equivalentes null (definir @algo = null), undefined (definir @algo = undefined), etc...
Las sentencias pueden ser:
	[definir] @numero = {expresion}\n                                        // define una variable con su valor, se trataran todas como globales
	[definir] @persona\n                                                     // define un objeto literal, inicia un bloque
	[definir] @lista = {expresion} (y|,) {expresion} [(y|,) {expresion}]\n   // define una lista
	si {expresion}\n                                                         // if, inicia un bloque
	pero si {expresion}\n                                                    // elseif, requiere if, inicia un bloque
	si no\n                                                                  // else, requiere if, inicia un bloque, implica !elseif
	repetir {expresion:int} [veces]\n                                        // for(contador), inicia un bloque
	repetir si {expresion}\n                                                 // while, inicia un bloque
	por cada @value en @values\n                                             // foreach, mientras que @values sea una lista, @value toma secuancialmente cada valor de la misma
	[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)

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

Operadores:
	Logicos: Todos los operadores logicos pueden ir en su forma simbolica como en lenguaje natural, todos siguen la misma regla:
		>=
		es mayor o igual que
		mayor o igual que
		mayor o igual
	Matematicos: los operadores matematicos se usaran preferentemente en su forma simbolica, pero podran ser:
		-   | menos
		+   | mas
		*   | por       | multiplicado por
		/   | dividido  | dividido entre
		%   | resto     | resto entre

Clone this wiki locally