[英]PHP: How are comments skipped?
好吧,如果我发表评论,它会在所有语言中被忽略,但是它们是如何被跳过的?
例:
// This is commented out
现在PHP是否读取整个注释以转到下一行或只读取//
?
该脚本被解析并拆分为令牌 。
实际上,您可以使用token_get_all()
在任何有效的PHP源代码上token_get_all()
,它使用PHP的本机标记器。
手册中的示例显示了如何处理注释:
<?php
$tokens = token_get_all('<?php echo; ?>'); /* => array(
array(T_OPEN_TAG, '<?php'),
array(T_ECHO, 'echo'),
';',
array(T_CLOSE_TAG, '?>') ); */
/* Note in the following example that the string is parsed as T_INLINE_HTML
rather than the otherwise expected T_COMMENT (T_ML_COMMENT in PHP <5).
This is because no open/close tags were used in the "code" provided.
This would be equivalent to putting a comment outside of <?php ?>
tags in a normal file. */
$tokens = token_get_all('/* comment */');
// => array(array(T_INLINE_HTML, '/* comment */'));
?>
编译时有一个标记化阶段。 在此阶段,它会看到//然后忽略所有行到行尾。 编译器可能会变得复杂,但在很大程度上是非常简单的。
你的问题没有意义。 读完'//'之后,它必须继续读取换行符才能找到它。 没有选择。 没有其他方法可以找到换行符。
从概念上讲,编译在逻辑上先解析几个阶段:
(1)基本上是指从左到右逐个字符地读取文件。 (2)意味着扔掉没有兴趣的东西,例如将多个换行符/空格序列折叠到一个空格中。 (3)意味着将剩下的东西组合成代币,例如标识符,关键字,文字,标点符号。
评论在(2)期间被筛选出来。 在现代编译器中,这一切都是由确定性自动机一次完成的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.