语言语法
- 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解析器只允许其中的一个子集。