20111210 scala kaigi2

15
パーサコンビネータを使っ てペログラム言語コンパイ ラを作ってみた(仮) @mtgto 111210日土曜日

Transcript of 20111210 scala kaigi2

Page 1: 20111210 scala kaigi2

パーサコンビネータを使ってペログラム言語コンパイラを作ってみた(仮)

@mtgto

11年12月10日土曜日

Page 2: 20111210 scala kaigi2

自己紹介

@mtgto

某D社社員

普段はiPhone開発とかやってます

Scala歴一ヶ月(11/9 コップ本買った)

OCaml書いたことある

11年12月10日土曜日

Page 3: 20111210 scala kaigi2

本題

俺が考えた言語から

ペログラム言語への

コンパイラを作ってみた

11年12月10日土曜日

Page 4: 20111210 scala kaigi2

インデックスさん

ペログラム言語って?

実装のはなし

デモ http://pero.510314.com/ でやります

11年12月10日土曜日

Page 6: 20111210 scala kaigi2

Hello world

あずにゃんペロペロあずにゃんあずにゃんペロペロあずにゃんペロペロあずにゃんあずにゃんペロペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロあずにゃんペロペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロあずにゃんペロペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロあずにゃんペロペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロあずにゃんペロペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロあずにゃんペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロあずにゃんペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロあずにゃんペロペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロあずにゃんペロペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロあずにゃんペロペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロあずにゃんペロペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロあずにゃんペロペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロあずにゃんペロペロペロペロペロペロペロあずにゃんペロあずにゃんあずにゃんペロあずにゃんペロペロ

“Hello, world!”11年12月10日土曜日

Page 7: 20111210 scala kaigi2

言語の説明Whitespaceの亜種(あずにゃん、ペロ、ペロ)

スタック操作(定数push, pop, swap, dup)

演算(加減乗除、剰余)

ヒープ操作(番地アクセス)

フロー(条件ジャンプ、無条件ジャンプ)

コンソール入出力11年12月10日土曜日

Page 8: 20111210 scala kaigi2

Hello Worldなら

‘H’を積んで

あずにゃんペロペロペロペロペロペロペロペロあずにゃん

一文字出力命令

ペロあずにゃんあずにゃんペロ

これを繰り返す

11年12月10日土曜日

Page 9: 20111210 scala kaigi2

俺が考えた最強の言語(嘘

def fib(n) { if (n < 2) { return 1; } return fib(n-1) + fib(n-2);}

var a = readInt();printInt fib(a);

11年12月10日土曜日

Page 10: 20111210 scala kaigi2

1996文字にコンパイルあずにゃんペロペロあずにゃんあずにゃんペロペロあずにゃんペロペロあずにゃんペロあずにゃんペロペロあずにゃんペロペロあずにゃんペロペロペロあずにゃんペロペロあずにゃんペロペロあずにゃんあずにゃんペロペロあずにゃんあずにゃんペロペロあずにゃんペロペロペロあずにゃんペロあずにゃんあずにゃんペロペロあずにゃんペロペロあずにゃんあずにゃんあず(長文のため省略されました

11年12月10日土曜日

Page 11: 20111210 scala kaigi2

デモ

http://pero.510314.com/

http://localhost:8080/

11年12月10日土曜日

Page 12: 20111210 scala kaigi2

実装

コンパイラ

sbt、パーサコンビネータ、ScalaTestとか

ウェブサーバ

Scalatra + Jetty

全部でScalaが10ファイル1000行くらい

11年12月10日土曜日

Page 13: 20111210 scala kaigi2

俺言語

rubyライク?

第一級の値はfloatのみ

比較演算子は”==”と”<“のみ

ifはあるけどelseはない

勢いで作ったから文法とか思いつきで

11年12月10日土曜日

Page 14: 20111210 scala kaigi2

まとめというより感想

ペロペロが読めるようになった(気がする)

関数型脳で書けて楽しい

謎の演算子を使われると読めなくて困る

☆とか

11年12月10日土曜日

Page 15: 20111210 scala kaigi2

\(^o^)/

ご清聴ありがとうございました

11年12月10日土曜日