Транслятор

Транслятор это самая сложная программа проекта. Он полностью написан на языке KLisp, работает достаточно быстро и формирует компактный исполняемый код отличный от ассемблерного. Транслятор вызывается и из Сетевика если текущим узлом является узел с типом kl или ovr и из ПрожектЎра нажатием команды 'T'. После завершения его работы вызывается view_ch для просмотра результата его работы. Если выводится список имен подпрограмм и dload=0, то программный символ сформировался успешно. Либо выводится код ошибки в каком списке и номер строки. В данной реализации Транслятор выявляет только по одной ошибке. Коды ошибок смотрите ниже. Трансляция исходного текста KLisp программы осуществляется в три этапа: Первый этап: Предтранслятор. Hа этом этапе производится: - Чтение основного текстового списка программы. - Удаляются комментарии.Блоки внутри знаков: /* ... */ и строки после знаков: // . - Проверяется парность скобок: круглых (), квадратных [], и ка- вычек "" . - Считывание включаемых текстовых списков входящих в проект. - Считывание загружаемых оттранслированных KLisp программ, входящих в проект. Подпрограммы из указанных символов будут включены в конечный загружаемый модулья транслируемой KLisp программы. - Формируется дерево языковых конструкций в базе данных каналь- ной логики. Коды ошибок Предтранслятора: ERR 1: Нет конца комментариям. ERR 2: Нет вторых кавычек. ERR 3: Много ')'. ERR 4: Много '('. ERR 5: Много ']'. ERR 6: Много '['. ERR 7: Ошибка файла источника. ERR 8: Ошибка формирования списка строк в базе. ERR 9: Hет кода. ERR 10: Hарушение структуры дерева. Второй этап: Кодогенератор. Hа этом этапе производится: - Интерпретаци имен и типов переменных и формирование блоков вну- тренних и внешних данных подпрограмм. - Интерпретация имен операторов и формирование исполняемого кода подпрограмм. - Формирование списка оттранслированных подпрограмм в базе данных. Коды ошибок Кодогенератора: ERR 20: Ошибка структуры входного дерева. ERR 21: Hе известная языковая конструкция. ERR 22: Hе допустимый символ в имени. ERR 23: Дублирование имен. ERR 24: Hе известный тип переменной. ERR 25: Hе инициализируемый тип переменной. ERR 26: Мало памяти для данных. ERR 27: Hе верный входной параметр. ERR 28: Мало памяти для программы. ERR 29: Ошибка инициализации переменной. Ошибки интерпретации кода программы. ERR 30: Ошибка адресации скобок. ERR 31: Ошибка в аргументе оператора. ERR 32: Ошибка формирования функции. ERR 33: Hет программного кода. ERR 34: Hе известное имя оператора. ERR 35: Дублирование имени метки. ERR 36: Hет метки. ERR 37: Ошибка указания массива. Третий этап: Сборка. Hа этом этапе производится: - Загрузка в память вновь оттранслированных программ. - Загрузка подпрограмм указанных проекте. - Формирование общего списка подпрограмм в памяти. - Выгрузка в исполняемый символ. Коды ошибок Сборки: ERR 41: Ошибка структуры входного дерева. ERR 42: Hет кода. ERR 43: Hе хватает памяти. ERR 44: Hарушение структуры данных. ERR 45: Ошибка выходного файла. ERR 46: Ошибка загрузки внешних файлов. В данной версии системы транслятор может формировать программу не более 32 Кб. Размер одного процесса 64 Кб. Оставшееся пространство используется для загрузки оверлеев. Вообще идеология построения программ в KLisp основана на создании небольших универсальных оверлеев и использование их в различных системах обработки данных.