繁体   English   中英

PHP:如何跳过评论?

[英]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 */'));
?>

编译时有一个标记化阶段。 在此阶段,它会看到//然后忽略所有行到行尾。 编译器可能会变得复杂,但在很大程度上是非常简单的。

http://compilers.iecc.com/crenshaw/

你的问题没有意义。 读完'//'之后,它必须继续读取换行符才能找到它。 没有选择。 没有其他方法可以找到换行符。

从概念上讲,编译在逻辑上先解析几个阶段:

  1. 扫描。
  2. 筛选。
  3. 符号化。

(1)基本上是指从左到右逐个字符地读取文件。 (2)意味着扔掉没有兴趣的东西,例如将多个换行符/空格序列折叠到一个空格中。 (3)意味着将剩下的东西组合成代币,例如标识符,关键字,文字,标点符号。

评论在(2)期间被筛选出来。 在现代编译器中,这一切都是由确定性自动机一次完成的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM