Movatterモバイル変換


[0]ホーム

URL:


Hopp til innhold
Wikipedia
Søk

REXX

Fra Wikipedia, den frie encyklopedi
Referanseløs: Denne artikkelen inneholder enliste over kilder, litteratur ellereksterne lenker, men enkeltopplysninger lar seg ikkeverifisere fordi det mangler konkrete kildehenvisninger i form av fotnotebasertereferanser. Du kan hjelpe til med å sjekke opplysningene mot kildemateriale og legge inn referanser. Opplysninger uten kildehenvisning i form av referanser kan bli fjernet.
REXX
Tilblivelse1979
ParadigmeMulti-paradigme:Prosedyrisk programmering,strukturert programmering
Designet avMike Cowlishaw
Utviklet avIBM,Mike Cowlishaw
Siste versjon(er)ANSI X3.274 / 1996
Typetildeling dynamisk
Filendelse(r).cmd, .bat, .exec, .rexx, .rex, .EXEC
Påvirket av
PL/I,ALGOL,CMS EXEC,EXEC 2

Rexx er etprosedyraltprogrammeringsspråk med en engelsklignendesyntaks. Språket ble utviklet av Mike Cowlishaw hosIBM i 1979.[1] Det var i starten brukt på IBMs stormaskinsystemCMS, men ble også populært som innebygget skriptspråk iCommodore sittAmiga operativsystem og IBMsOS/2. Det har også tidvis vært brukt som makrospråk i andre applikasjoner, hovedsakelig på OS/2 og Amiga hvor det har vært enkelt å bruke Rexx fra andre språk.

I dag finnes det implementasjoner av Rexx som er portable over en rekkeoperativsystemer og plattformer. Rexx finnes i enobjektorientert utgave kalt ObjectRexx, og en utgave av som kjører under enJavavirtuell maskin kalt NetRexx. Rexx ble godkjent som en ANSI-standard i 1996.[2]

Syntaks

[rediger |rediger kilde]

Rexx har en engelsklignende syntaks, og gjør svært lite bruk av skilletegn i forhold til mange andre språk. Målet med språket er at det skal være enkelt å bruke for nybegynnere, men likevel kraftig nok til avanserte oppgaver.

Hello, World!

[rediger |rediger kilde]

Det idiomatiskeHello, World-programmet ser slik ut:

say "Hello, World!"

Et litt mer utførlig eksempel

[rediger |rediger kilde]
 /* enkel aritmetikk i rexx */  do forever    say "Type a number:"    parse pull number    if datatype(number) \= "NUM" then do        say '"'number'" is not a number!'        exit    end     factor = 1;    do while factor <= 10        say number "*" factor "=" number*factor        factor = factor + 1    end end

Kommentarer skrives på samme måte som iC, mellom/* og*/. Kommandoenparse pull leser inn en linje fra konsoll og lagrer den i variabelennumber. Funksjonendatatype() gir ut enstreng som beskriver typen data som er i variabelennumber (CHAR ellerNUM.) Resten skulle være noenlunde selvforklarende.

Datatyper

[rediger |rediger kilde]

Rexx har egentlig kun to datatyper,symboler ogstrenger. Symboler brukes som regel til å holde navnet på variabler, mens strenger inneholder de faktiske dataene som programmet bruker.

Symboler

[rediger |rediger kilde]

I Rexx har et symbol alltid en verdi. Et uinitialisert symbol er en streng med sitt eget navn (med store bokstaver). For eksempel:

say "Hallo" navnnavn = "Guttorm"say "Hallo" navn

Vil gi følgende resultat:

Hallo NAVNHallo Guttorm

Strenger

[rediger |rediger kilde]

I Rexx er alle data i form av strenger. Numeriske operasjoner opererer på tall representert som strenger, uten begrensninger på størrelse eller presisjon. Den faktiske typen av data i en streng kan utledes ved bruk av den innebygde funksjonendatatype(). For eksempel:

say datatype("1")say datatype("Fredrik")say datatype("3.14")

Vil gi resultatet:

NUMCHARNUM

Stilker

[rediger |rediger kilde]

Rexx har ingen egen strukturert datatype, men gjør bruk av noe som kallesstilker (fra engelsk "stems"). Dette er ikke en egentlig datatype, men en konvensjon som er mye brukt. Stilker består av to eller flere symboler og indekser adskilt med punktum.

person.0 = 2person.1.navn = "Harald"person.1.alder = 36person.2.navn = "Einar"person.2.alder = 42do i = 1 to person.0   say person.i.navn "er" person.i.alder "år gammel."end

Dette gir følgede resultat:

Harald er 36 år gammel.Einar er 42 år gammel.

I tilfeller hvor man bruker stilker som lister, er det konvensjon å bruke indeks 0 til å angi hvor mange elementer det er i listen.

Prosedyrer

[rediger |rediger kilde]

En prosedyre er i Rexx en navngitt programsnutt som kan utføre en oppgave, og som kan kalles en eller flere ganger fra den resterende programkoden. Rexx skiller mellom interne og eksterne prosedyrer.

Interne prosedyrer

[rediger |rediger kilde]

En intern prosedyre er en som er definert i samme programfil som den blir kalt fra, mens en ekstern prosedyre er definert i sin egen programfil.

Her er et eksempel på bruk av en intern prosedyre:

say half(16)say half(6.8)exithalf:   parse arg num   return "Halvparten av" num "er" num/2

Eksterne prosedyrer

[rediger |rediger kilde]

Vi kan lage det samme programmet som over med en ekstern funksjon i stedet. Først hovedprogrammet:

say half(16)say half(6.8)exit

I en separat fil som vi kallerhalf.rexx har vi følgende:

parse arg numreturn "Halvparten av" num "er" num/2

Resultatet av de to programmene skal være det samme.

Når et program kaller en prosedyre vil Rexx først se om det finnes en prosedyre med samme navn i den kjørende programfilen. Dersom det ikke gjør det vil den lete etter en egen fil som har det navnet til prosedyren. Regler for hvilke etternavn, og om store bokstaver er viktige eller ikke er noe opp til implementasjonen.

Lokale variabler

[rediger |rediger kilde]

Når man definerer en intern prosedyre som over, vil prosedyren i utgangspunktet ha tilgang til alle varable som er i bruk i programmet. Ofte ønsker vi å benytte lokale variable i en prosedyre, og begrense tilgangen til varable utenfor. Dette kan vi gjøre medprocedure-kommandoen.

a = 4b = "Nils"call baklengssay cexitbaklengs:    procedure expose b    say a    say reverse(b)    c = 5    return

Prosedyrenbaklengs har her to lokale variablea ogc, mens den har blitt gitt tilgang til den globaleb. Resultatet av å kjøre dette programmet vises nedenfor.

AsliNC

Vi ser at prosedyren skriver utA i stedet for verdien av variablenea siden denne ikke er definert i prosedyren. Verdien avc er på samme måte ikke synlig utenfor prosedyren hvor den er definert. Variabelenb har dermed blitt gjort synlig viaexpose-kommandoen, så prosedyren har full tilgang til den.

Expose-kommandoen gir en prosedyre tilgang til variable som er tilgjengelige der hvor prosedyren blir kalt fra. Rexx har ikke noe globalt skop for variable, så om ikke variabelen ikke er tilgjengelig der en prosedyre blir kalt fra så finnes det ingen måte å gi prosedyren tilgang til variabelen heller.

Programmet nedenfor vil kanskje ikke gi helt det resultatet man ville forvente:

a = "Geir"b = "Nils"call forlengs_baklengsexitforlengs_baklengs:   procedure expose a   say a   call baklengs   returnbaklengs:    procedure expose b    say reverse(b)    return

Resultat:

GeirB

Hvis man derimot i prosedyrenforlengs_baklengs satte inn:

procedure expose a b

Så ville resultatet bli mer som forventet:

GeirsliN

Referanser

[rediger |rediger kilde]
  1. ^«The Rexx Language Association - What is Rexx?». Besøkt 9. januar 2009. 
  2. ^«The Rexx Language Association - Standard Rexx». Besøkt 12. januar 2009. 

Eksterne lenker

[rediger |rediger kilde]
A# ·ActionScript ·Ada ·Alef ·ALGOL ·ALGOL 58 ·ALGOL 60 ·ALGOL 68 ·ALTRAN ·APL ·AppleScript ·Argus ·Assembler ·Autokode ·awk ·B ·BASIC ·BCPL ·BETA ·BitC ·BLISS ·Bourne Shell ·C ·C++ ·C-- ·CHILL ·C# ·C shell ·Caml ·Ch ·Cilk · Cilk++ ·Cilk Plus ·Clarion ·Clipper ·CLISP ·Clojure ·CLU ·COBOL ·COMAL ·Common Lisp ·Concurrent C ·Concurrent Euclid ·Concurrent Pascal ·C shell ·D ·Delphi ·Dylan ·ECMAScript ·Eiffel ·Emacs Lisp ·Erlang ·Euclid ·F* ·F# ·Forth ·Fortran ·GNU Common Lisp ·GNU Pascal ·Go ·Haskell ·HyperTalk ·Incr Tcl ·INTERCAL ·Interlisp ·Java ·JavaScript ·JRuby ·LaTeX ·Legoscript ·LilyPond ·Limbo ·Lisp ·LPC ·Lua ·Lynx ·Mary ·MATLAB ·Mesa ·ML ·MML ·Modula ·Modula-2 ·Modula-2+ ·MUMPS ·Objective-C ·Objective-C++ ·OCaml ·OpenVera ·O'Haskell ·Pascal ·Perl ·PHP ·Pike ·PL/I ·Plankalkül ·PLEX ·Prolog ·Protel ·Pure Data ·Python ·R ·Ratfor ·REXX ·RTL/2 ·Ruby ·Rust ·SAS ·Scala ·Scheme ·Scratch ·Simula ·SML ·Smalltalk ·SNOBOL ·Tcsh ·Tcl ·TECO ·TOM ·Turbo Basic ·Turbo Pascal ·Verilog ·Visual Prolog ·Turing ·TypeScript ·Vala ·VHDL ·Visual Basic
Oppslagsverk/autoritetsdata
Hentet fra «https://no.wikipedia.org/w/index.php?title=REXX&oldid=20372275»
Kategorier:
Skjulte kategorier:

[8]ページ先頭

©2009-2025 Movatter.jp