Здравствуйте, VladD2, Вы писали:
L>>Про решарпер знаю. Хочется самому, ручками научится.
VD>Тогда нет вопросов.
VD>Только учти, для этого нужно въехать во многие тонкасти того что уже сделано. Я готов помочь чем могу.
L>>Кстати поглядел на кодеаналайзер. на сколько я понимаю он рисует дерево
L>> согласно внутреннему представлению ничего при этом не меняя, отсюда вопрос, почему при разборе одного юнита получается два неймспейса на одном уровне,
VD>Что значит рисует? Он использует парсер R#-а. Сам он только пробегается по нему и провдит анализ.
Рисует в смысле, берет то что построено парсером и отображает его 1 в 1, т.е. это визуальное представление работы парсера в чистом виде.
VD>Это работа парсера и спецификация языка. То что они на одном уровне — это скорее огрехи производства. По уму все остальные пространства имен должны быть вложенными в глобальный. Просто никто до этого е обращал на это внимание. Не мешает и ладно.
L>>глобальный и тот который программер навалял, хотя вроде как они должны быть вложеные (IMHO программерский должен быть ребенком глобального).
VD>По идее, да.
ясно.
Надумалось вот еще что:
сейчас так
compile-unit {
Imports{}
namespaces {
global-namespace {...}
user-namespace1 {...}
user-namespace2 {...}
}
}
подумалось что global покрывает весь файл вместе с таблицей импорта
при этом import вроде вполне может быть внутри любого неймспейса (стандарт C# еще не читал, попробовал, компайлер не ругается),
тогда выглядеть это будет примерно так
compile-unit {
global-namespace {
Imports{}
namespaces {
user-namespace1 {...}
user-namespace2 {...}
}
}
}
таким образом global-namespace фактически совпадает со всем compile-unit и
отличается от него только тем что у того есть имя файла.
Про разрешение имен.
Это всякий геморой связаный с разрешением ссылок на ф-ии, Argument Depended Lookup и т.д?
L>>Ясно. Буду смотреть дальше.
VD>Если что... дергай. Будем помогать.
Угу, сенькс.
ЗЫ: у global-namespace тоже имя есть так что не очень понятно чем оно от compile-unit отличается.