М. В. Ломоносова Факультет вычислительной математики и кибернетики Е. И. Большакова, Н. В. Груздева Основы программирования на языке Рефал Учебное пособие
![]()
|
3.5.Оформление программыЕсли программа на языке Рефал-5 состоит из нескольких модулей, доступные для использования в других модулях функции помечаются в начале своего описания системным словом $ENTRY. Если в модуле используются функции, описанные в других модулях, их имена должны быть объявлены как внешние в соответствующей external-директиве. Приведём соответствующие БНФ-правила: программа ::= определение_функции | определение_функции программа | определение_функции ; программа | external-директива ; программа | программа external-директива ; external-директива ::= $EXTERNAL список_имён_функций | $EXTERN список_имён_функций | $EXTRN список_имён_функций список_имён_функций ::= имя_функции | имя_функции , список_имён_функций Отметим, что системные слова $ENTRY, $EXTERNAL и его сокращения всегда записываются прописными (заглавными) буквами. Обратим также внимание, что определение функции обычно отделяется от последующей программы знаком ;, но этот знак может и отсутствовать. Неоднозначности не возникает, поскольку определение функции всегда состоит из двух элементов – имени функции и блока рефал-предложений в фигурных скобках. В то же время в конце external-директивы должен стоять знак ;. В программах на Рефале-5 могут использоваться два вида комментариев – строковые комментарии (как в Рефале-2) и комментарии-вставки. Строкой комментария считается любая строка программы, начинающаяся со знака *. Комментарием-вставкой является любая строка, начинающаяся комбинацией символов /* и заканчивающаяся */, она возможна в любом месте программы, где может быть вставлен пробел. Как и в Рефале-2, для инициализации поля зрения рефал-машины используется функция с именем Go; перед её именем необходимо поставить системное слово $ENTRY. В отличие от Рефала-2, встроенные функции объявлять в external-директиве не нужно. Ниже приведён пример программы вычисления факториала, состоящей из двух модулей: основной модуль находится в файле prog.ref, функция вычисления факториала описана в файле fact.ref. * Основной модуль программы вычисления факториала $EXTRN Fact ; $ENTRY Go { = } ; * Функция проверяет, что введённая цепочка символов - * число, и выводит факториал этого числа. Если * введено не число, выводится строка * 'Число введено неверно '. Check { s.1 e.2 , = >> ; e.1 = } ; * Вспомогательная функция проверки, что введённая * цепочка символов состоит из цифр. Subset { (e.1) = True ; s.1 e.2 (e.3 s.1 e.4) = e.1 = False } * Модуль вычисления факториала $ENTRY Fact { e.1 = Fact1 { (e.1) 1 = e.1 ; (e.1) e.2 = } Для запуска приведённой программы необходимо сначала откомпилировать каждый из файлов, выполнив две команды: refc prog refc fact В результате будут сформированы два новых файла: prog.rsl и fact.rsl, и запуск программы осуществляется командой: refgo prog+fact 4.Примеры решения задач на языке РефалВ данной главе на примере решения нескольких задач рассматриваются полезные приёмы программирования на языке Рефал. Если программы решения рассматриваемых задач для языков Рефал-2 и Рефал-5 отличаются только синтаксисом, приводится только программа на языке Рефал‑2. |