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

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

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


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

    1.2.Выражения и переменные


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

    Собственные знаки – это специальные символы языка, выполняющие в нём функцию, аналогичную роли ключевых слов в других языках программирования. К числу собственных знаков относятся круглые и угловые скобки ( и ), < и >, знак равенства =, одинарная кавычка (апостроф) ', а также латинские буквы S и s, T и t, E и e.

    Объектные знаки, или символы-литеры, служат для изображения символов (литер), встречающихся в обрабатываемых данных. В набор объектных знаков входят цифры, буквы, знаки арифметических операций и другие знаки кода ASCII. В отличие от собственных знаков, любой объектный знак при записи рефал-выражения должен быть заключён в одинарные кавычки (апострофы), называемые символьными скобками, например: 'B', '+', 'e', ')'. Таким образом, собственный знак ) при записи отличается от объектного ')', а собственный знак Е от объектного 'Е' и т.п. Запись ' ' обозначает литеру пробела, которая является такой же полноценной литерой, как и все остальные.

    Если необходимо записать несколько подряд идущих объектных знаков, то эти знаки можно написать друг за другом и все их заключить в апострофы, например: 'x+y', 'define', '  ' (последняя цепочка состоит из двух символов пробела). Заметим, что такая запись цепочек символов есть сокращение последовательной записи символов-литер, при которой между символами-литерами должен стоять один или несколько пробелов: 'x' '+' 'y', 'd' 'e' 'f' 'i' 'n' 'e', ' ' ' '.

    Выражения языка Рефал строятся из атомарных (т.е. неделимых) элементов, каковыми являются символы-литеры и переменные, а также скобок трёх видов:

    • структурные ( );

    • функциональные < >;

    • символьные ' '.

    Структурные скобки служат для структурирования обрабатываемых данных, а функциональные скобки – для записи обращений к функциям. Упрощённо говоря, рефал-выражение представляет собой некоторую последовательность атомарных элементов, сбалансированную по всем трём видам скобок, например:

    ('for' ('i=1')) sa ('g' (e2))

    В этом примере 'for', 'i=1', 'g' – цепочки символов-литер, sa, е1, e2 – переменные, f5 – имя функции, а обращение к этой функции.

    Переменная языка Рефал включает:

    признак_типа  индекс

    Признак типа записывается буквой s, t или е и определяет тип значений, которые может принимать эта переменная:

    • s (или S) – значением переменной может быть только символ-литера;

    • t (или T) – значением переменной может быть так называемый терм – символ-литера или выражение в структурных скобках;

    • e (или E) – значением переменной может быть произвольное рефал-выражение (в том числе и пустое).

    В качестве индекса переменной может выступать либо цифра, либо буква латинского алфавита. Фактически индекс является именем переменной и служит для её идентификации, поэтому, к примеру, e1 и e2 – разные переменные.

    Если переменные и символы-литеры служат атомарными элементами рефал-выражений, то более крупной структурной единицей выражения является терм.

    Атомарный элемент представляет простейший случай терма, а в общем случае терм – это рефал-выражение, взятое в структурные или функциональные скобки и называемое соответственно структурным или функциональным термом. Заметим, что функциональный терм есть по сути вызов функции.

    Рефал-выражение (или просто – выражение) представляет собой последовательность термов, его синтаксис можно описать следующими правилами в форме Бэкуса-Наура (далее – БНФ-правила):

    выражение ::= пусто | терм выражение

    терм ::= атомарный_элемент | структурный_терм |

    функциональный_терм

    атомарный_элемент ::= переменная | символ-литера

    структурный_терм ::= (выражение)

    функциональный_терм ::= <имя_функции выражение>

    пусто ::=

    Отметим, что простейшим видом выражения является пустое выражение. Непустое выражение состоит из одного или нескольких термов, называемых термами верхнего уровня. Например, выражение 'А'('BЕ'('C')'D') состоит на верхнем уровне из двух термов: символа-литеры 'А' и структурного терма ('BЕ'('C')'D'), выражение внутри которого в свою очередь состоит из четырёх вложенных термов (трёх символов-литер 'B', 'E', 'D' и одного структурного терма ('C')).

    В зависимости от того, какие атомарные элементы и какие скобки используются при образовании выражения, различают следующие виды выражений:

    • объектное выражение – выражение, не содержащее переменных и функциональных скобок, например: 'type'('int3 = 1..3');

    • выражение-образец – выражение, не содержащее функциональных скобок, например: e1 '+' e2 (sa e3);

    • рабочее выражение – выражение без переменных, например:
      'a-b' ();

    • выражение общего вида, в котором могут встретиться все виды скобок и атомарных элементов (далее – рефал-выражение или просто выражение).

    Важно, что рефал-переменные могут иметь значением только объектные выражения. Объектным выражением должен быть и аргумент вычисляемого обращения к функции.
    1   2   3   4   5   6   7   8   9   ...   22


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