次の Swift 式を検討してください
println(Generic<Foo, Bar>(1))
Generic<Foo, Bar>
通常、これは、引数を持つコンストラクターへの一般的な呼び出しとして読み取られます(1)
。
println( Generic<Foo,Bar>(1) )
ただし、トークンを少し並べ替えると、2 つの個別の比較を表すこともできます。たとえば、Generic
とFoo
が不適切な名前の数値変数である場合です。
println(Generic < Foo, Bar > (1))
// or, with proper parenthesis
println((Generic < Foo), (Bar > 1))
ここで観察できることは、このようなジェネリック コンストラクターを使用した式は非常に曖昧であり、人間にとっても曖昧さを解消するのは容易ではないということです。ここでの問題は、Swift にはコンストラクターのキーワードがないnew
ため、場合によってはメソッド呼び出しと演算子があいまいになることです。したがって、Swift コンパイラ (パーサー) が上記の式をどのように曖昧さをなくすかに興味があります。構文解析の方法はコンテキスト (型、変数、関数) に依存しますか、それともパーサーによって解決できますか?