Т.К. Глагол позволяет генерировать код для КПК (малый преобразователь Глагола 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");
ВводСл("ВЗНАК", "В_СИМВОЛ");
ВводСл("ОШИБКА! Глаголе нет ЗАГЛАВНАЯ_ЛАТ", "ЗАГЛАВНАЯ_ЛАТ");
ВводСл("ПОСТ", "ПОСТОЯННЫЕ");
ВводСл("СПИСАТЬ", "ОШИБКА! РКП нет СПИСАТЬ");
ВводСл("ОШИБКА! Глаголе нет ЗАКРЫТИЕ_МОДУЛЯ", "ЗАКРЫТИЕ_МОДУЛЯ");
ВводСл("ДЕЛИТЬ", "ЦЕЛАЯ_ЧАСТЬ");
ВводСл("ВЫП", "ВЫПОЛНИТЬ");
ВводСл("АЕСЛИ", "А_ЕСЛИ");
ВводСл("КОН", "КОНЕЦ");
ВводСл("ВШИРЦЕЛ", "МАКС_ЦЕЛОЕ");
ВводСл("ОТКЛ", "ЛОЖЬ");
ВводСл("ИзПамяти", "ОШИБКА! РКП нет ИзПамяти");
ВводСл("СТОП", "ОСТАНОВИТЬ_ПРОГРАММУ");
ВводСл("ИСПОЛЬЗУЕТ", "ИСПОЛЬЗОВАТЬ");
ВводСл("В", "ВХ");
ВводСл("ЦЕЛ", "ЦЕЛОЕ");
ВводСл("ШИРЦЕЛ", "ЦЕЛОЕ_ БОЛЬШОЕ");
ВводСл("ШИРВЕЩ", "ОШИБКА! РКП нет ШИРВЕЩ");
ВводСл("ОТДЕЛ", "МОДУЛЬ");
ВводСл("Образ", "ОШИБКА! РКП нет Образ");
ВводСл("НЕ ЧЕТ", "НЕ_ЧЕТ");
ВводСл("ВЦЕЛ", "НОМЕР_БУКВЫ");
ВводСл("ЗАДАЧА", "ПРОЦЕДУРА");
ВводСл("Доступ", "ОШИБКА! РКП нет Доступ");
ВводСл("ВПамять", "ОШИБКА! РКП нет ВПамять");
ВводСл("ВЕЩ", "ВЕЩЕСТВЕННОЕ");
ВводСл("ОШИБКА! Глаголе нет ВЕЩЕСТВЕННОЕ_МАЛОЕ", "ВЕЩЕСТВЕННОЕ_МАЛОЕ");
ВводСл("НАБОР", "ЗАПИСЬ");
ВводСл("БЕГУНОК", "ОШИБКА! РКП нет БЕГУНОК");
ВводСл("МНОЖ", "МНОЖЕСТВО");
ВводСл("УЗК", "КОРОТКОЕ");
ВводСл("УЗКЦЕЛ", "ЦЕЛОЕ_МАЛОЕ");
ВводСл("ОБХОД", "ОШИБКА! РКП нет ОБХОД");
ВводСл("ВКЛ", "ПРАВДА");
ВводСл("ВИД", "ТИПЫ");
ВводСл("ДО", "ДО");
ВводСл("Значение", "ОШИБКА! РКП нет Значение");
ВводСл("ПЕР", "ПЕРЕМЕННЫЕ");
ВводСл("ДЛЯ", "ЕСЛИ_ТИП");
ВводСл("ОШИБКА! Глаголе нет ДЛЯ_НАСЛЕДОВАНИЯ", "ДЛЯ_НАСЛЕДОВАНИЯ");
ВводСл("ОШИБКА! Глаголе нет ПЕРЕОПРЕДЕЛЯЕМЫЙ", "ПЕРЕОПРЕДЕЛЯЕМЫЙ");
ВводСл("ОШИБКА! Глаголе нет ВНУТРИ_МОДУЛЯ", "ВНУТРИ_МОДУЛЯ");
ВводСл("ОШИБКА! Глаголе нет ПУСТОЙ", "ПУСТОЙ");
ВводСл("ОШИБКА! Глаголе нет ВЫХ", "ВЫХ");
ВводСл("ОШИБКА! Глаголе нет ПЕР", "ПЕР");
ВводСл("ОШИБКА! Глаголе нет ИСКЛЮЧИТЬ", "ИСКЛЮЧИТЬ");
ВводСл("ОШИБКА! Глаголе нет ВКЛЮЧИТЬ", "ВКЛЮЧИТЬ");
ВводСл("ОШИБКА! Глаголе нет РАЗМЕР", "РАЗМЕР");
ВводСл("ОШИБКА! Глаголе нет ФИНАЛИЗИРОВАТЬ", "ФИНАЛИЗИРОВАТЬ");
ВводСл("ОШИБКА! Глаголе нет ПРОВЕРИТЬ", "ПРОВЕРИТЬ");
КОН РКП_Глагол_Слова.