En programación informática , un enunciado es una unidad sintáctica de un lenguaje de programación imperativo que expresa alguna acción a realizar. [1] Un programa escrito en tal lenguaje está formado por una secuencia de una o más declaraciones. Una declaración puede tener componentes internos (por ejemplo, expresiones ).
Muchos lenguajes de programación (por ejemplo , Ada , Algol 60 , C , Java , Pascal ) hacen una distinción entre declaraciones y definiciones / declaraciones . Una definición o declaración especifica los datos sobre los que debe operar un programa, mientras que una declaración especifica las acciones que se deben tomar con esos datos.
Las declaraciones que no pueden contener otras declaraciones son simples ; los que pueden contener otras declaraciones son compuestos . [2]
La apariencia de una declaración (y de hecho un programa) está determinada por su sintaxis o gramática. El significado de un enunciado está determinado por su semántica .
Declaraciones simples
Las declaraciones simples son completas en sí mismas; estos incluyen asignaciones, llamadas a subrutinas y algunas declaraciones que pueden afectar significativamente el flujo de control del programa (por ejemplo , goto , return , stop / halt). En algunos lenguajes, la entrada y salida, las afirmaciones y las salidas se manejan mediante sentencias especiales, mientras que otros lenguajes utilizan llamadas a subrutinas predefinidas.
- asignación
- Fortran:
variable = expression
- Pascal, Algol 60, Ada:
variable := expression;
- C, C ++, PHP, Java:
variable = expression;
- Fortran:
- llamada
- Fortran:
CALL subroutine name(parameters)
- C, C ++, Java, PHP, Pascal, Ada:
subroutine name(parameters);
- Fortran:
- afirmación
- C, C ++, PHP:
assert(relational expression);
- Java:
assert relational expression;
- C, C ++, PHP:
- ir
- Fortran:
GOTO numbered-label
- Algol 60:
goto label;
- C, C ++, PHP, Pascal:
goto label;
- Fortran:
- regreso
- Fortran:
RETURN value
- C, C ++, Java, PHP:
return value;
- Fortran:
- detener / detener / salir
- Fortran:
STOP number
- C, C ++:
exit(expression)
- PHP:
exit number;
- Fortran:
Declaraciones compuestas
Las declaraciones compuestas pueden contener (secuencias de) declaraciones, son encajables a cualquier profundidad razonable y generalmente implican pruebas para decidir si obedecer o repetir estas declaraciones contenidas.
- Notación para los siguientes ejemplos:
es cualquier enunciado único (puede ser simple o compuesto). es cualquier secuencia de cero o más
- Algunos lenguajes de programación proporcionan una forma general de agrupar sentencias, de modo que cualquier
pueda ser reemplazada por un grupo:
- Notación para los siguientes ejemplos:
- Algol 60:
begin
end - Pascal:
begin
end - C, PHP, Java:
{
}
- Algol 60:
- Otros lenguajes de programación tienen un terminador especial diferente en cada tipo de declaración compuesta, de modo que una o más declaraciones se tratan automáticamente como un grupo:
- Ada:
if test then
end if;
- Ada:
- Otros lenguajes de programación tienen un terminador especial diferente en cada tipo de declaración compuesta, de modo que una o más declaraciones se tratan automáticamente como un grupo:
Muchas declaraciones compuestas son comandos de bucle o comandos de elección. En teoría, solo se requiere uno de cada uno de estos tipos de comandos. En la práctica, hay varios casos especiales que ocurren con bastante frecuencia; estos pueden hacer que un programa sea más fácil de entender, pueden facilitar la programación y, a menudo, pueden implementarse de manera mucho más eficiente. Hay muchas sutilezas que no se mencionan aquí; consulte los artículos vinculados para obtener más detalles.
- bucle controlado por conteo :
- Algol 60:
for index := 1 step 1 until limit do
; - Pascal:
for index := 1 to limit do
; - C, Java:
for ( index = 1; index <= limit; index += 1)
; - Ada:
for index in 1..limit loop
end loop - Fortran 90:
- Algol 60:
- DO índice = 1, límite
- FIN HACER
- DO índice = 1, límite
- bucle controlado por condición con prueba al inicio del bucle:
- Algol 60:
for index := expression while test do
; - Pascal:
while test do
; - C, Java:
while (test)
; - Ada:
while test loop
end loop - Fortran 90:
- Algol 60:
- HACER MIENTRAS (prueba)
- FIN HACER
- HACER MIENTRAS (prueba)
- bucle controlado por condición con prueba al final del bucle:
- Pascal:
repeat
until test; { note reversed test} - C, Java:
do {
} while (test) ; - Ada:
loop
exit when test; end loop;
- Pascal:
- bucle controlado por condición con prueba en el medio del bucle:
- C:
do {
if (test) break; } while (true) ; - Ada:
loop
exit when test; end loop;
- C:
- Situación simple enunciado if :
- Algol 60:
if test then
; - Pascal:
if test then
; - C, Java:
if (test)
; - Ada:
if test then
end if; - Fortran 77+:
- Algol 60:
- SI (prueba) ENTONCES
- TERMINARA SI
- SI (prueba) ENTONCES
- opción bidireccional if-statement :
- Algol 60:
if test then
else ; - Pascal:
if test then
else ; - C, Java:
it (test)
else ; - Ada:
if test then
else end if; - Fortran 77+:
- Algol 60:
- SI (prueba) ENTONCES
- DEMÁS
- TERMINARA SI
- SI (prueba) ENTONCES
- caso / sentencia de conmutación elección multidireccional:
- Pascal:
case c of 'a': alert(); 'q': quit(); end;
- Ada:
case c is when 'a' => alert(); when 'q' => quit(); end case;
- C, Java:
switch (c) { case 'a': alert(); break; case 'q': quit(); break; }
- Pascal:
- Manejo de excepciones :
- Ada:
begin protected code except when exception specification => exception handler
- Java:
try { protected code } catch (exception specification) { exception handler } finally { cleanup }
- Pitón:
try: protected code except exception specification: exception handler else: no exceptions finally: cleanup
- Ada:
Sintaxis
Aparte de las asignaciones y las llamadas a subrutinas, la mayoría de los lenguajes comienzan cada instrucción con una palabra especial (por ejemplo, goto, if, while, etc.) como se muestra en los ejemplos anteriores. Se han utilizado varios métodos para describir la forma de declaraciones en diferentes idiomas; los métodos más formales tienden a ser más precisos:
- Algol 60 usó la forma Backus-Naur (BNF) que estableció un nuevo nivel para la especificación de la gramática del lenguaje. [3]
- Hasta Fortran 77, el idioma se describía en prosa inglesa con ejemplos, [4] A partir de Fortran 90 en adelante, el idioma se describía utilizando una variante de BNF. [5]
- Cobol usó un metalenguaje bidimensional. [6]
- Pascal usó tanto diagramas de sintaxis como BNF equivalentes. [7]
BNF usa la recursividad para expresar la repetición, por lo que se han propuesto varias extensiones para permitir la indicación directa de la repetición.
Declaraciones y palabras clave
Algunas gramáticas de los lenguajes de programación reservan palabras clave o las marcan de manera especial y no permiten que se utilicen como identificadores . Esto a menudo conduce a gramáticas que son más fáciles de analizar y requieren menos anticipación .
Sin palabras clave distinguidas
Fortran y PL / 1 no tienen palabras clave reservadas, lo que permite declaraciones como:
- en PL / 1:
IF IF = THEN THEN ...
(el segundoIF
y el primeroTHEN
son variables).
- en Fortran:
IF (A) X = 10...
declaración condicional (con otras variantes)IF (A) = 2
asignación a una variable subindicada llamadaIF
- Como los espacios eran opcionales hasta Fortran 95, un error tipográfico podría cambiar completamente el significado de una declaración:
DO 10 I = 1,5
inicio de un ciclo con I corriendo de 1 a 5DO 10 I = 1.5
asignación del valor 1,5 a la variableDO10I
Palabras marcadas
En Algol 60 y Algol 68, los tokens especiales se distinguieron explícitamente: para publicación, en negrita, por ejemplo begin
; para la programación, con alguna marca especial, por ejemplo, una bandera ( 'begin
), comillas ( 'begin'
) o subrayado ( begin
en el Elliott 503 ). A esto se le llama "estropear".
Los tokens que forman parte de la sintaxis del lenguaje no entran en conflicto con los nombres definidos por el programador.
Palabras clave reservadas
Ciertos nombres están reservados como parte del lenguaje de programación y no se pueden usar como nombres definidos por el programador. La mayoría de los lenguajes de programación más populares utilizan palabras clave reservadas. Los primeros ejemplos incluyen FLOW-MATIC (1953) y COBOL (1959). Desde 1970, otros ejemplos incluyen Ada, C, C ++, Java y Pascal. El número de palabras reservadas depende del idioma: C tiene alrededor de 30 mientras que COBOL tiene alrededor de 400.
Semántica
La semántica se ocupa del significado de un programa. Los documentos estándar para muchos lenguajes de programación usan BNF o algún equivalente para expresar la sintaxis / gramática de una manera bastante formal y precisa, pero la semántica / significado del programa generalmente se describe usando ejemplos y prosa en inglés. Esto puede resultar en ambigüedad. [8] En algunas descripciones de lenguaje, el significado de declaraciones compuestas se define mediante el uso de construcciones 'más simples', por ejemplo, un bucle while puede definirse mediante una combinación de pruebas, saltos y etiquetas, utilizando if
y goto
.
El artículo de semántica describe varios formalismos matemáticos / lógicos que se han utilizado para especificar la semántica de una manera precisa; estos son generalmente más complicados que el BNF y, en general, no se acepta un enfoque único como el camino a seguir. Algunos enfoques definen efectivamente un intérprete para el lenguaje, algunos usan la lógica formal para razonar sobre un programa, algunos agregan afijos a entidades sintácticas para garantizar la coherencia, etc.
Expresiones
A menudo se hace una distinción entre declaraciones, que se ejecutan, y expresiones , que se evalúan. El valor obtenido de una expresión se usa a menudo como parte de una declaración, por ejemplo, una asignación. variable := expression;
Algunos lenguajes de programación (por ejemplo, C, C ++) permiten que algunas sentencias proporcionen un resultado (técnicamente todas las sentencias proporcionan un resultado, pero este resultado suele ser de tipo 'void' y no se puede usar para nada). La declaración más útil que proporciona un resultado es una asignación, el resultado es el valor que se acaba de asignar.
Esto puede resultar útil para la inicialización múltiple:
i = j = 0;
que se trata comoi = (j = 0);
También puede resultar en un simple problema con los dedos cambiando por completo el significado de algún código:
if (i == j) {. . . };
pruebas para ver sii
es igual aj
if (i = j) { . . . };
asigna el valor dej
ai
y luego pone a prueba para ver si ese valor es distinto de cero.
Algunos lenguajes (Algol 60, Pascal) permiten asignaciones múltiples pero no permiten que las asignaciones aparezcan en expresiones.
Extensibilidad
La mayoría de los lenguajes tienen un conjunto fijo de declaraciones definidas por el lenguaje, pero se han realizado experimentos con lenguajes extensibles que permiten al programador definir nuevas declaraciones.
Ver también
- Comparación de lenguajes de programación: declaraciones
- Flujo de control
- Expresión (contraste)
Referencias
- ^ "declaración" . webopedia . Consultado el 3 de marzo de 2015 .
- ^ Sección revisada del informe ALGOL 60. 4.1. "ALGOL 60" . Consultado el 23 de enero de 2021 .
- ^ Se revisó la sección 1.1 del informe ALGOL 60. "ALGOL 60" . Consultado el 23 de enero de 2021 .
- ^ Estándar ANSI FORTRAN 66 "FORTRAN 66" (PDF) . Consultado el 19 de febrero de 2021 .
- ^ Estándar ANSI FORTRAN 95 "Fortran95" (PDF) . Consultado el 19 de febrero de 2021 .
- ^ Manual de Cobol. "COBOL" (PDF) . Consultado el 23 de enero de 2021 .
- ^ Manual de usuario de Pascal y Apéndice D del informe. "Pascal" (PDF) . Consultado el 19 de febrero de 2021 .
- ^ Puntos problemáticos en Algol 60 "Puntos problemáticos" (PDF) . Consultado el 24 de febrero de 2021 .
enlaces externos
- ENCICLOPEDIA PC: Definición de: declaración de programa