シンボルテーブル

実装 
典型的な実装としては、ハッシュテーブルを使った実装がある。コンパイラやインタプリタやその他の処理系は、1つの大きなシンボルテーブルで全てを扱う場合と、名前空間ごとに分割されたシンボルテーブルを使う場合がある。前者の場合は、なんらかの方法で別々の名前空間にある同じ名前が衝突しないようにしなければならない。後者の場合は、名前空間が階層構造になっている場合にはその階層構造に対応した階層構造になっていることもあれば、なっていないこともある。

 利用 
オブジェクトファイルには、外部から見える識別子についてのシンボルテーブルが含まれていることが多い。複数のオブジェクトファイルをリンケージエディタでリンクする場合、未解決の参照を解決するのにシンボルテーブルを利用する。

シンボルテーブルは変換過程でのみ存在する場合もあるし、最終的な出力に組み込まれる場合もある。後者の場合、例えば、対話型デバッガによるデバッグや、性能解析ツールなどによる実行時の性能情報の収集などでシンボルテーブルが利用される。

 例 
以下の表は、GNU Binutils の nm コマンドで小さなプログラムのシンボルテーブルを表示させたときの内容を示したものである。データ（グローバル変数、"D" と表示される）としては holaamigosh だけがあり、他には多数の関数（プログラム内で定義されているものもあれば、標準ライブラリからリンクされたものもある）がある。最初のカラムはシンボルのメモリ上の位置、2番目のカラムはシンボルの型、3番目のカラムはシンボルの名前である。適当な引数を与えれば、シンボルテーブルはアドレス順にソートされて表示される。
+シンボルテーブルの例 アドレス  型  名前00000020  a  T_BIT00000040  a  F_BIT00000080  a  I_BIT20000004  t  irqvec20000008  t  fiqvec2000000c  t  InitReset20000018  T  _main20000024  t  End20000030  T  AT91F_US3_CfgPIO_useB2000005c  t  AT91F_PIO_CfgPeriph200000b0  T  main20000120  T  AT91F_DBGU_Printk20000190  t  AT91F_US_TxReady200001c0  t  AT91F_US_PutChar200001f8  T  AT91F_SpuriousHandler20000214  T  AT91F_DataAbort20000230  T  AT91F_FetchAbort2000024c  T  AT91F_Undef20000268  T  AT91F_UndefHandler20000284  T  AT91F_LowLevelInit200002e0  t  AT91F_DBGU_CfgPIO2000030c  t  AT91F_PIO_CfgPeriph20000360  t  AT91F_US_Configure200003dc  t  AT91F_US_SetBaudrate2000041c  t  AT91F_US_Baudrate200004ec  t  AT91F_US_SetTimeguard2000051c  t  AT91F_PDC_Open2000059c  t  AT91F_PDC_DisableRx200005c8  t  AT91F_PDC_DisableTx200005f4  t  AT91F_PDC_SetNextTx20000638  t  AT91F_PDC_SetNextRx2000067c  t  AT91F_PDC_SetTx200006c0  t  AT91F_PDC_SetRx20000704  t  AT91F_PDC_EnableRx20000730  t  AT91F_PDC_EnableTx2000075c  t  AT91F_US_EnableTx20000788  T  __aeabi_uidiv20000788  T  __udivsi320000884  T  __aeabi_uidivmod2000089c  T  __aeabi_idiv02000089c  T  __aeabi_ldiv02000089c  T  __div0200009a0  D  _data200009a0  A  _etext200009a0  D  holaamigosh200009a4  A  __bss_end__200009a4  A  __bss_start200009a4  A  __bss_start__200009a4  A  _edata200009a4  A  _end

脚注

 関連項目  
 中間表現

 外部リンク 
GNU nm

Category:コンパイラ構造