PLANC ( Programming LANguage for Nd Computers , pronunciado como plank ) es un lenguaje de programación de alto nivel .
Norsk Data desarrolló compiladores para varias arquitecturas, incluidas las Motorola 68000 , 88000 , Intel x86 y las minicomputadoras Norsk Data Nord-10 y la superminicomputadora ND-500 . [ 1 ]
El lenguaje fue diseñado para ser software multiplataforma . Se utilizaba principalmente de forma interna en Norsk Data para escribir software de sistemas de alto nivel, como las partes superiores de los sistemas operativos y los compiladores.
Estructura básica
Los programas de PLANC están estructurados en módulos y rutinas.
Un ejemplo muy sencillo de un programa PLANC es el siguiente:
MÓDULO mod MATRIZ DE ENTEROS: pila (0:100) PROGRAMA: mprog ENTERO: i, j, k, m Pila INISTACK 1 =: i 2 =: j i+j =: k =: m ENDRUTIN FIN DEL MÓDULO
Una diferencia con respecto a los lenguajes de programación más populares es que el operador de asignación se evalúa de izquierda a derecha: primero calcula el valor y luego lo almacena. En cambio, la inicialización de variables en tiempo de compilación se evalúa de derecha a izquierda.
El operador de asignación devuelve el valor almacenado, por lo que puede almacenarse varias veces: 5 =: a =: bse almacenaría 5en las variables Ay B. Comparte esta dirección con Plankalkül , ALGOL 60 , Mary (otro lenguaje poco conocido desarrollado en Noruega) y el popular lenguaje C.
Una característica sintáctica distintiva relacionada es que una función puede definirse para que tome como entrada el valor calculado de la expresión de su lado izquierdo. Además, un único argumento adicional no requiere paréntesis. La notación infija resultante difumina la diferencia sintáctica entre funciones y operadores . Conceptualmente, dichas expresiones parecen tener un valor calculado que fluye de izquierda a derecha.
Tipos de datos
Al igual que todos los lenguajes de alto nivel, PLANC utiliza variables, como se puede ver en el ejemplo anterior. Estos son los tipos de datos permitidos en PLANC:
- Tipos simples
- ENTERO , REAL, BOOLEANO , ETIQUETA, VACÍO , ENUMERACIÓN , PUNTERO
- Tipos compuestos
- MATRIZ, REGISTRO, CONJUNTO, RUTINA
- Tipos definidos por el usuario: declarados por TYPE T = .....;
Se declaró una enumeración de la siguiente manera:
ENUMERATION (Winter, Spring, Summer, Autumn) : Seasons := Summer
Esto define una enumeración de las estaciones y establece el valor predeterminado en Verano.
LABELes un poco diferente de un tipo de dato normal . Se utiliza para predefinir una etiqueta dentro del código y se usa junto con una GOinstrucción; muy parecido a como GOTOen BASIC .
Se pueden aplicar modificadores de acceso para que sean de solo lectura o de solo escritura.
Para los datos de cadena se utilizan varios tipos de datos predefinidos, que son:
BYTE– Contiene un carácterBYTES– Contiene cadenas de caracteresBITS– Contiene cadenas de bits
Los punteros a matrices eran construcciones de 3 palabras que incluían tanto la dirección base como el límite inferior y el límite superior de la matriz; esto permitía realizar comprobaciones fiables en tiempo de ejecución de los límites de la matriz y hacía que el tipo de aritmética de punteros que convierte a C en un lenguaje más difícil de programar.
Algunas afirmaciones
PLANC es un lenguaje de la familia Pascal . Sin embargo, carece de la BEGIN ENDconstrucción genérica que se encuentra a menudo en Pascal, y en su lugar favorece formas como ROUTINE..ENDROUTINEo DO..ENDDOetc.
Una característica que lo distingue de otros lenguajes es la construcción de bucles:
DO.... instrucciones de bucle...ENDDO
Con suerte, una o más de las instrucciones del bucle serían WHILEuna condición que permitiría salir del bucle.
Por ejemplo:
HACER MIENTRAS se realiza la prueba ..... ENDO
Es similar a un bucle de C.while (test) { ... }
Otro ejemplo:
HACER ..... Prueba MIENTRAS ENDO
Es similar a un do { .... } while (test).bucle de C.
A veces los programadores escribían:
HACER MIENTRAS prueba1 ..... MIENTRAS prueba2 ENDO
C requeriría escribir algo como while (test1) { .... if (! test2) break; }.
ForLos bucles tienen la siguiente estructura:
FOR var IN low:high DO.... instrucciones de bucle....ENDDO
También se puede especificar un paso 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 iterar sobre todos los elementos del conjunto o se puede especificar una matriz para iterar sobre una matriz. pointer:nextSe puede especificar un para recorrer una lista. Por ejemplo, si se define:
TIPO de nodo = REGISTRO Puntero de nodo: siguiente T: algunos_datos FIN DEL REGISTRO
Se puede escribir:
FOR p IN first:next DO ..... ENDFOR
para iterar sobre la lista.
Un bucle for puede contener sentencias WHILE. Esto proporciona dos maneras posibles de salir de un bucle for: porque se agota la lista de valores o porque la condición falla. Por lo tanto, se pueden escribir bloques para capturar cada una de estas situaciones:
rutina void , puntero de nodo ( puntero de nodo : lista) para p en first:next hacer mientras p.val < 20 salir para devolver nil fin para devolver fin rutina
Esto devuelve un valor nilsi la lista se agotó pero se salió debido al bucle while; simplemente terminó después del bucle y devolvió el puntero al elemento encontrado. Alternativamente, podría haberse colocado en un exitwhilebloque idéntico, excepto que terminaría allí solo si la condición del bucle while fallaba. Si hay más de una instrucción while en el bucle, no podría distinguirlas, ya que todas saltarían al mismo exitwhilebloque.
PLANC contaba con un mecanismo de excepciones primitivo: una rutina podía devolver una excepción, que era un valor entero de 16 bits . Esta excepción podía ser capturada por una ON ROUTINEERRORinstrucción en el ámbito de llamada.
Véase también
Referencias
- ↑ Manual de Referencia PLANC [ND-60.117.03] . Datos norsk.
- Lenguajes de programación procedimental
- Lenguajes de programación creados en el siglo XX
- Software Norsk Data