Sei sulla pagina 1di 5

DEV DEVeloping Software Solutions n.

122 ottobre 2004

LaTeX, diagrammi sintattici e grammatiche


di Gianluca Pignalberi
` Quando compiliamo della documentazione tecnico-scientica e frequente dover riportare dei brani della grammatica di un linguaggio o ` dei diagrammi sintattici. Come farlo se lo strumento delezione e LaTeX?

Gianluca Pignalberi ` E laureato in Scienze dellInformazione presso ` lUniversita La Sapienza di Roma. Si occupa, per passione, di Algoritmi Genetici applicati allelaborazione delle imma` gini, ma e stato a lungo occupato, per professione, in problematiche legate allelaborazione di testi: riconoscimento della lingua, compressione, retrieval. Il tutto sempre per sistemi Unix.

pubblicato su WWW.INFOMEDIA.IT stampa digitale da Lulu Enterprises Inc. stores.lulu.com/infomedia


Infomedia
` Infomedia e limpresa editoriale che da quasi venti anni ha raccolto la voce dei programmatori, dei sistemisti, dei professionisti, degli studenti, dei ricercatori e dei professori dinformatica italiani. Sono pi` di 800 gli autori che hanno realizzato per le teu state Computer Programming, Dev, Login, Visual Basic Journal e Java Journal, molte migliaia di articoli tecnici, presentazioni di prodotti, tecnologie, protocolli, strumenti di lavoro, tecniche di sviluppo e semplici trucchi e stratagemmi. Oltre 6 milioni di copie distribuite, trentamila pagine stampate, fanno di questa impresa la pi` grande ed u inuente realt` delleditoria specializzata nel campo della a programmazione e della sistemistica. In tutti questi anni le riviste Infomedia hanno vissuto della passione di quanti vedono nella programmazione non solo la propria professione ma unattivit` vitale e un vero a divertimento. ` Nel 2009, Infomedia e cambiata radicalmente adottando ` un nuovo modello aziendale ed editoriale e si e organizzata attorno ad una idea di Impresa Sociale di Comunit` , a partecipata da programmatori e sistemisti, separando le attivit` di gestione dellinformazione gestite da un board a comunitario professionale e quelle di produzione gesti` te da una impresa strumentale. Questo assetto e in linea con le migliori esperienze internazionali e rende Infomedia ancora di pi` parte della Comunit` nazionale degli u a sviluppatori di software. ` Infomedia e media-partner di manifestazioni ed eventi in ambito informatico, collabora con molti dei pi` imporu tanti editori informatici italiani come partner editoriale e fornitore di servizi di localizzazione in italiano di testi in lingua inglese.

Limpaginazione 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 article 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 sono riportate nella sezione Copyright alla ne di ciascun 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 contenuto 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 totale dei testi e delle immagini per scopo didattico purch e vengano integralmente citati gli autori e la completa identicazione della testata. Manoscritti e foto originali, anche se non pubblicati, non si restituiscono. Contenuto pubblicitario inferiore al 45%. La biograa dellautore riportata nellarticolo e sul sito www.infomedia.it e di norma quella disponibi` le nella stampa dellarticolo o aggiornata a cura dellautore stesso. Per aggiornarla scrivere a info@infomedia.it o farlo in autonomia allindirizzo http://mags.programmers.net/moduli/biograa

LaTeX, diagrammi sintattici e grammatiche


di

Gianluca Pignalberi > gpignalberi@infomedia.it

Quando compiliamo della documentazione tecnico-scientifica frequente dover riportare dei brani della grammatica di un linguaggio o dei diagrammi sintattici. Come farlo se lo strumento delezione LaTeX?

nostri documenti tecnico-scientifici potrebbero essere utilmente spartani ma alcune volte proficuo, se non necessario, inserire dei brani di grammatica del linguaggio o dei diagrammi sintattici. Se un comune word processor si trova a proprio agio nel formattare le produzioni grammaticali (non detto che lo sia lutente alle prese con il menu dello stile associato a determinate parti del testo), potrebbe non esserci uno strumento che, con poco sforzo, aiuti a creare dei diagrammi sintattici. Lutente che abbia deciso di usare LaTeX per scrivere i propri documenti pu, con una curva dapprendimento meno ripida dellatteso, trarre beneficio da quei package che forniscono gli strumenti adeguati.

(lo scope) dellincarico entro i limiti stessi dellambiente:


\begin{shortverb}{\|} %da qui il testo delimitato da | %viene rappresentato verbatim <testo> \end{shortverb} %qui finisce il limite del potere %di |

Un gentile approccio
Il package che prenderemo in considerazione in questo articolo syntax [3], che ci aiuta nella rappresentazione di grammatiche BNF e diagrammi sintattici, ma fornisce anche degli ambienti che ci permettono una migliore rappresentazione di alcune parti del documento, quali elementi sintattici e caratteri underscore. Inoltre, sovrapponendosi ai package shortvrb [1] e fancyvrb (del quale ci siamo occupati in [2]), fornisce anche un meccanismo per abbreviare la sintassi del comando \verb. Partiamo dalla fine vedendo come inserire del testo verbatim. Il package in esame fornisce il comando \shortverb e lambiente shortverb. Il primo, mediante la sintassi
\shortverb{\|}

Uno dei limiti che lautore di syntax imputa a TeX/LaTeX che il carattere di underscore usato troppo corto se usato negli identificatori. Vero o no che sia, il package ridefinisce lunghezza e posizione del carattere in oggetto, facendo in modo che non si debba far precedere lo stesso dal carattere di escape (\) per poterlo scrivere in un testo. Il suo uso in ambiente matematico rimane altres invariato. Se in un testo vogliamo inserire elementi sintattici abbiamo due possibilit: come elemento non terminale, rappresentato in corsivo e tra parentesi angolari tramite
\synt{testo da rappresentare corsivo e tra parentesi}

oppure come testo letterale (ad esempio del testo che lutente debba immettere direttamente, comando o altro), rappresentato tra apici:
\lit{testo da rappresentare tra apici}

investe il carattere | della carica di delimitatore di un testo verbatim inserito nel testo normale. Possiamo revocare lincarico al carattere tramite
\unverb{\|}

Possiamo ottenere lo stesso effetto tramite lambiente omonimo, che palesa la portata
>> 92

(Si pu ottenere una rappresentazione senza apici usando la versione starred di lit). Tale rappresentazione comunemente usata per elementi terminali delle produzioni grammaticali. giudizio dellautore del package che la rappresentazione ottenuta mediante \lit sia migliore di quella ottenibile con \verb perch gli spazi sono pi stretti, sebbene verb tratti i caratteri speciali come caratteri normali, a differenza di lit. Il comando lit pu essere usato, cosa
DEV > n. 122 ottobre 2004

Intermediate

FIGURA 1

Forme abbreviate e corrispondenti risultati per formattare elementi sintattici allinterno di ambienti specializzati del package syntax

FIGURA 2

Esempio di regola di produzione BNF relativa alla definizione di funzione in C

impossibile con verb, anche dentro largomento di un comando.

Grammatiche BNF
Richiedere luso di synt per formattare brani di grammatiche BNF pu essere considerato alla stregua di una cattiveria, perch comporta molto tempo per scrivere il sorgente e rende molto pi difficile la sua lettura. Per agevolare la scrittura sono state pensate delle forme abbreviate dei comandi appena visti (visibili in Figura 1). Le abbreviazioni viste sono utilizzabili, in genere, solo allinterno degli ambienti specializzati di cui parleremo tra poco; per usarle nel testo bisogna utilizzare il comando \syntax, ad esempio
\syntax{<elemento sintattico>}

parametri, di variare come unetichetta viene stampata. I due parametri sono: il nome del non terminale (che verr stampato tra parentesi angolari) e il simbolo delloperatore di produzione. Questi verranno stampati agli estremi opposti delletichetta.

Diagrammi sintattici
Nonostante lespressivit delle grammatiche BNF, alcuni documenti sono scritti per essere letti da persone che non sono in grado di interpretare le espressioni in tale forma. Si tende, allora, a scrivere graficamente tali regole, mediante i cosiddetti diagrammi sintattici. Un diagramma sintattico racchiuso entro lambiente syntdiag, la cui sintassi la seguente:
\begin{syntdiag}[dichiarazioni]

genera la stessa formattazione vista nella prima riga di Figura 1. In alternativa ci viene fornito lambiente synshor ts, entro cui possiamo usare liberamente le forme abbreviate. Lambiente specializzato entro cui comporre le grammatiche grammar. Al suo interno si possono usare le forme abbreviate di cui sopra. Ogni regola di produzione dovrebbe essere separata, allinterno di un ambiente, per mezzo di una riga vuota ( possibile usare \\ per linterruzione di riga) dalla successiva regola. Inoltre una regola dovrebbe iniziare con un elemento non terminale racchiuso tra parentesi angolari, uno spazio, un operatore di produzione (in genere ::=). Regole di produzione molto lunghe possono essere suddivise su pi righe mediante il comando \alt. Un esempio di regola di produzione visibile in Figura 2, risultante dal sorgente LaTeX ripor tato nel Listato 1. Alcuni aspetti della formattazione di grammatiche BNF possono essere variati: \grammarparsep indica la quantit di spazio inserito tra le regole di produzione; \grammarindent contiene la quantit di spazio usata per indentare il membro destro di una regola dal margine sinistro del documento; \grammarlabel permette, prendendo due
Sorgente che formatta la definizione di funzione in C secondo la notazione grammaticale BNF

<testo> \end{syntdiag}

e che lavora formattando i diagrammi entro i limiti fisici del paragrafo nel documento. La versione starred libera di debordare, se non viene specificata una dimensione adeguata nellampiezza:
\begin{syntdiag*}[dichiarazioni][ampiezza] <testo> \end{syntdiag*}

Le dichiarazioni riguardano il tipo di freccia sinistra e destra (rispettivamente \left{<tipo>} e \right{<tipo>}, dove tipo e il suo risultato sono riportati in Figura 3).

Una grammatica deve combinare opportunamente elementi terminali, non terminali e operatori di produzione
Nei diagrammi che rappresenteremo ci saranno elementi alternativi ad altri, ed elementi che possono essere ripetuti. I due ambienti che consentono linserimento dei suddetti elementi sono, rispettivamente, stack e rep. Per default, ogni elemento scritto nel diagramma far parte del flusso principale stesso; volendo fare in modo che compaia nel flusso alternativo o ciclico occorre inserire una sequenza \\ subito dopo lapertura di detti ambienti: in tal modo lelemento verr scritto nel flusso prescelto e verr automaticamente inserito dello spazio bianco tra i vari flussi. Sebbene sia possibile inserire del testo non formattato allinterno di un diagramma sintattico, il risultato grafico
93 <<

LISTATO 1

\documentclass[12pt, a4paper]{article} \usepackage[rounded]{syntax} \begin{document} \begin{grammar} <definizione funzione> ::= <dichiaratore> <istruzione composta> \alt <specificatori dichiarazione> <dichiaratore> <istruzione composta> \alt <dichiaratore> <lista dichiarazioni> <istruzione composta> \alt <specificatori dichiarazione> <dichiaratore> <lista dichiarazioni> <istruzione composta> \end{grammar} \end{document}

DEV > n. 122 ottobre 2004

Intermediate

LISTATO 2

Esempio di documento LaTeX che formatta la definizione di funzione in C come un diagramma sintattico

\documentclass[12pt, a4paper]{article} \usepackage[rounded]{syntax} \begin{document} \begin{syntdiag} \begin{stack}\\ \begin{rep} <Specificatore dichiarazione> \end{rep} \end{stack} <Elemento dichiarativo> \begin{stack}\\ \begin{rep} <Dichiarazione> \end{rep} \end{stack} <Istruzione composta> \end{syntdiag} \end{document}

FIGURA 4

Diagramma sintattico, relativo alla definizione di funzione in C, disegnato con linee arrotondate o squadrate

sar estremamente povero. Per ottenere una formattazione corretta bisogna usare il comando \tok, che aggiunger dello spazio a destra e sinistra del testo, separandolo in maniera adeguata dai flussi. Rimangono attivi i comandi di formattazione riportati in Figura 1.

LaTeX dispone di un package che facilita la scrittura di grammatiche BNF e diagrammi sintattici
Quando includiamo il package syntax abbiamo la possibilit di specificare il tipo di linee da usare:
\usepackage[<tipo>]{syntax}

Vediamo lo stesso diagramma, relativo alla definizione di funzione in C, con entrambi gli stili. In Figura 4 sono riportati i diagrammi ottenibili dal Listato 2, semplicemente variando lopzione del package syntax. I diagrammi sintattici vengono suddivisi automaticamente in pi righe del documento, ma mai dentro un ambiente stack o rep. In ogni caso si pu forzare una separazione tramite \\. Un diagramma sintattico pu essere inserito in un ambiente grammar, anche se non allinterno di una produzione grammaticale, delimitandolo con la coppia \[[ \]].

Conclusioni
Nel nostro lavoro di informatici potrebbe capitare di dover completare i nostri documenti e manuali con regole di produzione grammaticale. Tramite il package syntax siamo in grado di inserire delle grammatiche secondo la notazione BNF, e di farlo in maniera coerente (senza dover impazzire con i menu di scelta degli stili di un comune word processor). Non necessariamente, per, gli utenti della nostra documentazione saranno in grado di decifrare dette regole di produzione; per il principio che unimmagine vale pi di mille parole, lo stesso package fornisce un ambiente che genera dei diagrammi sintattici, le cui sintassi e semantica dovrebbero essere pi immediatamente comprensibili anche ad unutenza non tecnica. Dora in poi saremo in grado aggiungere un tassello importante alla nostra capacit di produrre documenti altamente professionali con LaTeX, approfittando della semplicit e della coerenza mostrate da syntax.

Il tipo pu essere square o rounded, e ci determina come le linee dei cicli o delle alternative saranno raccordate al flusso del diagramma principale. Le linee squadrate di ripetizione hanno bisogno delle frecce per specificare la direzione del flusso, e quindi per distinguerle da quelle di alternativa, mentre le linee arrotondate sono autoesplicative: quelle di ripetizione rientrano in s stesse, mentre quelle alternative entrano dallesterno e vi escono.

Bibliografia
[1] F. Mittelbach, The shortvrb package, www.ctan.org, 2001. [2] G. Pignalberi, Codici sorgente in documenti LaTeX, Dev n. 120, Gruppo Editoriale Infomedia, Lug.-Ago. 2004. [3] M. Wooding, The syntax package, www.ctan.org, 1996.

Gianluca Pignalberi
laureato in Scienze dellInformazione presso lUniversit La Sapienza di Roma. Si occupa, per passione, di Algoritmi Genetici applicati allelaborazione delle immagini, ma stato a lungo occupato, per professione, in problematiche legate allelaborazione di testi: riconoscimento della lingua, compressione, retrieval. Il tutto sempre per sistemi Unix.
DEV > n. 122 ottobre 2004

FIGURA 3

Sintassi della dichiarazione delle frecce nei diagrammi sintattici e risultato ottenuto

>> 94

Potrebbero piacerti anche