Dígrafos y trígrafos
En informática, dígrafos y trígrafos son la secuencia de 2 y 3 caracteres respectivamente, los cuales aparecen en el código fuente de un programa en el cual el lenguaje de programación trata a dicha secuencia de caracteres (dígrafo o trígrafo) como si fuera sólo uno.
Existen varias razones para el uso de trígafos y dígrafos: algunos teclados pueden no contener todo el juego de caracteres del lenguaje, el ingreso de caracteres especiales puede que sea dificultoso, algunos editores de texto puede que reserven algunos caracteres para un uso especial, algunas páginas de código EBCDIC no soportan caracteres como {
y }
, etc.
Historia
[editar]El juego de caracteres básico del lenguaje de programación C incluye 9 caracteres que no están dentro de la norma ISO 646. Esto puede ser un problema al escribir código cuando el teclado que se está usando no soporta alguno de esos 9 caracteres extras. Por lo que el comité del ANSI C inventó los trígrafos para poder escribir código usando teclados que soportasen cualquier versión del estándar ISO 646.
Implementaciones
[editar]Los trígrafos no son comúnmente encontrados excepto en los test de compiladores. Algunos compiladores tienen una opción para desactivar el reconocimiento de los trígrafos, o bien, tienen deshabilitado dicho reconocimiento por defecto pero tienen una opción para activarlo. También algunos compiladores lanzan una advertencia cuando encuentran trígrafos en el código fuente. Borland disponía de un programa separado, el preprocesador de trígrafos, que era usado sólo cuando se deseaba procesar los trígrafos, el motivo de esto fue para maximizar la velocidad al momento de compilar.
El soporte en los diferentes lenguajes
[editar]Pascal
[editar]El lenguaje de programación Pascal soporta los dígrafos:
Dígrafo | Equivalencia |
---|---|
(. |
[
|
.) |
]
|
(* |
{
|
*) |
}
|
Vim
[editar]El editor de texto Vim tiene soporte para dígrafos, siguiendo el RFC 1345.
GNU Screen
[editar]GNU Screen contiene un comando de dígrafo, asignado a ^A ^V por defecto.
J
[editar]El lenguaje de programación J usa puntos y comas para extender el significado de los caracteres básicos disponibles. Sin embargo, estos no son dígrafos ya que el resultado de dichas secuencias no tienen un equivalente de un solo carácter.
C
[editar]El en lenguaje de programación C, el preprocesador de C reemplaza todas las ocurrencias de los siguientes 9 trígrafos por su equivalente de un carácter antes de hacer cualquier otro proceso.
Trígrafo | Equivalencia |
---|---|
??= |
#
|
??/ |
\
|
??' |
^
|
??( |
[
|
??) |
]
|
??! |
|
|
??< |
{
|
??> |
}
|
??- |
~
|
???
no es un trígrafo por sí solo.
Un programador puede querer introducir 2 signos de pregunta juntos, pero no querer que el compilador los trate como un trígrafo. La gramática de C no permite 2 caracteres ?
consecutivos, por lo que los únicos lugares donde se pueden colocar son en los comentarios y en las cadenas de caracteres. Para colocar 2 signos de pregunta consecutivos en una cadena de caracteres de forma segura, el programador puede concatenar cadenas, o colocar una secuencia de escape:
"...?""?..."
"...?\?..."
El trígrafo ??/
puede ser utilizado para introducir un salto de línea cuando se divide una línea en varias. Esto debe ser tenido en cuenta para un correcto y efectivo manejo de los trígrafos con el procesador, ya que por ejemplo puede causar problemas con los comentarios, por ejemplo:
// Funciona correctamente ???????????????/ a++;
lo que será traducido como una sola línea comentada (en C++ y C99), por lo que a++ no se ejecutará.
En 1994, un agregado al estándar de C, incluida en C99, consideró los dígrafos como una alternativa más comprensible para 5 de los 9 trígrafos, estos son:
Dígrafo | Equivalencia |
---|---|
<: |
[
|
:> |
]
|
<% |
{
|
%> |
}
|
%: |
#
|
A diferencia de los trígrafos, los dígrafos son procesados durante el tokenizado, y deben representar un token entero por sí mismos. Si un dígrafo se encuentra dentro de otro token, como por ejemplo una cadena de texto o un carácter, no será reemplazado.