|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2006
Città: Perugia - San Benedetto del Tronto
Messaggi: 348
|
[Java]Da Stringa a Float.
Ciao a tutti
Ho un problema che non riesco a risolvere: All'interno della mia classe ho una variabile di tipo Codice:
String funzione = "x*x" Codice:
public float f(float x) {
return ????
In teoria il return deve essere la funzione scritta dall'utente in un Textfield. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Aug 2003
Città: Rimini
Messaggi: 422
|
L'unico modo che conosco e utilizzare un math espression parser. Le librerie standard non lo fanno, quindi le cose sono 2:
-se le espressioni da decifrare sono semplici scrivi un piccolo parser, con l'utilizzo delle espressioni regolari. -se le espressioni che devi calcolare possono essere complesse, cerca online un math espression parser gia fatto e usi quello. |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Potresti per esempio implementarti un'automa a stati finiti che analizzi l'espressione aritmetica e con un algoritmo ne calcoli il risultato.
Se ti servono degli esempi in merito ne trovi due molto chiari e semplici, anche se sono in linguaggio C: - Analizzatore lessicale per espressioni aritmetiche - Operator Precedence Parsing: calcolare il valore di un'espressione aritmetica (sono articoli scritti da un utente di questo Forum)
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
se usi java 6 puoi semplicemente usare Rhino così:
Codice:
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
String expression = "3 * 5 + 2";
jsEngine.put("expression", expression);
try {
double result = (double)jsEngine.eval("eval(expression)");
} catch (ScriptException ex) {
ex.printStackTrace();
}
__________________
Ultima modifica di ^TiGeRShArK^ : 25-03-2009 alle 18:25. |
|
|
|
|
|
#5 |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Ciao,
si, come dice Supertonno, potresti scaricare un parser bell'e pronto dalla rete. Ma, a parer mio, è più istruttivo(e, sempre IMHO, anche più divertente), costruirsi un parser per conto proprio. Un altro metodo per effettuare il parsing, oltre a quelli indicati da Banryu(che ringrazio per il parere positivo sui miei articoli; sono l'utente di cui parla Qui ne trovi un esempio: http://www.hwupgrade.it/forum/showthread.php?t=1929862 x TigerShark: credo che Blizzard abbia bisogno di gestire anche le variabili oltre alle costanti numeriche. Per fare questo è necessario implementare una tabella dei simboli. I link seguenti contengono un paio di esempi: http://www.ibm.com/developerworks/li...flexbison.html http://epaperpress.com/lexandyacc/index.html Si tratta di parser di tipo LALR(1) che utilzzano i tools Flex/Bison. Per Java è possibile utilizzare gli strumenti equivalenti: http://www.cs.princeton.edu/~appel/modern/java/JLex/ http://www.cs.princeton.edu/~appel/modern/java/CUP/ http://www2.cs.tum.edu/projects/cup/ Se si preferisce, invece, la tecnica top-down, è disponibile, tra i tanti, ANTLR: http://www.antlr.org/ P.S. sto preparando una mini guida su compilatori, interpreti e tecniche di parsing; seguirà un contest sull'argomento. Ultima modifica di Vincenzo1968 : 25-03-2009 alle 16:46. |
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
Comunque con Java 6 non deve scaricare assolutamente nulla dalla rete dato che Rhino è integrato nella VM.
__________________
|
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Cioè, per esempio, dove si trova la classe ScriptEngineManager? Sarò ubriaco ma non riesco a trovarlo
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#8 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Codice:
String funzione = "x*x" |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
Quote:
occhio che esiste solo da java 6 in poi ah, occhio che mi sono dimenticato un cast da Object a double, poichè tutti gli oggetti che rhino ritorna sono appunto Object edit: ora l'ho aggiunto...
__________________
Ultima modifica di ^TiGeRShArK^ : 25-03-2009 alle 18:25. |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
Per Vincenzo: ho trovato questa pagina che spiega la tecnologia condensata nel package javax.script. Ciao
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#11 |
|
Senior Member
Iscritto dal: Jan 2006
Città: Perugia - San Benedetto del Tronto
Messaggi: 348
|
Cavoli ragazzi, vi ringrazio molto. Adesso mi leggo tutte le guide che mi avete consigliato, considerando che vorrei provare a implementarlo da solo il parser.
Brevemente vi riassumo il programmino che ho fatto: l'applicazione è di tipo client/server, comunicazione via soap. Lato server grosso modo funziona quasi tutto come dovrebbe, ovvero cambiando il return del metodo Codice:
public float f(float x)
return *****
Adesso però devo riuscire a far sì che sia il client a scegliere quale funzione calcolare tramite un Textfield. Vi ringrazio ancora per i suggerimenti, cercherò di tenervi aggiornati. |
|
|
|
|
|
#12 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Scusate se riporto up il topic, ma sto studiacchiando il package javax.script. seguendo il tutorial alla pagina che ho linkato sopra, e stavo cercando delle implementazioni jsr-223 compatibili di terze parti di altri motori di scripting (nel JDk ver 1.6 viene fornita solo l'implementazione di Rhino).
Sono andato quindi a visitare la pagina pertinente di dev.java.net e ho trovato un elenco di motori di scripting, solo che non ho capito se sono riferimenti esterni a motori si scripting che si vuole supportare nel tempo o se sono già state create le relative implementazioni jsr-223 (l'elenco è presente sotto il titolo "Script Engines in this project (so far!)"). Mi interessa sapere in particolare se esiste l'implementazione per JEP (tra l'altro pertinente al problema dell'utente del thread). Qualcuno è in grado di darmi qualche delucidazione?
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) Ultima modifica di banryu79 : 27-03-2009 alle 12:39. |
|
|
|
|
|
#13 |
|
Senior Member
Iscritto dal: Jul 2002
Città: Reggio Calabria -> London
Messaggi: 12112
|
da quello che ho capito dovresti scaricarti i binari e poi fare qualcosa del genere:
Codice:
ScriptEngineManager m = new ScriptEngineManager();
ScriptEngine jepEngine = m.getEngineByName("JEP");
__________________
|
|
|
|
|
|
#14 | |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Quote:
sì confermo che bisogna scaricare i binari ma questi forniscono "solo" l'implementazione JSR-223; a parte poi bisogna scaricare l'implementazione del linguaggio del parser in questione (i binari scaricati sono organizzati in sottocartelle, una per ogni script engine JSR-223 implementation, e in ognuna è presente un file readme con i link appropriati e le istruzioni del caso). JEP non è freeware ma a pagamento, compilando un form si può ricevere il link per scaricare una versione trial. Grazie e ciao
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
|
#15 | |
|
Member
Iscritto dal: May 2006
Messaggi: 273
|
Quote:
|
|
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Feb 2002
Città: Trento
Messaggi: 962
|
Quote:
__________________
"Et Eärallo Endorenna utúlien. Sinome maruvan ar Hildinyar tenn' Ambar-metta!" -- Aragorn Elessar, Heir of Isildur Mixmar -- OpenSuSE 11.1 on AMD 64 3000+ on DFI LanParty nF4-D | GeForce 6600 GT + Thermaltake Schooner on Samsung 710N Storage -- ( 2 x Hitachi Deskstar 80 Gb + 1 x Hitachi 250 Gb ) = 1 RAID 5 + 1 Storage space LaCie Ethernet Disk Mini 250 Gb | HP - DV2150 EL MILAN CLAN |
|
|
|
|
|
|
#17 | |
|
Member
Iscritto dal: May 2006
Messaggi: 273
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:00.




















