Т.К. Глагол позволяет генерировать код для КПК (малый преобразователь Глагола http://glagol.nad.ru/GlagolARM.htm). То есть возможность программы написанные на КП или Русском КП (РКП) конвертировать в программы на Глаголе и выполнять их компиляцию МПГ. Или просто конвертировать код из КП, РКП <-> Глагол.
Я исправил стандартную утилиту (заменил слова) ОберГлаг но на тестовом файле он выдаёт мусор в непонятной кодировке (скорей всего - UTP-16LE)
Версия Глагола - 11,08. правил текст в Notepad++, Оболочкой Глагола не пользовался - больно неудобная WinXP SP3 Рус.
Может кто нибудь, ну в первую очередь Сый - как главный спец по Глаголу, соберёт файлы у себя? И проверит ...
1 файл -
(******************************************************************************) (**) ОТДЕЛ РКП_Глагол+; (**) (******************************************************************************) (* НАЗНАЧЕНИЕ: перевод служебных слов Русского КП в служебные слова Глагола *) (******************************************************************************) ИСПОЛЬЗУЕТ ОС ИЗ "...\Отделы\Обмен\", Параметр ИЗ "...\Отделы\Обмен\", Читать ИЗ "...\Отделы\Обмен\", Писать ИЗ "...\Отделы\Обмен\", Вывод ИЗ "...\Отделы\Обмен\", Файл ИЗ "...\Отделы\Обмен\", РКП_Глагол_Слова; (******************************************************************************) ЗАДАЧА Ошибка1(ц-:ЦЕПЬ); УКАЗ Вывод.Цепь(ц); Вывод.Цепь("^ОберГла вхфайл(ы)<.MOD>"); СТОП(1) КОН Ошибка1; (******************************************************************************) ЗАДАЧА Ошибка2(ц1-,ц2-:ЦЕПЬ); УКАЗ Вывод.Цепь(ц1); Ошибка1(ц2) КОН Ошибка2; (******************************************************************************) ЗАДАЧА Голова(); ПЕР ч:Читать.Поток; п:Писать.Поток; поиск:Файл.Поиск; имя:Файл.ВПолного; УКАЗ ЕСЛИ Параметр.всего <= 1 ТО Ошибка1("Нет имени входного файла") КОН; Параметр.Текст(1,имя); ЕСЛИ НЕ ОС.ПервыйПоискФ(имя,поиск) ТО Ошибка2(имя," не найден(ы)") КОН; ПОВТОРЯТЬ СПИСАТЬ(поиск.имя,имя); ч:=Читать.Открыть(имя); ЕСЛИ ч = ПУСТО ТО Ошибка2(имя," не открывается") КОН; ч.видЗнаков:=Читать.знВин; Вывод.Цепь(имя); Вывод.Цепь(" -> "); Файл.ИзменитьТип(имя,".отд"); п:=Писать.Открыть(имя); ЕСЛИ п = ПУСТО ТО Ошибка2(имя," не открывается") КОН; п.видЗнаков:=Писать.знУни; Вывод.Цепь(имя); Вывод.Цепь("^"); РКП_Глагол_Слова.Перевод(ч,п); Читать.Закрыть(ч); Писать.Закрыть(п) ДО НЕ ОС.СледующийПоискФ(поиск) КОН Голова; УКАЗ Голова КОН РКП_Глагол.
2-й файл со словами
(******************************************************************************) (**) ОТДЕЛ РКП_Глагол_Слова; (**) (******************************************************************************) (* НАЗНАЧЕНИЕ: основные задачи для РКП->Глагол - краткий список *) (******************************************************************************) ИСПОЛЬЗУЕТ Читать ИЗ "...\Отделы\Обмен\", Писать ИЗ "...\Отделы\Обмен\", Знак ИЗ "...\Отделы\Иное\", Буква ИЗ "...\Отделы\Иное\", Цепь ИЗ "...\Отделы\Иное\", Ряд ИЗ "...\Отделы\Иное\"; ПОСТ ЗапасСлов=100; (* запас ключевых слов *) ДлСлова=50; (* наибольшая длина слова *) ВИД (* Глагол слово и соответствующее ему Оберон слово *) ВСлово=НАБОР (Ряд.Вид) г,о:ЦЕПЬ[ДлСлова] КОН; ДСлово=ДОСТУП К ВСлово; ПЕР слова:РЯД ЗапасСлов ИЗ Ряд.Доступ; (* ключевые слова *) слов:ЦЕЛ; (* число ключевых слов *) (******************************************************************************) ЗАДАЧА Сравнить(с1-,с2-:Ряд.Вид):ЦЕЛ; УКАЗ ВОЗВРАТ Цепь.Сравнить(с1(ВСлово).о,с2(ВСлово).о) КОН Сравнить; (******************************************************************************) ЗАДАЧА Перевод-(ч:Читать.Поток; п:Писать.Поток); ПЕР з:ЗНАК; (* следующий знак *) слово:ВСлово; (* пробное слово *) нашли:Ряд.Доступ; ЗАДАЧА Пропуск; (* Пропуск знака без обработки *) УКАЗ Писать.ЗнакЦепи(п,з); з:=Читать.ЗнакЦепи(ч) КОН Пропуск; ЗАДАЧА ЧитатьСлово(ц+:ЦЕПЬ); (* Чтение слова в цепочку знаков *) ПЕР п:ЦЕЛ; (* позиция для чтения в цепочку *) УКАЗ п:=0; ПОВТОРЯТЬ ЕСЛИ п < ДлСлова-1 ТО ц[п]:=з; УВЕЛИЧИТЬ(п) КОН; з:=Читать.ЗнакЦепи(ч) ДО НЕ Знак.ВСлове(з); ц[п]:=0X КОН ЧитатьСлово; УКАЗ з:=Читать.ЗнакЦепи(ч); ПОКА НЕ Читать.Конец(ч) ВЫП ПОКА (НЕ Читать.Конец(ч)) И (з <= " ") ВЫП Пропуск КОН; ЕСЛИ Буква.Известная(з) ИЛИ (з = "_") ТО ЧитатьСлово(слово.о); нашли:=Ряд.Поиск(слово,слова,слов,Сравнить); ЕСЛИ нашли # ПУСТО ТО Писать.Цепь(п,нашли(ДСлово).г) ИНАЧЕ Писать.Цепь(п,слово.о) КОН АЕСЛИ з = "&" ТО Писать.ЗнакЦепи(п,"И"); з:=Читать.ЗнакЦепи(ч); ЕСЛИ Знак.ВСлове(з) ТО Писать.ЗнакЦепи(п," ") КОН АЕСЛИ з = "~" ТО Писать.Цепь(п,"НЕ"); з:=Читать.ЗнакЦепи(ч); ЕСЛИ Знак.ВСлове(з) ТО Писать.ЗнакЦепи(п," ") КОН ИНАЧЕ Пропуск КОН КОН; КОН Перевод; (******************************************************************************) ЗАДАЧА ВводСл(г-,о-:ЦЕПЬ); ПЕР слово:ДСлово; УКАЗ СОЗДАТЬ(слово); СПИСАТЬ(о,слово.о); СПИСАТЬ(г,слово.г); Ряд.Вставка(слово,слова,слов,Сравнить) КОН ВводСл; (*******Ключевые слова Глагол <- РКП******************************************************************) УКАЗ слов:=0; ВводСл("МОДУЛЬ", "ПО_МОДУЛЮ"); ВводСл("ОШИБКА! Глаголе нет АРИФМЕТИЧЕСКИЙ_СДВИГ", "АРИФМЕТИЧЕСКИЙ_СДВИГ"); ВводСл("Адрес", "ОШИБКА! РКП нет Адрес"); ВводСл("РЯД", "МАССИВ"); ВводСл("УКАЗ", "НАЧАЛО"); ВводСл("КЛЮЧ", "ЛОГИЧЕСКАЯ"); ВводСл("ПО", "С_ШАГОМ"); ВводСл("Ячейка", "БАЙТ"); ВводСл("ВЫБРАТЬ", "ВЫБРАТЬ"); ВводСл("ЗНАК", "СИМВОЛ_УНИКОД"); ВводСл("ОШИБКА! Глаголе нет СИМВОЛ_Latin1", "СИМВОЛ_Latin1"); ВводСл("ВЗНАК", "В_СИМВОЛ"); ВводСл("ОШИБКА! Глаголе нет ЗАГЛАВНАЯ_ЛАТ", "ЗАГЛАВНАЯ_ЛАТ"); ВводСл("ПОСТ", "ПОСТОЯННЫЕ"); ВводСл("СПИСАТЬ", "ОШИБКА! РКП нет СПИСАТЬ"); ВводСл("ОШИБКА! Глаголе нет ЗАКРЫТИЕ_МОДУЛЯ", "ЗАКРЫТИЕ_МОДУЛЯ"); ВводСл("ДЕЛИТЬ", "ЦЕЛАЯ_ЧАСТЬ"); ВводСл("ВЫП", "ВЫПОЛНИТЬ"); ВводСл("АЕСЛИ", "А_ЕСЛИ"); ВводСл("КОН", "КОНЕЦ"); ВводСл("ВШИРЦЕЛ", "МАКС_ЦЕЛОЕ"); ВводСл("ОТКЛ", "ЛОЖЬ"); ВводСл("ИзПамяти", "ОШИБКА! РКП нет ИзПамяти"); ВводСл("СТОП", "ОСТАНОВИТЬ_ПРОГРАММУ"); ВводСл("ИСПОЛЬЗУЕТ", "ИСПОЛЬЗОВАТЬ"); ВводСл("В", "ВХ"); ВводСл("ЦЕЛ", "ЦЕЛОЕ"); ВводСл("ШИРЦЕЛ", "ЦЕЛОЕ_ БОЛЬШОЕ"); ВводСл("ШИРВЕЩ", "ОШИБКА! РКП нет ШИРВЕЩ"); ВводСл("ОТДЕЛ", "МОДУЛЬ"); ВводСл("Образ", "ОШИБКА! РКП нет Образ"); ВводСл("НЕ ЧЕТ", "НЕ_ЧЕТ"); ВводСл("ВЦЕЛ", "НОМЕР_БУКВЫ"); ВводСл("ЗАДАЧА", "ПРОЦЕДУРА"); ВводСл("Доступ", "ОШИБКА! РКП нет Доступ"); ВводСл("ВПамять", "ОШИБКА! РКП нет ВПамять"); ВводСл("ВЕЩ", "ВЕЩЕСТВЕННОЕ"); ВводСл("ОШИБКА! Глаголе нет ВЕЩЕСТВЕННОЕ_МАЛОЕ", "ВЕЩЕСТВЕННОЕ_МАЛОЕ"); ВводСл("НАБОР", "ЗАПИСЬ"); ВводСл("БЕГУНОК", "ОШИБКА! РКП нет БЕГУНОК"); ВводСл("МНОЖ", "МНОЖЕСТВО"); ВводСл("УЗК", "КОРОТКОЕ"); ВводСл("УЗКЦЕЛ", "ЦЕЛОЕ_МАЛОЕ"); ВводСл("ОБХОД", "ОШИБКА! РКП нет ОБХОД"); ВводСл("ВКЛ", "ПРАВДА"); ВводСл("ВИД", "ТИПЫ"); ВводСл("ДО", "ДО"); ВводСл("Значение", "ОШИБКА! РКП нет Значение"); ВводСл("ПЕР", "ПЕРЕМЕННЫЕ"); ВводСл("ДЛЯ", "ЕСЛИ_ТИП"); ВводСл("ОШИБКА! Глаголе нет ДЛЯ_НАСЛЕДОВАНИЯ", "ДЛЯ_НАСЛЕДОВАНИЯ"); ВводСл("ОШИБКА! Глаголе нет ПЕРЕОПРЕДЕЛЯЕМЫЙ", "ПЕРЕОПРЕДЕЛЯЕМЫЙ"); ВводСл("ОШИБКА! Глаголе нет ВНУТРИ_МОДУЛЯ", "ВНУТРИ_МОДУЛЯ"); ВводСл("ОШИБКА! Глаголе нет ПУСТОЙ", "ПУСТОЙ"); ВводСл("ОШИБКА! Глаголе нет ВЫХ", "ВЫХ"); ВводСл("ОШИБКА! Глаголе нет ПЕР", "ПЕР"); ВводСл("ОШИБКА! Глаголе нет ИСКЛЮЧИТЬ", "ИСКЛЮЧИТЬ"); ВводСл("ОШИБКА! Глаголе нет ВКЛЮЧИТЬ", "ВКЛЮЧИТЬ"); ВводСл("ОШИБКА! Глаголе нет РАЗМЕР", "РАЗМЕР"); ВводСл("ОШИБКА! Глаголе нет ФИНАЛИЗИРОВАТЬ", "ФИНАЛИЗИРОВАТЬ"); ВводСл("ОШИБКА! Глаголе нет ПРОВЕРИТЬ", "ПРОВЕРИТЬ"); КОН РКП_Глагол_Слова.