Die*_*oDD 14 html php java comments nested
在我使用的大多数语言中,你根本无法嵌套块注释,因为"关闭"注释sintaxis的第一个发生关闭了注释,即使它只是一个"内部"注释.
例如,在HTML中
<!-- outer comment
<p>hello</p><!-- inner comment <p>world</p> -->
<p>this should BE commented</p>
-->
Run Code Online (Sandbox Code Playgroud)
在这种情况下,外部注释结束于第一个-->而不是相应的最后一个,导致最后一个<p>打印,而不应该打印.
对于/* */用于块注释的语言也是如此,例如java,php,css,javascript等.
但我的问题是为什么会这样?为什么在设计上不允许这样做?我提到"按设计",因为我真的怀疑是因为解析问题,我猜解析器完全有能力跟踪开放/*s并用相应的结束关闭*/评论但是他们只是某种程度上决定它不是一个好主意.
我已经知道,解决方法是以某种方式更改内部结束注释,以避免它们关闭,并且只留下最后一个结束注释.例如,改变-->s和*/s的内部- ->和* /s.但这显然不方便,当您只想丢弃代码块以进行调试时很难做到.(其他技术是将所有内容嵌套在if(false){}块中,但这不是重点.
那么,我想知道的是为什么几种现代语言通常不允许嵌套注释?必须有一个很好的理由,除了"别人不做,我们也不会"对吧?
另外,是否还有其他(不那么模糊)的语言允许嵌套块注释?
Kon*_*lph 16
原因是历史性的,与编译器的体系结构有关.
为了提高效率,大多数编译器传统上分两个阶段解析源代码:词法分析和令牌流的实际解析(由所述词法分析产生).词法分析是识别单个标记的部分,例如关键字,字符串,数字文字和注释.
再次出于效率的原因,词法分析传统上通过有限状态机实现.这些有限状态机碰巧识别(=处理)常规语言,完全适合上述令牌.但是,它无法识别嵌套构造 - 这将需要更强大的机器(由堆栈增强).
因此,不允许嵌套注释仅仅是为了方便性能而做出的决定,后来的语言基本上采用了该惯例.
另外,是否还有其他(不那么模糊)的语言允许嵌套块注释?
有一些.评论已经提到了Haskell和Pascal.其他语言是D和F#.
| 归档时间: |
|
| 查看次数: |
2877 次 |
| 最近记录: |