Articulo de referencia

Comparación de lenguajes de programación (sintaxis)

Este artículo compara la sintaxis de muchos lenguajes de programación importantes . Expresiones Las expresiones de los lenguajes de programación se pueden clasificar a grandes r...

Este artículo compara la sintaxis de muchos lenguajes de programación importantes .

Expresiones

Las expresiones de los lenguajes de programación se pueden clasificar a grandes rasgos en cuatro estructuras sintácticas:

notación prefija
  • Ceceo(* (+ 2 3) (expt 4 5))
notación infija
sufijo, posfijo o notación polaca inversa
notación matemática
  • TUTOR(2 + 3)(45) $$ note implicit multiply operator

Delimitación de declaraciones

Un lenguaje que admite la construcción de sentencias normalmente tiene reglas para uno o más de los siguientes aspectos:

  • Terminador de sentencia: marca el final de una sentencia.
  • Separador de sentencias: delimita el límite entre dos sentencias; no es necesario para la última sentencia.
  • Continuación de línea: evita un salto de línea para continuar una instrucción en la siguiente línea.

Algunos lenguajes definen un carácter especial como terminador, mientras que otros, denominados orientados a la línea , utilizan el salto de línea . Por lo general, un lenguaje orientado a la línea incluye una función de continuación de línea, mientras que otros lenguajes no la necesitan, ya que el salto de línea se trata como cualquier otro espacio en blanco . Algunos lenguajes orientados a la línea proporcionan un separador para usar entre instrucciones en una misma línea.

continuación de línea

A continuación se enumeran algunos lenguajes de programación orientados a líneas que permiten la continuación de línea. Salvo que se indique lo contrario, el marcador de continuación debe ser el último texto de la línea.

Ampersand
barra invertida
acento grave
Guión
Subrayar
Puntos suspensivos (tres puntos)
  • MATLAB : Los puntos suspensivos no necesariamente finalizan la línea, pero el texto que los sigue se ignora. [ 5 ] Inician un comentario que se extiende hasta (incluyendo) el primer salto de línea posterior. Compárese esto con un comentario de línea que se extiende hasta el siguiente salto de línea.
delimitador de coma
  • Ruby: el comentario puede seguir al delimitador
delimitador de corchete izquierdo
Símbolo del operador
  • Ruby: como último objeto de la línea; el comentario puede seguir al operador
  • AutoHotkey : como primer carácter de una línea continua; cualquier operador de expresión excepto ++ y --, y una coma o un punto [ 7 ]
Algún tipo de comentario de línea sirve como continuación de la línea.
Posición del personaje
  • Fortran 77 : Una línea que no es de comentario es una continuación de la línea que no es de comentario anterior si aparece algún carácter que no sea un espacio en la columna 6. Las líneas de comentario no se pueden continuar.
  • COBOL : Las constantes de cadena pueden continuarse no terminando la cadena original en una cláusula PICTURE con ', luego insertando un -en la columna 7 (misma posición donde *se usa el comentario for).
  • TUTOR : Las líneas que comienzan con una tabulación (después de cualquier sangría requerida por el contexto) continúan el comando anterior.

El compilador de C concatena literales de cadena adyacentes aunque estén en líneas separadas, pero esto no es sintaxis de continuación de línea, ya que funciona igual independientemente del tipo de espacio en blanco entre los literales.

Consumir software externo

Los lenguajes de programación admiten diversas formas de referenciar y utilizar otro software dentro de su propia sintaxis. En algunos casos, esto implica importar la funcionalidad exportada de una biblioteca, paquete o módulo , pero otros mecanismos son operaciones más sencillas que consisten en incluir archivos de texto.

Las importaciones se pueden clasificar por nivel (módulo, paquete, clase, procedimiento,...) y por sintaxis (nombre de la directiva, atributos,...).

Archivo incluido

  • #include <filename>o bien, preprocesador de C utilizado junto con C y C++ y otras herramientas de desarrollo.#include "filename"

Importación de archivos

Importación de paquetes

Importación de clase

  • from module import ClassPython
  • import package.classJava , MATLAB , Kotlin
  • import class from "modname";JavaScript
  • import {class} from "modname";JavaScript
  • import {class as altname} from "modname";JavaScript
  • import package.classScala
  • import package.{ class1 => alternativeName, class2 }Scala
  • import package._Scala
  • use Namespace\ClassName;PHP
  • use Namespace\ClassName as AliasName;PHP
  • using namespace::subnamespace::Class;C++
Importación de procedimientos/funciones
  • from module import functionPython
  • import package.module : symbol;- D
  • import package.module : altsymbolname = symbol;- D
  • import Module (function)Haskell
  • import function from "modname";JavaScript
  • import {function} from "modname";JavaScript
  • import {function as altname} from "modname";JavaScript
  • import package.functionMATLAB
  • import package.class.functionScala
  • import package.class.{ function => alternativeName, otherFunction }Scala
  • useModule('symbol');Perl
  • use function Namespace\function_name;PHP
  • use Namespace\function_name as function_alias_name;PHP
  • using namespace::subnamespace::symbol;C++
  • use module::submodule::symbol;- Óxido
  • use module::submodule::{symbol1, symbol2};- Óxido
  • use module::submodule::symbol as altname;- Óxido

Importación constante

  • use const Namespace\CONST_NAME;PHP

Las declaraciones anteriores también se pueden clasificar según sean una conveniencia sintáctica (que permite referirse a elementos con un nombre más corto, pero que aún se pueden referenciar con un nombre completo sin importarlos), o según sean realmente necesarias para acceder al código (sin las cuales es imposible acceder al código, incluso con nombres completos).

Conveniencia sintáctica

  • import package.*Java
  • import package.classJava
  • open moduleOCaml
  • using namespace namespace::subnamespace;C++
  • use module::submodule::*;- Óxido

Se requiere para acceder al código.

  • import module;C++
  • import altname "package/name"Ir
  • import altname from "modname";JavaScript
  • import modulePitón

Delimitación de bloques

Un bloque es una agrupación de código que se trata de forma conjunta. Muchas sintaxis de bloques pueden constar de cualquier número de elementos (instrucciones, expresiones u otras unidades de código), incluyendo uno o ninguno. Los lenguajes delimitan un bloque de diversas maneras: algunos mediante el marcado de texto y otros mediante formato relativo, como los niveles de sangría.

Las llaves (también llamadas corchetes) {...}
  • Lenguajes con llaves : Un aspecto definitorio de los lenguajes con llaves es que utilizan llaves para delimitar un bloque.
Paréntesis (...)
Corchetes cuadrados [...]
  • Rebol , Red , Self , Smalltalk (los bloques son objetos de primera clase, también conocidos como cierres).
begin...end
do...end
do...done
do...end
  • Lua , Ruby (pasar bloques como argumentos, forbucle), Seed7 (encierra los cuerpos del bucle entre doy end)
X ... end(por ejemplo if... end):
  • Ruby ( if, while, until, def, class, modulesentencias), OCaml ( for& whilebucles), MATLAB ( if& switchcondicionales, for& whilebucles, trycláusula, package, classdef, properties, methods, events, & functionbloques), Lua ( then/ else& function)
( begin...)
(progn ...)
( do...)
Sangría
Otros

Comentarios

Con respecto a la definición del lenguaje, la sintaxis de los comentarios se puede clasificar de muchas maneras, entre ellas:

  • Comentario de línea vs. comentario de bloque: un comentario de línea comienza con un delimitador y continúa hasta el final de la línea ( marcador de nueva línea ), mientras que un comentario de bloque comienza con un delimitador y termina con otro, pudiendo abarcar varias líneas.
  • Anidable: indica si un comentario de bloque puede estar dentro de otro comentario de bloque.
  • Cómo se analiza con respecto al lenguaje; las herramientas (incluidos compiladores e intérpretes) también pueden analizar los comentarios, pero eso puede estar fuera de la definición del lenguaje.

Otras formas de categorizar comentarios que quedan fuera de la definición del idioma:

  • Comentarios en línea frente a comentarios de prólogo: un comentario en línea sigue al código en la misma línea y un comentario de prólogo precede al código del programa al que se refiere; los comentarios de línea o de bloque pueden usarse como comentarios en línea o de prólogo.
  • Compatibilidad con la generación de documentación de API que está fuera de la definición del lenguaje.

Comentario de línea

Bloquear comentario

En estos ejemplos, ~representa el contenido del comentario, y el texto que lo rodea son los delimitadores. Los espacios en blanco (incluido el salto de línea ) no se consideran delimitadores.

Variantes únicas

Fortran

La indentación de líneas en Fortran 66/77 es importante. La instrucción propiamente dicha se encuentra en las columnas 7 a 72 de una línea. Cualquier carácter que no sea un espacio en la columna 6 indica que esta línea es una continuación de la línea anterior. Un ' C' en la columna 1 indica que toda esta línea es un comentario. Las columnas 1 a 5 pueden contener un número que sirve como etiqueta. Las columnas 73 a 80 se ignoran y pueden usarse para comentarios; en la época de las tarjetas perforadas , estas columnas a menudo contenían un número de secuencia para que la baraja de tarjetas pudiera ordenarse correctamente si alguien las dejaba caer accidentalmente. Fortran 90 eliminó la necesidad de la regla de indentación y añadió comentarios de línea, utilizando el !carácter como delimitador de comentarios.

COBOL

En el código de formato fijo, la indentación de línea es importante. Las columnas 1 a 6 y las columnas a partir de la 73 se ignoran. Si hay un *o /en la columna 7, esa línea es un comentario. Hasta COBOL 2002, si había un Do den la columna 7, definía una "línea de depuración" que se ignoraba a menos que se le indicara al compilador que la compilara.

Cobra

Cobra admite comentarios en bloque con " /#... #/", similar a los " /*... */" que se encuentran a menudo en lenguajes basados ​​en C, pero con dos diferencias. El #carácter se reutiliza del formato de comentario de una sola línea " #...", y los comentarios en bloque se pueden anidar, lo que resulta conveniente para comentar grandes bloques de código.

Rizo

Curl admite comentarios en bloque con etiquetas definidas por el usuario como en |foo# ... #foo|.

Lua

Al igual que las cadenas sin formato, puede haber cualquier número de signos de igual entre los corchetes, siempre que tanto la etiqueta de apertura como la de cierre tengan un número igual coincidente; esto permite el anidamiento siempre que los comentarios de bloque anidados/cadenas sin formato utilicen un número diferente de signos de igual que su comentario contenedor: --[[comment --[=[ nested comment ]=] ]]. Lua descarta el primer salto de línea (si está presente) que sigue directamente a la etiqueta de apertura.

Perl

En Perl, los comentarios de bloque se consideran parte de la documentación y se denominan Documentación Simple y Tradicional (POD, por sus siglas en inglés). Técnicamente, Perl no tiene una convención para incluir comentarios de bloque en el código fuente, pero la POD se usa habitualmente como solución alternativa.

PHP

PHP admite comentarios al estilo estándar de C/C++, pero también admite el estilo de Perl.

Pitón

El uso de las comillas triples para comentar líneas de código fuente no constituye realmente un comentario. [ 19 ] El texto encerrado se convierte en una cadena literal, que Python suele ignorar (excepto cuando es la primera instrucción en el cuerpo de un módulo, clase o función; véase docstring ).

Elixir

El truco anterior utilizado en Python también funciona en Elixir, pero el compilador emitirá una advertencia si lo detecta. Para suprimir la advertencia, sería necesario anteponer el símbolo ~S(que impide la interpolación de cadenas) a la cadena entre comillas triples, lo que lleva a la construcción final ~S""" ... """. Además, Elixir admite una forma limitada de comentarios de bloque como una característica oficial del lenguaje, pero al igual que en Perl, esta construcción está destinada exclusivamente a escribir documentación. A diferencia de Perl, no se puede utilizar como solución alternativa, ya que está limitada a ciertas partes del código y genera errores o incluso suprime funciones si se utiliza en otro lugar. [ 20 ]

Raku

Raku utiliza #`(...)para denotar comentarios de bloque. [ 21 ] Raku permite el uso de cualquier par de corchetes "derechos" e "izquierdos" después #`(es decir #`(...), #`[...], , #`{...}, #`<...>, e incluso los más complicados son todos comentarios de bloque válidos). También se permite anidar corchetes dentro de comentarios (es decir, va hasta la última llave de cierre).#`{{...}}#`{ a { b } c }

Rubí

Un comentario de bloque en Ruby comienza en =beginla línea y termina en =endla línea.

Jerga

La región de líneas delimitada por los separadores y es ignorada por el intérprete. El nombre de la etiqueta puede ser cualquier secuencia de caracteres alfanuméricos que indique cómo se debe interpretar el bloque que contiene. Por ejemplo, podría indicar el inicio de un bloque de documentación con formato LaTeX.#<tag>#</tag>#<latex>

Esquema y estafa

El siguiente componente sintáctico completo (expresión s) se puede comentar con #;.

ABAP

ABAP admite dos tipos de comentarios. Si el primer carácter de una línea, incluyendo la sangría, es un asterisco (* *), toda la línea se considera un comentario, mientras que una comilla doble simple ( ") inicia un comentario en línea que se mantiene hasta el final de la línea. Los comentarios ABAP no son posibles entre las sentencias EXEC SQLy ENDEXECporque SQL nativo tiene otros usos para estos caracteres. En la mayoría de los dialectos SQL, --se puede usar el doble guion ( ) en su lugar.

Lenguas esotéricas

Muchos lenguajes de programación esotéricos siguen la convención de que cualquier texto que no sea ejecutado por el puntero de instrucción (por ejemplo, Befunge ) o al que se le asigne un significado de otra manera (por ejemplo, Brainfuck ), se considera un "comentario".

Comparación de comentarios

Existe una amplia variedad de estilos de sintaxis para declarar comentarios en el código fuente. BlockCommentAquí se utiliza en cursiva para indicar el estilo de comentario de bloque. LineCommentAquí se utiliza en cursiva para indicar el estilo de comentario de línea.

Véase también

Referencias

  1. Tres tipos diferentes de cláusulas, cada una separa las frases y las unidades de manera diferente:
      1. Cláusula serial usando el token go-on (es decir, punto y coma): inicio a; b; c fin – las unidades se ejecutan en orden.
      2. cláusula colateral usando el token and-also (es decir, ","): inicio a, b, c fin – el orden de ejecución debe ser optimizado por el compilador.
      3. cláusula paralela usando el token and-also (es decir, ","): par begin a, b, c end – las unidades deben ejecutarse en hilos paralelos.
  2. De la definición del lenguaje R , sección 3.2 Estructuras de control: "Un punto y coma siempre indica el final de una instrucción, mientras que un salto de línea puede indicar el final de una instrucción. Si la instrucción actual no está sintácticamente completa, el evaluador simplemente ignora los saltos de línea."
  3. Manual de referencia de Bash , 3.1.2.1 Carácter de escape
  4. Documentación de Python , 2. Análisis léxico : 2.1.5. Unión explícita de líneas
  5. "Mathworks.com" . Archivado del original el 7 de febrero de 2010.
  6. "Paréntesis/Corchetes - Windows CMD - SS64.com" . ss64.com .
  7. "Scripts - Definición y uso | AutoHotkey" .
  8. Para que un archivo M (código fuente de MATLAB) sea accesible por su nombre, su directorio padre debe estar en la ruta de búsqueda (o en el directorio actual).
  9. 1 2 3 "Sintaxis detallada - F# | Microsoft Learn" . Microsoft Learn . 5 de noviembre de 2021. Consultado el 17 de noviembre de 2022 .
  10. "Manual de Nim" . nim-lang.org .
  11. 1 2 "Mathworks.com" . Archivado del original el 21 de noviembre de 2013. Recuperado el 25 de junio de 2013 .
  12. "Algol68_revised_report-AB.pdf en PDF pp. 61–62, documento original pp. 121–122" (PDF) . Consultado el 27 de mayo de 2014 .
  13. "Versión HTML del Informe Revisado de Algol68 AB" . Archivado del original el 17 de marzo de 2013. Consultado el 27 de mayo de 2014 .
  14. 1 2 "DLang.org, Léxico" . Consultado el 27 de mayo de 2014 .
  15. "Referencia de palabras clave de AutoItScript.com, #comments-start" . Consultado el 27 de mayo de 2014 .
  16. "slang-2.2.4/src/slprepr.c – líneas 43 a 113" . Archivado del original el 21 de noviembre de 2017. Recuperado el 28 de mayo de 2014 .
  17. "Puntuación · El lenguaje Julia" .
  18. "Manual de Nim" . nim-lang.org .
  19. "Consejo de Python: Puedes usar cadenas de varias líneas como comentarios de varias líneas" , 11 de septiembre de 2011, Guido van Rossum
  20. "Cómo escribir documentación — Elixir v1.12.3" . Consultado el 28 de julio de 2023 .
  21. "Documentación de Perl 6 (Sintaxis)" . docs.perl6.org. Comentarios . Consultado el 5 de abril de 2017 .
  22. "Uso del preprocesador FPP" . Archivado del original el 18 de noviembre de 2022. Consultado el 18 de noviembre de 2022 .
  23. "Comentarios sobre Perl 6 POD" . 25 de mayo de 2023.
  24. "Perl 6 POD (Bloques abreviados)" . 25 de mayo de 2023.

Notas

  1. Visual Basic (.NET) no admite comentarios multilínea tradicionales, pero estos se pueden emular mediante directivas del compilador.
  2. 1 2 Si bien C# admite comentarios de bloque tradicionales/* ... */, se pueden usar directivas del compilador para imitarlos, como en VB.NET.
  3. 1 2 El carácter de continuación de línea_se puede usar para extender un comentario de una sola línea a la siguiente sin necesidad de escribirlo'deREMnuevo. Esto se puede hacer hasta 24 veces seguidas.
  4. Fortran no admite comentarios de bloque tradicionales, pero algunos compiladores admiten directivas de preprocesador al estilo de C / C++ , lo que permite al programador emular comentarios de varias líneas. [ 22 ]
  5. Ambos símbolos de porcentaje entre corchetes deben ser los únicos caracteres que no sean espacios en blanco en sus respectivas líneas.