2. Sottolinguaggio di definizione dei dati
2.1 Campi
Tutte le comunicazioni con la macchina di rete avvengono mediante stringhe di bit: queste stringhe di bit, chiamate anche messaggi, sono analizzate dall'HOST ricevente per ricostruire all'interno della sua memoria le strutture di dati nella propria memoria e nel proprio codice.
I bit sono raggruppati in campi significativi: un campo è un gruppo di bit con un contenuto definito. Può contenere:
- un elemento di dati (campo di dati)
- uno schema di bit che specifica parametri di ambiente
- un puntatore
- l'identificazione di altri campi.
Il metodo per descrivere i formati delle perle deriva dal metodo di descrizione di un messaggio binario suggerito nella RFC #31:
- ogni campo è dichiarato con il suo nome e la sua lunghezza in numero di bit.
- ai valori fissi di un campo usati comunemente che corrispondono a un significato speciale possono essere assegnati dei nomi.
- i modi leciti di concatenare i campi sono stabiliti da regole; quando sono ammessi solo determinati valori fissi di un campo, questi possono essere specificati tramite il loro valore oppure tramite il nome corrispondente.
2.2 Perle di dati.
I campi di dati (tipo (a)) sono concatenati per formare perle di dati: una perla è un'unità atomica indivisibile di dati usata come elemento costitutivo di qualsiasi struttura di dati da trasmettere tra gli HOST e la macchina di rete. Una perla è la più piccola unità di dati che può essere referenziata.
I modi leciti di formare una perla mediante la concatenazione di più campi sono indicati in una regola di costruzione. Le perle hanno una lunghezza fissa e una struttura non ambigua. Nelle macchine reali le perle sono di solito definite come un numero intero di registri contigui. Questo vincolo non si applica qui, anche se potrebbe risultare più efficiente favorire gli HOST con, per esempio, parole di 32 bit e 4 byte per parola, che sono la struttura di parola più comune sulla rete ARPA.
Le perle di dati possono essere considerate come gli operandi del linguaggio, in cui i campi di tipo (b) e (c) sarebbero gli operatori.
2.3 Campi di controllo
Il modo in cui le perle di dati sono collegate l'una all'altra e l'ambiente in cui operano sono specificati da campi di controllo aggiuntivi, che non possono essere referenziati e sono operatori o identificatori della stringa di perle seguente, oppure collegamenti tra singole perle.
L'ambito di un campo di controllo può anche essere l'insieme di tutte le perle o sottostrutture di una struttura, se è specificato al livello della testa della struttura. Per essere più precisi, occorre definire due tipi di strutture di perle: strutture omogenee ed eterogenee.
Una struttura è definita omogenea se in testa alla struttura sono specificati sia un unico tipo di perla sia un ambiente di parametri fisso per l'intera struttura.
Una struttura è definita eterogenea se è vera almeno una delle seguenti condizioni.
-
per costruire la struttura sono usati tipi diversi di perle
-
l'ambiente in cui si trovano le perle della struttura cambia all'interno della struttura.
Occorre definire cinque campi di controllo principali.
- MODIFY
- FLAG
- POINTER
- IDENTIFICATION
- PARAMETER
2.3.1 Campo MODIFY
Il campo MODIFY è un campo di un bit che precede ogni perla di una struttura eterogenea: è un flag impostato quando è seguito da uno o più campi di controllo di tipo b, d o e, che mirano a modificare l'ambiente delle perle di dati oppure il loro tipo. Questo campo ha il valore:
- 1: se il tipo della perla di dati associata e il suo ambiente non cambiano
- 0: se l'elemento associato è un campo di controllo o una sequenza di campi di controllo di tipo b, d o e che specifica un cambiamento di tipo e/o di ambiente delle perle di dati seguenti.
2.3.2 Campo FLAG
Quando è impostato, il campo MODIFY è immediatamente seguito da un campo FLAG di 8 bit che indica quali tra il campo IDENTIFICATION e i diversi possibili campi PARAMETER sono presenti; quando è impostato a uno, ciascun bit ha il seguente significato:
bit number
0 IDENTIFICATION field present
1 first parameter field present
2 second parameter field present
---
6 sixth parameter field present
7 next field is another FLAG field
for some more parameters (in case
more than 6 parameters may be
attached to a bead environment).
2.3.3 Campo POINTER
Il numero e la natura dei puntatori da associare a ciascuna perla dipendono dalla definizione della struttura. Una data struttura a lista può richiedere un puntatore in avanti. Una struttura ad anello può usare un puntatore aggiuntivo al primo elemento. I collegamenti necessari tra le perle sono definiti nella definizione della struttura, dopodiché i campi puntatore necessari vengono aggiunti automaticamente a ciascuna perla di dati. Una perla è referenziata all'interno di una struttura tramite un indirizzo relativo alla testa della struttura. Pertanto un campo puntatore di 16 bit dovrebbe essere pienamente sufficiente a contenere questo indirizzo.
2.3.4 Campo IDENTIFICATION
Il campo IDENTIFICATION è un campo di 8 bit che identifica un tipo di perla nell'elenco dei tipi di perla definiti. I tipi di perla standard sono numerati a partire da zero verso l'alto e i tipi di perla non standard a partire da 255 verso il basso. La numerazione dei tipi non standard è specifica di ciascun programma server o di un insieme di programmi server. I campi IDENTIFICATION seguono un campo MODIFY di valore 1 ogni volta che il tipo di perla non è stato definito per l'intera struttura nella radice della struttura. I campi di identificazione sono usati anche al livello della testa della struttura per specificare il tipo degli elementi identici (perle o strutture) usati all'interno di questa struttura.
2.3.5 Campo PARAMETER
Il campo PARAMETER fornisce l'elenco dei parametri di ambiente in cui si trova la stringa di perle di dati seguente. Un campo PARAMETER è specifico di un tipo di perla; segue direttamente il campo MODIFY quando non vi è ambiguità o il tipo delle perle di dati successive.
Esempio: il campo parametro della perla standard BEAMVT conterrà i seguenti campi.
- un campo di 2 bit che indica il tipo di movimento generato
00 do not display move the beam
01 display final point point
10 display vector vector
11 unused
-
un campo di 4 bit che indica l'intensità del fascio mediante un numero da 0 a 15, dove 0 indica un'intensità nulla e 15 la massima intensità possibile.
-
un campo di 1 bit per il lampeggiamento
-
0: spento
-
1: acceso
-
un campo di 1 bit per la sensibilità alla penna ottica
-
0: spento
-
1: acceso
2.4 Definizione del metalinguaggio
Negli esempi si usa un metalinguaggio simile a quello dei report COBOL per la sua leggibilità, sia nelle definizioni delle perle sia in quelle delle strutture.
Symbol Meaning
+ concatenation
{ } choice
[ ] optional choice
{ } l<=u { } l<=u repetition
1 lower bound on the
number of identical
items; if omitted l
is assumed to be 0.
u upper bound on the
number of identical
items; if omitted u
is assumed to be ∞.
a number alone means: exact
number of repetition.
: label for further use _within the same rule_
= assignment
= > conditional alternative
( ) grouping
' ' indicates a special value given to the following field name
(+) plus
(-) minus
2.5 Perle standard proposte
2.5.1 Perle alfanumeriche
Carattere: CHAR
Un carattere è composto da un campo di otto bit (che ha lo stesso nome). Sono definiti molti schemi speciali, corrispondenti ai caratteri speciali di uso corrente; sono indicati nella tabella 2.5.1, insieme ad alcuni sottoinsiemi di CHAR. Il codice di carattere di base è dichiarato come standard ASCII
standard EBCDIC
CODE
or by the name
followed by the 128 characters in this code corresponding to
the 128 ASCII characters. If no code declaration is specified,
the ASCII code is assumed by default.
Rappresentazione dei numeri
Normalmente il nucleo di un programma resta nell'HOST del server e l'HOST dell'utente non dovrebbe avere operazioni aritmetiche da eseguire sui dati. In questo caso non occorre descrivere i principi su cui si basa la progettazione dell'unità aritmetica di un HOST. Occorre però descrivere il formato dei numeri in virgola fissa e in virgola mobile.
-
nel caso in cui gli HOST dell'utente e del server abbiano la stessa rappresentazione numerica,per esempio la rappresentazione standard,la trasmissione dei dati nella loro rappresentazione numerica riduce il flusso di dati tra di essi.
-
se l'HOST del server ha una rappresentazione numerica diversa da quella standard, a seconda dei dati trasmessi, vi sono due alternative:
-
i dati numerici sono scambiati come numeri decimali nel codice standard
-
i formati in virgola fissa e in virgola mobile sono definiti alla macchina di rete e l'HOST dell'utente esegue
-
o una transcodifica diretta dalla rappresentazione binaria del server alla rappresentazione decimale e viceversa.
oppure una transcodifica dalla rappresentazione binaria del server alla propria rappresentazione binaria e viceversa.
Poiché la maggior parte dei numeri scambiati è destinata a essere stampata in decimale o viene fornita come input decimale, si ritiene che, in caso di incompatibilità tra le rappresentazioni binarie degli HOST corrispondenti, gli scambi in rappresentazione decimale sarebbero la soluzione più semplice.
Sono quindi definiti:
-
Numero in rappresentazione decimale, che non è una perla ma una stringa di caratteri (vedi 2.3.1)
-
Numeri in virgola fissa: precisione singola FXPNUM1, precisione doppia FXPNUM2
Field definition BYTE 8 SIGN 1
SBYTE 7
FXP NUM1 <-- SIGN + SBYTE + {BYTE}3
FXP NUM2 <-- FXP NUM1 + {BYTE}4
- Numeri in virgola mobile: precisione singola FLPNUM1, precisione doppia FLPNUM2
FLP NUM1 <-- SIGN + SBYTE + {BYTE}3
FLP NUM2 <-- FLPNUM1 + {BYTE}4
Questo esprime soltanto la sintassi del numero in virgola mobile. La semantica dovrebbe dire: in FLPNUM1
-
SIGN è il segno del numero di formato {BYTE}3, che è la mantissa
-
SBYTE è l'esponente, e il suo valore ha come base un valore di 40₁₆ per garantire esponenti positivi. Di fatto, FXPNUM1 e FLPNUM1 differiscono per la loro semantica.
Queste proprietà saranno espresse mediante una definizione di campo speciale:
EXP <-- SBYTE (+) '40H'SBYTE
MANT <-- SIGN (+) {BYTE}3
e un numero in virgola mobile è definito come:
FLP = MANT 2EXP
1. Caratteri speciali
Transmission Control Characters
SOH
STX
ETX
EOT
ENQ
ACK
DLE
NAK
SYN
ETB
ESC
Printer Control Characters
horizontal tabulation HT + '0X1' CHAR
vertical tabulation VT + '0BX' CHAR
new line NL + '0AX' CHAR
end of message EOM + '08X' CHAR
Teletype Control Characters
Carriage return CR + ''0DX' CHAR
shift out SO + '0EX' CHAR
shift in SI + '0FX' CHAR
BS +
Device Control Characters
DC1
DC2
DC3
DC4
Table 2.3.1
2. Sottoinsiemi di caratteri
Numeric characters ' 1 '
{ 2 }
NUM + { . } CHAR
{ . }
{ 9 }
' '
Printable characters { NUM
{ ALPH
PRCHAR + { ≡
{
Intermediate characters ' characters '
{ in column } CHAR
ITCHAR + { 2 }
' '
Final Characters
FIN CHAR + CHAR ⊖ ITCHAR
Transmission Control
Characters* ' NUL '
{ . }
TRACHAR + { . } CHAR
{ DEL }
Derra Control Characters Teletype control character
DCCHAR + ' DC1 ' CHAR TYCCHAR { CR
{ DC2 } { SO
{ DC3 } { SI
{ DC4 } { BS
' ' {
Alphabetic characters ' A '
{ . } CHAR
ALPH + { . }
{ Z }
' '
Printer Control
Characters { HT
{ VT
PCCHAR + { NL } CHAR
{ EOM }
{
Table 2.3.1: Special ASCII characters and groups of ASCII
characters.
*see USACII standards
2.5.2 Perle grafiche
Come proposto nella RFC #5 da J. Rulifson, lo schermo di qualsiasi display grafico è considerato un quadrato; le coordinate dei punti sono normalizzate da -1/2 a +1/2 su entrambi gli assi. La posizione del primo punto di una struttura è determinata dalla deflessione rispetto all'origine, che è il punto di riposo del fascio; i punti successivi sono determinati dalle loro deflessioni (AX,AY) rispetto all'ultima posizione del fascio.
Pertanto occorre definire soltanto due campi di dati:
-
DEFLECTION: che è un campo di 12 bit: la deflessione è definita da un numero compreso tra - 1 e +1 con la precisione abituale del server.
-
ANGLE: che è un campo di 15 bit che definisce un angolo da 0 a 2Π in radianti tra l'asse orizzontale e un asse passante per l'origine. Il suo primo bit indica se l'angolo deve essere preso in senso orario o antiorario.
Le perle di dati sono:
MOVE
A seconda dei parametri impostati quando compare questa perla, MOVE può specificare:
-
un movimento invisibile del fascio; in questo caso l'intensità del fascio è nulla
-
un nuovo punto: in questo caso l'intensità del fascio è accesa solo quando il fascio ha raggiunto il nuovo punto.
-
un vettore: in questo caso l'intensità del fascio è impostata a un certo valore diverso da zero
MOVE + {DEFLECTION}2
Arco di circonferenza: ARC
Un arco di circonferenza è definito dal suo centro, seguito dal suo punto iniziale e dall'angolo del suo asse finale.
ARC + {DEFLECTION}4 +ANGLE
2.6 Campi parametro proposti.
2.6.1 Stringhe di caratteri.
Nelle stringhe di caratteri alcuni dei caratteri di controllo sono in realtà campi parametro: agiscono come un operatore sulla stringa di caratteri seguente, cioè:
lower shift
upper shift
new line
escape
. . . .
Ma poiché il codice e l'uso di questi caratteri sono stabiliti nei codici standard, essi non sono inclusi nella definizione dei parametri. Si può trarre vantaggio dal fatto che questi caratteri si trovano nelle due colonne di sinistra del codice standard ASCII o EBCDIC: corrispondono a codici con i primi tre bit nulli in EBCDIC e i primi due bit nulli in ASCII.
2.6.2 Parametri grafici
Sono definiti i seguenti campi parametro:
scale SCALE 4
beam intensity INT 4
light pen sensitivity SENS + SWITCH
blinking BLINK + SWITCH
beam BEAM + SWITCH
SWITCH è un campo di 1 bit che può assumere i valori:
ON <-- '1' SWITCH
OFF <-- '0' SWITCH
Un parametro switch resta ON finché non viene reimpostato a OFF.
L'intensità del fascio è espressa da un numero da 0 a 1. 0 è il nero e 1 la massima luminosità che il display può raggiungere. I numeri intermedi specificano il logaritmo relativo della differenza di intensità. BEAM consente di accendere o spegnere il BEAM senza modificare il parametro INT corrente.
2.7 Strutture
2.7.1 Definizione della struttura.
La definizione della struttura consiste principalmente nella specifica delle relazioni topologiche tra le perle di dati:
-
relazioni sequenziali; nessun campo puntatore necessario
-
collegamenti tramite un certo numero di puntatori.
2.7.2 Tipo di struttura standard.
Sono scelti due tipi di struttura standard di base
- VECTOR: per rappresentare sequenze di perle di dati (stringhe, array, tabelle...)
- PLEX: per rappresentare qualsiasi tipo di grafo orientato, albero, anello...)
VECTOR (C;N1,...NC) <-- VECTORHDR + VECTORBODY
VECTORBODY <-- (=C+1:{defined bead})Ni + [VECTORBODY]
VECTORHDR <-- 'VECTOR' IDENTIFICATION + C + N1 + N2 + .... + NC
C è il numero di parti (colonne) del vettore, ciascuna parte con NC elementi.
Probabilmente è anche interessante definire un vettore compresso COMPVECTOR, in cui le sequenze di elementi identici sono trasmesse come 1 elemento + una perla speciale + il numero di elementi identici in sequenza.
PLEX (M)
Il primo bit di un campo puntatore indica se il puntatore punta o meno a un elemento terminale. In tal caso, i campi puntatore in avanti non vengono aggiunti all'elemento di dati.
M è il numero di elementi di dati nella struttura.
2.8 Oggetti
2.8.1 definizione di oggetto.
Un oggetto è definito da una regola semantica che comprende, nel lato destro
- un nome per identificare l'oggetto
- un insieme di parametri della definizione dell'oggetto.
- operandi: nome delle perle usate come elementi di dati
nel lato sinistro
- operatori: campi parametro
- struttura delle perle di dati.
Per esempio, la definizione di un nuovo oggetto chiamato SQUARE è:
SQUARE <-
(A,L,AΘ) ROT(ANGLE) (VECTOR(1,4) (BEAM'OFF'+
MOVE (A) + BEAM 'ON' + MOVE (0,L) + MOVE (L,0) +
MOVE (0,2L) + MOVE (2L,0))
Dove ROT si riferisce a una trasformazione definita nel linguaggio di manipolazione dei dati, e VECTOR è definito come struttura standard.
- L'identificatore della nuova struttura è SQUARE
- Il tipo di struttura usato è VECTOR con dimensione 1 e 4 elementi
- Gli elementi del VECTOR sono perle standard MOVE
- I parametri sono A, L e A Θ
- Sono usati i campi parametro BEAM 'OFF' e BEAM 'ON'.
2.8.2 Oggetti standard alfanumerici.
Stringa di caratteri compressa (COMSTRING)
COMSTRING <-- VECTOR (1) ({ [PCHAR]n + { HT+NUM
{ VT+NUM
{ ESC+CHAR
{ NL
{ EOP
} } )n EOP
Una stringa di caratteri compressa è un numero qualsiasi di ripetizioni di una stringa di un numero qualsiasi di caratteri stampabili seguita da uno dei seguenti caratteri
-
tabulazione orizzontale seguita dal numero di spazi corrispondenti da aggiungere
-
tabulazione verticale seguita dal numero di righe da saltare.
-
escape seguito da un carattere qualsiasi
-
nuova riga
-
fine pagina
La stringa compressa termina con un carattere EOF.
Tabella dei codici (CODE)
CODE <-- VECTOR (1;128) {CHAR}128
CODE è il nome della tabella di traduzione assunta per un dato programma. Quando è definita dall'utente, questi deve fornire dalla colonna 1 alla colonna 8 lo schema di 8 bit equivalente al codice ASCII corrispondente.
Immagine di scheda binaria
B CARD <-- VECTOR (1;120) {CHAR}120
Numero decimale impaccato HNUM campo di 4 bit
' A X ' ' 0 H '
{ C X } { . }
DSIGN { E X } HNUM PNUM <-- { . } HNUM
{ F X } { . }
{ B X } { 9 H }
{ D X }
' '
1<n<31
PDNUM <-- {PNUM} + DSIGN
Numero decimale (non impaccato o zonato)
1<n<31
DNUM <-- {NUM} + D SIGN+ PNUM