/// <summary>Adds an new LRAction to this table.</summary> /// <param name="p_symbol">The Symbol.</param> /// <param name="p_action">The Action.</param> /// <param name="p_value">The value.</param> public void AddItem(Symbol p_symbol, Action p_action, int p_value) { LRAction item = new LRAction(); item.Symbol = p_symbol; item.Action = p_action; item.Value = p_value; m_members.Add(item); }
/* constructor */ /// Creates a new Rule. internal Rule(int p_tableIndex, Symbol p_head) { m_ruleSymbols = new ArrayList(); m_tableIndex = p_tableIndex; m_ruleNT = p_head; }
// equals ? /// internal void AddItem(Symbol p_symbol) { m_ruleSymbols.Add(p_symbol); }
private void Reset() { foreach (Symbol symbol in m_symbols) { if (symbol.Kind == SymbolType.Error) m_errorSymbol = symbol; else if (symbol.Kind == SymbolType.End) m_endSymbol = symbol; } m_haveReduction = false; m_LalrState = m_initLalrState; m_lineNumber = 1; m_commentLevel = 0; m_inputTokens.Clear(); m_outputTokens.Clear(); m_tempStack.Clear(); }
private void LoadTables(GrammarReader reader) { Object obj; Int16 index; while (reader.MoveNext()) { byte id = (byte)reader.RetrieveNext(); switch ((RecordId)id) { case RecordId.Parameters: m_parameters["Name"] = (String)reader.RetrieveNext(); m_parameters["Version"] = (String)reader.RetrieveNext(); m_parameters["Author"] = (String)reader.RetrieveNext(); m_parameters["About"] = (String)reader.RetrieveNext(); m_caseSensitive = (Boolean)reader.RetrieveNext(); m_startSymbol = (Int16)reader.RetrieveNext(); break; case RecordId.TableCounts: m_symbols = new Symbol[(Int16)reader.RetrieveNext()]; m_charsets = new String[(Int16)reader.RetrieveNext()]; m_rules = new Rule[(Int16)reader.RetrieveNext()]; m_DfaStates = new FAState[(Int16)reader.RetrieveNext()]; m_LalrTables = new LRActionTable[(Int16)reader.RetrieveNext()]; m_initialized = true; break; case RecordId.Initial: m_initDfaState = (Int16)reader.RetrieveNext(); m_initLalrState = (Int16)reader.RetrieveNext(); break; case RecordId.Symbols: index = (Int16)reader.RetrieveNext(); String name = (String)reader.RetrieveNext(); SymbolType kind = (SymbolType)(Int16)reader.RetrieveNext(); Symbol symbol = new Symbol(index, name, kind); AddSymbol(symbol); break; case RecordId.CharSets: index = (Int16)reader.RetrieveNext(); String charset = (String)reader.RetrieveNext(); AddCharset(index, charset); break; case RecordId.Rules: index = (Int16)reader.RetrieveNext(); Symbol head = m_symbols[(Int16)reader.RetrieveNext()]; Rule rule = new Rule(index, head); reader.RetrieveNext(); // reserved while ((obj = reader.RetrieveNext()) != null) rule.AddItem(m_symbols[(Int16)obj]); AddRule(rule); break; case RecordId.DFAStates: FAState fastate = new FAState(); index = (Int16)reader.RetrieveNext(); if ((bool)reader.RetrieveNext()) fastate.AcceptSymbol = (Int16)reader.RetrieveNext(); else reader.RetrieveNext(); reader.RetrieveNext(); // reserverd while (! reader.RetrieveDone()) { Int16 ci = (Int16)reader.RetrieveNext(); Int16 ti = (Int16)reader.RetrieveNext(); reader.RetrieveNext(); // reserved fastate.AddEdge(m_charsets[ci], ti); } AddDfaState(index, fastate); break; case RecordId.LRTables: LRActionTable table = new LRActionTable(); index = (Int16)reader.RetrieveNext(); reader.RetrieveNext(); // reserverd while (! reader.RetrieveDone()) { Int16 sid = (Int16)reader.RetrieveNext(); Int16 action = (Int16)reader.RetrieveNext(); Int16 tid = (Int16)reader.RetrieveNext(); reader.RetrieveNext(); // reserved table.AddItem(m_symbols[sid], (Action)action, tid); } AddLalrTable(index, table); break; case RecordId.Comment: Console.WriteLine("Comment record encountered"); break; default: throw new ParserException("Wrong id for record"); } } }
private void AddSymbol(Symbol p_symbol) { if (! m_initialized) throw new ParserException("Table sizes not initialized"); int index = p_symbol.TableIndex; m_symbols[index] = p_symbol; }
/// internal protected void CopyData(Symbol p_symbol) { m_name = p_symbol.Name; m_kind = p_symbol.Kind; m_tableIndex = p_symbol.TableIndex; }
/* public methods */ /// internal void SetParent(Symbol p_symbol) { CopyData(p_symbol); }
/// internal Token(Symbol p_symbol) : this() { SetParent(p_symbol); }