Я пишу компилятор для простого c-подобного языка. Я пытаюсь сделать анализ на следующий пример:Это случай, который я бы обработал в «разрешении типа»?
struct Foo {
char* name;
};
struct Foo foo;
char* blah = foo.name;
В частности, этот анализ будет обрабатывать, если foo
нерешенные, или если name
нерешенные и т.д. два способа Подхожу это с разрешением имен, т.е. убедитесь, что существует foo
, а name
существует в foo
. Тогда есть «разрешение типа», где я уверен, что существует структура Foo
.
Первый вопрос:
- Am Я получаю это право, что разрешение типа пропуск будет проверять, если структура «Foo» существует?
Я спрашиваю об этом, потому что у меня есть небольшая проблема с этим подходом. Поскольку разрешение имен выполняется до разрешения типа, мы не можем проверить foo.name
, потому что структура Foo
еще не разрешена, поэтому мы ничего не знаем о типе, его полях, их типах и т. Д.
Если это случай который обрабатывается в разрешении по типу:
- Должен ли я выполнять разрешение типа до или после разрешения имени?
Если я резолюция имя перед тем разрешением типа:
- Как подойти к моей проблеме, где мне нужно знать о типе в разрешении имен?