Хорошо, если я что-то прокомментирую, он пропущен на всех языках, но как они пропущены и что читается?
Пример:
// This is commented out
Теперь PHP читает весь комментарий, чтобы перейти к следующим строкам или просто читает //
?
Ваш вопрос не имеет смысла. Прочитав «//», он должен продолжить чтение в новой строке, чтобы найти его. У этого нет выбора. Другого способа найти новую строку нет.
Концептуально компиляция имеет несколько фаз, логически до разбора:
(1) в основном означает чтение символа файла символом слева направо. (2) означает выброс вещей без интереса, например, сведение нескольких последовательностей новой строки / пробелов в одно пространство. (3) означает объединение того, что осталось в токенах, например идентификаторы, ключевые слова, литералы, знаки препинания.
Комментарии проверяются во время (2). В современных компиляторах это делается сразу детерминированным автоматом.
Сценарий анализируется и разбивается на токены .
Вы действительно можете попробовать это самостоятельно на любом правильном исходном коде 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 */')); ?>
Во время компиляции существует фаза токенизации. На этом этапе он видит //, а затем просто игнорирует все до конца строки. Компиляторы МОГУТ усложняться, но по большей части довольно прямолинейны.