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 ‘*’ |