gpt4 book ai didi

C#:Brainfuck 括号查找器

转载 作者:太空宇宙 更新时间:2023-11-03 12:22:32 24 4
gpt4 key购买 nike

是的,我正在制作 Brainfuck 解释器,但我还需要从其代码创建 AST。可以很容易地在节点中使用原始操作(+ - . , > <)。另一方面,循环操作看起来相当复杂。所以,我需要的是在 [ 和 ] 节点之间建立链接。为此,我在 ] 节点中使用了一个特殊的节点字段。

现在我认为我可以通过在字符串中使用括号位置来创建它们之间的链接。但这里有一个问题 - 如何创建匹配的括号对?

这是我的代码示例:

    private readonly List<int> rightBracketsIds;
private readonly List<int> leftBracketsIds;

private List<Tuple<int, int>> lsTuples;

我使用特殊方法获取括号的位置并将它们放在相应的列表中。但是我应该用什么来创建它们对呢?喜欢

++[>+[>++<-]<-]++[>++<-]>.

LB:2、5、17

RB:11、14、23

所以我需要获取元组 <2,14> <5, 11> <17, 23>。

好吧,我可以看出右括号的位置必须大于左括号的位置:通过查看 LB 17 和 RB 14 我们可以说它们没有链接在一起。但我认为有一种方法可以让它变得更好。

是的,任何答案都会有所帮助。抱歉我的英语不好。

附言我考虑过 Stack,但我不知道如何在我的问题中使用它。附言我终于找到了一些有用的东西:How to find the matching pair of braces in a string?

如果我能解决我的问题,我会在此处发布解决方案。

最佳答案

这里介绍一种“效率不高但直截了当”的方式。

对于每个左括号 X,通过执行以下操作查找它的对:

  • 声明一个变量bracketCount
  • 遍历X之后的字符
  • 如果您看到另一个左括号,请将 1 添加到 bracketCount
  • 如果您看到另一个右括号,请检查 bracketCount 是否为 0,如果是,则您找到了与 X 对应的右括号!如果不为 0,则 bracketCount 减 1。

关于C#:Brainfuck 括号查找器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46619584/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com