À l'aide de la syntaxe BNF, vous définissez un ou plusieurs arbres d'analyse syntaxique dans votre script.
Chaque arbre syntaxique a la forme:
lt ; clé racine >{< expression Registre >}+
où:
lt ; clé racine >:: = 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< expression Registre >:: = < Add Key > | < touche SUPPR > < add Key >:: = [ForceRemove | NoRemove | val]< nom clé > [clé valeur < >][{< Add Key >}] < supprimer clé >:: = Supprimer< nom clé > < nom clé >:: = '<AlphaNumeric> +'<AlphaNumeric>:: = tout caractère non NULL, c'est-à-dire ASCII 0< clé valeur >:: == >< Type de clé < nom clé > < clé Type >:: = s | d< clé valeur >:: = '<AlphaNumeric>'
&Notenbsp ;HKEY_CLASSES_ROOTet HKCR sont équivalents ; HKEY_CURRENT_USER et HKCU sont équivalents et ainsi de suite.
Un arbre syntaxique peut ajouter plusieurs clés et sous-clés à la lt ; clé de racine >. En ce faisant, elle permet de maintenir poignée d'une sous-clé ouvert jusqu'à ce que l'analyseur a terminé l'analyse de toutes ses sous-clés. Cette approche est plus efficace que d'exploitation sur une clé unique à la fois, comme dans l'exemple suivant d'arbre syntaxique:
HKEY_CLASSES_ROOT
{
  ; « MyVeryOwnKey »
{
« HasASubKey »
{
« PrettyCool? »
}
}
}
Ici, le registraire s'ouvre au départ (crée) HKEY_CLASSES_ROOT\MyVeryOwnKey . Il voit alors que MyVeryOwnKey a une sous-clé. Plutôt que de fermer la clé de MyVeryOwnKey , le registraire conserve la poignée et ouvre (crée) HasASubKey à l'aide de cette poignée de parent. (Le registre du système peut être plus lent lorsque aucun handle parent n'est ouvert.) Ouvrant ainsi, HKEY_CLASSES_ROOT\MyVeryOwnKey et l'ouverture puis HasASubKey avec MyVeryOwnKey que le parent est plus rapide que l'ouverture MyVeryOwnKey , fermeture MyVeryOwnKey et ensuite d'ouvertureMyVeryOwnKey\HasASubKey.