Home
Accesso / Registrazione
 di 

Programmazione orientata agli oggetti in ANSI-C. Il riconoscitore

Programmazione orientata agli oggetti in ANSI-C. Il riconoscitore

Ad un alto livello di analisi, le espressioni vengono riconosciute dalla funzione sum() che internamente chiama scan() e restituisce una rappresentazione che può essere analizzata da process() e da delete().

Se non usiamo yacc riconosciamo le espressioni con un metodo ricorsivo, dove le regole "grammaticali" sono tradotte assieme a funzioni C equivalenti. Per esempio, una somma è un prodotto, seguito da zero o da più gruppi, ognuno dei quali consiste in un operatore addizione e un altro prodotto. Una regola grammaticale come

sum : product {  + | - product } ...

viene tradotto in C con una funzione simile a

void sum (void)
{
product();
for (;;)
{ switch (token) {
case ’+’:
case ’—’:
scan(0), product(); continue;
}
return;
}
}

C'è una funzione C per ogni regola grammaticale, in modo che le regole possano "chiamarsi" l'una con l'altra. Le alternative sono tradotte in istruzioni switch o if, iterazioni nella grammatica producono cicli in C. Il solo problema è che dovremmo in qualche modo evitare la ricorsione infinita.

token contiene sempre il successivo simbolo di input. Se lo riconosciamo, dobbiamo chiamare scan(0) per avanzare nell'analisi dell'input e memorizza un nuovo simbolo in token.

 

 

Scrivi un commento all'articolo esprimendo la tua opinione sul tema, chiedendo eventuali spiegazioni e/o approfondimenti e contribuendo allo sviluppo dell'argomento proposto. Verranno accettati solo commenti a tema con l'argomento dell'articolo stesso. Commenti NON a tema dovranno essere necessariamente inseriti nel Forum creando un "nuovo argomento di discussione". Per commentare devi accedere al Blog

 

 

Login   
 Twitter Facebook LinkedIn Youtube Google RSS

Chi è online

Ultimi Commenti