c# - 从字典中检索值的问题
问题描述
所以基本上我正在尝试为一种玩具语言制作一个interperter,以便更多地了解它们的工作原理等等,我现在正忙于检索存储的变量。
起初我使用了一个字典,其中键和值都是一种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
打印解析器给出的标记的方法,This is not stable。我将在变量检索工作后进行处理。然后我们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"
即使我打印出我得到的符号的内容%var
并且如果我打印出GetVAR()
函数作为输入得到的内容,这也是%var
为什么会这样返回"Undefined Variable: %var"
解决方案
事实证明,使用方法分配和检索也使用方法会破坏可访问变量。
更改以使变量分配发生在解析器的主函数中,而不是使用一种方法来正常工作,并且使用函数获取值可以完美地工作。不知道这是否与执行函数时数据的移动有关。但它有效,但我似乎无法弄清楚为什么。
推荐阅读
- elasticsearch - 对同一路径的多个嵌套查询?
- linux - -EPROTO 错误后无法重置 USB LTE 调制解调器
- python - 如何激活由 PyCharm 通过 shell 创建的 venv?
- php - 严重性:通知消息:尝试获取非对象 codeigniter 的属性
- c# - 在 MVC 中使用 JsonResult 流式传输到 json 时排除零值
- javascript - 当我需要将来自其他资源的 HTML 代码添加到我的页面时如何防止 CSS 泄漏
- r - 如何让 R 阅读所有其他人类语言?
- mysql - 在 MySQL 中列出乱序的记录
- django - django-mongo db docker 迁移设置
- django - Query Set Annotate 使用两个不同的查询集