2.12 VFR Expression Statement Definition

The VFR expression is defined in C-style language.
The syntax of VFR expression is defined as a tree. The positions in the tree are determined according to the priority of the operator (for example: + - * /). At the root of it are the terms of OR, followed by the terms of AND, because the priority of operator OR is lower than the operator AND(s). The leaves of the tree are sub- expressions of built-in-functions, unary operators, ternary operators, and constants.

2.12.1 OR

vfrStatementExpression ::=
andTerm ( "OR" andTerm )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_OR op-codes.

2.12.2 AND

andTerm ::=
bitwiseorTerm ( "AND" bitwiseorTerm )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_AND op-codes.

2.12.3 bitwiseor

bitwiseorTerm ::=
bitwiseandTerm ( "|" bitwiseandTerm )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_BITWISE_OR op-codes.

2.12.4 bitwiseand

bitwiseandTerm ::=
equalTerm ( "&" equalTerm )*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_BITWISE_AND op-codes.

2.12.5 equal

equalTerm ::=
compareTerm
(
"==" compareTerm
| "!=" compareTerm
)*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_EQUAL or EFI_IFR_NOT_EQUAL op-codes.

2.12.6 compare

compareTerm ::=
shiftTerm
(
"<" shiftTerm
| "<=" shiftTerm
| ">" shiftTerm
| ">=" shiftTerm
)*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_LESS_THAN EFI_IFR_LESS_EQUAL, EFI_IFR_IFR_GREATER_EQUAL, or EFI_IFR_GREATER_THAN op-codes.

2.12.7 shift

shiftTerm ::=
addMinusTerm
(
"<<" addMinusTerm
| ">>" addMinusTerm
)*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_SHIFT_LEFT or EFI_IFR_SHIFT_RIGHT op-codes.

2.12.8 add/minus

addMinusTerm ::=
multdivmodTerm
(
"+" multdivmodTerm
| "-" multdivmodTerm
)*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_ADD or EFI_IFR_SUBTRACT op-codes.

2.12.9 multiply/divide/modulo

multdivmodTerm ::=
castTerm
(
"*" castTerm
| "/" castTerm
| "%" castTerm
)*

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_MULTIPLY EFI_IFR_MODULO or EFI_IFR_DIVIDE op-codes.

2.12.10 cast terms

castTerm ::=
(
"("
(
"BOOLEAN"
| "UINT64"
| "UINT32"
| "UINT16"
| "UINT8"
)
")"
)*
atomTerm

BEHAVIORS AND RESTRICTIONS

The VFR supports the C-style type conversion. The values can be converted into one of the following types: BOOLEAN, UINT64, UINT32, UINT16, UINT8.

2.12.11 atom terms

atomTerm ::=
vfrExpressionCatenate
| vfrExpressionMatch
| vfrExpressionParen
| vfrExpressionBuildInFunction
| vfrExpressionConstant
| vfrExpressionUnaryOp
| vfrExpressionTernaryOp
| vfrExpressionMap
| ( "NOT" atomTerm )
| vfrExpressionMatch2

2.12.11.1 catenate

vfrExpressionCatenate ::=
"catenate"
"(" vfrStatementExpression "," vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_CATENATE op-codes.

Example

string varid = MyData.String,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minsize = 6,
maxsize = 40,
inconsistentif prompt = STRING_TOKEN(STR_CHECK),
pushthis != catenate(stringref(STRING_TOKEN(STR_STRING_RIGHT)),
stringref(STRING_TOKEN(STR_STRING_LEFT))),
endif
endstring;

2.12.11.2 match

vfrExpressionMatch ::=
"match"
"(" vfrStatementExpression "," vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_MATCH op-codes.

Example

grayoutif match(stringref(STRING_TOKEN(STR_PATTERN)),
stringref(STRING_TOKEN(STR_STRING)))
numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 243,
endnumeric;
endif;

2.12.11.3 parenthesis

vfrExpressionParen ::=
"(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Changes the order of the calculation.

2.12.11.4 build-in functions

vfrExpressionBuildInFunction ::=
dupExp
| ideqvalExp
| ideqidExp
| ideqvallistExp
| questionref1Exp
| rulerefExp
| stringref1Exp
| pushthisExp
| securityExp
| getExp

2.12.11.4.1 dup

dupExp ::=
"dup"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_DUP op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 0xf0,
default value = 2 + dup,
endnumeric;

2.12.11.4.2 ideqval

ideqvalExp ::=
"ideqval"
vfrQuestionDataFieldName "==" Number

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_EQ_ID_VAL op-codes.

Example

grayoutif ideqval MyData.Data1 == 99;
numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 0xf0,
endnumeric;
endif;

2.12.11.4.3 ideqid

ideqidExp ::=
"ideqid"
vfrQuestionDataFieldName "==" vfrQuestionDataFieldName

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_EQ_ID_ID op-codes.

Example

grayoutif ideqid MyData.Data2 == MyData.Data3;
numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 0xf0,
endnumeric;
endif;

2.12.11.4.4 ideqvallist

ideqvallistExp ::=
"ideqvallist"
vfrQuestionDataFieldName "==" ( Number )+

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_EQ_ID_LIST op-codes.
grayoutif ideqvallist MyData.Data1 == 1 3;
numeric name = MyNumeric,
varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 0xf0,
endnumeric;
endif;

2.12.11.4.5 questionref

questionref1Exp ::=
"questionref"
"(" StringIdentifier | Number ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_QUESTION_REF1 op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 0xf0,
default value = questionref(MyNumeric),
endnumeric;

2.12.11.4.6 ruleref

rulerefExp ::=
"ruleref" "(" StringIdentifier ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_RULE_REF op-codes.

Example

grayoutif ruleref(MyRule) == 1;
string varid = MyData.String,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minsize = 6,
maxsize = 40,
endstring;
endif;

2.12.11.4.7 stringref

stringref1Exp ::=
"stringref" "(" getStringId ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_STRING_REF1 op-codes.

Example

grayoutif stringref(STRING_TOKEN(STR_STRING)) == 1;
string varid = MyData.String,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minsize = 6,
maxsize = 40,
endstring;
endif;

2.12.11.4.8 pushthis

pushthisExp ::=
"pushthis"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_THIS op-codes.

Example

string varid = MyData.String,
prompt = STRING_TOKEN(STR_PROMPT), help = STRING_TOKEN(STR_HELP),
minsize = 6,
maxsize = 40,
inconsistentif prompt = STRING_TOKEN(STR_CHECK),
pushthis != stringref(STRING_TOKEN(STR_STRING))
endif
endstring;

2.12.11.4.9 security

securityExp ::=
"security" "(" guidDefinition ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_SECURITY op-codes.

Example

grayoutif NOT security(EFI_GUID);
text
help = STRING_TOKEN(STR_HELP),
text = STRING_TOKEN(STR_TEXT);
endif;

2.12.11.4.10 get

getExp ::=
"get" "(" vfrStorageVarId { "|" "flags" "=" vfrNumericFlags } ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_GET op-codes.
numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 255,
read get(MyData.Data1);
endnumeric;

2.12.11.5 constant

vfrExpressionConstant ::=
"TRUE"
| "FALSE" | "ONE"
| "ONES"
| "ZERO"
| "UNDEFINED"
| "VERSION"
| Number

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TRUE EFI_IFR_FALSE, EFI_IFR_ONE EFI_IFR_ONES, EFI_IFR_ZERO, EFI_IFR_UNDEFINED, or EFI_IFR_VERSION op-codes.

2.12.11.6 unary operators

vfrExpressionUnaryOp ::=
lengthExp
| bitwisenotExp
| question23refExp
| stringref2Exp
| toboolExp
| tostringExp
| unintExp
| toupperExp
| tolwerExp
| setExp

2.12.11.6.1 length

lengthExp ::=
"length" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_LENGTH op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 255,
default value = length(stringref(STRING_TOKEN(STR_STRING))),
endnumeric;

2.12.11.6.2 bitwisenot

bitwisenotExp ::=
"~" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_BITWISENOT op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 255,
default value = ~(length(stringref(STRING_TOKEN(STR_STRING)))),
endnumeric;

2.12.11.6.3 questionrefval

question23refExp ::=
"questionrefval"
"("
{
DevicePath "=" "STRING_TOKEN" "\(" S:Number "\)" ","
}
{
Uuid "=" guidDefinition[Guid] ","
}
vfrStatementExpression
")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_QUESTION_REF2 or EFI_IFR_QUESTION_REF3 op-codes.
numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 255,
default value = questionrefval(QuestionID),
endnumeric;

2.12.11.6.4 stringrefval

stringref2Exp ::=
"stringrefval" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_STRING_REF2 op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 255,
default value = length(stringrefval(STR_STRING)),
endnumeric;

2.12.11.6.5 boolval

toboolExp ::=
"boolval" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TO_BOOLEAN op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 255, default value = boolval(12),
endnumeric;

2.12.11.6.6 stringval

tostringExp ::=
"stringval" { "format" "=" Number "," }
"(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TO_STRING op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 255,
default value = length(stringval(format = 8, 12)),
endnumeric;

2.12.11.6.7 unintval

unintExp ::=
"unintval" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TO_UINT op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 255,
default value = unintval(12 * 3),
endnumeric;

2.12.11.6.8 toupper

toupperExp ::=
"toupper" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TO_UPPER op-codes.

Example

grayoutif length(toupper(stringref(STRING_TOKEN(STR_STRING))))==1;
string varid = MyData.String,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minsize = 6,
maxsize = 40,
endstring;
endif;

2.12.11.6.9 tolower

tolwerExp ::=
"tolower" "(" vfrStatementExpression ")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TO_LOWER op-codes.
grayoutif length(tolower(stringref(STRING_TOKEN(STR_STRING))))==2;
string varid = MyData.String,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minsize = 6,
maxsize = 40,
endstring;
endif;

2.12.11.6.10 set

setExp ::=
"set"
"("
vfrStorageVarId { "|" "flags" "=" vfrNumericFlags } ","
vfrStatementExpression
")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_SET op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 255,
write set(MyData.Data1,10);
endnumeric;

2.12.11.7 ternary operators

vfrExpressionTernaryOp ::=
conditionalExp
| findExp
| midExp
| tokenExp
| spanExp

2.12.11.7.1 cond

conditionalExp ::=
"cond"
"("
vfrStatementExpression1
"?"
vfrStatementExpression2
":"
vfrStatementExpression3
")"

BEHAVIORS AND RESTRICTIONS

If (Expr1) then x = Expr3 else Expr2
Generates EFI_IFR_CONDITIONAL op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 255,
default value = cond(2 == 1 ? 5 : 10),
endnumeric;

2.12.11.7.2 find

findExp ::=
"find"
"("
findFormat ( "|" findFormat )*
","
vfrStatementExpression
","
vfrStatementExpression
","
vfrStatementExpression
")"
findFormat ::=
"SENSITIVE"
| "INSENSITIVE"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_FIND op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 255,
default value =
find(INSENSITIVE, (stringref(STRING_TOKEN(STR_STRING1))),
(stringref(STRING_TOKEN(STR_STRING2))), 1),
endnumeric;

2.12.11.7.3 mid

midExp ::=
"mid"
"("
vfrStatementExpression
","
vfrStatementExpression
","
vfrStatementExpression
")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_MID op-codes.

Example

grayoutif length(mid(stringref(STRING_TOKEN(STR_STRING)),6,8))==1;
string varid = MyData.String,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minsize = 6,
maxsize = 40,
endstring;
endif;

2.12.11.7.4 tok

tokenExp ::=
"token"
"("
vfrStatementExpression
","
vfrStatementExpression
","
vfrStatementExpression
")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_TOKEN op-codes.

Example

grayoutif length(token(stringref(STRING_TOKEN(STR_STRING1)),
stringref(STRING_TOKEN(STR_STRING2)), 0)) == 2;
string varid = MyData.String,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minsize = 6,
maxsize = 40,
endstring;
endif;

2.12.11.7.5 span

spanExp ::=
"span"
"("
"flags" "=" spanFlags ( "|" spanFlags )*
","
vfrStatementExpression
","
vfrStatementExpression
","
vfrStatementExpression
")"
spanFlags ::=
Number
| "LAST_NON_MATCH"
| "FIRST_NON_MATCH"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_SPAN op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),
help = STRING_TOKEN(STR_HELP),
minimum = 0,
maximum = 255,
default value = span(flags = LAST_NON_MATCH,
stringref(STRING_TOKEN(STR_STRING1)),
stringref(STRING_TOKEN(STR_STRING2)),0),
endnumeric;

2.12.11.8 map

vfrExpressionMap ::=
"map"
"("
vfrStatementExpression
":"
(
vfrStatementExpression
","
vfrStatementExpression
";"
)*
")"

BEHAVIORS AND RESTRICTIONS

Generates EFI_IFR_MAP op-codes.

Example

numeric varid = MyData.Data,
prompt = STRING_TOKEN(STR_PROMPT),