Разница между компиляторами и парсерами? - PullRequest
20 голосов
/ 17 декабря 2009

По концепции / функции / реализации, чем отличаются компиляторы от парсеров?

Ответы [ 7 ]

43 голосов
/ 17 декабря 2009

Компилятор часто состоит из нескольких компонентов, один из которых является синтаксическим анализатором. Общий набор компонентов в компиляторе:

  • Lexer - разбить программу на слова.
  • Parser - проверьте правильность синтаксиса предложений.
  • Семантический анализ - убедитесь, что предложения имеют смысл.
  • Оптимизатор - редактируйте предложения для краткости.
  • Генератор кода - выводить что-то с эквивалентным семантическим значением, используя другой словарь. <Ч /> Чтобы добавить немного:

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

Давным-давно я написал компилятор C (фактически несколько: семейство Introl-C для микроконтроллеров), который использовал рекурсивное приличное и выполнял синтаксическую и семантическую проверку во время синтаксического анализа и создавал древовидное представление программы, код которой был генерироваться.

Сегодня я работаю над компилятором , который выполняет исходный код -> токены -> AST -> IR -> код, в значительной степени, как я описал выше.

4 голосов
/ 17 декабря 2009

Компилятор всегда имеет парсер внутри. Парсер просто обрабатывает язык и возвращает его древовидное представление, компилятор генерирует что-то из этого дерева, фактические машинные коды или другой язык.

3 голосов
/ 17 декабря 2009

A парсер является одним из элементов компилятора .

Ищете различия между интерпретатором и компилятором?

2 голосов
/ 17 декабря 2009

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

Итак, парсер является частью компилятора.

2 голосов
/ 17 декабря 2009

Парсер просто считывает текст во внутреннее, более абстрактное представление, часто в какое-то дерево или граф.

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

0 голосов
/ 05 февраля 2016

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

0 голосов
/ 17 декабря 2009

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...