1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Playground コンパイラー

Last updated at Posted at 2017-03-22

Playground コンパイラー

PlaygroundはKLab株式会社のゲームエンジンです。**C#**でスクリプトを書いて、Androidでも、iOSでもリリースが出来ます。

原点

エンジンはC++で書いてますし、APIはC#ですから、元々Monoを使うつもりでした。Androidが出来ましたがiOSはダメになりましたので、オリジナルC#からC++までのコンパイラーを作るに決めました。

コンパイラー

コンパイラーはC++,LexとYaccで開発されました。コンピレーションは三つ部分があります:字句解析 (じくかいせき、Lexical Analysis)、構文解析(こうぶんかいせき、Syntactic Analysis)とコード生成(コードせいせい、Code Generation)

字句解析

先ずC#のコードはLexとYaccのパーサーで読まれた。プログラムの言葉は皆トークンになります。結果は構文木です。
例:
Untitled drawing.jpg

構文解析

前の構文木で様々解析して、プログラムの意味を理解します。例えば、あるブロックで、a24です。

コード生成

構文解析が終わったら、コード生成が出来ます。目的はC++で同じ意味のプログラムを作る。C++にありません物は沢山ありますから、トリックを良く使います。例えば、無名関数毎で、新しいクラスを作ります。

ランタイム

コンパイラーだけは十分ではない。C#はCLR(Common Language Runtime)という.NETのバーチャルマシンで実行されています。もちろん、C++はCLRの機能がありませんから、C++用のランタイムを開発しました。そのランタイムはStringなど、CLRの基本的なクラスを持ってますし、カスタムなガベージコレクターもあります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?