三流プログラマの戯言

プログラミング初心者が気になったことを書き綴るだけ。主にc#

自作の brainfuck の開発環境の紹介

初めに

今回は Brainf*ck Advent Calendar 201916 日目の記事です。 adventar.org

前日の記事はこちら
明日の記事はこちら

目次

概要

そんなわけで今回は、自分がどんな環境で brainfuck のコーディングをしているかを書いていきます。
自作の環境を自慢したいだけです。

機能紹介

エディタ機能

当然、開発環境ですから、エディタの機能は最低限は実装しています。
以下が実装している昨日です。
* シンタックスハイライト
* [ 入力時に、対応する ] の補完
* 対応する [,] の表示
* 自動インデント
* コードの折りたたみ
* コードスニペットの実装

シンタックスハイライト

命令の種類ごとに色分けをされています。
具体的には、
* +,- : 白
* >,< : 水色 * [,] : 赤
* ,,. : 黄色
* その他 : 緑
となっています。
(これらの色は現在暫定なので、今後変更の可能性があります。)

[ 入力時の ] の補完

[ を入力時、その直後に ] がない場合は、自動で ] が挿入されます。
また、直後が ] の場合は、] が入力されても、既に入力されている ] が上書きされ、新たに挿入されないようになっています。

対応する [,] の表示

[ または ]の直後にカーソルを合わせることで、カーソルを合わせた [,] と対応する ],[ が薄い青色でハイライトされます。

自動インデント

[ , ] に応じて自動でインデントが入ります。インデントは半角スペースが 2 文字挿入されます。
連続する [] の間にカーソルがある状態で、Enter を入力した場合、間にインデントされた空行が挿入されます。
また、] が入力された際に、対応する [ 以下のコードが自動でインデントされます。
対応する [ がない場合には、コードの初めから自動インデントが行われます。

コードの折りたたみ

対応する [,] をひとつのセクションとして、折りたたむことができます。
また、#region,#endregion をひとつのセクションとして折りたたむことができます。

コードスニペットの実装

あらかじめ登録しておいたコードをキーワードを打ち込むことで、コードに反映させることができます。
詳しい説明は後述します。

実行機能

エディタとして書くだけでなく、実行環境を整えています。
実行環境としては、現在 AtCoder で利用可能な実行環境に寄せています。
* セルは符号なし 1 byte (0 ~ 255)
* 0 に対するデクリメントは 255
* 255 に対するインクリメントは 0
* セル数上限は無し
* 負番地へのアクセスはエラー
* EOF-1
* 対応のない [ 及び ] は構文エラー(実行前エラー)

デバッガ機能

プログラムを実行して、結果を見るだけでは、厳しいので、デバッグ機能を実装しています。
* ステップ実行
* 1 行実行
* ブレイクポイントの設置
* 現在のメモリ状況の表示
* メモリ状況の書き換え

ステップ実行

次の命令を実行して、その後動作を一時停止します。

1 行実行

別の行に移るまで命令を実行して、その後動作を一時停止します。
ループにより、実行前よりも戻った場合にも一時停止します。

ブレイクポイントの設置

特定の位置にブレイクポイントを設置して、その命令が実行される直前に動作を一時停止します。

現在のメモリ状況の表示

プログラムを一時停止した場合に、現在のポインタの位置とメモリの数値を見ることができます。
また、マウスオーバーすることにより、その数字に対応する文字と 16 進数での表記を表示します。

メモリ

一時停止中はメモリを書き換えることができます。
また、16 進数や文字での入力も可能です。

動画

文章だとわかりにくいと思ったので、動画にしました。
動画見ればわかるので、この記事の存在意義は実質皆無です。


brainf*ckのコーディング環境

あとがき

今回紹介した開発環境を試したいという方がいましたら、声かけて下されば zip ファイルを投げつけます。( Windows 以外は動作しない可能性が高いですが。)
また、質問とかあれば、ここにコメントするか、Twitterでリプもらえれば反応すると思います。
今回の記事の内容じゃなくても全然大丈夫なので気軽に質問ください。
それでは良い、brainfuck ライフを。