#! parses an identifier (string for now)
#! TODO: do we need to enter it into a symbol table?
<letter> <alphanumeric> <*> <&:> [ concat <var-node> ] <@ ;
#! parses an identifier (string for now)
#! TODO: do we need to enter it into a symbol table?
<letter> <alphanumeric> <*> <&:> [ concat <var-node> ] <@ ;
#! parses a name, which is used in replacement
<ALPHANUMERIC> <+> [ concat ] <@ ;
DEFER: <expr>
#! parses a name, which is used in replacement
<ALPHANUMERIC> <+> [ concat ] <@ ;
DEFER: <expr>
#! parses (<id>.<expr>), the "lambda" expression
#! all occurences of <id> are replaced with a pointer to this
#! lambda expression.
#! parses (<id>.<expr>), the "lambda" expression
#! all occurences of <id> are replaced with a pointer to this
#! lambda expression.
#! parses (<expr> <expr>), the function application
"(" token <expr> sp &> <expr> sp <&> ")" token sp <&
[ [ first ] keep second <apply-node> ] <@ ;
#! parses (<expr> <expr>), the function application
"(" token <expr> sp &> <expr> sp <&> ")" token sp <&
[ [ first ] keep second <apply-node> ] <@ ;
#! parses [<FACTOR-WORD>], the alien invocation
#! an alien factor word must be all capital letters and numerals
"[" token <name> sp &> "]" token sp <& [ <alien-node> ] <@ ;
#! parses [<FACTOR-WORD>], the alien invocation
#! an alien factor word must be all capital letters and numerals
"[" token <name> sp &> "]" token sp <& [ <alien-node> ] <@ ;