Обсуждение:Конспект лекций «Методы построения компиляторов»
Роль лексера
> В таблицу символов заносятся имена, присутствовавшие в исходном тексте — об этом обычно заботится лексический анализатор, заменяя идентификаторы, пришедшие из входного потока на некоторые стандартные (например, id1, id2, ...).
Думаю, что заботится все-таки о занесении в таблицу символов даже не синтаксический анализатор, а построитель семантического дерева Admin 21:22, 6 апреля 2009 (MSD) Я про синтаксический анализатор вроде ни слова не сказал. Вообще, ориентировался на Ахо почти во всём, что писал. В данном случае: Если лексическим анализатором в исходной программе обнаружен идентификатор, он записывается в таблицу символов. Однако атрибуты идентификатора обычно не могут быть определены в процессе лексического анализа... В процессе остальных фаз информация об идентификаторах вносится в таблицу символов и используется различными способами. (изд 1., стр. 31)
Предлагаю обсуждать на странице обсуждения, а сюда заносить только конечный результат. Я думаю, что вы здесь полностью в своём праве и можете исправлять то, с чем не согласны. — Ulysses 22:56, 6 апреля 2009 (MSD)
Ну, продолжаю. Да, я понимаю, что Вы - про лексический анализатор. Но откровенно говоря, лексический анализатор сам по себе не вносит в таблицу символов ничего. На его этапе еще рано что-то знать об идентификаторах. К примеру, одинаковые идентификаторы в разных пространствах имен не может распознать ни лексический ни даже синтаксический анализатор.
Трудно понять, что Ахо имел в виду. Видимо, следующее. Синтаксический анализатор вызывает лексический для получения следующей лексемы. И поскольку как правило сразу выполняется семантическое действие, то только что возвращенный лексером идентификатор заносится семантическим анализатором в таблицу символов. Именно семантическим. Синтаксического тут недостаточно.
Лексер для идентификатора возвращает тип - то, что это идентификатор - и значение - ну, видимо, строку с этим идентификатором.
Ага, понимаю, спасибо за пояснение. Если вам не сложно, поправите, как считаете нужным (можно вообще убрать). — Ulysses 00:49, 7 апреля 2009 (MSD)