anchor.diff:  	|	GREATER
   	;
   
  -LENGTH_LABEL
  -	:	'length'
  -	;
  -
  -MIN_LENGTH_LABEL
  -	:	'minLength'
  -	;
  -
  -MAX_LENGTH_LABEL
  -	:	'maxLength'
  -	;
  -
  -PATTERN_LABEL
  -	:	'pattern'
  -	;
  -
  -LANG_PATTERN_LABEL
  -	:	'langPattern'
  -	;
  -
   restrictionValue
   	:	literal
   	;
   
  -inverseObjectProperty
  -	:	INVERSE_LABEL objectPropertyIRI
  -	;
  -
  -INVERSE_LABEL
  -	:	'inverse'
  -	;
   
   decimalLiteral
   	: (PLUS | MINUS)? DIGIT+ DOT DIGIT+
  
positive.code: grammar MOS ;
  	
  rule	:	conjunction;
  
  description
  	: iri
  	(conjunction (OR_LABEL conjunction)*) EOF
  	;
  
  conjunction
  	:	classIRI THAT_LABEL primary (AND_LABEL primary)*
  	|	primary (AND_LABEL primary)*
  	;
  
  WS
      : (' '| '\t'| EOL)+ {$channel = HIDDEN;}
      ;
  
  THAT_LABEL
  	:	'that'
  	;
  primary
  	:	(NOT_LABEL)? (restriction | atomic)
  	;
  
  objectPropertyIRI
  	: iri
  	;
  	
  fullIRI
      : LESS ( options {greedy=false;} : ~(LESS | GREATER | '"' | OPEN_CURLY_BRACE | CLOSE_CURLY_BRACE | '|' | '^' | '\\' | '`' | ('\u0000'..'\u0020')) )* GREATER
      //{\$this->setText(substr(\$this->getText(), 1, strlen(\$this->getText()) - 2)); }
      ;
  
negative.code: 	:	dataPrimary (AND_LABEL dataPrimary)*
  	;
  
  //fragment
  //ABBREVIATED_IRI
  //    : PREFIX_NAME SIMPLE_IRI
  //    ;
  
  fragment
  PREFIX_NAME
      : PN_PREFIX ':'
      ;
  
  fragment
  PN_PREFIX
      : (PN_CHARS)*
      ;
  
  fragment
  