En programación informática , los dígrafos y trígrafos son secuencias de dos y tres caracteres , respectivamente, que aparecen en el código fuente y, según la especificación de un lenguaje de programación , deben tratarse como si fueran caracteres individuales.
Existen varias razones para usar dígrafos y trígrafos: es posible que los teclados no tengan teclas para cubrir todo el conjunto de caracteres del idioma, la entrada de caracteres especiales puede ser difícil, los editores de texto pueden reservar algunos caracteres para un uso especial, etc. Los trígrafos también se pueden usar para algunas páginas de códigos EBCDIC que carecen de caracteres como y .{
}
Historia
El juego de caracteres básico del lenguaje de programación C es un subconjunto del juego de caracteres ASCII que incluye nueve caracteres que se encuentran fuera del juego de caracteres invariantes ISO 646 . Esto puede plantear un problema para escribir el código fuente cuando la codificación (y posiblemente el teclado ) que se está utilizando no admite ninguno de estos nueve caracteres. El comité ANSI C inventó los trígrafos como una forma de ingresar el código fuente utilizando teclados que admitan cualquier versión del conjunto de caracteres ISO 646.
Implementaciones
Los trígrafos no se encuentran comúnmente fuera de las suites de prueba del compilador . [1] Algunos compiladores admiten una opción para desactivar el reconocimiento de trígrafos o desactivar los trígrafos de forma predeterminada y requieren una opción para activarlos. Algunos pueden emitir advertencias cuando encuentran trígrafos en los archivos de origen. Borland suministró un programa separado, el preprocesador de trígrafos ( TRIGRAPH.EXE
), para ser utilizado solo cuando se desea el procesamiento de trígrafos (la razón fundamental era maximizar la velocidad de compilación).
Ayuda de idioma
Los diferentes sistemas definen diferentes conjuntos de dígrafos y trígrafos, como se describe a continuación.
ALGOL
Las primeras versiones de ALGOL eran anteriores a los conjuntos de caracteres ASCII y EBCDIC estandarizados y, por lo general, se implementaban utilizando un código de caracteres de seis bits específico del fabricante . Varias operaciones de ALGOL carecían de puntos de código en el conjunto de caracteres disponible o no eran compatibles con los periféricos, lo que llevó a una serie de sustituciones que incluían :=
para ←
(asignación) y >=
para ≥
(mayor o igual que).
Pascal
El Pascal lenguaje de programación compatible con dígrafos (.
, .)
, (*
y *)
para [
, ]
, {
y }
respectivamente. A diferencia de todos los otros casos mencionados aquí, (*
y *)
eran y siguen siendo de uso generalizado. Sin embargo, muchos compiladores los tratan como un tipo diferente de bloque de comentarios en lugar de como dígrafos reales, es decir, un comentario que comienza con (*
no se puede cerrar con }
y viceversa.
J
El lenguaje de programación J es un descendiente de APL pero usa el juego de caracteres ASCII en lugar de los símbolos APL . Debido a que el rango imprimible de ASCII es más pequeño que el conjunto especializado de símbolos de APL, los caracteres .
(puntos) y :
(dos puntos) se utilizan para declinar los símbolos ASCII, interpretando efectivamente unigrafos, dígrafos o raramente trígrafos como "símbolos" independientes. [2]
A diferencia del uso de dígrafos y trígrafos en C y C ++ , no hay equivalentes de un solo carácter a estos en J.
C
El preprocesador de C (usado para C y con ligeras diferencias en C ++ ; ver más abajo ) reemplaza todas las apariciones de las siguientes nueve secuencias de trígrafos por sus equivalentes de un solo carácter antes de cualquier otro procesamiento. [3] [4]
Trigraph | Equivalente |
---|---|
??= | # |
??/ | \ |
??' | ^ |
??( | [ |
??) | ] |
??! | | |
??< | { |
??> | } |
??- | ~ |
Un programador puede querer colocar dos signos de interrogación juntos pero que el compilador no los trate como si se tratara de un trígrafo. La gramática C no permite dos ?
tokens consecutivos , por lo que los únicos lugares en un archivo C donde se pueden usar dos signos de interrogación en una fila son constantes de varios caracteres, cadenas literales y comentarios. Esto es particularmente un problema para el Mac OS clásico , donde la constante '????'
puede usarse como un tipo de archivo o creador. Para colocar de forma segura dos signos de interrogación consecutivos dentro de una cadena literal, el programador puede usar la concatenación de cadenas "...?""?..."
o una secuencia de escape "...?\?..."
.
???
no es en sí misma una secuencia de trígrafos, pero cuando va seguida de un carácter como -
se interpretará como ?
+ ??-
, como en el ejemplo siguiente, que tiene 16 ?
s antes de /
.
El ??/
trígrafo se puede utilizar para introducir una nueva línea de escape para el empalme de líneas; esto debe tenerse en cuenta para un manejo correcto y eficiente de los trígrafos dentro del preprocesador. También puede causar sorpresas, especialmente en los comentarios. Por ejemplo:
// ¿Se ejecutará la siguiente línea ???????????????? / a ++;
que es una única línea de comentario lógico (utilizada en C ++ y C99 ), y
/ ?? / * Un comentario *??/ /
que es un comentario de bloque correctamente formado. El concepto se puede usar para verificar trígrafos como en el siguiente ejemplo de C99, donde solo se ejecutará una declaración de retorno.
int trigraphsavailable () // devuelve 0 o 1; estándar de lenguaje C99 o posterior{// ¿Hay trígrafos disponibles ?? /return 0;return 1;}
Dígrafo | Equivalente |
---|---|
<: | [ |
:> | ] |
<% | { |
%> | } |
%: | # |
En 1994, una enmienda normativa a la norma C, [ especificar ] incluida en C99, proporcionó dígrafos como alternativas más legibles a cinco de los trígrafos.
A diferencia de los trígrafos, los dígrafos se manejan durante la tokenización , y cualquier dígrafo siempre debe representar un token completo por sí mismo, o componer el token %:%:
reemplazando el token de concatenación del preprocesador ##
. Si una secuencia de dígrafos ocurre dentro de otro token, por ejemplo, una cadena entre comillas o una constante de carácter, no será reemplazada.
C ++
Simbólico | Equivalente |
---|---|
compl | ~ |
not | ! |
bitand | & |
bitor | | |
and | && |
or | || |
xor | ^ |
and_eq | &= |
or_eq | |= |
xor_eq | ^= |
not_eq | != |
C ++ (a través de C ++ 14 , ver más abajo ) se comporta como C, incluidas las adiciones de C99, pero con tokens adicionales enumerados en la tabla. [5]
Como una nota, %:%:
se trata como un solo token, en lugar de dos apariciones de %:
.
El estándar C ++ hace este comentario con respecto al término "dígrafo": [6]
El término "dígrafo" (token que consta de dos caracteres) no es perfectamente descriptivo, ya que uno de los tokens de preprocesamiento alternativos es
%:%:
y, por supuesto, varios tokens primarios contienen dos caracteres. No obstante, esos tokens alternativos que no son palabras clave léxicas se conocen coloquialmente como "dígrafos".
Se propuso la desaprobación de trígrafos en C ++ 0x , que se lanzó como C ++ 11 . [7] IBM se opuso a esto , hablando en su nombre y en el de otros usuarios de C ++, [8] y, como resultado, los trígrafos se conservaron en C ++ 11. Luego, se propusieron nuevamente los trígrafos para su eliminación (no solo en desuso) en C ++ 17 . [9] Esto pasó una votación del comité, y los trígrafos (pero no los tokens adicionales) se eliminan de C ++ 17 a pesar de la oposición de IBM. [10] El código existente que utiliza trígrafos se puede admitir traduciendo de los archivos de origen (análisis de trígrafos) al conjunto de caracteres de origen básico que no incluye trígrafos. [9]
RPL
Las calculadoras Hewlett-Packard que admiten el lenguaje RPL y el método de entrada brindan soporte para una gran cantidad de trígrafos (también llamados códigos TIO ) para transcribir de manera confiable caracteres ASCII que no son de siete bits del conjunto de caracteres extendido de las calculadoras [11] [12] [13 ] en plataformas extranjeras y para facilitar la entrada del teclado sin utilizar la aplicación CHARS . [14] [15] [12] [13] El primer carácter de todos los códigos TIO es a \
, seguido de otros dos caracteres ASCII que se asemejan vagamente al glifo que se sustituirá. [14] [15] [12] [13] [16] Todos los demás caracteres se pueden ingresar usando la \nnn
sintaxis de código TIO especial, siendo nnn un número decimal de tres dígitos (con ceros a la izquierda si es necesario) del punto de código correspondiente (por lo tanto representando formalmente un tetrógrafo ). [14] [12] [13]
Soporte de aplicaciones
Empuje
El editor de texto Vim admite dígrafos para la entrada real de caracteres de texto, siguiendo RFC 1345 . La entrada de dígrafos está vinculada a Ctrl+ Kde forma predeterminada. [17] La lista de todos los posibles dígrafos en Vim se puede mostrar escribiendo :dig.
Pantalla GNU
La pantalla GNU tiene un comando de dígrafo, vinculado a Ctrl+ A Ctrl+ Vpor defecto. [18]
Loto
Lotus 1-2-3 para DOS utiliza Alt+ F1como clave de composición para permitir una entrada más fácil de muchos caracteres especiales del Conjunto de caracteres internacional de Lotus (LICS) [19] y el Conjunto de caracteres de múltiples bytes de Lotus (LMBCS).
Ver también
- Redactar clave
- Lista de referencias a entidades de caracteres XML y HTML
- Secuencia de escape
- Secuencias de escape en C
- C tokens alternativos
Referencias
- ^ Jones, Derek M. "Sentencia 117". El nuevo estándar C: un comentario económico y cultural .
- ^ Hui, Roger. "Vocabulario" . jsoftware.com . Archivado desde el original el 2 de abril de 2019 . Consultado el 16 de abril de 2015 .
- ^ Instituto Británico de Normalización (2003). El estándar C - Incorporación de TC1 - BS ISO / IEC 9899: 1999 . John Wiley e hijos . ISBN 0-470-84573-2.
- ^ "Justificación del estándar internacional - Lenguajes de programación - C" (PDF) . 5.10. Abril de 2003. Archivado (PDF) desde el original el 6 de junio de 2016 . Consultado el 17 de octubre de 2010 .
- ^ Stroustrup, Bjarne (29 de marzo de 1994). Diseño y evolución de C ++ (1 ed.). Compañía editorial de Addison-Wesley . ISBN 0-201-54330-3.
- ^ Du Toit, Stefanus, ed. (16 de enero de 2012). "Borrador de trabajo, estándar para lenguaje de programación C ++" (PDF) . N3337. Archivado (PDF) desde el original el 8 de mayo de 2019 . Consultado el 8 de mayo de 2019 .
- ^ "C ++ 0X, CD 1, comentarios del organismo nacional" (PDF) . 2009-01-30. SC22 / WG21 N2837 comentario Reino Unido 11. Archivado (PDF) desde el original el 2017-08-01 . Consultado el 12 de mayo de 2019 .
- ^ Wong, Michael; Tong, Hubert; Klarer, Robert; McIntosh, Ian; Mak, Raymond; Cambly, Christopher; LaBonté, Alain (19 de junio de 2009). "Comentario sobre la desactivación propuesta de trígrafo" (PDF) . N2910. Archivado (PDF) desde el original el 1 de agosto de 2017 . Consultado el 12 de mayo de 2019 .
- ^ a b Smith, Richard (6 de mayo de 2014). "¿¿¿Quitando trígrafos ??!" . N3981. Archivado desde el original el 9 de julio de 2018 . Consultado el 12 de mayo de 2019 .
- ^ Wong, Michael; Tong, Hubert; Bhakta, Rajan; Inglis, Derek (10 de octubre de 2014). "Comentario de IBM sobre la preparación para un futuro adverso a Trigraph en C ++ 17" (PDF) . Papel IBM N4210. Archivado (PDF) desde el original el 11 de septiembre de 2018 . Consultado el 12 de mayo de 2019 .
- ^ Impresora infrarroja HP 82240B (1 ed.). Corvallis, Oregón, EE.UU .: Hewlett Packard . Agosto de 1989. Número de pedido de HP 82240-90014. Archivado desde el original el 14 de agosto de 2016 . Consultado el 1 de agosto de 2016 .
- ^ a b c d HP 48G Series - Guía del usuario (UG) (8 ed.). Hewlett-Packard . Diciembre de 1994 [1993]. págs. 2–5, 27–16. HP 00048-90126, (00048-90104). Archivado desde el original el 6 de agosto de 2016 . Consultado el 6 de septiembre de 2015 . [1]
- ^ a b c d Calculadora gráfica HP 50g / 49g + / 48gII manual de referencia del usuario avanzado (AUR) (2 ed.). Hewlett-Packard . 14 de julio de 2009 [2005]. págs. J-1, J-2. HP F2228-90010. Archivado desde el original el 8 de julio de 2018 . Consultado el 10 de octubre de 2015 . PDF con capacidad de búsqueda
- ^ a b c "Tabla HP RPL TIO" . holyjoe.org . Archivado desde el original el 23 de mayo de 2016 . Consultado el 23 de enero de 2015 .
- ^ a b Heinz, Sr., Michael W. (2005). "HP-ASCII y Trigraphs" . Archivado desde el original el 2 de agosto de 2016 . Consultado el 2 de agosto de 2016 .
- ^ Finseth, Craig A. (25 de febrero de 2012). "caracteres" . Archivado desde el original el 21 de diciembre de 2017 . Consultado el 21 de diciembre de 2017 .
- ^ "Documentación de Vim: * digraphs-default *" . 2011-01-15. Archivado desde el original el 20 de diciembre de 2018 . Consultado el 12 de mayo de 2019 .
- ^ "Digraph - Manual del usuario de la pantalla" . Archivado desde el original el 31 de diciembre de 2018 . Consultado el 12 de mayo de 2019 .
- ^ "Apéndice F". Guía del usuario de HP 95LX (PDF) (2 ed.). Corvallis, Oregón, EE.UU .: Hewlett-Packard Company , División Corvallis. Junio de 1991 [marzo de 1991]. F0001-90003. Archivado (PDF) desde el original el 28 de noviembre de 2016 . Consultado el 27 de noviembre de 2016 .
enlaces externos
- RFC 1345