Southampton BASIC System

Southampton BASIC System ( SOBS ) var en dialekt av BASIC- programmeringsspråket som utvecklades för och användes på ICT 1900-seriens datorer i slutet av 1960-talet och början av 1970-talet; den implementerades som en inkrementell BASIC-tolk under operativsystemet MINIMOP vid University of Southampton och kördes även under MAXIMOP .

Den drevs från en Teletype- terminal, även om CRT-terminaler också kunde användas.

Språkegenskaper

I likhet med många tidiga implementeringar av BASIC behövde SOBS rader för att ha radnummer , både för att en användare skulle kunna lägga till nya rader till programmet på önskad plats och även som mål för GOTO- och GOSUB -satser. En RENUMBER -funktion var tillgänglig för att tillåta sektioner av koden att numreras om, som standard i steg om 10, för att ge mer utrymme i mitten av ett program.

Förutom radnummer representerades alla numeriska värden internt som flyttal .

Uttalanden

Språket hade relativt få uttalanden i jämförelse med moderna programmeringsspråk:

Påstående Syfte
DATA Lagrade data för att läsa in variabler vid körning
DIM var ( storlek )... Dimensionera en array. En-, två- och tredimensionella arrayer stöddes.
SLUTET Stoppa körningen av programmet.
FOR var = början TILL slut [STEP incr ] Utför en uppsättning satser upprepade gånger för olika värden på var
GOSUB linje Ring en subrutin vid ett givet linjenummer; flow skulle återgå till nästa programsats när en RETURN exekverades.
GÅ TILL linje Ovillkorlig förgrening till ett givet linjenummer.
IF expr THEN rad [ELSE rad ] Villkorligt gren. THEN- och ELSE - delarna kunde bara ge radnummer att gå till.
INPUT var Be användaren om indata
LET var = expr Tilldela ett värde till en variabel. Till skillnad från många moderna dialekter av BASIC LET inte ett valfritt ord.
NÄSTA var Utför nästa iteration av en FOR- slinga.
SKRIVA UT Utgång till Teletype
LÄS var ... Läs data från DATA- satser till variabler
REM Förkortning för REM ark, detta gjorde det möjligt för en kommentar att placeras på en rad
ÅTERSTÄLL [ rad ] Återställ READ -pekaren för att kunna läsa DATA igen
LÄMNA TILLBAKA Gå tillbaka till raden efter en GOSUB .

Notera särskilt avsaknaden av ett WHILE -liknande uttalande; FOR var den enda looping-konstruktionen tillgänglig för programmerare.

Variabler

Variabelnamn för numeriska värden var antingen en enstaka bokstav eller en enda bokstav följt av en enda siffra, vilket ger utrymme för 286 diskreta variabler totalt. Strängar stöddes; variabelnamn för dem hade samma begränsning men följdes av en pundsymbol ( £ ) .

Funktioner

Ett begränsat antal numeriska funktioner tillhandahölls, som alla tog en numerisk parameter:

Fungera Funktion( ) returnerade
SYND
COS
ATN
SQR
LOGGA
EXP
INT Det största heltal inte större än
SGN −1, 0 eller 1, beroende på om var mindre än, lika med eller större än noll
magmuskler om var negativ, annars

Stödet för strängar var mer begränsat, med endast en funktion, LEN , som returnerade längden på strängparametern. Understrängar stöddes med hakparenteser, så A£[2,3] hänvisade till understrängen för strängen från det andra tecknet till och med det tredje tecknet, så

    
   10  LET  A  £  =  "FOO"  20  SKRIV UT  A  £  [  2  ,  3  ] 

skulle skriva ut OO

Denna syntax stöddes också på den vänstra sidan av en uppgift, så

    
    
   10  LET  A  £  =  "FOO"  20  LET  A  £  [  2  ,  2  ]  =  "BAR"  30  SKRIV UT  A  £ 

skulle trycka FBARO

Arrayer

Stödet för att hantera arrayer av data var relativt starkt, med MAT- satser som kunde läsa en hel array från DATA -satser och utföra användbara matrisoperationer som matrisaddition , matrissubtraktion , matrismultiplikation och hitta den inversa matrisen för en kvadratmatris .

Exempel:

  
   
  00
  
   
  000000
  
  
  
    10  DIM  A  (  3  ,  3  )  20  MAT  LÄS  A  30  DATA  1  ,  1  ,  2  ,  1  ,  ,  2  ,  ,  2  ,  1  40  DIM  B  (  3  ,  3  )  50  MAT  LÄS  B  60  DATA  ,  ,  1  ,  ,  _  _  ,  1  ,  ,  70  DIM  C  (  3  ,  3  ),  D  (  3  ,  3  )  80  MAT  C  =  A  *  B  90  MAT  D  =  INV  (  C  )  100  MAT  PRINT  D  , 
A läses från den första DATA -satsen
B läses från den andra DATA -satsen
C beräknas genom att multiplicera A och B
D beräknas som inversen av C

Utgången skulle vara 2 2 1 1 -1 0 4 -3 -2

Felsökning

SOBS hade primitiva felsökningsfunktioner, begränsade mestadels till TRACE -satsen. TRACE ON skulle få tolken att skriva ut varje radnummer när den utfördes.