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.