<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Brainfuck on dyama&#39;s page</title>
		<link>https://dyama.org/tag/brainfuck/</link>
		<description>Recent content in Brainfuck on dyama&#39;s page</description>
		<generator>Hugo</generator>
		<language>ja</language>
		
		
		
		
			<lastBuildDate>Sat, 18 Jul 2015 13:59:01 +0900</lastBuildDate>
		
			<atom:link href="https://dyama.org/tag/brainfuck/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Ruby 版 Brainfuck インタプリタを書いてみました。</title>
				<link>https://dyama.org/2015/07/2417/</link>
				<pubDate>Sat, 18 Jul 2015 13:59:01 +0900</pubDate>
				<guid>https://dyama.org/2015/07/2417/</guid>
				<description>&lt;p&gt;&lt;img src=&#34;https://dyama.org/wp-content/uploads/2015/07/brain.png&#34; alt=&#34;brain&#34; class=&#34;img-center&#34; loading=&#34;lazy&#34;&gt;&#xA;&lt;/p&gt;&#xA;&lt;p&gt;以前、&lt;a href=&#34;https://dyama.org/2012/03/62/&#34;&gt;C 言語で Brainfuck インタプリタを書きました&lt;/a&gt;が、今度は Ruby で同じものを書いてみました。&lt;/p&gt;&#xA;&lt;p&gt;クラス Machine を簡単なバーチャルマシンに見立てて、メモリの保持と演算を行なわせています。&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;brainfuck.rb&lt;/strong&gt; (&lt;a href=&#34;https://gist.github.com/dyama/670ba6cd3b9e4401412c&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Gist&lt;/a&gt;)&lt;/p&gt;</description>
			</item>
			<item>
				<title>C による Brainfuck インタプリタ</title>
				<link>https://dyama.org/2012/03/62/</link>
				<pubDate>Thu, 22 Mar 2012 00:00:06 +0900</pubDate>
				<guid>https://dyama.org/2012/03/62/</guid>
				<description>&lt;p&gt;難解プログラミング言語のひとつ、&lt;a href=&#34;http://ja.wikipedia.org/wiki/Brainfuck&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Brainfuck&lt;/a&gt;のインタプリタを書いてみました。命令は8つしかありませんが、立派に&lt;a href=&#34;http://ja.wikipedia.org/wiki/%E3%83%81%E3%83%A5%E3%83%BC%E3%83%AA%E3%83%B3%E3%82%B0%E5%AE%8C%E5%85%A8&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;チューリング完全&lt;/a&gt;です。&lt;/p&gt;&#xA;&lt;h2 id=&#34;言語仕様&#34;&gt;言語仕様&lt;/h2&gt;&#xA;&lt;h3 id=&#34;処理系の構成要素&#34;&gt;処理系の構成要素&lt;/h3&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;インストラクションポインタ – プログラム中のある文字を指す。&lt;/li&gt;&#xA;&lt;li&gt;少なくとも30000個の要素を持つバイトの配列 – 各要素はゼロで初期化される。&lt;/li&gt;&#xA;&lt;li&gt;データポインタ – 前述の配列のどれかの要素を指す。最も左の要素を指すよう初期化される。&lt;/li&gt;&#xA;&lt;li&gt;入力と出力の2つのバイトストリーム&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h3 id=&#34;命令&#34;&gt;命令&lt;/h3&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;gt;&lt;/code&gt; ポインタをインクリメントする。ポインタを&lt;code&gt;ptr&lt;/code&gt;とすると、C言語の「&lt;code&gt;ptr++;&lt;/code&gt;」に相当する。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;&amp;lt;&lt;/code&gt; ポインタをデクリメントする。C言語の「&lt;code&gt;ptr--;&lt;/code&gt;」に相当。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;+&lt;/code&gt; ポインタが指す値をインクリメントする。C言語の「&lt;code&gt;(*ptr)++;&lt;/code&gt;」に相当。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;-&lt;/code&gt; ポインタが指す値をデクリメントする。C言語の「&lt;code&gt;(*ptr)--;&lt;/code&gt;」に相当。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;.&lt;/code&gt; ポインタが指す値を出力に書き出す。C言語の「&lt;code&gt;putchar(*ptr);&lt;/code&gt;」に相当。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;,&lt;/code&gt; 入力から1バイト読み込んで、ポインタが指す先に代入する。C言語の「&lt;code&gt;*ptr=getchar();&lt;/code&gt;」に相当。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;[&lt;/code&gt; ポインタが指す値が0なら、対応する &lt;code&gt;]&lt;/code&gt; の直後までジャンプする。C言語の「&lt;code&gt;while(*ptr){&lt;/code&gt;」に相当。&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;]&lt;/code&gt; ポインタが指す値が0でないなら、対応する &lt;code&gt;[&lt;/code&gt; にジャンプする。C言語の「&lt;code&gt;}&lt;/code&gt;」に相当。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;コード&#34;&gt;コード&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;bfi.c&lt;/strong&gt; (&lt;a href=&#34;https://gist.github.com/dyama/7a466dce22b1d6ffcc46&#34; target=&#34;_blank&#34; rel=&#34;noopener&#34;&gt;Gist&lt;/a&gt;)&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
