| 
					
				 | 
			
			
				@@ -707,8 +707,8 @@ Vt*_partial_conjunction(St*st,vt*self,Vt*x){advt*av=self->bonds->data[0]; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Vt*a=self->bonds->data[1];R Vnv(av->conjunction(st,a,x));} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Nt*Nn1(enum Ntag_t tag,Nt*a); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Vt*Swalk(St*st,Nt*node){if(!node)R st->nil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  SW(node->tag){CS N_STRAND:{Ar*t=node->l; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    for(Z i=0;i<t->length;i++)t->data[i]=Swalk(st,t->data[i]);R Vna(node->l);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  SW(node->tag){CS N_STRAND:{Ar*t=Ac(node->l); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    for(Z i=0;i<t->length;i++)t->data[i]=Swalk(st,t->data[i]);R Vna(t);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   CS N_LITERAL:{Vt*v=node->v; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Vt*t=N; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(v->tag==SYM){S n=v->val.symbol; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2302,7 +2302,8 @@ typedef struct{Lt*lexer; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   St*st; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Z pos; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Z end; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-  Z dp;}Pt; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  Z dp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+  B bn;}Pt; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 Pt*Pnew(St*state){Pt*parser=ma(SO(Pt)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   parser->st=state;R parser;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 V Perror(Pt*parser,S s){fatal(s);} 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2357,7 +2358,8 @@ Nt*PPatom(Pt*parser){Tkt*tok=Plook(parser,0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(tok&&tok->tag==T_RPAR){node=Nnl(parser->st->unit);BR;} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     parser->dp++; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     node=PPexpr(parser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    node->dp=parser->dp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(parser->bn)node->dp=2; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    else node->dp=parser->dp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     parser->dp--; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     tok=Plook(parser,0); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     if(!tok||tok->tag!=T_RPAR)Perror(parser,"unmatched");BR; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@@ -2447,7 +2449,11 @@ Nt*PPexpr(Pt*parser){Tkt*tmp; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   Ar*ns=An(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				   WH(!Pstop(parser)){if(!ns->data&&(tmp=Plook(parser,0))&&tmp->tag==T_PUNCT&&strcmp(tmp->text,":")==0&&(Plook(parser,1))){Peat(parser);R Nn1(N_FUN,PPexpr(parser));} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     Nt*n=PPnoun(parser,F); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-    if(!ns->data&&n->tag==N_LITERAL&&n->v->tag==SYM&&(tmp=Plook(parser,0))&&tmp->tag==T_PUNCT&&strcmp(tmp->text,":")==0){Peat(parser);R Nn2(N_BIND,n,PPexpr(parser));} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+    if(!ns->data&&n->tag==N_LITERAL&&n->v->tag==SYM&&(tmp=Plook(parser,0))&&tmp->tag==T_PUNCT&&strcmp(tmp->text,":")==0){Peat(parser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      B t=parser->bn; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      parser->bn=T; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      Nt*r=PPexpr(parser); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+      parser->bn=t;R Nn2(N_BIND,n,r);} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     LOOP{B flag=F; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       n=PPadv(parser,n,&flag); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       n=PPcnj(parser,n,&flag); 
			 |