Algorithm 脑力操解释器状态图

Algorithm 脑力操解释器状态图,algorithm,uml,interpreter,brainfuck,statechart,Algorithm,Uml,Interpreter,Brainfuck,Statechart,我已经编写了brainfuck ide的alpha版本。我写了自己的解释器,尽管我的老师在代码循环方面给了我很大的帮助,因为我很难用“it方式”理解它。现在我的报告需要一个解释器算法的状态图,他如何处理每个字符 我已经绘制了下面的图表,唯一缺少的是解释器如何处理循环。我看了看老师自己写的代码,但我不明白。我希望你能在这里给我指出正确的方向,我不想要一个完整的答案,只是一些旁注当代码中遇到[or]时正在做什么 codeZeiger=codePointer(在代码中移动的指针) memoryZei

我已经编写了brainfuck ide的alpha版本。我写了自己的解释器,尽管我的老师在代码循环方面给了我很大的帮助,因为我很难用“it方式”理解它。现在我的报告需要一个解释器算法的状态图,他如何处理每个字符

我已经绘制了下面的图表,唯一缺少的是解释器如何处理循环。我看了看老师自己写的代码,但我不明白。我希望你能在这里给我指出正确的方向,我不想要一个完整的答案,只是一些旁注当代码中遇到[or]时正在做什么

codeZeiger=codePointer(在代码中移动的指针)
memoryZeiger=memoryPointer(在内存堆栈中移动的指针)
内存=内存堆栈
代码=作为字符串对象的代码
i=interpre()方法的计数器(从字符串中读取单个字符,然后通过switch语句进行解析,您可以在下面看到该语句的状态图)


您应该真正了解循环机制。在brainfuck中,循环由
[
]
包围。这意味着如果满足某个条件,括号内的代码将执行并重新开始。例如:

1: [
2:   cmd1
3:   cmd2
4: ]
5: cmd3
第1行检查
内存[memoryZeiger]
是否等于0。如果是,则跳到第5行。如果不是,则执行cmd1、cmd2等,直到第4行。如果您的解释器在第4行,它会自动跳转到第1行(或者它可以检查条件并进一步移动-但让我们保持简单,并假设它跳转到第1行)。然后整个过程又开始了

来回答你关于状态图的问题。你需要这样的东西:

     _____________________________
    |   code[codeZeiger] == '['   |
     -----------------------------
            /                  \
           /                    \
memory[memoryZeiger] == 0       memory[memoryZeiger] != 0
          |                               |
   "go to matching ']'"               codeZeiger++
]
的另一种情况应该是等效的

顺便说一句,“匹配]”很重要。这些括号可以嵌套

1)您不需要状态图,因为您的编译器没有状态(只有内存、内存指针和代码指针,可能还有两个用于查找匹配括号)-一个像on这样的简单表就足够了

2) 如果您坚持使用状态图,则不要将条件(如
code[codeZeiger]=='+'
)放入状态,而是放在转换上

3)
i
必须改为
codeZeiger


4) 解释brainfuck的代码应该非常简单。如果您不理解,请阅读wikipedia页面,并尝试在没有软件的情况下解释其中给出的程序。让它在纸上运行:)

你混合了i和codeZeiger。你应该只有一个。是的,对不起,我注意到现在,memoryStack和code需要单独的计数器。谢谢你的提示…我不知道你的意思,它们都在主帖子里。谢谢,我会多读一点,因为现在我已经做了一个结构图。有点宽,很抱歉。我想我理解你想说的,但是我对uml很陌生(这就是为什么我们有这个实践项目),但是通过几次尝试,我认为我可以让图表变得清晰和富有表现力。