从字典中检索值的问题

时间:2019-07-17 19:52:04

标签: c# parsing data-retrieval storing-data

因此,基本上,我试图尝试一种玩具语言,以更多地了解它们的工作方式,等等,现在我只能检索存储的变量。

首先,我使用了字典,其中键和值均为string类型。但是在遇到问题后,我做了很多尝试来解决它。我以为Dictionary是个问题,我自己上课,但效果再好不过了,所以我回到了字典上。

我有一个名为"Test.txt"的文本文件,在其中写入代码,然后由词法分析器从中读取代码。词法分析器生成令牌,然后将令牌传递给解析器,依此类推。

    // '%' for declaring a variable
    //     that can be either a string and a number
    // Code form "Test.txt"

    %var = 100
    print %var

    //the assignment works fine, but the printing doesnt.

词法分析器从看起来像这样的变量string中产生一个VAR:%var令牌,然后将其发送到解析器。

然后我们有DoPRINT方法,该方法将打印由解析器提供的令牌,这是不稳定的。在变量检索工作之后,我将继续进行处理。然后我们有了名为Symbols的字典,其中包含用于添加和检索的核心响应方法

        private void AssignVAR(String VarName, String VarValue)
        {
            Symbols[VarName] = VarValue;
        }

        private String GetVAR(String VarName)
        {
            if(Symbols.ContainsKey(VarName))
                return Symbols[VarName];
            else
                return "Undefined Variable: " + VarName;
        }

        private void DoPRINT(String ToPrint)
        {
            if(ToPrint.Substring(0, 6) == "STRING")
                // initially = 'STRING:"<text>"'
                Console.WriteLine(ToPrint.Substring(8, ToPrint.Length - 9));
            else if(ToPrint.Substring(0, 3) == "NUM")
                // initially = 'NUM:<number>'
                Console.WriteLine(ToPrint.Substring(4));
            else if(ToPrint.Substring(0, 4) == "EXPR")  
      // initially = 'EXPR:<expression>'       
      Console.WriteLine(Core.EvaluateEXPR(ToPrint.Substring(5)).ToString());
            else if(ToPrint.Substring(0, 3) == "VAR") 
                // initially = "VAR:%var"
                // when the "Symbols" are printed out
                // the name is "%var" which is the same
                // as the substring below
                Console.WriteLine(GetVAR(ToPrint.Substring(4)));
        }

我希望输出是我为变量"100"分配的内容,但是执行时,即使我打印出Symbols的内容,我也只会得到"Undefined Variable: %var",并且得到%var,并且如果我打印出GetVAR()函数作为输入的内容,那也是%var为什么然后返回"Undefined Variable: %var"

1 个答案:

答案 0 :(得分:0)

事实证明,使用方法进行分配以及也使用方法进行检索会破坏可访问变量。

进行更改,以使变量分配发生在解析器的主函数中,而不是使用用于其的方法很好地工作,并且使用函数获取值的效果很好。 不知道这是否与执行函数时的数据移动有关。但这有效,但我似乎无法弄清楚为什么。

相关问题