anchor.diff:  rt
   	: assign_rt
   	| NAME LPAREN^ expr_list RPAREN!
  -//	| FLAGMACRO LPAREN (REG_ID ( COMMA! REG_ID)* )? RPAREN
  +	| ("undefineflags"^| "defineflags"^) LPAREN! (REG_ID ( COMMA! REG_ID)* )? RPAREN!
   	| UNDERSCORE^
   	;
   
  
positive.code: fast_entry: NAME INDEX^ NAME;
  
  
  class sslTreeParser extends TreeParser;
  options {
  	buildAST = true;
  }
  
  start!
  	: #(SPEC (part)*)
  	;
  
  part!
  	: #(CONSTANT cn:NAME cv=constant_expr)
  		{ self.constants[cn.getText()] = #[NUM, str(cv)] }
  	| #(TABLE tn:NAME tv=table_expr)
  		{ self.tables[tn.getText()] = tv /* ; print tn.getText() + ": " + ", ".join([tvi.toStringList() for tvi in tv]) */ }
  	| #(FUNCTION fn:NAME fp=parameter_list fb:RTL)
  		{ self.functions[fn.getText()] = fp, self.astFactory.dupTree(fb) }
  	| #(INSTR inam=instr_name ip=parameter_list ib:RTL)
  		{
              for n, v in inam:
                  self.locals.append(v)
  
negative.code:     print ast
  }
  
  header "sslPreprocessor.__main__" {
      from sslLexer import Lexer
      from sslParser import Parser
      
  