Newsgroup: it.comp.java
Titolo: Valutare espressioni





Salve a tutti


Devo scrivere un programma che valuta 
interattivamente una successione di istruzioni del tipo:


    

variabile=espressione
 


e poi mostrare subito dopo a video il risultato di 
ogni singola istruzione nel modo seguente:


    

variabile=valore


 


Le espressioni si valutano senza parentesi, in 
ordine da sinistra a destra, senza tenere conto di priorità di operatori. Quando 
si scrive una parola speciale (es. "RIS") si valuta il risultato e lo si scrive 
su output.


 


Ecco un esempio possibile di interazione (in 
neretto ciò che l'utente scrive):


a=5 RIS


    a=5


b=a-4 RIS


    b=1


c=a+b-2 R
IS


    c=4


a=c*x RIS


   Errore: 
x non definita


a=rem RIS


    Variabile a 
eliminata


b=b+a*2 RIS


    Errore: a non 
definita


 


 


Grazie a tutti x ogni suggerimento su come 
procedere



devi usare le espressioni regolari + uno scanner
guardati le API di java5 e li troverai le classi
Scanner
Regexp
Pattern

 ha scritto nel 
messaggio 
news:m41jg1d8nej9h3u9q...@4ax.com
...


 scarna di esempi)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class MyPattern {
        public static void main(String[] args) {
 
                Pattern p = Pattern.compile( "(\\d+)(\\ )*([\\+\\-\\*\\/])(\\ )*(\\d+)" );
                Matcher m = p.matcher("5 / 4");
 
                StringBuffer sb = new StringBuffer();
 
                while(m.find())
                        m.appendReplacement(sb, "left operand = $1, " +
                                        "right opernad=$5, " +
                                        "operation=$3");
 
                m.appendTail(sb);
 
                System.out.println(sb);
        }
}

     variabile=valore
Se NON è un esercizio universitario:
- usare javacc, fra l'altro il tuo esempio è semplicissimo,
oppure dare uno sguardo a 
- Building Parsers with Java di S.Metsker
Se E' un esercizio:
ripassare il dragon book
ciao
uL
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

uL
Io per un esame avevo da costruire un parser per i documenti sgml del
dataset Reuters, e per questo ho usato javacc per costruirlo (Era
abbastanza complesso) e il risultato è stato ottimo. Lo ho usato
(javacc), anche per un altro esame in cui si doveva costruire un
piccolo interprete per sistemi a regole (tipo clips) e anche li il
risultato è stato buono. quindi consiglio JavaCC solo se la grammatica
è complessa, altrimenti usa le classi di java. Imparare ad usare
javacc per grammatiche piccole e poco articolate è una perdita di
tempo, visto che nn cè molto di documentazione su javacc.

ripassare il dragon book
Si, è un esercizio universitario.
Avevo pensato ad uno StringTokenizer, ma sono casini per riconoscere i 
numeri dai nomi di variabili 

 tempo, visto che nn cč molto di documentazione su javacc.
beh, se si conosce l'argomento č molto semplice usare javacc. BTW, il
libro di Metsker ha un approccio alternativo per farsi le cose a mano e va
benissimo per cominciare. Tra l'altro una volta capito bene il materiale
di Metsker diventa piů semplice anche usare javacc
