Az Alphard programozási nyelv

Nyelvi elemek



Jelölés

A nyelv-definiáló kifejezésekre érvényes szabályok az alábbiak:

Foglalt szavak:

a szövegben félkövér, dõlt betûtípussal szedve (pl. form).

Meta-szimbólumok:

kisbetûkkel szedve, < > jelek között, pl. < stmt >

A *, +, # jelek:

a konstrukció ismétlési számát jelzik: "*" - 0 vagy több ismétlés, "+" - 1 vagy több ismétlés, "#" - 0 vagy egy ismétlés.

A többi jelölés

a BNF-ben megszokott módon értendõ.
Példa:
<vvv> ::= <a> { <b> | <c> } <xxx> ::= <a>* <yyy> ::= { <a>#<b> | <c> }+

Szimbólumok


<letter> ::= A | B | ... | Z | a | ... | z <digit> ::= 0 | 1 | ... | 9 <alphanumeric> ::= <letter> | <digits> | ` <special symbol> ::= <basic symbol> | <operator> <basic symbol> ::= begin | end | endof | ; | : | (|) | $ | , | :: | & | if | then | else | fi | case | of | esac | fo | with | in | ni | first | suchthat | from | do | od | for | exitloop | leave | skip | assert | var | const | aux | as specified | init | final | unk | ? | proc | vproc | func | sel | label | note | eton | ! | elif | elof | pform | while | > | < | . | # | copy | alias | form | inline | pre | post | rule | is | forward | external | specs | impl | shared | invariant | initially | axiom | repmap | record | enumarated | assumes | value | generator <operator> ::= <binary operator> | <unary operator> <binary operator> ::= ^ | * | / | div | rem | + | - | < | <= | = | <> | >= | > | and | or <unary operator> ::= + | - | not
A nyelv megkülönbözteti a kis és nagybetût. Az alfanumerikus karakterek közé sorolt ferde idézõjel az azonosítók olvashatóságát növelheti. Az elemi szimbólumokban a kis és nagybetûket tetszõlegesen lehet alkalmazni, itt a Begin, a begin és a BEGIN megegyeznek.

Megjegyzések

Két módon lehet megjegyzést szúrni a programba: note <tetszõleges szöveg, mely nem tartalmazza az "eton" szót> eton ! <tetszõleges szöveg a sor végéig>

Azonosítók


Példa:

<identifier> ::= <letter> {<alphanumeric>}* <special identifier> ::= &start | &finish | &next | &done | &value | &subscript | &<operator> <identifier list> ::= {<identifier>,}+

Példák:
A a3 TheDogTheCatChased The`Dog`The`Cat`Chased the`dog`the`cat`chased start $start &=

A fenti azonosítók mind különbözõek.
Az azonosítóknak nincs önálló jelentésük, objektumokat, formákat, típusokat, eljárásokat, szelektorokat, , utasításokat és paramétereket azonosítanak. A jelentésüket a deklarációk során kapják meg.
Két azonosító hasonló, ha kisbetûs változatuk megegyezik (pl. ABC Abc, abc, hasonlóak). Eljárásnevek kivételével nem szabad hasonló azonosítókat azonos láthatósági körön belül használni.
A speciális azonosítókra a program más területei hivatkozhatnak, pl. a + helyett a program az &+ felhasználó által definiált eljárást fogja meghívni az adott típusnál.

Pontosvesszõk automatikus elhelyezése

Amennyiben bizonyos utasítások közül lemarad a pontosvesszõ, a fordító azt automatikusan beteszi a két utasítás közé. Ez bizonyos elemi szimbólumok között fordulhat elõ. Ha az alábbiak közül
  

end, ), fi, esac, fo, ni, od, exitloop

az egyik utasítást a következõ utasítások egyike követi
  
begin, (, if, case, with, first, do, for
akkor történhet meg a fent leírt pontosvesszõ elhelyezés.

Speciális literálok

Az alábbi jól meghatározott kifejezések léteznek bizonyos típusok számára (pl. integer, real, boolean). <special literal> ::= <unsigned integer> | <unsigned real> | <string> | <boolean> | <radix> <unsigned integer> ::= {<digit>}+ <unsigned real> ::= <unsigned rational>{E<scale factor>}# | <unsigned integer>E<scale factor> <unsigned rational> ::= <unsigned integer>.<unsigned integer> <scale factor> ::= { + | - }#<unsigned integer> <string> ::= "<karakterek és "" tetszõleges szekvenciája>" <boolean> ::= true | false <radix> ::= {<alphanumeric>}+#<alphanumeric>
Példa:

3 147.5E-3 32#8 true "ABcdEF" "He said ""Ha!"""

A <radix> literálok a rawstorage típushoz tartoznak.a #-ot követõ <alphanumeric> adja meg reprezentáció bázisát. Az alfanumerikus értékeknek megfelelõ értékek a következõk: 0-9 -hez a 0-9, A-Z -hez 10-35, a-z -hez 36-61.