Este documento contiene la especificación técnica del lenguaje de programación Gaila.
Aquí se enlistan las correcciones, aclaraciones y cambios que ha sufrido este documento.
En las siguientes secciones, una letra se considera cualquier carácter
del alfabeto inglés de la A
a la Z
mayúscula o
minúscula. Un dígito se considera cualquier carácter del 0
al 9
. En general los espacios, tabuladores y nuevas líneas
sirven como delimitadores entre elementos léxicos, pero fuera de eso son
ignorados.
Gaila sólo cuenta con comentarios de línea: comienzan con el carácter
;
(punto y coma) y terminan al finalizar la línea.
Un identificador está conformado por una secuencia de uno o más caracteres de letra. Las letras minúsculas y mayúsculas son consideradas diferentes. Los identificadores pueden tener cualquier longitud.
Una literal entera es una secuencia de uno o más dígitos. Estas literales están en base diez en un rango de 0 a 231 - 1.
Las literales booleanas son #v
y #f
.
Los elementos en mono-espacio
representan símbolos
terminales (tokens).
‹programa› | → | ‹declaración›* ‹enunciado›* |
‹declaración› | → | ‹tipo› ‹identificador› |
‹tipo› | → | entero | bool |
‹enunciado› | → | ‹asignación› | ‹impresión› | ‹condicional› |
‹asignación› | → | ‹identificador› = ‹expresión› |
‹impresión› | → | imprime ‹expresión› |
‹condicional› | → | si ‹expresión› entonces ‹enunciado›* fin |
‹expresión› | → | ‹expresión› ‹operador› ‹expresión_simple›
| ‹expresión_simple› |
‹operador› | → | & | < | + | * |
‹expresión_simple› | → | ‹identificador› | ‹literal_entera› | ‹literal_booleana› | ( ‹expresión› ) | - ‹expresión_simple› |
Los enunciados se ejecutan de manera secuencial comenzando desde el primero.
Una literal entera es de tipo entero
.
Las literales #v
y #f
son de tipo
bool
.
Enunciado | Descripción |
---|---|
var = exp
|
Coloca en la variable var el resultado de evaluar exp. var debe estar declarada previamente. var y exp deben ser del mismo tipo. |
imprime exp
|
Evalúa exp e imprime el resultado en la salida estándar. |
si exp entonces enunciados... fin
|
Evalúa exp, el cual debe ser de tipo bool .
Si resulta en #v , ejecuta
enunciados..., de otra forma no tiene efecto alguno.
|
Operador | Nombre | Tipo | Notas | ||
---|---|---|---|---|---|
op1 | op2 | resultado | |||
op1 & op2
|
Conjunción |
bool
|
bool
|
bool
|
Devuelve la conjunción lógica entre op1 y
op2. Es decir, devuelve #v sólo si
tanto op1 y op2 son #v , y
devuelve #f en cualquier otro caso.
|
op1 < op2
|
Menor |
entero
|
entero
|
bool
|
Devuelve #v si op1 es menor que
op2, #f en otro caso.
|
op1 + op2
|
Suma |
entero
|
entero
|
entero
|
Devuelve la suma aritmética de op1 más op2. Genera una excepción de desbordamiento si el resultado está fuera de rango. |
op1 * op2
|
Multiplicación |
entero
|
entero
|
entero
|
Devuelve el producto aritmético de op1 por op2. Genera una excepción de desbordamiento si el resultado está fuera de rango. |
- op1
|
Negación |
entero
|
N/A |
entero
|
Devuelve la negación aritmética de op1. Genera una excepción de desbordamiento si el resultado está fuera de rango. |