Здравствуйте, Loislo, Вы писали:
L>Рисует в смысле, берет то что построено парсером и отображает его 1 в 1, т.е. это визуальное представление работы парсера в чистом виде.
А разве этот адд-ын что-то отображает?
L>Надумалось вот еще что:
L>сейчас так
L>L>compile-unit {
L> Imports{}
L> namespaces {
L> global-namespace {...}
L> user-namespace1 {...}
L> user-namespace2 {...}
L> }
L>}
L>
L>подумалось что global покрывает весь файл вместе с таблицей импорта
L>при этом import вроде вполне может быть внутри любого неймспейса (стандарт C# еще не читал, попробовал, компайлер не ругается),
На самом деле все не так просто (однозначно). Вот граматика из спецификации:
compilation-unit:
extern-alias-directives-opt
using-directives-opt
global-attributes-opt
namespace-member-declarations-opt
Как видишь, по сути глобального пространства имен даже не существует. using и глобальные атрибуты как бы находятся в compilation-unit-е. И это не с проста, ведь глобальные атрибуты могут быть только тут. Вот, для сравнения, описание тела пространства имен:
namespace-body:
{
extern-alias-directives-opt
using-directives-opt
namespace-member-declarations-opt
}
Как видишь, структура похожа, но не идентична. В принципе было бы правильно вообще избавиться от глобального пространства имен, но уж больно удобно им пользоваться.
L>тогда выглядеть это будет примерно так
L>L>compile-unit {
L> global-namespace {
L> Imports{}
L> namespaces {
L> user-namespace1 {...}
L> user-namespace2 {...}
L> }
L> }
L>}
L>
L>таким образом global-namespace фактически совпадает со всем compile-unit и
L>отличается от него только тем что у того есть имя файла.
Нет, главное отличие — это наличие глобальных атрибутов. В принципе можно было бы создать базовый класс (RNamespaceBase) от которого породить RNamespace и RCompileUnit. Тогда у RNamespace можно было бы добавить имя, а у RCompileUnit список глобальных атрибутов. Тогда можно было бы наиболее полно применять полиморфизм.
Видимо так и нужно будет сделать. Но насколько это актуально? По мне так приоритетность у данной задачи не велика.
L>Про разрешение имен.
L>Это всякий геморой связаный с разрешением ссылок на ф-ии, Argument Depended Lookup и т.д?
Что-то вроде. Одним словом — это разрешение всех ссылок. Например, в коде программы есть ссылки на переменные. Сейчас — это неразрешенные ссылки, а надо сделать так чтобы имея объявление переменной можно было бы быстро найти все ее вхождения. И наоборот, имея некоторое вхождение узнать ее объявление, типа и т.п. Тоже самое с методами, классами и т.п.
L>ЗЫ: у global-namespace тоже имя есть так что не очень понятно чем оно от compile-unit отличается.
Нет у него имени. Это побочные эффекты. В принципе я выше описал как будет правильнее. Можно в принципе поправить.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>