仕様でここで使用されている表記法が定義されている場所を見逃していたに違いありません。適切な例として、最初の 2 行を完全に解読すると非常に役立ちます。
Expr ::= (Bindings | id | `_') `=>' Expr
| Expr1
id
がどこで定義されているか、この表記法の構文 (したがって解釈) については、私にはまったくわかりません。
ありがとう!
id
は語彙文法から来ています。簡潔に言うと、次のとおりです。
upper ::= ‘A’ | … | ‘Z’ | ‘$’ | ‘_’ // and Unicode category Lu
lower ::= ‘a’ | … | ‘z’ // and Unicode category Ll
letter ::= upper | lower // and Unicode categories Lo, Lt, Nl
digit ::= ‘0’ | … | ‘9’
opchar ::= // printableChar not matched by (whiteSpace | upper | lower |
// letter | digit | paren | delim | opchar | Unicode_Sm | Unicode_So)
op ::= opchar {opchar}
varid ::= lower idrest
plainid ::= upper idrest
| varid
| op
id ::= plainid
| ‘`’ stringLiteral ‘`’
idrest ::= {letter | digit} [‘_’ op]
Bindings
文脈自由構文のさらに下の方で定義されていますが、第 2 章で定義されています。
Scala の名前は、まとめてエンティティと呼ばれる型、値、メソッド、およびクラスを識別します。名前は、まとめてバインディングと呼ばれるローカルの定義と宣言、継承、インポート句、またはパッケージ句によって導入されます。
非公式の言葉で:
Expr ::= (Bindings | id | `_') `=>' Expr
| Expr1
次のように記述できます。
anは、 ( ) 、 an 、またはリテラル アンダースコア文字 ( ) のいずれかの後に、等号および右山かっこ文字 ( ) が続き、その後に anまたは an のいずれかが続く
Expr
ことを意味すると解釈されるものとします。::=
(...)
Bindings
id
'_'
'=>'
Expr
Expr1
さらにくだけた言い方をすると、次のように言えます。
式 (
Expr
) は、任意の有効なバインディング構文 (マジック_
または通常の変数参照のいずれか、1 回以上、場合によっては型の割り当てを伴う)、変数参照、または単なるマジック_
の後に矢印 (=>
) が続き、その後に任意の式が続きます。私たちは言語で許可します