Algorithm 脑力操解释器状态图
我已经编写了brainfuck ide的alpha版本。我写了自己的解释器,尽管我的老师在代码循环方面给了我很大的帮助,因为我很难用“it方式”理解它。现在我的报告需要一个解释器算法的状态图,他如何处理每个字符 我已经绘制了下面的图表,唯一缺少的是解释器如何处理循环。我看了看老师自己写的代码,但我不明白。我希望你能在这里给我指出正确的方向,我不想要一个完整的答案,只是一些旁注当代码中遇到[or]时正在做什么 codeZeiger=codePointer(在代码中移动的指针)Algorithm 脑力操解释器状态图,algorithm,uml,interpreter,brainfuck,statechart,Algorithm,Uml,Interpreter,Brainfuck,Statechart,我已经编写了brainfuck ide的alpha版本。我写了自己的解释器,尽管我的老师在代码循环方面给了我很大的帮助,因为我很难用“it方式”理解它。现在我的报告需要一个解释器算法的状态图,他如何处理每个字符 我已经绘制了下面的图表,唯一缺少的是解释器如何处理循环。我看了看老师自己写的代码,但我不明白。我希望你能在这里给我指出正确的方向,我不想要一个完整的答案,只是一些旁注当代码中遇到[or]时正在做什么 codeZeiger=codePointer(在代码中移动的指针) memoryZei
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很陌生(这就是为什么我们有这个实践项目),但是通过几次尝试,我认为我可以让图表变得清晰和富有表现力。