PLANC ( Programming LAnguage for Nd Computers , pronunciado tablón ) es un lenguaje de programación de alto nivel .
Norsk Data desarrolló compiladores para varias arquitecturas, incluidas las minicomputadoras Motorola 68000 , 88000 , Intel x86 y Norsk Data Nord-10 y la superminicomputadora ND-500 . [1]
El lenguaje fue diseñado para ser software multiplataforma . Se utilizó principalmente internamente en Norsk Data para escribir software de sistemas de alto nivel, como las partes superiores de sistemas operativos y compiladores.
Los programas PLANC están estructurados en módulos y rutinas.
Un ejemplo muy sencillo de un programa PLANC es el siguiente:
MODULO MODULO MATRIZ DE ENTEROS: pila (0:100) PROGRAMA: prog ENTERO: i, j, k, m Pila INISTACK 1 =: yo 2 =: j i+j =: k =: metro ENDRRUTINAMODULO FINAL
Una diferencia con los lenguajes de programación populares es que el operador de asignación evalúa de izquierda a derecha: primero calcula el valor y luego lo almacena. La inicialización de variables en tiempo de compilación , por el contrario, se evalúa de derecha a izquierda.
El operador de asignación devuelve el valor almacenado, por lo que se puede almacenar varias veces: 5 =: a =: b
se almacenaría 5
tanto en las variables A
como B
. Comparte esta dirección con Plankalkül , ALGOL 60 , Mary (otra lengua poco conocida desarrollada en Noruega) y la lengua popular C.
Una característica sintáctica distintiva relacionada es que se puede definir una función para que tome como entrada el valor calculado de la expresión en su lado izquierdo. Además, un único argumento adicional no requiere paréntesis circundante. La notación infija resultante desdibuja la diferencia sintáctica entre funciones y operadores . Conceptualmente, estas expresiones parecen tener un valor calculado que fluye de izquierda a derecha.
Como ocurre con todos los lenguajes de alto nivel, PLANC utiliza variables como se puede ver en el ejemplo anterior; estos son los tipos de datos permitidos dentro de PLANC:
Se declaró una enumeración así:
ENUMERATION (Winter, Spring, Summer, Autumn) : Seasons := Summer
Esto define una enumeración de las estaciones y establece el valor predeterminado en Verano.
LABEL
es un poco diferente de un tipo de datos normal . Esto se usa para predefinir una etiqueta dentro del código y se usa junto con una GO
declaración; muy parecido GOTO
a BASIC .
Se pueden aplicar modificadores de acceso para que sean solo LECTURA o ESCRITURA.
Para datos de cadena se utilizan varios tipos de datos predefinidos, que son:
BYTE
– Contiene un carácterBYTES
– Contiene cadenas de caracteresBITS
– Contiene cadenas BITLos punteros de matriz eran construcciones de 3 palabras que incluían tanto la dirección base como el límite inferior y superior de la matriz; esto hizo posible realizar una verificación confiable en tiempo de ejecución de los límites de la matriz y creó el tipo de aritmética de punteros que hace de C un lenguaje más desafiante para escribir.
PLANC es un lenguaje de la familia Pascal . Sin embargo, carece de la BEGIN END
construcción genérica que a menudo se encuentra en Pascal, favoreciendo en cambio formas como ROUTINE..ENDROUTINE
o DO..ENDDO
etc.
Una característica que lo diferencia de otros lenguajes es la construcción de bucles:
DO
.... declaraciones de bucle...ENDDO
Con suerte, una o más de las declaraciones del bucle serían WHILE
la condición que permitiera salir del bucle.
Por ejemplo:
HACER MIENTRAS prueba.....ENDO
Es similar a un bucle C. while (test) { ... }
Otro ejemplo:
HACER.....MIENTRAS pruebaENDO
Es similar a un do { .... } while (test).
bucle C.
A veces los programadores escribieron:
HACER MIENTRAS prueba1.....MIENTRAS prueba2ENDO
C requeriría escribir algo como while (test1) { .... if (! test2) break; }
.
For
Los bucles tienen la siguiente estructura:
FOR var IN low:high DO
.... declaraciones de bucle....ENDDO
Un paso también se puede especificar mediante low:high:step
. Alternativamente, se puede especificar un tipo (enumeración o tipo de rango entero) para especificar un bucle sobre un rango de valores o un conjunto para recorrer todos los elementos del conjunto o se puede especificar una matriz para recorrer una matriz. Se puede especificar A pointer:next
para recorrer una lista. Por ejemplo, si se define:
Nodo TIPO = REGISTRO PUNTERO de nodo: siguiente T: algunos_datosENDRECORD
Puede ser escrito:
FOR p IN first:next DO ..... ENDFOR
para recorrer la lista.
Un bucle for puede tener declaraciones WHILE en su interior. Esto proporciona dos maneras posibles de salir de un bucle for, ya sea porque la lista de valores está agotada o porque la prueba falló. Por lo tanto, se pueden escribir bloques para capturar cada uno de ellos:
rutina vacía , puntero de nodo ( puntero de nodo : lista) para p en primero: siguiente hacer mientras p.val >< 20 salir para regresar nil fin para regresar rutina final
Esto devuelve nil
si la lista se agotó pero se salió debido a un tiempo, simplemente terminó después del ciclo y devolvió el puntero al elemento encontrado. Alternativamente, eso podría haberse colocado en un exitwhile
bloque que sea idéntico, excepto que terminaría allí si y solo si la prueba while fallara. Si ocurre más de una declaración while en el bucle, no podrá distinguirlas, todas saltarán al mismo exitwhile
bloque.
PLANC tenía un mecanismo de excepción primitivo: una rutina podía devolver una excepción, que era un valor entero de 16 bits . Esto luego podría detectarse mediante una ON ROUTINEERROR
declaración en el alcance de la llamada.