In programmazione, i digrammi e trigrammi sono sequenze di due o tre caratteri, rispettivamente, che appaiono nel codice sorgente e che, in base alle specifiche
In programmazione, i digrammi e trigrammi sono sequenze di due o tre caratteri, rispettivamente, che appaiono nel codice sorgente e che, in base alle specifiche di un linguaggio, vengono trattate come se fossero un singolo carattere.
L'uso di digrammi e trigrammi è dettato da diverse esigenze. Ad esempio, le tastiere potrebbero non avere dei tasti necessari per coprire l'intero repertorio di caratteri di una lingua, l'inserimento di caratteri speciali potrebbe risultare complicato, o gli editor di testo potrebbero riservare certi caratteri per usi specifici. I trigrammi, inoltre, trovano impiego in alcuni sistemi di codifica come EBCDIC, i quali non includono caratteri fondamentali come le parentesi graffe { e }.
Il set di caratteri di base del linguaggio di programmazione C è un sottoinsieme del set di caratteri ASCII che include nove caratteri che si trovano al di fuori del set di caratteri invarianti ISO 646. Ciò può rappresentare un problema per la scrittura del codice sorgente quando la codifica (e possibilmente la tastiera) scelta non accetta nessuno di questi nove caratteri. Il comitato ANSI C ha inventato i trigrammi come modo per inserire il codice sorgente utilizzando tastiere che non accettano alcuna versione del set di caratteri ISO 646.
I trigrammi non si incontrano comunemente al di fuori delle suite di test del compilatore.[1] Alcuni compilatori forniscono un'opzione per disattivare il riconoscimento dei trigrammi oppure li preimpostano già disabilitati e richiedono un'opzione per attivarli. Alcuni possono emettere avvisi quando incontrano trigrammi nei file sorgente. Borland ha fornito un programma separato, il preprocessore trigraph (TRIGRAPH.EXE), da utilizzare solo quando si desidera l'elaborazione dei trigrammi (l'obiettivo era la velocità di compilazione).
Sistemi diversi definiscono diversi set di digrammi e trigrammi, come descritto di seguito.
Le prime versioni di ALGOL erano antecedenti agli standard di caratteri ASCII ed EBCDIC e venivano tipicamente implementate usando un codice di caratteri a sei bit specifico del produttore. Un certo numero di operazioni ALGOL mancava di codepoint nel set di caratteri disponibile o non erano presenti nelle periferiche, portando a un numero di sostituzioni tra cui := per ← (assegnazione) e >= per ≥ (maggiore o uguale).
Il linguaggio di programmazione Pascal accetta i digrammi (., .), (* e *) per [, ], { e }. A differenza di tutti gli altri casi qui menzionati, (* e *) erano e sono ancora ampiamente usati. Tuttavia, molti compilatori li trattano come un diverso tipo di blocco dei commenti piuttosto che come dei veri e propri digrammi, cioè un commento che inizia con (* non può essere chiuso con } e viceversa.
Il linguaggio di programmazione J è un discendente di APL ma adopera il set di caratteri ASCII anziché i simboli APL. Poiché l'insieme di caratteri stampabili ASCII è più piccolo dell'insieme specializzato di simboli APL, i caratteri . (punto) e : (due punti) vengono utilizzati per estendere i simboli ASCII, interpretando di conseguenza unigrammi, digrammi o raramente trigrammi come "simboli" autonomi.[2]
A differenza dell'uso di digrammi e trigrammi in C e C++, non ci sono singoli caratteri equivalenti a questi in J.
Il preprocessore C sostituisce tutte le occorrenze delle seguenti nove sequenze di trigrammi con i loro equivalenti a carattere singolo prima di qualsiasi altra elaborazione.[3][4]
| Trigramma | Equivalente |
|---|---|
??= |
#
|
??/ |
\
|
??' |
^
|
??( |
[
|
??) |
]
|
??! |
|
|
??< |
{
|
??> |
}
|
??- |
~
|
Un programmatore potrebbe voler inserire due punti interrogativi consecutivi ma non farli trattare dal compilatore come se introducessero una sequenza trigramma. La grammatica C non consente due token ? consecutivi, quindi gli unici punti in un file C in cui è possibile usare due punti interrogativi in una riga sono nelle costanti a più caratteri, stringhe letterali e commenti. Questo è un problema soprattutto per il classic Mac OS, dove la costante '????' può essere utilizzata come tipo di file o creatore. Per posizionare in modo sicuro due punti interrogativi consecutivi all'interno di una stringa letterale, il programmatore può usare la concatenazione di stringhe "...?""?..." o una sequenza di escape ". . . ? \? . . .".
??? non è di per sé una sequenza trigramma, ma quando è seguita da un carattere come - sarà interpretata come ? + ??-, come nell'esempio sotto che ha 16 ? s prima di /.
Il trigramma ??/ può essere usato per introdurre una nuova riga con un carattere di escape per la continuazione di riga; questo deve essere considerato per una corretta ed efficiente gestione dei trigrammi all'interno del preprocessore. Può anche causare sorprese, in particolare nei commenti. Per esempio:
// Verrà eseguita la prossima linea????????????????/ a++;
che è una singola riga di commento logico (utilizzata in C++ e C99) e
/??/ * Un commento *??/ /
il quale è un commento di blocco sintatticamente corretto. Il concetto può essere utilizzato per verificare la presenza di trigrammi come nel seguente esempio C99, dove verrà eseguita solo un'istruzione return.
int trigrammi_disponibili() // Ritorna 0 or 1; Standard C99 o successivo { // ci sono i trigrammi??/ return 0; return 1; }
| Digramma | Equivalente |
|---|---|
<:
|
[
|
:>
|
]
|
<%
|
{
|
%>
|
}
|
%:
|
#
|
Nel 1994, una modifica normativa allo standard C, inclusa nello standard C99, ha fornito i digrammi come alternativa più leggibile a cinque dei trigrammi.[5]
A differenza dei trigrammi, i digrammi vengono gestiti durante la tokenizzazione e qualsiasi digramma deve sempre rappresentare un token completo da solo o comporre il token %:%: sostituendo il token di concatenazione del preprocessore ##. Se una sequenza di digrammi si verifica all'interno di un altro token, ad esempio una stringa tra virgolette o una costante di carattere, non verrà sostituita.
Il linguaggio C++ (fino alla versione C++14, vedi sotto) si comporta come il C, incluse le aggiunte dello standard C99, però con i token aggiuntivi presenti nella tabella seguente.[6]
| Token | Equivalente |
|---|---|
compl |
~
|
not |
!
|
bitand |
&
|
bitor |
|
|
and |
&&
|
or |
||
|
xor |
^
|
and_eq |
&=
|
or_eq |
|=
|
xor_eq |
^=
|
not_eq |
!=
|
Si può notare che %:%: viene considerato come un singolo token, anziché due occorrenze di %:
Lo standard C++ fa questo commento riguardo al termine "digramma":[7]
%:%: and of course several primary tokens contain two characters. Nonetheless, those alternative tokens that aren't lexical keywords are colloquially known as "digraphs".»%:%: e ovviamente diversi token primari contengono due caratteri. Tuttavia, quei token alternativi che non sono parole chiave lessicali sono conosciuti colloquialmente come "digrammi".»
I trigrammi sono stati proposti per la deprecazione in C++0x, che è stato rilasciato come C++11[8]. A questo l'azienda IBM si è opposta, parlando a nome di sé stessa e di altri utenti di C++[9], e di conseguenza i trigrammi sono stati mantenuti in C++11. I trigrammi però sono stati quindi proposti di nuovo per la rimozione (non solo per la deprecazione) in C++17[10]. La votazione della commissione stavolta è passata e i trigrammi (ma non i token aggiuntivi) sono stati rimossi da C++17 nonostante l'opposizione di IBM.[11] Il codice esistente che usa i trigrammi può essere riconosciuto dalle versioni più moderne traducendo il file sorgente (effettuando il parsing dei trigrammi), ottenendo un file che contenga solamente caratteri di base e non più trigrammi.[10]
Le calcolatrici Hewlett-Packard che accettano il linguaggio RPL e il metodo di immissione, riconoscono un gran numero di trigrammi (chiamati anche codici TIO) per trascrivere in modo affidabile i caratteri ASCII non a sette bit del set di caratteri estesi[12][13][14] su piattaforme straniere e per facilitare l'immissione da tastiera senza usare l'applicazione CHARS.[13][14][15][16]
Il primo carattere di tutti i codici TIO è \, seguito da altri due caratteri ASCII che somigliano vagamente al glifo da sostituire.[13][14][15][16][17] Tutti gli altri caratteri possono essere inseriti utilizzando la speciale sintassi TIO\nnncon nnn un numero decimale a tre cifre (con zeri iniziali se necessario) del punto di codice corrispondente (quindi rappresenta formalmente un tetragrammo).[13][14][15]
L'editor di testo Vim accetta i digrammi per l'immissione effettiva di caratteri di testo, a seguito della RFC 1345.[18] L'immissione dei digrammi è associata a Ctrl+K per impostazione predefinita.[19] L'elenco di tutti i possibili digrammi in Vim può essere visualizzato digitando :dig.
GNU Screen ha un comando con un digramma, associato a Ctrl+A Ctrl+V per impostazione predefinita.[20]
Lotus 1-2-3 per DOS usa Alt+F1 come tasto di composizione per consentire l'immissione più semplice di molti caratteri speciali di Lotus International Character Set (LICS)[21] e Lotus Multi-Byte Character Set (LMBCS).
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.