PLANC

PLANC
Paradigm Procedurmässigt , imperativt , strukturerat
Familj Pascal
Utvecklare Norsk Data
Slutlig utgåva
Slutlig
Maskinskrivningsdisciplin Statisk , stark
Omfattning Lexikalisk
Plattform Norsk Data Nord-10 minidatorer , ND-500 superminidatorer ; Motorola 68000 , 88000 ; Intel x86
OS Sintran III
Licens Proprietär
Influerad av
Nord programmeringsspråk

PLANC ( Programming LANguage for Nd Computers , uttalas som plank ) är ett programmeringsspråk på hög nivå .

Kompilatorer utvecklades av Norsk Data för flera arkitekturer, inklusive Motorola 68000 , 88000 , Intel x86 och Norsk Data Nord-10 minidatorer och ND-500 superminidatorer .

Språket utformades för att vara plattformsoberoende programvara . Den användes huvudsakligen internt på Norsk Data för att skriva systemmjukvara på hög nivå som de övre delarna av operativsystem och kompilatorer.

Grundläggande struktur

PLANC-program är uppbyggda i moduler och rutiner.

Ett mycket enkelt exempel på ett PLANC-program är följande:

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

En skillnad mot populära programmeringsspråk är att uppdragsoperatören utvärderar från vänster till höger: först beräknar den värdet och lagrar det sedan. Initiering av variabler vid kompileringstid utvärderas däremot från höger till vänster.

Tilldelningsoperatorn returnerar det lagrade värdet, så det kan lagras flera gånger: 5 =: a =: b skulle lagra 5 i både A- och B -variablerna. Den delar denna riktning med Plankalkül , ALGOL 60 , Mary (ett annat föga känt språk utvecklat i Norge) och det populära språket C .

En relaterad distinkt syntaktisk egenskap är att en funktion kan definieras för att ta som indata det beräknade värdet för uttrycket på dess vänstra sida. Ett enda ytterligare argument kräver inte heller omgivande parentes. Den resulterande infixnotationen suddar ut den syntaktiska skillnaden mellan funktioner och operatorer . Sådana uttryck verkar begreppsmässigt ha ett beräknat värde som flödar från vänster till höger.

Datatyper

Som med alla språk på hög nivå, använder PLANC variabler som kan ses i föregående exempel, här är de tillåtna datatyperna inom PLANC:

En uppräkning förklarades så här:

RÄKNING (Vinter, Vår, Sommar, Höst) : Årstider := Sommar

Detta definierar en uppräkning av årstiderna och ställer in standardvärdet till Sommar.

LABEL skiljer sig lite från en vanlig datatyp . Detta används för att fördefiniera en etikett i kod och används tillsammans med en GO- sats; mycket likt GOTO i BASIC .

Åtkomstmodifierare kan användas för att göra dem endast LÄSA eller SKRIVA.

För strängdata används flera fördefinierade datatyper, de är:

  1. BYTE – Innehåller ett tecken
  2. BYTES – Innehåller teckensträngar
  3. BITS – Innehåller BIT-strängar

Arraypekare var 3-ordskonstruktioner som inkluderade både basadressen, den nedre gränsen och den högre gränsen för arrayen; detta gjorde det möjligt att göra tillförlitlig körtidskontroll av arraygränser, och gjorde den typ av pekararitmetik som gör C till ett mer utmanande språk att skriva på.

Några uttalanden

PLANC är ett språk i familjen Pascal . Den saknar dock den generiska BEGIN END -konstruktionen som ofta finns i Pascal, istället gynnar den former som ROUTINE..ENDROUTINE eller DO..ENDDO etc.

En funktion som skiljer den från vissa andra språk är konstruktionen av loopar:

DO .... loop-satser... ENDDO

Förhoppningsvis skulle en eller flera av loop-satserna vara WHILE -villkor som gjorde det möjligt att bryta sig ur loopen.

Till exempel:

GÖR MEDAN testet ..... ENDDO

Liknar en C while (test) { ... } loop.

Ett annat exempel:

GÖR ..... MEDAN testet SLUTAR

Liknar en C do { .... } while (test). slinga.

Ibland skrev programmerare:

DO WHILE test1 ..... WHILE test2 ENDDO

C skulle kräva att skriva något i stil med while (test1) { .... if (! test2) break; } .

För slingor har följande struktur:

FOR var IN low:high DO .... loop-satser.... ENDDO

Ett steg kan också anges med low:high:step . Alternativt kan en typ (uppräkning eller heltalsintervallstyp) specificeras för att specificera en loop över ett värdeintervall eller en uppsättning som ska loopa över alla element i uppsättningen eller så kan en matris specificeras för att loopa över en matris. En pekare:nästa kan anges för att gå igenom en lista. Till exempel, om du definierar:

TYPE node = RECORD nod PEKARE : nästa T : some_data ENDRECORD

Kan skrivas:

FÖR p IN först:nästa GÖR ..... ENDFOR

att gå över listan.

En for -loop kan ha WHILE-satser inuti. Detta ger två möjliga sätt att lämna en for-loop, antingen för att värdelistan är uttömd eller för att testet misslyckades. Således kan block skrivas för att fånga var och en av dessa:

  
   
    rutin  void  ,  nodpekare  (  nodpekare  :  lista)  för  p  i  första:nästa  gör  medan  p.val >< 20  exitför retur noll  slutför  returendrutin 

Detta returnerar noll om listan var uttömd men avslutades på grund av en stund, den hamnade bara efter loopen och returnerade pekaren till det hittade elementet. Alternativt kunde det ha placerats i ett exitwhile -block som är identiskt förutom att det skulle hamna där om och bara om while-testet misslyckades. Om mer än en while-sats förekommer i loopen, kunde den inte skilja dem åt, de skulle alla göra ett hopp till samma exitwhile- block.

PLANC hade en primitiv undantagsmekanism: en rutin kunde returnera ett undantag, vilket var ett 16-bitars heltalsvärde. Detta kan sedan fångas upp av en ON ROUTINEERROR -sats i anropsomfånget.

Se även