anchor.diff:  	: attribute_instance* 'reg' variable_identifier
   	;
   */
  -// 5.3 UDP body
  +// A.5.3 UDP body
   /*
   udp_body
   	: combinational_body
  
positive.code: 	| ';'
  	;
  
  // 5 UDP declaration and instantiation
  // 5.1 UDP declaration
  /*
  udp_declaration
  	: attribute_instance* 'primitive' udp_identifier '(' udp_port_list ')' ';' udp_port_declaration udp_port_declaration* udp_body 'endprimitive'
  	| attribute_instance* 'primitive' udp_identifier '(' udp_declaration_port_list ')' ';' udp_body 'endprimitive'
  	;
  */
  // 5.2 UDP ports
  /*
  udp_port_list
  	: output_port_identifier ',' input_port_identifier (',' input_port_identifier)*
  
negative.code: 	: identifier
  	;
  
  // A.9.5 White space
  
  WHITE_SPACE
  	: [ \t\n\r]+ -> channel (HIDDEN)
  	;
  
  // 13.2.1 Specifying libraries—the library map file
  
  FILE_PATH_SPEC
  	: ([/~] | './') ~[ \r\t\n]*?
  	;
  
  // 19. Compiler directives
  
  COMPILER_DIRECTIVE_IDENTIFIER
  	: '`' (SIMPLE_IDENTIFIER | ESCAPED_IDENTIFIER)
  	;
  
  // limit where compiler directives can be placed in the source text
  pre_module_compiler_directive
  	: celldefine_compiler_directive
  	| default_nettype_compiler_directive
  	//| text_macro_definition
  	| conditional_compilation_directive
  	| include_compiler_directive
  	| resetall_compiler_directive
  	//| line_compiler_directive
  	| timescale_compiler_directive
  	| unconnected_drive_compiler_directive
  	| keywords_directive
  	| endkeywords_directive
  	;
  
  post_module_compiler_directive
  	: endcelldefine_compiler_directive
  	| default_nettype_compiler_directive
  	| undefine_compiler_directive
  	| resetall_compiler_directive
  	| nounconnected_drive_compiler_directive
  	;
  
  // 19.1 `celldefine and `endcelldefine
  
  celldefine_compiler_directive
  	: '`celldefine'
  	;
  
  endcelldefine_compiler_directive
  	: '`endcelldefine'
  	;
  
  // 19.2 `default_nettype
  
  default_nettype_compiler_directive
  	: '`default_nettype' default_nettype_value
  	;
  
  default_nettype_value
  	: 'wire'
  	| 'tri'
  	| 'tri0'
  	| 'tri1'
  	| 'wand'
  	| 'triand'
  	| 'wor'
  	| 'trior'
  	| 'trireg'
  	| 'uwire'
  	| 'none'
  	;
  
  // 19.3 `define and `undef
  // 19.3.1 `define
  /*
  text_macro_definition
  	: '`define' text_macro_name MACRO_TEXT
  	;
  
  text_macro_name
  	: text_macro_identifier ('(' list_of_formal_arguments ')')?
  	;
  
  // we need to handle MACRO_TEXT in a separate Lexer mode
  // this requires splitting the grammar into Lexer and Parser grammars
  MACRO_TEXT
  	: 
  	;
  
  list_of_formal_arguments
  	: formal_argument_identifier (',' formal_argument_identifier)*
  	;
  
  formal_argument_identifier
  	: SIMPLE_IDENTIFIER
  	;
  
  text_macro_usage
  	: '`' text_macro_identifier ('(' list_of_actual_arguments ')')?
  	;
  
  list_of_actual_arguments
  	: actual_argument (',' actual_argument)*
  	;
  
  actual_argument
  	: expression
  	;
  */
  // 19.3.2 `undef
  
  undefine_compiler_directive
  	: '`undef' text_macro_identifier
  	;
  
  // 19.4 `ifdef, `else, `elsif, `endif , `ifndef
  
  conditional_compilation_directive
  	: ifdef_directive
  	| ifndef_directive
  	;
  
  ifdef_directive
  	: '`ifdef' text_macro_identifier ifdef_group_of_lines ('`elsif' text_macro_identifier elsif_group_of_lines)* ('`else' else_group_of_lines)? '`endif'
  	;
  
  ifndef_directive
  	: '`ifndef' text_macro_identifier ifndef_group_of_lines ('`elsif' text_macro_identifier elsif_group_of_lines)* ('`else' else_group_of_lines)? '`endif'
  	;
  
  ifdef_group_of_lines
  	: non_port_module_item*
  	;
  
  ifndef_group_of_lines
  	: non_port_module_item*
  	;
  
  elsif_group_of_lines
  	: non_port_module_item*
  	;
  
  else_group_of_lines
  	: non_port_module_item*
  	;
  
  // 19.5 `include
  
  include_compiler_directive
  	: '`include' FILE_PATH_SPEC
  	;
  
  // 19.6 `resetall
  
  resetall_compiler_directive
  	: '`resetall'
  	;
  
  // 19.7 `line
  /*
  line_compiler_directive
  	: '`line' number STRING ('0' | '1' | '2')
  	;
  */
  // 19.8 `timescale
  
  timescale_compiler_directive
  	: '`timescale' TIME_LITERAL '/' TIME_LITERAL
  	;
  
  TIME_LITERAL
  	: UNSIGNED_NUMBER TIME_UNIT
  	;
  
  fragment
  TIME_UNIT
  	: [mnpf]? 's'
  	;
  
  // 19.9 `unconnected_drive and `nounconnected_drive
  
  unconnected_drive_compiler_directive
  	: '`unconnected_drive' ('pull0' | 'pull1')
  	;
  
  nounconnected_drive_compiler_directive
  	: '`nounconnected_drive'
  	;
  
  // 19.10 `pragma
  
  pragma
  	: '`pragma' pragma_name (pragma_expression (',' pragma_expression )*)?
  	;
  
  pragma_name
  	: SIMPLE_IDENTIFIER
  	;
  
  pragma_expression
  	: pragma_keyword
  	| pragma_keyword '=' pragma_value
  	| pragma_value
  	;
  
  pragma_value
  	: '(' pragma_expression (',' pragma_expression)* ')'
  	| number
  	| STRING
  	| identifier
  	;
  
  pragma_keyword
  	: SIMPLE_IDENTIFIER
  	;
  
  // 19.11 `begin_keywords, `end_keywords
  
  keywords_directive
  	: '`begin_keywords' '"' version_specifier '"'
  	;
  
  version_specifier
  	: '1364-1995'
  	| '1364-2001'
  	| '1364-2001-noconfig'
  	| '1364-2005'
  	;
  
  endkeywords_directive
  	: '`end_keywords'
  	;
  