/// <summary> /// Dodaje referencje do symboli startowych /// do tablicy listOfProductions /// </summary> /// <param name="elem"></param> private void addToList(Productions elem) { if (LastAdded == ListSize - 1) { Console.WriteLine("Lista pełna."); } else { LastAdded++; listOfProductions[LastAdded] = elem; } }
/// <summary> /// Metoda dopowiadająca produkcji: S -> SS /// </summary> public void Prod_double() { if (listOfProductions[Indexer].Value == "S") { Productions nowy = new Productions(); if (LastAdded != ListSize - 1) { listOfProductions[Indexer].addPrev(nowy); addToList(nowy); } } }
/// <summary> /// Metoda odpowiadająca produkcji: S -> aSb /// </summary> public void Prod_ab() { if (listOfProductions[Indexer].Value == "S") { Productions n1 = new Productions(); n1.Value = "a"; Productions n2 = new Productions(); n2.Value = "b"; listOfProductions[Indexer].addPrev(n1); listOfProductions[Indexer].addNext(n2); } }
/// <summary> /// Dodaje element po symbolu startowym /// </summary> /// <param name="to_add"></param> public void addNext(Productions to_add) { if (this.next == null) { to_add.prev = this; this.next = to_add; } else { to_add.next = this.next; to_add.prev = this; this.next.prev = to_add; this.next = to_add; } }
/// <summary> /// Dodaje element przed symbolem startowym /// </summary> /// <param name="to_add"></param> public void addPrev(Productions to_add) { if (this.prev == null) { to_add.next = this; this.prev = to_add; } else { to_add.next = this; to_add.prev = this.prev; this.prev.next = to_add; this.prev = to_add; } }
/// <summary> /// Metoda do testów, /// wyświetla oprócz wszystkich elementów utworzonego słowa /// także elementy ze słowem pustym (tutaj wyświetlanym jako '*') /// </summary> public void DevWypisz() { Productions temp = new Productions(); temp = this; while (temp.prev != null) { temp = temp.prev; } while (temp != null) { Console.Write(temp.Value); temp = temp.next; } Console.WriteLine(""); Console.WriteLine("-------------------"); }
/// <summary> /// Konstruktor elementu produkcji, tworzy nowy obiekt startowy /// </summary> public Productions() { value = "S"; prev = null; next = null; }