Egy Euclid program modultípusdeklarációk sorozatából áll. Ezeket megelőzheti egy include utasítás, aminek segítségével további Euclid programokat fűzhetünk a programunkhoz. Az include lista elemeit pontosvesszővel választjuk el, ha nincs megadva from lista, akkor a file összes deklarációja bekerül, egyébként csak a felsoroltak. Ha a különböző file-ok ugyanolyan nevű típusokat tartalmaznak, akkor az hibát eredményez. Egyes implementációban a szöveges beszúráson kívül több fordítási egység külön fordítása és összeszerkesztése is megengedett.
Az Euclid szintaxisát módosított BNF-ben írták le, ebből az idevonatkozó rész:
(A teljes leírás megtalálható: B.W.Lampson, J.J.Horning, R.L.London, J.G.Mitchell, G.L.Popek, "Report on the Programming Language Euclid", SIGPLAN Notices, Vol. 12, Num. 2, Febr. 1977), Appendix A. Collected Syntax.
-
Szimbólumok:
letter ::="A" | "B" | "C" | "D" | "E" | "F" | "G" | "H" | "I" | "J" | "K" | "L" | "M" | "N" | "O" | "P" | "Q" | "R" | "S" | "T" | "U" | "V" | "W" | "X" | "Y" | "Z" | "a" | "b" | "c" | "d" | "e" | "f" | "g" | "h" | "i" | "j" | "k" | "l" | "m" | "n" | "o" | "p" | "q" | "r" | "s" | "t" | "u" | "v" | "w" | "x" | "y" | "z"
octalDigit ::= "0" | "1" | "2" | "3" | "4" | "5" | "6" | "7"
digit ::= octalDigit |"8" | "9"
hexDigit ::= digit |"A" | "B" | "C" | "D" | "E" | "F"
breakChar ::= <some implementation-dependent character not a letter or digit>
specialSymbol ::= "+" | "-" | "*" | "=" | "<" | ">" | "<=" | ">=" | "->" | "(" | ")" | "{" | "}" | ":=" | "." | "," | ";" | ":" | "'" | "^" | "=>" | "&=" | "$" | "#"|wordSymbol
wordSymbol ::= abstraction | aligned | all | and | any | array | assert | at | begin | bind | bits | bound | case | checked | code | collection | const | counted | decreasing | dependent | discriminating | div | else | elseif | end | exit | exports | finally | for | forward | from | function | if | imports | in | include | initially | inline | invariant | loop | machine | mod | module | not | of | on | or | otherwise | packed | parameter | pervasive | post | pre | procedure | readonly | record | return | returns | set | then | to | type | unknown | var | when | with | xor
-
Azonosítók:
identifier ::= letter {letterOrDigit}
letterOrDigit ::= letter | digit | breakChar
-
Számok:
unsingedNumber ::= digit {digit} | octalDigit {octalDigit} "#8" | hexDigit {hexDigit} "#16"
-
Sztringek:
literalString ::= "'" {extendedCharacter} "'"
extendedCharacter ::= character | "$" extension
extension ::= digit digit digit | "S" | "T" | "N" | "$" | "'"
-
Karakter literálok:
literalChar ::= "$" extendedCharacter
-
Manifest konstansok:
literalConstant ::= unsingedNumber | literalString | literalChar | enumeratedValueId
manifestConstant ::= literalConstant | manifestConstantExpression
manifestConstantExpression ::= expression
Az Euclid program
unitokból épül fel, melyeket pontosvessző választ el. A fordító automatikusan berakja a pontosvesszőt, ha bizonyos szimbólumok valamelyikére végződik egy sor, illetve ha egy sor bizonyos szimbólumokkal kezdődik, akkor azt új unitnak tekinti.
Az azonosítók konstansokat, változókat, típusokat és rutinokat jelölhetnek. A hozzárendelésnek egyértelműnek kell lennie minden
láthatósági körben. A decimális számok jelölése a megszokott, az oktális illetve hexadecimális számokat a számjegyek után írt #8 illetve #16 jelzik.
Pl.:
1 100 717#8 0CAD1#16 123#16
A sztringkonstansok aposztrófok közé írt karaktersorozatok. A karakterkódok illetve a speciális karakterek jelölésére a $ szimbólum használatos. A $ddd az adott decimális kódú karaktert helyettesíti, a $S, $T, $N, $$, $' rendre a szóköz, a tabulátor, az újsor, a $ jel illetve az ' karaktert jelentik. Egy karakterkonstanst a $a jelöl, ahol az 'a' egy karakter.
Pl.:
- Sztringkonstansok: ' ', 'A', 'Euclid', 'két$Sszó';
- karakterkonstansok: $a, $$S, $$000