Ожидается, что все синтаксические анализаторы, указанные в PLY, будут иметь одно правило верхнего уровня, которое уменьшается в результате анализа всего входного текста.Например, при разборе программы правило верхнего уровня может выглядеть примерно так:
def p_program(p):
'''
program : declarations
'''
def p_declarations(p):
'''
declarations : declarations declaration
| declaration
'''
...
Если вы получили ошибку «EOF» в анализаторе, это означает, что она достигла конца ввода безсокращение грамматического правила верхнего уровня.То есть стек разбора не пуст, и больше нет правил, которые можно уменьшить.Поскольку стек не пуст, анализатор попытается сдвинуть больше символов и потерпит неудачу из-за EOF.
Одна из возможных причин этой ошибки - неправильно заданное правило запуска в вашей грамматике.Убедитесь, что первая функция p_rule (p) в файле является правилом запуска.