Newsgroup: it.comp.lang.c++
Titolo: Sviluppare un interprete di comandi

Avete qualche consiglio da darmi?
Consigli su come sviluppare un parser?

 Consigli su come sviluppare un parser?
Dipende molto dalla complicazione del linguaggio da interpretare. Si va
da una sequenza di if/else all'utilizzo di generatori di parser,
passando per la scrittura esplicita di un parser guidato dalla sintassi.
Prova a fare qualche esempio.
Ciao,
Nicola

 Consigli su come sviluppare un parser?
[MEMORIES]
In prima superiore (13 anni) scrissi il mio primo interprete Logo in 
basic... 8)
-- 
Luc.

 basic... 8)
Accidenti quante cose che hai fatto a 13 anni,
potresti scrivere un libro...
-- 
Posted from  [80.105.34.80] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 potresti scrivere un libro...
Beh, ero il classico ragazzo che passava il week-end a programmare (e a 
ri-programmare meglio il software fatto da altri)... 8)
-- 
Luc.

 Consigli su come sviluppare un parser?
Leggere i manuali di lex e yacc (o delle versioni free GNU flex e
bison) ed usare quelli.  lex/flex e' l'analizzatore lessicale, e
yacc/bison il parser (LALR). 
http://www.gnu.org/
 per manuali e sorgente.
-- 
Maurizio Loreti                         
http://www.pd.infn.it/~loreti/mlo.html
Univ. of Padova, Dept. of Physics - Padova, Italy            
lor...@pd.infn.it



Soggetto:Re: Numeri Casuali 
Newsgroups:it.comp.lang.c++
Data:2001-11-16 03:20:08 PST
"PS: uno dei miei primi giochi implementati ad 11 anni su
C64... 8-OOO"
Soggetto:Re: Numeri Casuali 
Newsgroups:it.comp.lang.c++
Data:2001-11-16 03:20:08 PST
"Io ero in grado di fare programmi di discreta qualità già
in prima media (12 anni)"
Soggetto:Re: Giocare a 7 1/2 col C++ 
Newsgroups:it.comp.lang.c++
Data:2000/05/26 
"Non penso sia molto difficile, io lo feci in Basic una
dozzina di anni fa (a 15 anni) e non era venuto male"
Ma i fumetti quando li leggevi ? ;P
-- 
Andrea Laforgia
#exclude <windows.h>

Consigli su come sviluppare un parser?
Dipende molto da cosa ci devi fare e dal tipo di
versatilita' richiesta. Io sono un tifoso dei
parser ricorsivi a discesa ma in giro trovi
molta piu' letteratura sui bottom-up. Ci sono
strumenti come lex/yacc (e varianti) che possono
generarti un parser in automatico ma personalmente
li ho usati in poche occasioni e preferisco la
scrittura a mano.
Il linguaggio che devi implementare e' un vero
e proprio linguaggio di programmazione ? Typed o
typeless ? Deve supportare funzioni utente ?
Definizione di tipi utente ? Preferisci generare
pseudo-codice/codice oppure eseguire direttamente
l'albero una volta fatto il parsing ?
Forse ti basta un inteprete "un comando alla
volta" come quello dei file batch del dos ?
Le possibilita' sono veramente infinite... forse
dovresti spiegare a cosa ti serve; magari nel tuo
caso e' meglio integrare un interprete gia'
disponibile come python o tcl con il tuo
programma C++ (sempre che tu non lo voglia fare
solo a scopo didattico)
Andrea

 Consigli su come sviluppare un parser?
Se il linguaggio e' ragionevolmente semplice io procedo cosi': disegno
il diagramma dell'automa a stati che riconosce i token del linguaggio;
in base a questo scrivo l'analizzatore lessicale, che di solito e' una
funzione con un ciclo sui caratteri in ingresso ed uno switch
all'interno, dove ad ogni stato corrisponde uno stato.
Dopo di che mi scrivo la grammatica BNF, sulla quale mi baso per
scrivere il parser, di solito a discesa ricorsiva. In genere disegno una
classe per ogni regola di produzione, che ha come membri gli elementi a
destra della regola stessa. Ciascun costruttore chiede all'analizzatore
lessicale i token che gli competono in base ai quali istanzia ulteriori
classi corrispondenti ad altre regole di produzione. Ad esempio in un
parser per espressioni aritmetiche potrei avere qualcosa come:
class Nodo {
  public:
    virtual double calcola() = 0;
};
class Espressione : public Nodo {
  public:
    Espressione(Lexer & lx) {
      t1 = new Termine(lx);
      operatore = lx.getToken();
      if ( *operatore == PIU || *operatore == MENO )
        t2 = new Termine(lx);
      else
        throw Errore();
    };
    double calcola() {
      if ( *operatore == PIU )
        return t1->calcola() + t2->calcola();
      else
        return t1->calcola() - t2->calcola();
    }
  Termine * t1;
  Token * operatore;
  Termine * t2;
};
Buon lavoro!
Ciao,
Nicola

 Ma i fumetti quando li leggevi ? ;P
Sei un grande! Hai ragione, forse qualcuno potrebbe dire che ho 
sacrificato troppo alla programmazione in gioventů, ma da qualche anno ne 
raccolgo i (succulenti) frutti... 8)
PS: come sarebbe bello poter ritrovare i vecchi sorgenti, magari da 
provare su un moderno emulatore... ;)
-- 
Luc.

Il mio scopo è quello di generare un linguaggio di script x gameboy
advanced, in particolare per gestire un rpg, chiedo scusa se sono stato
volutamente un po' vago per vedere se c'erano spunti a me nuovi

Credo di averne trovati di veramente buoni, ma mi raccomando continuate a
mandarne ;-)

advanced, in particolare per gestire un rpg
Non so quanto puoi riuscrire a fare per il gameboy, non č molto
potente, tieni presente che la versione piů vecchia ha piů di 10 anni
e non ci sono stati miglioramenti veramente significativi (almeno
prima dell'advanced, non lo conosco).
-- 
                    Marco Barisione (ICQ 84277092)
Se sei interessato alla creazione di un newsgroup generico in cui si
possa parlare di quei linguaggi di programmazione senza un gruppo
apposito vota per it.comp.lang su it.news.votazioni.

 potente
oltre al fatto che si poteva fare con qualche acrobazia anche su GB, il 
GB advance è completamente diverso (e ti assicuro che si può fare questo 
ed altro). Ad ogni modo direi che {G}eppo potrebbe spostare il thread su 
it.comp.giochi.sviluppo
Maurizio
-- 
Maurizio Sambati
Skice Software
E-mail: 
gsm...@inwind.it
--------------------------

Ti ringrazio x la segnalazione del newsgroup che non conoscevo, ho postato
anche a loro, cosě posso avere qualche dritta in piů ;)

prima dell'advanced, non lo conosco).
Beh l'advanced è un bel pò più potente del vecchio gameboy, è in pratica
un SNES miniaturizzato ;)
-- 
  _  _ >>Now on Linux<<  _     || ICQ number.................Non lo uso
 | \| |___ _____ ___ ___|_|___ || Home-Page ................Non ce l'ho
 | .` | -_|     | -_|_ -| |_ -||| E-Mail................Non l'avrai mai
 |_|\_|___|_|_|_|___|___|_|___||| Un Nemesis che ha pochi e-contatti ;)

 basic... 8)
ma come hai fatto a passare dalla prima media alla prima superiore in 
un anno? :-)
Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it