In quale fase della compilazione è "typedef" risolto dal compilatore?

5

Ci sono diverse fasi di compilazione

Ad esempio

  • Fase di pre-elaborazione
  • Analisi della sintassi
  • Analisi semantica
  • Generazione di codice intermedio
  • Generazione codice macchina
  • ottimizzazione
  • Collegamento

La mia domanda qui è in quale fase della compilazione "typedef" è stata risolta.

    
posta Adarsh 26.08.2014 - 13:48
fonte

2 risposte

6

C e C ++ non hanno grammatiche context-free. Alcune delle loro regole grammaticali sono ambigue senza sapere se un determinato identificatore identifichi o meno un tipo. Pertanto l'analisi "sintattica" e "semantica" sono mescolate. Ogni istruzione che viene analizzata viene immediatamente verificata per vedere se introduce nuovi tipi e le informazioni vengono ricondotte al lexer in modo che possa classificare i token nelle letture come identificatori o identificatori di tipo. I modelli presentano un'ambiguità simile con i token < e > , quindi anche le dichiarazioni dei template devono essere restituite a lexer.

Questo spiega anche perché i nomi dipendenti nei modelli devono essere annotati con typename e / o template parole chiave. I compilatori che creano un albero di sintassi astratto completo di modelli quando vengono dichiarati non possono farlo senza sapere quali identificatori identificano tipi e / o modelli e non sanno ancora quando quegli identificatori dipendono dai parametri del modello.

    
risposta data 26.08.2014 - 14:52
fonte
3

Il significato di typedef è definito nello standard in n1256 S6.7.7. Dice:

A typedef declaration does not introduce a new type, only a synonym for the type so specified.

In altre parole, un typedef è completo e significativo non appena la dichiarazione è completa. Nulla è rimasto da analizzare in seguito.

Sebbene attribuire significati alle cose è parte dell'analisi semantica, questa particolare azione deve svolgersi durante l'analisi sintattica, poiché queste informazioni vengono utilizzate in seguito per scegliere tra interpretazioni sintattiche possibilmente ambigue. Ad esempio S6.7.3:

If the same qualifier appears more than once in the same specifier-qualifier-list, either directly or via one or more typedefs, the behavior is the same as if it appeared only once.

Quindi la risposta è: durante l'analisi della sintassi, con la riserva che questo potrebbe essere preso per sovrapporsi all'analisi semantica.

    
risposta data 27.08.2014 - 13:44
fonte

Leggi altre domande sui tag