15. Dependency Expression Grammar¶
15.1. Dependency Expression Grammar¶
This topic contains an example BNF grammar for a DXE driver dependency expression compiler that converts a dependency expression source file into a dependency section of a DXE driver stored in a firmware volume.
15.2. Example Dependency Expression BNF Grammar¶
<depex> ::= BEFORE <guid>
| AFTER <guid>
| SOR <bool>
| <bool>
<bool> ::= <bool> AND <term>
| <bool> OR <term>
| <term>
<term> ::= NOT <factor>
| <factor>
<factor> ::= <bool>
| TRUE
| FALSE
| GUID
| END
<guid> ::= ‘{‘ <hex32> ‘,’ <hex16> ‘,’ <hex16> ‘,’
<hex8> ‘,’ <hex8> ‘,’ <hex8> ‘,’ <hex8> ‘,’
<hex8> ‘,’ <hex8> ‘,’ <hex8> ‘,’ <hex8> ’}’
<hex32> ::= <hexprefix> <hexvalue>
<hex16> ::= <hexprefix> <hexvalue>
<hex8> ::= <hexprefix> <hexvalue>
<hexprefix> ::= ‘0’ ‘x’
| ‘0’ ‘X’
<hexvalue> ::= <hexdigit> <hexvalue>
| <hexdigit>
<hexdigit> ::= [0-9]
| [a-f]
| [A-F]
15.3. Sample Dependency Expressions¶
The following contains three examples of source statements using the BNF grammar from above along with the opcodes, operands, and binary encoding that a dependency expression compiler would generate from these source statements.
//
// Source
//
EFI_CPU_IO_PROTOCOL_GUID AND EFI_CPU_ARCH_PROTOCOL_GUID END
//
// Opcodes, Operands, and Binary Encoding
//
ADDR BINARY MNEMONIC
==== =========================
===============================================
0x00 : 02 PUSH
0x01 : 26 25 73 b0 c8 38 40 4b EFI_CPU_IO_PROTOCOL_GUID
88 77 61 c7 b0 6a ac 45
0x11 : 02 PUSH
0x12 : b1 cc ba 26 42 6f d4 11 EFI_CPU_ARCH_PROTOCOL_GUID
bc e7 00 80 c7 3c 88 81
0x22 : 03 AND
0x23 : 08 END
//
// Source
//
AFTER (EFI_CPU_DRIVER_FILE_NAME_GUID) END
//
// Opcodes, Operands, and Binary Encoding
//
ADDR BINARY MNEMONIC
==== =======================
===============================================
0x00 : 01 AFTER
0x01 : 93 e5 7b 98 43 16 0b 45 EFI_CPU_DRIVER_FILE_NAME_GUID
be 4f 8f 07 66 6e 36 56
0x11 : 08 END
//
// Source
//
SOR EFI_CPU_IO_PROTOCOL_GUID END
//
// Opcodes, Operands and Binary Encoding
//
ADDR BINARY MNEMONIC
==== =======================
===============================================
0x00 : 09 SOR
0x01 : 02 PUSH
0x02 : b1 cc ba 26 42 6f d4 11 EFI_CPU_IO_PROTOCOL_GUID
bc e7 00 80 c7 3c 88 81
0x12 : 03 END