|
Sintaxis para un Lenguaje de Pseudocódigo |
|
|
Pablo Sánchez p.sanchez (at) unican (dot) es Dpto. Matemáticas, Estadística y Computación Facultad de Ciencias, Universidad de Cantabria |
UnidadCompilable ::= ProgramaEjecutable | InterfazMódulo | Módulo | Clase
| ProgramaEjecutable ::= | [BloqueUsa][BloqueConstantes][ BloqueDominio][DeclaraciónVariables][BloqueFunciones] |
| INICIO PROGRAMA BloqueCódigo FIN PROGRAMA |
| InterfazMódulo ::= | [BloqueUsa] |
| INTERFAZ MODULO IdModulo ES | |
| [BloqueExporta][BloqueConstantes][ BloqueDominio][DeclaraciónVariables] | |
| (CabeceraFuncion; | CabeceraProcedimiento;)* | |
| FININTERFAZ |
| Módulo ::= | [BloqueUsa] IMPLEMENTACION MODULO IdModulo ES |
| [BloqueConstantes][ BloqueDominio][DeclaraciónVariables] | |
| (Funcion; | Procedimiento;)+ | |
| FINMODULO |
BloqueCódigo ::= [(DeclaraciónVariables)*] (Sentencia)+
| Sentencia ::= | Asignacion | |
| LLamadaFuncion | | |
| EstructuraSi | | |
| EstructuraSiValor | | |
| EstructuraMientras | | |
| EstructuraFor | | |
| LeerDatos | | |
| ImprimirDatos | | |
| LLamadaProcedimiento | | |
| DestrucciónPuntero | |
| InstrucciónObjetos | |
| InstruccionExcepción |
DeclaraciónVariables ::= IdVariable (, IdVariable)* : NombreDominio;
NombreDominio ::= Natural | Entero | Real | Caracter | Booleano | IdDominio | DeclaracionAnonimaDominio
DeclaracionAnonimaDominio ::= DeclaracionRango | DeclaracionVector | DeclaracionPuntero
DeclaracionRango ::= RANGO "[" ValorInicial .. ValorFinal "]" DE (Natural | Entero | Real)
DeclaracionVector ::= VECTOR DIMENSION ValorNatural DE NombreDominio
DeclaracionPuntero ::= PUNTERO A NombreDominio
BloqueConstantes ::= IdConstante ES NombreDominio CON VALOR ValorLiteral;
Asignacion ::= PosMemoria := Expresion;
| PosMemoria ::= | IdVariableSimple | PosMemoriaVector "[" ExpresionNatural "]" | |
| "->" PosMemoriaPuntero | PosMemoriaRegistro"."IdCampo |
| Expresion ::= | ExpresionNatural | ExpresionEntera | ExpresionReal | ExpresionBooleana | |
| LLamadaFuncion | ExpresionPuntero |
| ExpresionNatural ::= | ValorNatural | [(]ExpresionNatural OpNumEntero ExpresionNatural [)] | |
| NATURAL "(" (ExpresionEntera | ExpresionReal) ")" | PosMemoriaNatural |
| ExpresionEntera ::= | ValorEntero | [(]ExpresionEntera OpNumEntero ExpresionEntera [)] |
| ENTERO "(" (ExpresionNatural | ExpresionReal ) | PosMemoriaEntera |
| ExpresionReal ::= | ValorReal | [(]ExpresionReal OpNumReal ExpresionReal [)] |
| REAL "(" (ExpresionNatural | ExpresionEntera ) | PosMemoriaReal |
OpNumEntero ::= OpNum | div | mod
OpReal ::= OpNum | "/"
OpNum ::= + | - | *
| ExpresionBooleana ::= | TRUE | FALSE | PosMemoriaBooleana | NOT ExpresionBooleana | |
| [(]ExpresionBooleana (AND | OR) ExpresionBooleana [)] | ExpresionComparacion |
ExpresionComparacion ::= Expresion (< | <= | == | >= | > | != ) Expresion
| EstructuraSi ::= | SI ExpresionBooleana ENTONCES BloqueCódigo |
| ( SINOSI ExpresionBooleana ENTONCES BloqueCódigo )* | |
| [ SINO BloqueCódigo ] FINSI |
| EstructuraSiValor ::= | SI VALOR DE Expresion ES |
| (Valor : BloqueCódigo)+ | |
| [ EN CUALQUIER OTRO CASO: BloqueCódigo ] | |
| FINSIVALOR |
EstructuraMientras ::= MIENTRAS ExpresionBooleana HACER BloqueCódigo FINMIENTRAS
| EstructuraFor ::= | PARA IdVariable DESDE ValorEntero HASTA ValorEntero [CON INCREMENTO ValorEntero] HACER |
| BloqueCódigo FINPARA |
LeerDatos ::= LEER CadenaCaracteres IdVariable
ImprimirDatos ::= IMPRIMIR (CadenaCaracteres | IdVariable) (,(CadenaCaracteres | IdVariable))*
BloqueFunciones ::= (Funcion)+
Funcion ::= CabeceraFuncion ES [BloqueCodigo] SentenciaDevolver FINFUNCION
CabeceraFuncion ::= FUNCION Signatura : NombreDominio
Signatura ::= IdSubrutina "(" [[REF] IdVariable : NombreDominio (,IdVariable : NombreDominio)* ]")"
SentenciaDevolver ::= DEVOLVER Expresion;
Procedimiento ::= CabeceraProcedimiento ES BloqueCodigo FINPROC
CabeceraProcedimiento ::= PROCEDIMIENTO Signatura
LLamadaProcedimiento ::= IdProcedimiento "(" [ Expresion (,Expresion)* ]")"
LLamadaFuncion ::= IdProcedimiento "(" [ Expresion (,Expresion)* ]")"
BloqueDominio ::= (DominioElaborado;)+
| DominioElaborado ::= | IdDominio ES (DeclaracionRango | DeclaracionVector | DeclaracionPuntero |
| | DeclaracionConjunto | DeclaracionRegistro) |
ConjuntoEnumerado ::= CONJUNTO "{" IdLiteral (, IdLiteral)* "}"
DeclaracionRegistro ::= TUPLA DE (IdCampo : NombreDominio;)+ FIN TUPLA
ExpresionPuntero ::= CreaciónPuntero | CrearReferencia | Dereferenciación | NULO
CreaciónPuntero ::= NUEVO PUNTERO A NombreDominio
DestrucciónPuntero ::= ELIMINA PUNTERO IdVariablePuntero
Dereferenciación ::= "->" IdVariablePuntero
CrearReferencia ::= OBTENER REFERENCIA A PosMemoria
BloqueExporta ::= EXPORTA IdDominio; (BloqueExporta)*
BloqueUsa ::= USA IdModulo[.IdElemento]
| Clase ::= | [BloqueUsa] CLASE IdClase [HEREDA DE IdClase (, IDClase)*] ["(" IdParam (, IdParam)* ")"] ES |
| [BloqueConstantes][ BloqueDominio][(Clase)*][DeclaraciónAtributos] | |
| (Método;)+ | |
| FINCLASE |
DeclaraciónAtributos ::= ModificadorVisibilidad DeclaraciónVariables
| Método ::= | [ESTATICO] [ABSTRACTO] ModificadorVisibilidad (Procedimiento | Funcion ) | |
| Constructor | Destructor |
InstrucciónObjetos ::= LLamadaMétodoProcedimiento | DestrucciónObjeto
ExpresiónObjetos ::= LLamadaConstructor | InvocacionMétodoFunción | Casting
LLamadaConstructor ::= nuevo IdClase"("[ Expresión (,Expresión)* ] ")";
InvocacionMétodoFunción ::= (idObjeto | idClase)"."idFuncion"("[ Expresión (,Expresión)*]")"
LLamadaMétodoProcedimiento ::= (idObjeto | idClase)"."idProcedimiento"("[ Expresión (,Expresión)*]")"
ModificadorVisibilidad ::= PRIVADO | PUBLICO | HEREDABLE
DestruccionObjeto ::= DESTRUIR IdObjeto;
PosMemoria ::= idObjeto"."idAtributo
Casting ::= "("IdClase")" IdObjeto
| Constructor ::= | ModificadorVisibilidad CONSTRUCTOR "(" [[REF] IdVariable : NombreDominio (,IdVariable : NombreDominio)* ]")" ES |
| BloqueCódigo FINCONSTRUCTOR |
| Destructor ::= | ModificadorVisibilidad DESTRUCTOR "(" [[REF] IdVariable : NombreDominio (,IdVariable : NombreDominio)* ]")" ES |
| BloqueCódigo FINDESTRUCTOR |
idObjeto ::= "esteObj"| "objPadre" | idObjeto
InstrucciónExcepción ::= LanzamientoExcepción | BloqueProtegido
LanzamientoExcepción ::= EXCEPCION IdExcepcion
BloqueProtegido ::= MIENTRAS EXCEPCION IdExcepecion ENTONCES Bloquecodigo FINEXCEPCION
| Parametro ::= | [BloqueUsa] PARÁMETRO IdParametro : ([CLASE | TUPLA | DOMINIO]) [HEREDA DE IdClase (, IDClase)*] ES |
| [BloqueConstantes][ BloqueDominio][DeclaraciónAtributos] | |
| (CabeceraMétodo;)* | |
| FINCLASE |
Última actualización: 20/09/2010 |