Guida alla Notazione di LilyPond: A.16 Glossario tecnico

## A.16 Glossario tecnico

Un glossario dei termini tecnici e dei concetti usati internamente in LilyPond. Questi termini appaiono nei manuali, nelle mailing list e nel codice sorgente.

### alist

Una lista di associazioni – alist per association list –, è una coppia Scheme che associa un valore a una parola chiave: `(chiave . valore)`. Per esempio, in ‘`scm/lily.scm`’, la lista di associazioni “type-p-name-alist” associa alcuni tipi di predicato (come `ly:music?`) ai nomi (come “music”) in modo che gli errori relativi al controllo del tipo possano essere segnalati con un messaggio che includa il nome del tipo di predicato atteso.

### callback

callback indica una routine, funzione o metodo il cui riferimento sia passato come argomento quando si richiama un’altra routine, permettendo così alla routine richiamata di invocarla. La tecnica fa sì che a un livello più basso del software si possa richiamare una funzione definita a un livello più alto. I “callback” sono molto utilizzati in LilyPond per far sì che il codice Scheme a livello utente possa definire quante azioni di basso livello sono eseguite.

### closure

In Scheme, si parla di closure (chiusura) quando una funzione, di solito un’espressione lambda, viene passata come variabile. La chiusura contiene il codice della funzione più i riferimenti ai collegamenti lessicali delle variabili libere della funzione (ovvero quelle variabili usate nell’espressione ma definite al di fuori di essa). Quando questa funzione viene applicata a diversi argomenti successivamente, i collegamenti delle variabili libere che sono stati catturati nella chiusura vengono usati per ottenere i valori delle variabili libere da usare nel calcolo. Una caratteristica utile delle chiusure è la conservazione dei valori delle variabili interne tra un’invocazione e l’altra, facendo sì che uno stato possa essere mantenuto.

### glyph

Un glifo è una particolare rappresentazione grafica di un carattere tipografico o una combinazione di due caratteri che formano una legatura. Un insieme di glifi con un solo stile e forma costituiscono un tipo di carattere (font), e un insieme di tipi di carattere con vari stili e dimensioni costituiscono una famiglia di caratteri tipografici.

#### Vedi anche

Guida alla notazione: Tipi di carattere, Caratteri speciali.

### grob

Gli oggetti di LilyPond che rappresentano elementi della notazione nell’output – come teste di nota, gambi, legature di portamento e di valore, diteggiature, chiavi, etc. – sono chiamati, in inglese, ‘Layout objects’ (‘Oggetti della formattazione’) o anche ‘GRaphical OBjects’ o grobs in forma breve. Sono rappresentati da istanze della classe `Grob`.

#### Vedi anche

Manuale di apprendimento: Oggetti e interfacce, Convenzioni per i nomi di oggetti e proprietà, Proprietà degli oggetti di formattazione.

Guida al funzionamento interno: grob-interface, All layout objects.

### immutable

Un oggetto si dice immutabile – in inglese immutable – se il suo stato non può essere modificato dopo la sua creazione, in contrasto con un oggetto variabile, che può essere modificato dopo la sua creazione.

In LilyPond, le proprietà immutabili o condivise definiscono lo stile e il comportamento predefinito dei grob. Sono condivise tra molti oggetti. In apparente contraddizione col loro nome, possono essere modificate con `\override` e `\revert`.

#### Vedi anche

Guida alla notazione: mutable.

### interface

Le azioni e le proprietà comuni a un insieme di grob sono raggruppate in un oggetto chiamato `grob-interface` o semplicemente ‘interface’.

#### Vedi anche

Manuale di apprendimento: Oggetti e interfacce, Convenzioni per i nomi di oggetti e proprietà, Proprietà presenti nelle interfacce.

Guida alla notazione: Interfacce di formattazione.

Guida al funzionamento interno: Graphical Object Interfaces.

### lexer

A lexer is a program which converts a sequence of characters into a sequence of tokens, a process called lexical analysis. The LilyPond lexer converts the stream obtained from an input ‘`.ly`’ file into a tokenized stream more suited to the next stage of processing - parsing, for which see parser. The LilyPond lexer is built with Flex from the lexer file ‘`lily/lexer.ll`’ which contains the lexical rules. This file is part of the source code and is not included in the LilyPond binary installation.

### mutable

Si dice che un oggetto è variabile – mutable in inglese – se il suo stato può essere modificato dopo la sua creazione, in contrasto con un oggetto immutevole, il cui stato viene fissato al momento della sua creazione.

In LilyPond, le proprietà variabili contengono valori specifici di un grob. Di solito, le liste di altri oggetti o i risultati di calcoli sono salvati in proprietà variabili.

#### Vedi anche

Guida alla notazione: immutable.

### output-def

Un’istanza della classe `Output-def` contiene i metodi e le strutture dei dati associate con un blocco di output. Tali istanze vengono create per i blocchi midi, layout e paper.

### parser

Un analizzatore sintattico – in inglese parser – analizza la sequenza di token prodotti da un lexer per determinare la sua struttura grammaticale, raggruppando i token progressivamente in gruppi più ampi in base a certe regole grammaticali. Se la sequenza di token è valida, il risultato finale è l’insieme dei token ordinati a albero, la cui radice è il simbolo iniziale della grammatica. Se ciò non può essere ottenuto, il file non è valido e viene generato un appropriato messaggio di errore. I gruppi sintattici e le regole che li definiscono nella sintassi di LilyPond sono definiti in ‘`lily/parser.yy`’ e mostrati in Backus Normal Form (BNF) in LilyPond grammar. Questo file viene usato dal generatore di parser Bison per generare il parser durante la compilazione del programma. Fa parte del codice sorgente e non è incluso nell’installazione binaria di LilyPond.

### parser variable

Si tratta di variabili definite direttamente in Scheme. Il loro uso da parte degli utente è fortemente scoraggiato, perché la semantica del loro raggio d’azione può creare confusione.

Se il valore di una simile variabile viene cambiato in un file ‘`.ly`’, la modifica è globale e, se non viene ripristinato esplicitamente, il nuovo valore viene mantenuto fino alla fine del file, agendo su blocchi `\score` successivi così come su file esterni aggiunti col comando `\include`. Ciò può portare a conseguenze non volute e in progetti complessi gli errori conseguenti possono essere difficili da individuare.

LilyPond usa le seguenti variabili dell’analizzatore sintattico:

- afterGraceFraction
- musicQuotes
- mode
- output-count
- output-suffix
- partCombineListener
- pitchnames
- toplevel-bookparts
- toplevel-scores
- showLastLength
- showFirstLength

### prob

Le proprietà dell’oggetto – prob per PRoperty OBjects – sono istanze della classe `Prob`, una semplice classe per oggetti che hanno liste associative di proprietà variabili e invariabili e metodi per manipolarle. Le classi `Music` e `Stream_event` derivano da `Prob`. Vengono create istanze della classe `Prob` anche per conservare il contenuto formattato dei grob di un sistema e i blocchi dei titoli durante la formattazione della pagina.

### smob

Gli oggetti Scheme – Smobs per ScheMe OBjects – fanno parte del meccanismo con cui Guile esporta gli oggetti C e C++ in codice Scheme. In LilyPond, gli smob vengono creati dagli oggetti C++ attraverso delle macro. Esistono due tipi di oggetti smob: smob semplici, intesi per oggetti invariabili semplici come i numeri; e smob complessi, usati per oggetti aventi delle identità. Maggiori informazioni si trovano nei sorgenti di LilyPond e precisamente nel file ‘`lily/includes/smob.hh`’.

### stencil

Un’istanza della classe stencil contiene l’informazione necessaria per stampare un oggetto tipografico. È un semplice smob che contiene un riquadro che definisce l’estensione verticale e orizzontale dell’oggetto, e un’espressione Scheme che stamperà l’oggetto quando esaminata. Gli stencil possono essere combinati per formare stencil più complessi, definiti da una gerarchia di espressioni Scheme degli stencil che li compongono.

La proprietà `stencil`, che connette un grob al suo stencil, è definita nell’interfaccia `grob-interface`.

#### Vedi anche

Guida al funzionamento interno: grob-interface.

#### LilyPond — Guida alla Notazione v2.22.2 (ramo stabile).