Articulo de referencia

Desactivación (sintaxis)

En el diseño de lenguajes de programación , el stropping es un método para marcar explícitamente secuencias de letras como poseedoras de una propiedad especial, como ser una pal...

En el diseño de lenguajes de programación , el stropping es un método para marcar explícitamente secuencias de letras como poseedoras de una propiedad especial, como ser una palabra clave , o un cierto tipo de variable o ubicación de almacenamiento, y por lo tanto habitar un espacio de nombres diferente al de los nombres ordinarios ("identificadores"), para evitar conflictos. El stropping no se utiliza en la mayoría de los lenguajes modernos; en su lugar, las palabras clave son palabras reservadas y no pueden usarse como identificadores. El stropping permite que la misma secuencia de letras se utilice tanto como palabra clave como identificador , y simplifica el análisis sintáctico en ese caso; por ejemplo, permite una variable llamada ifsin conflicto con la palabra clave if .

La técnica de "stropping" se asocia principalmente con ALGOL y lenguajes relacionados en la década de 1960. Si bien todavía se utiliza en la actualidad , se confunde fácilmente con otras técnicas similares que son superficialmente parecidas.

Historia

El método de stropping y el término "stropping" surgieron en el desarrollo de ALGOL en la década de 1960, donde se usaba para representar distinciones tipográficas (negrita y subrayado) que se encontraban en el lenguaje de publicación que no podían representarse directamente en el lenguaje de hardware: una máquina de escribir podía tener caracteres en negrita, pero en la codificación en tarjetas perforadas, no había caracteres en negrita. El término "stropping" surgió en ALGOL 60 , de " apóstrofe ", ya que algunas implementaciones de ALGOL 60 usaban apóstrofes alrededor del texto para indicar negrita, [ 1 ] como 'if'para representar la palabra clave if . Stropping también es importante en ALGOL 68 , donde se usan múltiples métodos de stropping, conocidos como "regímenes de stropping"; los apóstrofes coincidentes originales de ALGOL 60 no se usaban ampliamente, siendo más común un punto inicial o mayúsculas, [ 2 ] como en .IFor IFy el término "stropping" se aplicó a todos estos.

Sintaxis

Se han utilizado diversas sintaxis para el stropping:

  • ALGOL 60 comúnmente usaba solo la convención de comillas simples alrededor de la palabra, generalmente como apóstrofes, de donde proviene el nombre "stropping" (por ejemplo 'BEGIN').
  • ALGOL 68 [ 3 ] [ 2 ] en algunas implementaciones trata las secuencias de letras precedidas por una comilla simple, ' , como palabras clave (por ejemplo, 'BEGIN) [ 4 ]

De hecho, era frecuente que se utilizaran varias convenciones de stroping dentro de un mismo lenguaje. Por ejemplo, en ALGOL 68 , la elección de la convención de stroping se puede especificar mediante una directiva del compilador (en la terminología de ALGOL, un " pragmat "), a saber, POINT, UPPER, QUOTE o RES:

  • PUNTO para 6 bits (no hay suficientes caracteres para minúsculas), como en .FOR– se utiliza una convención similar en FORTRAN 77, donde las palabras clave LOGICAL se escriben como .EQ.etc. (ver más abajo)
  • MAYÚSCULAS para 7 bits, como en FOR– con minúsculas utilizadas para identificadores ordinarios
  • CITA como en ALGOL 60, como en'for'
  • Las palabras reservadas de RES, tal como se usan en los idiomas modernos, forestán reservadas y no están disponibles para los identificadores ordinarios.

Los distintos regímenes de reglas son una especificación léxica para caracteres con trazos, aunque en algunos casos tienen interpretaciones simples: en los regímenes de apóstrofe simple y punto, el primer carácter funciona como un carácter de escape , mientras que en el régimen de apóstrofes coincidentes los apóstrofes funcionan como delimitadores , como en los literales de cadena .

Otros ejemplos:

  • Atlas Autocode tenía tres opciones: las palabras clave podían underlinedusarse con la tecla de retroceso y la tecla de sobrescritura en un teclado Flexowriter , podían introducirse mediante una coma %percent %symbolo podían escribirse UPPER CASEsin ningún carácter delimitador (modo "delimitadores en mayúsculas", en cuyo caso todas las variables debían estar en minúsculas).
  • ALGOL 60 en las computadoras Elliott 803 y Elliott 503 usaba subrayado. Las Flexowriters (que producían cinta de papel perforada) tenían una tecla fija (subrayado _) de modo que al escribir _b_e_g_i_n se obtenía begin , que era muy legible. La barra vertical | también era una tecla fija, por lo que al escribir |= se obtenía una buena aproximación a ≠.
  • El compilador Kidsgrove para ALGOL 60 en el English Electric KDF9 parece haber utilizado al menos otras dos convenciones de trazo además de las comillas: signos de exclamación y caracteres de porcentaje .
  • Los programas ALGOL 68RS permiten el uso de varias variantes de strap, incluso dentro del mismo procesador de lenguaje.
  • Edinburgh IMP heredó la %percent %symbolconvención de prefijos de Atlas Autocode, pero no sus otras opciones de ajuste.

Ejemplos de diferentes estilos de ALGOL 68

Nótese la directiva principal pr (abreviatura de pragmat ) , que a su vez está struptada en estilo POINT o quote, y el comentario for (de " ") – véase ALGOL 68: pr & co: Pragmats and Comments para más detalles.¢

Otros idiomas

Por diversas razones, Fortran 77 tiene estos valores y operadores "lógicos": .TRUE., .FALSE., .EQ., .NE., .LT., .LE., .GT., .GE., .EQV., .NEQV., .OR., .AND., .NOT.[ 5 ]

.AND.y también se utilizan en pruebas combinadas en declaraciones y en .OR.archivos por lotes ejecutados bajo los procesadores de línea de comandos de JP Software como 4DOS , [ 6 ] 4OS2 y 4NT / Take Command ..XOR.IFIFF

Uso moderno

Para indicar identificadores

La mayoría de los lenguajes de programación modernos no utilizan el stropping. Sin embargo, algunos lenguajes admiten el stropping opcional para especificar identificadores que, de otro modo, entrarían en conflicto con palabras reservadas o que contienen caracteres no alfanuméricos.

Por ejemplo, el uso de muchos lenguajes en la Infraestructura de Lenguaje Común (CLI) de .NET de Microsoft requiere una forma de usar variables en un lenguaje diferente que pueden ser palabras clave en el lenguaje que realiza la llamada. Esto a veces se hace mediante prefijos, como en C#, o encerrando el identificador entre corchetes, como en Visual Basic.NET .@

Un segundo ejemplo importante se encuentra en muchas implementaciones del lenguaje de consulta estructurado (SQL ). En estos lenguajes, las palabras reservadas pueden usarse como nombres de columnas, tablas o variables, delimitándolas léxicamente. El estándar especifica que las palabras reservadas deben ir entre comillas dobles, pero en la práctica el mecanismo exacto varía según la implementación; MySQL , por ejemplo, permite usar palabras reservadas en otros contextos encerrándolas entre acentos graves, y Microsoft SQL Server usa corchetes.

En varios lenguajes, incluidos Nim , R , [ 7 ] , Scala , [ 8 ] y Kotlin [ 9 ] , una palabra reservada o un nombre no alfanumérico se puede usar como identificador encerrándolo entre comillas invertidas .

Existen otros ejemplos menores. Por ejemplo, Web IDL utiliza un guion bajo inicial _para evitar que los identificadores entren en conflicto con palabras reservadas: el valor del identificador elimina este guion bajo inicial, lo que convierte esto en una medida de eliminación, en lugar de una convención de nomenclatura. [ 10 ]

Desbloqueo por parte del compilador

En un front-end de compilador , el destropping originalmente ocurría durante una fase inicial de reconstrucción de línea , que también eliminaba los espacios en blanco. A esto le seguía el análisis sin escáner (sin tokenización); esto era estándar en la década de 1960, especialmente para ALGOL. En el uso moderno, el destropping generalmente se realiza como parte del análisis léxico . Esto es claro si se distingue el léxico en dos fases de escáner y evaluador: el escáner categoriza la secuencia destropeada en la categoría correcta, y luego el evaluador destropea al calcular el valor. Por ejemplo, en un idioma donde se usa un guion bajo inicial para destropear los identificadores para evitar colisiones con palabras reservadas, la secuencia _ifsería categorizada como un identificador (no como la palabra reservada if) por el escáner, y luego el evaluador le daría el valor if, produciendo (Identifier, if)como tipo de token y valor.

Técnicas similares

Existen varias técnicas similares, que generalmente anteponen o sufijan un identificador para indicar un tratamiento diferente, pero la semántica varía. Estrictamente hablando, el stropping consiste en diferentes representaciones del mismo nombre (valor) en diferentes espacios de nombres, y ocurre en la etapa de tokenización. Por ejemplo, en ALGOL 60 con stropping de apóstrofe coincidente, 'if'se tokeniza como (Keyword, if), mientras que ifse tokeniza como (Identifier, if) – mismo valor en diferentes clases de tokens.

El uso de mayúsculas para las palabras clave sigue vigente como convención para escribir gramáticas para el análisis léxico y sintáctico: tokenizar la palabra reservada ifcomo la clase de token IF, y luego representar una cláusula if-then-else mediante la frase IF Expression THEN Statement ELSE Statementdonde los términos en mayúsculas son palabras clave y los términos en mayúsculas son símbolos no terminales en una regla de producción ( los símbolos terminales se denotan con términos en minúsculas, como identifiero integer, para un literal entero ).

Convenciones de nomenclatura

En términos generales, se pueden usar convenciones de nomenclatura para evitar conflictos, comúnmente anteponiendo o sufijando un guion bajo, como en if_o _then. Un guion bajo inicial se usa a menudo para indicar miembros privados en la programación orientada a objetos.

Estos nombres pueden ser interpretados por el compilador y tener algún efecto, aunque esto generalmente se realiza en la fase de análisis semántico, no en la fase de tokenización. Por ejemplo, en Python, un solo guion bajo inicial es un indicador débil de privacidad y afecta a los identificadores que se importan al importar un módulo, mientras que un doble guion bajo inicial (y no más de un guion bajo final) en un atributo de clase provoca la manipulación de nombres . [ 11 ]

Palabras reservadas

Si bien las lenguas modernas generalmente utilizan palabras reservadas en lugar de la técnica de stropping para distinguir las palabras clave de los identificadores (por ejemplo, al marcarlos como ifreservados), también reservan con frecuencia una clase sintáctica de identificadores como palabras clave, lo que produce representaciones que pueden interpretarse como un régimen de stropping, pero que en cambio tienen la semántica de las palabras reservadas.

Esto es más notable en C, donde los identificadores que comienzan con un guion bajo están reservados, aunque los detalles precisos de qué identificadores están reservados en qué ámbito están involucrados, y los guiones bajos dobles iniciales están reservados para cualquier uso; [ 12 ] de manera similar en C++ cualquier identificador que contenga un guion bajo doble está reservado para cualquier uso, mientras que un identificador que comienza con un guion bajo está reservado en el espacio global. [ nb 1 ] Por lo tanto, se puede agregar una nueva palabra clave foousando la palabra reservada __foo. Si bien esto es superficialmente similar a stropping, la semántica es diferente. Como palabra reservada, la cadena __foorepresenta el identificador __fooen el espacio de nombres de identificadores común. En stropping (al anteponer palabras claves con __), la cadena __foorepresenta la palabra clave fooen un espacio de nombres de palabras clave separado. Por lo tanto, usando palabras reservadas, los tokens para __fooy fooson (identificador, __foo) y (identificador, foo) – valores diferentes en la misma categoría – mientras que en stropping los tokens para __fooy fooson (palabra clave, foo) y (identificador, foo) – mismos valores en diferentes categorías. Estas soluciones resuelven el mismo problema de conflictos de espacios de nombres de una manera que resulta idéntica para un programador, pero que difiere en términos de gramática formal e implementación.

Deformación de nombres

El cambio de nombre también resuelve los conflictos de nombres renombrando los identificadores, pero lo hace mucho más tarde en la compilación, durante el análisis semántico, no durante la tokenización. Esto consiste en crear nombres que incluyan información de alcance y tipo, principalmente para uso de los enlazadores, tanto para evitar conflictos como para incluir la información semántica necesaria en el propio nombre. En estos casos, los identificadores originales pueden ser idénticos, pero el contexto es diferente, como en las funciones foo(int x)versus foo(char x), en ambos casos con el mismo identificador foo, pero diferente firma. Estos nombres podrían cambiarse a foo_iy foo_c, por ejemplo, para incluir la información de tipo.

Sigilos

Un fenómeno sintácticamente similar pero semánticamente diferente son los sigilos , que indican propiedades de las variables. Son comunes en BASIC , Perl , Ruby y otros lenguajes para identificar características de variables y constantes: en BASIC y Perl se usan para designar el tipo de variable, y en Ruby para distinguir variables de constantes e indicar su ámbito. Cabe destacar que esto afecta la semántica de la variable, no la sintaxis de si se trata de un identificador o una palabra clave.

Paralelismos en el lenguaje humano

La técnica de "stopping" se utiliza en lenguajes de programación para facilitar el trabajo del compilador (o, más precisamente, del analizador sintáctico ), es decir, dentro de las capacidades de las computadoras relativamente pequeñas y lentas disponibles en los inicios de la informática en el siglo XX. Sin embargo, técnicas similares también se han utilizado comúnmente para facilitar la comprensión lectora. Algunos ejemplos son:

  • Se colocan las palabras importantes en negrita , [ 13 ] como la primera mención de stropping en la parte superior de esta página, porque definir stropping es el propósito mismo de la página.
  • Formatear las palabras nuevas en cursiva [ 14 ] cuando aparecen por primera vez en el texto. Esto se usa comúnmente en la ciencia ficción y la fantasía al presentar plantas, alimentos o criaturas inventadas; en relatos de viajes y escritura histórica al describir palabras extranjeras desconocidas; y así sucesivamente. También se puede usar una fuente especial, posiblemente asociada con el idioma en cuestión, por ejemplo, una fuente gótica [ 15 ] para palabras en alemán .
  • Utilizar un idioma diferente, normalmente latín o griego, para indicar términos técnicos. Esto es similar al uso de palabras reservadas, pero suele combinarse con texto en cursiva para facilitar la lectura. Por ejemplo:
  • En japonés escrito , además de los caracteres Kanji , los dos alfabetos distintos (más estrictamente, silabarios ) Hiragana [ 18 ] [ 19 ] y Katakana [ 20 ] , que representan el mismo conjunto de sonidos, se utilizan para distinguir las palabras japonesas escritas fonéticamente de las palabras extranjeras importadas, respectivamente; Katakana también se utiliza para enfatizar, de forma muy parecida a la cursiva en inglés.

Véase también

Notas

  1. Existen otras restricciones, como un identificador que comience con un guion bajo, seguido de una letra mayúscula.

Referencias

  1. King, Peter R., ed. (18 de junio de 1974). "(desconocido)" . Actas de una Conferencia Internacional sobre la Implementación de ALGOL 68. Departamento de Ciencias de la Computación, Universidad de Manitoba, Winnipeg: Universidad de Manitoba, Departamento de Ciencias de la Computación: 148. ISBN 9780919628113El "ajustar texto", la técnica utilizada para distinguir el texto en negrita del texto normal, plantea problemas más serios . Algunas implementaciones exigen apóstrofes alrededor del texto en negrita (de ahí el nombre de "ajustar texto"); otras requieren retroceso y subrayado; [...]{{cite journal}}: La cita utiliza un título genérico ( ayuda )
  2. 1 2 van Wijngaarden, Adriaan ; Mailloux, Barry James ; Peck, John Edward Lancelot ; Koster, Cornelis Hermanus Antonius ; Sintzoff, Michel [en francés] ; Lindsey, Charles Hodgson ; Meertens, Lambert Guillaume Louis Théodore ; Fisker, Richard G., eds. (1976). "Sección 9.3 Declaraciones" (PDF) . Informe revisado sobre el lenguaje algorítmico ALGOL 68 . Springer-Verlag . págs.94 , 123. ISBN  978-0-387-07592-1. OCLC 1991170 . Archivado (PDF) del original el 19-04-2019 . Recuperado el 11-05-2019 . 
  3. http://www.fh-jena.de/~kleine/history/languages/Algol68-RR-HardwareRepresentation.pdf
  4. ^ Lindsey, Charles Hodgson ; van der Meulen, Sietse G. (1977). Introducción informal a ALGOL 68 . Holanda del Norte. págs. 348-349 . ISBN  978-0-7204-0726-6OCLC 230034877 
  5. "Estructuras lógicas" .
  6. Brothers, Hardin; Rawson, Tom ; Conn, Rex C.; Paul, Matthias R.; Dye, Charles E.; Georgiev, Luchezar I. (27 de febrero de 2002). Ayuda en línea de 4DOS 8.00 .
  7. Equipo principal de R, Citas: Citas , Fundación R para la computación estadística .
  8. Odersky, Martin (24 de mayo de 2011), Especificación del lenguaje Scala, versión 2.9
  9. "Especificación del lenguaje Kotlin" . kotlinlang.org . Consultado el 16 de julio de 2026 .
  10. Web IDL , " 3.1. Nombres ". [...] Para todas estas construcciones, el identificador es el valor del token de identificador sin el carácter inicial U+005F LOW LINE ("_") (guion bajo). [...] Nota [...] Se utiliza un guion bajo inicial para evitar que un identificador parezca una palabra reservada, de modo que, por ejemplo, se pueda definir una interfaz llamada "interface". El guion bajo inicial se elimina para descifrar el identificador. [...]
  11. PEP 008 : Descriptivo: Estilos de nomenclatura
  12. Estándar C99 , 7.1.3 Identificadores reservados
  13. Twyman, Michael. "La idea audaz: el uso de tipos de aspecto llamativo en el siglo XIX". Journal of the Printing Historical Society . 22 ( 107–143 ).
  14. Truss, Lynne (2004), Eats, Shoots & Leaves: The Zero Tolerance Approach to Punctuation , Nueva York: Gotham Books, pág. 146, ISBN  978-1-59240-087-4
  15. "Estilos de escritura a mano" . Rigsarkivet . Archivos Nacionales Daneses . Consultado el 26 de marzo de 2017 .
  16. "Cómo escribir nombres científicos de organismos" (PDF) , Competition Science Vision , consultado el 20 de junio de 2011 .
  17. Una selección de máximas legales, clasificadas e ilustradas en Google Libros
  18. ^ Doble大辞林「平」とは平凡な、やさしいという意で、当時普通に使用する文字体系であったことを意味する. 漢字は書簡文や重要な文章などを書く場合に用いる公的な文字であるのに対して、平仮名は漢字の知識に乏しい人々などが用いる私的な性格のものであった。Traducción: 平 [la parte "hira" de "hiragana"] significa "ordinario" o "simple" ya que en ese En la época en que se le dio el nombre, era un sistema de escritura para uso cotidiano. Mientras que el kanji era el sistema oficial utilizado para escribir cartas y textos importantes, el hiragana era para uso personal de personas con conocimientos limitados de kanji.
  19. "Caligrafía japonesa" . Enciclopedia Británica . Consultado el 22 de junio de 2017 .
  20. "Hiragana, Katakana y Kanji" . Caracteres de palabras japonesas. 8 de septiembre de 2010. Consultado el 15 de octubre de 2011 .

Lecturas adicionales

  • Hansen, WJ; Boom, HJ (1978). "Informe sobre la representación de hardware estándar para ALGOL 68 revisado". Acta Informatica . 9 (2): 105– 119. doi : 10.1007/BF00289072 . S2CID 34231916 . 
  • Lindsey, Charles Hodgson (marzo de 1970), "Una representación en código ISO para ALGOL 68" , Boletín ALGOL (31), ACM: 37–60 , AB31.3.6