Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Parsing di una stringa

  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    2

    Parsing di una stringa

    Premetto che non sono sicuro che il titolo sia corretto.
    Io ho bisogno di poter utilizzare il contenuto di una stringa contenente alcune operazioni (x es la funzione 2*(x+3*x)+2*x*x), in modo da sostituire alla x un valore a caso.
    Mi spiego meglio: ho una stringa per es
    String s = "2*(x+3*x)+2*x*x)";
    Ho bisogno di poter sostituire a quelle x un valore double qualsiasi, quindi ho bisogno che il contenuto di quella stringa sia sotto forma di double. E' possibile?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    E' possibile usando un parser algebrico.
    Esistono delle librerie di terze parti già pronte.

    Una è questa: http://sourceforge.net/projects/jep/


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Amaro C++, il gusto pieno dell'undefined behavior.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Parsing di una stringa

    Originariamente inviato da Abeduka
    Premetto che non sono sicuro che il titolo sia corretto.
    Io ho bisogno di poter utilizzare il contenuto di una stringa contenente alcune operazioni (x es la funzione 2*(x+3*x)+2*x*x), in modo da sostituire alla x un valore a caso.
    Mi spiego meglio: ho una stringa per es
    String s = "2*(x+3*x)+2*x*x)";
    Ho bisogno di poter sostituire a quelle x un valore double qualsiasi, quindi ho bisogno che il contenuto di quella stringa sia sotto forma di double. E' possibile?
    Per la sostituzione basta usare i metodi replace e/o replaceAll di String, mentre per il calcolo o usi una qualche libreria esterna o scrivi tu l'algoritmo, non mi viene in mente niente di già pronto nella libreria standard; se non sai proprio da dove partire googla riguardo al parsing di espressioni per farti almeno un'idea di una possibile strada da seguire. Se invece ce l'hai già esponila.
    effeffe

  5. #5

    Re: Re: Parsing di una stringa

    Originariamente inviato da Kaamos
    Per la sostituzione basta usare i metodi replace e/o replaceAll di String
    Eviterei, una sostituzione brutale che non sa nulla della grammatica dell'espressione può dare problemi - se ad esempio l'espressione fosse del tipo "exp(x^2)" una sostituzione di x con (ad esempio) 6 darebbe "e6p(6^2)", che non ha molto senso. La cosa giusta da fare è usare un parser che riconosca le variabili (come ad esempio quelli linkati), che tra l'altro danno potenzialmente prestazioni migliori (l'albero di parsing viene costruito solo all'inizio, non per ogni valutazione).
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2013
    Messaggi
    2
    Grazie mille, testerò e vi farò sapere

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2009
    Messaggi
    613

    Re: Re: Re: Parsing di una stringa

    Originariamente inviato da MItaly
    Eviterei, una sostituzione brutale che non sa nulla della grammatica dell'espressione può dare problemi - se ad esempio l'espressione fosse del tipo "exp(x^2)" una sostituzione di x con (ad esempio) 6 darebbe "e6p(6^2)", che non ha molto senso. La cosa giusta da fare è usare un parser che riconosca le variabili (come ad esempio quelli linkati), che tra l'altro danno potenzialmente prestazioni migliori (l'albero di parsing viene costruito solo all'inizio, non per ogni valutazione).
    Hai ragione, mi ero limitato a qualcosa di basilare non sapendo quanto fossero complicate le espressioni in questione.
    effeffe

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.