Опубликован: 06.11.2008 | Уровень: специалист | Доступ: платный | ВУЗ: Ярославский Государственный Университет им. П.Г. Демидова
Лекция 2:

Язык РЕФАЛ: простейшие конструкции Рефала-2

< Лекция 1 || Лекция 2: 12 || Лекция 3 >
Аннотация: Развитие модели Маркова и обзор языка Рефал: модификации языка нормальных алгоритмов Маркова, введенные в Рефал; версии Рефала. Рефал-выражения: скобки символьные, составные, структурные и функциональные; определение рефал-выражения и примеры. Определение терма. Рефал-функции: вызов и описание рефал-функции; рефал-предложение и интерпретация переменных; типы переменных; примеры описаний рефал-функций.
Ключевые слова: информатика, Рефал, recursive function, algorithmic language, нормальный алгоритм Маркова, элемент языка, строка данных, рефал-выражение, функциональный терм, рефал-предложение, интерпретация переменных, рефал-функция, вызов рефал-функции, аргумент, аргумент функции, аргумент рефал-функции, рефал-функции, Рефал-программа, директива, вызовов рефал-функции, описание рефал-функции, v.xx, целый, синтаксический анализ, Windows, Java, html-редактор, значение, апостроф, символ, цепочка символов, составные скобки, символ-метка, символ-число, символ-ссылка, alpha, Структурные скобки, терм, Функциональные скобки, подстановка, указание типа, выражение, вызовов функций, синтаксис, выражение аргументов, переменные, область действия, множества, описание переменной, переменная, признак типа, индекс, спецификация, тип переменной, функция, отождествление, отождествление слева направо, интерпретация, отождествление справа налево, слово, пробел

Развитие модели Маркова и обзор языка РЕФАЛ

В 60-х годах прошлого века русским информатиком В.Ф.Турчиным вместе с учениками в ИПМ АН СССР был разработан новый язык Рефал (REFAL - REcursive Functional Algorithmic Language), который является развитием модели нормальных алгоритмов Маркова в направлении структурирования элементов языка НАМ.

Модификациями языка НАМ, введенными в Рефал, явились следующие структуры:

  1. Вместо произвольной строки данных рассматривается рефал-выражение - строка, сбалансированная по скобкам (символьным, структурным, составным и функциональным). Рефал-выражение в функциональных скобках, не содержащее других функциональных скобок, называется функциональным термом .
  2. Вместо марковской подстановки вводится рефал-предложение, отличающееся тем, что в левой части находится рефал-выражение, быть может содержащее переменные, которые употребляются в правой части. При поиске подходящего рефал-предложения делается попытка интерпретации переменных, при которой получающийся в левой части рефал-предложения функциональный терм входит в выражение данных. В таком случае он заменяется в этом выражении на правую часть рефал-предложения с этой же интерпретацией переменных. Тем самым одно рефал-предложение может заменять много марковских подстановок.
  3. Множество рефал-предложений также структурируется - объединяется в структуру рефал-функции. Функциональный терм как раз и представляет собой вызов рефал-функции с выражением аргументов (несколько аргументов функции при вызове рассматриваются как одно выражение). При таком вызове рефал-функции проверяется существование интерпретации переменных ее рефал-предложений в порядке их следования. Как правило, одно из рефал-предложений должно быть обязательно подходящим для выражения данных аргумента рефал-функции. Результатом выполнения рефал-функции может быть любое рефал-выражение. В частности, в результирующем выражении может быть функциональный терм - вызов другой или той же самой рефал-функции (рекурсивность). Вызовы рефал-функций могут быть вложены друг в друга, и при этом аргументами одних рефал-функций могут быть результаты выполнения вложенных рефал-функций.
  4. Рефал-программа представляет собой некоторую последовательность директив языка, из которых наиболее важными являются директива, задающая последовательность вызовов рефал-функций, и директивы, задающие описания рефал-функций. Выполнение рефал-программы определяется вызовом рефал-функций.

Во второй половине XX века был разработан целый ряд версий Рефала, из которых основные: базовый Рефал, Рефал-2, Рефал-4, Рефал-5 и Рефал-6 (является модификацией версии Рефал-5). Все версии в качестве ядра содержат базовый Рефал, но если целью первых версий была направленность на разработку алгоритмов синтаксического анализа языков программирования, то последние версии Рефала не только работают под операционной системой Windows, но и имеют ряд современных конструкций, позволяющих вводить объектные конструкции в этот язык, легче разрабатывать реализацию сложных по логике вычислительных алгоритмов, взаимодействовать с современными языками создания дизайна интернет-приложений (такими, как Java), создавать HTML-редакторы. Ввиду ограниченности объема учебного пособия идеи, положенные в язык Рефал, мы сначала дадим на базовом Рефале и версии Рефал-2, а затем опишем отличия современной версии Рефала - Рефала-5. Для более полного описания мы отсылаем интересующихся к специальной литературе и соответствующим многочисленным интернет-сайтам.

Перейдем теперь к последовательному описанию основных конструкций Рефала-2 (в дальнейшем просто Рефала), но прежде сделаем одно замечание: в синтаксисе Рефала везде, где отдельные синтаксические конструкции разделяются, может стоять сколько угодно пробелов.

Рефал-выражения

Любое данное Рефала представляет собой некоторую последовательность знаков. Однако некоторые знаки имеют специальное фиксированное значение в синтаксисе языка и представляют скобки, типы, разделители. К ним относятся:

  1. Cимвольные скобки - апострофы. Любой знак, помещенный в апострофы, является символом. Например, 'A', 'B', 'C' - это 3 символа. Знак апостроф тоже может быть символом, но тогда для отличия его от окружающих апострофов он удваивается. Например, "" - это символ апостроф. Несколько подряд идущих символов могут объединяться в цепочку символов, и тогда апострофы можно писать в начале и в конце цепочки. Символы и цепочки являются выражениями. Например, цепочка из 4 символов 'A' 'B' " 'C' может быть записана как 'AB"C'.
  2. Составные скобки - знак косой черты "/". Они используются для образования составных символов, которыми являются символы-метки, символы-числа и символы-ссылки.

    Символом-меткой является любой идентификатор (последовательность букв, цифр и знака "-", начинающаяся с буквы), помещенный в составные скобки. Так например, /это-метка-/ и /aLpha/ - 2 символа-метки.

    Символом-числом является любая последовательность цифр, помещенная в составные скобки. Например, /0/, /1024/ - 2 символа-числа.

    Символом-ссылкой является последовательность знака "%" и 8 16-ричных цифр, помещенная в составные скобки. Например, /%12ef34ab/, /%ffffffff/ - 2 символа-ссылки.

    Символами являются как символы знаков, так и составные символы (числа, метки, ссылки).

  3. Структурные скобки - круглые скобки. Они используются для структуризации выражений, и в них должно находиться любое рефал-выражение, в том числе и пустое. Например, (('A/') 'С' ()) - выражение, которое в свою очередь содержит 3 выражения: цепочку 'A/', символ 'С' и пустое выражение.

    Любое выражение в структурных скобках, не содержащее других структурных скобок, называется структурным термом.

  4. Функциональные скобки - знак "k" для открывающей скобки и точка "." для закрывающей скобки. Например, k/Summa/ (x) y. В этом примере вызывается функция с идентификатором Summa и 2 аргументами-выражениями (x) и y.

    Любое выражение в функциональных скобках, не содержащее других функциональных скобок, называется функциональным термом.

  5. Знак равно "=" используется для разделения левой и правой частей рефал-предложения (аналог знака " \to " в марковской подстановке).
  6. Буквы S, W, V, E, s, w, v, e используются для указания типа в синтаксисе переменной рефал-выражения (см. раздел Переменные).

Рефал-выражение - это последовательность символов, переменных (см. следующий раздел) и скобок, сбалансированная по скобкам. Это означает, что внутри скобок какого-либо типа также должно стоять выражение, сбалансированное по скобкам или вовсе без скобок (пустое выражение). Например, выражение

(k/Summa/ (/123/) k/Func/ /Две-порции/..)

- сбалансировано по скобкам (внутри первых структурных скобок находятся функциональные, а внутри них находится последовательность из

  • составных скобок с идентификатором функции Summa,
  • структурных скобок, внутри которых символ-число 123,
  • функциональных скобок, внутри которых 2 символа-метки (идентификатор функции Func и аргумент этой функции)).

Строка (k/Summa/ (/123/) k/Func/ /Две-порции/).). не является рефал-выражением, хотя открывающие и закрывающие скобки по каждому отдельному типу правильно расположены, но внутри первых структурных скобок не находится рефал-выражение: вторая открывающаяся функциональная скобка не имеет соответствующей закрывающейся функциональной скобки.

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

Термом называется рефал-выражение, которое является либо символом (знака или составным), либо переменной, либо структурным или функциональным термом. Таким образом, рефал-выражение - это последовательность из любого числа термов (в том числе и нулевого - пустое выражение).

< Лекция 1 || Лекция 2: 12 || Лекция 3 >
Игорь Суркин
Игорь Суркин
Россия, г. Магнитогорск
Акбар Ахвердов
Акбар Ахвердов
Россия, г. Москва