// Object Path BNF
// ================

// The first part of the grammar is the ns path.
// =============================================

<umi_path> ::= UMICONST TOK_COLON FSLASH FSLASH <locator> FSLASH <ns_root_selector> FSLASH <component_list>;

<locator> ::= IDENT ;    // Machine name
<locator> ::= DOT ;      // current machine name
<locator> ::= <>;    // Machine name

<ns_root_selector> ::= IDENT;

<component_list>   ::= <component><component_list_rest>;

<component_list_rest> ::= FSLASH <component><component_list_rest>;
<component_list_rest> ::= <>;

<component> ::= IDENT <def_starts_with_ident>;
<component> ::= DOT <key_list>;
<component> ::= <GUID_PATH>;

<def_starts_with_ident> ::= DOT <key_list>;
<def_starts_with_ident> ::= TOK_EQUALS IDENT;
<def_starts_with_ident> ::= <>;


<guid_path> ::= TOK_GUILD_CONST TOK_GUID;

<key_list>   ::= <key><key_list_rest>;

<key_list_rest> ::= TOK_COMMA <key><key_list_rest>;
<key_list_rest> ::= <>;

<key>        ::= IDENT TOK_EQUALS IDENT;