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

ありがとうございました!!