コンパイラの入門コースをたどるには、どのコンピュータサイエンスの科目が必要ですか?[閉まっている]


10

私はコンピュータサイエンス以外の学部生で、ウェブ開発者(java、python、AS3など)としてプロとして働いています。私は地元の大学で学期ごとに1つのコースを取ります。私は人工知能(ロジック、文脈自由文法、CYK構文解析、入門NLP、マルコフ連鎖、HMMなど)を前学期に受講しました。

次のシラバスをカバーする次のセムスターでコンパイラの入門コースをとることを計画しています。

字句解析、構文解析、意味解析、ランタイム環境、中間表現、コード生成、レジスター割り当て、命令の選択とスケジューリング、ローカルおよびグローバルコード最適化入門、データフロー分析

私の質問は、このコースを受講する前に知っておくべきコンピュータサイエンスの科目はありますか?はいの場合、それらのコースをリストしていただければ幸いです。


1
学校によって異なります。鉱山はそれほどタフではなかったので、前提条件は基本的なデータ構造と基本的なアルゴリズムでした-それだけです。残念ながら、彼らはコンパイラをオプションにしており、私はそれを思いつき、それを受け入れませんでした。
仕事

回答:


8

次のトピックについて簡単に理解しているはずです。

  • 離散数学(集合、関係、木、グラフ、行列、数論)
  • データ構造(より適用された意味では、ツリー、リスト、スタック、キュー、および文字列の機能)
  • 基本的なアルゴリズム(コアコンセプト、並べ替え、検索、Big-O表記など)
  • コンピュータアーキテクチャ(デジタルロジック、ビット操作、マイクロコンポーネント、キャッシュ、メモリ、アセンブリプログラミング)
  • その他(正規表現、コンテキストフリー言語、有限状態/プッシュダウンオートマトン、チューリングマシンと計算可能性、字句解析ツール)

オプションで、おそらく非常に役立ちます:

  • オペレーティングシステムの設計(プロセス管理、カーネル設計、同期、スケジューリング、イベント、ロック、スレッド、スタックとヒープ)

4

ええと、私は自分のコンパイラを作成するために少し作業をしましたが、主な前提条件は、データ構造クラスで得られるものをしっかりと理解することです。具体的には、再帰、ツリー、マップ/ハッシュテーブルを理解していない場合、コンパイラーの構築を学習しようとすると、すぐに途方に暮れてしまいます。


3

コンピュータアーキテクチャに関するいくつかの基本的な背景(レジスタ、メモリ、特殊用途レジスタなど)が必要で、以前にいくつかのアセンブリコードを見たことがあるでしょう。以前にいくつかのアセンブリコードを記述したことがあれば、機械語がどのように機能するかを十分に理解できればさらに良いでしょう。

コースのレベルによっては、スーパースカラー処理などについて多少の知識が必要になる場合があります。


1
これは、問題のコンパイラがマシンコードを生成しており、なんらかのバイトコードを生成していないと想定している場合にのみ当てはまります。
メイソンウィーラー

3

これが私が白亜紀後期(1988年頃)に取り上げたコンパイラクラスのようなものである場合、唯一の実際の前提条件は、データ構造(特にツリーとハッシュテーブル)、いくつかのアセンブリ言語(生成されたコード)、一部のコンピューターアーキテクチャ、および正規表現、有限オートマトン、チューリングマシンなどのクラスを教えるクラスはすべて、コンパイラーコース自体の一部としてカバーされる場合があります(FWIW、私のものではありません)。また、再帰を確実に理解する必要があります。


2

おそらく、正式なモデルと言語のコースも受講する必要があります。基本的なChompsky階層をカバーするものであれば何でも構いません:通常の言語+文脈自由言語。これは、構文解析の数学的基礎を理解して、パーサーがクリーンで、パフォーマンスが高く、正しいものになるようにすることが重要であるためです。優れたコンパイラークラスは、正規表現とLALR / LL(k)パーサーの両方とそれらの背後にある理論の両方をカバーすることが多いと思います。


0

彼らはコードの最適化について話しているので、そこにいくつかのアセンブリ言語コーディングがある可能性があります。したがって、少なくともそれについてある程度理解しておくとよいでしょう。特定のコースがどのように構成されているかによります。それ以外の場合は、強力なプログラミングスキルのセットがあれば、コンパイラクラスの入門として十分だと思います。それは可能でしょう非常に貴重なクラス。


0

あなたのユニに依存しますが、ほとんどはこれらの前提条件を必要とします:

=> Discrete Mathematics
Should include: propositional logic, predicate logic, set theory etc etc 

=> General Concepts of Programming (In any language of choice would be okay)
=> Algorithms and Data Structures
Should include: data structures, abstract data types, recursive algorithms
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.