Как лексер возвращает семантическое значение, которое использует анализатор? - PullRequest
0 голосов
/ 17 ноября 2009

Всегда ли это нужно делать? На что это похоже?

Ответы [ 3 ]

1 голос
/ 30 ноября 2009

Лексеры не имеют дело с семантикой, они имеют дело только с превращением потока символов в токены (последовательности символов, имеющие значение для компилятора). Семантика определяется во время синтаксического анализа. См. ответ на предыдущий вопрос для получения дополнительной информации об этапах компиляции.

0 голосов
/ 30 ноября 2009

В yacc ваш лексер получает глобальную переменную с именем yylval, которая является объединением Си. Вернувшись в yacc, это становится значением для $1, $2 и т. Д.

0 голосов
/ 30 ноября 2009

Lexer не заботится о семантике. Единственная миссия в жизни для лексеров - преобразовать исходный код (поток символов) в токены, каждый из которых имеет эту форму <Token_type, Information_related_to_token> информация может быть значением токена (строки), название оператора (=) ...

Затем токены отправляются парсеру, который занимается синтаксическим анализом. в качестве дополнительного задания лексер может создать таблицу символов.

...