Tempo di lettura Aho & Ullman/libro del drago con attenzione.
L'analisi semantica è l'attività di un compilatore per determinare quali sono i tipi di vari valori, come questi tipi interagiscono nelle espressioni e se tali interazioni sono semanticamente ragionevoli. Per esempio, non si può ragionevolmente moltiplicare una stringa dal nome della classe, anche se nessun editor vi vieta di scrivere
"abc" * MyClass
Per fare questo, il compilatore deve prima identificare le dichiarazioni e gli ambiti, e in genere registra il risultato di questa passo in una serie di tabelle dei simboli. Questo indica quali identificatori specifici significano in contesti specifici. Deve anche determinare i tipi di varie costanti letterali; "abc" è un tipo diverso da 12.2e-5.
Quindi deve visitare tutte le posizioni in cui vengono utilizzati identificatori e letterali e verificare che l'uso dell'identificatore/letterale e dei risultati calcolati siano compatibili con la definizione della lingua (come nell'esempio precedente).
Per quanto riguarda come questo è fatto: in genere il codice sorgente viene analizzato, qualche rappresentazione del programma è costruito (alberi di sintassi sono molto popolari), e che la rappresentazione è camminato ("visitato") elemento per elemento per la raccolta/convalidare le informazioni semantiche. La tabella dei simboli è in genere solo un insieme di tabelle hash associate all'albero di sintassi che rappresenta un ambito, l'hashing dagli identificatori alle strutture contenenti le dichiarazioni di tipo.
fonte
2012-01-03 15:01:47
Non ha coperto questo materiale della tua classe? –
@IraBaxter: Sì, ma superficialmente rispetto a quello che ha chiesto durante l'esame. (male male l'inglese, scusa) – Overflowh
Questo è più come un "problema umano" che un "problema tecnico", a volte gli insegnanti si aspettano una risposta molto specifica a ciò che parlano in classe ... – umlcat