anchor.diff:  	   | ((TRIGGER | TRIGGER_LOWCASE) <<#0=#[AST_CREATE_TRIGGER];>> ct_s:STRINGLITERAL <<#0->addChild(#[$ct_s->getText(), AST_STRING_CONST]);>>
   	      ((BEFORE | BEFORE_LOWCASE) <<#0->addChild(#["\"BEFORE\"", AST_STRING_CONST]);>> | (AFTER | AFTER_LOWCASE) <<#0->addChild(#["\"AFTER\"", AST_STRING_CONST]);>>)
   	      ((CINSERT | CINSERT_LOWCASE) <<#0->addChild(#["\"INSERT\"", AST_STRING_CONST]);>> | (CDELETE | CDELETE_LOWCASE) <<#0->addChild(#["\"DELETE\"", AST_STRING_CONST]);>>| (CREPLACE | CREPLACE_LOWCASE) <<#0->addChild(#["\"REPLACE\"", AST_STRING_CONST]);>>)
  -	      CON ct_pe:pathExpr <<#0->addChild(#ct_pe);>>
  +	      (CON | ON) ct_pe:pathExpr <<#0->addChild(#ct_pe);>>
   	      (FOR_ | FOR) (EACH | EACH_LOWCASE) ((CNODE | NODE) <<#0->addChild(#["\"NODE\"", AST_STRING_CONST]);>> | (STATEMENT | STATEMENT_LOWCASE) <<#0->addChild(#["\"STATEMENT\"", AST_STRING_CONST]);>>)
   	      (CDO | CDO_LOWCASE) LBRACE ct_e1:triggerDoStmt SEMICOLON <<lst=#(#[AST_DO_STMNT_LIST], #ct_e1);>> ( ct_e2:triggerDoStmt SEMICOLON <<lst->addChild(#ct_e2);>>)* RBRACE
   	      <<#0->addChild(lst);>>
  
positive.code: 
  
  	| (GRANT | GRANT_LOWCASE) privl1:privList
  	  (   CON ( s12:STRINGLITERAL (CTO | TO) u13:userList
  	           <<
  	             #0=#(#[AST_GRANT_PRIV_ON_DOC], 
  	                  #privl1,
  
negative.code: 	  )
  
  	| (REVOKE | REVOKE_LOWCASE) privl2:privList
  	  (   (CON | ON)  ( s16:STRINGLITERAL (FROM | FROM_LOWCASE) u17:userList
  	            <<
  	              #0=#(#[AST_REVOKE_PRIV_FR_DOC], 
  	                   #privl2,
  