[Python] \b e \r in file di testo
enrico franchi
enrico.franchi a gmail.com
Dom 21 Giu 2015 21:12:49 CEST
2015-06-13 22:34 GMT+01:00 Alessandro Re <ale a ale-re.net>:
> 2015-06-13 18:31 GMT+01:00 Matteo Scarpa <matteoscarpa92 a gmail.com>:
> > Perchè io ho trovato un repository github per la gestione del LaTeX in
> > python ma da quanto vedo non permette la modifica ma solo la
> > generazione dei file LaTeX: https://github.com/JelteF/PyLaTeX .
>
> Darò un'informazione forse interessante e sicuramente non richiesta,
> dato che anche io mi son trovato nella situazione di dover scrivere
> uno script per modificare un file LaTeX.
>
> Purtroppo, sembra che per fare il parsing di uno script LaTeX non sia
> sufficiente un "normale parser", quindi - fondamentalmente -
> modificare un generico sorgente di latex potrebbe essere molto
> complicato. Più specificatamente, *per il parsing* di TeX è necessaria
> una macchina di Turing e non basta un automa a pila.
>
C'e' una leggera sottigliezza che pero' e' chiave.
Intanto i linguaggi di programmazione per la maggior parte *non* sono
context-free. Punto e fine della fiera.
Eppure li descriviamo con una grammatica context-free, a cui di fatto
aggiungiamo delle regole "fuor di grammatica" che ficchiamo essenzialmente
quando navighiamo l'albero di sintassi astratta o qualcosa di simile.
TeX e' particolarmente peloso? Si, lo e'. L'autore del post che linki
spiega alcuni dei motivi per cui e' cosi' peloso; ma il problema non e' che
per parsare TeX hai bisogno di qualcosa di piu' complicato di un automa a
pila. Teoricamente per parsare parecchi linguaggi hai bisogno di qualcosa
di piu' complicato di un automa a pila: e infatti tipicamente quello che si
scrive e' un set di regole che associano esecuzione di codice arbitrario ad
una determinata regola della grammatica (e questa cosa e' decisamente piu'
potente di un automa a pila: di fatto e' potente quanto una macchina di
turing -- per quanto idiota sia farlo, puoi associare codice che non
termina ad una produzione --).
Leggendo la spiega si capisce *davvero* perche' tex e' cosi' noioso.
Probabilmente e' noioso almeno quanto C++ (altro linguaggio che ha proprio
bisogno di una macchina di turing per essere parsato. Ma comunque la
maggior parte dei parser tentano di usare una grammatica context-free per
quanto possibile e poi spostare aggiungere una parte di codice per
supplementare.
Dopo di che, alla fine della fiera, il compilatore tex e' una robba
veramente complicata, parecchio vecchiotta e qualcosa mi dice che tirare
fuori la parte che fa il parsing e che ti da in mano una qualche
rappresentazione intermedia sia veramente complicato. Il che vuole anche
dire che uno se lo piglia cosi' come e'.
Cioe', il fatto che tex sia complicato da parsare non sarebbe cosi'
drammatico se il compilatore tex "ufficiale" fosse costituito da un
front-end isolato che tutti possono wrappare e linkare. Esattamente come
scrivere codice che manipola Python in Python (o Go in Go) non e' troppo
difficile proprio perche' si ha accesso gia' nella libreria standard ad una
libreria che lo fa.
In altre parole, Alessandro, hai spiegato bene perche' e' complicato
parsare Tex, pero' di per se quella e' solo una parte del problema:
l'assenza di modularita' nel compilatore ufficiale e' quello che chiude il
cerchio del macello.
Detto questo, credo che ad oggi molti documenti siano puro latex che non
chiamano direttamente tex. E, sempre che io sappia (ma non sono certo)
latex, fintanto che non usa direttamente tex, e' sensibilmente piu'
semplice. Quindi e' vero che una libreria che deve gestire tex arbitrario
e' un incubo, ma forse una libreria che gestisce latex e un subset
ristretto di tex potrebbe coprire il 95% degli utilizzi con uno sforzo che
e' il 5% di quello per re-implementare completamente un front-end per tex.
--
.
..: -enrico-
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20150621/70ea04bf/attachment.html>
Maggiori informazioni sulla lista
Python