语言语法
- parser grammar SolidityParser
Solidity是一种静态类型、面向契约的高级语言,用于在以太坊平台上实现智能合约。
- rule source-unit
在顶层,坚固性允许编译指示、导入指令以及合同、接口、库、结构、枚举和常量的定义。
- rule import-directive
导入指令从不同的文件导入标识符。
- rule path
要导入的文件的路径。
- rule symbol-aliases
要导入的符号的别名列表。
- rule contract-definition
合同的顶层定义。
- rule interface-definition
接口的顶层定义。
- rule library-definition
库的顶层定义。
- rule inheritance-specifier
协定和接口的继承说明符。可以选择提供基构造函数参数。
- rule contract-body-element
可以在契约、接口和库中使用的声明。
请注意,接口和库不能包含构造函数,接口不能包含状态变量,库不能包含回退、接收函数或非常量状态变量。
- rule call-argument-list
调用函数或类似的可调用对象时的参数。参数要么以逗号分隔的列表形式给出,要么作为命名参数的映射。
- rule identifier-path
限定名称。
- rule modifier-invocation
调用修饰符。如果修饰符不带参数,则可以完全跳过参数列表(包括左括号和右括号)。
- rule visibility
函数和函数类型的可见性。
- rule parameter-list
参数列表,如函数参数或返回值。
- rule constructor-definition
构造函数的定义。必须始终提供一个实现。请注意,不推荐指定内部或公共可见性。
- rule state-mutability
函数类型的状态可变性。如果未指定可变性,则假定默认可变性为“不可支付”。
- rule override-specifier
用于函数、修饰符或状态变量的重写说明符。如果在被重写的多个基本契约中存在不明确的声明,则必须给出一个完整的基本契约列表。
- rule function-definition
合同、库和接口函数的定义。根据定义函数的上下文,可能会应用进一步的限制,例如接口中的函数必须是未实现的,即不能包含主体块。
- rule modifier-definition
修饰词的定义。请注意,在修饰符的主体块中,下划线不能用作标识符,而是用作应用修饰符的函数体的占位符语句。
- rule fallback-function-definition
特殊回退函数的定义。
- rule receive-function-definition
特殊接收函数的定义。
- 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 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
具有可选init、condition和post循环部分的For语句。
- rule while-statement
- rule do-while-statement
- rule continue-statement
继续陈述。只允许在for、while或do while循环内。
- rule break-statement
中断声明。只允许在for、while或do while循环内。
- rule try-statement
try语句。包含的表达式必须是外部函数调用或协定创建。
- rule catch-clause
try语句的catch子句。
- rule return-statement
- rule emit-statement
一个emit语句。包含的表达式需要引用事件。
- rule revert-statement
还原声明。包含的表达式需要引用错误。
- rule assembly-statement
内联装配块。内联汇编块的内容使用单独的scanner/lexer,也就是说,内联汇编块中的关键字和允许的标识符集是不同的。
- 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循环中有效。leave语句只在函数体中有效。
- 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语句只能由一个default case(已弃用)或一个或多个非default case(可选地后跟一个default case)组成。
- 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转义符\uxxx和两个数字的十六进制转义序列\xXX。
- rule unicode-string-literal
允许任意unicode字符的单引号字符串。
- rule hex-string
十六进制字符串需要由偶数个可以使用下划线分组的十六进制数字组成。
- rule hex-number
十六进制数由一个前缀和一个可以用下划线分隔的任意数目的十六进制数字组成。
- rule decimal-number
十进制数文本由十进制数字组成,可以用下划线分隔,还可以选择正指数或负指数。如果数字包含小数点,则文本具有定点类型。
- rule identifier
实数形式的标识符必须以字母、美元符号或下划线开头,并且可以在第一个符号之后另外包含数字。
- 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
Pragma令牌。可以包含除分号以外的任何类型的符号。注意,目前solidity解析器只允许其中的一个子集。