首页 > 解决方案 > 是否可以从字符串/标记列表中获取左大括号的右大括号?

问题描述

我正在尝试用 c# 制作一种编程语言,所以我有一个标记列表。我遍历该标记列表以查找语法,并且在这样做时,在发现一个左大括号后,我想找到最准确的右括号以匹配左括号。

对于此示例,将有每个符号和关键字的标记列表,知道这一点,让我们继续...

这是示例:

红色箭头是如果我得到最近的右括号会发生什么,绿色箭头是如果我找到一种方法来准确找到一个右大括号会发生什么。

有谁知道我会怎么做?

请记住我的项目是用 C# 编写的,所以如果您有任何 C# 示例,那就太好了,谢谢!

标签: c#mono

解决方案


您的语言源代码的内部表示需要(就像所有软件一样)模拟现实。您的示例是嵌套由大括号分隔的块。所以下一步是构建语法。匹配的右括号(如果在抽象语法树中表示)将始终是每个子树中与第一个节点处于同一级别的最后一个节点:

compilation_unit  
  class_definition
  block_start[1]
    method_definition
    block_start[2]
      conditional_expression
      block_start[3]
        function_call
      block_end[3]
    block_end[2]
  block_end[1]

推荐阅读