29

私は C++ が と のすべてのあいまいさを持つ「奇妙な」ものだと思っていましたが、パーサーを実装しよう<とした後、ジェネリック型を使用するほぼすべての言語>を壊す例を見つけたと思います:<>

f(g<h, i>(j));

これは、構文的にジェネリック メソッド呼び出し ( ) として解釈されるか、2 つの比較の結果をg与えるものとして解釈される可能性があります。f

そのような言語 (特に、LALR(1) で解析可能と考えられていたJava ) は、この構文上のあいまいさをどのように回避するのでしょうか?

これに対処するための非ハッキー/コンテキストフリーの方法を想像することはできません.LALR(1)解析可能は言うまでもなく、そのような言語がコンテキストフリーになる方法に困惑しています...

(GLR パーサーでさえ、コンテキストなしでこのステートメントの単一の解析を返すことはできないことに注意してください!!)

4

2 に答える 2

4

Javaでのジェネリックメソッド呼び出し<h,i>g(j)は、あいまいさがないので:)

于 2013-01-19T16:25:06.837 に答える
2

これに対処する非ハッキー/コンテキストフリーの方法を想像することはできません.LALR(1)解析はもちろんのこと、そのような言語がコンテキストフリーになる方法に困惑しています...

答えは、そうではないということです (少なくとも Java と C++ ではありません。私は C# についてほとんど知りません)。リンク先のJava文法は、ジェネリックが導入されるずっと前の1996年にさかのぼります。

詳細については、「C# と Java の文法は LALR(x) ですか?」を参照してください。

于 2013-01-19T09:13:53.097 に答える