10.3. Syntax overview

expression

→

constant | unary-message | binary-message | keyword-message | ‘(’ expression ‘)’

constant

→

self | number | string | object

unary-message

→

receiver unary-send | resend ‘.’ unary-send

unary-send

→

identifier

binary-message

→

receiver binary-send | resend ‘.’ binary-send

binary-send

→

operator expression

keyword-message

→

receiver keyword-send | resend ‘.’ keyword-send

keyword-send

→

small-keyword expression { cap-keyword expression }

receiver

→

[ expression ]

resend

→

resend | identifier

object

→

regular-object | block

regular-object

→

‘(’ [ ‘|’ [ ‘{’ ‘}’ ‘=’ string ] slot-list ‘|’ ] [ code ] ‘)’

block

→

‘[’ [ ‘|’ slot-list ‘|’ ] [ code ] ‘]’

slot-list

→

{ unannotated-slot-list | annotated-slot-list }

annotated-slot-list

→

‘{’ string slot-list ‘}’

unannotated-slot-list

→

{ slot ‘.’} slot [ ‘.’ ]

code

→

{ expression ‘.’} [ ‘^’ ] expression [ ‘.’ ]

slot

→

arg-slot | data-slot | binary-slot | keyword-slot

arg-slot

→

argument-name

data-slot

→

slot-name | slot-name ‘<-’ expression | slot-name ‘=’ expression

unary-slot

→

slot-name ‘=’ regular-object

binary-slot

→

operator ‘=’ regular-object | operator [identifier] ‘=’ regular-object

keyword-slot

→

small-keyword {cap-keyword} ‘=’ regular-object | small-keyword identifier {cap-keyword identifier} ‘=’ regular-object

slot-name

→

identifier | parent-name

parent-name

→

identifier ‘*’