Understanding Backus Nauer Form (BNF) Syntax
Скрипты, используемые регистратором библиотеки ATL в этом разделе описаны с помощью синтаксиса BNF, который использует нотацию, показанной в следующей таблице.
О вызовах и символ |
Значение |
---|---|
::= |
Эквивалент |
| |
OR |
X+ |
Одно или несколько X. |
[X] |
X является необязательным. Необязательные разделители обозначаются []. |
Любой текст bold |
Строковый литерал. |
Любое выделенный курсивом текста |
Построение строковый литерал. |
Как показано в предыдущей таблице, скрипты регистратора использующие строковые литералы. Эти значения фактический текст, который должен отображаться в скрипт. В следующей таблице описаны строковые литералы, использующиеся в скрипте регистратора библиотеки ATL.
Строковый литерал |
Действие |
---|---|
ForceRemove |
Полностью удаляет следующий ключ (если оно существует), после чего повторно создает их. |
NoRemove |
Не удаляет следующий ключ во время Регистрации. |
val |
Указывает, что <Key Name> фактически именованное значение. |
Delete |
Удаляет следующий ключ во время регистра. |
s |
Указывает, что следующее значение строки (REG_SZ). |
d |
Указывает, что следующее значение DWORD (REG_DWORD). |
m |
Указывает, что следующее значение multistring (REG_MULTI_SZ). |
б |
Указывает, что следующее значение бинарный значение (REG_BINARY). |
Примеры синтаксиса BNF
Ниже приведено несколько примеров синтаксиса, которые помогут понять, как нотация и строковые литералы в скрипте регистратора библиотеки ATL.
Пример 1 для синтаксиса
<registry expression> ::= <Add Key>
указывает, что registry expression эквивалентно Add Key.
Пример 2 для синтаксиса
<registry expression> ::= <Add Key> | <Delete Key>
указывает, что registry expression эквивалентно или Add Key или Delete Key.
Пример 3 для синтаксиса
<Key Name> ::= '<AlphaNumeric>+'
указывает, что Key Name соответствует одному или нескольким AlphaNumerics.
Пример 4 для синтаксиса
<Add Key> ::= [ForceRemove | NoRemove | val]<Key Name>
указывает, что Add Key эквивалентно Key Name и строковые литералы, ForceRemove, NoRemove и val, являются необязательными.
Пример 5 для синтаксиса
<AlphaNumeric> ::= any character not NULL, that is, ASCII 0
указывает, что AlphaNumeric соответствует любому знаку отличных от NULL.
Пример 6 для синтаксиса
val 'testmulti' = m 'String 1\0String 2\0'
указывает, что имя ключа testmulti значение multistring структурированное String 1 и String 2.
Пример 7 для синтаксиса
val 'testhex' = d '&H55'
указывает, что имя ключа testhex присваивается значение DWORD шестнадцатеричному 55 (десятичное число 85). Обратите внимание на этот формат придерживает в нотации &H, обнаруженный в спецификации языка Visual Basic.