ПЛАН - PLANC

ПЛАН (произносится как «планка») - это язык программирования высокого уровня. Акроним означает Программирование языка для Nd компьютеров.

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

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

Базовая структура PLANC

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

Очень простой пример ПЛАН программа выглядит следующим образом:

MODULE mod INTEGER ARRAY: stack (0: 100) PROGRAM: mprog INTEGER: i, j, k, m INISTACK stack 1 =: i 2 =: j i + j =: k =: m ENDROUTINEENDMODULE

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

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

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

Типы данных PLANC

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

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

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

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

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). петля.

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

DO WHILE test1 ..... WHILE test2ENDDO

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

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

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

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

TYPE node = RECORD node POINTER: next T: some_dataENDRECORD

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

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

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

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

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

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

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

Смотрите также

Рекомендации

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