Analisi lessicale: Attraverso un'analizzatore lessicale(lexer), il compilatore divide il codice sorgente in tanti pezzetti chiamati token. I token sono gli elementi minimi (non ulteriormente divisibili) di un linguaggio, ad esempio parole chiave (for, while), nomi di variabili (pippo), operatori (+, -, <<).
Analisi sintattica L'analisi sintattica prende in ingresso la sequenza di token generata nella fase precedente ed esegue il controllo sintattico. Il controllo sintattico verifica la correttezza del programma secondo la grammatica del linguaggio in cui è stato scritto. Il risultato di questa fase è un albero di sintassi.
Analisi semantica L'analisi semantica si occupa di controllare il significato delle istruzioni presenti nel codice in ingresso. Controlli tipici di questa fase sono il type checking, ovvero il controllo di tipo, controllare che gli identificatori siano stati dichiarati prima di essere usati e cosi via. Come supporto a questa fase viene creata una tabella dei simboli (symbol table) che contiene informazioni su tutti gli elementi simbolici incontrati quali nome, scope, tipo (se presente) etc. Il risultato di questa fase è l'albero sintattico astratto (AST).
Generazione del codice intermedio: Dall'albero di sintassi viene generato il codice intermedio.
2007-12-03 22:53:06
·
answer #1
·
answered by oderint dum metuant 5
·
0⤊
0⤋
Tutti i compilatori, nessuno escluso, per l'analisi del codice hanno parser che fa l'analisi lessicale di quanto scritto, ne interpreta i token evidenziando eventuali errori "bloccanti".
2007-12-03 09:53:59
·
answer #2
·
answered by Cteniza 4
·
1⤊
0⤋
Dipende dal compilatore e dal linguaggio che uso, solo per il cobol ci sono diversi compilatori che alla fine danno un eseguibile piu' o meno simile ma che hanno comportamenti diversi, sia in fase di controllo formale del codice sia per il debug.
Idem per gli altri linguaggi.
2007-12-03 17:49:36
·
answer #3
·
answered by Maurizio 4
·
0⤊
0⤋
Dipende dal compilatore.
Mi sembra chiaro che un compilatore Java sia diverso da un compilatore C++, che è diverso da uno C, diverso dal Visual Basic, diverso dal compilatore Assembly, ecc ecc quasi all'infinito.
In più, ad esempio il gcc:
dalla versione 3.x alla 4.x cambiano tantissime cose ad esempio sull'ottimizzazione del codice.
Scusami, ma è troppo generica come domanda... visto il numero di linguaggi e di compilatori presenti.
Se invece vuoi una trattazione "generica" dei vari stadi attraversati da un compilatore:
2007-12-03 08:09:33
·
answer #4
·
answered by Francesco R 3
·
0⤊
0⤋
non è possibile e non è legale.
i vari codici vanno analizzati uno alla volta. portami un codice sorgente legale e te lo analizzo fino ad allora non è possibile neanche generalizzare.
2007-12-03 08:06:12
·
answer #5
·
answered by alberto 7
·
0⤊
3⤋