是的,我正在制作Brainfuck解释器,但我还需要根据其代码创建AST。
基本操作(+-。,>
现在,我认为可以使用字符串中的括号位置在它们之间创建链接。但这是一个问题-如何创建匹配的括号对?
这是我的代码示例:
private readonly List<int> rightBracketsIds;
private readonly List<int> leftBracketsIds;
private List<Tuple<int, int>> lsTuples;
我通过使用特殊方法来获得括号的位置,并将其放置在相应的列表中。但是我应该用什么来创建它们呢?
喜欢
++[>+[>++<-]<-]++[>++<-]>.
磅:2、5、17
RB:11、14、23
所以我需要获取元组 。
好吧,我可以看到右方括号的位置必须大于左方括号的位置:通过查看LB 17和RB 14,我们可以说它们没有链接在一起。但是我认为有办法使它变得更好。
是的,任何答案都将有所帮助。对不起,我的英语不好。
附言我已经考虑过堆栈了,但是我不知道如何在问题中使用它。
P.P.S.我终于找到了有用的东西:How to find the matching pair of braces in a string?
如果可以解决问题,请在此处发布解决方案。
最佳答案
这是一种“不是很有效但是很直接”的方法。
对于每个左括号X
,通过执行以下操作查找其对:
声明一个变量bracketCount
循环浏览X
之后的字符
如果看到另一个左括号,请将bracketCount
加1
如果看到另一个右括号,请检查bracketCount
是否为0,如果是,则找到与X
对应的右括号!如果不是0,则从bracketCount
减去1。
关于c# - C#:Brainfuck支架查找器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46619584/