用C#VB.NET构建编译器中的符号表

用C#VB.NET构建编译器中的符号表,c#,vb.net,compiler-construction,C#,Vb.net,Compiler Construction,我在做一个作业,为给定的输入创建令牌和符号表。但在将变量处理到符号表中时,出现了空引用异常。我在网上搜索过,但找不到解决办法。我是CC的新手。特别感谢他/她提供的帮助。下面给出了发生错误的特定函数的代码,请修复它 for (int r = 1; r <= SymbolTable.GetLength(0);r++) { //search in the symbol table if variable entry // already exists if (Symbo

我在做一个作业,为给定的输入创建令牌和符号表。但在将变量处理到符号表中时,出现了空引用异常。我在网上搜索过,但找不到解决办法。我是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;
    }
}
改为:

if (SymbolTable[r, 2] != null && finalArrayc[x] != null && SymbolTable[r, 2].Equals(finalArrayc[x].ToString()))
这两个选项中的一个目前很可能为空,因此您需要在访问之前进行检查

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

i、 e

SymbolTable[r]。长度>3&&SymbolTable[r,2]!=null&&finalarray.Length
这是否回答了您的问题?符号表是否为DataGridView(或从DGV中提取)?可编辑时的DGV视图的最后一行是用于添加新数据的空行。如果最后一行为空,您可能需要忽略它。您可以删除该行,这样就不会得到空值。现在,编译器将保留索引越界错误!现在该怎么办?
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