Понимание деревья разбора

Используя синтаксис БНФ, определить одно или несколько деревьев разбора в вашем скрипте.

Каждое дерево разбора имеет вид:

 lt; корневого ключа > < реестра выражение >{}+

где:

lt; корневого ключа >:: = HKEY_CLASSES_ROOT |HKEY_CURRENT_USER | HKEY_LOCAL_MACHINE |HKEY_USERS | Раздел HKEY_PERFORMANCE_DATA |HKEY_DYN_DATA | HKEY_CURRENT_CONFIG |HKCR |HKCU | HKLM | HKU |HKPD |HKDD |HKCC< реестра выражение >:: = < Add Key > | < удалить ключ > < добавить ключ >:: = [ForceRemove | NoRemove | val]< имя ключа >              [< значение ключа >][{< Добавить ключ >}] < удалить ключ >:: = Удалить< имя ключа > < имя ключа >:: = '<AlphaNumeric> +'<AlphaNumeric>:: = любой символ не NULL, то есть ASCII 0< значение ключа >:: == < тип ключа >< имя ключа > < тип ключа >:: = s | d< значение ключа >:: = '<AlphaNumeric>'

Примечаниеnbsp;HKEY_CLASSES_ROOTи HKCR эквивалентны; HKEY_CURRE&NT_USER и HKCU являются эквивалентные; и так далее.

Дерева разбора можно добавить несколько разделов и подразделов lt; корневой ключ >. Поступая таким образом, он держит один подраздел дескриптор открытым до завершения синтаксический анализатор разбора всех его подразделов. Этот подход является более эффективным, чем работающих на один ключ в то время, как показано в следующем примере дерево разбора:

HKEY_CLASSES_ROOT
{
   «MyVeryOwnKey»
   {
      «HasASubKey»
      {
         «PrettyCool?»
      }
   }
}

Здесь, первоначально открывает регистратор (создается) HKEY_CLASSES_ROOT\MyVeryOwnKey . Затем он видит, что MyVeryOwnKey имеет соответствующий подраздел. Вместо того, чтобы закрыть ключ к MyVeryOwnKey , секретарь сохраняет ручку и открывает (создается) HasASubKey с помощью этого родительского дескриптора. (Системный реестр может быть медленнее при открытом не родительский дескриптор). Таким образом, открытие HKEY_CLASSES_ROOT\MyVeryOwnKey и затем открыть HasASubKey с MyVeryOwnKey как родитель работает быстрее, чем открытие MyVeryOwnKey , закрытие MyVeryOwnKey и затем открытьMyVeryOwnKey\HasASubKey.

Index