anchor.diff:  postfix_suffix
   	: (AT) => AT LSQUARE exp COLON exp RSQUARE
   	| (S_E) => S_E
  -	| (LCURLY NUM RCURLY) => LCURLY NUM RCURLY
  +	| (LCURLY num RCURLY) => LCURLY num RCURLY
   	;
   
   lookup_expr
  
positive.code: flag_list
  	: (REG_ID ( COMMA REG_ID)* )?;
  	
  list_parameter
  	: (NAME) => NAME (COMMA NAME)*
  	|
  	;
  
  list_actualparameter: (exp (COMMA exp)* )?;
  
  assign_rt
  	: ASSIGNSIZE variable EQUATE exp
  
negative.code: FNEG: "~f";
  LNOT: "~L";
  
  
  class sslParser extends Parser;
  options {
  	buildAST = true;
  	k = 5;
  }
  
  tokens {
  	CONSTANT_DEF;
  	TABLE_DEF;
  }
  
  start: specification EOF;
  
  specification
  	: ( part SEMI! )*
  	;
  
  part
  	: constant_def
  	| registers_decl
  	| operands_decl
  	| flag_func
  	| table_def
  	| endianness
  	| instr
  	| fastlist
  //	| definition
  	;
  
  num: NUM;
  
  constant_def!
  	: name:NAME EQUATE! value=constant_expr
  		{ self.constants[name.getText()] = value }
  	;
  
  constant returns [res]
  	: n:NUM { res = int(n.getText()) }
  	;
  
  constant_expr returns [res]
  	: x=constant { res = x }
  	| x=constant PLUS y=constant { res = x + y }
  	| x=constant MINUS y=constant { res = x - y }
  	;
  
  operands_decl
  	: "OPERAND" operand_decl ( COMMA operand_decl )*
  	;
  
  operand_decl
  	: NAME EQUATE LCURLY parameter_list RCURLY
  	| NAME parameter_list func_parameter ASSIGNSIZE exp
  	;
  	
  func_parameter
  	: LSQUARE parameter_list RSQUARE
  	|
  	;
  
  definition
  	: internal_type NAME
  	| NAME ASSIGN num
  	| aliases
  	;
  
  