BrainFuckをつくった
by
uzimaru0000
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
BrainFuckをつくった うじまる
Slide 2
Slide 2 text
はじめに
Slide 3
Slide 3 text
たくさん集まってくれて ありがとうございます
Slide 4
Slide 4 text
自己紹介 - ひよこ - 趣味 - 料理 - プログラミング - えっちいいね - 言語 - TS - Elm
Slide 5
Slide 5 text
誕生日なのでBrainFuckを作りました
Slide 6
Slide 6 text
BrainFuckを作った 誕生日なのでは冗談 1. uzimaru.comのリニューアルに elm/parser を使いたい 2. 練習でbrainfuckのparserを作って見よう 3.
Slide 7
Slide 7 text
BrainFuckってなに? 難解プログラミング言語のひとつ + - > < , . [ ] の8つの記号だけを使ってプログラミングをする言語 チューリング完全なので実質なんでも作れる[要出典] 記号部分を任意のトークンに変えるだけで自作言語()が作れる 例 : https://github.com/masarakki/nyaruko_lang
Slide 8
Slide 8 text
elm/parserって? elmの公式が出してるパーサーライブラリ elm的には正規表現よりこっちを使ってほしいらしい らしい
Slide 9
Slide 9 text
やったこと 1. 文字列(コード)を受け取る 2. 作ったParserでelmのデータ構造に落とす 3. 作られたデータ構造を使って状態を計算 4. 表示 これだけ!!
Slide 10
Slide 10 text
やったこと 1. 文字列(コード)を受け取る 2. 作ったParserでelmのデータ構造に落とす 3. 作られたデータ構造を使って状態を計算 4. 表示 今回はこの2つをメインに話します (っと言っても時間がないので凄い端折ります)
Slide 11
Slide 11 text
Parserでelmのデータ構造にする
Slide 12
Slide 12 text
命令を型にする - > 右にシフト - < 左にシフト - + 加算 - - 減算 - , 入力 - . 出力 - [ ループの開始 - ] ループの終わり
Slide 13
Slide 13 text
命令を型にする - > 右にシフト - < 左にシフト - + 加算 - - 減算 - , 入力 - . 出力 - [ ループの開始 - ] ループの終わり
Slide 14
Slide 14 text
命令を型にする あとはひたすら Parserを書いていく
Slide 15
Slide 15 text
命令を型にする `Parser.oneOf` はリストの上からParseし ていく 一つ一つのParserはかなりシンプル
Slide 16
Slide 16 text
データ構造を使って状態を計算
Slide 17
Slide 17 text
データ構造を使って状態を計算 Parseすると `List BCmd` が返ってくる そいつを使って状態を計算する だけ!! Parserの型
Slide 18
Slide 18 text
データ構造を使って状態を計算 状態を右のような型で持っておく - prt 今のポインタ - cmds 残ってる命令列 - memory 状態を持っておくメモリ - input 入力値 - output 出力値
Slide 19
Slide 19 text
データ構造を使って状態を計算 命令一つ一つに対応する処理を書けば 終わり!! 計算は失敗する可能性があるので(ポインタ 値が負の数になったり)`Result` 型になって いる
Slide 20
Slide 20 text
DEMO
Slide 21
Slide 21 text
まとめ - elm/parserがめちゃくちゃ便利だった - ちょっと癖がある(backtrackableとか(よく分かってない))けど使いやすい - https://uzimaru.dev/elm-brainfuxk で遊べるので遊んでね - https://github.com/uzimaru0000/elm-brainfuxk にコードがあるので興味がある人 は見てみてね
Slide 22
Slide 22 text
ありがとうございました!!