anchor.diff:  				|	expr bin_op expr 											# exprBinOp
   				|	SUB expr 													# exprSub
   				|	NEGATION expr 												# exprNegation
  -				|	O_PAR expr C_PAR; 											# exprEnclosed
  +				|	O_PAR expr C_PAR 											# exprEnclosed
  +				;
   
   callout_arg		:	expr 														# calloutExpr
  -				|	string_literal; 											# calloutStringLit
  +				|	string_literal 												# calloutStringLit
  +				;
   
   bin_op			:	arith_op 													# opArithmetic
   				|	rel_op 														# opRelational
   				|	eq_op 														# opEqual
  -				|	cond_op; 													# opConditional
  +				|	cond_op 													# opConditional
  +				;
   
   arith_op		:	ADD 														# aPlus
   				|	SUB 														# aMinus
   				|	MULT 														# aMult
   				|	DIV 														# aDiv
  -				| 	MOD; 														# aModule
  +				| 	MOD 														# aModule
  +				;
   
   rel_op			:	GREAT_THAN 													# relGreatThan
   				|	LESS_THAN 													# relLessThan
   				|	GREAT_EQUAL_THAN 											# relGreatEqual
  -				|	LESS_EQUAL_THAN;											# relLessEqual
  +				|	LESS_EQUAL_THAN												# relLessEqual
  +				;
   
   eq_op			: 	EQUAL 														# equalValue
  -				|	NOT_EQUAL; 													# equalNotValue
  +				|	NOT_EQUAL 													# equalNotValue
  +				;
   
   cond_op			:	SC_AMP														# condAmperson
  -				|	SC_PIPE;													# condPipe
  +				|	SC_PIPE														# condPipe
  +				;
   
   literal 		:	int_literal 												# litInt
   				|	char_literal 												# litChar
  -				|	bool_literal; 												# litBool
  +				|	bool_literal 												# litBool
  +				;
   
  -id				:	ID; 														# identifier
  +id				:	ID 															# identifier
  +				;
   
  -hex_literal		:	HEX_LITERAL;												# hexaLit
  +hex_literal		:	HEX_LITERAL 												# hexaLit
  +				;
   
   int_literal		:	decimal_literal												# intDecimal
  -				|	hex_literal; 												# intHexa
  +				|	hex_literal 												# intHexa
  +				;
   
  -decimal_literal	:	INT_UNSIGNED; 												# numPositiveLit
  +decimal_literal	:	INT_UNSIGNED 												# numPositiveLit
  +				;
   
  -bool_literal	:	BOOL_LITERAL;												# booleanLit
  +bool_literal	:	BOOL_LITERAL												# booleanLit
  +				;
   
  -char_literal	:	CHAR_LITERAL;												# charLit
  +char_literal	:	CHAR_LITERAL												# charLit
  +				;
   
  -string_literal	:	STRING_LITERAL;												# stringLit
  +string_literal	:	STRING_LITERAL												# stringLit
  +				;
  
positive.code: 				|	BREAK EOL													# exitBreak
  				|	CONTINUE EOL												# continueInstruction
  				| 	block 														# constructionBlock
  				|	;															# epsilonStatement
  
  assign_op		:	ASIGN 														# asignValue
  				|	ADD_ASSIGN 													# asignValuePlus
  				|	SUB_ASSIGN; 												# asignValueMinus
  
  expr_deriv		:	expr COMA expr_deriv 										# variousExpresion
  				|	expr 														# oneExpresion
  				|	; 															# epsilonExprDeriv
  
  callout_deriv	:	callout_arg COMA callout_deriv 								# variousCallout
  				|	callout_arg;												# oneCallout
  
  method_call		:	method_name O_PAR expr_deriv C_PAR							# methodCallComposed
  				|	CALLOUT O_PAR string_literal C_PAR							# calloutCallSimple
  				|	CALLOUT O_PAR string_literal COMA callout_deriv C_PAR;		# calloutCallComposed
  
  method_name		:	id; 														# methodName
  
  location		: 	id 															# idLocation
  				|	id O_BRACKET expr C_BRACKET; 								# idLocationComposed
  
  expr			:	location 													# exprLocation
  				|	method_call													# exprCallMethod
  
negative.code:  * PARSER RULES
   *------------------------------------------------------------------*/
  
  start			: 	CLASS_PROGRAM O_BRACE field_decl method_decl C_BRACE EOF	# inicio
  				;
  
  var_decl		: 	id 															# oneId
  				|	id O_BRACKET int_literal C_BRACKET 							# array
  				| 	id COMA var_decl											# variousId
  				|	id O_BRACKET int_literal C_BRACKET COMA var_decl			# variousArray
  				|																# epsilonId
  				;
  
  field_decl    	: 	type var_decl EOL 											# varDeclaration
  				|																# epsilonVar
  				;
  
  method_deriv	:	INT id 														# integerType
  				|	BOOLEAN id 													# booleanType
  				|	INT id COMA method_deriv 									# integerVariousType
  				|	BOOLEAN id COMA method_deriv								# booleanVariousType
  				;
  
  method_decl   	: 	type id O_PAR C_PAR block 									# methodSimple
  				|	type id O_PAR method_deriv C_PAR block 						# methodComposed
  				|	VOID id O_PAR C_PAR block									# methodVoidSimple
  				|	VOID id O_PAR method_deriv C_PAR block						# methodVoidComposed
  				|																# epsilonMethod
  				;
  
  block			:	O_BRACE var_decl statement C_BRACE							# blockConstruction
  				;
  
  type			:	INT 														# typeInt
  				|	BOOLEAN														# typeBoolean
  				;
  
  statement		: 	location assign_op expr EOL 								# locationAsign
  				|	method_call EOL												# callMethod
  