27
正規言語 プログラミング Ryoma Sin’ya @ Tokyo Tech Friday, March 29, 13

正規言語でプログラミング

Embed Size (px)

DESCRIPTION

第2回APASEC+第2期サイボウズ・ラボユース合同勉強会 ( http://atnd.org/events/36798 ) での発表です. このブログ記事の発展ネタです → http://swatmac.info/?p=1013 デモと口頭メインなので,資料は物足りないかも(追記する可能性は微小にある)

Citation preview

Page 1: 正規言語でプログラミング

正規言語と

プログラミングRyoma Sin’ya @ Tokyo Tech

Friday, March 29, 13

Page 2: 正規言語でプログラミング

世の中には色んなプログラミング・パラダイムがありますね

手続き型オブジェクトしこーラムダ計算制約論理型プログラミング項書換えシステムカテゴリカル・プログラミング

Friday, March 29, 13

Page 3: 正規言語でプログラミング

新しいパラダイムを提案したい!

しかも「正規言語」を使って!!

正規表現はプログラミング言語達の手下じゃない!

Friday, March 29, 13

Page 4: 正規言語でプログラミング

正規言語で

プログラミングRyoma Sin’ya @ Tokyo Tech

Friday, March 29, 13

Page 5: 正規言語でプログラミング

はじめに宣伝!

Friday, March 29, 13

Page 6: 正規言語でプログラミング

僕が開発した「RANS」

正規表現を与えて「受理文字列」と「自然数」を対応させるツール

Friday, March 29, 13

Page 7: 正規言語でプログラミング

僕が開発した「RANS」

正規表現を与えて「受理文字列」と「自然数」を対応させるツール

「対応」って何?

Friday, March 29, 13

Page 8: 正規言語でプログラミング

文字列と数の対応例:正規表現/a*(ba*b)*a*/ で「対応」を取ると...

Friday, March 29, 13

Page 9: 正規言語でプログラミング

文字列と数の対応例:正規表現/a*(ba*b)*a*/ で「対応」を取ると...

/a*(ba*b)*a*/

Friday, March 29, 13

Page 10: 正規言語でプログラミング

文字列と数の対応例:正規表現/a*(ba*b)*a*/ で「対応」を取ると...

/a*(ba*b)*a*/長さ--辞書順で並べる

Friday, March 29, 13

Page 11: 正規言語でプログラミング

文字列と数の対応例:正規表現/a*(ba*b)*a*/ で「対応」を取ると...

/a*(ba*b)*a*/={!, a, aa, bb, aaa, abb, bab, ... }長さ--辞書順で並べる

Friday, March 29, 13

Page 12: 正規言語でプログラミング

文字列と数の対応例:正規表現/a*(ba*b)*a*/ で「対応」を取ると...

/a*(ba*b)*a*/={!, a, aa, bb, aaa, abb, bab, ... }長さ--辞書順で並べる

0, 1, 2, 3, 4, 5, ....................

....................

Friday, March 29, 13

Page 13: 正規言語でプログラミング

で,プログラミングは?

Friday, March 29, 13

Page 14: 正規言語でプログラミング

プログラミング言語Grass

“w”と“W”と“v”の三文字でプログラミングする言語

ちょっと草植えときますね型言語 (新パラダイム?)

Friday, March 29, 13

Page 15: 正規言語でプログラミング

プログラミング言語Grass

“w”と“W”と“v”の三文字でプログラミングする言語

ちょっと草植えときますね型言語 (新パラダイム?)

つまり「ネタ言語」!!

Friday, March 29, 13

Page 16: 正規言語でプログラミング

プログラミング言語Grass

“w”と“W”と“v”の三文字でプログラミングする言語

ちょっと草植えときますね型言語 (新パラダイム?)

つまり「ネタ言語」!!

Friday, March 29, 13

Page 17: 正規言語でプログラミング

Grassはネタじゃない!

当たり前にちゅーりんぐ完全(型無しラムダ計算がベース)

しかも... 文法が正規!!!!

Friday, March 29, 13

Page 18: 正規言語でプログラミング

しかも文法が正規!!!

Friday, March 29, 13

Page 19: 正規言語でプログラミング

しかも文法が正規!!!

BNFで書かれてるけどこれは正規!!!!!!!!(プロなら一瞬で分かる)

Friday, March 29, 13

Page 20: 正規言語でプログラミング

しかも文法が正規!!!

/([vw]*(W+w)*)*/

0 1w 2W

[v-w] W

w

Friday, March 29, 13

Page 21: 正規言語でプログラミング

Grassで「Hello, World」wwvwwwWWWwwWwwWWWWwvwWWwwwWwwvwWwwwWwwvwWWwWWWWWwvwWWWwwwwWWWWwWWWWwWWWWWWwWWWWWWWwWWWWWWWwWWWWWWWWwWwwwwwwwwvwWWWwwwwwWWWWWwWWWWWwWWWWWWWwWWWWWWWWwWWWWWWWWWwWwwwwwwwvwWWWWwwwwwwWWWWWWwWWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWwWwwwwwwwvwWWWWWwwwwwwwWWWWWWWwWWWWWWWWwWWWWWWWWwWWWWWWWWWWwWWWWWWWWWWwWwwwwwwwvwWWWWWWWwwwwwwwwWWWWWWWWwWWWWWWWWWwWWWWWWWWWwWWWWWWWWWWWwWwwwwwwvwWWWWWWWWwwwwwwwwwWWWWWWWWwWWWWWWWWWwWWWWWWWWWWWwWWWWWWWWWWWwWWWWWWWWWWWWWwWwwwwwwwvwWWWWWWWWwwwwwwwwwwWWWWWWWWWwWWWWWWWWWWwWWWWWWWWWWWwWWWWWWWWWWWWWwWwwwwwwvwWWWWWWWWWWwwwwwwwwwwwWWWWWWWWWWwWWWWWWWWWWWwWWWWWWWWWWWWWwWwwwwwvwWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWwWWWWWWWWWWWWWwWWWWWWWWWWWWWWwWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWwWwwwwwwwvwWWWWWWWWWWwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwWWWwwwwwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWwvwWWwwwwWWWwwwwwwwwwwWWWWwwwwwwwwwwWWWWWwwwwwwwwwwwwwWWWWWWwwwwwwwWWWWWWWwwwwwwwwwwwWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwvwWWWWWWWWWWWWWWWWwwwwwwwWwwvwWWWWwwwwwwwWWWWWwwwWWWWWWwwwwwwwWWWWWWWwwwwwwwwWWWWWWWWwwwwwwwwwwwwwwWWWWWW

WWWwwwwwwwwwwwwwwvwWWwWWWWWw

Friday, March 29, 13

Page 22: 正規言語でプログラミング

Grassで「Hello, World」wwvwwwWWWwwWwwWWWWwvwWWwwwWwwvwWwwwWwwvwWWwWWWWWwvwWWWwwwwWWWWwWWWWwWWWWWWwWWWWWWWwWWWWWWWwWWWWWWWWwWwwwwwwwwvwWWWwwwwwWWWWWwWWWWWwWWWWWWWwWWWWWWWWwWWWWWWWWWwWwwwwwwwvwWWWWwwwwwwWWWWWWwWWWWWWwWWWWWWWwWWWWWWWWWwWWWWWWWWWwWwwwwwwwvwWWWWWwwwwwwwWWWWWWWwWWWWWWWWwWWWWWWWWwWWWWWWWWWWwWWWWWWWWWWwWwwwwwwwvwWWWWWWWwwwwwwwwWWWWWWWWwWWWWWWWWWwWWWWWWWWWwWWWWWWWWWWWwWwwwwwwvwWWWWWWWWwwwwwwwwwWWWWWWWWwWWWWWWWWWwWWWWWWWWWWWwWWWWWWWWWWWwWWWWWWWWWWWWWwWwwwwwwwvwWWWWWWWWwwwwwwwwwwWWWWWWWWWwWWWWWWWWWWwWWWWWWWWWWWwWWWWWWWWWWWWWwWwwwwwwvwWWWWWWWWWWwwwwwwwwwwwWWWWWWWWWWwWWWWWWWWWWWwWWWWWWWWWWWWWwWwwwwwvwWWWWWWWWWWwwwwwwwwwwwwWWWWWWWWWWWWwWWWWWWWWWWWWWwWWWWWWWWWWWWWWwWWWWWWWWWWWWWWwWWWWWWWWWWWWWWWWwWwwwwwwwvwWWWWWWWWWWwwwwwwwwwwwwwwwwwWwwwwwwwwwwwwwwwwwwwWWWwwwwwwwwwwwwwwwwwwwWwwWWWWWWWWWWWWWWWWWWWWwvwWWwwwwWWWwwwwwwwwwwWWWWwwwwwwwwwwWWWWWwwwwwwwwwwwwwWWWWWWwwwwwwwWWWWWWWwwwwwwwwwwwWWWWWWWWwwwwwwwwwwwwwwwwwwwwwwvwWWWWWWWWWWWWWWWWwwwwwwwWwwvwWWWWwwwwwwwWWWWWwwwWWWWWWwwwwwwwWWWWWWWwwwwwwwwWWWWWWWWwwwwwwwwwwwwwwWWWWWW

WWWwwwwwwwwwwwwwwvwWWwWWWWWw

16276174481634706127730787006880531370466380062973401969614529593658839588034299561019072802997488228415949574466048507125675902695500470444239679117615660403895503574832850368252492606680475482324809259888431440137005387911828231622152001940020161961290610781750518034051891012651593393183367228559192813007464702644798560118848397692667365050537949162937125903768151493422519792535824464997

03084436758664366464026061342507810037583

番目のGrassプログラム!!

Friday, March 29, 13

Page 23: 正規言語でプログラミング

正規表現「で」プログラミング

正規表現(文法)を固定数字を喰わせればプログラムが得られる!

数字を固定正規表現(文法)を喰わせればプログラムが得られる!

Friday, March 29, 13

Page 24: 正規言語でプログラミング

正規言語で

プログラミングRyoma Sin’ya @ Tokyo Tech

Friday, March 29, 13

Page 25: 正規言語でプログラミング

説明が面倒くさいので終了

Friday, March 29, 13

Page 26: 正規言語でプログラミング

説明が面倒くさいので終了

_人人人人人人人人人人人人人人_> アイディア述べて終了!! <‾Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y‾

Friday, March 29, 13

Page 27: 正規言語でプログラミング

続きが気になる人は...

RANSのプロジェクトページをチェック!!http://sinya8282.github.com/RANS/

@sinya8282 に reply直接質問(これが一番)私のブログなど

http://swatmac.info

Friday, March 29, 13