需要内部范围表示的数据结构

时间:2017-05-19 23:40:25

标签: c# parsing data-structures

我正在研究用于交互式小说游戏的自定义编程语言。这种语言不是要编译的,它更像是一种像Python这样的解释语言。我正在用C#构建解析器。在构建这个解释器时,我遇到了关于如何在内存中表示范围的问题。我将每个变量存储在一个特殊的变量类中。

    public class variable
    {
        public string str;
        public DataType datatype; //an enum with all datatypes supported by the language
        public int id;
        private static int increment;
        public variable(string str, DataType datatype)
        {
            this.str = str;
            this.datatype = datatype;
            this.id = increment;
            increment++;
        }
    }

另外,我有一个特殊的范围类来保存特定范围内的变量:

    public class scope
    {
        public List<variable> variables;
        public scope()
        {
            variables = new List<variable>();
        }
    }

问题是,我可以使用什么样的数据结构来轻松存储这些范围,并快速遍历可从特定范围访问的所有范围(以及这些范围中的变量)?我需要一种像树一样的东西。

1 个答案:

答案 0 :(得分:1)

传统上,范围由Stack数据结构表示。它与大括号语法特别有效,因为你基本上可以在遇到{时弹出新的并弹出}

就确定可用变量而言,一种非常简单(尽管是暴力)的方法是使用SelectMany

bool variableExists = currentScopes.SelectMany(s => s.Variables).Any(v => v.Value.Name == variableName);

另外,您实际上是在为解释语言编写解释器。解析所有编程语言。