Appendix A
BNF
Lexical Grammar
Comments
- comment:
-
//…the rest of the line/*…everything even across lines, including nested comments…*/
Tokens
- token:
-
name
symbol
number
character-literal
string
unary-operator
binary-operator
punctuation
#-word
- punctuation:
-
one of
( ) , . ; [ ] { } :: - = == =>one of
#( #[ ## ? ?? ?= ... - #-word:
-
one of
#t #f #next #rest #key #all-keys #include
Reserved Words
- reserved-word:
-
core-word
begin-word
function-word
define-body-word
define-list-word
- core-word:
-
one of
define end handler let local macro otherwise
The following reserved words are exported by the Dylan module:
- begin-word:
-
one of
begin block case for if methodone of
select unless until while - function-word:
-
(none)
- define-body-word:
-
one of
class library method module - define-list-word:
-
one of
constant variable domain
Names, Symbols and Keywords
- name:
-
word
\wordoperator-name
- unreserved-name:
-
any word that is not also a reserved-word
\wordoperator-name
- ordinary-name:
-
unreserved-name
define-body-word
define-list-word
- constrained-name:
-
name
:wordname
:binary-operator:word - operator-name:
-
\unary-operator\binary-operator - macro-name:
-
ordinary-name
begin-word
function-word
- name-not-end:
-
macro-name
one of
define handler let local macro otherwise - symbol:
-
word
:#string - word:
-
leading-alphabetic
leading-numeric alphabetic-character leading-alphabetic
leading-graphic leading-alphabetic
- leading-alphabetic:
-
alphabetic-character
leading-alphabetic any-character
- leading-numeric:
-
numeric-character
leading-numeric word-character-not-double-alphabetic
- leading-graphic:
-
graphic-character
leading-graphic word-character-not-alphabetic
- word-character-not-alphabetic:
-
numeric-character
graphic-character
special-character
- word-character-not-double-alphabetic:
-
alphabetic-character word-character-not-alphabetic
numeric-character
graphic-character
special-character
- any-character:
-
alphabetic-character
numeric-character
graphic-character
special-character
- alphabetic-character:
-
one of
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 - numeric-character:
-
one of
0 1 2 3 4 5 6 7 8 9 - graphic-character:
-
one of
! & * < > | ^ $ % @ _ - special-character:
-
one of
- + ~ ? / =
Operators
- unary-operator:
-
one of
- ~ - binary-operator:
-
one of
+ - * / ^ = == ~= ~== < <= > >= & | :=
Character and String Literals
- character-literal:
-
'character' - character:
-
any printing character (including space) except for
'or\\escape-character - string:
-
"more-string - more-string:
-
string-character more-string
" - string-character:
-
any printing character (including space) except for
"or\\escape-character - escape-character:
-
one of
\ ' " a b e f n r t 0<hex-digits>
Numbers
- number:
-
integer
ratio
floating-point
- integer:
-
binary-integer
octal-integer
signopt decimal-integer
hex-integer
- binary-integer:
-
#bbinary-digitbinary-integer binary-digit
- octal-integer:
-
#ooctal-digitoctal-integer octal-digit
- decimal-integer:
-
decimal-digit
decimal-integer decimal-digit
- hex-integer:
-
#xhex-digithex-integer hex-digit
- hex-digits:
-
hex-digit …
- binary-digit:
-
one of
0 1 - octal-digit:
-
one of
0 1 2 3 4 5 6 7 - decimal-digit:
-
one of
0 1 2 3 4 5 6 7 8 9 - hex-digit:
-
one of
0 1 2 3 4 5 6 7 8 9 A B C D E F - ratio:
-
signopt decimal-integer
/decimal-integer - floating-point:
-
signopt decimal-integeropt
.decimal-integer exponentoptsignopt decimal-integer
.decimal-integeropt exponentoptsignopt decimal-integer exponent
- exponent:
-
Esignopt decimal-integer - sign: