Эта статья включает в себя список литературы , связанной литературы или внешних ссылок , но ее источники остаются неясными, поскольку в ней отсутствуют встроенные цитаты . ( Ноябрь 2011 г. ) ( Узнайте, как и когда удалить этот шаблон сообщения ) |
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).
Могут применяться модификаторы доступа, чтобы сделать их только ЧТЕНИЕ или ЗАПИСЬ.
Для строковых данных используются несколько предопределенных типов данных, а именно:
- . BYTE Содержит один символ
- . BYTES Содержит символьные строки
- . 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]