Обсуждение:Конспект лекций «Методы построения компиляторов»

Материал из Вики ИТ мехмата ЮФУ
Перейти к: навигация, поиск

Роль лексера

> В таблицу символов заносятся имена, присутствовавшие в исходном тексте — об этом обычно заботится лексический анализатор, заменяя идентификаторы, пришедшие из входного потока на некоторые стандартные (например, id1, id2, ...).

Думаю, что заботится все-таки о занесении в таблицу символов даже не синтаксический анализатор, 
а построитель семантического дерева Admin 21:22, 6 апреля 2009 (MSD)

Я про синтаксический анализатор вроде ни слова не сказал. Вообще, ориентировался на Ахо почти во всём, что писал. В данном случае:
Если лексическим анализатором в исходной программе обнаружен идентификатор, он записывается в таблицу символов.
Однако атрибуты идентификатора обычно не могут быть определены в процессе лексического анализа...
В процессе остальных фаз информация об идентификаторах вносится в таблицу символов и используется различными способами.
(изд 1., стр. 31)
Предлагаю обсуждать на странице обсуждения, а сюда заносить только конечный результат.
Я думаю, что вы здесь полностью в своём праве и можете исправлять то, с чем не согласны. — Ulysses 22:56, 6 апреля 2009 (MSD)

Ну, продолжаю. Да, я понимаю, что Вы - про лексический анализатор. Но откровенно говоря, лексический анализатор сам по себе не вносит в таблицу символов ничего. На его этапе еще рано что-то знать об идентификаторах. К примеру, одинаковые идентификаторы в разных пространствах имен не может распознать ни лексический ни даже синтаксический анализатор.

Трудно понять, что Ахо имел в виду. Видимо, следующее. Синтаксический анализатор вызывает лексический для получения следующей лексемы. И поскольку как правило сразу выполняется семантическое действие, то только что возвращенный лексером идентификатор заносится семантическим анализатором в таблицу символов. Именно семантическим. Синтаксического тут недостаточно.

Лексер для идентификатора возвращает тип - то, что это идентификатор - и значение - ну, видимо, строку с этим идентификатором.

Ага, понимаю, спасибо за пояснение. Если вам не сложно, поправите, как считаете нужным (можно вообще убрать). — Ulysses 00:49, 7 апреля 2009 (MSD)