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