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 method
one 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:
-
#b
binary-digitbinary-integer binary-digit
- octal-integer:
-
#o
octal-digitoctal-integer octal-digit
- decimal-integer:
-
decimal-digit
decimal-integer decimal-digit
- hex-integer:
-
#x
hex-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:
-
E
signopt decimal-integer - sign: