From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.20; helo=mga02.intel.com; envelope-from=yonghong.zhu@intel.com; receiver=edk2-devel@lists.01.org Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 39A6522393625 for ; Wed, 31 Jan 2018 14:52:30 -0800 (PST) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 31 Jan 2018 14:58:06 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.46,441,1511856000"; d="scan'208";a="27862098" Received: from shwdeopenpsi168.ccr.corp.intel.com ([10.239.158.129]) by orsmga001.jf.intel.com with ESMTP; 31 Jan 2018 14:58:04 -0800 From: Yonghong Zhu To: edk2-devel@lists.01.org Cc: Liming Gao , Michael Kinney , Kevin W Shaw Date: Thu, 1 Feb 2018 06:58:04 +0800 Message-Id: <1517439484-5104-1-git-send-email-yonghong.zhu@intel.com> X-Mailer: git-send-email 2.6.1.windows.1 Subject: [Patch] Expression spec: update format to support flexible Pcd format X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 31 Jan 2018 22:52:30 -0000 Cc: Liming Gao Cc: Michael Kinney Cc: Kevin W Shaw Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Yonghong Zhu --- 2_expression_overview.md | 13 +++++++------ 3_expression_format.md | 30 +++++++++++++++++++++++------- 2 files changed, 30 insertions(+), 13 deletions(-) diff --git a/2_expression_overview.md b/2_expression_overview.md index 34ceb97..2f3dffa 100644 --- a/2_expression_overview.md +++ b/2_expression_overview.md @@ -63,26 +63,27 @@ directives section do not apply. 5. Between the previous and next sequence, an object shall have its stored value modified at most once by the evaluation of an expression. 6. Some operators (the unary operator, ~, and the binary operators, `<<, >>`, &, | and ^ collectively described as bitwise operators) are required to have - operands that are integer (base10) or hexadecimal (base16) types. + operands that can be translated to integer (base10) or hexadecimal (base16) + types. -7. The unary arithmetic operators, +, - and ~ must have an operand that is an - integer (base10) or hexadecimal (base16) type, while the scalar unary - operators, ! and NOT, must have operands that are of type scalar. +7. The unary arithmetic operators, +, - and ~ must have an operand that can be + translated to an integer (base10) or hexadecimal (base16) type, while the + scalar unary operators, ! and NOT, must have operands that are of type scalar. 8. The Boolean values, False, FALSE and false have a numerical value of zero. The Boolean values, True, TRUE and true have a numerical value of one. 9. Tools may be required to translate the expression sequence into an expression format that is comprehended by the tool's native language. For example, a tool written in Python may require changing the exact syntax of an expression to a syntax that can be processed by Python's eval() function. -10. Multiplicative and additive operators require both operands to be - arithmetic in type. +10. Multiplicative and additive operators require both operands that can be + translated to arithmetic in type. 11. Relational and equality operators require both operands to be of the same type. Relational comparison on string literals and byte arrays must be performed comparing the byte values, left to right. The first pair of bytes (or a single extra byte) that is not equal will determine the result of the diff --git a/3_expression_format.md b/3_expression_format.md index 50b94c4..8a5c873 100644 --- a/3_expression_format.md +++ b/3_expression_format.md @@ -74,11 +74,11 @@ GRACEFULLY._ #### Prototype ```c ::= {} {} {} {} - {"(" ")"} {} + {"(" ")"} {} {} ::= {} {} ::= "$(" ")" ::= (A-Z) [(A-Z0-9_)]* ::= "(" [ ]* ")" ::= @@ -92,11 +92,13 @@ GRACEFULLY._ ::= {(0-9)} {(1-9) [(0-9)]*} ::= ::= []+ ::= (a-fA-F0-9) ::= {"0x"} {"0X"} - ::= {} {} + ::= "GUID(" ")" + ::= { } + {} {} Rhex2 ::= [] Rhex4 ::= [] [] Rhex2 Rhex8 ::= [] [] [] [] Rhex4 ::= Rghex8 "-" Rghex4 "-" Rghex4 "-" Rghex4 "-" Rghex12 Rghex2 ::= @@ -111,19 +113,33 @@ Rghex12 ::= Rghex8 ::= "{" []* ::= "{" []* ::= ::= ::= []* "}" []* "}" - ::= {} {} + ::= {} {} ::= "{" * "}" - ::= "{" * [ ]* "}" + ::= "{" * [] + [ [] ]* "}" + ::= {} {} {} {} + ::= "LABEL(" ")" + ::= "OFFSET_OF(" ")" ::= {} {"L" } + {} {"L" } ::= 0x22 + ::= 0x27 ::= []* + ::= []* ::= {} {} - ::= {0x20} {0x21} {(0x23 - 0x5B)} {(0x5D - 0x7E)} - ::= "\" {"n"} {"r"} {"t"} {"f"} {"b"} {"0"} {"\"} {} + ::= {0x21} {(0x23 - 0x26)} {(0x28 - 0x5B)} + {(0x5D - 0x7E)} {} + ::= "\" {"n"} {"r"} {"t"} {"f"} {"b"} {"0"} {"\"} + {} {} + ::= {} {} {} {} + ::= "UINT8(" ")" + ::= "UINT16(" ")" + ::= "UINT32(" ")" + ::= "UINT64(" ")" ::= {} {} ::= "." ::= {} { } ::= {} {} ::= {"+"} {"-"} {"~"} @@ -187,11 +203,11 @@ gUefiCpuPkgTokenSpaceGuid.PcdCpuLocalApicBaseAddress | !gCrownBayTokenSpaceGuid. This is the value of the MACRO assigned in a DEFINE statement. **Expressions** -If the "|" character is used in an expression, the expression must be +If the "|" or "||"character is used in an expression, the expression must be encapsulated by parenthesis. ## 3.2 Conditional Directive Expressions Conditional directive statements are defined in the EDK II Platform Description -- 2.6.1.windows.1