Table 1, Drool Syntax

Defining forms:

(define <variable> <initial-value>)

(define (<function-name> <formal-argument>...)
  <expression>...)

(defobject <object-name> (<parent-object>...)
  [<property-definition>]
  [<shared-property-definition>])

(defmethod (<object-name> '<selector> <formal-argument>...)
  <expression>...)


Property definitions:

(property [<property-symbol> <property-value>]...)

(shared-property [<property-symbol> <property-value>]...)


Special forms:

(let ([(<variable> <initial-value>)]...)
  <expression>...)

(cond [(<condition-expression> <expressions>...)]...)

(and <expression>...)

(or <expression>...)

(if <predicate-expression> <then-expression> [<else-expression>])

(while <looping-predicate> <expression>...)

(begin <expression>...)

(set! <variable> <value-expression)


Built-in functions:

(not <expression>)

(+ <number> <number>)
(- <number> <number>)
(* <number> <number>)
(/ <number> <number>)
(rem <number> <number>)

(< <number> <number>)
(<= <number> <number>)
(= <number> <number>)
(/= <number> <number>)
(>= <number> <number>)
(> <number> <number>)

(getp <object> <property>)
(setp! <object> <property> <value>)

(cons <car-value> <cdr-value>)
(car <cons>)
(set-car! <cons> <car-value>)
(cdr <cons>)
(set-cdr! <cons> <cdr-value>)

(vector <vector-element>...)
(make-vector <size>)
(string <character-code>...)
(make-string <size>)
(vector-size <vector>)
(vector-ref <vector> <index>)
(vector-set! <vector> <index> <value>)

(number? <expression>)
(string? <expression>)
(symbol? <expression>)
(cons? <expression>)
(vector? <expression>)
(object? <expression>)
(method? <expression>)
(cmethod? <expression>)
(package? <expression>)
(null? <expression>)

(call-next-method)

(clone <object> [<property> <value>]...)
(print <value>...)

Primary expression:

All numbers are 31 bit integers
Strings are enclosed in double quotes
Symbols can be quoted by preceeding them with a single quote character
