Я пишу синтаксический анализатор C, используя PLY, и недавно столкнулся с проблемой.
Этот код:
typedef int my_type;
my_type x;
Правильный код C, потому что my_type определен как тип, ранее
используется как таковой. Я справляюсь с этим, заполняя таблицу символов типа в
синтаксический анализатор, который используется лексером для различения типов и
простые идентификаторы.
Однако, хотя правило объявления типа заканчивается символом SEMI (токен ';'), PLY сдвигает токен my_type
со второй строки, прежде чем решить, что это сделано с первой. Из-за этого у меня нет шансов передать обновление в таблице символов типа лексеру, и это
видит my_type как идентификатор, а не как тип.
Есть идеи для исправления?
Полный код: http://code.google.com/p/pycparser/source/browse/trunk/src/c_parser.py
Не уверен, как я могу создать меньший пример из этого.
Edit:
Проблема решена. Смотрите мое решение ниже.