# coding: utf8
"""
Модуль базового типа для анализа секции для всех секций
"""

if True:
	from пакОберон.пакКомпилятор.пакСущность.пакСлово import тСлово
	from .модАнализИмпорт import тАнализИмпорт
	from .модАнализКонст import тАнализКонст
	from .модАнализТипы import тАнализТипы
	from .модАнализПерем import тАнализПерем
	from пакОберон.пакКомпилятор.пакСущность.пакОшибка import тОшибка

class тАнализ:
	def __init__(сам, пОберон, пДанные:dict)->None:
		def Анализ_Проверить()->None:
			if пДанные['анализ'] != "анализ":
				сам.__бОшВнутр = True
				стрОш :str= "тАнализ: внутренняя ошибка. В секцию  должен передаваться словарь слов для анализа"
				сам.__конс.бОшВнутр(стрОш)

		сам.__оберон = пОберон
		сам.__конс = пОберон.конс
		сам.__конс.Отладить("тАнализ.__init__()")

		сам.ош = тОшибка(пОберон, "тАнализ")

		if True: # слова секций
			Анализ_Проверить()
			сам.__анализ :str= пДанные['анализ']
			сам.слова_импорта :dict= пДанные['импорт'] # все слова секции импорт
			сам.слова_конст :dict= пДанные['константы'] # все слова секции констант
			сам.слова_типы :dict= пДанные['типы'] # все слова секции типов
			сам.слова_перем :dict= пДанные['переменные'] # все слова секции переменных
			сам.слова_проц :dict= пДанные['процедуры'] # все слова секции процедур
			сам.слова_модуля :dict= пДанные['модуль'] # все слова инициализации модуля
			#сам.бСекцияЕсть = False # Признак наличия секции
			#сам.__слово_конец = None # последнее слово в секции

		парам :dict= {}
		парам['анализ'] = "анализ"
		if True: # анализ импорта
			парам['слова']  = сам.слова_импорта
			импорт :тАнализИмпорт= тАнализИмпорт(пОберон, парам)
			if импорт.оши.бВнутр:
				сам.ош.Внутр("__init__()", "При создании тАнализИмпорт")
				return
			сам.модули = импорт.модули
			#импорт.МодулиСекции_Печать()

		if True: # анализ констант
			парам['слова']  = сам.слова_конст
			парам['модуль_имя'] = пДанные['модуль_имя']
			конст :тАнализКонст= тАнализКонст(пОберон, парам)
			if конст.ошк.бВнутр:
				сам.ош.Внутр("__init__()", "При создании тАнализКонст")
				return
			сам.константы = конст.константы
			#конст.КонстСекции_Печать()

		if True: # анализ типов
			парам['слова']  = сам.слова_типы
			типы :тАнализТипы= тАнализТипы(пОберон, парам)
			if типы.ош.бВнутр:
				сам.ош.Внутр("__init__()", "При создании тАнализТипы")
				return
			#типы.ПроцСекции_Печать()

		if True: # анализ переменных
			парам['слова']  = сам.слова_перем
			перем :тАнализПерем= тАнализПерем(пОберон, парам)
			if перем.ошп.бшВнутр:
				сам.ош.Внутр("__init__()", "При создании тАнализПерем")
				return
			#прем.ПроцСекции_Печать()

	@property
	def данные(сам)->dict:
		данные :dict= {}
		данные['конст'] = сам.константы
		return данные
