Поделиться через


Основные сведения о синтаксисе формы Бэкуса-Наура (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.

См. также

Создание скриптов регистратора