問題タブ [intermediate-code]

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.

0 投票する
1 に答える
476 参照

c - Fortran コンパイラの中間コード生成: DAG または quadruples

Flex と Bison を使用してミニ Fortran コンパイラを作成しています。ここまでで、字句解析と構文解析が完了しました。私は型チェックのセマンティック分析を行っており、IR を選択する必要があります。私のターゲット マシンは MIPS です。したがって、MIPS IAS に基づく最終的なコード生成が必要です。したがって、良い IR は 4 倍だと思います。しかし、いくつかの最適化を紹介したいと思います。そのため、(ハッシュ テーブルを使用して) DAG 構造を構築しました。IR には 2 つのパスがあります。4 倍または DAG と 4 倍です。

DAG を IR として使用する場合、ステートメントにバックパッチ メソッドを使用するにはどうすればよいですか? 4倍なら簡単です。一方、DAG はより抽象的です。強制的に4倍に変換する必要があります。そんなこと知ってる。私の恐れはバックパッチです。

0 投票する
0 に答える
110 参照

c++ - c++ から LLVM バックエンドの出力を効率的に呼び出すことはできますか?

LLVMフロントエンドが利用可能なプログラミング言語でいくつかのロジックを書き留めたとしましょう。このロジックをいくつかの C++ アプリケーションで再利用したいと考えています。一般的な LLVM バックエンドを使用してある種のライブラリを生成し、パフォーマンスを大幅に低下させることなくアプリケーションから呼び出すことはできますか? このユースケースに対処する方法に関するヒントはありますか?

0 投票する
1 に答える
664 参照

compiler-construction - コンパイラ中間コード生成 3 アドレス コード fjump

このコンテキストでFJUMPは何を意味しますか?

以下は、レジスター マシンの 3 つのアドレス コード (TAC) 中間表現です。fooこれには、整数パラメーターna整数の配列であるパラメーターを受け取る という関数が含まれています。Java に似た疑似コードで対応する高級言語を書き留めます。

3つのアドレスコードのジャンプ命令は「if x goto L」のようなものだと思いましたか?

0 投票する
2 に答える
188 参照

scala - Scalaコンパイラの中間コードの仕様

-Xprint-icodeScala コンパイラーによって生成される中間コード (つまり、オプションを scalac に渡す)の正式な仕様または詳細な説明はありますか?

ありがとう。

0 投票する
1 に答える
3452 参照

optimization - コンパイラの中間段階でコードを最適化する目的は何ですか?

一部のコード最適化は中間コードで実行されます。

  1. これらは、ターゲット プロセッサへのコンパイラの移植性を高めます。
  2. プログラム解析は、マシンコードよりも中間コードの方が正確です
  3. データフロー分析からの情報は、それ以外の方法では最適化に使用できません
  4. フロントエンドからの情報は、それ以外の方法で最適化に使用することはできません

IMO : 中間コードはマシンに依存しないコードです。したがって、特定のソースコードをターゲットマシンコードに変換できるため、中間コードをコードの最適化に使用できます。したがって、オプション(1)ですが、どこかで説明されているオプション(2)も真です。


コード最適化の目的と、コンパイラの中間段階での利点は何ですか?