КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Получение исполнимого файла
Пример. Компиляция программы на языке Borland С Пример. /* Основная программа вызывает внешнюю функцию _hello_c, */ /* написанную на Borland C */
global predicates _message (string) – (i) language c _hello_c – language c goal _message ("Hello from Turbo Prolog!"), _hello_c. clauses _message (S):- makewindow (13, 7, 7, "", 10, 10, 3, 50), write (S), readchar (_), removewindow.
Все функции должны быть скомпилированы в obj-файлы с использованием опции компилятора. Так, для среды ВС++ 2.0 эта директива выглядит следующим образом: bcc.exe -c -ml имя_файла (модель памяти large). К глобальному имени функции необходимо добавить символы «_0», например: имя_функции_0().
/* Функция _hello_c, написанная на языке Borland C */ /*и вызываемая из Пролог-программы */ void hello_c_0 () { message_0 ("Hello from Turbo C!"); } domains integerlist = integer* global predicates _message (integer) – (i) language c _hello_c (integer) – (i) language c predicates write_list (integerlist) int_list (integerlist) read_list (integerlist) add_list (integerlist, integerlist, integerlist) read_list1 (integerlist, integerlist, string) goal makewindow (1, 14, 13, "Привет, это Пролог!", 0, 0, 25, 80), clearwindow, int_list (List), read_list (List), removewindow (1, 0). clauses int_list ([]). add_list ([], L, L). add_list ([N | L1], L2, [N | L3]):- add_list (L1, L2, L3). read_list1 (X1, X2, S):- str_int (S, Z), add_list (X1, [Z], X2),!. read_list1 (X1, X2, S):- write_list (X1), fail. read_list (List):- write("Введите элемент списка "), readln (S), read_list1 (List, L, S), read_list (L). write_list ([]):- nl. write_list([H|T]):- _hello_c (H). _message(N):- makewindow (13, 30, 30, "Сообщение", 5, 5, 15, 50), write(N), readchar (_), removewindow.
Первый этап процесса получения исполнимого файла представляет собой компиляцию исходного текста программы, отличающуюся от работы интерпретатора тем, что в ее результате создается объектный файл. Для рассматриваемого примера − это файлы Пролога hello_pr.obj и hello_pr.sym, а также файл на языке Borland C − hello_c.obj. Компилятор выполняет преобразование исходной программы в программу на языке машинных команд. Следующий этап − это компоновка, т.е. собственно создание исполнимого файла, заключающийся в объединении в общем коде всех необходимых объектных файлов и подстыковке требуемых библиотек. В рассматриваемом примере объектные модули на языках Пролог и Borland C включаются в исполнимый файл outfile.exe. В дистрибутиве Пролог роль компоновщика выполняет специальная программа связи или так называемая TLINK-программа. Вызов TLINK-программы из командной строки ИС Турбо-Пролог для рассматриваемого примера имеет следующий вид: Tlink init.obj hello_pr.obj hello_c.obj hello_pr.sym, outfile,, prolog где init.obj – стандартный файл Турбо-Пролог, hello_pr.obj, hello_pr.sym – файлы, получаемые после компиляции hello_pr.pro, outfile.exe – результирующий исполнимый файл.
Дата добавления: 2014-12-29; Просмотров: 514; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |