Из Википедии, свободной энциклопедии
Перейти к навигации Перейти к поиску

PLANC (произносится как «планка») - это язык программирования высокого уровня. Аббревиатура расшифровывается как Programming LAnguage for Nd Computers .

Компиляторы были разработаны Norsk Data для нескольких архитектур, включая Motorola 68000 , 88000 , x86 и архитектуру миникомпьютера Norsk Data NORD-10 и суперминикомпьютера ND-500 .

Язык был разработан так, чтобы быть независимым от платформы. В основном он использовался внутри компании Norsk Data для написания системного программного обеспечения высокого уровня, такого как верхние части операционных систем и компиляторы.

Базовая структура PLANC [ править ]

Программы PLANC разделены на модули и процедуры.

Вот очень простой пример программы PLANC :

МОДУЛЬ мод Целочисленный массив: стек (0: 100) ПРОГРАММА: mprog ЦЕЛОЕ: i, j, k, m Стек INISTACK 1 =: я 2 =: j я + j =: k =: m ЭНДРОУТИНENDMODULE

Отличие от популярных языков программирования в том, что оператор присваивания идет слева направо: сначала вы вычисляете значение, а затем сохраняете его. С другой стороны, инициализация переменных во время компиляции шла справа налево.

Оператор присваивания возвращает сохраненное значение, поэтому вы можете сохранить его несколько раз: 5 =: a =: b сохранит 5 в переменных A и B. Он разделяет это направление с Plankalkül , ALGOL 60 и Mary , еще одним малоизвестным языком программирования, разработанным в Норвегии, а также популярным языком программирования C.

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

Типы данных PLANC [ править ]

Как и во всех языках высокого уровня, PLANC использует переменные, как видно из предыдущего примера, вот разрешенные типы данных в PLANC:

  • Простые типы
    ЦЕЛОЕ , REAL, BOOLEAN , LABEL, VOID , ENUMERATION , POINTER
  • Составные типы
    ARRAY, RECORD, SET, ROUTINE
  • Типы, определяемые пользователем: объявлены TYPE T = .....;

Перечисление было объявлено таким образом:

ПЕРЕЧИСЛЕНИЕ (Зима, Весна, Лето, Осень): Времена года: = Лето

Это определяет перечисление сезонов и устанавливает значение по умолчанию Лето.

LABEL немного отличается от вашего обычного типа данных, он используется для предварительного определения метки в коде и используется вместе с оператором GO (очень похоже на GOTO в BASIC).

Могут применяться модификаторы доступа, чтобы сделать их только ЧТЕНИЕ или ЗАПИСЬ.

Для строковых данных используются несколько предопределенных типов данных, а именно:

  1. . BYTE Содержит один символ
  2. . BYTES Содержит символьные строки
  3. . BITS содержит строки BIT

Указатели на массивы представляли собой конструкции из трех слов, которые включали как базовый адрес, так и нижнюю границу и верхнюю границу массива; это сделало возможным надежную проверку границ массивов во время выполнения и сделало вид «арифметики указателей», который делает C таким «интересным» языком гораздо менее заманчивым для написания.

Некоторые заявления PLANC [ править ]

PLANC - это язык из семейства PASCAL. Однако в нем отсутствует общая конструкция BEGIN END, часто встречающаяся в PASCAL, и вместо этого используются такие формы, как ROUTINE..ENDROUTINE или DO..ENDDO и т. Д.

Одна особенность, которая отличает его от некоторых других языков, - это построение циклов:

DO .... операторы цикла ... ENDDO

Будем надеяться, что один или несколько операторов цикла будут условием WHILE, которое позволит вам выйти из цикла.

Например:

СДЕЛАТЬ ВО ВРЕМЯ теста .....ENDDO

Аналогичен циклу C while (test) {...}.

Другой пример:

ДЕЛАТЬ ......ВО ВРЕМЯ теста
ENDDO

Аналогично C do {....} while (test). петля.

Иногда программисты писали:

СДЕЛАТЬ ВО ВРЕМЯ test1.....ВО ВРЕМЯ test2ENDDO

В C вам нужно будет написать что-то вроде while (test1) {.... if (! Test2) break; } или что-то в этом роде.

Циклы For имеют следующую структуру:

FOR var IN low: high DO .... операторы цикла .... ENDDO

Вы также можете указать шаг с помощью low: high: step. В качестве альтернативы вы можете указать тип (перечисление или целочисленный тип с диапазоном значений), чтобы указать цикл по диапазону значений или набор для цикла по всем элементам набора, или вы можете указать массив для цикла по массиву. Вы также можете указать указатель: рядом, чтобы пройти по списку. Например, при определении:

ТИП узла = ЗАПИСЬ узел УКАЗАТЕЛЬ: следующий Т: some_dataКОНЕЦ ЗАПИСИ

Вы могли написать:

FOR p IN первый: следующий DO ..... ENDFOR

чтобы перебрать список.

Для цикла может иметь заявление , а внутри него. Это обеспечивает два возможных способа выхода из цикла for: либо из-за того, что список значений исчерпан, либо из-за сбоя теста. Таким образом, вы можете написать блоки, чтобы поймать каждый из них:

рутина  недействительные , узел указатель (узел указатель  : список) для р в первом: в следующем делать в  то время как p.val> <20 exitfor возврата ноля  ENDFOR  возврата endroutine

Это возвращает nil, если вы исчерпали список, но если вы вышли из-за того, что вы только что закончили цикл и вернули указатель на найденный элемент. В качестве альтернативы вы могли бы поместить это в блок exit while, который идентичен, за исключением того, что вы окажетесь там тогда и только тогда, когда тест while завершится неудачно. Если у вас есть более одного оператора while в цикле, вы не можете отличить их друг от друга, все они совершат переход в один и тот же блок exit while .

У PLANC был примитивный механизм исключения - процедура могла возвращать исключение, которое было 16-битным целым числом. Затем это может быть перехвачено оператором ON ROUTINEERROR в вызывающей области.

См. Также [ править ]

Ссылки [ править ]

  • Справочное руководство Norsk Data PLANC [ND-60.117.03]