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


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.

См. также

Ссылки

Creating Registrar Scripts