Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Version 2.10
Pablo E. Martnez Lopez
fidel@unq.edu.ar
Eduardo Bonelli
ebonelli@unq.edu.ar
21 de marzo de 2010
A.
Sintaxis de Gobstones
determina que los elementos del conjunto < elem > son X e Y, y los del conjunto < conj >
son X->X, X->Y, Y->X e Y->Y. Observar que < elem1 > adopta todas las posibles formas
de un elemento del conjunto < elem >, y lo mismo para < elem2 >, y que poner dos
elementos juntos simplemente los coloca uno a continuacion del otro.
La notaci
on permite adem
as elementos opcionales, escrito como
[< elemOpcional >]
y eliminaci
on de los elementos de un conjunto de otro conjunto dado, escrito como
< conjBase >/< conjAEliminar >
los elementos de < conj > seran los de antes, mas X e Y, pues el smbolo -> y el siguiente
elemento se anotaron como opcionales. Si en cambio se definiese
< ej >
< conj >
< elem >
< idem >
los elementos del conjunto < ej > seran X->Y, Y->X e Y->Y. Observar que X->X esta en
el conjunto < conj > pero no en el conjunto < ej >.
Con esta notaci
on, podemos escribir la forma de un programa Gobstones, lo cual se
lleva a cabo en las siguientes subsecciones.
A.1.
Programas Gobstones
Un programa Gobstones es un elemento del conjunto < gobstones >. Cada programa
est
a conformado por una lista de definiciones de procedimientos o funciones, la u
ltima
de las cuales es la definici
on del procedimiento Main.
< gobstones >
A.2.
Comandos
Los comandos pueden ser simples o compuestos, y pueden estar agrupados en bloques.
2
Los comandos simples son los comandos basicos del cabezal, la invocacion de procedimientos y la asignaci
on (de variables, y de resultados de llamados a funcion).
< simplecmd >
|
|
|
|
|
|
|
|
|
Skip
BOOM(< string >)
Poner(< gexp >)
Sacar(< gexp >)
Mover(< gexp >)
IrAlOrigen()
VaciarTablero()
< procCall >
< varName > := < gexp >
< varTuple > := < funcCall >
< procName > < args >
|
|
|
|
|
if (< gexp >) < blockcmd > else < blockcmd >
if (< gexp >) < blockcmd >
case (< gexp >) of < branches >
while (< gexp >) < blockcmd >
repeatWith < varName > in < range > < blockcmd >
< blockcmd >
|
|
A.3.
Expresiones
ci
on entre n
umeros y otros literales) y sobre ellas, las expresiones booleanas (negacion,
conjunci
on y disyunci
on) tambien con la precedencia habitual.
|
|
|
|
|
|
|
|
|
|
|
|
(infixr)
(infixr)
(infixl)
(infixl)
(infixl)
< literN > | < literB > | < literC > | < literD >
< num >
False | True
Verde | Rojo | Azul | Negro
Norte | Sur | Este | Oeste
La forma de los n
umeros se definen en la seccion A.5
A.4.
Definiciones auxiliares
En esta secci
on se definen diversos conjuntos utilizados como auxiliares en las definiciones previas. Los nombres de variables y de funciones son identificadores que co-
Las tuplas son listas de elementos encerrados entre parentesis y separados por comas.
Opcionalmente, una tupla puede estar vaca, o sea, no contener ning
un elemento.
< varTuple >
< varNames >
A.5.
Definiciones lexicogr
aficas
< digit > | < nonzerodigit > < digits > | -< num >
< digit > | < digit > < num >
0 | < nonzerod >
1|2|3|4|5|6|7|8|9
Los identificadores son de dos tipos: los que comienzan con min
uscula y los que
comienzan con may
uscula. El smbolo de tilde () puede ser parte de un identificador
(excepto el primero). Las palabras reservadas no pueden ser identificadores.
< lowerid >
< lowname >
< lowchar >
Los strings son secuencias de caracteres distintos de la comilla doble ("), encerrados
entre comillas dobles.
Algunos caracteres pueden usarse precedidos por una barra (\) llamada escape. Dentro de un string, la barra \\ y las comillas dobles \" siempre deben escaparse. La
categora de caracteres escapados incluye representaciones portables para los caracteres
alert(\a), backspace(\b), form feed (\f), new line (\n), carriage return(\r),
horizontal tab (\t), and vertical tab (\v). Observar que las comillas escapadas no
son consideradas comillas, por lo que pueden usarse dentro de un string.
Las palabras y los smbolos reservados son todos aquellos utilizados en alg
un comando predefinido o como separadores.
< reservedid >
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Finalmente, los comentarios son de lnea o de parrafo. Los primeros empiezan con
uno de los smbolos reservados -- o // y terminan con el fin de lnea, y los segundos
empiezan con los smbolos reservados {- o /* y terminan con la primera aparicion del
smbolo -} o */ respectivamente.
< comment >
< linecomm >
< parcomm >