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