【问题标题】:Symbol table in Compiler Construction using C# VB.NET使用 C# VB.NET 编译器构造中的符号表
【发布时间】:2019-12-25 18:21:59
【问题描述】:

我正在为给定的输入创建标记和符号表。但是在将变量处理到符号表中时发生了空引用异常。我已经搜索了互联网,但找不到解决方案。我是CC的新手。特别感谢提供帮助的他/她。下面给出了发生错误的特定函数的代码,请修复它...

for (int r = 1; r <= SymbolTable.GetLength(0);r++)
{
    //search in the symbol table if variable entry
    //  already exists
    if (SymbolTable[r, 2].Equals(finalArrayc[x].ToString()))
    {
        ind = SymbolTable[r, 1];
        ty = SymbolTable[r, 3];
        val = SymbolTable[r, 4];
        lin = SymbolTable[r, 5];
        tfTokens.AppendText("<var" + ind + ", " + ind + "> ");
        break;
    }
}

NullReferenceException 上线:

if (SymbolTable[r, 2].Equals(finalArrayc[x].ToString()))

【问题讨论】:

  • 符号表是 DataGridView(还是从 DGV 中提取的)? DGV 可编辑时,视图的最后一行是用于添加新数据的空白行。如果最后一行为空,您可能需要忽略它。你可以消除这条线,这样你就不会得到空值。

标签: c# vb.net compiler-construction


【解决方案1】:

改为:

if (SymbolTable[r, 2] != null && finalArrayc[x] != null && SymbolTable[r, 2].Equals(finalArrayc[x].ToString()))

目前这两者中的一个很可能为空,因此您需要在访问之前进行检查。

对于符号越界异常,还需要检查表格的长度。

   SymbolTable[r].Length > 3 &&  SymbolTable[r, 2] != null && finalArrayc.Length < x && finalArrayc[x] != null

【讨论】:

  • 现在索引超出范围错误被编译器持有!现在该怎么办?
猜你喜欢
  • 2011-10-15
  • 2020-12-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-30
相关资源
最近更新 更多