生成規則の略記
ECMAScriptには素直に生成規則を書き下すと煩雑になる構文がある
複数の構成要素を省略できる構文(例: for文)
「Aを省略した生成規則」「Bを省略した生成規則」「AとBを省略した生成規則」…と列挙していくのはつらい
バリエーションがいくつもある構文(例: 関数のbody)
code:example.js
function x() { /* 普通の関数 */ }
async function x() {
/* 基本的には普通の関数と同じだが、async関数ではawaitがキーワードになる。 */
}
function* x() {
/* generator関数ではyieldがキーワードになる。 */
}
このような構文定義を簡潔に記述するための略記が用意されている
下付き文字のopt
その記号が省略可能であることを示す
$ Initializer_{\rm{opt}}
→Initializerが省略可能
for文の定義とかで使われている
下付き文字の[parameters]
その非終端記号がパラメータを取ることを示す
$ StatementList _{\lbrack \rm{Return, In} \rbrack}
→展開すると
StatementList
StatementList_Return
StatementList_In
StatementList_Return_In
not all of which are necessarily referenced in a complete grammar.
定義はあるけど他から参照されないこともあるということだろうかyebis0942.icon
右辺にある下付き文字接尾辞の[+parameter]
$ ExpressionStatement _{\lbrack \rm{+In} \rbrack}
→展開すると
ExpressionStatement_In
右辺にある下付き文字接尾辞の[~parameter]
$ ExpressionStatement _{\lbrack \rm{〜 In} \rbrack}
→展開すると
ExpressionStatement
右辺にある下付き文字接尾辞の [?parameter]
VariableDecalration[In]:
BindingIdentifier Initializer[?In]
→展開すると
VariableDecalration:
BindingIdentifier Initializer
VariableDecalration_In:
BindingIdentifier Initializer_In
右辺の選択肢 (a right-hand side alternative) の前にある [+In] は「左辺に_Inがついているときだけこの選択肢が現れる」
Hoge[In]:
[+In] Fuga
Foo
→
Hoge:
Foo
Hoge_In:
Fuga
Foo
右辺の選択肢の前にある[~In]は「左辺に_Inがついていないときだけこの選択肢が現れる」