私が使用するほとんどの言語では、ブロック コメントをネストすることはできません。これは、「閉じる」コメント構文が最初に出現すると、それが「内側」のコメントであってもコメントが閉じられるためです。
たとえば、HTML では
<!-- outer comment
<p>hello</p><!-- inner comment <p>world</p> -->
<p>this should BE commented</p>
-->
この場合、外側のコメントは-->
、対応する最後のコメントではなく最初のコメントで終了し、最後のコメントが出力さ<p>
れるべきではないときに出力されます。
/* */
java、php、css、javascript などのブロック コメントを使用する言語でも同じことが起こります。
しかし、私の質問は、なぜそうなのかということです。設計上、許可されないのはなぜですか。「設計による」と言及したのは、解析の問題が原因であるとは思えないためです。パーサーは、オープニングを完全に追跡/*
し、対応するクロージングでコメントを閉じることができると思いますが*/
、どういうわけか、それは良い考えではないと判断しました.
これの回避策は、内部の閉じコメントを何らかの方法で変更し、それらが閉じないようにし、最後の閉じコメントのみを残すことであることをすでに知っています。たとえば、 sおよびs の内部-->
s および*/
s を変更します。しかし、これは明らかに便利ではなく、デバッグ目的でコードのブロックを破棄するだけの場合は困難です。(他のテクニックは、すべてをブロックに入れ子にすることですが、それはここでは重要ではありません。- ->
* /
if(false){}
それで、私が知りたいのは、ネストされたコメントが一般的にいくつかの現代言語で許可されていないのはなぜですか? 「他の人もやらないし、自分たちもやらない」以外にちゃんとした理由があるはずですよね?
さらに、入れ子になったブロック コメントを許可する他の (あまり目立たない) 言語はありますか?