Originariamente inviato da Vincenzo1968
Il compito principale del parser è quello di verificare che il codice sia sintatticamente valido. Per esempio, se abbiamo in input:
il parser, quando incontra il token "3", deve restituire il messaggio d'errore "Espressione non valida. Ci si aspettava un operatore(+,-,*,/); trovato invece operando".
Nel caso di input sintatticamente valido, il parser deve eseguire le azioni semantiche. Per esempio, nel caso dell'espressione
il parser lavora come segue:
- chiama la funzione GetNextToken() che restituisce il token "5". Il token viene piazzato sullo stack degli operandi.
- chiama la funzione GetNextToken() che restituisce il token "+"; il token viene piazzato sullo stack degli operatori.
- chiama la funzione GetNextToken() che restituisce il token "3". Il token viene piazzato sullo stack degli operandi.
- chiama la funzione GetNextToken() che restituisce il token di fine input, EOF;
L'azione finale consiste nel prelevare un operatore dallo stack degli operatori e due(o uno, se l'operatore è unario) operandi dallo stack degli operandi, eseguire l'operazione e piazzare il risultato in cima allo stack degli operatori.
Nel nostro esempio preleviamo l'operatore "+" dallo stack degli operandi e due operandi dallo stack degli operandi: il primo operando prelevato, "3" è l'operando destro. Il secondo operando prelevato, "5" è l'operando sinistro. Eseguimo l'operazione, 5 + 3 e piazziamo il risultato, 8, in cima allo stack degli operandi. Poiché lo stack degli operatori non contiene altri operandi, abbiamo terminato e lo stack degli operandi, contiene, in cima, il risultato dell'espressione, 8.