BrainFuckをつくった

 BrainFuckをつくった

#uzimaru生誕LT会

9fbbe5d0b8e2ee1cdc3a576b55a2d63d?s=128

uzimaru0000

June 01, 2020
Tweet

Transcript

  1. BrainFuckをつくった うじまる

  2. はじめに

  3. たくさん集まってくれて ありがとうございます

  4. 自己紹介 - ひよこ - 趣味 - 料理 - プログラミング -

    えっちいいね - 言語 - TS - Elm
  5. 誕生日なのでBrainFuckを作りました

  6. BrainFuckを作った 誕生日なのでは冗談 1. uzimaru.comのリニューアルに elm/parser を使いたい 2. 練習でbrainfuckのparserを作って見よう 3.

  7. BrainFuckってなに? 難解プログラミング言語のひとつ + - > < , . [ ]

    の8つの記号だけを使ってプログラミングをする言語 チューリング完全なので実質なんでも作れる[要出典] 記号部分を任意のトークンに変えるだけで自作言語()が作れる 例 : https://github.com/masarakki/nyaruko_lang
  8. elm/parserって? elmの公式が出してるパーサーライブラリ elm的には正規表現よりこっちを使ってほしいらしい らしい

  9. やったこと 1. 文字列(コード)を受け取る 2. 作ったParserでelmのデータ構造に落とす 3. 作られたデータ構造を使って状態を計算 4. 表示 これだけ!!

  10. やったこと 1. 文字列(コード)を受け取る 2. 作ったParserでelmのデータ構造に落とす 3. 作られたデータ構造を使って状態を計算 4. 表示 今回はこの2つをメインに話します

    (っと言っても時間がないので凄い端折ります)
  11. Parserでelmのデータ構造にする

  12. 命令を型にする - > 右にシフト
 - < 左にシフト
 - + 加算


    - - 減算
 - , 入力
 - . 出力
 - [ ループの開始
 - ] ループの終わり

  13. 命令を型にする - > 右にシフト
 - < 左にシフト
 - + 加算


    - - 減算
 - , 入力
 - . 出力
 - [ ループの開始
 - ] ループの終わり

  14. 命令を型にする あとはひたすら
 Parserを書いていく


  15. 命令を型にする `Parser.oneOf` はリストの上からParseし ていく
 一つ一つのParserはかなりシンプル


  16. データ構造を使って状態を計算

  17. データ構造を使って状態を計算 Parseすると `List BCmd` が返ってくる そいつを使って状態を計算する だけ!! Parserの型

  18. データ構造を使って状態を計算 状態を右のような型で持っておく - prt 今のポインタ - cmds 残ってる命令列 - memory

    状態を持っておくメモリ - input 入力値 - output 出力値
  19. データ構造を使って状態を計算 命令一つ一つに対応する処理を書けば 終わり!! 計算は失敗する可能性があるので(ポインタ 値が負の数になったり)`Result` 型になって いる

  20. DEMO

  21. まとめ - elm/parserがめちゃくちゃ便利だった - ちょっと癖がある(backtrackableとか(よく分かってない))けど使いやすい - https://uzimaru.dev/elm-brainfuxk で遊べるので遊んでね - https://github.com/uzimaru0000/elm-brainfuxk

    にコードがあるので興味がある人 は見てみてね
  22. ありがとうございました!!