Вы спрашивали об этом некоторое время назад, но пока нет комментариев или ответов. Вот возможное объяснение, почему.
Смотрю документацию в http://www.dabeaz.com/ply/ply.html. Там нет ничего о манипулировании parser.symstack. Похоже, это не открытый документированный интерфейс.
т.е. ты втыкаешь вилку в тостер.
Не думаете ли вы, что парсер может быть сбит с толку, если вы запутаетесь с его внутренней структурой данных или что он может порваться со следующей версией генератора парсера и т. Д.? Кроме того, вы не можете адекватно объяснить, что вы пытаетесь сделать. Какова цель отказа от нетерминальных символов, и что именно это означает? Что это за ситуации и в чем проблема? Может быть, проблема может быть решена без использования объекта парсера.
Кроме того, нет задокументированного объекта глобального синтаксического анализатора. Вы должны были определить эту переменную синтаксического анализатора, например, «parser = yacc.yacc ()» (задокументировано в Разделе 7: Несколько парсеров и лексеров). Поскольку вы затем ссылаетесь на эту переменную в самих правилах синтаксического анализатора, это выглядит очень глупо. Есть правильный способ для правил ссылаться на анализатор, и это через параметр p, который они получают: вы хотите p.parser. (Задокументировано в разделе 7, снова).