Exemplo n.º 1
0
		/// <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);
		}
Exemplo n.º 2
0
		/* 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;
		}
Exemplo n.º 3
0
		// equals ?

		///
		internal void AddItem(Symbol p_symbol)
		{
			m_ruleSymbols.Add(p_symbol);
		}		
Exemplo n.º 4
0
		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();
		}
Exemplo n.º 5
0
		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");
				}
			}
		}
Exemplo n.º 6
0
		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;
		}
Exemplo n.º 7
0
		///
		internal protected void CopyData(Symbol p_symbol)
		{
			m_name = p_symbol.Name;
			m_kind = p_symbol.Kind;
			m_tableIndex = p_symbol.TableIndex;			
		}
Exemplo n.º 8
0
		/* public methods */
		
		/// 
		internal void SetParent(Symbol p_symbol)
		{
			CopyData(p_symbol);
		}
Exemplo n.º 9
0
		///
		internal Token(Symbol p_symbol)
		:	this()
		{
			SetParent(p_symbol);
		}