Sono disponibili diversi compilatori per il linguaggio Pascal; in questo capitolo ne vengono descritti alcuni.
Pascal-to-C,(1) è una sorta di compilatore che permette di convertire un sorgente Pascal in un sorgente C. I problemi che possono sorgere da questo tipo di conversione sono nella definizione precisa del tipo di dialetto Pascal e del tipo di dialetto C. Utilizzando Pascal-to-C con GNU/Linux, non si dovrebbero avere difficoltà con il compilatore C. Quello che resta da sistemare è la definizione del dialetto Pascal che si vuole usare, dal momento che ne esistono di diversi, che alle volte sono incompatibili.
Questi dettagli possono essere controllati e configurati; quello che conta è esserne consapevoli e approfondire l'uso di Pascal-to-C attraverso lo studio della documentazione originale, quando se ne presenta la necessità, ovvero quando si intende programmare seriamente attraverso questo strumento.
Il nome di Pascal-to-C è indicato dal suo autore come P2c. Tuttavia, P2C è anche il nome di un altro compilatore analogo, realizzato per sistemi speciali: http://www.geocities.com/SiliconValley/Network/3656/rocket/. In questo secondo caso, oltre alla particolarità del compilatore stesso, c'è da considerare il fatto che non si tratta di software libero. |
Il codice C generato da Pascal-to-C contiene sempre l'inclusione del file p2c/p2c.h
, che poi, a sua volta, provvede a includere il solito stdio.h
.
Il link del file generato dalla compilazione del sorgente C che si ottiene, deve essere fatto includendo la libreria libp2c.a
, cosa che si traduce generalmente nell'uso dell'opzione -lp2c.
In pratica, le fasi necessarie a ottenere un programma eseguibile si riassumono nei due comandi seguenti.
p2c sorgente_pascal |
cc -lp2c sorgente_c |
L'eseguibile che si ottiene, richiede la presenza della libreria dinamica libp2c.so
.
Il funzionamento predefinito di p2c può essere configurato attraverso una serie di file di configurazione:
/usr/lib/p2c/p2crc
, $P2CRC
~/p2crc
~/.p2crc
Il primo file dell'elenco è quello usato per definire la configurazione generale. Eventualmente, si può usare la variabile di ambiente P2CRC, contenente il percorso assoluto per raggiungere un file analogo, sostituendosi in tal modo a quello generale.
Dopo il file di configurazione generale, viene cercato il file p2crc
nella directory personale dell'utente, oppure, in sua mancanza, il file .p2crc
. Questo file serve a definire una personalizzazione della configurazione di p2c.
Le direttive di questo file di configurazione sono rappresentate da assegnamenti, espressi in una delle due forme seguenti.
nome = valore |
nome valore |
I commenti si rappresentano come di consueto facendoli precedere dal simbolo #, dove le righe vuote o bianche vengono semplicemente ignorate.
Il file di configurazione che accompagna Pascal-to-C, cioè /usr/lib/p2c/p2crc
, contiene l'elenco completo di tutte le direttive utilizzabili, tutte impostate nel modo più conveniente per l'uso normale e tutte debitamente commentate in modo da sapere come può essere modificato ogni valore.
L'esempio seguente definisce l'utilizzo di un sorgente TURBO Pascal:
|
Le direttive di configurazione possono anche essere incorporate all'interno dello stesso sorgente Pascal, permettendo così una definizione dinamica, riferita a porzioni di codice. Per farlo, si utilizza una forma speciale dei commenti Pascal (le parentesi graffe fanno parte della direttiva).
{nome=valore} |
In tal caso, come si può vedere, il simbolo = è obbligatorio e l'uso di spazi bianchi è generalmente inammissibile. È possibile l'utilizzo di commenti anche all'interno di direttive espresse in questo modo. Per farlo, occorre usare la sequenza ##.
La configurazione dinamica all'interno del sorgente, permette di utilizzare anche altre modalità di assegnamento e di eliminazione automatica delle definizioni alla fine del sorgente. Per approfondirle, conviene consultare la documentazione originale, cosa che si riduce in pratica alla lettura di p2c(1).
Segue la descrizione di alcuni esempi.
|
Definisce l'utilizzo di un sorgente TURBO Pascal.
|
Definisce l'utilizzo di un sorgente TURBO Pascal e vi aggiunge un commento interno.
Le direttive della configurazione di Pascal-to-C sono numerose; anche se l'impostazione predefinita si adatta alle situazioni più comuni, potrebbe essere conveniente modificarne alcune, già le prime volte che si utilizza Pascal-to-C.
AnsiC [0|1] |
Permette di definire il tipo di dialetto C da utilizzare. Se si attiva la modalità, utilizzando il valore uno, si fa in modo di generare codice C ANSI; se invece non si inserisce, o si utilizza il valore zero, si ottiene un codice compatibile con il C K&R originale.
Come accennato, se non si definisce diversamente, si ottiene un codice C tradizionale, mentre potrebbe essere desiderabile di generare codice C ANSI.
Language [HP|HP-UX|Turbo|UCSD|VAX|Oregon|Berk|Modula] |
Permette di definire il dialetto Pascal utilizzato come sorgente per la conversione. Le varie parole chiave usate per distinguere i dialetti hanno il valore seguente:
|
ShortOpt [0|1] |
Permette di definire il modo con cui devono essere valutate le espressioni logiche: uno abilita il «cortocircuito» attraverso cui si valutano effettivamente solo le condizioni strettamente necessarie a determinare il risultato finale; zero lo disabilita, in modo che tutte le condizioni vengano valutate in ogni caso.
La conversione del sorgente Pascal in linguaggio C avviene per mezzo del programma p2c, configurato come descritto nelle sezioni precedenti.
p2c è effettivamente un compilatore, il cui risultato è un programma C. Questo significa che genera da solo la segnalazione di errori di sintassi nel sorgente Pascal e, alla fine, il sorgente C che si ottiene dovrebbe essere corretto (dal punto di vista del C).
p2c [opzioni] [file] |
p2c legge il file indicato come argomento, oppure lo standard input in sua mancanza. In base alle opzioni e alla configurazione definita, genera da quel file una trasformazione in linguaggio C.
Il nome del file generato si ottiene togliendo l'eventuale estensione precedente e aggiungendo .c
.
|
Segue la descrizione di alcuni esempi.
$
p2c mio_programma.pas
[Invio]
Genera il file mio_programma.c
convertendo il contenuto di mio_programma.pas
.
$
p2c -a mio_programma.pas
[Invio]
Come nell'esempio precedente, ma genere un programma C secondo lo standard ANSI.
$
p2c -a -o mio.c mio_programma.pas
[Invio]
Come nell'esempio precedente, ma il file generato è mio.c
.
Segue la descrizione di un esempio di compilazione:
|
Se il file si chiama CiaoMondo.pas
, si può trasformare in C con il comando seguente:
$
p2c CiaoMondo.pas
[Invio]
CiaoMondo Translation completed |
Si ottiene così il file CiaoMondo.c
, mostrato di seguito.
|
Questo file può essere compilato a sua volta.
$
cc -lp2c -o CiaoMondo CiaoMondo.c
[Invio]
Se tutto funziona correttamente, si ottiene il file CiaoMondo
eseguibile.
$
./CiaoMondo
[Invio]
|
Se si desidera generare un sorgente C ANSI, si può usare l'opzione -a di p2c. Nel caso dell'esempio, il corpo del programma C sarebbe stato il seguente:
|
GPC, (2) ovvero il Pascal GNU, è un compilatore Pascal che fa parte di GCC. Il suo utilizzo immediato è molto semplice:
gpc file_pascal |
In questo modo, l'eseguibile gpc compila il sorgente indicato come argomento e genera il file a.out
, che poi può essere avviato. In alternativa, per specificare il nome del file eseguibile da generare con la compilazione, si usa l'opzione -o:
gpc -o file_eseguibile file_pascal |
Per esempio, per compilare il programma seguente, contenuto nel file CiaoMondo.pas
, si può procedere con il comando mostrato subito dopo:
|
$
gpc -o CiaoMondo CiaoMondo.pas
[Invio]
Dalla compilazione si genera il file eseguibile CiaoMondo
:
$
./CiaoMondo
[Invio]
|
GPC è un compilatore Pascal molto sofisticato, accompagnato da una documentazione molto dettagliata. Qui si elencano soltanto le opzioni di uso più comune, per consentirne l'uso a scopo didattico, con gli esempi che vengono descritti nei capitoli successivi di questa parte dedicata al Pascal.
|
Free-Pascal (3) è un altro compilatore Pascal. La compilazione è svolta dall'eseguibile fpc che si avvale anche di un file di configurazione, /etc/fpc.cfg
, che può contenere le stesse opzioni della riga di comando.
In condizioni normali, quando si installa Free-Pascal da un pacchetto già pronto per la propria distribuzione GNU, il file di configurazione dovrebbe essere già adatto alle caratteristiche del proprio sistema, senza richiedere altri interventi. Così, di solito è sufficiente compilare un programma in questo modo:
fpc file_pascal |
Di solito, se il nome del file sorgente Pascal ha un'estensione del tipo .pas
, si ottiene un file eseguibile con la stessa radice e senza estensione. Per esempio, compilando il file seguente, denominato CiaoMondo.pas
, si ottiene il file eseguibile ciaomondo
nella stessa directory:
|
$
fpc CiaoMondo.pas
[Invio]
Si osservi che il nome dell'eseguibile che si ottiene contiene solo lettere minuscole:
$
./ciaomondo
[Invio]
|
1) Pascal-to-C GNU GPL
3) Free-Pascal GNU LGPL
«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net