Signatur
Beschreibung
Parle\Stack ist eine Klasse der Parle-Erweiterung und implementiert eine klassische LIFO-Datenstruktur (Last In, First Out). Das zuletzt hinzugefügte Element wird als erstes wieder entnommen – ähnlich einem Stapel von Tellern.
Der Stack eignet sich besonders dann, wenn eine geordnete Reihenfolge bei der Verarbeitung von Elementen benötigt wird und das zuletzt hinzugefügte Element zuerst verarbeitet werden soll. Typische Einsatzgebiete sind Parsing-Algorithmen, Ausdrucksauswertungen und Tiefensuche in Graphen.
Im Rahmen der Parle-Erweiterung wird Parle\Stack primär intern von den Parser-Klassen genutzt, kann aber auch eigenständig als allgemeiner Stack eingesetzt werden. Die Klasse bietet Methoden zum Hinzufügen (push), Entfernen (pop) und Inspizieren des obersten Elements (top), sowie eine Eigenschaft size, um die aktuelle Anzahl der Elemente abzufragen.
Da Parle\Stack auf einer nativen C++-Implementierung basiert, ist sie in der Regel performanter als eine rein in PHP implementierte Stack-Lösung.
Beispiele
Grundlegende Verwendung des Parle\Stack
<?php
// Parle-Erweiterung muss installiert sein
$stack = new Parle\Stack();
// Elemente auf den Stack legen
$stack->push('erstes');
$stack->push('zweites');
$stack->push('drittes');
echo 'Stack-Größe: ' . $stack->size . PHP_EOL;
// Oberstes Element ansehen (ohne zu entfernen)
echo 'Oberstes Element: ' . $stack->top . PHP_EOL;
// Elemente der Reihe nach entfernen (LIFO)
while ($stack->size > 0) {
echo 'Pop: ' . $stack->top . PHP_EOL;
$stack->pop();
}
echo 'Stack ist leer: ' . ($stack->empty ? 'ja' : 'nein') . PHP_EOL;
Stack zur Auswertung eines geklammerten Ausdrucks
<?php
// Einfache Demonstration: Klammern auf Korrektheit prüfen
$stack = new Parle\Stack();
$ausdruck = '((a + b) * (c - d))';
$ausgeglichen = true;
for ($i = 0; $i < strlen($ausdruck); $i++) {
$zeichen = $ausdruck[$i];
if ($zeichen === '(') {
$stack->push($zeichen);
} elseif ($zeichen === ')') {
if ($stack->empty) {
$ausgeglichen = false;
break;
}
$stack->pop();
}
}
if (!$stack->empty) {
$ausgeglichen = false;
}
echo 'Klammern ausgeglichen: ' . ($ausgeglichen ? 'ja' : 'nein') . PHP_EOL;
// Wichtig · Fallstricke
Voraussetzung: Die Parle-Erweiterung muss über PECL installiert sein (pecl install parle). Sie ist nicht standardmäßig in PHP enthalten. Die Verfügbarkeit kann mit extension_loaded('parle') geprüft werden.
Eigenschaften: Parle\Stack stellt folgende Eigenschaften bereit: size (Anzahl der Elemente, int), top (oberstes Element, lesend), empty (boolean, ob der Stack leer ist). Ein Zugriff auf top bei leerem Stack kann zu undefiniertem Verhalten führen – daher stets empty oder size prüfen.
Versionshinweis: Die genaue API kann je nach installierter Parle-Version leicht variieren. Es empfiehlt sich, die jeweils aktuelle PECL-Dokumentation zu konsultieren.