Variable Assignment:
   x =   --> =x
   x +=  --> +=x
   x -=  --> -=x
   x++   --> ++x
   x--   --> --x
  Note: The current version of slang does not distguish between the
  post and pre-increment operators.  A future version may make a
  distinction and assignment statements may return a value.


Function Definition: define f (arg1, ..., argN) { statements } 
   --> ( [ arg1 arg2 ... argN ] =argN ... =arg1 rpn-statements ) f

Variable Declaration: variable x1, ... xN;
   --> [ x1 ... xN ]

Structure Definition: struct {f1, ... fN}
   -->  "f1" ... "fN" N struct

Structure Typedef: typedef struct { f1, ... fN } Type_Name ;
   --> __typedef f1 ... fN ] "Type_Name" 

Multiple Assignment Expression: (x1, ..., xN) = expression 
   --> rpn-expression =xN ... =x1
   Note: If xj is missing, it will be replaced by `pop'
   
Function call:  f (x1, ..., xN)
   --> __arg x1 ... xN __earg f
   Note: if xj is missing, it will be replaced by NULL
   
Array reference: X [x1, .., xN]   
   --> __arg x1 ... xN X __aget
   Note: __earg is implicit
   
Array assignment: X [x1, ... xN] ASSIGNMENT-OP
   --> __arg x1 ... xN X RPN-ASSIGNMENT-OP
   ASSIGNMENT-OP:
      =   --> __aput
      ++  --> __aput_plusplus
      --  --> __aput_minusminus
      +=  --> __aput_pluseqs
      -=  --> __aput_minuseqs
   Note: __earg is implicit

Structure Reference: X.a --> "a" X .

Structure Assignment: X.a ASSIGNMENT-OP expression;
   --> rpn-expression "a" X RPN-ASSIGNMENT-OP
   ASSIGNMENT-OP --> RPN-ASSIGNMENT-OP:
     =   --> __struct_eqs
     +=  --> __struct_pluseqs
     -=  --> __struct_minuseqs
     --  --> __struct_minusminus
     ++  --> __struct_plusplus

Variable Alias:  &x --> __alias x

foreach (X) using (Y,...) block
   --> X __arg Y... __earg { block } foreach
