Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ
îðèãèíàëüíîãî äîêóìåíòà
: http://www.arcetri.astro.it/irlab/doc/library/linux/AppLinux/al171.htm
Äàòà èçìåíåíèÿ: Tue Sep 21 18:08:48 1999 Äàòà èíäåêñèðîâàíèÿ: Sat Dec 22 13:24:12 2007 Êîäèðîâêà: |
Pascal-to-C, o P2c, Õ 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 P2c 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 P2c attraverso lo studio della documentazione originale, quando se ne presenta la necessitÞ, ovvero quando si intende programmare seriamente attraverso questo strumento.
Il codice C generato da P2c 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
|
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 completo 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 #
, e le righe vuote o bianche vengono semplicemente ignorate.
Il file di configurazione che accompagna P2c, 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.
Language Turbo |
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.
{<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 P2c sono numerose, e anche se l'impostazione predefinita si adatta alle situazioni piÛ comuni, potrebbe essere conveniente modificarne alcune, giÞ le prime volte che si utilizza P2c.
AnsiC [0|1] |
Permette di definire il tipo di dialetto C da utilizzare. Se si attiva la modalitÞ, utilizzando il valore 1, si fa in modo di generare codice C ANSI; se invece non si inserisce, o si utilizza il valore 0, 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
Oregon Software Pascal/2.
Berk
Berkeley Pascal con le estensioni Sun.
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: 1 abilita il «cortocircuito» attraverso cui si valutano effettivamente solo le condizioni strettamente necessarie a determinare il risultato finale; 0 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
.
|
Definisce esplicitamente il nome del file del sorgente C da generare.
|
Definisce il nome di un file di configurazione da utilizzare al posto di quelli standard.
|
Genera codice C ANSI. Questa opzione permette di sostituirsi agevolmente alla configurazione standard secondo cui si il sorgente generato dovrebbe essere di tipo tradizionale (K&R).
|
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
[Invio]-
lp2c -o CiaoMondo CiaoMondo.c
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
di -
ap2c
. 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 Linux 1999.09.21 --- Copyright © 1997-1999 Daniele Giacomini -- daniele @ pluto.linux.it