Registration info |
参加枠 Free
FCFS
チューター枠 Free
FCFS
|
---|
Description
イベントについて
このイベントはプログラミング言語を作るためのハンズオン企画です。
皆さんは、プログラミング言語を作ったことがあるでしょうか。もし無いとしても、普段プログラミング言語を作る必要はないので無理はないことだと思います。しかし、プログラミング言語を作ることによって、実際のプログラミング言語がどのように作られているかについてイメージを持つことができます。また、プログラミング言語を学ぶ際にも、プログラミング言語の処理系がどのように動いているかを知ることは有意義だと考えています。
そのような趣旨で数年前、プログラミング言語作成のハンズオンを行いました。色々な課題はありましたが、プログラミング言語を作ることの楽しさが多少でも伝わったのではないかと思います。
一方で、1日のハンズオンで、字句解析/構文解析とインタプリタの作成を同時に行うのはやや難しい、ということを実感しました。この反省を踏まえ、今回のプログラミング言語作成ハンズオンでは、プログラミング言語の構文木は利用者側で組み立ててもらうことにして、処理系としては構文木のインタプリタを作ること(時間があれば型チェックも)にしぼって学んでもらう予定です。
想定するプログラミング言語:
- 基本単位が式である(値を返す)
- 条件分岐(if)、ループ(while)を表現する式が存在する
- 次の演算子を持つ
- 整数の加減乗除(+,-,*,/)
- 整数の比較(<,<=,>,>=)
- 論理和(||)、論理積(&&)、否定(!)
- 標準出力に文字列や数値を出力する機能を持つ
- 次のデータ型とリテラルを持つ
- 整数型と整数リテラル
- 真偽値型と真偽値リテラル
- 文字列型と文字列リテラル
- (オプショナル)関数定義と呼び出し
- (オプショナル)静的な型
参加資格:
- Javaでプログラムが書ける
- 木構造を扱うプログラムを書ける
- プログラミング言語が動作する仕組みを理解したい
- 休日を丸一日使っても良い
プログラム:
- 11:00 開場
- 11:10~11:15 会場案内 @kmizu
- 11:15〜12:00 言語処理系作成のキホン: @kmizu
- 12:00〜13:10 昼食休憩
- 13:10〜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 nub2
$ 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] ------------------------------------------------------------------------
のように表示されれば成功です。
Media View all Media
If you add event media, up to 3 items will be shown here.