如果我在某个地方添加了注释,那么这些注释会被所有语言跳过,但是它们是如何跳过的以及读取的内容是什么?
示例:
// This is commented out
现在PHP是读整个注释才会换行还是只读取
//
之后的内容就会换行?如果我在某个地方添加了注释,那么这些注释会被所有语言跳过,但是它们是如何跳过的以及读取的内容是什么?
示例:
// This is commented out
//
之后的内容就会换行?token_get_all()
在任何有效的PHP源代码上自行尝试,它使用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)阶段被筛除。在现代编译器中,这一切都由确定性自动机一次性完成。