М. В. Ломоносова Факультет вычислительной математики и кибернетики Е. И. Большакова, Н. В. Груздева Основы программирования на языке Рефал Учебное пособие
![]()
|
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' В этом примере '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' выражение общего вида, в котором могут встретиться все виды скобок и атомарных элементов (далее – рефал-выражение или просто выражение). Важно, что рефал-переменные могут иметь значением только объектные выражения. Объектным выражением должен быть и аргумент вычисляемого обращения к функции. |