lists are tricky though


  
  vlist: alist | clist ;
  
  alist : '(' clist ')'                 { $$ = $2;  }
        ;
  
  clist : term                  
        | clist ',' term           { $$ = mkterm("#,:",$1,$3); }
        ;
  
  slist : term                  
        | slist ',' term           { $$ = mkterm("#::",$1,$3); }
        ;
  
  lexpr : '[' ']'                  { $$ = mkterm("[]"); } 
        | '[' list                { $$ = mkterm("#list:",$2); }
        ;
  
  list  : term ']'                 { $$ = mkterm(".",$1,mkterm("[]")); }
        | term '|' term ']'        { $$ = mkterm("|",$1,$3); } 
        | term ',' list            { $$ = mkterm(".",$1,$3); }
        ;
  
  sexpr : '{' '}'                  { $$ = mkterm("{}"); } 
        | '{' set                  { $$ = mkterm("#set:",$2); }
        ;
  
  set   : term '}'                 { $$ = mkterm("#s.:",$1); }
        | term '|' clist '}'       { $$ = mkterm("#s|:",$1,$3); } 
        | term ',' set             { $$ = mkterm("#s,:",$1,$3); }
        ;
  
  

slide: lists are tricky though