input:
  c_complex_object
| assertions
| error
c_complex_object:
  c_complex_object_head SYM_MATCHES SYM_START_CBLOCK c_complex_object_body SYM_END_CBLOCK
c_complex_object_head:
  c_complex_object_id c_occurrences
c_complex_object_id:
  type_identifier
| type_identifier V_LOCAL_TERM_CODE_REF
c_complex_object_body:
  c_any
| c_attributes
c_object:
  c_complex_object
| archetype_internal_ref
| archetype_slot
| constraint_ref
| c_code_phrase
| c_ordinal
| c_primitive_object
| V_C_DOMAIN_TYPE
| ERR_C_DOMAIN_TYPE
| error
archetype_internal_ref:
  SYM_USE_NODE type_identifier c_occurrences absolute_path
| SYM_USE_NODE type_identifier error
archetype_slot:
  c_archetype_slot_head SYM_MATCHES SYM_START_CBLOCK c_includes c_excludes SYM_END_CBLOCK
c_archetype_slot_head:
  c_archetype_slot_id c_occurrences
c_archetype_slot_id:
  SYM_ALLOW_ARCHETYPE type_identifier
| SYM_ALLOW_ARCHETYPE type_identifier V_LOCAL_TERM_CODE_REF
| SYM_ALLOW_ARCHETYPE error
c_primitive_object:
  c_primitive
c_primitive:
  c_integer
| c_real
| c_date
| c_time
| c_date_time
| c_duration
| c_string
| c_boolean
c_any:
  *
c_attributes:
  c_attribute
| c_attributes c_attribute
c_attribute:
  c_attr_head SYM_MATCHES SYM_START_CBLOCK c_attr_values SYM_END_CBLOCK
| c_attr_head SYM_MATCHES SYM_START_CBLOCK error SYM_END_CBLOCK
c_attr_head:
  V_ATTRIBUTE_IDENTIFIER c_existence
| V_ATTRIBUTE_IDENTIFIER c_existence c_cardinality
c_attr_values:
  c_object
| c_attr_values c_object
| c_any
c_includes:
  -/-
| SYM_INCLUDE assertions
c_excludes:
  -/-
| SYM_EXCLUDE assertions
assertions:
  assertion
| assertions assertion
assertion:
  any_identifier : boolean_expression
| boolean_expression
| any_identifier : error
boolean_expression:
  boolean_leaf
| boolean_node
boolean_node:
  SYM_EXISTS absolute_path
| SYM_EXISTS error
| relative_path SYM_MATCHES SYM_START_CBLOCK c_primitive SYM_END_CBLOCK
| SYM_NOT boolean_leaf
| arithmetic_expression = arithmetic_expression
| arithmetic_expression SYM_NE arithmetic_expression
| arithmetic_expression SYM_LT arithmetic_expression
| arithmetic_expression SYM_GT arithmetic_expression
| arithmetic_expression SYM_LE arithmetic_expression
| arithmetic_expression SYM_GE arithmetic_expression
| boolean_expression SYM_AND boolean_expression
| boolean_expression SYM_OR boolean_expression
| boolean_expression SYM_XOR boolean_expression
| boolean_expression SYM_IMPLIES boolean_expression
boolean_leaf:
  ( boolean_expression )
| SYM_TRUE
| SYM_FALSE
arithmetic_expression:
  arithmetic_leaf
| arithmetic_node
arithmetic_node:
  arithmetic_expression + arithmetic_leaf
| arithmetic_expression - arithmetic_leaf
| arithmetic_expression * arithmetic_leaf
| arithmetic_expression / arithmetic_leaf
| arithmetic_expression ^ arithmetic_leaf
arithmetic_leaf:
  ( arithmetic_expression )
| integer_value
| real_value
| absolute_path
absolute_path:
  /
| / relative_path
| absolute_path / relative_path
relative_path:
  path_segment
| relative_path / path_segment
path_segment:
  V_ATTRIBUTE_IDENTIFIER V_LOCAL_TERM_CODE_REF
| V_ATTRIBUTE_IDENTIFIER
c_existence:
  -/-
| SYM_EXISTENCE SYM_MATCHES SYM_START_CBLOCK existence_spec SYM_END_CBLOCK
existence_spec:
  V_INTEGER
| V_INTEGER SYM_ELLIPSIS V_INTEGER
c_cardinality:
  SYM_CARDINALITY SYM_MATCHES SYM_START_CBLOCK cardinality_spec SYM_END_CBLOCK
cardinality_spec:
  occurrence_spec
| occurrence_spec ; SYM_ORDERED
| occurrence_spec ; SYM_UNORDERED
| occurrence_spec ; SYM_UNIQUE
| occurrence_spec ; SYM_ORDERED ; SYM_UNIQUE
| occurrence_spec ; SYM_UNORDERED ; SYM_UNIQUE
| occurrence_spec ; SYM_UNIQUE ; SYM_ORDERED
| occurrence_spec ; SYM_UNIQUE ; SYM_UNORDERED
cardinality_limit_value:
  integer_value
| *
c_occurrences:
  -/-
| SYM_OCCURRENCES SYM_MATCHES SYM_START_CBLOCK occurrence_spec SYM_END_CBLOCK
| SYM_OCCURRENCES error
occurrence_spec:
  cardinality_limit_value
| V_INTEGER SYM_ELLIPSIS cardinality_limit_value
c_integer_spec:
  integer_value
| integer_list_value
| integer_interval_value
c_integer:
  c_integer_spec
| c_integer_spec ; integer_value
| c_integer_spec ; error
c_real_spec:
  real_value
| real_list_value
| real_interval_value
c_real:
  c_real_spec
| c_real_spec ; real_value
| c_real_spec ; error
c_date_constraint:
  V_ISO8601_DATE_CONSTRAINT_PATTERN
| date_value
| date_interval_value
c_date:
  c_date_constraint
| c_date_constraint ; date_value
| c_date_constraint ; error
c_time_constraint:
  V_ISO8601_TIME_CONSTRAINT_PATTERN
| time_value
| time_interval_value
c_time:
  c_time_constraint
| c_time_constraint ; time_value
| c_time_constraint ; error
c_date_time_constraint:
  V_ISO8601_DATE_TIME_CONSTRAINT_PATTERN
| date_time_value
| date_time_interval_value
c_date_time:
  c_date_time_constraint
| c_date_time_constraint ; date_time_value
| c_date_time_constraint ; error
c_duration_constraint:
  duration_pattern
| duration_pattern / duration_interval_value
| duration_value
| duration_interval_value
c_duration:
  c_duration_constraint
| c_duration_constraint ; duration_value
| c_duration_constraint ; error
c_string_spec:
  V_STRING
| string_list_value
| string_list_value , SYM_LIST_CONTINUE
| V_REGEXP
c_string:
  c_string_spec
| c_string_spec ; string_value
| c_string_spec ; error
c_boolean_spec:
  SYM_TRUE
| SYM_FALSE
| SYM_TRUE , SYM_FALSE
| SYM_FALSE , SYM_TRUE
c_boolean:
  c_boolean_spec
| c_boolean_spec ; boolean_value
| c_boolean_spec ; error
c_ordinal:
  c_ordinal_spec
| c_ordinal_spec ; integer_value
| c_ordinal_spec ; error
c_ordinal_spec:
  ordinal
| c_ordinal_spec , ordinal
ordinal:
  integer_value SYM_INTERVAL_DELIM V_QUALIFIED_TERM_CODE_REF
c_code_phrase:
  V_TERM_CODE_CONSTRAINT
| V_QUALIFIED_TERM_CODE_REF
constraint_ref:
  V_LOCAL_TERM_CODE_REF
any_identifier:
  type_identifier
| V_ATTRIBUTE_IDENTIFIER
type_identifier:
  ( V_TYPE_IDENTIFIER )
| ( V_GENERIC_TYPE_IDENTIFIER )
| V_TYPE_IDENTIFIER
| V_GENERIC_TYPE_IDENTIFIER
string_value:
  V_STRING
string_list_value:
  V_STRING , V_STRING
| string_list_value , V_STRING
| V_STRING , SYM_LIST_CONTINUE
integer_value:
  V_INTEGER
| + V_INTEGER
| - V_INTEGER
integer_list_value:
  integer_value , integer_value
| integer_list_value , integer_value
| integer_value , SYM_LIST_CONTINUE
integer_interval_value:
  SYM_INTERVAL_DELIM integer_value SYM_ELLIPSIS integer_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT integer_value SYM_ELLIPSIS integer_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM integer_value SYM_ELLIPSIS SYM_LT integer_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT integer_value SYM_ELLIPSIS SYM_LT integer_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_LT integer_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_LE integer_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT integer_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GE integer_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM integer_value SYM_INTERVAL_DELIM
real_value:
  V_REAL
| + V_REAL
| - V_REAL
real_list_value:
  real_value , real_value
| real_list_value , real_value
| real_value , SYM_LIST_CONTINUE
real_interval_value:
  SYM_INTERVAL_DELIM real_value SYM_ELLIPSIS real_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT real_value SYM_ELLIPSIS real_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM real_value SYM_ELLIPSIS SYM_LT real_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT real_value SYM_ELLIPSIS SYM_LT real_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_LT real_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_LE real_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT real_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GE real_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM real_value SYM_INTERVAL_DELIM
boolean_value:
  SYM_TRUE
| SYM_FALSE
boolean_list_value:
  boolean_value , boolean_value
| boolean_list_value , boolean_value
| boolean_value , SYM_LIST_CONTINUE
character_value:
  V_CHARACTER
character_list_value:
  character_value , character_value
| character_list_value , character_value
| character_value , SYM_LIST_CONTINUE
date_value:
  V_ISO8601_EXTENDED_DATE
date_list_value:
  date_value , date_value
| date_list_value , date_value
| date_value , SYM_LIST_CONTINUE
date_interval_value:
  SYM_INTERVAL_DELIM date_value SYM_ELLIPSIS date_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT date_value SYM_ELLIPSIS date_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM date_value SYM_ELLIPSIS SYM_LT date_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT date_value SYM_ELLIPSIS SYM_LT date_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_LT date_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_LE date_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT date_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GE date_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM date_value SYM_INTERVAL_DELIM
time_value:
  V_ISO8601_EXTENDED_TIME
time_list_value:
  time_value , time_value
| time_list_value , time_value
| time_value , SYM_LIST_CONTINUE
time_interval_value:
  SYM_INTERVAL_DELIM time_value SYM_ELLIPSIS time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT time_value SYM_ELLIPSIS time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM time_value SYM_ELLIPSIS SYM_LT time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT time_value SYM_ELLIPSIS SYM_LT time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_LT time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_LE time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GE time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM time_value SYM_INTERVAL_DELIM
date_time_value:
  V_ISO8601_EXTENDED_DATE_TIME
date_time_list_value:
  date_time_value , date_time_value
| date_time_list_value , date_time_value
| date_time_value , SYM_LIST_CONTINUE
date_time_interval_value:
  SYM_INTERVAL_DELIM date_time_value SYM_ELLIPSIS date_time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT date_time_value SYM_ELLIPSIS date_time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM date_time_value SYM_ELLIPSIS SYM_LT date_time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT date_time_value SYM_ELLIPSIS SYM_LT date_time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_LT date_time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_LE date_time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT date_time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GE date_time_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM date_time_value SYM_INTERVAL_DELIM
duration_pattern:
  V_ISO8601_DURATION_CONSTRAINT_PATTERN
duration_value:
  V_ISO8601_DURATION
duration_list_value:
  duration_value , duration_value
| duration_list_value , duration_value
| duration_value , SYM_LIST_CONTINUE
duration_interval_value:
  SYM_INTERVAL_DELIM duration_value SYM_ELLIPSIS duration_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT duration_value SYM_ELLIPSIS duration_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM duration_value SYM_ELLIPSIS SYM_LT duration_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT duration_value SYM_ELLIPSIS SYM_LT duration_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_LT duration_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_LE duration_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GT duration_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM SYM_GE duration_value SYM_INTERVAL_DELIM
| SYM_INTERVAL_DELIM duration_value SYM_INTERVAL_DELIM
term_code:
  V_QUALIFIED_TERM_CODE_REF
| ERR_V_QUALIFIED_TERM_CODE_REF
term_code_list_value:
  term_code , term_code
| term_code_list_value , term_code
| term_code , SYM_LIST_CONTINUE
uri_value:
  V_URI