Главная страница

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


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

2.Язык Рефал-2


Данный раздел посвящён первому известному диалекту языка Рефал, реализованному в своё время для отечественных ЭВМ БЭСМ-6 и ЕС ЭВМ. Язык Рефал-2 является расширением базисного Рефала, и в этом разделе не только уточняется синтаксис и семантика конструкций базисного Рефала, но и подробно описывается ряд возможностей Рефала-2 (прежде всего – спецификаций переменных), не имеющих аналогов в других диалектах этого языка. Средства языка Рефал-2, не рассмотренные в настоящем пособии (в частности, статические и динамические ящики), описаны в [8].

2.1.Символы-литеры и составные символы


Собственными знаками языка Рефал-2 являются:

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

  • структурные скобки ( )

  • знаки / ' : = +

  • буквы S W V E s w v e R L

Понятие символа было расширено в языке Рефал-2. Кроме собственных знаков и символов-литер ('z', '+', '7' и т.п.) используются составные символы. Составные символы служат для записи в программе сложных знаков, состоящих из нескольких литер, но в тоже время интерпретирующихся как единое целое. В частности, составные символы отождествляются с s-переменными. Для отличия составных символов от цепочки объектных знаков составные символы обрамляются знаками /, например: /alpha/, /178/, /abcd/. Внутри знаков косой черты не может встречаться знак /.

Множество составных символов разбивается на символы-метки и символы-числа.

Символами-числами или макроцифрами являются последовательности десятичных цифр, представляющие целые неотрицательные числа в диапазоне от 0 до 16777215 (224-1), заключённые в знаки /. Например: /0/, /1/, /512/, /23/. Символы-числа служат для записи в рефал-программе целых чисел, для их обработки в языке Рефал-2 есть набор встроенных функций, реализующих целочисленную арифметику. Знак числа, если он необходим, должен быть записан перед символ-числом как самостоятельный объектный знак. К примеру, отрицательное число -38 записывается как два отдельных символа: '‑'/38/. Таким образом, в языке Рефал-2 знак не является составной частью символ-числа.

Для записи больших чисел (бόльших, чем 224), используется последовательность макроцифр, играющих роль цифр в системе счисления по основанию 224. Например, запись /1//0/ представляет число 224, т.е. число 16777216, а запись /3//21//35/ представляет число 3∙(224)2+21∙(224)1+35∙(224)0=844425282453539.

Символами-метками являются идентификаторы, т.е. последовательности из букв, цифр и знаков -, начинающиеся с буквы. Длина символа-метки не ограничивается, однако принимаются во внимание только первые 255 литер, а все последующие игнорируются. Таким образом, все символы-метки, у которых совпадают первые 255 литер, считаются совпадающими. Примеры символов-меток: /аLрhа/, /L2а4/, /это-пример-символа-метки/.

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

(/const/ 'π=3.14, one=1')(/type/ 'i, n: integer').

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

Обратим внимание ещё на одну особенность Рефала-2. При описании переменных их тип можно задавать как строчной, так и прописной буквой (s или S, w или W, v или V, e или E). Регистр букв в теле символа-метки также не важен. Например, если в программе встречаются символы-метки /ab/, /Ab/, /aB/, /AB/, то все они будут восприняты рефал-системой как одна и та же символ-метка /AB/. Поскольку имена функций – это также символы-метки, регистр букв при написании имён функций также не важен. Таким образом, при записи программы необходимо учитывать регистр букв только в двух случаях: при описании символов-литер (например, символы-литеры 'А' и 'а' являются разными знаками), и при описании индексов переменных: переменные SX и Sx – это разные переменные, в то же время SX и sX – это одна и та же переменная.

Как и в базисном Рефале, апостроф является собственным знаком языка, используемым для записи символов-литер. В то же время он сам может быть литерой, которую необходимо уметь обрабатывать. Поэтому укажем особенности записи апострофа как объектного знака. Два идущих подряд апострофа '' означают символ-литеру апострофа (попутно заметим, что похожее выражение ' ' обозначает не апостроф, а литеру пробела). К примеру, цепочка символов A'C записывается как 'A''C', цепочка 'A'B записывается как '''A''B', а цепочка A'B' – как 'A''B'''. Для записи нескольких подряд идущих апострофов каждый из них должен быть удвоен, но дополнительными знаками апострофа такая цепочка не обрамляется, например, цепочка '' записывается как ''''.

Цепочку литер можно разбить на несколько подцепочек при помощи пробела, например, 'XY' '+Z3' означает цепочку из пяти литер XY+Z3, а запись 'XY''+Z3' обозначает цепочку литер XY'+Z3.

Часто одну и ту же цепочку символов-литер можно изобразить многими способами. Например, цепочка литер A'B может быть представлена любым из следующих способов: 'A' '' 'B', 'A''' 'B', 'A' '''B' или 'A''B'

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


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