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 |