lunes, 18 de diciembre de 2017

Practica PL1 (2017-2018): Parte 2 - Analizador sintáctico (II)

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