首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nimrod语言中的Brainfuck解释器

Nimrod语言中的Brainfuck解释器
EN

Stack Overflow用户
提问于 2013-05-31 01:50:27
回答 1查看 592关注 0票数 8

我正在玩弄nim (在写这篇文章的时候还叫nimrod),用这种语言写了一个Brainfuck解释器。在没有实现循环的情况下,我有:

代码语言:javascript
复制
import os, unsigned

const RamSize = 200

type
  TRam = array[0..RamSize, int]

var
  ram : TRam
  ip  : int = 0
  dp  : int = 0

proc readCode(path: string) =
  var
    f : TFile = open(path)
    i : int = 0
  while i < RamSize and not EndOfFile(f):
    ram[i] = ord(readChar(f))
    inc(i)

proc main(path: string) =

  readCode(path)
  while ip < RamSize:
    case chr(ram[ip])
    of '>' : inc dp
    of '<' : dec dp
    of '+' : inc ram[dp]
    of '-' : dec ram[dp]
    of '.' : write stdout, chr(ram[dp])
    else   : nil
    inc(ip)
  echo()

if paramcount() == 1: main(paramstr(1))
else: echo("usage: bfrun PATH")

它编译成功,但当我向它抛出如下输入时:

代码语言:javascript
复制
>
+++++ +++++
+++++ +++++
+++++ +++++
+++++ +++++
+++++ +++++
+++++ +++++
+++++ .

它应该打印字符'A‘,并返回’n‘。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-31 02:10:30

如果我理解正确的话,看起来dp被设置为1,然后ram[dp]被递增65倍。但是ram[dp],也就是ram[1],一开始使用的是程序的第二个字符,即回车符(ASCII13)。A是ASCII 65,N是ASCII 78,65 + 13是78。

在开始递增存储单元之前,将dp设置为程序空间之外的某个位置--或者使用单独的内存来保存程序。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16842810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档