
Ориентированный граф — (мульти) граф, рёбрам которого присвоено направление. Направленные рёбра именуются также дугами, а в некоторых источниках и просто рёбрами. Граф, ни одному ребру которого не присвоено направление, называется неориентированным графом или неорграфом.
Нисходящий синтаксический анализ — это один из методов определения принадлежности входной строки к некоторому формальному языку, описанному LL(k) контекстно-свободной грамматикой. Это класс алгоритмов грамматического анализа, где правила формальной грамматики раскрываются, начиная со стартового символа, до получения требуемой последовательности токенов.
Кодогенерация — часть процесса компиляции, когда специальная часть компилятора, кодогенератор, конвертирует синтаксически корректную программу в последовательность инструкций, которые могут выполняться на машине. При этом могут применяться различные, в первую очередь машинно-зависимые оптимизации. Часто кодогенератор является общей частью для множества компиляторов. Каждый из них генерирует промежуточный код, который подаётся на вход кодогенератору.
В информатике лексический анализ — процесс аналитического разбора входной последовательности символов на распознанные группы — лексемы, с целью получения на выходе идентифицированных последовательностей, называемых «токенами». В простых случаях понятия «лексема» и «токен» идентичны, но более сложные токенизаторы дополнительно классифицируют лексемы по различным типам. Лексический анализ используется в компиляторах и интерпретаторах исходного кода языков программирования, и в различных парсерах слов естественных языков.

Синтакси́ческий ана́лиз в лингвистике и информатике — процесс сопоставления линейной последовательности лексем естественного или формального языка с его формальной грамматикой. Результатом обычно является дерево разбора. Обычно применяется совместно с лексическим анализом.
Снижением стоимости операций в теории компиляторов называют замену медленных операций, например, умножения и деления, на более быстрые, такие как сложение, вычитание, сдвиг. Так, деление (умножение) на
равносильно сдвигу на
разрядов вправо (влево).
Альфред Ахо — канадский учёный-информатик, внесший заметный вклад в теорию и практику компиляции языков программирования, тьюринговский лауреат (2020). Член НАН США (2022), эмерит-профессор Колумбийского университета. Среди основных работ — «Теория синтаксического анализа, перевода и компиляции» и «облегчённая» версия книги — «Компиляторы: принципы, технологии и инструменты».
SSA — промежуточное представление, используемое компиляторами, в котором каждой переменной значение присваивается лишь единожды. Переменные исходной программы разбиваются на версии, обычно с помощью добавления суффикса, таким образом, что каждое присваивание осуществляется уникальной версии переменной. В SSA-представлении DU-цепи заданы явно и содержат единственный элемент.
Свёртка констант и распространение констант — часто используемые в современных компиляторах оптимизации, уменьшающие избыточные вычисления, путём замены константных выражений и переменных на их значения. Так же часто применяется расширенный алгоритм sparse conditional constant propagation, выполняющий одновременно распространение констант и удаление некоторого мёртвого кода.
В программировании и теории компиляторов, недостижимым кодом называют часть кода программы, которая ни при каких условиях не может быть исполнена, поскольку является недостижимой в графе потока управления.
Достигающие определения — одна из наиболее распространенных и полезных схем потока данных. Зная, где именно в программе может быть определена каждая переменная x
при достижении потоком управления каждой точки p
, можно получить много информации об этой переменной. В частности, компилятор может выяснить, является ли x
константой в точке p
, а отладчик может сообщить о возможном использовании в точке p
не инициализированной переменной x
.
Граф вызовов в теории построения компиляторов — ориентированный граф, который изображает вызовы между функциями в компьютерной программе. В частности, каждый узел представляет собой некоторую процедуру, а каждая дуга показывает, что процедура f вызывает процедуру g.
Удаление общих подвыражений — оптимизация компилятора, которая ищет в программе вычисления, выполняемые более одного раза на рассматриваемом участке, и удаляет вторую и последующие одинаковые операции, если это возможно и эффективно. Данная оптимизация требует проведения анализа потока данных для нахождения избыточных вычислений и практически всегда улучшает время выполнения программы в случае применения.
Расщепление цикла — оптимизация компилятора, которая пытается упростить цикл или устранить зависимости в цикле, разбив его на несколько частей, имеющих одно и то же тело исходного цикла и различные диапазоны счётчика.
Индуктивная переменная — переменная в циклах, последовательные значения которой образуют арифметическую прогрессию. Наиболее распространенный пример — счётчик цикла. Индуктивные переменные часто используются в индексных выражениях массивов.
Расщепление тела цикла — оптимизация компилятора, которая разбивает цикл в программе на несколько циклов, каждый из которых имеет те же индексные границы, однако содержит только часть тела исходного цикла.
Инверсия цикла — оптимизация компилятора и трансформация цикла, в ходе которой While-цикл заменяется на оператор ветвления, содержащий Do-While-цикл. При правильном использовании данная оптимизация повышает производительность за счет конвейеризации.
Перестановка циклов — оптимизация компилятора при которой меняется порядок итерационных переменных, относящихся к группе вложенных циклов. Итерационная переменная, используемая во внутреннем цикле, перемещается во внешний цикл, и наоборот. Это часто делается, чтобы гарантировать, что элементы многомерных массивов доступны в том порядке, в котором они хранятся в памяти, т.е. для улучшения локальности ссылок.
Моника С. Лам — профессор факультета информатики Стэнфордского университета, основатель компаний MokaFive и Omlet, соавтор второй редакции канонического учебника по проектированию компиляторов «Компиляторы: принципы, технологии и инструменты».