从字典中检索值的问题
Problems With Retrieving Values From a Dictionary
所以基本上我正在尝试为一种玩具语言制作一个 interperter 以了解更多关于它们如何工作等等,我现在坚持检索存储的变量。
起初我使用了一个字典,其中键和值都是 string
类型。但是在 运行 进入这个问题之后,我做了很多尝试来解决它。我认为 Dictionary
是问题所在,于是我自己编写了 class,但效果并不好,所以我又回到了字典。
我有一个名为 "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"
但是在执行时我只得到 "Undefined Variable: %var"
即使如果我打印出 Symbols 的内容我得到 %var
如果我打印出 GetVAR()
函数作为输入得到的内容,它也是 %var
为什么它会返回 "Undefined Variable: %var"
事实证明,使用一种方法进行分配并使用一种方法进行检索会破坏可访问变量。
更改以便变量赋值发生在解析器的主函数中而不是使用它的方法工作正常,并且使用函数获取值工作得很好。
不知道这是否与执行函数时数据的移动有关。但它有效,但我似乎无法弄清楚为什么。
所以基本上我正在尝试为一种玩具语言制作一个 interperter 以了解更多关于它们如何工作等等,我现在坚持检索存储的变量。
起初我使用了一个字典,其中键和值都是 string
类型。但是在 运行 进入这个问题之后,我做了很多尝试来解决它。我认为 Dictionary
是问题所在,于是我自己编写了 class,但效果并不好,所以我又回到了字典。
我有一个名为 "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"
但是在执行时我只得到 "Undefined Variable: %var"
即使如果我打印出 Symbols 的内容我得到 %var
如果我打印出 GetVAR()
函数作为输入得到的内容,它也是 %var
为什么它会返回 "Undefined Variable: %var"
事实证明,使用一种方法进行分配并使用一种方法进行检索会破坏可访问变量。
更改以便变量赋值发生在解析器的主函数中而不是使用它的方法工作正常,并且使用函数获取值工作得很好。 不知道这是否与执行函数时数据的移动有关。但它有效,但我似乎无法弄清楚为什么。