Date post: | 11-Jul-2015 |
Category: |
Documents |
Upload: | infomedia-editori-coop |
View: | 739 times |
Download: | 0 times |
5/11/2018 LaTeX e la formattazione di pseudocodice e sorgenti - slidepdf.com
http://slidepdf.com/reader/full/latex-e-la-formattazione-di-pseudocodice-e-sorgenti 1/6
DEV DEVeloping Software Solutions — n. 123 — novembre 2004
LaTeX e la formattazione di
pseudocodice e sorgentidi Gianluca Pignalberi
Non contenti delle nostre possibilita di inserimento di brani di codice sorgente, di gram-matiche BNF e di diagrammi sintattici all’interno di documenti LaTeX, vediamo comeinserire, evidenziandoli coerentemente, brani di pseudocodice e di codice sorgente.
Gianluca Pignalberi
E laureato in Scienzedell’Informazione pressol’Universita La Sapienzadi Roma. Si occupa, perpassione, di AlgoritmiGenetici applicati all’e-laborazione delle imma-gini, ma e stato a lungooccupato, per profes-sione, in problematichelegate all’elaborazionedi testi: riconoscimentodella lingua, compres-sione, retrieval. Il tuttosempre per sistemi Unix .
5/11/2018 LaTeX e la formattazione di pseudocodice e sorgenti - slidepdf.com
http://slidepdf.com/reader/full/latex-e-la-formattazione-di-pseudocodice-e-sorgenti 2/6
pubblicato su
WWW.INFOMEDIA.IT
stampa digitale da
Lulu Enterprises Inc.
stores.lulu.com / infomedia
Infomedia
Infomedia e l’impresa editoriale che da quasi venti an-
ni ha raccolto la voce dei programmatori, dei sistemi-
sti, dei professionisti, degli studenti, dei ricercatori e dei
professori d’informatica italiani.
Sono piu di 800 gli autori che hanno realizzato per le te-
state Computer Programming, Dev, Login, Visual Basic
Journal e Java Journal, molte migliaia di articoli tecnici,
presentazioni di prodotti, tecnologie, protocolli, strumen-ti di lavoro, tecniche di sviluppo e semplici trucchi e stra-
tagemmi. Oltre 6 milioni di copie distribuite, trentamila
pagine stampate, fanno di questa impresa la piu grande ed
influente realta dell’editoria specializzata nel campo della
programmazione e della sistemistica.
In tutti questi anni le riviste Infomedia hanno vissuto del-
la passione di quanti vedono nella programmazione non
solo la propria professione ma un’attivita vitale e un vero
divertimento.
Nel 2009, Infomedia e cambiata radicalmente adottando
un nuovo modello aziendale ed editoriale e si e organiz-
zata attorno ad una idea di Impresa Sociale di Comunita,
partecipata da programmatori e sistemisti, separando le
attivita di gestione dell’informazione gestite da un board
comunitario professionale e quelle di produzione gesti-
te da una impresa strumentale. Questo assetto e in linea
con le migliori esperienze internazionali e rende Infome-
dia ancora di piu parte della Comunita nazionale degli
sviluppatori di software.
Infomedia e media-partner di manifestazioni ed eventi in
ambito informatico, collabora con molti dei pi u impor-tanti editori informatici italiani come partner editoriale e
fornitore di servizi di localizzazione in italiano di testi in
lingua inglese.
L’impaginazione automatica di questa rivista e realizzata al
100% con strumenti Open Source usando OpenOffice,
Emacs, BHL, LaTeX, Gimp, Inkscape e i linguaggi Lisp,
Python e BASH
For copyright information about the contents of DEV, please see the section “Copyright” at the end of each ar-
ticle if exists, otherwise ask authors. Infomedia contents
is© 2004 Infomedia and released as Creative Commons
2.5 BY-NC-ND. Turing Club content is © 2004 Turing
Club released as Creative Commons 2.5 BY-ND.
Le informazioni di copyright sul contenuto di DEV so-
no riportate nella sezione “Copyright” alla fine di cia-
scun articolo o vanno richieste direttamente agli autori.
Il contenuto Infomedia e© 2004 Infomedia e rilasciato
con Licenza Creative Commons 2.5 BY-NC-ND. Il con-
tenuto Turing Club e © 2004 Turing Club e rilasciato
con Licenza Creative Commons 2.5 BY-ND. Si applicano
tutte le norme di tutela dei marchi e dei segni distintivi.
` E in ogni caso ammessa la riproduzione parziale o tota-
le dei testi e delle immagini per scopo didattico purch´ e
vengano integralmente citati gli autori e la completa
identificazione della testata.
Manoscritti e foto originali, anche se non pubblicati, non
si restituiscono.
Contenuto pubblicitario inferiore al 45%.
La biografia dell’autore riportata nell’articolo e sul
sito www.infomedia.it e di norma quella disponibi-
le nella stampa dell’articolo o aggiornata a cu-
ra dell’autore stesso. Per aggiornarla scrivere a
[email protected] o farlo in autonomia all’indirizzo
http: // mags.programmers.net / moduli / biografia
5/11/2018 LaTeX e la formattazione di pseudocodice e sorgenti - slidepdf.com
http://slidepdf.com/reader/full/latex-e-la-formattazione-di-pseudocodice-e-sorgenti 3/6
In due precedenti articoli [2] e [3]
abbiamo visto quali possibilità abbiamodi aggiungere a documenti LaTeX siabrani di codice sorgente, tramite l’am-biente verbatim e derivati, che produ-zioni grammaticali, sia sotto forma di
regole BNF che di diagrammi sintattici.Se questo può rendere i nostri documentipiù ricchi e comprensibili, potremmo nonessere pienamente soddisfatti di quantoottenuto.Potremmo ancora volere due modi perimpaginare i nostri codici: uno per inserirefacilmente dei brani di pseudocodice e unoper evidenziare automaticamente le parolechiave sia di brani di pseudocodice che di
brani di codice sorgente, dipendentementeda quello scelto per redigere un program-ma.In questo articolo illustreremo i packagealgorithms, program e listing , che ci per-metteranno di ottenere quanto voluto.
AlgoritmiUna volta che sappiamo padroneggiarel’ambiente verbatim e ambienti correlati, cirendiamo conto di quanto la loro utilità, avolte, possa essere molto limitata e limi-tante.Supponiamo di voler descrivere un algorit-
mo: inseriamo il testo entro un’istanza del-l’ambiente verbatim, ottenendo una partedi documento ben indentata, ma il cui testoè interpretato letteralmente. Se nel testo cifosse una parte di codice LaTeX per for-mattare una formula, vedremmo il codicestesso nel documento finale, anziché la for-mula, proprio a causa della (non) interpre-tazione.Per ovviare a ciò tentiamo un “imbroglio” aLaTeX, non usando l’ambiente verbatim:questa volta la formula viene resa bene, maperdiamo tutte le indentazioni, perchéLaTeX elimina gli spazi inutili per la compo-
sizione del testo.Un esempio di quanto detto è in Figura 1.L’uso del package alltt potrebbe semplifi-carci il compito, essendo questo simile averbatim. L’unica differenza è che i caratte-
ri ‘\’, ‘{’ e ‘}’ non vengono interpretati lette-ralmente, ma mantengono il significatousuale in LaTeX, dandoci la possibilità dicambiare font e inserire formule e comandiin un sorgente verbatim. Questa soluzione,come anche soluzioni alternative che preve-dano l’uso di inserimenti di spazi arbitrariinserendo parole colorate di bianco, rende-rebbero illeggibile il sorgente; non le pren-deremo in considerazione.Il package che ci aiuta nel formattare pseu-docodici (algorithms) [4] è composto dadue file di stile: algorithm e algorithmic , chepossono essere inclusi insieme o menoall’interno di un documento.Questi due file di stile forniscono gli
ambienti omonimi. Vediamone l’uso e lefinalità.L’ambiente algorithmic serve a formattarelo pseudocodice adottando dei comandispecifici. La sua portata è racchiusa da
\begin{algorithmic}[<numero>]
\end{algorithmic}
il cui argomento opzionale numero indicaogni quante righe vogliamo che il sorgentesia numerato. All’atto di includere il packa-ge possiamo invocare l’opzione noend , chenon fa stampare gli end di ogni comando e
salvare spazio.I comandi a nostra disposizione ricalcano iltipo di costrutti che i linguaggi imperativi ciforniscono in genere: affermazioni, cicli escelte.
È impossibile formattare in maniera efficacebrani di pseudocodice; siperde l’indentazione ol’interpretazione deicomandi di composizione
DEV > n. 123 novembre 2004 91 <<
Non contenti delle
nostre possibilità diinserimento di branidi codice sorgente,di grammaticheBNF e di diagrammisintattici all’internodi documentiLaTeX, vediamocome inserire,evidenziandoli
coerentemente,brani dipseudocodice e dicodice sorgente
LaTeX e la formattazionedi pseudocodice e sorgentidi Gianluca Pignalberi > [email protected]
FIGURA 1
5/11/2018 LaTeX e la formattazione di pseudocodice e sorgenti - slidepdf.com
http://slidepdf.com/reader/full/latex-e-la-formattazione-di-pseudocodice-e-sorgenti 4/6
92 DEV > n. 123 novembre 2004>>
Intermediate
Il primo tipo di costrutto è formattato con il comando:
\STATE <testo>
che formatta un’istruzione scritta in LaTeX nell’esatta
maniera che ci aspettiamo, rispettando l’indentazione impli-
cita dell’algoritmo; i cicli sono formattati, in base al tipo,
tramite i comandi:
\FOR{<condizione>} <testo> \ENDFOR
\FORALL{<condizione>} <testo> \ENDFOR
\WHILE{<condizione>} <testo> \ENDWHILE
\REPEAT <testo> \UNTIL{<condizione>}
\LOOP <testo> \ENDLOOP
Infine, le scelte coinvolgono i seguenti comandi:
\IF{<condizione>} <testo> \ENDIF
\IF{<condizione>} <testo> \ELSE <testo> \ENDIF
\IF{<condizione>} <testo> \ELSIF <testo> \ELSE
<testo> \ENDIF
Possiamo ora riscrivere l’algoritmo di Figura 1 come segue,
vedendone il risultato in Figura 2:
\begin{algorithmic}
\IF{$S \neq \emptyset$}
\STATE $S = S \setminus e$
\ELSE
\STATE exit
\ENDIF\end{algorithmic}
Quando descriviamo un algoritmo è utile definire le precon-
dizioni e le postcondizioni, cosa che possiamo fare tramite
i comandi
\REQUIRE <testo>
\ENSURE <testo>
Infine possiamo inserire dei commenti; il comando è
\COMMENT{<testo>}
Data la difficoltà di mettere un commento in una linea nonfinale di un costrutto, i relativi comandi prendono un argo-
mento opzionale (racchiuso da parentesi quadre) in cui scri-
vere l’eventuale commento.
L’ambiente algorithm fornisce invece il floating body entro
cui inserire un algoritmo (o qualunque altro testo). Ogni
algoritmo viene numerato in modo tale che, quando inse-
riamo una didascalia in un algoritmo (tramite \caption),
vediamo anche l’etichetta numerata. Tale numerazione
viene usata anche per generare un indice generale degli
algoritmi, inseribile nel documento tramite \listofalgo- rithms. In caso di invocazione del comando, verrà generato
un file con estensione .loa .
Il floating body relativo agli algoritmi può o meno essere cir-
condato da un motivo; tale motivo viene passato come
opzione al caricamento del package e può essere plain,
boxed o ruled (scelta di default).
Sorgenti e pseudocodiceUn package che promette di formattare pseudocodice e
sorgenti è program di Martin Ward (fornito senza manuali,
ma con un file di esempio). Molto onestamente l’autore
afferma che la formattazione avviene secondo il suo stile
preferito, che non è necessariamente quello preferito da
altri (tra cui l’autore del presente ar ticolo). Tale package for-
nisce due ambienti: program e programbox ; il secondo for-
matta il sorgente in una sola pagina.
Lo stile dei comandi è simile a quello visto in precedenza,
con dei minimi cambiamenti; ad esempio la sintassi della
scelta è:
\IF <condizione> \THEN <azione> \ELSE <azione> \FI
mentre quella di un ciclo while è
\WHILE <condizione> \DO <istruzioni> \OD
Così come il precedente package, anche questo basa la
sua sintassi sul modello del Pascal (o del For tran) e, come
il Pascal, fornisce due comandi per definire procedure efunzioni. I comandi sono, rispettivamente, \PROC e
\FUNCT , con terminazioni \ENDPROC e \ENDFUNCT . Ad
esempio, la funzione ricorsiva per il calcolo del fattoriale
potrebbe essere composta tramite il seguente codice:
\FUNCT |fatt|(x) \BODY
\IF x < 0 \THEN |exit|(0);
\FI
\IF x = 0 \THEN |return|(1);
\ELSE |return|(x * |fatt|(x - 1));
\FI
\ENDFUNCT
Il risultato è visibile in Figura 3.I lettori noteranno che le parole non chiave sono formatta-
te con i caratteri “matematici” (corsivi o inclinati), mentre
FIGURA 3Formattazione di una funzione più simileallo pseudocodice che non ad un codicesorgente
Pseudocodice ben formattato e con il testo LaTeX compostocorrettamente (end if è presente perchénon è stato usato noend al caricamentodi algorithmic)
FIGURA 2
5/11/2018 LaTeX e la formattazione di pseudocodice e sorgenti - slidepdf.com
http://slidepdf.com/reader/full/latex-e-la-formattazione-di-pseudocodice-e-sorgenti 5/6
DEV > n. 123 novembre 2004 93 <<
Intermediate
nel sorgente non si fa mai riferimento esplicito agli ambien-ti di formattazione di formule: ciò è fatto intrinsecamentedall’ambiente. Il carattere | intorno ad alcuni termini servea tenere i termini sulla stessa riga, mentre per stampare ilsuddetto carattere bisogna usare il comando \origbar .
Altri comandi forniti dal package riguardano i commenti, leazioni, le uscite forzate dal programma, oltre ad altri cicli eevidenziazioni varie.Diversi esempi d’uso sono proposti nel file program-
demo.tex allegato al package. Una possibilità interessanteè quella di far scrivere le variabili lunghe e le parole chiavecon un carattere senza grazie; il comando necessario è\sfvariables.L’ultima cosa da notare è che, a differenza di algorithms,questo package non fornisce un floating body entro cui met-tere i sorgenti, né la possibilità di non stampare i vari fi eod di fine costrutto. Ciò lascia perplessi sulla reale capaci-tà di program di formattare sorgenti.
Codice sorgenteSupponiamo di trovarci nella seguente situazione: abbiamoun codice sorgente scritto in un linguaggio X da inserire nelnostro documento, ma lo vogliamo pretty-printed . Finché ilprogramma è paragonabile come lunghezza a Hello, world!
potremmo quasi ricorrere a alltt e formattarlo come ci con-viene, e avremmo già lavorato molto.Un package che per noi si incarica di formattare un sor-gente in base al linguaggio è listings [1].Il suo caricamento all’interno di un documento è altamentepersonalizzabile, e la lista delle opzioni è interamente dis-ponibile in [1]. Ci limiteremo qui ad analizzarne le caratte-ristiche di base.La prima cosa da fare per formattare correttamente i sor-genti è caricare i driver del o dei relativi linguaggi.
Supponiamo di avere programmi scritti in C e nel linguaggiodi csh. Nel preambolo, dopo aver caricato il package, dovre-mo inserire:
\lstloadlanguages{C,csh}
(sono disponibili più di trenta driver, di cui molti con possi-bilità di scegliere tra più dialetti). In Figura 4 vediamo la for-mattazione di Hello, world! in C e delle prime righe di runti-
me in csh.Nel corpo del documento, prima di scrivere ogni sorgente,bisogna selezionare il linguaggio adatto e relativo dialetto;possiamo farlo con:
\lstset{language=[<dialetto>]<linguaggio>}
Lo stesso comando ci permette di stabilire la dimensionedel carattere di tabulazione, lo stile delle parole chiave edaltri aspetti.Il sorgente va scritto entro un ambiente apposito, che sichiama lstlisting ; all’apertura dell’ambiente possiamo for-nire parametri opzionali e dobbiamo fornirne uno obbligato-rio (anche vuoto):
\begin{lstlisting}[<opzioni>]{<parametro>}
<sorgente>
\end{lstlisting}
Tra i parametri opzionali troviamo caption per le didascalie,captionpos (con valori t o b ) per il posizionamento delledidascalie, float per rendere il listato riposizionabile daLaTeX.
Il parametro obbligatorio è un nome; tutti i listati richiama-ti con lo stesso nome hanno lo stesso contatore di riga,cosicché possiamo inserire pezzi di un programma in varieparti del documento, potendo mantenere la continuità dinumerazione delle righe di codice. Lasciarlo vuoto significareinizializzare il contatore ogni volta.Allo stesso modo del comando \verb abbiamo la possibili-tà di comporre un comando inline . L’istruzione che ce loconsente è:
\lstinline
il cui uso è uguale al citato \verb . L’uso di lstlisting e lstin-
line è mostrato in Figura 5, il cui sorgente è visibile nel
Listato 1.Possiamo infine inserire nel documento dei sorgenti senzadoverli copiare fisicamente, e ciò grazie al comando:
\lstinputlisting[<opzioni>]{<nome file>}
Il riferimento ai listati sfrutta il solito meccanismo \label -\ref ; in questo caso l’etichetta va messa all’interno delladefinizione caption; purtroppo, nei casi provati, il meccani-smo ha fornito numerazioni scorrette.
ConclusioniLaTeX base non è in grado di formattare in maniera non ele-mentare dei codici sorgente, né di agevolarci il compito di
scrivere dei brani di pseudocodice.In precedenza abbiamo visto alcuni package che espando-no la capacità di LaTeX nel formattare sorgenti, grammati-che BNF e diagrammi sintattici, ma che non sono comun-que in grado di manipolare semplicemente pseudocodice, o
FIGURA 4 Sorgenti C e csh formattaticoerentemente con il linguaggio
FIGURA 5 Sorgenti formattati inline e come elemen-to a sé stante
5/11/2018 LaTeX e la formattazione di pseudocodice e sorgenti - slidepdf.com
http://slidepdf.com/reader/full/latex-e-la-formattazione-di-pseudocodice-e-sorgenti 6/6
L o w L
e v e l
Mi ricordo ancora la prima volta che sonoriuscito a giocare in rete con degli amici.Lavoravo a Baveno, sul lago Maggiore.Durante l’ora di pranzo il nostro capo chiu-deva un occhio e ci concedeva, anche se inmodo non ufficiale, di poter usare la reteaziendale per i nostri scopi ludici.
Era molto divertente, ci permetteva unosfogo che ci aiutava a lavorare con più tran-quillità ed armonia durante il pomeriggio.
Lo sviluppoQuesto approccio, il passare dalla monou-tenza all’emozionante multiutenza del net-gaming, col tempo ha contagiato molte per-sone. L’evoluzione ha cosi portato al proli-ferare di giochi in grado di connettersi agame-server in grado di ricevere molterichieste in parallelo.Purtroppo, quando si sviluppa un gioco, sipensa soprattutto al raggiungimento dellemassime performance, ma poco alla sicu-rezza. Di questo problema di sono accortiin molti, ma ci sono persone che dedicano
parecchio del loro tempo allo studio dei pro-tocolli di comunicazione fra i vari client eserver di gioco, provando a scoprirne il fun-zionamento, notoriamente non documenta-to, in modo da cercare dei possibili proble-mi di sicurezza.
Luigi AuriemmaProbabilmente una delle persone piùnote in questo campo è Luigi Auriemma[2]. Visti i frequentissimi aggiornamentidel suo sito, si può tranquillamente direche è la persona che ha studiato e tro-vato più bug al mondo nel campo dei
videogiochi.Il suo lavoro è importante perché, da unlato ha documentato i protocolli di comu-nicazione, dall’altro ha provato a forzarlitrovando molti modi con i quali poter bloc-care un game-server.Da un punto di vista “aziendale” la cosapotrebbe essere vista in modo negativo:si potrebbe considerare “un piccolo ter-rorista che si diverte a bloccare compu-ter”, dall’altro è invece molto impor tanteperché in grado di evidenziare dei realiproblemi, come i buffer overflow, che seben sfruttati potrebbero essere usati perprendere il possesso della macchinanella quale sono provocati o, peggio,usati per la diffusione di virus.
Fake PlayerUn altro aspetto interessante del lavoro diLuigi è dato dai cosiddetti “fake player”.Per come sono pensati molti server èpossibile, tramite l’invio di appositi pac-
chetti UDP, creare una serie di finti playerall’interno dei server di gioco, in modo dabloccare delle partire o mandare in bloc-co il sistema per un numero troppo alto digiocatori da gestire.
E i produttori cosa dicono?
Se da un lato questo lavoro è veramenteapprezzabile, come dice lo stesso Luigi:“Sto ancora aspettando una patch odalmeno una risposta da EA riguardo il buf-fer-overflow in Need for Speed Hot Pursuit2 segnalatogli molti mesi fa”. C’è quindi chisonnecchia davanti a questi problemi o chisi limita a dire “il gioco non è più supporta-to”.
ConclusioniCome si poteva immaginare, anche ivideogiochi nascondono dei problemi disicurezza, l’aspetto grave della vicenda èperò che a pochi pare interessare la lorosoluzione, come se si trattasse di softwa-re di serie B.
Bibliografia[1] http://www.baccan.it, sito di riferimen-
to per Low Level.[2] http://aluigi.altervista.org, il sito di
Luigi Auriemma
GAME HACKINGAvete mai giocato, in rete, a Medal Of Honor, Half-Life, Unreal, Colin McRae Rally,The Rage o Quake 3? Non vi si è mai bloccato il server? Non avete mai notato delle cose strane? C’è chi dedica molte ore delle sue giornate a scoprire vulnerabilità all’in- terno di questi programmi
a cura di Matteo Baccan > [email protected]
addirittura di formattare un sorgente in base al linguaggio
di programmazione in cui è stato scritto. In questo articolo
abbiamo visto alcuni package che ci semplificano le ultime
due operazioni, e che possono rendere i nostri documenti
ancora migliori con minore sforzo “programmativo”.
Bibliografia[1] C. Heinz, Listings.dtx Version 0.2000, www.ctan.org,
1999.[2] G. Pignalberi, Codici sorgente in documenti LaTeX, Dev
n. 120, Gruppo Editoriale Infomedia, Lug. - Ago. 2004.
[3] G. Pignalberi, LaTeX, diagrammi sintattici e grammati- che, Dev n. 122, Gruppo Editoriale Infomedia, Ott.
2004.
[4] P. Williams, Algorithms, www.ctan.org, 1996.
È laureato in Scienze dell’Informazione presso l’Università La Sapienza di Roma. Si occupa, per passione, di Algoritmi Genetici applicati all’elaborazione delle immagini, ma è stato a lungo occupato, per professione, in problematiche legate all’elaborazione di testi: riconoscimento della lingua,compressione, retrieval. Il tutto sempre per sistemi Unix.
94 DEV > n. 123 novembre 2004>>
Intermediate
LISTATO 1 Sorgente LaTeX del documento che includeil programma C per il calcolo approssimatodi p, con descrizione inline di un’istruzione
\documentclass[a4paper, 12pt]{article}
\usepackage{listings}\lstloadlanguages{C}
\begin{document}\lstset{language=[ANSI]C}\begin{lstlisting}[captionpos=b,%
caption={Programma C per il %calcolo approssimato di $\pi$}]{}
#include <stdio.h>#define SIGN -1
main () {double pi = 4.0;int lim, i;char sign;
printf (“Scrivi l’approssimazione: “);scanf (“%d”, &lim);for (i = 3, sign = SIGN; i <= lim; i += 2, sign *= SIGN)
pi = pi + sign * 4.0 / i;printf (“Pi ~ %f\n”, pi);return 0;
}\end{lstlisting}La parte fondamentale del calcolo \`e stata fatta con``\lstinline|pi = pi + sign * 4.0 / i;|’’.\end{document}
Gianluca Pignalberi
Download del progetto
Scarica il progetto completo di questo articolo all’indirizzo:
ftp://ftp.infomedia.it/pub/DEV./Listati/Dev123/ls-latex.zip