0

仕様でここで使用されている表記法が定義されている場所を見逃していたに違いありません。適切な例として、最初の 2 行を完全に解読すると非常に役立ちます。

Expr         ::=  (Bindings | id | `_') `=>' Expr
               |  Expr1

idがどこで定義されているか、この表記法の構文 (したがって解釈) については、私にはまったくわかりません。

ありがとう!

4

2 に答える 2

1

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ことを意味すると解釈されるものとします。::=(...)Bindingsid'_''=>'ExprExpr1

さらにくだけた言い方をすると、次のように言えます。

式 ( Expr) は、任意の有効なバインディング構文 (マジック_または通常の変数参照のいずれか、1 回以上、場合によっては型の割り当てを伴う)、変数参照、または単なるマジック_の後に矢印 ( =>) が続き、その後に任意の式が続きます。私たちは言語で許可します

于 2015-09-10T17:29:57.920 に答える