Ищете четкое определение того, что такое" токенизатор"," парсер "и" лексеры " и как они связаны друг с другом и используются?
Я ищу четкое определение того, что такое" токенизатор"," парсер "и" лексер " и как они связаны друг с другом (например, использует ли парсер токенизатор или наоборот)? Мне нужно создать программу, которая будет проходить через исходные файлы c/h для извлечения декларации и определений данных.
Я искал примеры и могу найти некоторую информацию, но я действительно изо всех сил пытаюсь понять основные понятия, такие как правила грамматики, деревья разбора и абстрактное синтаксическое дерево и как они взаимодействуют друг с другом. В конечном итоге эти понятия должны быть сохранены в реальной программе, но 1) как они выглядят, 2) есть общие реализаций.
Я смотрел на Википедию по этим темам и программам, таким как Lex и Yacc, но никогда не проходил через класс компилятора (ee major), мне трудно полностью понять, что происходит.
4 ответов:
токенизатор разбивает поток текста на токены, обычно ища пробелы (вкладки, пробелы, новые строки).
лексер в основном является токенизатором, но он обычно придает дополнительный контекст токенам-этот токен является числом, этот токен является строковым литералом, этот другой токен является оператором равенства.
парсер берет поток токенов из лексера и превращает его в абстрактное синтаксическое дерево, представляющее (обычно) программу, представленную оригиналом текст.
насколько я знаю, лучшая книга на эту тему была "компиляторы: принципы, методы и инструменты" обычно известный как "книга Дракона".
пример:
int x = 1;лексер или токенизатор разделит ЭТО на токены 'int', 'x', '=', '1', ';'.
парсер возьмет эти маркеры и использует их, чтобы понять каким-то образом:
- у нас есть заявление
- это определение целого числа
- целое число называется 'x'
- 'x' должен быть инициализирован со значением 1
Я бы сказал, что лексер и токенизатор-это в основном одно и то же, и что они разбивают текст на его составные части ("токены"). Затем синтаксический анализатор интерпретирует маркеры с помощью грамматики.
Я бы не слишком зацикливался на точном терминологическом использовании, хотя - люди часто используют "разбор" для описания любого действия интерпретации куска текста.
( добавление к заданным ответам)
- токенизатор будет и удалить любые комментарии, и только вернуть маркеры к Лексеру.
- лексер будет и определите области для этих токенов (переменных / функций)
- затем парсер построит структуру кода/программы
Comments