Digrafy a trigrafy - Digraphs and trigraphs

v programování, digrafy a trigrafy jsou sekvence dvou a tří postavy, které se objevují v zdrojový kód a podle a programovací jazyk S jeho specifikací by se mělo zacházet, jako by šlo o jednotlivé znaky.

Existují různé důvody pro použití digrafů a trigrafů: klávesnice nemusí mít klávesy, které by pokryly celý sada znaků jazyka může být obtížné zadávat speciální znaky, textové editory si může vyhradit některé znaky pro speciální použití atd. U některých mohou být použity také trigrafy EBCDIC kódové stránky které postrádají znaky jako { a }.

Dějiny

Základní znaková sada Programovací jazyk C. je podmnožinou souboru ASCII znaková sada, která obsahuje devět znaků, které leží mimo ISO 646 invariantní znaková sada. To může při psaní představovat problém zdrojový kód když kódování (a možná klávesnice ), který je používán, nepodporuje žádný z těchto devíti znaků. The ANSI C. Výbor vynalezl trigrafy jako způsob zadávání zdrojového kódu pomocí klávesnic, které podporují jakoukoli verzi znakové sady ISO 646.

Implementace

Trigrafy se venku běžně nesetkávají překladač testovací sady.[1] Někteří kompilátoři podporují možnost vypnout rozpoznávání trigrafů nebo ve výchozím nastavení deaktivovat trigrafy a vyžadují možnost jejich zapnutí. Někteří mohou vydat varování, když narazí na trigrafy ve zdrojových souborech. Borland dodal samostatný program, preprocesor trigraph (TRIGRAPH.EXE), který se použije pouze v případě, že je požadováno zpracování trigrafu (důvodem byla maximální rychlost kompilace).

Jazyková podpora

Různé systémy definují různé sady digrafů a trigrafů, jak je popsáno níže.

ALGOL

Rané verze ALGOL předcházely standardizované znakové sady ASCII a EBCDIC a byly obvykle implementovány pomocí specifického výrobce šestibitový znakový kód. Řada ALGOL operací buď chyběla kódové body v dostupné znakové sadě nebo nebyly periferními zařízeními podporovány, což vedlo k řadě substitucí včetně := pro (zadání) a >= pro (větší nebo rovno).

Pascal

The Pascal programovací jazyk podporuje digrafy (., .), (* a *) pro [, ], { a } resp. Na rozdíl od všech ostatních zde zmíněných případů (* a *) byly a stále jsou široce používány. Mnoho překladačů s nimi však zachází jako s jiným typem bloku komentářů, spíše než se skutečnými digrafy, tj. S komentářem začínajícím (* nelze uzavřít pomocí } a naopak.

J

The J programovací jazyk je potomkem APL ale používá spíše znakovou sadu ASCII než Symboly APL. Protože rozsah tisku ASCII je menší než specializovaná sada symbolů APL, . (tečka) a : Znaky (dvojtečka) se používají k skloňování symbolů ASCII, což účinně interpretuje unigrafy, digrafy nebo zřídka trigrafy jako samostatné „symboly“.[2]

Na rozdíl od použití digrafů a trigrafů v C a C ++, v J. neexistují žádné jednoznakové ekvivalenty.

C

The C preprocesor nahradí všechny výskyty následujících devíti trigrafových sekvencí jejich jednoznakovými ekvivalenty před jakýmkoli jiným zpracováním.[3][4]

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

Programátor možná bude chtít umístit dva otazníky dohromady, ale kompilátor s nimi nebude zacházet jako s představením trigrafu. Gramatika C neumožňuje dva po sobě jdoucí ? tokeny, takže jediná místa v souboru C, kde lze použít dva otazníky v řadě, jsou ve víceznakových konstantách, řetězcové literály a komentáře. To je obzvláště problém pro klasický Mac OS kde konstanta '????' může být použit jako typ souboru nebo tvůrce. Aby programátor mohl bezpečně umístit dva po sobě jdoucí otazníky do řetězcového literálu, může použít zřetězení řetězců "...?""?..." nebo úniková sekvence "...?\?...".

??? není sama o sobě trigrafovou sekvencí, ale když za ní následuje znak jako např - bude interpretováno jako ? + ??-, jako v příkladu níže, který má 16 ?s před /.

The ??/ trigraph lze použít k zavedení uniklého nového řádku pro spojování řádků; toto je třeba vzít v úvahu pro správné a efektivní zacházení s trigrafy v preprocesoru. Může to také způsobit překvapení, zejména v komentářích. Například:

 // Bude proveden další řádek ???????????????? / a ++;

což je jeden řádek logického komentáře (používá se v C ++ a C99 ), a

 / ?? / * Komentář * ?? / /

což je správně vytvořený blokový komentář. Koncept lze použít ke kontrole trigrafů jako v následujícím příkladu C99, kde bude proveden pouze jeden návratový příkaz.

int trigraphsavailable () // vrací 0 nebo 1; jazykový standard C99 nebo novější {// jsou k dispozici trigrafy ?? / návrat 0; návrat 1;}
DigrafEkvivalent
<:[
:>]
<%{
%>}
%:#
%:%:##

V roce 1994 byla přijata normativní změna normy C,[upřesnit ] zahrnuto v C99, dodané digrafy jako čitelnější alternativy k pěti trigrafům. Jsou uvedeny v tabulce vpravo.

Na rozdíl od trigrafů jsou digrafy zpracovávány během tokenizace a jakýkoli digraf musí vždy představovat celý token sám o sobě nebo token skládat %:%: výměna tokenu zřetězení preprocesoru ##. Pokud se sekvence digrafu objeví uvnitř jiného tokenu, například citovaného řetězce nebo znakové konstanty, nebude nahrazena.

C ++

ŽetonEkvivalent
kompl~
ne!
bitand&
Bitor|
a&&
nebo||
xor^
a_ekv&=
or_eq|=
xor_eq^=
not_eq!=

C ++ (přes C ++ 14 viz níže ) se chová jako C, včetně doplňků C99, ale s dalšími žetony uvedenými v tabulce.[5]

Jako poznámku, %:%: se považuje za jeden token, nikoli za dva výskyty %:.

Standard C ++ uvádí tento komentář k pojmu „digraph“:[6]

Termín „digraph“ (token skládající se ze dvou znaků) není zcela popisný, protože jeden z alternativních tokenů předzpracování je %:%: a samozřejmě několik primárních tokenů obsahuje dva znaky. Alternativní tokeny, které nejsou lexikálními klíčovými slovy, jsou však hovorově známé jako „digrafy“.

Trigrafy byly navrženy k ukončení v roce 2006 C ++ 0x, který byl vydán jako C ++ 11.[7] To bylo proti IBM, hovořící jménem sebe a ostatních uživatelů C ++,[8] a v důsledku toho byly trigrafy zachovány v C ++ 11. Trigrafy pak byly znovu navrženy k odstranění (nejen k ukončení) v C ++ 17.[9] To prošlo hlasováním ve výboru a trigrafy (ale ne další tokeny) jsou odstraněny z C ++ 17 navzdory odporu ze strany IBM.[10] Existující kód, který používá trigrafy, lze podpořit překladem ze zdrojových souborů (syntaktická analýza trigrafů) do základní zdrojové znakové sady, která trigrafy neobsahuje.[9]

RPL

Hewlett Packard kalkulačky podporující RPL jazyk a metoda zadávání poskytují podporu velkému počtu trigrafů (nazývaných také Kódy TIO) pro spolehlivý přepis nesedbitových ASCII znaků z rozšířená znaková sada kalkulaček[11][12][13] na zahraničních platformách a usnadnit vstup z klávesnice bez použití CHARS aplikace.[14][15][12][13] První znak všech kódů TIO je a \, následovaný dvěma dalšími znaky ASCII neurčitě připomínajícími glyf, který má být nahrazen.[14][15][12][13][16] Všechny ostatní znaky lze zadat pomocí speciálu nnn Syntaxe kódu TIO, přičemž nnn je třímístný desetinné číslo (s úvodní nuly v případě potřeby) odpovídajících kódový bod (čímž formálně zastupuje a tetragraf ).[14][12][13]

Podpora aplikace

Vim

The Vim textový editor podporuje digrafy pro skutečné zadávání textových znaků RFC  1345. Zadání digrafů je vázaný na Ctrl+K. ve výchozím stavu.[17] Seznam všech možných digrafů v Vim lze zobrazit zadáním :kopat.

Obrazovka GNU

Obrazovka GNU má příkaz digraph, vázán na Ctrl+A Ctrl+PROTI ve výchozím stavu.[18]

Lotus

Lotus 1-2-3 pro DOS používá Alt+F1 tak jako skládat klíč umožnit snadnější zadávání mnoha speciálních znaků souboru Mezinárodní znaková sada Lotus (LICS)[19] a Vícebajtová znaková sada Lotus (LMBCS).

Viz také

Reference

  1. ^ Jones, Derek M. „Věta 117“. Nový standard C: Ekonomický a kulturní komentář.
  2. ^ Hui, Rogere. "Slovní zásoba". jsoftware.com. Archivovány od originál dne 2019-04-02. Citováno 2015-04-16.
  3. ^ British Standards Institute (2003). Standard C - zahrnující TC1 - BS ISO / IEC 9899: 1999. John Wiley & Sons. ISBN  0-470-84573-2.
  4. ^ „Odůvodnění mezinárodního standardu - programovací jazyky - C“ (PDF). 5.10. Dubna 2003. Archivováno (PDF) od originálu 06.06.2016. Citováno 2010-10-17.
  5. ^ Stroustrup, Bjarne (1994-03-29). Návrh a vývoj C ++ (1. vyd.). Nakladatelská společnost Addison-Wesley. ISBN  0-201-54330-3.
  6. ^ Du Toit, Stefanus, ed. (2012-01-16). „Pracovní koncept, standard pro programovací jazyk C ++“ (PDF). N3337. Archivováno (PDF) z původního dne 2019-05-08. Citováno 2019-05-08.
  7. ^ „C ++ 0X, CD 1, poznámky národního orgánu“ (PDF). 2009-01-30. Komentář SC22 / WG21 N2837 UK 11. Archivováno (PDF) od originálu na 2017-08-01. Citováno 2019-05-12.
  8. ^ Wong, Michael; Tong, Hubert; Klarer, Robert; McIntosh, Ian; Mak, Raymond; Camble, Christopher; LaBonté, Alain (2009-06-19). „Komentář k zamítnutí navrhovaného trigrafu“ (PDF). N2910. Archivováno (PDF) od originálu na 2017-08-01. Citováno 2019-05-12.
  9. ^ A b Smith, Richard (06.05.2014). „Odstranění trigrafů ??!“. N3981. Archivováno z původního dne 2018-07-09. Citováno 2019-05-12.
  10. ^ Wong, Michael; Tong, Hubert; Bhakta, Rajan; Inglis, Derek (10.10.2014). „Komentář IBM k přípravě na nepříznivou budoucnost Trigraph v C ++ 17“ (PDF). Papír IBM N4210. Archivováno (PDF) od originálu 11. 9. 2018. Citováno 2019-05-12.
  11. ^ Infračervená tiskárna HP 82240B (1. vyd.). Corvallis, OR, USA: Hewlett Packard. Srpen 1989. Objednací číslo HP 82240-90014. Archivovány od originál dne 2016-08-14. Citováno 2016-08-01.
  12. ^ A b C d Řada HP 48G - Uživatelská příručka (UG) (8 ed.). Hewlett Packard. Prosince 1994 [1993]. s. 2–5, 27–16. HP 00048-90126, (00048-90104). Archivováno od originálu 2016-08-06. Citováno 2015-09-06. [1]
  13. ^ A b C d Pokročilá uživatelská referenční příručka (AUR) grafická kalkulačka HP 50g / 49g + / 48gII (2. vyd.). Hewlett Packard. 14. 7. 2009 [2005]. str. J-1, J-2. HP F2228-90010. Archivováno z původního dne 2018-07-08. Citováno 2015-10-10. Prohledávatelné PDF
  14. ^ A b C „Tabulka HP RPL TIO“. holyjoe.org. Archivováno od originálu 2016-05-23. Citováno 2015-01-23.
  15. ^ A b Heinz, Sr., Michael W. (2005). „HP-ASCII a trigrafy“. Archivováno od originálu 2016-08-02. Citováno 2016-08-02.
  16. ^ Finseth, Craig A. (2012-02-25). "znaky". Archivováno od originálu dne 2017-12-21. Citováno 2017-12-21.
  17. ^ "Dokumentace Vim: * digraphs-default *". 2011-01-15. Archivováno od originálu na 2018-12-20. Citováno 2019-05-12.
  18. ^ "Digraph - Uživatelská příručka k obrazovce". Archivováno od originálu 31. 12. 2018. Citováno 2019-05-12.
  19. ^ „Dodatek F“. Uživatelská příručka HP 95LX (PDF) (2. vyd.). Corvallis, OR, USA: Společnost Hewlett-Packard Company Divize Corvallis. Červen 1991 [březen 1991]. F0001-90003. Archivováno (PDF) od originálu 2016-11-28. Citováno 2016-11-27.

externí odkazy