Распознавание новых типов из библиотеки - PullRequest
2 голосов
/ 08 января 2012

Я пишу компилятор для подмножества языка Java, и во время написания сканера мне было интересно, как распознать типы, которые не являются примитивными, но поступают из библиотеки.Например, тип String не является примитивным в языке Java.В общем, как распознать новые типы из библиотек как «ключевые слова» в языке, не зная их заранее.Спасибо!

1 Ответ

4 голосов
/ 08 января 2012

Попробуйте пройти через http://www.antlr.org/grammar/1152141644268/Java.g (обратите внимание на объявление type и его использование) - оно даст вам некоторое представление.

Короче говоря, когда вы анализируете источник, вы знаете,где вы ожидаете увидеть тип, будь то после модификаторов в полях и методах, непосредственно перед именами параметров в формальном списке параметров и т. д. И когда вы знаете, что String - это некоторый тип, вы можете проверить с помощью таблицы import, чтобы получитьполное имя, и найдите фактический класс в classpath.

Теперь, как Барт упоминает в комментариях (теперь удалено), реальное разрешение происходит позже в конвейере.На этапе синтаксического анализа вы создаете только узел, говорящий о том, что у вас есть type, который является Identifier, который равен String. Таким образом, ответ на данный момент будет: «вы не делаете. "

Обновление: попробуйте выполнить этот тезис , он должен вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...