Quando si esegue l'analisi predittiva basata su tabella su una grammatica LL (1) (come spiegato in dettaglio qui per esempio), come possiamo aumentare l'algoritmo per consentire l'elaborazione di azioni semantiche mentre si esegue l'analisi.
Una tecnica potrebbe usare lo stesso stack nell'algoritmo definendo le regole di produzione con i marcatori per le azioni semantiche e spingendole marcatori sullo stack nello stesso modo in cui viene eseguito con terminali / non-terminal nel resto della regola di produzione e quindi elaborando il codice designato dal marcatore quando viene estratto dallo stack.
Così dato qualcosa di simile (dal libro di Dragon - azioni in parentesi graffe):
rest -> + term { print('+') } rest
| - term { print('-') } rest
| Epsilon
term -> 0 { print('0') }
| 1 { print('1') }
...
| 9 { print('9') }
Possiamo aggiungere un marcatore per ogni tipo di azione, e inserirlo nello stack con il resto dei termini di produzione, e quindi eseguire il codice corrispondente quando l'indicatore viene espulso dall'algoritmo.
È così che si fa o ci sono approcci migliori?