语法
- parser grammar SolidityParser
Solidity是一种静态类型的,面向合约的高级语言,用于在Ethereum平台上实现智能合约。
- rule source-unit
在顶层,Solidity允许pragmas,导入语句, 以及合约,接口,库,结构,枚举和常量的定义。
- rule import-directive
导入指令 从不同的文件中导入标识符。
- rule path
要导入的文件的路径。
- rule symbol-aliases
要导入的符号的别名列表。
- rule contract-definition
合约的顶层定义。
- rule interface-definition
接口的顶层定义。
- rule library-definition
一个库合约的顶层定义。
- rule inheritance-specifier
合约和接口的继承指定器。 可以有选择地提供基本构造函数参数。
- rule contract-body-element
可以在合约,接口和库中使用的声明。
注意,接口和库不能包含构造函数,接口不能包含状态变量, 库不能包含fallback,receive函数和非恒定状态变量。
- rule call-argument-list
调用一个函数或类似的可调用对象时的参数。 参数要么以逗号分隔的列表形式给出,要么以命名参数的映射形式给出。
- rule identifier-path
合格的名称。
- rule modifier-invocation
对一个修改器的调用。如果修改器不需要参数,参数列表可以完全跳过(包括开头和结尾的括号)。
- rule visibility
函数和函数类型的可见性。
- rule parameter-list
一个参数的列表,如函数参数或返回值。
- rule constructor-definition
一个构造函数的定义。 必须始终提供一个实现。 请注意,指定内部或公共可见性已被废弃。
- rule state-mutability
函数类型的状态可变性。 如果没有指定可变性,则假定默认的可变性为 “非payable“。
- rule override-specifier
- 一个用于函数,修改器或状态变量的重载指定符。
如果在被重载的几个基础合约中存在不明确的声明, 必须给出一个完整的基础合约清单。
- rule function-definition
合约,库和接口功能的定义。 根据定义函数的上下文,可能会有进一步的限制。 例如,接口中的函数必须是未实现的,也就是说,不能包含主体块。
- rule modifier-definition
修改器的定义。 注意,在修改器的主体块中,下划线不能作为标识符使用, 而是作为占位符语句,用于修改器所应用的函数主体。
- rule fallback-function-definition
特殊的fallback函数的定义。
- rule receive-function-definition
特殊的receive函数的定义。
- rule struct-definition
结构体的定义。可以出现在源代码单元的顶层,也可以出现在合约,库或接口中。
- rule struct-member
一个命名的结构体成员的声明。
- rule enum-definition
一个枚举的定义。可以出现在源代码单元的顶层,也可以出现在合约,库或接口中。
- rule user-defined-value-type-definition
用户自定义的值类型的定义。可以出现在源代码单元的顶层,也可以出现在合约,库或接口中。
- rule state-variable-declaration
一个状态变量的声明。
- rule constant-variable-declaration
一个常量变量的声明。
- rule event-parameter
一个事件类型的参数。
- rule event-definition
一个事件类型的定义。可以发生在合约,库或接口中。
- rule error-parameter
一个错误类型的参数。
- rule error-definition
错误类型定义。
- rule user-definable-operator
用户可以通过 using for 为某些类型实现的操作符。
- rule using-directive
使用指令将库函数和自由函数附加到类型上。 可以在合同和库中以及文件层面中出现。
- rule type-name
一个类型名称可以是一个基本类型,一个函数类型,一个映射类型, 一个用户定义的类型(如合约类型或结构体类型)或一个数组类型。
- rule elementary-type-name
- rule function-type-name
- rule variable-declaration
单一变量的声明。
- rule data-location
- rule expression
复杂的表达式。 可以是一个索引访问,一个索引范围访问,一个成员访问,一个函数调用(有可选的函数调用选项), 一个类型转换,一个单数或双数表达式,一个比较或赋值,一个三元表达式, 一个新的表达式(即一个合约的创建或动态内存数组的分配), 一个元组,一个内联数组或一个主要表达式(即一个标识符,字面意思或类型名)。
- rule tuple-expression
- rule inline-array-expression
内联数组表达式表示一个静态大小的数组,它是所含表达式的共同类型。
- rule identifier
除了常规的非关键字标识符,一些关键字如 ‘from‘ 和 ‘error‘ 也可以作为标识符。
- rule literal
- rule boolean-literal
- rule string-literal
一个完整的字符串字面量由一个或几个连续的引号字符串组成。
- rule hex-string-literal
一个完整的十六进制字符串字面量由一个或几个连续的十六进制字符串组成。
- rule unicode-string-literal
一个完整的unicode字符串字面量由一个或几个连续的unicode字符串组成。
- rule number-literal
数字字面量可以是带可选单位的十进制或十六进制数字。
- rule block
带花括号的语句块。可以打开自己的作用域。
- rule unchecked-block
- rule statement
- rule if-statement
带有可选的else部分的If语句。
- rule for-statement
带有可选的初始值,循环条件和循环语句部分的For语句。
- rule while-statement
- rule do-while-statement
- rule continue-statement
一个continue语句。只允许在for、while或do-while循环中使用。
- rule break-statement
一个break语句。只允许在for,while或do-while循环中使用。
- rule try-statement
一个try语句。包含的表达式需要是一个外部函数调用或合约创建。
- rule catch-clause
Try语句的catch子句。
- rule return-statement
- rule emit-statement
一个发射语句。包含的表达式需要引用一个事件。
- rule revert-statement
一个恢复语句。包含的表达式需要指向一个错误。
- rule assembly-statement
一个内联汇编代码块。 内联汇编块的内容使用一个单独的扫描器/读取器,也就是说,内联汇编块内的关键字和允许的标识符集是不同的。
- rule assembly-flags
内联标志。 逗号分隔的双引号字符串列表作为标志。
- rule variable-declaration-tuple
在变量声明中使用的变量名元组。 可能包含空字段。
- rule variable-declaration-statement
一个变量的声明语句。 单个变量可以不带初始值声明,而变量的元组只能用初始值声明。
- rule expression-statement
- rule mapping-type
- rule mapping-key-type
只有基本类型或用户定义的类型可以作为映射类型的键值。
- rule yul-statement
内联汇编块中的Yul语句。 continue 和 break 语句只在for循环中有效。 离开语句只在函数体内有效。
- rule yul-block
- rule yul-variable-declaration
声明一个或多个具有可选的初始值的Yul变量。 如果声明了多个变量,只有一个函数调用是有效的初始值。
- rule yul-assignment
任何表达式都可以分配给一个Yul变量, 而多分配则需要在右侧调用一个函数。
- rule yul-if-statement
- rule yul-for-statement
- rule yul-switch-statement
Yul switch语句可以只包括一个默认情况(已废弃) 或一个或多个非默认情况,可选择紧跟一个默认情况。
- rule yul-function-definition
- rule yul-path
虽然只有不带点的标识符可以在内联汇编中声明, 但含有点的路径可以指内联汇编块之外的声明。
- rule yul-function-call
对带有返回值的函数的调用只能作为赋值或变量声明的右侧出现。
- rule yul-boolean
- rule yul-literal
- rule yul-expression
- lexer grammar SolidityLexer
- rule fixed-bytes
固定长度的字节类型。
- rule number-unit
数字的单位计价。
- rule signed-integer-type
有符号的整数类型。 int是int256的一个别名。
- rule unsigned-integer-type
无符号整数类型。 uint是uint256的一个别名。
- rule non-empty-string-literal
一个非空的带引号的字符串字面量,限制为可打印的字符。
- rule empty-string-literal
一个空的字符串字面量
- rule single-quoted-printable
除单引号或反斜线外的任何可打印字符。
- rule double-quoted-printable
除双引号或反斜线外的任何可打印的字符。
- rule escape-sequence
转义序列。 除了常见的单字符转义序列外,还可以转义换行, 以及允许四个十六进制数字的unicode转义\uXXXX和两个十六进制数字的转义序列\xXX。
- rule unicode-string-literal
单引号字符串字面量,允许任意的unicode字符。
- rule hex-string
十六进制字符串需要包含偶数个十六进制数字,可以使用下划线分组。
- rule hex-number
十六进制数字由前缀和可以用下划线分隔的任意数量的十六进制数字组成。
- rule decimal-number
一个十进制数字的字面量由十进制数字组成,可以用下划线和一个可选的正负指数来分隔。 如果这些数字包含一个小数点,则该数字具有定点类型。
- rule identifier
solidity中的标识符必须以字母,美元符号或下划线开头,并且可以在第一个符号之后再包含数字。
- rule yul-evm-builtin
EVM Yul语言的内置函数。
- rule yul-identifier
Yul标识符由字母,美元符号,下划线和数字组成,但不能以数字开头。 在内联程序中,用户定义的标识符中不能有圆点。相反,对于由带点的标识符组成的表达式,请参阅yulPath。
- rule yul-hex-number
Yul中的十六进制字由一个前缀和一个或多个十六进制数字组成。
- rule yul-decimal-number
Yul中的小数字面量可以是零或任何不含前导零的小数位序列。
- rule yul-string-literal
Yul中的字符串字面量由一个或多个双引号或单引号字符串组成, 这些字符串可能包含转义序列和可打印字符 未转义的换行符或未转义的双引号或单引号除外。
- rule pragma-token
编译指示令牌。可以包含除分号以外的任何类型的符号。 注意,目前solidity解析器只允许它的一个子集。