Newsgroup: it.comp.lang.visual-basic
Titolo: [?] annotazione polacca inversa (credo)

Se non sbaglio si chiama così quella tecnica per spezzare le espressioni in
stacks di operatori e operandi.
Es.
1+2+3
0peratori   Operandi
---------   --------
    +           1
    +           2
                3
Questo sistema è utilizzato per ra risoluzioni di espressioni, passando la
stringa nell'esempio e avendo come ritorno il risultato (6).
Ora vorrei avere delle fonti sull'argomento.
In particolare: un parser del genere è tutto sommato piuttosto semplice da
realizzare.
Il problema nasce quando ci sono operatori con priorità diverse (es. 1+2*3,
il 2*3 va fatto prima del 1+), come ci si comporta?
Grazie ciao



CI sarà sicuramente un metodo migliore, però in mancanza potresti memorizzare in un array le
posizioni all'interno della stringa degli operatori, poi eseguire le operazioni con le priorità,
sapendo che i valori si trovano tra l'operatore precedente (o il primo carattere della stringa) e
quello successivo (o l'ultimo della stringa)
in pratica numero=val(mid(stringa,operatore(i),operatore(i+1)-operatore(i)))
o qualcosa del genere...
fammi sapere!
Ciao,
Moreno
#sirri#@#morenosoft#.com
(togliete "#" dall'indirizzo)
Moreno Sirri VB Site - 
http://www.msvbsite.net
---------------------------------------------------------------------------
Le risposte alle tue domande le trovi sul Sito Comune di questo NewsGroup:
 
http://www.it-lang-vb.net
---------------------------------------------------------------------------

o qualcosa del genere...
:) hehe, non č cosě semplice.
Ciao



mmm.... cos'č che mi č sfuggito?


 wrote in message
news:tcdO6.313$d8....@news2.tin.it...

Un certo Mauro, su free.it.programmazione.visualbasic mi ha inviato progetto VB
con l'esempio per poter valutare le espressioni.
Il progetto contiene 3 classi, una delle quali trasforma un operazione in
annotazione polacca inversa.
Se ti interessa il codice, dimmelo che te lo invio.
Poi, se vuoi, potremmo parlare di una collaborazione per inserire in questa
classe le funzioni matematiche di VB, tipo sin(), tan(), sqr(), ecc....
Ciao!
Esteban
Hosted by 
www.seber.it

 ha scritto nel messaggio
news:3ZfO6.3544$h9.5...@news.infostrada.it...


 classe le funzioni matematiche di VB, tipo sin(), tan(), sqr(),
ecc....
---> leonardo

 wrote in message
news:3ZfO6.3544$h9.5...@news.infostrada.it...



Mi hai tolto le parole di bocca zio :)
www.it-lang-vb.net
 sezione leonardo
Ciaotutti,
Asterix

 writes:
Z> Se non sbaglio si chiama così quella tecnica per spezzare le espressioni in
Z> stacks di operatori e operandi.
Notazione,  non  annotazione.  Ed  è un  formalismo  equivalente  alla
notazione algebrica cui ci abituano a scuola anche se fondamentalmente
diverso (e più facilmente implementabile).
Z> In particolare: un parser del genere è tutto sommato piuttosto semplice da
Z> realizzare.
Z> Il problema nasce quando ci sono operatori con priorità diverse (es. 1+2*3,
Z> il 2*3 va fatto prima del 1+), come ci si comporta?
Si usa una struttura ad  albero. Credo sia la tecnica utilizzata nelle
classi di cui hanno già parlato.  Ma il VB è l'ultimo dei linguaggi in
cui lo implementerei.
--
Gian Uberto| main(){printf(&unix["\021%six\012\0"],(unix)["have"]+"fun"-0x60);}
Lauri      |                        David Korn, 1987 ioccc best one liner 
(aka saint)|-------------------------------------------------------------------
em@ail: 
sa...@eng.it
 ( vedere X-nospam nello header - see X-nospam in header )



Spiegati meglio... scusa ma sono un po' ignorante...


 Spiegati meglio... scusa ma sono un po' ignorante...
niente di cui scusarsi, in effetti era un po' sintetica :)
ti dira' meglio zanna, cmq:
sul fam/oso/igerato sito comune c'e' una sezione leonardo, diciamo open
projects svolti da piu' persone con un coordinamento. questa mi sembra
una cosa che potrebbe interessare molte persone e non sarebbe male se i
risultati della ricerca finissero li'.
ciao, a.

classi di cui hanno già parlato.
Puoi essere più preciso?
Ciao

Spiegati meglio... scusa ma sono un po' ignorante...
Potrebbe essere un'idea, ma:
(1) servono le autorizzazioni dell'autore per la pubblicazione e modifica
del sorgente.
(2) sul SC ho trovato già qualcosa del genere, ma non mi soddisfava
completamente.
(3) volevo fare qualcosa che fosse il più veloce possibile (che per VB è già
un eufemismo), il che escluderebbe le classi (forse).
Comunque mi interessa molto. Puoi inviarmelo?
Grazie, Ciao
--
           .-.         .-.         .-.
.-.       /   \       /   \       /   \       .-.
  ----- 
http://www.murialdo.it/it_lang_vb
 -----
    \   /       \   /       \   /       \   /
     '-'         '-'         '-'         '-'
   Partecipate al progetto Leonardo proponendo
   nuove idee e aiutando a svilupparle

classe le funzioni matematiche di VB, tipo sin(), tan(), sqr(), ecc....
Ho appena pulito, corretto, dichiarato le variabili, modificato e aggiornato
la routine di Giovanni Di Gennaro presente sul Sito Comune.
In pratica della sua funzione è rimasto solo l'idea di fondo che devo dire è
piuttosto ingegnosa (al contrario dell'implementazione che è oscena).
Ora ha già il supporto di funzioni e persino di variabili.
Per l'implementazione di nuove funzioni/operatori c'è solo il limite della
fantasia (sempre ammesso che faccia correttamente i calcoli :) ma sembra di
sì).
Mi resta fuori solo il problema di funzioni con più di un parametro (che
risolverò nei prossimi giorni).
Metterò il tutto sotto Leonardo quando avrò una bozza decente del tutto.
Il mio progetto finale (che per ora è in valutazione di fattibilità) è
piuttosto ambizioso: un linguaggino di script con il motore interamente
scritto in VB :P
Ovviamente il tutto sarà free, e ogni aiuto è bene accetto.
Ciao

> classi di cui hanno già parlato.
Z> Puoi essere più preciso?
Beh ad esempio partendo dall'espressione
	-2 * ( 3 + 5 )
si arriva a
	* 
       / \
     -2   +
         / \
        3   5
ed attraversando l'albero dai in pasto alla macchina RPN i dati con questa
regola
pushRPN(nodo)
	se nodo è un operatore binario(*)
		pushRPN(nodo.figlio_sinistro)
		pushRPN(nodo.figlio_destro)
		applica_operatore
	altrimenti
		push valore del nodo
	fine_se
fine
Ma a monte c'è la parte tosta (una buona fetta dell'Aho, Sethi, Ullman sui
compilatori) di separare la stringa di ingresso "-2 * ( 3 + 5 )" in token
riconoscere i vari token e creare la struttura come operazione collegata.
Come diceva  qualcuno, ci vorrebbero lex  e yacc (o bison  e flex) che
sparano fuori codice VB oppure  fare tanto bel lavoro prima a tavolino
e poi alla tastiera.
