Skip to content
tajmone edited this page Jan 22, 2018 · 4 revisions
polygen v1.0.6

Lista dei caratteri impiegabili nelle grammatiche Polygen.


Indice


Introduzione

Nella scrittura di grammatiche del PolyGen possiamo fuire di un set di caratteri limitato ad un sottoinsieme dell'Ascii. Nello specifico:

Al di fuori delle stringhe, i caratteri consentiti sono:

  • az e AZ — tutte le lettere dell'alfabeto (senza accenti o altri modificatori, come diacritici, ecc.) sia minuscole che maiuscole
  • 09 — qualsiasi numero

All'interno di stringhe, i caratteri consentiti sono:

  • az e AZ — tutte le lettere dell'alfabeto (senza accenti o altri modificatori, come diacritici, ecc.) sia minuscole che maiuscole

  • 09 — qualsiasi numero

  • i seguenti caratteri di punteggiatura:

    , ; . : ! ? ( ) [ ] { }
    
  • i seguenti simboli:

    + - * / ^ = ~ < > % # $ £ & @ ' ` _ |
    

    (per l'uso di £, si legga l'avvertenza)

  • ulteriori caratteri tramite sequenze escape:

    • \\ barra inversa (backslash)
    • \" virgolette doppie
    • \n avanzamento riga (new line: LF)
    • \r ritorno di carrello (carriage return: CR)
    • \b backspace
    • \t tabulazione orizzontale (tab)
  • qualsiasi carattere Ascii tramite \nnn (dove nnn è un codice Ascii decimale a tre cifre)

Praticamente, nelle stringhe sono impiegabili tutti i caratteri nel range Ascii 32127, ad eccezione del 34 (") e del 92 (\) che richiedono l'escaping (\" e \\, rispettivamente).

Ascii Escapes

La sequenza escape \nnn, menzionata sopra, è in grado di produrre qualsiasi carattere nel range 0–255. Benché nel manuale di Polygen essa sia menzionata come "codice ASCII decimale", in realtà questa sequenza escape produrrà nell'output finale il byte rappresentato dal valore nnn — se questi verrà interpretato come Ascii o meno, dipenderà dal contesto in cui l'output verrà maneggiato.

La codifica Ascii originale (a 7 bit) riguarda solo i caratteri compresi tra 0–127. I caratteri da 128 a 255 possono essere interpretati diversamente a seconda del contesto. In passato era comune utilizzare diversi sistemi di codifica per interpretare i caratteri da 128–255 (le code page, ma anche set di caratteri proprietari) a seconda del contesto linguistico, o per altre ragioni, comunque al fine di ottimizzare quello che un tempo era un set di caratteri assai limitato.

Oggi, con l'avvento dell'Unicode, è molto più comune trovare applicazioni che interpreteranno l'input testuale secondo la codifica UTF-8. In tali contesti, è più utile pensare alla sequenza di escape di Polygen come una "Char escape", o più semplicemente una "Byte escape" — ossia una sequenza escape in grado di produrre qualsiasi carattere/byte nel range 0–255.

In quest'ottica, \nnn può essere usata per produrre qualsiasi carattere Unicode tramite la sequenza di byte che lo rappresenta in UTF-8.

Occhio alla Sterlina

Nelle grammatiche Polygen, £ (simbolo della sterlina) è considerato un carattere valido all'interno delle stringhe. Il problema è che questo carattere non rientra nel range Ascii (0–127) poiché il suo codice numerico è 163 (0xA3), e rientra nel cosiddetto ASCII esteso.

La presenza di questo carattere nell'output di Polygen causerà un errore se rediretto ad un applicativo che accetta input in UTF-8.

È quindi sconsigliato l'uso diretto del carattere £ in contesti in cui viene impiegato UTF-8; lo si sostituisca invece con la sequenza di byte con cui è rappresentato in UTF-8 (0xC2 0xA3):

"\194\163"

Dimostrazione

Per una verifica pratica di quanto sopra, creeremo una grammatica "test_sterlina.grm":

S := "La sterlina: £." ;

il tentativo di reindirizzarne l'output a pandoc causerà un errore:

D:\>polygen test_sterlina.grm | pandoc
pandoc: Cannot decode byte '\xa3': Data.Text.Internal.Encoding.decodeUtf8: Invalid UTF-8 stream

D:\>

Ora proviamo con "test_sterlina_utf8.grm", in cui £ è sostituito dalle sequenze escape della sua rappresentazione UTF-8:

S := "La sterlina: \194\163." ;

Per testarla reindirizzeremo l'output di pandoc verso un file di testo (poiché nel CMD il carattere £ in UTF-8 non sarebbe visulizzabile):

D:\>polygen test_sterlina_utf8.grm | pandoc -t plain > test_sterlina_utf8.txt

D:\>

Nessun errore! Ed aprendo il file test_sterlina_utf8.txt possiamo constatare che il carattere £ è ben rappresentato:

La sterlina: £.

Link

Pagine Correlate

Link di Approfondimento

Clone this wiki locally