Dígrafs i trigrames

De la Viquipèdia, l'enciclopèdia lliure.
Saltar a la navegació Saltar a la cerca

A la programació , els dígrafs i els trigrames són seqüències de dos i tres caràcters , respectivament, que apareixen al codi font i, d’acord amb les especificacions d’un llenguatge de programació , s’han de tractar com si fossin caràcters simples.

Hi ha diverses raons per fer servir dígrafs i trigrames: els teclats poden no tenir tecles per cobrir tot el conjunt de caràcters de l’idioma, pot ser difícil introduir caràcters especials, els editors de text poden reservar alguns caràcters per a usos especials, etc. Els trigrames també es poden utilitzar per a algunes pàgines de codi EBCDIC a les quals falten caràcters com ara { i } .

Història

El conjunt de caràcters bàsic del llenguatge de programació C és un subconjunt del conjunt de caràcters ASCII que inclou nou caràcters que es troben fora del conjunt de caràcters invariants ISO 646. Això pot ser un problema per escriure codi font quan es codifica (i possiblement el teclat ) utilitzat no admet cap d'aquests nou caràcters. El comitè ANSI C va inventar els trigrames com una manera d’introduir codi font mitjançant teclats que no admeten cap versió del conjunt de caràcters ISO 646.

Implementacions

Els trigrames no es solen trobar fora de les suites de proves del compilador . [1] Alguns compiladors admeten una opció per desactivar el reconeixement de trigrames o desactivar-los per defecte i requereixen una opció per activar-los. Alguns poden emetre advertències quan es troben amb trigrames als fitxers font. Borland ha proporcionat un programa independent, el preprocessador del TRIGRAPH.EXE ( TRIGRAPH.EXE ), que només s’utilitzarà quan es desitgi el processament del trigrama (la lògica era maximitzar la velocitat de compilació).

Suport de llenguatges de programació

Diferents sistemes defineixen diferents conjunts de dígrafs i trigrames, tal com es descriu a continuació.

ALGOL

Les primeres versions d' ALGOL eren anteriors als conjunts de caràcters ASCII i EBCDIC estandarditzats i normalment s'implementaven mitjançant un codi de caràcters de sis bits específic del fabricant. Una sèrie d'operacions ALGOL no tenien punts de codi en el conjunt de caràcters disponibles o no eren compatibles amb els dispositius, cosa que va provocar diverses substitucions, incloses := per (assignació) i >= per (superior o igual).

Pascal

El llenguatge de programació Pascal admet dígrafs (. , .) , (* I *) per a [ , ] , { i } . A diferència de tots els altres casos esmentats aquí, (* i *) eren i encara són àmpliament utilitzats. Tanmateix, molts compiladors els tracten com un tipus de bloc de comentaris diferent que com a dígrafs reals, és a dir, un comentari que comença per (* no es pot tancar amb } i viceversa.

J

El llenguatge de programació J és descendent de l' APL, però utilitza el conjunt de caràcters ASCII en lloc dels símbols APL . Com que el joc de caràcters imprimibles ASCII és més petit que el conjunt de símbols APL especialitzat, el . (punt) i : (dos punts) s'utilitzen per rebutjar símbols ASCII, interpretant eficaçment els unigrames, digrames o rarament trigrames com a "símbols" independents. [2]

A diferència de l'ús de dígrafs i trigrames en C i C ++, no hi ha caràcters simples equivalents a aquests a J.

C.

El preprocessador C substitueix totes les aparicions de les nou seqüències de trigrames següents amb els seus equivalents de caràcter únic abans de qualsevol altre processament. [3] [4]

Trigrama Equivalent
??= #
??/ \
??' ^
??( [
??) ]
??! |
??< {
??> }
??- ~

És possible que un programador vulgui ajuntar dos signes d’interrogació però que el compilador no els tracti com si introduïssin una seqüència de trigrames. La gramàtica C permet dues fitxes ? consecutives, de manera que els únics llocs d’un fitxer C on es poden utilitzar dos signes d’interrogació en una línia són constants de diversos caràcters, cadenes literals i comentaris. Això és especialment un problema per al clàssic Mac OS , on la constant '????' es pot utilitzar com a tipus de fitxer o creador. Per col·locar amb seguretat dos signes d'interrogació consecutius dins d'un literal de cadena, el programador pot utilitzar la concatenació de cadenes "...?""?..." o seqüència d'escapament ". . . ? \? . . ." .

??? no és en si mateixa una seqüència de trigrames, però quan va seguit d'un personatge com - s'interpretarà com ? + ??- , com a l'exemple següent, que té 16 ? s abans / .

El trigrama ??/ es pot utilitzar per introduir una nova línia amb un caràcter d'escapament d'empalmes de línia; cal tenir-ho en compte per a una gestió correcta i eficient dels trigrames dins del preprocessador. També pot causar sorpreses, sobretot en els comentaris. Per exemple:

 // S’executarà la següent línia ???????????????? /
 a ++;

que és una sola línia de comentari lògic (utilitzat a C ++ i C99) i

 / ?? /
 * Un comentari * ?? /
 /

que és un comentari de bloc sintàcticament correcte. El concepte es pot utilitzar per comprovar si hi ha trigrames com en l'exemple C99 següent, on només s'executarà una sentència return.

int available_trigrams () // Retorna 0 o 1; C99 estàndard o posterior { // hi ha trigrames ?? / retorn 0; retorn 1; }

Diàgrafs alternatius introduïts el 1994
Digram Equivalent
<: [
:> ]
<% {
%> }
%: #

El 1994, un canvi normatiu a l'estàndard C [ sense font ] , inclòs a l'estàndard C99, va proporcionar els dígrafs com una alternativa més llegible a cinc dels trigrames.

A diferència dels trigrames, els dígrafs es gestionen durant la tokenització i tots els dígrafs sempre han de representar un testimoni complet per si mateix o compondre el testimoni %:%: substituint el testimoni de concatenació del preprocessador ## . Si es produeix una seqüència de dígrafs dins d'un altre testimoni, com ara una cadena entre cometes o una constant de caràcter, no es substituirà.

C ++

Icona de la lupa mgx2.svg El mateix tema en detall: iso646.h .

El llenguatge C ++ (fins a la versió C ++ 14 , vegeu més avall ) es comporta com C, incloses les addicions de l'estàndard C99, però amb les fitxes addicionals presents a la taula següent. [5]

Testimoni Equivalent
compl ~
not !
bitand &
bitor |
and &&
or ||
xor ^
and_eq &=
or_eq |=
xor_eq ^=
not_eq !=

Tingueu en compte que %:%: es tracta com un únic testimoni, en lloc de dues ocurrències de %:

L'estàndard C ++ fa aquest comentari sobre el terme "dígraf": [6]

( EN )

«El terme" dígraf "(testimoni format per dos caràcters) no és perfectament descriptiu, ja que una de les fitxes alternatives de preprocessament és %:%: i, per descomptat, diverses fitxes primàries contenen dos caràcters. Tot i això, les fitxes alternatives que no són paraules clau lèxiques es coneixen col·loquialment com a "dígrafs".

( IT )

«El terme" dígraf "(testimoni format per dos caràcters) no descriu perfectament aquestes fitxes, ja que una de les fitxes alternatives de preprocessament és %:%: i, evidentment, diverses fitxes primàries contenen dos caràcters. Tanmateix, aquells testimonis alternatius que no són paraules clau lèxiques es coneixen col·loquialment com a "dígrafs".

Es van proposar trigrames per deprecació en C ++ 0x , que es va llançar com a C ++ 11 [7] . La companyia IBM es va oposar a això, parlant en nom d'ella mateixa i d'altres usuaris de C ++ [8] , i en conseqüència els trigrames es van mantenir en C ++ 11. Tot i així, es van proposar de nou els trigrames per eliminar-los (no només per deprecació) a C ++ 17 [9] . La votació del comitè va passar aquesta vegada i els trigrames (però no els tokens addicionals) van ser eliminats de C ++ 17 malgrat l'oposició d'IBM. [10] El codi existent que utilitza trigrames es pot suportar traduint els fitxers font (analitzant els trigrames) donant lloc a fitxers que només contenen caràcters bàsics i ja no trigrames. [9]

RPL

Les calculadores Hewlett-Packard que admeten el llenguatge RPL i el mètode d’entrada proporcionen suport per a un gran nombre de trigrames (també anomenats codis TIO ) per transcriure de manera fiable caràcters ASCII no de set bits del conjunt de caràcters ampliat [11] [12] [13] en plataformes estrangeres i per facilitar l'entrada de teclat sense utilitzar l'aplicació CHARS . [14] [15] [12] [13]

El primer caràcter de tots els codis TIO és \ , seguit d'altres dos caràcters ASCII que s'assemblen vagament al glif a substituir. [14] [15] [12] [13] [16] Tots els altres caràcters es poden introduir mitjançant la sintaxi TIO especial \nnn amb nnn un número decimal de tres dígits (amb zeros inicials si cal) del punt de codi corresponent (per tant representa formalment un tetragrama ). [14] [12] [13]

Suport a l'aplicació

Vim

L' editor de text Vim admet dígrafs per a l'entrada real de caràcters de text, després de la RFC 1345 [17] . L’entrada Digram s’associa amb Ctrl + K per defecte. [18] La llista de tots els dígrafs possibles a Vim es pot veure escrivint : dig .

Pantalla GNU

La pantalla GNU té una ordre amb un dígraf, associada per defecte a Ctrl + A Ctrl + V. [19]

Lotus

El Lotus 1-2-3 per a DOS utilitza Alt + F1 com a tecla de marcatge per permetre l'entrada més fàcil de molts caràcters especials Lotus International Character Set (LICS) [20] i Lotus Multi-Byte Character Set (LMBCS).

Nota

  1. ^ (EN) Derek M. Jones, frase 117, a The New C Standard: An Economic and Cultural Commentary.
  2. ^ (EN) Roger Hui, Vocabulary , a jsoftware.com. Consultat el 16 d'abril de 2015 (arxivat de l' original el 2 d'abril de 2019) .
  3. ^ (EN)British Standards Institute , The Standard C - Incorporating TC1 - BS ISO / IEC 9899: 1999 [Wiley], 2003, ISBN 0-470-84573-2 .
  4. ^ (EN) Rationale for International Standard - Programming Languages ​​- C (PDF) a open-std.org, 5.10, abril de 2003. Consultat el 17 d'octubre de 2010 ( arxivat el 6 de juny de 2016).
  5. ^ (EN) Bjarne Stroustrup , Disseny i evolució de C ++, 1a edició, Addison-Wesley Publishing Company , 29 de març de 1994 ISBN 0-201-54330-3 .
  6. ^ (EN) Stefanus Du Toit (ed), Working Draft, Standard for C ++ Programming Language (PDF) a open-std.org, 16 de gener de 2012, N3337. Consultat el 8 de maig de 2019 ( arxivat el 8 de maig de 2019) .
  7. ^ (EN) C ++ 0X, CD 1, National Body Comments (PDF) a open-std.org, 30 de gener de 2009, SC22 / WG21 N2837 comentari UK 11. Consultat el 12 de maig de 2019 ( arxivat l'1 d'agost de 2017) .
  8. ^ (EN) Michael Wong, Hubert Tong, Robert Klarer, Ian McIntosh, Raymond Mak, Christopher Cambly i Alain Labonté, Comentari sobre la proposta de deprecació del trigrama (PDF) a open-std.org, 19 de juny de 2009, N2910. Consultat el 12 de maig de 2019 ( arxivat l'1 d'agost de 2017) .
  9. ^ A b (EN) Richard Smith, Eliminació de trígrafs ??! , a open-std.org , 6 de maig de 2014, N3981. Consultat el 12 de maig de 2019 ( arxivat el 9 de juliol de 2018) .
  10. ^ (EN) Michael Wong, Hubert Tong, Rajan Bhakta i Derek Inglis, IBM comenten sobre la preparació d'un futur advers Trigraph-in C ++ 17 (PDF) a open-std.org, 10 d'octubre de 2014, document IBM N4210. Consultat el 12 de maig de 2019 ( arxivat l'11 de setembre de 2018) .
  11. ^ (EN) Impressora infraroja HP ​​82240B , 1a edició, Corvallis, OR, EUA, Hewlett Packard , agost de 1989, número de reserva HP 82240-90014. Consultat l'1 d'agost de 2016 (arxivat de l' original el 14 d'agost de 2016) .
  12. ^ a b c d ( EN ) HP 48G Series - User's Guide (UG) , 8th ed., Hewlett Packard , desembre 1994 [1993] , pp. 2-5, 27-16, HP 00048-90126, (00048-90104). Consultat el 6 de setembre de 2015 ( arxivat el 6 d'agost de 2016) . [1]
  13. ^ a b c d ( EN ) HP 50g / 49g + / 48gII graphing calculator advanced user's reference manual (AUR) , 2a ed., Hewlett Packard , 14 de juliol de 2009 [2005] , pp. J-1, J-2, HP F2228-90010. Consultat el 10 d'octubre de 2015 (arxivat de l' original el 8 de juliol de 2018) . PDF consultable
  14. ^ A b c (EN) HP RPL TIO Table a holyjoe.org, 28 d'octubre de 2013. Obtingut el 23 de gener de 2015 ( arxivat el 23 de maig de 2016).
  15. ^ A b (EN) Michael W. Heinz, Sr., HP-ASCII i trigraphs a hpconnect.sourceforge.net, 2005 Heinz_2005. Consultat el 2 d'agost de 2016 ( arxivat el 2 d'agost de 2016) .
  16. ^ (EN) Craig A. Finseth, chars , of finseth.com, 25 de febrer de 2012. Obtingut el 21 de desembre de 2017 ( presentat el 21 de desembre de 2017).
  17. ^ (EN) RFC 1345 a la Internet Engineering Task Force .
  18. ^ (EN) Documentació Vim: * digraphs-default * , a vimdoc.sourceforge.net, 15 de gener de 2011. Obtingut el 12 de maig de 2019 ( presentat el 20 de desembre de 2018).
  19. ^ ( EN ) http://www.retroisle.com/others/hp95lx/OriginalDocs/95LX_UsersGuide_F1000-90001_826pages_Jun91.pdf , Apèndix F , a HP 95LX User's Guide , 2a ed., Corvallis, OR, EUA, Hewlett-Packard Company , Divisió Corvallis, juny de 1991 [març de 1991] , HP F0001-90003. el 27 de novembre de 2016 ( arxivat el 28 de novembre de 2016), l’ .
  20. ^ ( EN ) [= https://www.gnu.org/software/screen/manual/html_node/Digraph.html Digraph - Screen User's Manual ], a gnu.org . Consultat el 12 de maig de 2019 ( arxivat el 31 de desembre de 2018) .

Articles relacionats

Enllaços externs