anchor.diff:      ;
   
   primary
  - 	:  '(' expression ')'
  +    :  '(' expression ')'
       |  literal	
  -	|   Identifier
  +    |   Identifier
       ;
   
   literal
  
positive.code: 	;
  	
  forwardDeclarationBody
  	: fieldDeclaration
  	| dataTypeDeclaration
  	;
  
  // § Data type declaration	ejemplo: /Ginpix7/Lib/g7xCS_01/n_cst_gestoravisos.sru
  
  dataTypeDeclaration
  	: dataTypeDeclarationBegin dataTypeDeclarationBody? dataTypeDeclarationEnd
  	;
  
  dataTypeDeclarationBegin
  	: scopeModificator? dataTypeDeclarationBeginIdentifier  dataTypeDeclarationParent delimiter
  	;
  
  dataTypeDeclarationBeginIdentifier
  	: 'type' Identifier 'from'
  	;
  
  dataTypeDeclarationParent
  	: dataTypeDeclarationParentExpecification? Identifier 
  	;
  
  dataTypeDeclarationParentExpecification
  	: dataTypeDeclarationParentExpecificationId 'within' 
  	;
  
  dataTypeDeclarationParentExpecificationId
  	: Identifier '`' Identifier
  	| Identifier
  	;	
  
  dataTypeDeclarationBody							
  	: dataTypeDeclarationDescriptor
  	| fieldDeclaration
  	| eventForwardDeclaration
  	;
  
  dataTypeDeclarationDescriptor
  	: 'descriptor' '"' Identifier '"' '=' '"' Identifier '"' delimiter?
  	;
  
  dataTypeDeclarationEnd
  	: 'end' 'type' delimiter?
  	;
  
  scopeModificator
  	: 'global'
  	| 'local'
  	;
  	
  // EventForwardDeclaration
  
  eventForwardDeclaration
  	: 'event' eventForwardTypeDeclaration Identifier? parametersList
  	;
  
  eventForwardTypeDeclaration
  	: 'type'
  	| creatorType
  	;
  	
  creatorType
  	: 'create'
  	| 'destroy'
  	;
  
  parametersList
  	: '(' parametersDeclarators? ')'
  	;
  	
  parametersDeclarators 
  	: parameterDeclarator (',' parameterDeclarator)*?
  	;
  
  parameterDeclarator
  	: 'readonly'? 'ref'? primitiveType Identifier
  	;
  	
  // § 3.6 Type Variables Declaration	
  typeVariablesDeclaration
  	: typeVariablesDeclarationBegin  typeVariablesDeclarationBody typeVariablesDeclarationEnd
  	;
  
  typeVariablesDeclarationBody
  	: fieldDeclaration
  	;
  	
  typeVariablesDeclarationBegin
  	: 'type' 'variables' delimiter?
  	;
  
  typeVariablesDeclarationEnd
  	: 'end' 'variables' delimiter
  	;
  
  // Function Body Declaration
  
  functionBodyDeclaration
  	: functionBodyDeclarationHeader functionBodyDeclarationBody* functionBodyDeclarationEnd delimiter
  	;
  	
  functionBodyDeclarationHeader
  	: primaryAccessType scopeModificator? functionBodyDeclarationHeaderIdentification parametersList functionBodyDeclarationHeaderEnd? ';'
  	;
  
  functionBodyDeclarationHeaderIdentification
  	: functionBodyDeclarationHeaderDefinition Identifier
  	;
  
  functionBodyDeclarationHeaderDefinition
  	: 'function' dataTypeName
  	| 'subroutine'
  	;
  
  functionBodyDeclarationHeaderEnd
  	: 'THROWS' Identifier
  	;
  
  functionBodyDeclarationBody
  	: statementBlock 
  	;
  
  functionBodyDeclarationEnd
  	: 'end' 'function'
  	| 'end' 'subroutine'
  	;
  	
  statementBlock
      :   fieldDeclaration
      |   statement
      ;
  
  statement
  	: expression
  	;
  
  // Field Declaration
  
  fieldDeclaration
      :   extendedAccessType? type variableDeclarators delimiter
      ;
  
  variableDeclarators
      :   variableDeclarator (',' variableDeclarator)*
      ;
  
  variableDeclarator
      :   variableDeclaratorId ('=' variableInitializer)? 
      ;
  
  variableInitializer 
      : expression
      ;
  
  variableDeclaratorId
      :   Identifier ('[' ']')*
      ;
  
  qualifiedName
      :   Identifier ('.' Identifier)*
  
negative.code:     ;
  
  primaryAccessType
  	:   'PUBLIC'
  	|   'public'
  	|   'PRIVATE'
  	|   'private'
  