言語の文法
- parser grammar SolidityParser
Solidityは、Ethereumプラットフォーム上でスマートコントラクトを実装するための、静的型付けでコントラクト指向の高水準言語です。
- rule source-unit
Solidityでは、プラグマ、importディレクティブ、コントラクト、インターフェース、ライブラリ、構造体、列挙型、定数などの定義が可能です。
- rule import-directive
importディレクティブは、異なるファイルから識別子をインポートします。
- rule path
インポートするファイルのパス。
- rule symbol-aliases
インポートするシンボルのエイリアスのリスト。
- rule contract-definition
コントラクトのトップレベルの定義。
- rule interface-definition
インターフェースのトップレベルの定義。
- rule library-definition
ライブラリのトップレベルの定義。
- rule inheritance-specifier
コントラクトとインターフェースの継承指定子です。 オプションでベースコンストラクタの引数を与えることができます。
- rule contract-body-element
コントラクト、インターフェース、ライブラリで使用可能な宣言。
インターフェースとライブラリはコンストラクタを含むことができず、インターフェースは状態変数を含むことができず、ライブラリはフォールバック、receive関数、非定数の状態変数を含むことができないことに注意してください。
- rule call-argument-list
関数や類似の呼び出し可能なオブジェクトを呼び出す際の引数。 引数はカンマで区切られたリストか、名前付き引数のマップとして与えられます。
- rule identifier-path
適格な名称。
- rule modifier-invocation
モディファイアの呼び出し。 モディファイアが引数を取らない場合、引数リストは完全にスキップすることができます(開閉括弧を含む)。
- rule visibility
関数と関数型のビジビリティ。
- rule parameter-list
関数の引数や戻り値などのパラメータのリスト。
- rule constructor-definition
コンストラクタの定義。 常に実装を提供する必要があります。 internalあるいはpublicの指定は非推奨であることに注意してください。
- rule state-mutability
関数型に対するミュータビリティの指定。 ミュータビリティが指定されていない場合は、デフォルトのミュータビリティ「non-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
enumの定義。ソースユニット、コントラクト、ライブラリ、インターフェースのトップレベルで定義できます。
- 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
Operators that users are allowed to implement for some types with using for.
- rule using-directive
Using directive to attach library functions and free functions to types. Can occur within contracts and libraries and at the file level.
- rule type-name
型名には、基本型、関数型、マッピング型、ユーザ定義型(コントラクトや構造体など)、配列型があります。
- rule elementary-type-name
- rule function-type-name
- rule variable-declaration
単一の変数の宣言。
- rule data-location
- rule expression
複合式。 インデックスアクセス、インデックス範囲アクセス、メンバーアクセス、関数呼び出し(関数呼び出しオプション付き)、型変換、単項式または二項式、比較または代入、三項式、new式(コントラクトの作成または動的メモリ配列の割り当て)、タプル、インライン配列、一次式(識別子、リテラル、型名など)であることが可能です。
- rule tuple-expression
- rule inline-array-expression
インライン配列式は、含まれる式の共通型の静的な大きさの配列を示します。
- rule identifier
通常の非キーワード識別子以外に、'from' や 'error' などのキーワードも識別子として使用することができます。
- rule literal
- rule literal-with-sub-denomination
- rule boolean-literal
- rule string-literal
完全な文字列リテラルは、1つまたは複数の連続した引用符で囲まれた文字列で構成されています。
- rule hex-string-literal
1つまたは複数の連続した16進文字列で構成される完全な16進文字列リテラル。
- rule unicode-string-literal
1つまたは複数の連続したUnicode文字列で構成される完全なUnicode文字列リテラル。
- rule number-literal
数値リテラルは10進数または16進数で、単位は任意です。
- rule block
波括弧で囲まれた文のブロック。独自のスコープを持ちます。
- rule unchecked-block
- rule statement
- rule if-statement
if文。else部はオプション。
- rule for-statement
for文。init、condition、post-loop部はオプション。
- 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
emit文。含まれる式は、イベントを参照する必要があります。
- rule revert-statement
revert文。含まれる式は、エラーを参照する必要があります。
- rule assembly-statement
インラインアセンブリブロック。 インラインアセンブリブロックのコンテンツは、別の字句解析器(scanner/lexer)を使用します。 つまり、インラインアセンブリブロックの内部では、キーワードと許可された識別子のセットが異なります。
- rule assembly-flags
Assembly flags. Comma-separated list of double-quoted strings as 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ループ内でのみ有効です。 leave文は、関数のボディの中でのみ有効です。
- rule yul-block
- rule yul-variable-declaration
1つまたは複数のYul変数の宣言で、初期値は任意。 複数の変数が宣言されている場合、初期値として有効なのは関数呼び出しのみです。
- rule yul-assignment
どんな式でも1つのYul変数に代入できますが、複数代入する場合は右辺に関数呼び出しが必要です。
- rule yul-if-statement
- rule yul-for-statement
- rule yul-switch-statement
Yul switch文は、default-caseのみ(非推奨)、または1つ以上のnon-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 sub-denomination
数値の単位表記。
- 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
エスケープシーケンス。 一般的な1文字のエスケープシーケンスとは別に、改行もエスケープできます。 また、4桁の16進数のUnicodeエスケープ uXXXX と2桁の16進数のエスケープシーケンス xXX が使用可能です。
- rule unicode-string-literal
任意のUnicode文字を使用できるシングルクォートで囲まれた文字列リテラル。
- rule hex-string
16進文字列は、偶数長の16進数の数字で構成され、アンダースコアを用いてグループ化できる必要があります。
- rule hex-number
16進数は、プレフィックスと、アンダースコアで区切られた任意の数の16進数の数字で構成されています。
- rule decimal-number
10進数リテラルは、アンダースコアで区切られた10進数の数字と、オプションで正または負の指数で構成されています。 桁に小数点が含まれている場合、リテラルは固定小数点型となります。
- rule identifier
Solidityの識別子は、アルファベット、ドル記号、アンダースコアで始まる必要があり、最初の記号の後であれば数字を含むことができます。
- rule yul-evm-builtin
EVMのオペコードに対応するYulのビルトイン関数。
- rule yul-identifier
Yul識別子は、アルファベット、ドル記号、アンダースコア、数字で構成されますが、数字で始めることはできません。 インラインアセンブリでは、ユーザー定義識別子にドットを使用することはできません。 ドットを含む識別子で構成される式については、yulPathを参照してください。
- rule yul-hex-number
Yulの16進数リテラルは、プレフィックスと1桁以上の16進数で構成されています。
- rule yul-decimal-number
Yulの10進数リテラルは、0または先頭の0を除いた任意の10進数の数字列です。
- rule yul-string-literal
Yulの文字列リテラルは、1つ以上のダブルクォートまたはシングルクォートで囲まれた文字列からなり、それぞれエスケープされていない改行やエスケープされていないダブルクォートやシングルクォート以外のエスケープシーケンスや印字可能な文字が含まれることがある。
- rule pragma-token
Pragmaトークン。 セミコロン以外のあらゆる種類の記号を含むことができます。 現在、Solidityパーサーはこのサブセットしか許さないことに注意してください。