Стек с графической структурой - Graph-structured stack
В Информатика, а стек с графической структурой (GSS) - это ориентированный ациклический граф куда каждый направил дорожка представляет стек Стек с графической структурой является важной частью Алгоритм Томиты, где он заменяет обычный стек из выталкивающий автомат. Это позволяет алгоритму кодировать недетерминированные выборы при анализе неоднозначная грамматика, иногда с большей эффективностью.
На следующей диаграмме четыре стека: {7,3,1,0}, {7,4,1,0}, {7,5,2,0} и {8,6,2,0} .
Другой способ симулировать недетерминизм - это дублировать стек по мере необходимости. Дублирование было бы менее эффективным, поскольку вершины не были бы общими. В этом примере потребуется 16 вершин вместо 9.
Операции
GSSnode* GSS::Добавить(GSSnode* предыдущий, int элем){ int предыдущий уровень = предыдущий->уровень; утверждать(уровни.размер() >= предыдущий уровень + 1); int уровень = предыдущий уровень + 1; если (уровни.размер() == уровень) { уровни.изменить размер(уровень + 1); } GSSnode* узел = findElemAtLevel(уровень, элем); если (узел == nullptr) { узел = новый GSSnode(); узел->элем = элем; узел->уровень = уровень; уровни[уровень].отталкивать(узел); } узел->Добавить(предыдущий); вернуть узел;}
пустота GSS::удалять(GSSnode* узел){ если (уровни.размер() > узел->уровень + 1) если (findPrevAtLevel(узел->уровень + 1, узел)) бросить Исключение(«Снимать можно только сверху».); для (int я = 0; я < уровни[узел->уровень].размер(); я++) если (уровни[узел->уровень][я] == узел) { уровни[узел->уровень].стереть(уровни[узел->уровень].начать() + я); перерыв; } Удалить узел;}
использованная литература
- Масару Томита. Стек с графической структурой и анализ естественного языка. Ежегодное собрание Ассоциации компьютерной лингвистики, 1988 г. [1]
- Элизабет Скотт, Адриан Джонстон GLL парсинг gll.pdf
Эта Информатика статья - это заглушка. Вы можете помочь Википедии расширяя это. |