cerosYunos

Sintaxis para un Lenguaje de Pseudocódigo

computadora
Pablo Sánchez
p.sanchez (at) unican (dot) es
Dpto. Matemáticas, Estadística y Computación
Facultad de Ciencias, Universidad de Cantabria



1. Sintaxis

1.1 Estructura principal de una unidad compilable

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

1.2 Estructura de BloqueCódigo

BloqueCódigo ::= [(DeclaraciónVariables)*] (Sentencia)+

Sentencia ::=Asignacion |
LLamadaFuncion |
EstructuraSi |
EstructuraSiValor |
EstructuraMientras |
EstructuraFor |
LeerDatos |
ImprimirDatos |
LLamadaProcedimiento |
DestrucciónPuntero
InstrucciónObjetos
InstruccionExcepción

1.3 Variables y Constantes

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;

1.3 Asignaciones y Expresiones

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

1.4 Estructuras de Control

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

1.5 Entrada/Salida

LeerDatos ::= LEER CadenaCaracteres IdVariable

ImprimirDatos ::= IMPRIMIR (CadenaCaracteres | IdVariable) (,(CadenaCaracteres | IdVariable))*

1.5 Funciones y Procedimientos

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)* ]")"

1.6 Declaración de Tipos

BloqueDominio ::= (DominioElaborado;)+

DominioElaborado ::= IdDominio ES (DeclaracionRango | DeclaracionVector | DeclaracionPuntero
| DeclaracionConjunto | DeclaracionRegistro)

ConjuntoEnumerado ::= CONJUNTO "{" IdLiteral (, IdLiteral)* "}"

DeclaracionRegistro ::= TUPLA DE (IdCampo : NombreDominio;)+ FIN TUPLA

1.7 Operaciones con punteros

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

1.8 Acceso a módulos

BloqueExporta ::= EXPORTA IdDominio; (BloqueExporta)*

BloqueUsa ::= USA IdModulo[.IdElemento]

1.9 Programación Orientada a Objetos

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

1.10 Control de Excepciones

InstrucciónExcepción ::= LanzamientoExcepción | BloqueProtegido

LanzamientoExcepción ::= EXCEPCION IdExcepcion

BloqueProtegido ::= MIENTRAS EXCEPCION IdExcepecion ENTONCES Bloquecodigo FINEXCEPCION

1.10 Genericos

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

Valid XHTML 1.0 Transitional ¡CSS Válido!