[Python] alternative ad eval

Riccardo Lemmi riccardo a reflab.com
Gio 20 Mar 2014 08:56:16 CET


Balan Victor wrote:

>>
>> Siccome a naso quello che vuoi fare e' un semplice expression
>> language, hai comunque bisogno, a mio avviso di un vero parser.
>> Davvero, e' roba facile da scrivere, una volta che usi la libreria
>> giusta, e' piu' robusto e quando si spacca si capisce meglio perche'.
>>
> 
> quindi pyparsing?
> Facili da scrivere ... se uno ha basi solide sull'argomento. Io che, a
> parte un po su wikipedia, sono completamente ignorante nella materia
> mi trovo un po spaesato XD
> 
> ora cmq provo a vedere se riesco a creare qualcosina con pyparsing.
> 
> Alcune librerie ci sono, ad esempio:
>>   https://pypi.python.org/pypi/RestrictedPython
>> ce ne sono anche altre: cerca "restricted python" su pypi.
> 
> 
> Ho dato un'occhiata e, anche se fosse sicuro al 100%, non mi risolve
> il secondo problema: ossia evitare operazioni del tipo "10000 *
> 100000". Come ho scritto nel primo post gli utenti che generano queste
> stringhe sono solo utenti autorizzati. Quindi è difficile che facciano
> cose "stupide". E' molto più facile che commettano errori che possano
> saturare la macchina...

Allora qesta libreria mi pare più adatta:

  https://pypi.python.org/pypi/simpleeval

ma tieni conto che (per quello che mi ricordo da Informatica II) quel 
tipo di problemi dovrebbe far parte della categoria degli 'indecidibili' 
quindi ammesso che il problema sia risolvibile si deve comunque usare un 
linguaggio con un domino ridotto (in modo che non sia idempotente con la 
macchina di Turing), da cui la necessità usare una grammatica adeguata.

-- 
                                       Riccardo Lemmi


Maggiori informazioni sulla lista Python