stringtranslate.com

FDS BÁSICO

SDS BASIC , también conocido como CP-V BASIC , Batch BASIC o Sigma BASIC según la versión, es un compilador de lenguaje de programación BASIC para las computadoras centrales de la serie Sigma de Scientific Data Systems (SDS) , lanzado originalmente en 1967. Xerox compró SDS en 1969 y comenzó a rebautizarlo como Xerox Data Systems, y finalmente solo Xerox, momento en el que el lenguaje pasó a ser conocido como Xerox BASIC .

Las versiones originales no incluían soporte para variables de cadena , aunque esto se agregó para la versión que se ejecuta bajo el sistema operativo CP-V cuando se lanzó en 1971. La biblioteca de cadenas permitía la manipulación de cadenas usando una sintaxis de división de matrices , similar al sistema encontrado. en HP Time-Shared BASIC y varios BASIC de microcomputadoras como Integer BASIC y Atari BASIC .

Este estilo de manipulación de cadenas difiere del modelo introducido en BASIC-PLUS de DEC , que utilizaba funciones de cadena. Altair BASIC se inspiró en BASIC-PLUS, y este estilo se convirtió en el estándar de facto después de que la versión multiplataforma, Microsoft BASIC , se volviera casi universal durante la era de las computadoras domésticas . Esto dificulta un poco la conversión de SDS a dialectos modernos.

SDS BASIC es históricamente notable como la plataforma en la que se escribió el juego de computadora original Star Trek en el verano de 1971. [1]

Sintaxis

De acuerdo con el modelo BASIC de Dartmouth original , y en común con la mayoría de los BASIC basados ​​en mainframe , SDS BASIC era un compilador, no un intérprete, y utilizaba herramientas separadas pero estrechamente integradas para editar y ejecutar. El editor se dedicó a BASIC; A medida que se ingresan líneas, se analizan para determinar la sintaxis correcta y luego se almacenan en forma tokenizada. Si se ingresa una línea con un número al principio, se coloca en la ubicación apropiada del programa según el número; las líneas sin números se procesaban inmediatamente y luego se olvidaban. SDS permitía números de línea en el rango de 1 a 99999. [2] Un ejemplo simple es:

10 IMPRIMIR "HOLA MUNDO"  

Como muchas versiones de BASIC, SDS permitía que una sola línea de código contuviera múltiples declaraciones. En la mayoría de los dialectos, esto se indica mediante dos puntos, pero SDS utiliza la barra invertida \o el signo comercial &. [3] Una línea equivalente en SDS sería:

10 IMPRIMIR "HOLA" \ IMPRIMIR "MUNDO"     

Debido a que SDS era un compilador y el código fuente del usuario se almacenaba por separado, conservaba los espacios iniciales en el código. Sugirieron usar esto para indicar más claramente la estructura de los bucles: [4]

10 DEJA J = 0 , K = 1 20 PARA I = K A 8 30 IMPRIMIR J 40 M = J , J = K , K = K + 1 50 SIGUIENTE I              

Este ejemplo también incluye la capacidad de establecer múltiples valores en una sola declaración LET, como se ve en las líneas 10 y 40. Esta característica también se encontró en HP BASIC. Como en la mayoría de las versiones de BASIC, la palabra clave LETes opcional y se omite en la línea 40. La línea 40 también ilustra la forma alternativa de asignación que se ve en varios de los primeros BASIC, donde se pueden separar múltiples asignaciones con comas. [5]

Las operaciones matemáticas comunes incluían , y +, -usando o para exponentes. [2] Las comparaciones lógicas, como HP, se podían escribir en cualquier orden, por lo que era equivalente a y era lo mismo que . [3] La mayoría de los dialectos sólo permiten la sintaxis posterior en ambos casos. A diferencia de HP BASIC, SDS no incluía la capacidad de utilizar el hash, como una forma alternativa de .*/^**<==<><<>#<>

SDS admitía GOTO calculado usando ON, pero también permitía la sintaxis alternativa con ON al final de la línea en lugar del frente:

IR A 140 , 160 , 180 EN Y   

Una forma alternativa de REM era una estrella principal, *[ 6] similar en propósito a la forma corta que se encuentra en los BASIC derivados de MS, la comilla simple ',. [7]

Manejo de cuerdas

Las primeras versiones de SDS BASIC, a veces conocidas como Batch BASIC o BTM BASIC, no admitían variables de cadena. Sin embargo, los valores de cadena se podrían asignar a variables numéricas que podrían almacenar seis caracteres como valores numéricos EBCDIC . [8] El CP-V BASIC posterior agregó variables de cadena verdaderas que contienen hasta 132 caracteres que podrían indicarse con un signo de dólar al final $o, poco común, un $ al principio, A$y $Ason equivalentes. El manual señala que este último formato se agregó por compatibilidad con A00 BASIC. [9] [un]

Internamente, CP-V utilizaba un diseño de cadena de longitud fija que constaba de una matriz de bytes cuyo tamaño no se podía cambiar en tiempo de ejecución. Esto era similar a otros BASIC que usaban notación de corte, como HP y Atari. Contrasta con el estilo DEC/Microsoft, donde las cadenas se asignaban dinámicamente en un montón . A diferencia de otros dialectos BASIC de longitud fija, las variables de cadena no tenían que atenuarse antes de su uso; en cambio, todas las cadenas tenían una longitud máxima predeterminada de 72 caracteres. Esta era una configuración global que se podía cambiar para administrar mejor la memoria configurándola en un valor más pequeño o permitiendo cadenas más largas hasta un máximo de 132 caracteres. Esto se logró usando SET $=132. De manera confusa, SET también se usó para la tarea totalmente ajena de permitir el uso de variables en declaraciones DIM. [10]

Debido a que las cadenas en CP-V no se presentaban públicamente como matrices de caracteres, la sintaxis de división no se basaba en la sintaxis de matriz. Esto significaba que CP-V también permitía la construcción de matrices de cadenas, algo de lo que carecían dialectos como HP y Atari porque usaban notación de matrices para dividir. Por lo tanto, se podría hacer una matriz de cadenas usando DIM: [9]

10 DIM A$ ( 5 , 10 )  

definiría una matriz que contiene un total de 50 cadenas de 72 caracteres en una matriz de 5 por 10. Debido a que el sistema admitía matrices, la sintaxis de división era algo más compleja que la del sistema encontrado en otras versiones. Los ejemplos incluyen: [9]

A$ ( 1 )

selecciona la primera cadena en una matriz de cadenas, mientras que:

$ ( 1 , 5 )

selecciona una cadena de la ubicación 1,5 en una matriz 2D (matriz). La división se manejó agregando dos puntos dentro de los pares: [9]

$ ( : 4 )

devolvió todo desde el cuarto carácter en adelante:

A$ ( : 4 , 5 )

selecciona cinco caracteres comenzando con el cuarto carácter, mientras:

A$ ( 1 , 5 : 4 , 5 )

selecciona cinco caracteres comenzando con el cuarto carácter de la cadena en las ubicaciones 1,5 en una matriz 2D. [9]

Las constantes de cadena se pueden delimitar con comillas simples o dobles, lo que facilita incluir comillas dentro de líneas. Los ejemplos válidos incluyen: [11]

IMPRIMIR 'ESTA ES UNA CADENA LITERAL' IMPRIMIR "ESTA ES OTRA" IMPRIMIR 'Y ESTE ES "UN TERCERO"' IMPRIMIR "Y 'UN CUARTO'"    

CP-V también incluye el comando CHANGE de Dartmouth BASIC, que convierte una cadena en una serie de valores numéricos EBCDIC y los coloca en una matriz numérica: [12]

10 DIM B ( 6 ) 20 CAMBIAR "ABCDEF" A B      

B ahora contendrá una serie de números correspondientes a los valores EBCDIC para cada carácter. [12]

De entrada y salida

SDS incluía un sistema robusto de entrada/salida basado en números de "flujo" que podían especificarse en declaraciones PRINT e INPUT. Por ejemplo, los datos se pueden leer desde un archivo usando:

10 ABRIR 'ARCHIVO1' A: 1, ENTRADA 20 ENTRADA : 1 , A    

La primera línea abre un archivo de disco con el nombre "FILE1", lo asigna a la secuencia 1 e indica que se utilizará para la entrada. La segunda línea lee los siguientes datos del flujo 1, en este caso el primer valor, y asigna los datos resultantes a la variable A. El sistema también incluía un sistema de "clave" único que permitía numerar los datos y luego acceder a ellos aleatoriamente. Esto se logró agregando el número de clave después de un punto y coma:

ENTRADA : 1 ; 9999 , un 

intentará leer el registro 9999. Las claves válidas estaban en el rango de .001 a 9999.999, y si no se asignaron claves en los archivos, a las líneas se les asignaron los números 1.000, 2.000, etc. La clave con el valor más alto en un archivo se podría leer usando: [13]

CLAVE ( 1 )

donde el 1 es el número de secuencia. [13] Los datos binarios no estructurados se pueden leer y escribir byte a la vez utilizando GET y PUT. [14]

Comandos MAT

Las versiones posteriores de Dartmouth BASIC incluían un conjunto de MATcomandos que permitían operaciones en matrices enteras con una sola declaración. Estos también estaban disponibles en SDS BASIC. En su forma más simple, MATse usa como una forma alternativa de LET, aplicando una expresión a todos los elementos de una matriz. Por ejemplo:

100 DIM A ( 20 ), B ( 20 ) ... 200 MAT A = A + B    

Agregará el valor de cada valor en B a cada entrada en A, de la misma manera que:

100 DIM A ( 20 ), B ( 20 ) ... 200 PARA I = 1 A 20 210 A ( I ) = A ( I ) + B ( I ) 220 SIGUIENTE I         

Además de hacer que el código sea más corto y obvio, estos comandos también tienen la ventaja de estar altamente optimizados, superando fácilmente el uso de FOR/NEXT. [15] Funciones y declaraciones adicionales modifican PRINTe INPUTinvierten matrices y construyen matrices de identidad y demás en una sola declaración. [dieciséis]

Notas

  1. ^ A00 parece ser otro nombre para Batch BASIC, donde el $ inicial era una macro para convertir los valores a EBCDIC.

Referencias

Citas

  1. ^ Markowitz, Maury; Mayfield, Mike (2000). "Star Trek". Juegos de la fama . Archivado desde el original el 6 de noviembre de 2018 . Consultado el 27 de noviembre de 2018 .
  2. ^ ab Xerox 1974, pág. 2.
  3. ^ ab Xerox 1974, pág. 19.
  4. ^ Xerox 1974, pag. 3.
  5. ^ Xerox 1974, pag. 9.
  6. ^ Xerox 1974, pag. 17.
  7. ^ "Declaración REM (Visual Basic)". Microsoft . 20 de julio de 2015.
  8. ^ Xerox 1974, pag. 23.
  9. ^ abcde Xerox 1974, pág. 21.
  10. ^ Xerox 1974, pag. 40.
  11. ^ Xerox 1974, pag. 8.
  12. ^ ab Xerox 1974, pág. 25.
  13. ^ ab Xerox 1974, pág. 26.
  14. ^ Xerox 1974, pag. 29.
  15. ^ Referencia 1976, pag. 11-50.
  16. ^ Xerox 1974, pag. 34.

Bibliografía