Номенклатура разбора и компиляции - PullRequest
1 голос
/ 08 февраля 2012

Если я разбиваю процесс компиляции для исходного файла C или C ++ на следующие шаги:

  • A: Предварительная обработка.
  • B: Токенизация (сбор и перечисление ключевых слов, идентификаторов, символы, литералы (строки, символы, числа)).
  • C: Сборка собранных токенов в структурированную форму, например дерево.
  • D: Обработка и проверка этой структурированной формы путем анализаего семантика.
  • E: Генерация списка инструкций (например, ASM).

Мои вопросы номенклатуры:

  1. Синтаксический ли синтаксический анализ всех#abc?#ДО НАШЕЙ ЭРЫ?просто #C?
  2. Какие термины я должен использовать для #ABC?#ДО НАШЕЙ ЭРЫ?#C?
  3. Что здесь лексинг?Это просто #B?
  4. Является ли #D семантический анализ?

Ответы [ 2 ]

0 голосов
/ 08 февраля 2012

(A) - простая предварительная обработка: вырезать и вставить
(B) - лексический анализ
(C) - синтаксический анализ [синтаксический анализ]
(D) это семантический анализ [число 5 в прикрепленной ссылке]

Ваш A,B,C,D в основном является внешним компилятором, тогда как ваш E являетсяпоследний этап его бэкэнд

0 голосов
/ 08 февраля 2012

Хотя только этап предварительной обработки является частью языкового стандарта, большинство платформ делят весь процесс сборки на

  • предварительную обработку,
  • компиляцию,
  • сборку,
  • linking.

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

Некоторые современные системы, использующие некоторую форму «оптимизации времени компоновки», могут откладывать или повторять этап компиляции / сборки, пока все составляющие объектные файлы не будут обработаны один раз, но морально этоне сильно отличается от того, если вы просто объедините все входные файлы вашего проекта в один большой файл и скомпилируете его.

...