Continuamos con las declaraciones de los tipos.
Si bien Modula-2 admite lo que se conocen como tipos enumerados (ColoresSemaforo = {rojo, amarillo, verde}), en ModulaUNED no aparecen. Unicamente salen los registros y los arrays.
Para definir los tipos registro usamos esto:
listaDeclaracionesRegistro ::= tipoRegistro listaDeclaracionesRegistro|tipoRegistro;
tipoRegistro ::= IDENTIFICADOR IGUAL listaVariablesYTipos END PUNTOYCOMA;
listaVariablesYTipos ::= variableYTipo listaVariablesYTipos|variableYTipo;
variableYTipo ::= IDENTIFICADOR DOSPUNTOS tipoPrimitivo PUNTOYCOMA;
Si os fijais, en listaVariablesYTipos el numero minimo de elementos es uno. Mas adelante usaremos algo parecido, asi que no lo olvideis.
Los arrays se hacen de esta otra manera:
listaDeclaracionesArray ::= tipoArray listaDeclaracionesArray|tipoArray;
tipoArray::= IDENTIFICADOR IGUAL ARRAY ABRIR_CORCHETES CONSTANTE_NUMERICA PUNTO PUNTO CONSTANTE_NUMERICA CERRAR_CORCHETES OF tipoPrimitivo PUNTOYCOMA;
Cada uno de los grupos tiene un tipo distinto por definir, segun su practica. Dado que la estoy haciendo completa:
De forma comun está
tipoPrimitivo ::= BOOLEAN|INTEGER;
declaracionesTipos ::= TYPE declaracionTipo listaDeclaracionesTipos|/*epsilon*/:
declaracionTipo ::=listaDeclaracionesArray|listaDeclaracionesRegistro;
Estas lineas obligan a que o no haya nada o aparezca una vez la palabra TYPE y despues haya al menos una declaracion de uno o mas tipos, que pueden ser arrays, registros o una mezcla de ellos.
Mañana, si no estoy muy liado, sigo con los procedimientos.
Un saludo.
NOTA: Hoy no he tenido tiempo para testearlo, pero deberia funcionar.
No hay comentarios:
Publicar un comentario