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