問題タブ [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.
compiler-construction - コンパイラ:シンボルテーブルはどのようにソースマシンからターゲットマシンに渡されますか?
シンボルテーブルはフロントエンドとバックエンドの両方で使用されますが、ターゲットコードが別のマシンで実行されると仮定すると、シンボルテーブルはどのようにバックエンドに渡されますか?それはどういうわけか中間表現に「アタッチ」されるのでしょうか、それとも論理アドレス空間のインスタンスに含まれるのでしょうか?
c - シンボルテーブルからグローバル変数定義を取得するには?
C/C++ 言語で Visual Studio 2005 または 2010 を使用して開発を行っています。バイナリまたは実行ファイルのシンボル テーブルからグローバル構造定義情報を取得したいと考えています。以下に例を示します。「TD」という名前のグローバル構造と、構造内の 3 つのメンバー。コードがコンパイルされると、情報はシンボル テーブル、PDB シンボル ファイル、または DBG ファイルに格納されます。シンボルテーブルから情報を抽象化する関数のセットはありますか? メンバーのサイズとこのメンバーのタイプを取得できますか?
compiler-construction - シンボル テーブルにスタックを使用するかどうか
私はコンパイラの作成に取り組んでおり、シンボル テーブルを実装する 2 つの異なる方法を示唆するテキストに出くわしました。1 つの場合、スタックに格納されるネストのレベルごとにシンボル テーブルがあります。2 番目のオプションでは、シンボル テーブルは 2 つしかありません。1 つのシンボル テーブルはすべてのエントリを維持するために構築され、もう 1 つはプライマリ テーブルへの変更を追跡するために使用されます。その特定のブロック。これらのさまざまな実装の長所と短所は何ですか? 個々のブロックのシンボルテーブルを削除する限り、最初のオプションの方が高速になると確信していますが、これにはいくらかのオーバーヘッドが伴います (これについては不明です)。2 つ目は、多くの宣言を含む大きなブロックを削除する場合に限り、明らかにリソースを大量に消費します。
c++ - シンボルテーブルのサイズを小さくするために、名前のない名前空間関数を避ける必要がありますか?
C ++で名前空間を使用して関数を定義し、それらが定義されているコンパイルユニットの外部から呼び出せないようにすることは、シンボルテーブルが大きくなるため、非常に大規模なコード環境では適切ではないと主張していると聞きました。名前のない場合にC++コンパイラが提供する自動生成された名前空間にこれらのシンボルへのエントリを含めることにより、不必要に大きくなります。
これはおそらく、上記が次のことを行うのと同じであると想定されていることを前提としています。
しかし、それは本当に簡単ですか?コンパイラは、生成された名前空間名のシンボルのシンボルテーブルエントリを作成する必要がありますか?
代わりに、そのような状況では、静的宣言を使用することが提案されていると聞きました。
名前のない名前空間に配置する代わりに関数の前に静的宣言を使用すると、関数が定義されているコンパイル単位の外部で関数にアクセスできなくなるのと同じ効果がありますか?シンボルテーブルを大きくしない可能性があることを除いて、これら2つのアプローチの間に違いはありますか?
名前のない名前空間によるシンボルテーブルの肥大化の問題は、C ++の一部の実装のバグにすぎないのでしょうか、それとも、コンパイラがそのような関数のエントリを作成するために標準で何らかの形で必要とされているのでしょうか。この膨張がバグと見なされる場合、これが問題にならない既知のコンパイラはありますか?
c - 変数名はCのメモリにどのように格納されますか?
Cで、と呼ばれる変数があるとしましょうvariable_name
。に0xaaaaaaaa
あり、そのメモリアドレスに整数123があるとします。つまり、variable_name
123が含まれています。
variable_name
「は」にあるという言い回しの周りの説明を探してい0xaaaaaaaa
ます。コンパイラは、文字列「variable_name」がその特定のメモリアドレスに関連付けられていることをどのように認識しますか?文字列「variable_name」はメモリのどこかに保存されていますか?コンパイラはそれを見るたびに代用variable_name
するだけですか?もしそうなら、その代用を行うためにメモリを使用する必要はありませんか?0xaaaaaaaa
perl - この魔術を説明してください!!! (Perl では Moose と namespace::autoclean を使用)
それで、最近、Perl と Moose を使用するプロジェクトに取り組んでいます。Moose が MOP 上に構築されていることは理解しています。私は MOP にあまり詳しくなく、理解できないことに遭遇しました。理論的な説明を使用できます。モジュールnamespace::autoclean
のドキュメントは次のとおりです。
つまり、私が Moose を使用する前は、オブジェクトのメソッドを呼び出す方法は次のとおりでした: Perl インタープリターは、オブジェクトが bless されたパッケージのシンボル テーブルでそのメソッドを検索します (見つからない場合は、@ISA
相続など)。パッケージ内からインポートされた関数を呼び出す方法は、パッケージのシンボル テーブルで関数の名前を検索することでした。私がこれまでに知っている限り、どちらの方法でも同じシンボル テーブルを意味するため、この動作は不可能なはずです。
ソースの最初の検査は生産的ではありませんでした。大まかに言えば、Moose、MOP、および namespace::autoclean を使用すると、この種のトリックが可能になるという点で何が違うのでしょうか?
編。特に明確にするために、私use namespace::autoclean
が
を見つける場所がわからないため、ドキュメントに記載されているFoo->bar;
呼び出しがクラッシュします。Foo->bar
imported_function
eclipse - 文法から記号表を作成する
eclipse を使用して、文法(antlr で作成)からシンボル テーブルを作成しようとしています。しかし、私は何から始めるべきかわかりません。それを行うには、antlrによって生成されたパーサーとレクサーが必要になるとどこかで読んだと思います。それがどのように機能するかを理解できるように、誰かが簡単な例を知っていますか?
javascript - クロージャーでのバインディングはどの程度正確に行われますか?
s
まず、まだ定義されていない変数 ( ) を閉じることができます。レキシカル(静的)スコープが使用されている場合、それはどのように可能ですか?
s
次に、元のを削除した後f()
、新しい を見つけることができますs
。これは、クロージャが参照やシンボル テーブル インデックスなどではなく、よりマシン レベルのものではなく、変数名にバインドされていることを意味しますか? s
オリジナルが削除されているため、レキシカルスコープクロージャーからエラーがスローされると予想されます。新しいs
は名前を再利用するだけで、元の とは何の関係もありませんs
。
そして第三に、s
無名関数のスコープ内は によって使用されてf()
いません。
objective-c - Objective-C のリンカーとローダー
私は最近、John Levine の本「Linkers and Loaders」に出会いました。この本は 2000 年に書かれました。誰かが彼の本を読んだことがあるなら、著者が言っていることはすべて 2013 年の Objective-C にまだ関連していますか? 私の本棚に置いておくには良い本のように見えるので質問していますが、情報が古くなっている場合は、おそらくその本を本当に勉強したくありません.
ありがとう!
compiler-construction - コンパイラ: シンボル テーブルを埋める最良の方法は何ですか?
小さな C 言語用に独自のコンパイラを構築したいと考えています。すでに文法を作成し、ANTLR を使用して AST (抽象構文ツリー) を構築し、シンボル テーブルを実装しています (GRosemberg コードに従っています) 。
シンボル テーブルにシンボルを入力する必要がありますが、その方法がよくわかりません..
- y AST を実行し、見つかったトークンに応じて、シンボル テーブルに新しいシンボルを配置するか、新しいスコープを作成する必要がありますか?
- 文法でセマンティック関数を使用する必要がありますか? ツリー ウォーカーについて聞いたことがあります...?
私はこのステップで少し迷っています。誰か例がありますか、それともどうすればいいのか教えてください。