Проблема разбора одной из конструкций языка С++

Поскольку синтаксический анализатор языка Си практически готов, у нас возник вопрос — что делать дальше, приступить к генерации кода или попробовать разбор конструкций С++?  Так или иначе, но для того, чтобы в будущем компилятор смог собрать себя сам, нам понадобится поддержка классов. Если сейчас заняться генерацией кода, то при добавлении конструкций языка С++ придётся переписывать много кода. Поэтому мы решили попробовать реализовать разбор конструкций C++. Хотя бы частично.

Очереднаяя  проблема, с которой пришлось столкнуться, вот такой вот бессмысленный, но корректный с точки зрения языка, код:

typedef struct {
	void hello(void) { printf("Value is %d\n", var); }
	int    var;
} hope_t;

int main(void)
{
	hope_t  v;
	v.var = 7;
	v.hello();
	return 0;
}

Обратите внимание — переменная var в описании типа hope_t определена после её использования  функцией hello(). Поэтому для корректного разбора такой структуры потребуется два прохода — разбор обычных полей при первом проходе и разбор вложенных функций на втором проходе. С учётом того, что лексемы поступают последовательно, их необходим сохранять для второго прохода.Решение этой проблемы приблизит нас минимальному функционалу, необходимому для самосборки компилятора. Конечно, можно было бы наложить ограничения на использование таких конструкций и генерировать ошибку, но это не спортивно и нарушит стандарт.


Оставить комментарий