Domanda

Se volessi modificare o aggiungere le mie estensioni a C e aggiungerle al compilatore GCC C, cosa dovrei fare? Non voglio proporre modifiche alla lingua, voglio sapere come funziona il compilatore C.

Ho dato un'occhiata al codice sorgente di GCC e sembra che Objective-C sia implementato come un semplice parser che genera codice che fa riferimento a una libreria di runtime modificata e quindi per tutto ciò che è basato su C utilizza il normale compilatore C. Non l'ho studiato intensamente, quindi probabilmente non sono sulla strada giusta.

Ad esempio, volevo aggiungere la mia parola chiave a Objective-C, solo per divertimento. Voglio aggiungere qualcosa che sembra facile da implementare, come forse @assert . Tutto ciò che voglio è che @assert chiami una funzione che aggiungerò al runtime di Objective-C:

objc_runtime_assert (__FILE__, __LINE__, expression, "string version of expression");

Ovviamente potrei comunque implementarlo come funzione call e macro, ma voglio capire le fasi di analisi e compilazione del codice sorgente C, e forse così potrei aggiungere le mie estensioni a una lingua per uso personale .

Il codice sorgente che ho visto si riferisce costantemente a "alberi" e ci sono molte, molte macro che eseguono azioni o ottengono informazioni da questi alberi.

C'è qualche documentazione in giro che spiega questo tipo di cose in profondità?

È stato utile?

Soluzione

Gli alberi sono molto probabilmente alberi di sintassi astratti (AST) e qualsiasi libro del compilatore insegnerà quello. Il libro dei draghi è molto classico, nella classe che ho preso abbiamo usato L'essenza dei compilatori di Robin Hunter, ISBN 0-13-727835-7. Dovresti anche essere in grado di trovare tonnellate di materiale proveniente da diversi college e università con alcuni buoni termini di ricerca (progettazione del compilatore, AST, analisi lessicale, analisi top-down, analisi bottom-up, analisi semantica, LL , LR).

Altri suggerimenti

Dipende se hai già familiarità con i compilatori o meno. In caso contrario, inizia con il Dragon Book . Se sì, GCC ha già della documentazione per te:

  1. The GCC Internals Manual
  2. Il GCC Wiki , in particolare il Guida introduttiva contiene informazioni su molte cose, inclusi gli alberi GCC.

Dipende da come lo stai facendo, ma potresti voler cercare l'implementazione GCC del linguaggio di programmazione D - GCD . Questo è un work in progress, ma è un linguaggio completo implementato nel framework GCC senza (ancora) molto se nessun riconoscimento all'interno del team GCC. Le esperienze GCD potrebbero essere salutari.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top