Page 282 - 《软件学报》2021年第6期
P. 282
1856 Journal of Software 软件学报 Vol.32, No.6, June 2021
结构体、状态变量与函数.
1 Start::=Procedure
2 Procedure::=〈CONTRACT〉〈IDENTIFIER〉〈LB〉(ContractBlock)*〈RB〉
3 ContractBlock::=Struct
4 |Statedef
5 |Method
6 Struct::=〈STRUCT〉〈IDENTIFIER〉〈LB〉(Type〈IDENTIFIER〉〈SEMICOLON〉)*〈RB〉
7 Type::=〈UINT〉(〈LM〉〈RM〉)?
8 |〈ADDRESS〉(〈LM〉〈RM〉)?
9 |〈BOOL〉(〈LM〉〈RM〉)?
10 |〈MAPPING〉〈LC〉Type“=>”Type〈RC〉(〈LM〉〈RM〉)?
11 |〈IDENTIFIER〉(〈LM〉〈RM〉)?
12 Statedef::=Type(Limit)?〈IDENTIFIER〉(〈ASSIGNMENT〉Expression)?〈SEMICOLON〉
13 Method::=〈FUNCTION〉〈IDENTIFIER〉〈LC〉(Typ e〈IDENTIFIER〉(〈DOT〉Type〈IDENTIFIER〉)*)?
14 〈RC〉(Limit)?(FUNReturn)?〈LB〉(Statement)*〈RB〉
15 Limit::=〈PRIVATE〉
16 |〈PUBLIC〉
17 |〈INTERNAL〉
18 FUNReturn::=〈RETURNS〉〈LC〉Type(〈IDENTIFIER〉)?(〈DOT〉Type(〈IDENTIFIER〉)?)*〈RC〉
Fig.7 BNF definitions of smart contracts
图 7 智能合约的 BNF 定义
其次,智能合约源程序由各种基本语句组成,主要包括声明语句、表达式语句、条件判断语句、循环语句、
转向语句、复合语句(也称语句块)以及空语句,其 BNF 定义如图 8 所示.非终结符 Statement 表示基本语句,IF,
While,For 分别定义了条件判断语句与循环语句,Block 定义了复合语句,Statedef 定义了声明语句,return 与 throw
定义了两个跳转语句.
1 Statement::=IF
2 |While
3 |For
4 |Block
5 |〈RETURN〉(Expression)?〈SEMICOLON〉
6 |〈THROW〉〈SEMICOLON〉
7 |Expression〈SEMICOLON〉
8 |Statedef
9 IF::=〈IF〉〈LC〉Expression〈RC〉Statement(〈ELSE〉Statement)?
10 For::=〈FOR〉〈LC〉Statedef Expression〈SEMICOLON〉Expression〈RC〉Statement
11 While::=〈WHILE〉〈LC〉Expression〈RC〉Statement
12 Block::=〈LB〉(Statement)*〈RB〉
Fig.8 BNF definitions of basic statements
图 8 基本语句的 BNF 定义
表达式结构包含了程序中的各类运算与操作,其 BNF 最为复杂,如图 9 所示.第 1 行中的 Literal 表示可能出
现的字面值,包括变量、结构体、数组、整型变量和布尔变量等;第 2 行的 Unop 表示单目运算;第 3 行~第 8 行
的 Binop 表示双目运算符:Assign 表示赋值运算符,PLUS_MINUS 表示自增自减运算符.除此之外,还定义了
[⋅],(⋅),.操作,可以描述 Solidity 中成员函数的调用.
1 Expression::=Literal Expression_left
2 |Unop Expression Expression_left
3 Expression_left::=Binop Expression Expression_left
4 |Assign Expression Expression_left
5 |“[”Expression“]”Expression_left
6 |“(”(Expression“,”)*“)”Expression_left
7 |“.”〈IDENTIFIER〉Expression_left
8 |PLUS MINUS Expression left
Fig.9 BNF definitions of expression statements
图 9 表达式语句的 BNF 定义