PHP: Как пропущены комментарии?

Хорошо, если я что-то прокомментирую, он пропущен на всех языках, но как они пропущены и что читается?

Пример:

// This is commented out 

Теперь PHP читает весь комментарий, чтобы перейти к следующим строкам или просто читает // ?

Ваш вопрос не имеет смысла. Прочитав «//», он должен продолжить чтение в новой строке, чтобы найти его. У этого нет выбора. Другого способа найти новую строку нет.

Концептуально компиляция имеет несколько фаз, логически до разбора:

  1. Сканирование.
  2. Скрининг.
  3. Лексемизация.

(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 */')); ?> 

Во время компиляции существует фаза токенизации. На этом этапе он видит //, а затем просто игнорирует все до конца строки. Компиляторы МОГУТ усложняться, но по большей части довольно прямолинейны.

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