<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2015-06-13 22:34 GMT+01:00 Alessandro Re <span dir="ltr"><<a href="mailto:ale@ale-re.net" target="_blank">ale@ale-re.net</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">2015-06-13 18:31 GMT+01:00 Matteo Scarpa <<a href="mailto:matteoscarpa92@gmail.com">matteoscarpa92@gmail.com</a>>:<br>
> Perchè io ho trovato un repository github per la gestione del LaTeX in<br>
> python ma da quanto vedo non permette la modifica ma solo la<br>
> generazione dei file LaTeX: <a href="https://github.com/JelteF/PyLaTeX" rel="noreferrer" target="_blank">https://github.com/JelteF/PyLaTeX</a> .<br>
<br>
</span>Darò un'informazione forse interessante e sicuramente non richiesta,<br>
dato che anche io mi son trovato nella situazione di dover scrivere<br>
uno script per modificare un file LaTeX.<br>
<br>
Purtroppo, sembra che per fare il parsing di uno script LaTeX non sia<br>
sufficiente un "normale parser", quindi - fondamentalmente -<br>
modificare un generico sorgente di latex potrebbe essere molto<br>
complicato. Più specificatamente, *per il parsing* di TeX è necessaria<br>
una macchina di Turing e non basta un automa a pila.<br></blockquote><div><br></div><div>C'e' una leggera sottigliezza che pero' e' chiave. </div><div><br></div><div>Intanto i linguaggi di programmazione per la maggior parte *non* sono context-free. Punto e fine della fiera.</div><div>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. </div><div><br></div><div>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 --).</div><div><br></div><div>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.</div><div><br></div><div>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'.</div><div><br></div></div>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.</div><div class="gmail_extra"><br></div><div class="gmail_extra">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.</div><div class="gmail_extra"><br></div><div class="gmail_extra">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.<br clear="all"><div><br></div>-- <br><div class="gmail_signature"> .<br>..: -enrico-</div>
</div></div>