A HUME programozási nyelv

Dobozok



A dobozok.

<boxdecl> ::= <prelude> <body>

<prelude> ::=
"box" <boxid>
"in" <inoutlist>
"out" <inoutlist>
[ "within" <constraint> ]
[ "handles" <exnidlist> ]

<inoutlist> ::= "(" <inout1> "," ... "," <inoutn> ")"

<inout> ::= <varids> "::" <type> [ "timeout" <cexpr> ]

<varids> ::= <varid1> "," ... "," <varidtn>


A HUME koordinációs egysége a doboz. A doboznak egyedi azonosítója van, amelyet a prelude-jében adunk meg. A doboz be- és kimeneteire ins és outs-ként hivatkozunk. Ezek megadott hosszú inout típusú sorozatok. Egy inout típus bármilyen HUME típus lehet, kivéve a függvényeket és kivételeket. A doboz ki- és bemenetei a doboz prelude-jében kerülnek megadásra.

A doboz belseje mintaillesztések halmazából áll, egy opcionális időtúllépés megadásával, hogy az összes lehetőséget lefedjük, továbbá kivételkezelés is megadható, mely minden végrehajtás során megjelenik a doboz belsejében.
Minden dobozbeli <match>-nek kell, hogy legyen:
  • egy minta része <patt>, melynek típusa megegyezik a bemenet deklarációjában megadottal
  • egy kifejező része <expr>, melynek típusa megegyezik a kimenet deklarációjában megadottal.
  • A magasszintű minták tartalmazhatják a * szimbólumot is. Ezen szimbólum használatának a célja, hogy mutassa, hogy a megfelelő bemenet se nem illeszkedik, se nem "nyelődött" el.
    Az illesztés lehet szekvenciális (nem igazságos) vagy igazságos. Az illeszkedés sorrendejének szabálya: felülről lefelé az első olyan kerül kiválasztásra, ami teljes egészében illeszkedik a bemenettel. Ugyanakkor ez az egyszerű kiválsztaási szabály azt eredményezheti, hogy ugyanaz az eredmény kerül kiválasztásra mindig, ha ugyanaz a bemenet érkezik, és így előfordulhat, hogy bizonyos szabályok soha nem kerülnek kiválasztásra. Az igazságos illesztés ezzel szemben garantálná, hogy az egyes szabályok azonos valószínűséggel kerüljenek kiválasztásra.

    <body> ::= ( "match" | "fair" )

    <matches>
    [ "timeout" <cexpr> ]
    [ "handle" <handlers> ]