問題タブ [symbol-table]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
assembly - オブジェクトファイルのシンボルテーブルと再配置テーブル
私が理解していることから、オブジェクトファイル内の命令とデータにはすべてアドレスがあります。最初のデータ項目はアドレス 0 から始まり、最初の命令もアドレス 0 から始まります。
再配置テーブルには、ファイル内のアドレスが変更された場合 (たとえば、ファイルが別のファイルとリンクされている場合) に更新する必要がある命令に関する情報が含まれています。以下の例の行 A は、再配置テーブルにあります。ラベル「等しい」のアドレスはBに関連しているため、Bが再配置テーブルにあるとは思いません.これらの正しい仮定はありますか?
シンボル テーブルには、ファイルのラベルと解決されていないラベルが表示されます。しかし、シンボル テーブルには他にどのような情報が含まれているのでしょうか?
また、アセンブラが命令をバイナリに変換するとき、未解決の参照を持つ命令には何が配置されますか? この例では B.
c++ - コンパイラの構築: 順序付けられていないシンボルへの参照を処理する
ドラゴンブックを持っているけど、その話題は扱っていないようだ...
最新の言語では、コード内での出現が順不同であっても、特定の変数を使用することができます。
例
plonk
関数の後に変数が宣言されていてもかまいません。
質問
これを実装するためのベストプラクティス/有用なパターンはありますか? 私の心に浮かぶ2つのアプローチがあります:
解析中に、目に見えないシンボルのダミー シンボルを追加します。宣言が解析されると、これらのダミーは実際のシンボルに置き換えられます。解析後、ダミーが残っているかどうかを確認し、残っている場合はエラーを出力します。
解析中はシンボル操作を行わず、AST のみを作成します。AST を解析した後、ノードに応じてシンボルを追加します。たとえば、クラスノードの場合、子のシンボルを追加してから処理します。たとえば、ステートメントブロックは子をステップスルーし、子が処理される直前にシンボルを追加します。
アプローチ1.の方が簡単で、「他のコンパイルユニットのインポート」などにも便利です。
編集:
アプローチ1で見られる問題は、順序付けられたシンボルに対して何らかの処理が必要なことです。たとえば、関数内では、使用する前にローカル シンボルを使用することはできません。
java - Java を使用してコンコーダンスを反転
今日、Java を使用してテキスト ファイルからコンコーダンスを作成するクライアントと仕事をしています。私がする必要があるのは、コンコーダンスを反転して、本質的にテキストを最初から最後まで再作成することだけです。今、私が抱えているように見える問題は、どこから始めて、各ステップをどのように行うかです。今のところ、単語の配列を作成し、記号テーブルを反復処理して、各キーを配列に割り当てようとしました。次に、コンコーダンスから単語のリストだけを取得します。なんらかの理由で、この問題は単純な解決策であるように思われるため、私は非常にばかげているように感じます。物語を再現するための有効なアイデアが思い浮かびません。ここにソースを含めました:
}