Главная страница
Навигация по странице:

  • определение_функции ::= имя_функции { блок

  • блок ::= предложение | предложение ; |

  • М. В. Ломоносова Факультет вычислительной математики и кибернетики Е. И. Большакова, Н. В. Груздева Основы программирования на языке Рефал Учебное пособие


    Скачать 0.92 Mb.
    НазваниеМ. В. Ломоносова Факультет вычислительной математики и кибернетики Е. И. Большакова, Н. В. Груздева Основы программирования на языке Рефал Учебное пособие
    Анкорqewqe
    Дата02.01.2022
    Размер0.92 Mb.
    Формат файлаdoc
    Имя файлаRefalP-1.doc
    ТипУчебное пособие
    #323127
    страница11 из 22
    1   ...   7   8   9   10   11   12   13   14   ...   22

    3.Язык Рефал-5


    Язык Рефал-5 является более поздним, чем Рефал-2, диалектом языка Рефал, включающим в себя практически все средства базисного Рефала и некоторые возможности языка Рефал-2. В тоже время он имеет ряд существенных отличий – в нём появились такие новые средства, как условия и присоединённые блоки, предложенные взамен средств спецификации переменных. За счёт этих новых средств язык Рефал-5 по своей выразительной мощности не уступает языку Рефал-2.

    3.1.Основные особенности


    В сравнении с языком Рефал‑2 к числу основных особенностей языка Рефал-5 относятся:

    • Отсутствие W- и V-переменных. Как и в базисном Рефале, в Рефале-5 используются только три вида переменных: s-переменные, t-переменные и e-переменные – их значениями могут быть соответственно символы, термы (т.е. символы и выражения в структурных скобках) и произвольные выражения.

    • Отсутствие спецификаций переменных и, как следствие, определяемых спецификаторов.

    • Использование для разрешения неоднозначностей при синтаксическом отождествлении только левого согласования, т.е. правое согласование не реализовано.

    • Возможность записывать в левой части рефал-предложений дополнительное условие применимости этого предложения в виде так называемой where-конструкции, или условия. Такая условная конструкция состоит из рефал-выражения и образца, с которым должно быть успешно отождествлено это рефал-выражение, причём последнее может содержать функциональные термы.

    • Использование присоединённых блоков или with-конструкций, позволяющих задавать вместо правой части рефал-предложения последовательность рефал-предложений, предваряя его рефал-выражением, к которому они должны быть применены. Фактически это даёт возможность вводить и использовать в рамках рефал-предложения новую функцию, без её оформления как самостоятельной функции.

    Язык Рефал-5 имеет также ряд отличий в синтаксисе. Дополнительными собственными знаками языка являются:

    • точка . используется для отделения признака типа переменной от её индекса; в качестве признака типа могут использоваться только строчные буквы s, t или е;

    • точка с запятой ; служит разделителем рефал-предложений, а также разделителем функциональных определений;

    • фигурные скобки { и } служат для записи блока рефал-предложений: первая скобка открывает блок, вторая – закрывает;

    • двоеточие : используется как знак операции отождествления, для отделения образца и выражения при записи where-конструкций или для отделения блока предложений от рефал-выражения, к которому он применяется, в with-конструкциях;

    • запятая , и амперсенд & используются при записи where- и with-конструкций для их отделения от предшествующих выражений.

    В итоге, набор собственных знаков языка Рефал-5 таков:

    ' ( ) < > = s t e = . ; : { } , &

    В этом наборе отсутствует знак косой черты, используемый в Рефале-2 для записи составных символов: символов-меток и символов-чисел. В Рефале-5 соответствующие конструкции, называемые соответственно идентификаторами и макроцифрами, записываются без всяких спецзнаков, например, идентификаторы True, X, Begin, макроцифры 3, 853. Идентификаторы и макроцифры могут входить в качестве атомарных элементов в рефал-выражения, например:

    X23 '+' 678 '*'(Z45 '-' Fsr '/' 936)

    Идентификатором в Рефале-5 считается строка из не более чем 15 алфавитно-цифровых знаков и знаков тире и подчеркивания, начинающаяся с заглавной буквы, внутри идентификаторов строчные и прописные буквы различаются. Переменные языка Рефал-5 не включают спецификацию, а в качестве индекса допускаются не только буква или цифра, но и целое положительное число и идентификатор. В качестве признака типа используются только строчные (малые) буквы s, t, e.

    переменная ::= признак_типа буква | признак_типа цифра | признак_типа.идентификатор | признак_типа.целое_число

    признак_типа ::= s | t | e

    Примеры переменных: e.True, tA, t.28, s.First, e.last, s2. Идентификатор, используемый как индекс после точки, может начинаться как со строчной буквы, так и с заглавной (прописной). Подчеркнём, что при записи переменной точка может быть опущена только в случаях, когда индексом является буква или цифра: записи e.X и eX представляют одну и ту же переменную.

    Пробел используется как разделитель переменных, символов и чисел. В ряде случаев разделяющий пробел может быть опущен – тогда, когда это не приводит к неоднозначности трактовки конструкции. Например, допустима запись t1 t2 t3, как и эквивалентная ей запись t1t2t3, поскольку отсутствие точки за указателем типа t означает, что индексом может быть только один символ. В тоже время запись t.1t.2t.3 ошибочна.

    В языке Рефал-5 запись определений функций отличается от их записи в языке Рефал-2. Рефал-предложения не обязательно должны записываться построчно. Предложения, определяющие одну функцию, группируются в блок предложений – последовательность рефал-предложений, разделяемых точкой с запятой. Определение функции представляет собой заключённый в фигурные скобки блок, перед которым записано имя функции.

    определение_функции ::= имя_функции { блок } |
    $ENTRY имя_функции { блок }

    блок ::= предложение | предложение ; | предложение ; блок

    К примеру, определение функции Palindrom (см. раздел 1.6) на языке Рефал-5 имеет такой вид:

    * Функция Palindrom проверяет, является ли

    * входная строка палиндромом

    Palindrom { s.1 e.2 s.1 =
    ;

    s.1 = 'yes' ;

    = 'yes' ;

    e.1 = 'no' ; }

    Заметим, что системное слово $ENTRY при определении функции используется в случае, когда рефал-программа состоит из нескольких модулей (см. раздел 3.5).
    1   ...   7   8   9   10   11   12   13   14   ...   22


    написать администратору сайта