[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico] [volume] [parte]
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.
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).
{Language=Turbo}
Definisce l'utilizzo di un sorgente TURBO Pascal.
{Language=Turbo ## utilizza una codifica 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:
HP
È la codifica usata in modo predefinito e si riferisce precisamente al Pascal HP, compatibile con il Pascal dello standard ISO.
HP-UX
È il Pascal HP del sistema HP-UX, praticamente identico al Pascal HP normale.
Turbo
TURBO Pascal 5.0, quello usato con il Dos. La differenza rispetto al tipo HP è minima, tanto che generalmente non è necessario richiedere esplicitamente questo tipo di codifica, quando si usano sorgenti TURBO Pascal.
UCSD
UCSD Pascal. Si tratta di un dialetto molto simile al TURBO Pascal.
MPW
Macintosh Programmer's Workshop Pascal 2.0, senza le estensioni Object Pascal.
VAX
VAX/VMS Pascal 3.5. Non tutte le funzionalità sono disponibili.
Oregon
Berk
Modula
Modula-2. Basato sul libro Programming in Modula-2 di Wirth, terza edizione. La conversione in C a partire da questo formato non è ancora completa.
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
.
-o file
Definisce esplicitamente il nome del file del sorgente C da generare.
-c file_di_configurazione
Definisce il nome di un file di configurazione da utilizzare al posto di quelli standard.
-a
Genera codice C ANSI. Questa opzione permette di sostituirsi agevolmente alla configurazione standard secondo cui il sorgente generato dovrebbe essere di tipo tradizionale (K&R).
-l {HP|HP-UX|Turbo|UCSD|VAX|Oregon|Berk|Modula}
Permette di definire il tipo di Pascal nel sorgente. Le caratteristiche abbinate alle varie parole chiave sono state descritte in occasione della descrizione dei file di configurazione.
$
p2c mio_programma.pas
Genera il file mio_programma.c
convertendo il contenuto di mio_programma.pas
.
$
p2c -a mio_programma.pas
Come nell'esempio precedente, ma genere un programma C secondo lo standard ANSI.
$
p2c -a -o mio.c mio_programma.pas
Come nell'esempio precedente, ma il file generato è mio.c
.
Si suppone di volere compilare il programma seguente:
{ CiaoMondo.pas Programma elementare di visualizzazione di un messaggio attraverso lo standard output. } program CiaoMondo; begin Writeln('Ciao Mondo!'); end.
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.
/* Output from p2c, the Pascal-to-C translator */ /* From input file "CiaoMondo.pas" */ /* CiaoMondo.pas Programma elementare di visualizzazione di un messaggio attraverso lo standard output. */ #include <p2c/p2c.h> main(argc, argv) int argc; Char *argv[]; { PASCAL_MAIN(argc, argv); printf("Ciao Mondo!\n"); exit(EXIT_SUCCESS); } /* End. */
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]
Ciao Mondo!
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:
main(int argc, Char *argv[]) { PASCAL_MAIN(argc, argv); printf("Ciao Mondo!\n"); exit(EXIT_SUCCESS); }Appunti di informatica libera 2003.01.01 --- Copyright © 2000-2003 Daniele Giacomini --
daniele @ swlibero.org
1) Pascal-to-C GNU GPL
Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome pascal_preparazione_di_pascal_to_c.html
[successivo] [precedente] [inizio] [fine] [indice generale] [violazione GPL] [translators] [docinfo] [indice analitico]