// // RBBISymbolTable::print Debugging function, dump out the symbol table contents. // ///CLOVER:OFF internal virtual void RbbiSymtablePrint() { Console.Out.Write("Variable Definitions\n" + "Name Node Val String Val\n" + "----------------------------------------------------------------------\n"); RBBISymbolTableEntry[] syms = fHashTable.Values.ToArray(); for (int i = 0; i < syms.Length; i++) { RBBISymbolTableEntry s = syms[i]; Console.Out.Write(" " + s.Key + " "); // TODO: format output into columns. Console.Out.Write(" " + s.Val + " "); Console.Out.Write(s.Val.fLeftChild.fText); Console.Out.Write("\n"); } Console.Out.WriteLine("\nParsed Variable Definitions\n"); for (int i = 0; i < syms.Length; i++) { RBBISymbolTableEntry s = syms[i]; Console.Out.Write(s.Key); s.Val.fLeftChild.PrintTree(true); Console.Out.Write("\n"); } }
// // RBBISymbolTable::addEntry Add a new entry to the symbol table. // Indicate an error if the name already exists - // this will only occur in the case of duplicate // variable assignments. // internal virtual void AddEntry(string key, RBBINode val) { if (fHashTable.TryGetValue(key, out RBBISymbolTableEntry e) && e != null) { fRuleScanner.Error(RBBIRuleBuilder.U_BRK_VARIABLE_REDFINITION); return; } fHashTable[key] = new RBBISymbolTableEntry { Key = key, Val = val }; }
// // RBBISymbolTable::addEntry Add a new entry to the symbol table. // Indicate an error if the name already exists - // this will only occur in the case of duplicate // variable assignments. // internal virtual void AddEntry(string key, RBBINode val) { RBBISymbolTableEntry e; e = fHashTable.Get(key); if (e != null) { fRuleScanner.Error(RBBIRuleBuilder.U_BRK_VARIABLE_REDFINITION); return; } e = new RBBISymbolTableEntry(); e.Key = key; e.Val = val; fHashTable[e.Key] = e; }