プログラミング言語作成ハンズオン Vol.2
日程:2019/11/09(土)11:00 〜 18:30
募集期間:2019/08/26(月) 00:00 〜 2019/11/09(土) 00:00
会場:株式会社オプト 5F
東京都千代田区四番町6番 東急番町ビル
主催 : kmizu
募集内容 | 参加枠 無料 先着順 ——— チューター枠 無料 先着順 |
---|
イベントについて
このイベントはプログラミング言語を作るためのハンズオン企画です。
皆さんは、プログラミング言語を作ったことがあるでしょうか。
もし無いとしても、普段プログラミング言語を作る必要はないので無理はないことだと思います。
しかし、プログラミング言語を(簡単なものでも)作ることによって、実際のプログラミング言語がどのように作られているかについて大まかなイメージを持つことができます。
また、プログラミング言語を学ぶ際にも、プログラミング言語の処理系がどのように動いているかを知ることは有意義だと考えています。
といった趣旨で、数年前、プログラミング言語処理系作成のハンズオンを行いました。
色々な課題はありましたが、プログラミング言語を作ることの楽しさが多少でも伝わったのではないかと思います。
一方で、1日のハンズオンで、字句解析/構文解析とインタプリタの作成を同時に行うのはやや難しい、ということを実感しました。
この反省を踏まえ、今回の言語作成ハンズオンでは、プログラミング言語の構文木は利用者側で組み立ててもらうことにして、処理系としては構文木のインタプリタを作ること(時間があれば型チェックも)にしぼって学んでもらう予定です。
想定するプログラミング言語:
- 基本単位が式である
- 条件分岐(if)、ループ(while)を表現する構文が存在する
- 次の演算子を持つ
- 整数の加減乗除(+,-,*,/)
- 整数の比較(<,<=,>,>=)
- 論理和(||)、論理積(&&)、否定(!)
- 標準出力に文字列や数値を出力する機能を持つ
- 次のデータ型を持つ
- 整数型
- 真偽値型
- 文字列型
- (オプショナル)関数定義と呼び出し
- (オプショナル)静的な型
参加資格:
- Javaである程度プログラムが書ける
- 木構造を扱うプログラムを書ける
- プログラミング言語が動作する仕組みを理解したい
- 休日を丸一日潰しても良い
プログラム(TBD):
- 11:00~12:00 言語処理系作成のキホン: @kmizu
- 12:00〜13:00 昼食休憩
- 13:00〜18:30 言語作成ハンズオン: @kmizu
参加費
- ハンズオン部分は無料
- 懇親会は未定
集合場所
11:00までに下記の場所に集まってください。
@kmizuが会場に案内 します。
遅れた人は、@kmizuまでその旨メンションいただければ 迎えに行きます。
その他
- 喫煙室はありません
- 貴重品は各自で管理してください
- 会場は飲食可能です
当日までの準備作業
- Java開発環境(AdoptOpenJDK 8)のインストール
こちらのサイトから、OpenJDK 8 (LTS) -> HotSpotと選択して、ダウンロード・インストールをお願いします。
その他のディストリビューションでもおそらく動くかと思いますが、確認を取っていません。
- Apache Maven 3のインストール
こちら からダウンロード・インストールをお願いします。
インストールが正常に行えたら、
$ mvn
というコマンドが使えるようになっているはずです。
Mac OSの場合、brew install maven
だけでいけるかもしれません。
- 本ハンズオンで使うベース言語nubのclone、動作確認(現時点で未実装の部分があるため、コンパイル可能であることのみ確認)
本ハンズオンでは、一からプログラミング言語を作るのではなく、土台となるベース言語nub2の処理系を元に、それを改造してもらう、という形式を取ります。
以下の手順で、nub2のcloneおよび、nub2がコンパイル可能なことの確認をよろしくお願いします。
$ git clone https://github.com/kmizu/nub2.git
$ cd nub
$ mvn compile
と入力して、
[INFO] Scanning for projects...
[INFO]
[INFO] -----------------------< com.github.kmizu:nub2 >------------------------
[INFO] Building nub2 0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ nub2 ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/k.mizushima/work/nub2/src/main/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ nub2 ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 5 source files to /Users/k.mizushima/work/nub2/target/classes
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 1.373 s
[INFO] Finished at: 2019-08-26T13:30:08+09:00
[INFO] ------------------------------------------------------------------------
のように表示されれば成功です。