Articulo de referencia

Declaración (informática)

En programación informática , una instrucción es una unidad sintáctica de un lenguaje de programación imperativo que expresa alguna acción que debe realizarse. [ 1 ] Un programa...

En programación informática , una instrucción es una unidad sintáctica de un lenguaje de programación imperativo que expresa alguna acción que debe realizarse. [ 1 ] Un programa escrito en dicho lenguaje se forma mediante una secuencia de una o más instrucciones. Una instrucción puede tener componentes internos (por ejemplo, expresiones ).

Muchos lenguajes de programación (por ejemplo , Ada , Algol 60 , C , Java , Pascal ) [ 2 ] : 15 distinguen entre sentencias y definiciones/declaraciones . Una definición o declaración especifica los datos sobre los que un programa debe operar, mientras que una sentencia especifica las acciones que se deben realizar con esos datos.

Las proposiciones que no pueden contener otras proposiciones son simples ; aquellas que pueden contener otras proposiciones son compuestas . [ 3 ]

La apariencia de una instrucción (y de hecho de un programa) está determinada por su sintaxis o gramática. El significado de una instrucción está determinado por su semántica .

Declaraciones simples

Las instrucciones simples son completas en sí mismas; estas incluyen asignaciones, llamadas a subrutinas y algunas instrucciones que pueden afectar significativamente el flujo de control del programa (por ejemplo, goto , return , stop/halt). En algunos lenguajes, la entrada y salida, las aserciones y las salidas se manejan mediante instrucciones especiales, mientras que otros lenguajes utilizan llamadas a subrutinas predefinidas.

  • asignación
    • Fortran:variable = expression
    • Pascal, Algol 60, Ada:variable := expression;
    • C, C#, C++, PHP, Java:variable = expression;
  • llamar
    • Fortran:CALL subroutine name(parameters)
    • C, C++, Java, PHP, Pascal, Ada:subroutine name(parameters);
  • afirmación
    • C, C++, PHP:assert(relational expression);
    • Java:assert relational expression;
  • ir a
    • Fortran:GOTO numbered-label
    • Algol 60:gotolabel;
    • C, C++, PHP, Pascal:goto label;
  • devolver
    • Fortran:RETURN value
    • C, C++, Java, PHP:return value;
  • detenerse/pararse/salir
    • Fortran:STOP number
    • C, C++:exit(expression)
    • PHP:exit number;

Declaraciones compuestas

Las sentencias compuestas pueden contener (secuencias de) sentencias, anidables a cualquier profundidad razonable, y generalmente implican pruebas para decidir si se deben obedecer o repetir dichas sentencias contenidas.

Notación para los siguientes ejemplos:
  • <declaración> es cualquier declaración individual (puede ser simple o compuesta).
  • <secuencia> es cualquier secuencia de cero o más <declaraciones>.
Algunos lenguajes de programación proporcionan una forma general de agrupar instrucciones, de modo que cualquier instrucción individual puede ser reemplazada por un grupo:
  • Algol 60:begin <sequence> end
  • Pascal:begin <sequence> end
  • C, PHP, Java:{ <sequence> }
Otros lenguajes de programación tienen un terminador especial diferente para cada tipo de instrucción compuesta, de modo que una o más instrucciones se tratan automáticamente como un grupo:
  • Ada:iftestthen<sequence>endif;

Muchas instrucciones compuestas son bucles o comandos de selección. En teoría, solo se requiere una instrucción de cada tipo. En la práctica, existen varios casos especiales que se presentan con frecuencia; estos pueden facilitar la comprensión y la programación de un programa, y ​​a menudo permiten una implementación mucho más eficiente. Hay muchas sutilezas que no se mencionan aquí; consulte los artículos enlazados para obtener más detalles.

  • bucle controlado por conteo :
    • Algol 60:for index := 1 step 1 until limit do <statement> ;
    • Pascal:forindex:=1tolimitdo<statement>;
    • C, Java:for(index=1;index<=limit;index+=1)<statement>;
    • Ada:forindexin1..limitloop<sequence>endloop
    • Fortran 90:
      DO índice = 1 , límite <secuencia> FIN DO
  • Bucle controlado por condición con prueba al inicio del bucle:
    • Algol 60:for index := expression while test do <statement> ;
    • Pascal:whiletestdo<statement>;
    • C, Java:while(test)<statement>;
    • Ada:whiletestloop<sequence>endloop
    • Fortran 90:
      HACER MIENTRAS ( prueba ) <secuencia> FIN HACER
  • Bucle controlado por condición con prueba al final del bucle:
    • Pascal:repeat<sequence>untiltest;{ note reversed test }
    • C, Java:do{<sequence>}while(test);
    • Ada:loop<sequence>exitwhentest;endloop;
  • Bucle controlado por condición con una prueba en medio del bucle:
    • DO:do{<sequence>if(test)break;<sequence>}while(true);
    • Ada:loop<sequence>exitwhentest;<sequence>endloop;
  • Situación simple con sentencia if :
    • Algol 60:if test then <unconditional statement> ;
    • Pascal:iftestthen<statement>;
    • C, Java:if(test)<statement>;
    • Ada:iftestthen<sequence>endif;
    • Fortran 77+:
      SI ( prueba ) ENTONCES <secuencia> FIN SI
  • Opción de dos vías con sentencia condicional :
    • Algol 60:if test then <unconditional statement> else <statement> ;
    • Pascal:iftestthen<statement>else<statement>;
    • C, Java:if(test)<statement>else<statement>;
    • Ada:iftestthen<sequence>else<sequence>endif;
    • Fortran 77+:
      SI ( prueba ) ENTONCES <secuencia> SINO <secuencia> FIN SI
  • Sentencia case/switch con opción múltiple:
    • Pascal:casecof'a':alert();'q':quit();end;
    • Ada:caseciswhen'a'=>alert();when'q'=>quit();endcase;
    • C, Java:switch(c){case'a':alert();break;case'q':quit();break;}
  • 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

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 diversos métodos para describir la forma de las instrucciones en diferentes lenguajes; los métodos más formales tienden a ser más precisos.

  • Algol 60 utilizó la forma Backus-Naur (BNF), que estableció un nuevo nivel para la especificación de la gramática del lenguaje. [ 4 ]
  • Hasta Fortran 77, el lenguaje se describía en prosa inglesa con ejemplos, [ 5 ] A partir de Fortran 90, el lenguaje se describía utilizando una variante de BNF. [ 6 ]
  • Cobol utilizaba un metalenguaje bidimensional. [ 7 ]
  • Pascal utilizó tanto diagramas de sintaxis como BNF equivalente. [ 8 ]

La notación BNF utiliza la recursión 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 lenguajes de programación reservan palabras clave o las marcan de forma especial , y no permiten que se utilicen como identificadores . Esto suele dar lugar a gramáticas más fáciles de analizar , que requieren menos anticipación .

No hay palabras clave destacadas

Fortran y PL/1 no tienen palabras clave reservadas, lo que permite afirmaciones como:

  • en PL/1:
    • IF IF = THEN THEN ... (la segunda IFy la primera THENson variables).
  • en Fortran:
    • IF (A) X = 10... Sentencia condicional (con otras variantes)
    • IF (A) = 2 asignación a una variable con subíndice llamadaIF
Como los espacios eran opcionales hasta Fortran 95, un error tipográfico podía cambiar por completo el significado de una instrucción:
  • DO 10 I = 1,5 inicio de un bucle con I corriendo del 1 al 5
  • DO 10 I = 1.5 asignación del valor 1.5 a la variableDO10I

Palabras marcadas

En Algol 60 y Algol 68, se distinguían explícitamente los tokens especiales: para publicación, en negrita, p. ej begin.; para programación, con alguna marca especial, p. ej., una bandera ( 'begin), comillas ( 'begin'), o subrayado ( beginen el Elliott 503 ). Esto se denomina "sobrado".

Por lo tanto, 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 pueden ser definidos por el programador. La mayoría de los lenguajes de programación más populares utilizan palabras clave reservadas. Algunos ejemplos tempranos son 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 lenguaje: 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 de muchos lenguajes de programación utilizan 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 mediante ejemplos y prosa en inglés. Esto puede generar ambigüedad. [ 9 ] En algunas descripciones de lenguajes, el significado de las sentencias compuestas se define mediante el uso de construcciones "más simples", por ejemplo, un bucle while se puede definir mediante una combinación de pruebas, saltos y etiquetas , utilizando ify goto.

El artículo sobre semántica describe varios formalismos matemáticos/lógicos que se han utilizado para especificar la semántica de forma precisa; estos suelen ser más complejos que la BNF, y no existe un enfoque único que se considere universalmente válido. Algunos enfoques definen un intérprete para el lenguaje, otros utilizan la lógica formal para razonar sobre un programa, otros añaden afijos a las entidades sintácticas para garantizar la coherencia, etc.

Expresiones

A menudo se distingue entre sentencias, que se ejecutan, y expresiones , que se evalúan. Las expresiones siempre se evalúan y devuelven un valor, a diferencia de las sentencias. Sin embargo, las expresiones suelen utilizarse como parte de una sentencia más extensa.

En la mayoría de los lenguajes de programación, una instrucción puede consistir en poco más que una expresión, generalmente seguida de un terminador de instrucción (punto y coma). En tal caso, si bien la expresión se evalúa a un valor, la instrucción completa no lo hace (el valor de la expresión se descarta). Por ejemplo, en C, C++, C# y muchos lenguajes similares, x = y + 1es una expresión que asignará a x el valor de y más uno, y la expresión completa se evaluará al mismo valor que se asigna a x. Sin embargo, x = y + 1;(nótese el punto y coma al final) es una instrucción que aún asignará a x el valor de y más uno porque la expresión dentro de la instrucción se evalúa, pero el resultado de la expresión se descarta y la instrucción en sí no se evalúa a ningún valor. [ 10 ]

Las expresiones también pueden estar contenidas dentro de otras expresiones. Por ejemplo, la expresión x = y + 1contiene la expresión y + 1, que a su vez contiene los valores yy 1, que técnicamente también son expresiones.

Aunque los ejemplos anteriores muestran expresiones de asignación, algunos lenguajes no implementan la asignación como una expresión, sino como una instrucción. Un ejemplo notable es Python , donde el signo = no es un operador, sino simplemente un separador en la instrucción de asignación. Si bien Python permite múltiples asignaciones como si cada una fuera una expresión, esto es simplemente un caso especial de la instrucción de asignación integrada en la gramática del lenguaje, en lugar de una expresión propiamente dicha. [ 11 ]

Extensibilidad

La mayoría de los lenguajes de programación tienen un conjunto fijo de instrucciones definidas por el propio lenguaje, pero se han realizado experimentos con lenguajes extensibles que permiten al programador definir nuevas instrucciones.

Véase también

Referencias

  1. "declaración" . Webopedia. Septiembre de 1996. Consultado el 3 de marzo de 2015 .
  2. Dahl, Ole-Johan ; Myhrhaug, Bjørn; Nygaard, Kristen (1970). Lenguaje base común (PDF) (Reporte). Centro de Computación de Noruega. Archivado desde el original el 19 de septiembre de 2024 . Consultado el 20 de agosto de 2025 .
  3. ^ Backus, JW; Bauer, Florida; Verde, J.; Katz, C.; McCarthy, J.; Naur, P.; Perlis, AJ; Rutishauser, H.; Samuelson, K.; Vauquois, B.; Wegstein, JH; van Wijngaarden, A.; Woodger, M. Naur, Peter (ed.). "Informe revisado sobre el lenguaje algorítmico Algol 60" . masa:trabajo . Sección "4.1" . Consultado el 23 de enero de 2021 .
  4. ^ Backus, JW; Bauer, Florida; Verde, J.; Katz, C.; McCarthy, J.; Naur, P.; Perlis, AJ; Rutishauser, H.; Samuelson, K.; Vauquois, B.; Wegstein, JH; van Wijngaarden, A.; Woodger, M. Naur, Peter (ed.). "Informe revisado sobre el lenguaje algorítmico Algol 60" . masa:trabajo . Sección "1.1" . Consultado el 23 de enero de 2021 .
  5. "FORTRAN" (PDF) . Instituto de Estándares de los Estados Unidos de América. 1966. Recuperado el 19 de febrero de 2021 a través de WG5 Fortran Standards.
  6. "Borrador de trabajo J3/04-007" (PDF) . J3 Fortran. 10 de mayo de 2004. Consultado el 19 de febrero de 2021 .
  7. "Manual de referencia de programación COBOL ASCII" (PDF) . unisys. Junio ​​de 2010. Consultado el 23 de enero de 2021 .
  8. Jensen, Kathleen; Wirth, Niklaus (1974). Goos, G.; Hartmanis, J. (eds.). "Manual de usuario e informe de PASCAL" (PDF) . Lecture Notes in Computer Science . Apéndice D. Recuperado el 19 de febrero de 2021 .
  9. Knuth, DE (julio de 1967). "Los puntos problemáticos restantes en Algol 60" (PDF) . La familia ALGOL . Consultado el 24 de febrero de 2021 .
  10. "ISO/IEC 9899:1999 (E)" (PDF) . ISO/IEC . Archivado (PDF) del original el 7 de febrero de 2024.
  11. "7. Sentencias simples" . Documentación de Python 3.10.8 .
  • Enciclopedia de PC: Definición de: declaración de programa